【问题标题】:Printing with ESC/POS on Windows through Serial port通过串口在 Windows 上使用 ESC/POS 打印
【发布时间】:2013-12-21 20:02:18
【问题描述】:

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

我对 PYTHON 和 PHP 都有同样的问题。

我在 PHP 上使用 phpSerial 打开并写入串行端口,在 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 次,然后它就死了。

我现在解决这个问题的方法是打开和关闭我打印的每一行的端口。但它的打印速度如此那么慢。

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

【问题讨论】:

    标签: php serial-port


    【解决方案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

    【讨论】:

    • 您发送的数据量不可能超过打印机缓冲区。我会研究流量控制和/或波特率。使用打印机设置的当前值。
    • 我也尝试过调整所有这些设置,但没有任何效果。我移动了那些 DIP 开关和 BAM。工作美丽。
    猜你喜欢
    • 2011-10-06
    • 2018-09-25
    • 1970-01-01
    • 2017-10-21
    • 2014-06-27
    • 2014-12-14
    • 1970-01-01
    • 2014-08-25
    • 2022-12-28
    相关资源
    最近更新 更多