惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
博客园_首页
M
MIT News - Artificial intelligence
雷峰网
雷峰网
GbyAI
GbyAI
博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
S
SegmentFault 最新的问题
H
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 【当耐特】
V
Visual Studio Blog
月光博客
月光博客
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
腾讯CDC
云风的 BLOG
云风的 BLOG
美团技术团队
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
有赞技术团队
有赞技术团队

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
Как мы автоматизировали завод, где штрих-коды играют в пр...
Orioner (К2Т · 2026-05-18 · via Все публикации подряд на Хабре

Как мы автоматизировали завод, где штрих-коды играют в прятки

Уровень сложностиПростой

Время на прочтение6 мин

Охват и читатели14

Кейс

Привет, Хабр! Это Сергей Банников, эксперт К2тех по цифровому производству. Знаете эту классическую фразу от бизнеса: «Там простенькая задача, нужно сделать пару элементарных интеграций»? Обычно именно после этих слов начинается самый суровый инженерный хардкор.

Хочу поделиться одной такой историей, как элементарная маркировка паллет превратилась в технологический квест с блуждающими COM-портами под Astra Linux, переписыванием экранной клавиатуры с нуля и пробросом туннелей сквозь матрешку из виртуальных машин. 

Завязка: «там простенькая задача, две формочки»

Всё началось с того, что коллега между делом предложил оценить задачу для одного завода, который занимается фасовкой сыпучих кормов. Производство мы увидели не целиком, только четыре упаковочные линии, часть из которых еще строилась. Смысл проекта был простой: при расширении производства люди перестали успевать вручную маркировать продукцию. Заводу требовалась  автоматизация, которую мы должны были обеспечить.

Нужно было сканировать штрих-код товара на конвейере, печатать упаковочный лист и наклеивать его принтером-аппликатором. Мы прикинули: пара экранных форм, пара интеграций с 1С, никаких сложных отчётов — всё просто, компактно и дешево. Набросали оценку и приступили к работе. 

Мешки-анархисты, неполные паллеты и смена всей архитектуры

Первоначальная идея выглядела красиво: едет товар по конвейеру, стационарный сканер считывает штрих-код, принтер-аппликатор наклеивает этикетку. С коробками так и работает — штрих-код на боку, всегда в одном месте, всегда читаемый. Но в нашем случае на двух из четырёх линий ехали мягкие мешки, и здесь нас ждал первый сюрприз.

Заказчик фасует корма для разных брендов, и упаковку ему привозят клиенты. На мешке штрих-код может быть снизу, может быть сверху, а может не быть вообще — это не зона ответственности завода. Его задача: насыпать корм по весу. Где именно на мешке нанесена маркировка — это история партнёра. Соответственно, сканировать сами мешки в движении нереально. А чуть дальше по конвейеру все четыре линии сходятся в одном месте перед финальной обмоткой стрейч-худом, и там уже вообще невозможно понять, что именно едет.

Решение пришло быстро: идентифицировать не каждый мешок, а сразу всю паллету по номеру производственной линии. Мы решили клеить штрих-код с номером линии на поддон — система понимает, с какого конвейера пришла партия, а из 1С получает всю нужную информацию об этой линии: что производится, с каким весом, какие реквизиты идут на этикетку.

Параллельно выяснился ещё один нюанс. Роботы-упаковщики умеют собирать полные паллеты. Если коробок на линии ровно кратное число — всё хорошо. Но если партия заканчивается раньше, последняя паллета остается неполной, и робот просто останавливается: своё дело сделал, но количество коробок знает только он. Её вручную выкатывают на отдельный участок. Для ввода фактического количества нужно отдельное рабочее место оператора. Плюс ещё один нюанс производства: замотчик иногда ошибается — коробка упала, паллета ушла в брак. Камера уже успела считать её в очередь, а значит, оператор должен вручную ее оттуда удалить. Итого: один АРМ для ввода количества на неполных паллетах, один контрольный АРМ у замотчика — это уже совсем не «две формочки».

Планшет без клавиатуры, ОС без Windows и кастомный UI для суровых условий

Когда дело дошло до автоматизированных рабочих мест, мы даже не рассматривали классические ПК с мышкой и клавиатурой. Офисный подход на заводе не живет: там пыль, постоянная вибрация, а люди работают в плотных перчатках. Обычный ноут в таких условиях отправится в утиль через неделю. Поэтому мы пошли по проверенному пути: посмотрели на парк оборудования заказчика и подобрали суровые промышленные безвентиляторные моноблоки с тачскрином. Железо неубиваемое, как раз для цеха.

С операционкой всё тоже было понятно на старте. Добыть сейчас промышленную Windows-панель — тот еще квест, поэтому мы изначально закладывали в архитектуру Astra Linux. Само решение у нас кроссплатформенное, так что драйвер сканера под Linux мы спокойно написали и обкатали заранее, обошлось без пожаров и героических спасений.

А вот с интерфейсом решили заморочиться дополнительно, когда потестили его на реальном железе. Дело в том, что штатная экранная клавиатура «Астры» при вызове радостно перекрывала половину рабочего окна. В теории работать можно, но на практике оператору нужно просто вбить количество коробок на неполной паллете — и всё. Заставлять человека на конвейере каждый раз целиться в мелкие системные кнопки было бы издевательством.

Вместо этого наш фронтендер довольно быстро собрал кастомную цифровую панель. Сделали ее по принципу банкомата: огромные кнопки, только цифры и ничего лишнего. Заодно вынесли на видное место кнопку полноэкранного режима, потому что искать аналог F11 на тачскрине без физической клавиатуры — та еще боль. В итоге у человека перед глазами ровно одна функция, а шанс промахнуться мимо нужной кнопки практически сведен к нулю.

Блуждающий COM-порт, альбом с секретными кодами и динамический поиск устройства

Промышленный USB-сканер, который читал штрих-коды на ручном АРМе, тоже был с небольшим сюрпризом. По умолчанию он работал в режиме виртуальной клавиатуры, нам-то надо было читать его программой. Поэтому надо было переключить его в режим последовательного порта. Но на нем не оказалось никаких кнопок для этого! Оказалось, что переключение осуществляется считыванием специального системного конфигурационного штрих-кода. Открытый вопрос - что будет, если кто-то покажет такой код сканеру, введенному в эксплуатацию…

Итак, USB-сканер наконец, заработал в режиме эмуляции последовательного порта. В Windows это не проблема: при первом подключении система даёт ему, скажем, COM8 — и при любом последующем переподключении адрес сохраняется. Можно жестко прописать порт в конфиге и спать спокойно.

Под Linux картина другая. Подключил — получил COM10. Выдернул, воткнул — COM12. Ещё раз — COM5. Адрес каждый раз новый, и система о нём никак не предупреждает, а на заводе выдернуть кабель может кто и когда угодно. Поэтому мы дописали алгоритм динамического сканирования: при каждом старте и при каждом разрыве связи программа обходит все доступные порты и ищет нужное устройство по его Vendor ID и Product ID. Без этого она рисковала принять за сканер что угодно, вплоть до чьей-нибудь мышки, воткнутой рядом, и начать радостно читать из неё «штрих-коды».

Матрешка из виртуальных машин и туннель через три слоя

Принтер-аппликатор — это не просто принтер. У него есть механическая «лапа», которая берет напечатанную этикетку и физически переносит её на паллету. Координаты, усилие, тайминги срабатывания — всё это нужно было отладить заранее, чтобы не ставить эксперименты на живом конвейере заказчика.

К счастью, вендор предоставил официальный эмулятор — виртуальную машину в VirtualBox, которая полностью имитирует логику пульта и аппаратуры, принимая те же команды, что и реальное железо. Оставалось только интегрировать наш код с этой средой. Специфика заключалась в том, что эмулятор сам по себе установлен на виртуальной машине - получается эдакая матрёшка, и наружу его сетевые порты не смотрели.

Настройка сложного проброса трафика сквозь такую «матрёшку» из виртуальных машин — задача больше инфраструктурная, чем девелоперская. Поэтому мы не стали изобретать велосипед, а подключили наших сетевых инженеров: они быстро прорубили стабильный туннель, не нарушив связность тестового контура. В итоге in-house тестирование прошло штатно. Мы прогнали полный цикл печати, отладили передачу всех реквизитов и приехали к заказчику с уже проверенным решением. На месте оставалось только подключиться к реальному железу и откалибровать физику движения лапы.

Релизы за десять минут прямо в цех

Когда система встала на боевые рельсы, поднялся вопрос поддержки. Традиционный подход на производстве — это обновления с флешки, пересылка архивов по почте или долгая ручная установка через VPN. Всё это плодит задержки, человеческие ошибки и командировки по малейшему поводу.

Мы решили перенести классические IT-практики CI/CD в промышленный контур. Поскольку для заказчика на этом участке критически важна скорость реакции, нам согласовали доступ, и мы дотянули наш GitLab-конвейер прямо до серверов завода. Настроили прозрачный пайплайн: ведущий разработчик пушит код в релизную ветку→ он проходит статический анализ в SonarQube → собираются артефакты под Windows и Astra Linux → выполняются тесты ->  автоматика раскатывает релиз на сервере в цеху. Весь цикл занимает около десяти минут.

Такой подход особенно выручил нас на этапе пусконаладки. Разработчик сидел с ноутбуком прямо у конвейера, смотрел, как система ведет себя в реальной физической среде, вносил корректировки — и через десять минут они уже крутились на живом оборудовании. Работать вслепую по удаленным логам в таких проектах почти невозможно, реальную производственную специфику нужно чувствовать и видеть своими глазами.

Вот такой путь от «двух формочек» до многослойной системы с кастомным UI, динамической идентификацией сканера, матрешкой из виртуальных машин и CI/CD-пайплайном прямо в производственный цех.

А вы сталкивались с подобными «простыми задачами», которые оборачивались чередой сюрпризов? Расскажите в комментариях.