Анализ пакетов для сетевой печати, плохая печать этикеток - PullRequest
0 голосов
/ 12 сентября 2018

У нас здесь есть принтер, который должен печатать этикетки на дереве, однако, некоторые из этикеток, похоже, обрезают свои данные либо наполовину (как, например, текущее задание обновляется следующим), поэтому данные неполное или что-то не так с данными, передаваемыми на принтер, и при этом он наполовину печатает этикетки.

Я немного новичок в сетевой печати и печати на "асинхронных" принтерах. Я уже спросил продавца, как решить эту проблему; он сказал мне, чтобы проверить сценарий, который находится в работе, но сценарий вызывает только 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

Image of actions on printer

1 Ответ

0 голосов
/ 12 сентября 2018

Неспособность проверить - серьезная проблема, если вы собираетесь что-то изменить.Ваше изображение для печати кода недостаточно;вам нужно смотреть дальше.В общем, лучше размещать код здесь, чем помещать его в Dropbox.Ваши файлы Dropbox истекают через некоторое время, а затем ссылки, которые вы указали в этом вопросе, внезапно исчезают.В будущем, кто-то споткнется в этом вопросе, останется озадаченным, потому что информация отсутствует.

Возможно, это не ответ на вашу проблему, но это должно дать вам некоторое представление о том, куда смотреть.

После этих предварительных шагов: предоставленный вами код pyhon содержит несколько подпрограмм.Большая часть кода просто выбросит XML-код на ваш принтер.Они могут быть найдены обратно в вашем файле pcap.

Вещи, которые вам необходимо узнать из rea-module on dropbox:

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.

Моя задача заключается в том, что стоп-джоб отправляется до того, как этикетка будет полностью напечатана, что приведет к прерыванию печати.Но чтобы быть уверенным, вы должны провести некоторое тестирование.

Итак, есть возможность усыпить непосредственно перед остановкой, что, как вы сказали, замедляет процесс печати на каждую печать этикетки.Другой вариант - проверить, готова ли печать и находится ли она в спящем режиме, только если печать не завершена.

Последний параметр означает, что вы должны иметь возможность получить статус задания с принтера.Это можно сделать с помощью

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.

...