【发布时间】:2017-01-03 18:40:41
【问题描述】:
这是我第一次在 stackoverflow 上发帖。
我正在运行一个 Windows 窗体 (C#) 应用程序,该应用程序需要连接到 zebra ttp 2010 打印机所连接的串行端口(在本例中为 COM1),并发送一些打印机可以理解的 KPL 命令并打印我的内容想。
目前我正在做这个非常简单的代码:
serialPort1.PortName = "COM1";
serialPort1.Open();
//command that prints a EAN barcode
//i have tested the command using the zebra toolbox.exe and works as intended
string str = "<ESC>BS<0><0><h 48><0><0><00><0><h 40><0><2><02><ESC>BW<00>123456789<00><LF><RS>";
serialPort1.Write(str);
serialPort1.Close();
当我执行此代码时,没有打印任何内容,但如果我按下打印机侧面的物理“进纸”按钮,弹出的纸张中会写入我的字符串,而不是命令的结果。
我也尝试将字符串转换为字节数组,但最终结果是一样的。
byte[] toBytes = Encoding.ASCII.GetBytes(str);
serialPort1.Write(toBytes, 0, toBytes.Length);
serialPort1.Close();
因此,我不仅无法让打印机打印接收到的数据,而且打印机也没有将数据视为 KPL 命令。
有人知道我做错了什么,我该如何解决?
****编辑*****
我弄清楚我做错了什么。我不能简单地将我的文本转换为字节数组,因为这不会将 KPL 命令(例如"<ESC>")转换为其十六进制表示。
通过嗅探 com 端口,我发现例如换行命令由“0A”表示 所以当我这样做时:
byte[] toSend = { 0x1B, 0x74, 0x00, 0x0A, 0x00, 0x14, 0x00, 0x50, 0x61, 0x72, 0x6B, 0x4E, 0x61, 0x6D, 0x65, 0x00, 0x0A, 0x0A, 0x0D, 0x1E };
sp.Write(toSend, 0, toSend.Length);
打印机自动开始打印
【问题讨论】:
标签: c# printing serial-port zebra-printers