有没有办法使用 ESC 命令获取热敏打印机的状态?

Is there a way to get the status of a thermal printer using ESC commands?

我正在向库中添加一个方法escpos-coffee,其中returns热敏打印机的状态,即是否online/offline,是纸张结束还是纸张完成,或者钱箱是否open/closed。

我在escpos-coffee库中添加了一个方法"showPrinterStatus",它是基于ESC c 3 command, which sends the command to the printer in byte form. The Method supposedly enables the Roll paper near end sensor, as well as the Roll paper end sensor. Furthermore, I have added another method "transmitStatus", based on the GS r命令的,它传输n=1和n=49的纸张传感器状态,以及n=2 和 n=50 的钱箱状态。这是代码:

 /**
     *
     * @param nSignal
     * @return
     * @throws IOException
     * Method decides whether the printer should return an output paper-end signal to a parallel interface or not
     * input 1,2 4,8 to enable, 0 to disable
     */

    public EscPos showPrinterStatus(int nSignal)  throws IOException {
        write(27);
        write('c');
        write('3');
        write(nSignal);
        return this;
    }

    /**
     *
     * @param n
     * @return
     * @throws IOException
     * returns the status of the printer, 1 or 49 returns paper sensor status, 2 or 50 returns drawer kick-out connector status
     */
    public EscPos transmitStatus(int n) throws IOException{
      write(29);
      write('r');
      return this;
    }

我正在使用 Device Monitoring Studio,并期望会有一些可见的通信。看起来 showPrinterStatus 方法正在向热敏打印机发送信号,但 transmitStatus 方法似乎根本没有引起任何通信。此外,如果我检查现金抽屉状态并让现金抽屉保持打开状态,则根本没有通信,请求只是排队。一旦我将现金抽屉推回,打印机需要 5-10 分钟才能执行命令,打印机一直在队列中。

我在实施过程中是否忘记了什么,或者是否有比 Device Monitoring Studio 更好的方法来显示打印机状态?

我有同样的问题,但我是通过usb连接的,尝试使用串口然后从中读取。我不是 java 开发人员,但这是我在 python

中的解决方案
from serial import Serial
serial = Serial('/dev/ttyUSB0', 115200, timeout=.03)
serial.write(b'\x10\x04\x01')
serial.read()

另一种方法是通过终端(如果您使用的是 linux)

echo -n '\x10\x04\x01' > /dev/usb/lp0 #assuming lp0 is your printer 

cat /dev/usb/lp0 

它输出缓冲区中的数据它不打印在纸上

如果你使用的是 USB 接口,你可以尝试使用 usb4java lib,然后你可以从打印机读取字节,对我来说它适用于 linux 并显示门打开或论文结束...,但我还没有在 windows...

上测试过它
UsbEndpoint endpointIn = iface.getUsbEndpoint(endpointAddressIn);
UsbPipe pipeIn = endpointIn.getUsbPipe();
pipeIn.open();
byte[] data = new byte[1024];
int received;
received = pipeIn.syncSubmit(data);
pipeIn.close();

完整代码在 github: Usb Printer Status