Есть ли способ получить состояние термопринтера с помощью команд ESC? - PullRequest
0 голосов
/ 14 мая 2019

Я добавляю метод в библиотеку escpos-coffee , который возвращает состояние термопринтера, т. Е. Находится ли он в режиме онлайн / в автономном режиме, заканчивается ли бумага или бумага заканчивается, или открыт ли / закрыт ли кассовый ящик.

Я добавил метод showPrinterStatus в библиотеку escpos-coffee, основанную на команде ESC c 3 , которая отправляет команду на принтер в байтовой форме. Этот метод предположительно включает датчик конца бумаги для рулонной бумаги, а также датчик конца бумаги для рулонной бумаги. Кроме того, я добавил еще один метод "TransStatus", основанный на команде 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 отправляет сигнал на термопринтер, но, как представляется, метод TransferStatus вообще не вызывает никакой связи. Кроме того, если я проверяю состояние кассового ящика и оставляю кассовый ящик открытым, связь вообще отсутствует, и запрос просто ставится в очередь. После того, как я вставил денежный ящик обратно, потребуется 5-10 минут для выполнения команды принтером, который все еще находится в очереди все это время.

Что-то я забываю в своей реализации или есть лучший способ, чем Device Monitoring Studio, для отображения состояния принтера?

1 Ответ

1 голос
/ 29 мая 2019

У меня была такая же проблема, но я был подключен через 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 

он выводит данные в буферэто не печатает это на бумаге

...