【问题标题】:How to check POS printer status如何检查 POS 打印机状态
【发布时间】:2020-12-27 11:16:01
【问题描述】:

目前我正在使用 POS 打印机移动应用程序。我做过文本、图像和条形码或二维码的打印方法。现在我正在尝试使用 ESC/POS 命令检索打印机状态。下面我附上了检查打印状态的代码。


inStream = btSocket.InputStream;
outStream = btSocket.OutputStream;
                      
byte[] reader = new byte[1024];
                        
//Send command to printer
byte[] @try = "\x10\x04\x01".ToBytes();
outStream.Write(@try, 0, @try.Length);

//Read from printer
if (inStream.CanRead)
{
    //string stat_res = inStream.Read(reader).ToString();
    inStream.Read(reader, 0, reader.Length);
    string text = Encoding.UTF8.GetString(reader, 0, reader.Length);
    Debug.WriteLine($"Status res: {text}");
}

我已经测试了上面的代码,我收到了如下所述的输出。 以字符串形式输出为向上/向下箭头 [0:] Status res: ? 或整数形式 [0:] Status res: 1

我可以知道我在这里犯了什么错误吗?我已经提到了其他使用 python 或 java 开发并转换为 C# 的问题,但它仍然没有像我预期的那样产生正确的输出。我可以知道我在这里做错了什么吗?我正在使用 ESCPOS Nuget 将文本转换为字节形式。

我使用的打印机是 Bixolon,型号是 SPP-R410。我正在使用 ESC/POS 命令以 Xamarin 形式开发此应用程序。

谢谢。

【问题讨论】:

    标签: c# xamarin.forms bluetooth escpos


    【解决方案1】:

    SPP-R410 命令手册可以在这里获取。
    BIXOLON | Downloads :: mobile printer, portable printer...

    按照它的说法,第一个0x10是不必要的,只有0x04,0x01似乎是好的。

    由于要通知的状态应该是 0x12:Online 或 0x1A:Offline,因此可能是没有通知正确的数据或您的解释不正确。

    即使通知了正确的数据,也不是可打印的字符代码,所以即使执行Encoding.UTF8.GetString()处理,也无法掌握内容。
    在这种情况下,你应该做的是BitConverter.ToString()。
    或者,您可以reader[0].ToString("X") 仅读取阅读器缓冲区的第一个字节,因为只会报告一个字节。

    【讨论】:

    • 我试图从命令中删除 0x10 并且程序没有退出读取循环。无论如何,我继续使用相同的命令并执行它并根据您的想法将字节转换为字符串。当我检查文档时,它显示 0x00 为在线,0x08 为离线。您如何将 0x12 解释为在线,而将 0x1A 解释为离线?顺便说一句,修改代码后结果是 12。
    • 在从显示页面下载的命令手册的第 6 页上有描述。通知数据的 Bit4 和 Bit1 应始终上报为 1,Bit3 应上报为 1:Offline,0:Online。顺便说一句,如果更改后通知12,则表示0x12,因为它正在将字节数据转换为十六进制。那将意味着在线状态。通知的字节数据值将是各个位状态的总和。
    • 明白。我一直在以错误的方式看桌子。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    相关资源
    最近更新 更多