我们这里有一台打印机,应该在木头上打印标签,但是,有些标签看起来中途切断了数据(例如,当前作业被下一个更新),因此数据不完整,或者传输到打印机的数据有问题,它打印半标签。
我对使用“异步”打印机进行网络打印和打印有点新意。我已经问过卖家,如何解决这个问题;他告诉我检查作业中的脚本,但脚本只调用IP,没有别的。
这是图片以及wireshark捕获的链接,一眼看上去似乎正常,但我没有太多经验,如果出现问题(碰撞等),请注意。它们似乎也出现故障;当标签被切断时(左半部分)发生这种情况。所以序列可以是15,14,13(截止),13,13,12,10 ......没有真正的模式。
Wireshark文件:https://www.dropbox.com/s/8bchsnoxr68jgxu/ws1.pcapng?dl=0
Python脚本:https://www.dropbox.com/s/532xqtv8ee0qgzz/REA.py?dl=0
如果你要改变一些事情,那么无法进行测试是一个严重的问题。您的打印代码图片不够用;你需要进一步了解。一般来说,最好在此处发布代码,而不是将其放在dropbox上。您的Dropbox文件将在某个时间到期,然后您在此问题中输入的链接突然停止。将来,因为信息丢失,有人会对这个问题感到困惑。
这可能不是你问题的答案,但它应该给你一些想法。
在这些预备之后:你提供的python代码有许多例程。大多数代码只会将XML代码抛出到您的打印机。这些可以在你的pcap文件中找到。
您需要从Dropbox上的rea-module知道的事情:
def STARTJOB(ip):
xml = '<REA-JET><REA-PI version="3.3"><Command name="STARTJOB" id="0"><Data /></Command></REA-PI></REA-JET>'
return ExecuteCommand(ip,xml)
def STOPJOB(ip):
xml = '<REA-JET><REA-PI version="3.3"><Command name="STOPJOB" id="0"><Data /></Command></REA-PI></REA-JET>'
return ExecuteCommand(ip,xml)
ExecuteCommand
将数据发送到打印机。所有内容都以明文形式发送。因此,您可以在pcap文件中查看确切的调用顺序。
当我通过pcap时,我看到每个作业都被明确停止。在数据包的hex-dumb中,您可以在Command name="STOPJOB"
之前每次都看到包含Command name="STARTJOB"
的数据包。序列似乎是setjob,startjob,stopjob。
我的问题是在完全打印标签之前发送了stopjob,从而中止了打印。但可以肯定的是,你必须做一些测试。
因此,可以选择在stopjob之前进行一次睡眠,正如你所说的那样,每个标签的打印速度会慢一些。另一种选择是检查打印是否准备就绪,只有在打印未完成时才进入休眠状态。
最后一个选项意味着您必须能够从打印机检索作业状态。这可能是通过
def Feedback(data):
# Get feedback from the controller, so we can display it in the UI
# Two parameters are returned, the status code and the status message
import xml.etree.ElementTree as ET1
root = ET1.fromstring(data)
try:
code = root.find('REA-PI/Status/Code').text
except:
code = ''
try:
message = root.find('REA-PI/Status/Message').text
if message == None:
message = ''
except:
message = ''
return code, message
但我不知道返回代码和消息的含义。意思是在REA-PI/Status/Code
。