Если вы собираетесь снимать данные со станков и линий, названия OPC UA, Modbus и MQTT встретятся в первом же разговоре с любым подрядчиком. Их часто сравнивают как конкурентов, но это неверно: они работают на разных уровнях и в одной системе обычно уживаются вместе.
Коротко о каждом
Modbus
Старейший из трёх — появился в конце 1970-х. Работает по схеме «запрос — ответ»: ведущее устройство опрашивает ведомое. Данные лежат в регистрах — пронумерованных ячейках; что именно хранится в регистре 40012, известно только из документации производителя. Бывает последовательным (Modbus RTU, чаще по RS-485) и сетевым (Modbus TCP, порт 502). Встроенной защиты нет: ни шифрования, ни проверки того, кто спрашивает.
OPC UA
Платформонезависимый стандарт промышленного обмена. Главное отличие — у данных есть структура и смысл: узлы с именами, типами и единицами измерения, а не «регистры по номерам». Клиент подписывается на изменения и получает их, а не опрашивает по таймеру. Безопасность встроена: сертификаты, подпись и шифрование сообщений, проверка пользователей. Порт по умолчанию — 4840.
MQTT
Лёгкий протокол «публикация — подписка» через посредника — брокер. Источник публикует сообщения в тему, потребители подписываются на нужные темы. Есть три уровня гарантии доставки (QoS 0, 1, 2), хранение последнего значения и сообщение «последней воли» при обрыве связи. Порты 1883 и 8883 (с шифрованием). О смысле данных MQTT ничего не знает: договорённость о структуре сообщений — отдельная задача (для промышленности есть надстройка Sparkplug B).
Сравнение
| Признак | Modbus | OPC UA | MQTT |
|---|---|---|---|
| Модель обмена | Опрос: запрос — ответ | Клиент — сервер и подписка | Публикация — подписка через брокер |
| Смысл данных | Нет, только номера регистров | Есть: имена, типы, единицы | Нет, структуру договаривают отдельно |
| Безопасность | Нет встроенной | Сертификаты, шифрование, пользователи | Настраивается: TLS и учётные записи |
| Порт по умолчанию | 502 (TCP) | 4840 | 1883 / 8883 |
| Где встречается | Старые контроллеры, счётчики, частотные преобразователи | Современные контроллеры и системы диспетчеризации | Датчики на слабых каналах, передача с площадки наверх |
| Слабое место | Опрос по таймеру пропускает короткие события; нет защиты | Сложнее настраивать: сертификаты, модели данных | Без договорённости о структуре превращается в свалку тем |
Что выбирать
Выбор почти никогда не «или-или»: протокол определяется тем, что умеет отдавать само оборудование.
- Оборудование уже говорит на OPC UA — берите OPC UA: структура и защита готовы.
- Старый контроллер или прибор отдаёт только Modbus — подключайтесь по Modbus через шлюз или драйвер, но закройте этот сегмент сети от остальных.
- Много площадок, слабые каналы связи, датчики на батарейках — MQTT как транспорт наверх.
- Станок не отдаёт данных вообще — сухой контакт или счётчик на выходе, либо терминал оператора. Это тоже съём, просто другого уровня.
Типичная схема в реальном проекте: на уровне цеха — Modbus и OPC UA, на границе цеха — шлюз, который приводит всё к одному формату, дальше — MQTT или очередь сообщений и хранилище временных рядов.
Подводные камни
- Modbus без защиты. Любой, кто попал в сегмент сети, может читать и писать регистры. Нужны сегментация сети и запрет записи там, где требуется только чтение.
- Порядок байт. 32-битное число в Modbus занимает два регистра, и у разных устройств они идут в разном порядке. Классический источник «странных» значений.
- Сертификаты OPC UA. Сервер отказывает клиенту, которому не доверяет, а сертификат имеет срок действия: после его истечения обмен тихо останавливается. Срок стоит внести в календарь.
- Опрос против подписки. Опрос раз в секунду пропустит событие короче секунды и нагрузит контроллер. Подписка отдаёт изменения, но требует поддержки устройства.
- Метки времени. Если время ставит сборщик, а не источник, события после потери связи «слипаются». Важно, у кого часы и синхронизированы ли они.
- Потеря связи. Без буфера на стороне сбора всё, что случилось во время обрыва, теряется навсегда.
Что обычно снимают с одного станка
- состояние: работает, простаивает, авария, ожидание;
- режим: автоматический, ручной, наладка;
- имя выполняемой программы и счётчик обработанных изделий;
- скорость шпинделя и подача, нагрузка на шпиндель;
- коды аварий и предупреждений;
- температуры и вибрация — там, где есть датчики и они подключены.
Для учёта простоев и выработки хватает первых четырёх пунктов. Остальное нужно для диагностики и прогнозирования отказов и добавляется позже, когда базовый учёт уже работает.
Как это складывается в систему
Оборудование → сборщик (шлюз с буфером и метками времени) → брокер или очередь → хранилище временных рядов → расчёт и отображение. Каждое звено можно заменить, не трогая остальные, поэтому протокол станка не определяет, какой будет вся система. Что получится посчитать из снятых данных — например, простои и общую эффективность, — разобрано в материале про OEE.
Частые вопросы
Что быстрее: OPC UA, Modbus или MQTT?
Скорость определяется сетью, частотой опроса и нагрузкой на устройство, а не названием протокола. Для мониторинга — простои, выработка, параметры раз в секунду — скорости хватает у всех трёх.
Можно ли подключить Modbus-устройство к системе на OPC UA?
Да: через шлюз или OPC UA-сервер с драйвером Modbus. Для остальной системы устройство выглядит как обычный узел OPC UA, а особенности Modbus остаются внутри шлюза.
Нужен ли брокер MQTT внутри цеха?
Если источников и потребителей много и их нужно развязать — да. Для одного станка и одной системы он избыточен: проще напрямую.
MQTT небезопасен?
По умолчанию он работает без шифрования и проверки пользователей — их включают настройкой: TLS, учётные записи, права на темы. Безопасность здесь вопрос настройки, а не самого протокола.