我正在向库escpos-coffee中添加一个方法,该方法将返回热敏打印机的状态,即它是联机/脱机状态,纸张用完还是纸张用完,或现金抽屉是否打开/关闭。
我在escpos-coffee库中添加了一种方法“ showPrinterStatus”,该方法基于ESC c 3命令,该命令以字节形式将命令发送给打印机。据推测,该方法可启用卷纸即将用尽传感器以及卷纸即将用尽传感器。此外,我基于GS r命令添加了另一种方法“ transmitStatus”,该方法发送n = 1和n = 49的纸张传感器状态,以及n = 2和n = 2的现金抽屉状态。 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方法正在向热敏打印机发送信号,但是sendStatus方法似乎根本不会引起任何通信。另外,如果我检查现金抽屉的状态并保持现金抽屉未打开,则根本没有任何通信,并且仅将请求排队。当我将现金抽屉推回后,打印机执行命令需要5到10分钟的时间,该命令一直在队列中。
在实现过程中是否有我遗忘的东西,或者有比Device Monitoring Studio更好的方法来显示打印机状态?
答案 0 :(得分:1)
我有同样的问题,但是我通过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
它将数据输出到缓冲区中,而不将其打印在纸上
答案 1 :(得分:1)
如果您使用的是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