我正在尝试正确使用ESC / POS打印到USB端口上的串行票据打印机(使用USB-SERIAL适配器)。
我对PYTHON和PHP都有同样的问题。
我正在使用phpSerial打开并写入PHP上的串口和PYTHON上的pyserial。
我遇到的问题是似乎可以工作,除非我尝试打印更长的邮件。我发现的所有示例都使用Basic或Java,它们似乎使它像我正在尝试的那样工作。
这是我的python代码:
import serial
ser = serial.Serial('COM5');
ser.write('\x1b\x40'); # esc @ (init)
ser.write('\x0a'); #line feed
ser.write('\x0a'); #line feed
ser.write('Hello World'); #text
ser.write('\x0a'); #line feed
ser.write('\x1d\x56\x42\x03'); #cut the paper
有效。除非我尝试这个:
import serial
ser = serial.Serial('COM5');
ser.write('\x1b\x40'); # esc @ (init)
ser.write('\x0a'); #line feed
ser.write('\x0a'); #line feed
ser.write('Hello World'); #text
ser.write('Hello World'); #text
ser.write('Hello World'); #text
ser.write('Hello World'); #text
ser.write('Hello World'); #text
ser.write('\x0a'); #line feed
ser.write('\x1d\x56\x42\x03'); #cut the paper
然后它打印Hello World几次并且它会突然停止(它不会剪切纸张或打印正确数量的线条)。
在PHP上我有这个(我正在使用我在网上找到的一个类来生成ESC / POS命令):
require('php_serial.class.php');
require('php_receipt.class.php');
$serial = new phpSerial;
$recibo = new Receipt;
$serial->deviceSet("COM5");
$serial->deviceOpen('w');
$recibo->init();
$recibo->writeLf("Testing printer");;
$recibo->feedCut();
$recibo->finalize();
$escribir = $recibo->__toString();
$serial->sendMessage($escribir);
$serial->deviceClose();
再一次,这很有效。除此之外:
$recibo->init();
$recibo->writeLf("Testing printer");
$recibo->writeLf("Testing printer");
$recibo->writeLf("Testing printer");
$recibo->writeLf("Testing printer");
$recibo->writeLf("Testing printer");
$recibo->writeLf("Testing printer");
$recibo->feedCut();
$recibo->finalize();
$escribir = $recibo->__toString();
$serial->sendMessage($escribir);
在印刷的纸张上,我得到Testing printer
3次,然后就死了。
我现在要做的是解决这个问题,打开并关闭我打印的每一行的端口。但它会打印所以慢。
我错过了什么?我在网上找不到任何东西!
答案 0 :(得分:1)
经过一段时间的战斗,我正在回答我自己的问题。
似乎因为我使用USB转串口适配器,缓冲区大小太小导致传输的信息被切断。要解决此问题,需要将打印机设置为4kb
缓冲区(而不是40 bytes
)。这是通过打印机底部的DIP开关完成的。
对于 TM-U220 打印机(我使用的打印机),需要将DIP开关1(DSW1)的2号开关设置为关闭。以下是有关如何在此特定打印机上配置DIP开关的更多信息:
http://content.epson.de/fileadmin/content/files/RSD/AnwenderhandPDFs/DE/TM-U220_user_multi.pdf