Повторное чтение штрихкода на конвейере
Как отличить повтор чтения этикетки от нового изделия и повторной доставки: окно сканирования, идентификатор операции и подтверждение MES.

Сканер один раз увидел этикетку, а в MES появились две операции. Инженер увеличил паузу повторного чтения. Дубли сократились, зато два соседних изделия с одинаковым товарным кодом начали превращаться в одно. Настройка сканера решила только часть задачи: код товара приняли за идентификатор физического прохода.
Разберём сеанс чтения, повторную доставку сообщения и регистрацию изделия на посту. Качество печати и подбор оптики требуют своих испытаний; здесь важна логика обработки уже распознанного кода.
Короткий ответ
Повтор одного штрихкода может означать многократное распознавание той же этикетки, повтор передачи сообщения или новое изделие с таким же кодом. Эти ситуации обрабатывают на разных уровнях. Сканер ограничивает повторные декодирования по своим настройкам, ПЛК связывает чтение с сеансом прохода, а получатель обеспечивает однократное применение операции. Один глобальный запрет «не принимать одинаковую строку» для всего процесса непригоден. Результат чтения нужно передавать вместе с идентификатором операции и подтверждением принятия.
Код товара и код экземпляра
Одинаковые упаковки могут иметь один общий товарный код. Это законная ситуация, а не ошибка печати. В других задачах этикетка содержит уникальный серийный номер. Политика повторов зависит от того, что именно зашифровано и что требуется от операции.
В техническом задании фиксируют смысл строки: номенклатура, партия, серийный номер или составной набор. По длине и внешнему виду нельзя надёжно определить уникальность. Если принимающая система считает каждую строку новым изделием, два чтения одной коробки могут удвоить выпуск.
Обратная ошибка возникает при сравнении только с предыдущей строкой. Две следующие друг за другом коробки одной номенклатуры дадут одинаковые коды, но должны создать две операции. Нужна граница физического прохода или другая согласованная идентификация экземпляра.
Что делает настройка повторного чтения
В документации Zebra есть параметры таймаута повторного распознавания того же символа. Условия их применения зависят от режима и модели. Такой таймаут помогает не декодировать одну этикетку слишком часто, но не знает, как MES создаёт операцию и повторно ли пришёл сетевой запрос.
Пусть условная коробка находится в поле зрения 0,8 с, а две коробки проходят с интервалом 0,5 с. Глобальная пауза на секунду может скрыть вторую коробку с тем же кодом. Короткая пауза, напротив, может допустить несколько чтений первой. Эти числа иллюстрируют конфликт, а не задают параметры для любого конвейера.
Настройку выбирают после оценки скорости, дистанции между изделиями и способа запуска чтения. Важны режим триггера, выход из поля зрения и то, как прибор завершает сеанс. Перенос «рабочего таймаута» с ручного сканера на стационарный пост не гарантирует правильную логику.
Сеанс прохода
Если пост использует датчик наличия изделия, его событие может открывать окно чтения. Внутри окна принимается результат, проверяются формат и допустимость, после чего сеанс закрывается по согласованному условию. Но один датчик сам по себе не всегда различает близко стоящие изделия или обратный ход конвейера.
В программе задают состояния: ожидание изделия, чтение, результат готов, результат принят верхней системой, освобождение поста. Чёткое разделение показывает, на каком этапе появилась повторная операция. Просто обнулить строку после чтения недостаточно: сканер может немедленно прислать её снова в том же окне.
Каждому сеансу нужен идентификатор. Если он формируется локально, нужно определить его уникальность после рестарта: например, сочетание идентификатора поста, эпохи запуска и счётчика операций. Конкретный способ зависит от системной архитектуры; счётчик, начинающийся с единицы после каждого включения, может столкнуться с прошлой операцией.
Повтор доставки не является новым проходом
Предположим, ПЛК передал результат, MES сохранила его, а ответ потерялся. ПЛК повторяет запрос. Если MES создаёт новую запись каждый раз, появляется дубль при совершенно правильной работе сканера. Увеличение задержки декодирования не влияет на этот механизм.
Получатель должен узнавать повтор по идентификатору операции и возвращать согласованный результат уже принятого действия. Содержание кода при этом сравнивают с первоначальным. Если под тем же идентификатором внезапно пришла другая этикетка, это конфликт, который нельзя молча принять за безобидный повтор.
Подтверждение отправки по интерфейсу и подтверждение применения в бизнес-системе различаются. До второго подтверждения результат сохраняют в предусмотренном буфере. Политика переполнения и восстановления после отключения задаёт, какие операции можно повторить и как обнаружить потерю.
Повторный проход и переделка
Изделие может вернуться на пост после брака или ручной проверки. Для него код экземпляра останется прежним, но действие будет новым. Поэтому глобальный вечный запрет по серийному номеру может мешать законной переделке.
Различают идентификатор изделия и идентификатор операции с ним. К операции добавляют тип шага, номер попытки или другое принятое измерение контекста. Решение о допустимости повторного действия принимает технологический маршрут, а не сравнение двух последних строк в ПЛК.
Ручное подтверждение чтения также должно иметь понятный след. Если оператор исправил код, полезно сохранять исходную строку, введённое значение, инициатора и причину. Это позволяет отличить проблему сканирования от исправления производственной информации.
Таблица причин дублей
| Причина | Признак | Где исправлять |
|---|---|---|
| Одна этикетка декодируется многократно | Несколько чтений в одном окне | Режим сканера и сеанс поста |
| Потерян ответ MES | Одинаковый идентификатор операции | Повторное применение на получателе |
| Новый экземпляр с тем же товарным кодом | Новый физический проход | Модель идентификации |
| Изделие вернулось после переделки | Тот же экземпляр, другой шаг | Производственный маршрут |
| Рестарт обнулил номер операции | Совпадение с прежней записью | Уникальность идентификатора |
| Датчик не разделяет близкие изделия | Одно окно на два объекта | Геометрия поста и триггер |
Приёмочная серия
На стенде проверяют одну этикетку, долго остающуюся в поле зрения, затем два одинаковых товарных кода на разных изделиях. Третий сценарий имитирует потерю ответа после сохранения операции. Во всех случаях результат должен соответствовать числу реальных операций, а не количеству полученных строк.
Добавляют чтение с ошибкой формата, отсутствие кода, ручной повтор и рестарт во время неподтверждённой передачи. Для каждого сценария заранее определяют ожидаемое состояние конвейера и поста. Тест «сканер один раз пикнул» не проверяет цепочку до конечной записи.
В журнале фиксируют начало окна, сырое чтение, принятую строку, номер операции и подтверждение получателя. Это минимальная причинная цепочка. Хранить только штрихкод и время базы недостаточно: источник повтора останется неизвестным.
Пример обмена с потерей подтверждения
На пост приходит изделие, открывается сеанс 501, сканер передаёт код. ПЛК отправляет результат с идентификатором операции, получатель сохраняет его. Ответ не доходит из-за краткого разрыва. Для источника результат остаётся неподтверждённым, хотя у получателя работа уже выполнена.
При повторе источник использует тот же идентификатор и тот же смысловой набор. Получатель узнаёт операцию и возвращает её прежний результат вместо создания второй. Если источник после каждого таймаута генерирует новый номер, эта защита не сработает: каждая попытка станет выглядеть как новое действие.
Следующее изделие получает новый сеанс 502, даже если код товара полностью совпадает. Его нужно принять отдельно. Таким образом, один и тот же штрихкод законно появляется в двух операциях, а несколько доставок операции 501 остаются одним результатом. Это различие и требуется выразить в контракте.
При конфликте, когда под номером 501 приходит другой код, получатель не должен просто отвечать «уже было». Такой случай может означать ошибку восстановления, сброс счётчика или неправильную привязку. Нужен отдельный диагностический результат с сохранением обоих контекстов по принятой политике.
Работа с буфером неподтверждённых результатов
Размер буфера связан с максимальной скоростью операций и допустимым простоем верхней системы. Например, при условных двух изделиях в секунду минутный разрыв создаст до 120 результатов. Это оценка ёмкости, а не требование продолжать выпуск при любой потере связи. Допустимое поведение линии определяет технологический проект.
При заполнении буфера требуется предусмотренное решение: ограничение процесса, останов приёма новых операций или другой допустимый сценарий. Молчаливое удаление старых записей опасно тем, что линия продолжит выглядеть исправной, а отчёт останется неполным. Сам факт переполнения должен доходить до персонала.
После перезапуска источник восстанавливает те операции, которые допускают повтор. Для этого нужно сохранять не только строку кода, но и идентификатор, статус доставки и необходимые параметры. Если память содержит только «последний штрихкод», неизвестно, был ли он применён, подтверждён или относится к уже снятому изделию.
На стороне получателя срок хранения признаков принятых операций согласуют с периодом возможных повторов. Если запись о применении удалили слишком рано, поздний повтор снова создаст действие. Поэтому защита от дублей является системным соглашением, а не одной строкой сравнения в ПЛК.
Что делать с No Read и неоднозначным результатом
Отсутствие чтения тоже относится к сеансу изделия. Нужно отличать «сканер не прислал сообщение», «прислал признак отсутствия кода» и «прислал строку, отклонённую проверкой формата». У этих ситуаций разные направления диагностики и разные допустимые действия оператора.
Если в поле зрения несколько этикеток, программа должна знать, какой результат разрешён. Принять первую случайную строку иногда недостаточно. Правила выбора задаются структурой кода, геометрией поста и возможностями считывателя. Не стоит скрывать неоднозначность преобразованием любой полученной строки в результат текущего изделия.
Ручной ввод полезно оформлять как альтернативный способ завершения известного сеанса. Тогда сохраняются номер операции, причина вмешательства и введённый код. Создать новую независимую операцию рядом с незавершённым автоматическим чтением значит получить ещё один путь появления дублей.
После исправления ошибки важно закрыть прежнее ожидание. Иначе сканер позднее пришлёт правильную строку, а программа примет её второй раз. Жизненный цикл альтернативных способов получения результата должен сходиться в одно принятое завершение операции.
Диагностические показатели поста
Для эксплуатации полезны доля успешных сеансов, число повторных декодирований, повторы доставки и операции ручного ввода. Один общий счётчик «ошибки сканера» смешивает оптику, сеть и действия людей. Раздельные показатели показывают, какой участок действительно требует улучшения.
Нельзя сравнивать посты только по числу прочитанных строк. На одном считыватель может выдавать несколько технических чтений в одном окне, на другом только окончательный результат. Для производительности важны реальные принятые операции и их исход, а для диагностики собственные события считывателя.
Проверяя улучшение после настройки, держат одинаковый набор изделий, скорость и условия. Иначе уменьшение повторов может объясняться более редкой подачей. Вместе с цифрами полезно сохранять конфигурацию сканера и версию прикладной логики, чтобы результат можно было воспроизвести.
Вопросы при работе
Можно удалять дубли по одинаковой строке и времени? Для аналитической очистки это иногда эвристика. Для управления она может удалить законное второе изделие или пропустить запоздалый повтор. Основой должен быть согласованный идентификатор операции.
Обязательно ли менять сканер? Сначала выясняют, на каком участке появилась повторная операция. При дубле сетевой доставки новый сканер даст тот же результат. При недостаточной геометрии чтения одной программной правки, наоборот, может оказаться мало.
Нужно ли хранить все неудачные чтения? Полезно сохранять диагностические события и ограниченные образцы по принятой политике. Производственный результат при этом отделяют от технического журнала, чтобы ошибочная строка не стала новой операцией.
Граница между кодом и производственным решением
Сканер сообщает распознанные данные. Решение о том, допустимо ли изделие на данном шаге, относится к логике поста или производственной системе. Успешное декодирование не подтверждает правильную партию, действующий маршрут и отсутствие ранее выполненной операции.
Поэтому оператору полезно показывать раздельные результаты: код прочитан, формат принят, операция разрешена и результат зарегистрирован. Один общий зелёный индикатор сканера скрывает, на каком из этих этапов возник отказ. Особенно заметно это при задержке верхнего уровня.
Если принято решение о повторной обработке изделия, его следует оформить как новую разрешённую операцию в известном контексте. Удалять прежнюю запись ради обхода защиты от дублей значит потерять историю. Технологическая переделка и случайная повторная доставка требуют разных результатов, хотя строка кода одинакова.
Хорошая модель позволяет объяснить каждую запись через конкретный проход и действие. Тогда увеличение скорости, замена сканера или добавление второго поста не заставят заново придумывать смысл одинаковых строк.
