有没有办法使用 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
我正在向库中添加一个方法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