Как определить, был ли термопринтер отключен от com-порта? - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь печатать на термопринтере, который использует ком-порт.И я хотел бы определить, подключен принтер или нет.

Я предполагал, что если я попытаюсь запустить коды, которые пытаются напечатать без подключения принтера, я получу какую-то ошибку.Поэтому я использовал блок try-catch.Ниже я попробовал следующее.

using System.IO.Ports;

private readonly SerialPort _printer = new SerialPort(Port, BaudRate, Parity, DataBits, Stopbits);

private void Print(string text)
        {            
            try
            {
                if (!_printer.IsOpen)
                    _printer.Open();               

                _printer.WriteLine(text);

                _printer.Close();
            }
            catch (Exception ex)
            {
                Logging.Log("PRINT ERROR: " + ex.Message);
            }            
        }

В большинстве случаев, если вы пытаетесь печатать программно с отключенным принтером, блок кода, который пытается печатать, выдаст ошибку.

Но в этом случае коды выполнялись так, как если бы принтер был подключен, и не было выдано никаких ошибок.

Я также пробовал событие SerialPort.ErrorReceived, но оно также не работало.

Итак, мне было интересно, есть ли способ определить состояние принтера (был ли он подключен или отключен).Спасибо за помощь.

1 Ответ

1 голос
/ 12 июня 2019

Во-первых, открывать / закрывать последовательный порт каждый процесс печати - пустая трата времени, поэтому лучше этого не делать.

Лучше открывать при запуске приложения (POS?) И закрыватьпри выходе.

Настройки аппаратного управления потоком позволяют ESC / POS-принтерам, подключенным к последовательному порту, различать онлайн / офлайн.
Однако это зависит от технических характеристик вашего принтера, поэтому, пожалуйста, проверьте детали,

  • В нормальных условиях оба сигнала CTS и DSR включены.

  • Сигнал CTS & DSR выключен, если печать не может быть выполнена какследующим образом.

    • Принтер не подключен.
    • Бумага не установлена.
    • Открыта крышка принтера.
    • Буфер приема заполнен.
    • Невозможно распечатать из-за какой-то ошибки.

Свойство SerialPort.CtsHolding / Свойство SerialPort.DsrHolding

Простой способ сделать это -проверьте вышеперечисленные сигналы перед печатью.

Более подробно, если вы хотите узнать, выключен ли сигнал CTS & DSR, он не подключен или не может быть напечатан из-за ошибки и т. д., отправьтеВыполните следующую команду и проверьте ответ. Это будет возможно.

Если ответа нет, можно определить, что он не подключен.

Соответствующая страница на японском языке.
DLE EOT

DLE EOT n (n = 2 или 3)
0x10 0x04 0x02 или 0x03

0x10 0x04 0x02: автономный статус
0x10 0x04 0x03:статус ошибки

...