我在電腦上接个扫描枪,我想在一定的条件下给他发出指令,让他发出不同的声音,格式是
[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);  
 

解决方案 »

  1.   

    串口需要初始化,再写的,.net有类库可以使用,也可以用win32的dll,c的代码,.net调用更快点
      

  2.   

    你是将serialport控件拖到窗口里的吧,那首先要知道你连扫描抢的端口号,然后在属性里面设置波特率,停止位,校验位等等,不知道就选默认,但起码要设置端口号也就是com1 com2 com3这种.最后在form_load函数里打开端口:
    serialport1.open();然后才能发送
      

  3.   


    这个我有做,扫描出来read也没问题,我是想在扫描到不是自己想要的条码时 发出蜂鸣 ,但是我写的代码没反应。。
      

  4.   

    说明书上有固定格式[Gun_Addr ] [ G un_Addr _del i m i t er]    MESSAG E  CR,
    我只要照着给扫描枪 返回去就好了,我使用write往里写的不知道为什么不对
      

  5.   


    先确认下你按照固定格式发送的数据是否正确,比如地址和指令对了没有。
    另外,你用Write(string)的形式,实际上发送的是ASCII码,确认下扫描枪能不能识别ASCII码
      

  6.   

    你的意思是 write 应该就行了,没有其他什么要操作的了吗?
      

  7.   


    不是我是说扫描枪接收到的数据是否正确,你看下扫描枪接收到的都是什么数据。因为你的代码是往在编码的基础上往串口写字符串,无法保证你扫描枪可以解ASCII码
      

  8.   

    这种东西懂的人也不多,当然没多少人气啦要看接收到啥,首先要弄个串口调试工具,比如UartAssist或者ComTools等等,这些工具都能够直接发送数据到扫描枪,然后你按照发送协议手动敲命令看看有没有成功,扫描枪是否有返回值
    试过一遍之后就知道问题在哪里了
      

  9.   

    楼主你先看看serialPort的详细资料,扫描枪接收到的数据你可以查看到吗?我感觉扫描枪这些东西,应该是按十六进制接收数据的。你看下扫描枪的说明书,看它是怎么接收数据的。既然你对扫描枪和serialPort都不怎么了解,试试10楼的方法,抛开serialPort,先用串口助手发送指令给扫描枪,看能不能让扫描枪正常工作。
      

  10.   

    我試了那個工具,点击发送 receive的数据为0
      

  11.   

    我搞出來的十六进制30 30 30 31 1B 5B 30 71 ,ASCII我也试了  显示发送25,接收0 接收的那个BOX也是空的
      

  12.   


    接收的那个BOX是什么????扫描枪的吗?
    是不是你通过串口助手向扫描枪发送30 30 30 31 1B 5B 30 71?
      

  13.   

    给你个我写的带源码的C#版本的串口调试工具,自己调试吧,有什么要改的自己改源码。
    我怀疑你的命令组织根本就是错误的。
    http://download.csdn.net/detail/yeqi3000/4853494
      

  14.   


    http://download.csdn.net/detail/anyi25_it/2723989说明书和这个一样的
      

  15.   

    http://download.csdn.net/detail/hero1044617901/4984629
      

  16.   

    大致看了下说明书,主机给扫描枪发送命令的格式是[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);
      

  17.   

    試了,不对,我想问下 Gun_Addr{delimiter  这到底是指什么,我在说明书就没看到
      

  18.   


    我给你提供的方法是在未设置地址和delimiter的情况下,你到底设没设呢。自己看吧
      

  19.   

    你要是把握不准,就直接禁用Gun Address Stamping 和Gun Address Delimiter,这样在发送指令的时候就不用发这两个东西了。
      

  20.   

    disable reader  address stamping
    disable cradle address stamping 
    disable reader  address delimiter
    disable cradle address delimiter
    四个全扫了 还是没效果
      

  21.   

    没见过串口通讯直接发字符串的,也就是说协议不可能定义成字符串。
    如果非要找原因那就是编码问题,如果有厂家提供的demo的话,可以拿串口监控程序跟踪下,看看发的16禁止是啥样子的,再对比你发的指令看看错到哪了。
    一般来说你发命令成功后下位机都会给你回复,除非你的指令就非法。
      

  22.   

    再补充下 
    你觉得单片机还会判断编码吗?
     Encoding.ASCII.GetBytes(str);单片机没那么智能,说明书上有固定格式[Gun_Addr ] [ G un_Addr _del i m i t er]    MESSAG E  CR,
    这只是个说明,具体你的看例子,或者其他语言的代码例子也行,
    或者协议的举例
      

  23.   

    我的前辈们用的是MSCOMM.output = 我发的一串代码 是可行的啊。我换成serialport怎么就不对呢
      

  24.   


    如果你的前辈们有成功的例子,那你先确保你的其它条件都跟他们的一样。
    你扫描枪设置的波特率跟serialPort的一样吗?最后,我还是想问下,你是怎么把扫描枪接到电脑上的?别说是USB 
      

  25.   


    干嘛不让你的同事帮你看下呢看看你是不是有什么地方做错了,你在这描述又描述不清楚,遗漏了很多信息。
    一样的情况没道理MSCOMM可以而SerialPort不可以的,你肯定是哪里错了。
      

  26.   

    这就和培训的一样,来一个走一个对gun的读写道理不是一样吗?
      

  27.   

    要设置端口、波特率等属性
    还要使用open方法打开
      

  28.   

    再给你一个工具
    http://download.csdn.net/detail/yeqi3000/4955837
    可以监控串口上的收发数据情况。
    你先用这个工具监控一个串口,然后拿厂家提供的demo测试,这样收发的16进制数据就可以看到了。你再对比下自己收发的情况。看看错在哪。