我在電腦上接个扫描枪,我想在一定的条件下给他发出指令,让他发出不同的声音,格式是
[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 ] [ 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);
解决方案 »
- 关于屏幕录像带音频的问题,求解
- 求教 winform 程序如何连接PDA,进行文件操作?
- C# DataGrid列只能输入数字
- 问一个在.NET里面使用SQLite的错误问题,请各位高手进来帮忙看看
- C# 更改注册表键值Administrator的访问权限
- 熟悉ibatisnet的进来看看,一个关于配置的问题(100分)
- c#使用net send怎么样才能向互联网发送信息呢??急呀!!!!!!!!!
- 话说Microsoft.VisualBasic命名空间的作用
- C# 设置SWG打印成PDF,不弹出PDF
- 我们为什么不开发一个这样的程序,能把机器码(*.exe文件)翻译成高级语言代码??
- 添加数据到ACCESS数据越多起慢
- 流媒体播放器实现功能及分析 C#
serialport1.open();然后才能发送
这个我有做,扫描出来read也没问题,我是想在扫描到不是自己想要的条码时 发出蜂鸣 ,但是我写的代码没反应。。
我只要照着给扫描枪 返回去就好了,我使用write往里写的不知道为什么不对
先确认下你按照固定格式发送的数据是否正确,比如地址和指令对了没有。
另外,你用Write(string)的形式,实际上发送的是ASCII码,确认下扫描枪能不能识别ASCII码
不是我是说扫描枪接收到的数据是否正确,你看下扫描枪接收到的都是什么数据。因为你的代码是往在编码的基础上往串口写字符串,无法保证你扫描枪可以解ASCII码
试过一遍之后就知道问题在哪里了
接收的那个BOX是什么????扫描枪的吗?
是不是你通过串口助手向扫描枪发送30 30 30 31 1B 5B 30 71?
我怀疑你的命令组织根本就是错误的。
http://download.csdn.net/detail/yeqi3000/4853494
http://download.csdn.net/detail/anyi25_it/2723989说明书和这个一样的
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);
我给你提供的方法是在未设置地址和delimiter的情况下,你到底设没设呢。自己看吧
disable cradle address stamping
disable reader address delimiter
disable cradle address delimiter
四个全扫了 还是没效果
如果非要找原因那就是编码问题,如果有厂家提供的demo的话,可以拿串口监控程序跟踪下,看看发的16禁止是啥样子的,再对比你发的指令看看错到哪了。
一般来说你发命令成功后下位机都会给你回复,除非你的指令就非法。
你觉得单片机还会判断编码吗?
Encoding.ASCII.GetBytes(str);单片机没那么智能,说明书上有固定格式[Gun_Addr ] [ G un_Addr _del i m i t er] MESSAG E CR,
这只是个说明,具体你的看例子,或者其他语言的代码例子也行,
或者协议的举例
如果你的前辈们有成功的例子,那你先确保你的其它条件都跟他们的一样。
你扫描枪设置的波特率跟serialPort的一样吗?最后,我还是想问下,你是怎么把扫描枪接到电脑上的?别说是USB
干嘛不让你的同事帮你看下呢看看你是不是有什么地方做错了,你在这描述又描述不清楚,遗漏了很多信息。
一样的情况没道理MSCOMM可以而SerialPort不可以的,你肯定是哪里错了。
还要使用open方法打开
http://download.csdn.net/detail/yeqi3000/4955837
可以监控串口上的收发数据情况。
你先用这个工具监控一个串口,然后拿厂家提供的demo测试,这样收发的16进制数据就可以看到了。你再对比下自己收发的情况。看看错在哪。