Php 通过串行端口在Windows上使用ESC/POS打印
我正在尝试使用ESC/POS在USB端口(使用USB串行适配器)上正确地打印到串行票据打印机 PYTHON和PHP都有同样的问题 我使用PHP和PYTHON打开和写入串行端口 我遇到的问题是,它似乎有效,除非我试图打印更长的消息。我找到的所有例子都是关于Basic或Java的,它们似乎使它像我试图做的那样工作 以下是我的python代码:Php 通过串行端口在Windows上使用ESC/POS打印,php,serial-port,Php,Serial Port,我正在尝试使用ESC/POS在USB端口(使用USB串行适配器)上正确地打印到串行票据打印机 PYTHON和PHP都有同样的问题 我使用PHP和PYTHON打开和写入串行端口 我遇到的问题是,它似乎有效,除非我试图打印更长的消息。我找到的所有例子都是关于Basic或Java的,它们似乎使它像我试图做的那样工作 以下是我的python代码: import serial ser = serial.Serial('COM5'); ser.write('\x1b\x40'); # esc @ (in
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命令):
同样,这也很有效。除此之外:
$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);
在打印纸上,我对打印机进行了三次测试,然后它就死了
我现在要做的就是为我打印的每一行打开和关闭端口。但它的打印速度如此之慢
我错过了什么?我在网上什么也没找到 经过一段时间的争论,我在回答我自己的问题 因为我使用的是USB到串行端口适配器,所以缓冲区太小,导致传输的信息被切断。要修复它,需要将打印机设置为
4kb
缓冲区(而不是40字节
)。这是通过打印机底部的DIP开关完成的
对于TM-U220打印机(我使用的那台),DIP开关1(DSW1)的2号开关需要设置为off。以下是有关如何在此特定打印机上配置DIP开关的详细信息:
您发送的数据量不太可能超过打印机缓冲区。我会研究流量控制和/或波特率。使用打印机设置的当前值。我也尝试过摆弄所有这些设置,但没有任何效果。我移动了那些DIP开关和BAM。工作是一种美。
$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);