背景信息:
Mac OS X Lion 10.7.3 (11D50b)
EPL: http://en.wikipedia.org/wiki/Eltron_Programming_Language http://en.wikipedia.org/wiki/Eltron_Programming_Language
英超手册:http://www.geksagon.ru/i/2/EPL2_Manual.pdf http://www.geksagon.ru/i/2/EPL2_Manual.pdf
我通过 2 端口串行转以太网服务器连接到打印机。
打印机配置读数:
UKQ1935H U UPS V4.14
S/N: 64A024100181
Serial port:96,N,8,1
Image buffer size:0245K
Fmem:001.0K,059.9K avl
Gmem:000K,0058K avl
Emem:010K,0058K avl
I8,C,001 rY
S4 D10 R000,000 ZT UN
q832 Q609,24
Option:D
oUs,t,u
10 19 29
Using PHP我能够向 EPL 打印机发送命令。
我能发送条形码和 ASCII线路没有问题。
我可以存储图像,然后使用这些图像。
Problem:
当我将二进制数据与任何其他命令混合时,奇怪的是它会崩溃。
Example:
<?php
$filename = WWW_ROOT . 'img/labels/mylogo.pcx';
$handle = fopen( $filename , 'r' );
$image = fread( $handle , filesize( $filename ) );
$bytes = strlen( $image );
fclose( $handle );
# Store the image.
# Delete twice when dealing with Printer Flash
$commands = array(
'GK"MYLOGO"', # Del
'GK"MYLOGO"', # Del
'GM"MYLOGO"' . $image_bytes, # Store
$image_data # Binary data
);
?>
这本身就很好用。
这也可以正常工作 - 如果在单独的请求上运行:
<?php
$commands = array(
'', # <-- As per the manual, a blank line prior to a new label.
'N', # Clear Image Buffer, New Label
'GG30,10,"MYLOGO"', # Get image variable MYLOGO
'P' # Print
);
?>
因此,在存储图像后,MYLOGO 将最终打印存储的徽标。
但如果我这样做:
<?php
$commands = array(
'GK"MYLOGO"', # Del
'GK"MYLOGO"', # Del
'GM"MYLOGO"' . $image_bytes, # Store
$image_data, # Binary data
'', # <-- As per the manual, a blank line prior to a new label.
'N', # Clear Image Buffer, New Label
'GG30,10,"MYLOGO"', # Get image variable MYLOGO
'P' # Print
);
?>
它打印徽标,但随后开始挂断。
如果我有 ASCII 指令,它们将无法按预期完成。
从打印机进行转储显示第一个命令序列运行,但是一旦它进入二进制数据,它就开始接收它,然后在二进制数据的中间和结尾,它开始尝试运行下一组命令( ASCII 命令),然后二进制继续。
这当然意味着它不会打印……因为在图像数据之后没有收到 P 命令。
它为什么要这样做?
所以它是有效的:何时发出 HTTP 请求,单独发出命令集(新的套接字连接)。
当两组命令都在同一个 HTTP 请求中时,它不起作用。
如果二进制数据是用其他命令生成的 - 打印机进入“奇数”状态并且必须重新启动电源才能再次开始接收命令。
End Goal:能够与其他命令传递二进制数据,并且没有任何限制。
示例代码:https://gist.github.com/de3a1ba2f0decc36b6e6 https://gist.github.com/de3a1ba2f0decc36b6e6
Images
进入转储:http://imageshack.us/photo/my-images/193/photo1any.jpg/ http://imageshack.us/photo/my-images/193/photo1any.jpg/
转储顶部:http://imageshack.us/photo/my-images/37/photo2ln.jpg/ http://imageshack.us/photo/my-images/37/photo2ln.jpg/
出现在转储中间:http://imageshack.us/photo/my-images/820/photosaz.jpg/ http://imageshack.us/photo/my-images/820/photosaz.jpg/
它“应该”是什么样子:http://imageshack.us/photo/my-images/832/photo5uc.jpg/ http://imageshack.us/photo/my-images/832/photo5uc.jpg/
仅使用 ASCII 和条形码时会是什么样子:http://imageshack.us/photo/my-images/23/photo4ucf.jpg/ http://imageshack.us/photo/my-images/23/photo4ucf.jpg/
它看起来像什么弄乱: http://imageshack.us/photo/my-images/708/photo3si.jpg/ http://imageshack.us/photo/my-images/708/photo3si.jpg/
更新 1:另一个开发人员尝试了一些方法,它可能有效,需要进行更多测试,但是......出于某种原因......在存储图像后使用 4 个新行似乎有效......这没有记录在手册中。
更新2:经过更多测试,添加新行似乎确实“改善”了情况,但并没有解决问题。
更新3:经过更多测试,我认为问题可以缩小到:
如果您运行一次 STORE 命令,一切都很好。再次运行会导致癫痫发作。
更新 4:这似乎是打印机本身或打印机与应用程序联网方式的问题。打电话给客户并远程打印到他们的,看起来效果很好。