Анализ пакетов для сетевой печати, плохая печать этикеток

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

Я немного новичок в сетевой печати и печати с «асинхронными» принтерами. Я уже спрашивал продавца, как это исправить; он сказал мне проверить сценарий, который находится в работе, но сценарий вызывает только IP, и ничего больше.

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

Анализ пакетов для сетевой печати, плохая печать этикеток

Отсутствует много информации. Когда вы говорите «он вызывает только IP», что это значит? curl? nc? Решит ли проблему небольшой период ожидания (sleep 1)? Есть ли способ со стороны сценария определить, готов ли печать? Можете ли вы добавить к вопросу соответствующую часть сценария? Останавливается ли печать предыдущей этикетки, когда вы отправляете на принтер новую этикетку?

Ljm Dullaart 12.09.2018 11:40

Сон не будет работать, так как это промышленный принтер, и слишком много «сна» действительно задержит его. В сценарии уже есть сон (1), если данные равны нулю. Я не могу его тщательно протестировать, так как для этого потребуется остановить производство, и это настоящая проблема, но я также не могу найти ошибку с моими текущими знаниями.

EInherjar 12.09.2018 12:17
Как создать страницу входа в систему с помощью HTML с использованием CSS
Как создать страницу входа в систему с помощью HTML с использованием CSS
Создание страницы входа в систему является важной частью создания веб-сайта или приложения, требующего аутентификации пользователя. Простую страницу...
1
2
162
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Что вам нужно знать из модуля rea в 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.

Другие вопросы по теме