Камера над конвейером передаёт видеопоток на edge-устройство. Нейросеть YOLOv8 в реальном времени детектирует каждый продукт на ленте — определяет его класс (product или defect), положение и размер. По результатам детекции система вычисляет интервалы между рядами и записывает целевую скорость и статусы в Data Block (DB100) контроллера Siemens S7-1200/1500. ПЛК остаётся «хозяином» — рамп-генератор, аварийные блокировки и переключение режимов реализованы на стороне контроллера.
Компьютер с камерой подключается к контроллеру по обычной Ethernet-сети (кабель, порт 102). Используется открытая библиотека python-snap7 — она «говорит» на языке контроллера Siemens (протокол S7comm). Никакого дополнительного оборудования или лицензий не нужно.
Обмен данными работает так:
В контроллере для обмена выделен отдельный блок памяти — DB100. Это как общая таблица, куда компьютер пишет команды, а контроллер читает их и выполняет.
(Требование к настройке: DB100 в TIA Portal должен быть с выключенной оптимизацией — Optimized block access = OFF)
DB100 — выделенная область в памяти контроллера. Компьютер с камерой записывает туда команды и статусы, контроллер читает их и управляет приводом. Обратно контроллер сообщает фактическую скорость и текущий режим.
Общий размер блока: 28 байт. Все данные пишутся одним пакетом за одну сетевую транзакцию — задержка ~12 мс. Формат чисел — Big-Endian (стандарт Siemens).
Три шага в среде программирования TIA Portal:
1. Создать блок памяти DB100 с нужными полями, отключить оптимизацию блока.
2. Разрешить внешний доступ к контроллеру по сети.
3. Задать IP-адреса: контроллер — 192.168.0.1, компьютер — 192.168.0.10.
(Настройки: Optimized block access = OFF, Permit PUT/GET = ON)
| Состояние | Условие | Действие |
|---|---|---|
| SLOW | Нет продукта > 6 сек | Скорость → минимум |
| ACCEL | Продукты слишком близко (< 12 см) | Ускорение ленты — раздвинуть продукты |
| STABLE | Интервал в допуске (12–22 см) | Скорость зафиксирована, мониторинг |
| DECEL | Интервал > 22 см (оператор не успевает) | Замедление ленты — подождать оператора |
Ускорение определяется по минимальному зазору (самое узкое место), замедление — по максимальному (самый широкий разрыв). Переход → SLOW — мгновенный (безопасность).
cm_per_px = ширина_ленты_см / ширина_ленты_px. Один раз при монтаже камеры.
Контроллер каждые 100 мс проверяет, «жива» ли система зрения. Если ответа нет больше 2 секунд — конвейер автоматически переходит на минимальную скорость и переключается в ручной режим. Производство не остановится, но будет работать безопасно до устранения проблемы.
(Реализация: поле timestamp_ms в DB100, watchdog-таймер в OB1 ПЛК)
Система зрения отправляет целевую скорость, но контроллер никогда не меняет скорость резко. Разгон и торможение происходят плавно — это защищает двигатель, редуктор и ленту от ударных нагрузок, а продукт — от смещения.
(Реализация: линейный рамп-генератор 5%/сек в программе ПЛК)
Автоматический — камера управляет скоростью конвейера через контроллер.
Ручной — оператор управляет с панели, камера продолжает наблюдать, но не вмешивается. Переключение — кнопкой на пульте или с экрана HMI.
(Реализация: поле plc_mode в DB100 — 1 = авто, 0 = ручной)
При нажатии кнопки экстренной остановки, перегрузке двигателя или любой аварии привода — конвейер останавливается полностью. Контроллер всегда главнее камеры — никакая команда от системы зрения не может отменить аварийную остановку.
(Реализация: аппаратная safety-цепь, E-STOP → OB1 → полная блокировка привода)
Контроллер пересчитывает целевую скорость (0–100%) в частоту вращения и передаёт команду на частотный преобразователь, который плавно разгоняет или тормозит двигатель конвейера.
(Реализация: аналоговый выход 0–10В через SM 1232 или цифровой по Profinet на Sinamics V20/G120, диапазон 0–50 Гц)