我正在尝试使用使用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
事件,但它也没有用。
所以,我想知道是否有办法检测打印机的状态(无论是连接还是断开连接)。感谢您的帮助。
首先,每次打印过程打开/关闭串口都是浪费时间,所以最好不要这样做。
启动应用程序时最好打开(POS?并在退出时关闭。
硬件流控制的设置使连接到串行端口的 ESC/POS 打印机能够区分联机/脱机。
但是,这取决于打印机的规格,因此请检查详细信息。
-
在正常情况下,CTS 和 DSR 信号都打开。
-
无法按如下方式执行打印时,CTS 和 DSR 信号关闭。
- 打印机未连接。
- 纸张未设置。
- 打印机护盖已打开。
- 接收缓冲区已满。
- 由于某些错误而无法打印。
SerialPort.CtsHolding Property/SerialPort.DsrHolding Property
执行此操作的简单方法是在打印前检查上述信号。
更详细地说,如果您想知道CTS和DSR信号是否关闭,未连接或由于错误等原因无法打印,请发送以下命令并检查响应这是可能的。
如果没有响应,则可以确定它未连接。
相应的页面是日语。
德利 EOT
DLE EOT n (n=2 或 3)
0x10 0x04 0x02 或 0x03
0x10 0x04 0x02:脱机状态
0x10 0x04 0x03:错误状态