如何在 POS for .NET 中使用 DirectIO() 发送查询命令?

How to send an enquiry command with DirectIO() in POS for .NET?

我目前正在开展一个项目,使用 C#、POS for .NET 和 Honeywell 的 POS4NET Suite 来控制 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() 发送查询命令的正确方法是什么?

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

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

我通常将 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;