1

我目前正在开展一个项目,使用 C#、POS for .NET 和 Honeywell 的 POS4NET 套件来控制 Honeywell Genesis 7580G 扫描仪。我想获取当前的串行读取超时,所以我通过以下方式从 POS4NET 调用 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() 发送查询命令的正确方法是什么?

4

2 回答 2

0

我通常将 POS for .NET 与财务打印机 POS 一起使用。当我需要发送 DirectIO 时,我使用这种类型的代码来发送和接收响应:我希望它有用

string[] strObj = new string[1];
DirectIOData dirIO;
int iData;
strObj[0] = "01";
dirIO = posCommonFP.DirectIO(0, 1138, strObj);
iData = dirIO.Data;
strObj = (string[])dirIO.Object;
于 2019-10-21T14:18:56.350 回答
0

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

BitConverter.ToString()请使用代替检查字节数组数据的内容Encoding.ASCII.GetString()

于 2017-11-28T04:52:53.040 回答