Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过串行端口在Windows上使用ESC/POS打印_Php_Serial Port - Fatal编程技术网

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

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

我正在尝试使用ESC/POS在USB端口(使用USB串行适配器)上正确地打印到串行票据打印机

PYTHON和PHP都有同样的问题

我使用PHP和PYTHON打开和写入串行端口

我遇到的问题是,它似乎有效,除非我试图打印更长的消息。我找到的所有例子都是关于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命令):

同样,这也很有效。除此之外:

$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);