日期:2014-05-17  浏览次数:21110 次

C# serialport 的write
我在電腦上接个扫描枪,我想在一定的条件下给他发出指令,让他发出不同的声音,格式是
[Gun_Addr ] [ G un_Addr _del i m i t er]    MESSAG E  CR
我这样写的 为什么没反应: 
string str = "0001" + (Char)27 + "[2J" + "0001" + (Char)27 + "E" + "PN OK" + (Char)27 + "E" + (Char)27 + "[6q" + (Char)27 + "E" + (Char)27 + "[0q" + (Char)27 + "E" + (Char)13;
//byte[] bt = Encoding.ASCII.GetBytes(str);
serialPort1.Write(str);  
 

------解决方案--------------------
大致看了下说明书,主机给扫描枪发送命令的格式是[GUN_Addr][Gun_Addr{delimiter] MESSAGE CR。
1、楼主确定是用RS232和电脑连接的吧
2、楼主有没有设定GUN的address stamping和address delimiter,如果没设定的话,就没必要发送地址和分隔符。
3、模式是否设置正确了, 模式不正确的话是不能正常通信的
4、命令格式里的ESC是指ASCII码里对应的ESC字符还是指字符串“ESC",此处我看到楼主发的贴子里,楼主理解的是ASCII码里的ESC字符,也就是(char)27.建议两种都试一下
5、楼主你发的指令里为什么以"E"分隔呢?
6、[GUN_Addr][Gun_Addr{delimiter]是否发正确了?
------
在没有设置扫描枪地址的情况下,试试这样

string str="ESC[0q"+(char)13;//将ESC看成字符串,让扫描枪发出短暂高音
//string str=(char)27+"[0q";//将ESC看成ASCII码字符,两种都试一下吧
serialPort1.Write(str);