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

推荐订阅源

Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
H
Hacker News: Front Page
Stack Overflow Blog
Stack Overflow Blog
B
Blog
I
InfoQ
GbyAI
GbyAI
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
Y
Y Combinator Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
爱范儿
爱范儿
F
Full Disclosure
Hacker News - Newest:
Hacker News - Newest: "LLM"
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
T
Tailwind CSS Blog
S
Secure Thoughts
P
Privacy International News Feed
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 最新话题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Cybersecurity and Infrastructure Security Agency CISA
Last Week in AI
Last Week in AI
W
WeLiveSecurity
Google Online Security Blog
Google Online Security Blog
P
Privacy & Cybersecurity Law Blog
D
DataBreaches.Net
Engineering at Meta
Engineering at Meta
Know Your Adversary
Know Your Adversary
P
Palo Alto Networks Blog
I
Intezer
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Project Zero
Project Zero
V2EX - 技术
V2EX - 技术
H
Heimdal Security Blog
博客园 - Franky
阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Troy Hunt's Blog
V
Vulnerabilities – Threatpost
H
Help Net Security
Martin Fowler
Martin Fowler
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
G
GRAHAM CLULEY
博客园 - 【当耐特】

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

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет 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 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как мы автоматизировали завод, где штрих-коды играют в прятки
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-пайплайном прямо в производственный цех.

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