如何检测热敏打印机是否已从 com 端口断开连接?
How to detect if thermal printer has been disconnected from com port?
我正在尝试使用使用 com 端口的热敏打印机进行打印。我想检测打印机是否已连接。
我假设如果我尝试 运行 在不连接打印机的情况下尝试打印的代码,我会遇到某种错误。所以我使用了 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
事件,但也没用。
所以,我想知道是否有办法检测打印机的状态(无论是连接还是断开)。感谢您的帮助。
第一,opening/closing串口每次打印过程都是浪费时间,还是不做为好。
最好在启动应用程序(POS?)时打开并在退出时关闭。
硬件流控设置使ESC/POS串口连接的打印机能够区分online/offline。
但是,这取决于打印机的规格,因此请检查详细信息。
正常情况下,CTS和DSR信号都打开
无法进行如下打印时,CTS&DSR信号关闭。
- 打印机未连接。
- 未设置纸张。
- 打印机盖打开。
- 接收缓冲区已满。
- 由于某些错误无法打印。
SerialPort.CtsHolding Property / SerialPort.DsrHolding Property
执行此操作的简单方法是在打印前检查上述信号。
更详细的,如果你想知道CTS&DSR信号是否OFF,未连接或由于错误等原因无法打印,发送以下命令并查看响应它会有可能。
如果没有反应,可以确定没有连接。
对应页面为日文
DLE EOT
DLE EOT n(n=2 或 3)
0x10 0x04 0x02 或 0x03
0x10 0x04 0x02:离线状态
0x10 0x04 0x03:错误状态
我正在尝试使用使用 com 端口的热敏打印机进行打印。我想检测打印机是否已连接。
我假设如果我尝试 运行 在不连接打印机的情况下尝试打印的代码,我会遇到某种错误。所以我使用了 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
事件,但也没用。
所以,我想知道是否有办法检测打印机的状态(无论是连接还是断开)。感谢您的帮助。
第一,opening/closing串口每次打印过程都是浪费时间,还是不做为好。
最好在启动应用程序(POS?)时打开并在退出时关闭。
硬件流控设置使ESC/POS串口连接的打印机能够区分online/offline。
但是,这取决于打印机的规格,因此请检查详细信息。
正常情况下,CTS和DSR信号都打开
无法进行如下打印时,CTS&DSR信号关闭。
- 打印机未连接。
- 未设置纸张。
- 打印机盖打开。
- 接收缓冲区已满。
- 由于某些错误无法打印。
SerialPort.CtsHolding Property / SerialPort.DsrHolding Property
执行此操作的简单方法是在打印前检查上述信号。
更详细的,如果你想知道CTS&DSR信号是否OFF,未连接或由于错误等原因无法打印,发送以下命令并查看响应它会有可能。
如果没有反应,可以确定没有连接。
对应页面为日文
DLE EOT
DLE EOT n(n=2 或 3)
0x10 0x04 0x02 或 0x03
0x10 0x04 0x02:离线状态
0x10 0x04 0x03:错误状态