В процессе автоматизации складского учета и интеграции терминалов сбора данных (ТСД) технические специалисты часто сталкиваются с крайне неприятной проблемой. Абсолютно одинаковые внешне устройства из одной партии ведут себя совершенно по-разному: один ТСД считывает любой сложный или длинный штрихкод мгновенно, а второй делает это один раз из ста или считывает код лишь частично. Подобные сбои регулярно фиксируются на терминалах разных брендов, включая Newland, АТОЛ SMART.Lite, Zebra и Honeywell.
В этой статье мы подробно и по шагам проанализируем, почему возникает такая нестабильность, разберем физику процесса сканирования, влияние аппаратных модулей на чтение плотных кодов, а также рассмотрим программные методы устранения этих неполадок.
Рассмотрим типичный сценарий. На складе используются два ТСД одной и той же модели. При попытке отсканировать длинный производственный или логистический штрихкод (например, популярные форматы Code 128 или GS1-128) с упаковочной коробки поставщика мы наблюдаем следующую картину:
Выясним причину такого поведения. Первое, что приходит в голову — проверить защитное стекло сканера на предмет загрязнений или царапин. Если стекло абсолютно чистое, то корни проблемы лежат гораздо глубже — на стыке аппаратных ограничений сканирующих головок и версии программного обеспечения устройства.
Проанализируем программную часть устройств. Часто ТСД одной и той же модели могут поставляться с разной версией прошивки ядра (Kernel) и разной версией программного обеспечения сканирующего модуля. Внутренний драйвер, который управляет сканирующей головкой, является важнейшим звеном. Он отвечает за предварительную обработку изображений, подавление оптических шумов и распознавание геометрии символики.
Если прошивка драйвера устарела или содержит ошибки, сканер будет некорректно обрабатывать сложные изображения. Практика показывает, что обращение к поставщику или производителю для обновления или переустановки программной прослойки (драйвера сканера) полностью решает проблему. После обновления системных библиотек декодирования встроенные математические алгоритмы начинают корректно распознавать даже помятые, блеклые или очень длинные штрихкоды.
Разберем подробнее аппаратную сторону вопроса. Одной из ключевых характеристик штрихкода является его плотность, измеряемая в mil (миллидюймах). Напомним, что 1 mil равен одной тысячной доли дюйма (примерно 0,0254 мм). Этот параметр определяет ширину самого узкого штриха в коде.
Почему длинный штрихкод (например, Code 128 плотностью 4–5 mil) считывается хуже? Рассмотрим физику процесса:
Таким образом, если ТСД плохо считывает длинный код, попробуйте изменить расстояние: начните сканирование вблизи и медленно отдаляйте устройство, пытаясь поймать оптимальную точку фокуса, где вся полоса кода попадает в объектив, но линии еще не сливаются.
Очень часто виновником проблемы является банальное ограничение длины строки в настройках декодера. На каждом ТСД предустановлена специальная утилита для конфигурирования сканера:
Scanner Settings.Barcode Utility или Barcode Service.DataWedge.Внутри этих утилит для каждого поддерживаемого типа штрихкода (Code 128, Code 39, EAN-13) существуют индивидуальные параметры. По умолчанию максимальная длина считываемых символов (параметр Max Length) может быть ограничена производителем (например, значением 20 или 30 символов). Если реальный логистический штрихкод длиннее этого значения, сканер будет его просто игнорировать. Лишь в редких случаях, из-за оптических погрешностей, он может считать его частично.
Рекомендуется зайти в настройки используемой символики в системном приложении ТСД и вручную увеличить максимальную длину считывания (например, до 80 или 100 символов) или полностью отключить это ограничение.
Если ТСД передает данные в текстовое поле (блокнот) путем эмуляции нажатия клавиш (режим Keyboard Wedge), операционная система Android может не справляться со скоростью передачи длинных строк. При сканировании штрихкода длиной более 30–40 символов данные передаются единым скоростным потоком. В результате буфер клавиатуры переполняется, и часть символов теряется или штрихкод считывается частично.
Для решения этой проблемы рассмотрим два метода:
Inter-character delay или Char delay и установите значение в диапазоне от 5 до 15 миллисекунд. Это добавит микропаузы при передаче каждого символа, что позволит Android стабильно обработать всю строку.На многих современных ТСД, работающих под управлением операционной системы Android (особенно на процессорах MediaTek), предустановлена системная утилита оптимизации DuraSpeed. Ее основная задача — закрывать фоновые процессы для экономии оперативной памяти и заряда батареи.
Однако DuraSpeed часто ошибочно блокирует фоновые службы сканирования и системные драйверы ТСД. Из-за этого процесс декодирования сложных штрихкодов начинает зависать, работать нестабильно или аварийно завершаться. Обязательно найдите приложение DuraSpeed в настройках Android и полностью отключите его работу либо добавьте службу сканирования в список исключений.
Если ваш ТСД не считывает длинные штрихкоды, выполним следующий комплекс действий:
Max Length).Совместное применение этих мер позволит добиться стабильного и быстрого распознавания любых промышленных и логистических штрихкодов на ваших терминалах сбора данных.