通过串口在Windows上使用ESC / POS进行打印

时间:2013-12-21 20:02:19

标签: php serial-port

我正在尝试正确使用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次,然后就死了。

我现在要做的是解决这个问题,打开并关闭我打印的每一行的端口。但它会打印所以慢。

我错过了什么?我在网上找不到任何东西!

1 个答案:

答案 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