2017-10-09 84 views
1

我目前正在使用C#,POS for .NET和霍尼韦尔POS4NET套件来控制霍尼韦尔Genesis 7580G扫描仪。我想获得当前的串行读超时,所以我从POS4NET以下列方式称为DIRECTIO()方法:如何在POS for .NET中使用DirectIO()发送查询命令?

string command = "TRGSTO?."; 
DirectIOData response = scanner.DirectIO(18, 1024, Encoding.ASCII.GetBytes(command)); 
byte[] buffer = (byte[])response.Object; 
Console.WriteLine("$: Response: " + Encoding.ASCII.GetString(buffer)); 

此代码打印:

“$:响应:TRGSTO20”其中缺少三个零(时间单位是毫秒)和[ACK]字符。 我期待这个...

“$:响应:TRGSTO20000 [ACK]”

但是,如果我改变命令来获取不同的设置...

string command = "BEPPWR?."; 
DirectIOData response = scanner.DirectIO(18, 1024, Encoding.ASCII.GetBytes(command)); 
byte[] buffer = (byte[])response.Object; 
Console.WriteLine("$: Response: " + Encoding.ASCII.GetString(buffer)); 

代码按预期工作,并打印

“$:响应:BEPPWR1 [ACK]”

什么是发送使用DIRECTIO()查询命令的正确方法是什么?

回答

0

响应数据是否可能已经正确到达并被转换为字符串以便它被认为以零结尾?

请使用BitConverter.ToString()而不是Encoding.ASCII.GetString()来检查字节数组数据的内容。

+1

我调查了相关规范。 查看“Genesis 7580g用户指南”第162页中的“串行触发模式:读取超时”项目,设置范围为0到300000,因此最多为6位数字,但数字参数部分命令是4位数。 但是,设置相同的值范围“免提超时”(第163页),该命令的数字参数部分为6位数。 对于“串行触发模式:读取超时”,文档/服务对象/固件之一可能不正确。 请与供应商确认哪些信息是正确的。 – kunif

相关问题