我们这里有一台打印机,该打印机应该在木头上打印标签,但是某些标签的数据似乎被切断了一半(例如,当前作业被下一个更新),因此数据是不完整,或者传输到打印机的数据有问题,并且正在打印一半标签。
我对网络打印和使用“异步”打印机进行打印有点陌生。我已经问过卖家,如何解决这个问题;他告诉我检查工作中的脚本,但该脚本仅调用IP,没有其他内容。
这里是图片以及Wireshk捕获的链接,乍一看似乎很正常,但是我在数据包方面经验不足,无法注意到是否有问题(冲突等)。他们似乎也出了问题。标签被切掉时会发生这种情况(左半部分)。这样的顺序可能是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
答案 0 :(得分:1)
如果您要进行更改,则无法测试是一个严重的问题。您的照片没有打印代码;您需要进一步看。 通常,将代码发布到此处比将其放置在保管箱中更好。您的保管箱文件有时会过期,然后您在此问题中添加的链接突然失效。将来,由于缺少信息,在这个问题上绊脚石的人会感到困惑。
这可能无法解决您的问题,但应该给您一些想法。
这些预备知识之后:您提供的pyhon代码具有许多例程。大多数代码将简单地将XML代码抛出到您的打印机。这些可以在您的pcap文件中找到。
您需要从保管箱上的rea模块了解的事情:
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时,我发现每个作业都被明确停止。在数据包的十六进制副本中,您可以每次在Command name="STOPJOB"
之前看到带有Command name="STARTJOB"
的数据包。顺序似乎是setjob,startjob,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
中。