串行通信 Zebra GC420t - 未接收
Serial communication Zebra GC420t - Not receiving
我正在尝试通过 c# 中的串行端口与 GC420t 通信。
我需要获取打印机的状态。
我想发送命令~HQES并接收状态。
我会写命令:我尝试成功打印了一些二维码。
但是当我写状态信息命令时,我没有得到任何答案。
这是我的测试代码:
//define serial port
static SerialPort _serialPort = new SerialPort("COM7", 9600, Parity.None, 8, StopBits.One);
public Serial()
{
try
{
_serialPort.Open();
WriteCommand();
ReadStatus();
}
catch (Exception ex)
{
_serialPort.Close();
}
}
public void WriteCommand()
{
string qrcode = "^XA^FO,20,20^BQ,2,10^FDD03048F,LM,N0123456789,A12AABB,B0006qrcode^FS^XZ";
string statusInfo = " ~HQES";
_serialPort.Write(statusInfo);
}
public void ReadStatus()
{
_serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
编辑:
我也可以根据要求获得该信息:
WriteCommand();
int timeout = 3000;
while (timeout > 0)
{
Thread.Sleep(10);
timeout--;
// Timeout
string status = _serialPort.ReadExisting();
}
您需要在 DataReceived
处理程序 进行任何调用之前连接 ,否则它可能在您连接之前已经应答。
将 ReadStatus
向上移动 1 行,使其紧跟在构造函数之后。
_serialPort.Open();
ReadStatus();
WriteCommand();
您应该检查打印机是否配置为使用任何形式的握手?特别是 XON/XOFF 或 DTR 。
参考用户指南第 24 页。 https://www.uline.com/PDF/IH-7246VND.PDF
如果 link 中断 - 相关文本是
"The printer has a DCE serial communication port for hardware compatibility with legacy 888 printers. The required cable must have a nine-pin "一端为 D" 型 (DB-9P) 公连接器,插入位于打印机背面的配套 (DB-9S) 串行端口。此信号接口的另一端电缆连接到主机上的串行端口。电缆是零调制解调器(交叉信号连接)电缆。有关引脚信息,请参阅附录 A。
打印机和主机(通常是 PC)之间的串行端口通信设置必须匹配才能进行可靠通信。每秒位数(或波特率)和流量控制是最常见的更改设置。主机(通常是 Windows PC)需要更改数据流控制以匹配打印机的默认通信方法:硬件,并由主机握手设置 DTR/Xon/Xoff 注明。这种组合的硬件 (DTR) 和软件 (Xon/Xoff) 模式可能需要根据使用非 Zebra 应用软件或使用的串行电缆变化而改变。"
我正在尝试通过 c# 中的串行端口与 GC420t 通信。
我需要获取打印机的状态。
我想发送命令~HQES并接收状态。
我会写命令:我尝试成功打印了一些二维码。
但是当我写状态信息命令时,我没有得到任何答案。
这是我的测试代码:
//define serial port
static SerialPort _serialPort = new SerialPort("COM7", 9600, Parity.None, 8, StopBits.One);
public Serial()
{
try
{
_serialPort.Open();
WriteCommand();
ReadStatus();
}
catch (Exception ex)
{
_serialPort.Close();
}
}
public void WriteCommand()
{
string qrcode = "^XA^FO,20,20^BQ,2,10^FDD03048F,LM,N0123456789,A12AABB,B0006qrcode^FS^XZ";
string statusInfo = " ~HQES";
_serialPort.Write(statusInfo);
}
public void ReadStatus()
{
_serialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
编辑: 我也可以根据要求获得该信息:
WriteCommand();
int timeout = 3000;
while (timeout > 0)
{
Thread.Sleep(10);
timeout--;
// Timeout
string status = _serialPort.ReadExisting();
}
您需要在 DataReceived
处理程序 进行任何调用之前连接 ,否则它可能在您连接之前已经应答。
将 ReadStatus
向上移动 1 行,使其紧跟在构造函数之后。
_serialPort.Open();
ReadStatus();
WriteCommand();
您应该检查打印机是否配置为使用任何形式的握手?特别是 XON/XOFF 或 DTR 。
参考用户指南第 24 页。 https://www.uline.com/PDF/IH-7246VND.PDF
如果 link 中断 - 相关文本是
"The printer has a DCE serial communication port for hardware compatibility with legacy 888 printers. The required cable must have a nine-pin "一端为 D" 型 (DB-9P) 公连接器,插入位于打印机背面的配套 (DB-9S) 串行端口。此信号接口的另一端电缆连接到主机上的串行端口。电缆是零调制解调器(交叉信号连接)电缆。有关引脚信息,请参阅附录 A。
打印机和主机(通常是 PC)之间的串行端口通信设置必须匹配才能进行可靠通信。每秒位数(或波特率)和流量控制是最常见的更改设置。主机(通常是 Windows PC)需要更改数据流控制以匹配打印机的默认通信方法:硬件,并由主机握手设置 DTR/Xon/Xoff 注明。这种组合的硬件 (DTR) 和软件 (Xon/Xoff) 模式可能需要根据使用非 Zebra 应用软件或使用的串行电缆变化而改变。"