MQTT-клиент на ПЛК
MQTT-клиент в прошивке ПЛК позволяет контроллеру публиковать данные напрямую в облачные платформы (AWS IoT, Azure IoT, Яндекс IoT, самохостинг Mosquitto) без промежуточных шлюзов. Основа IIoT и дистанционного мониторинга инженерных систем.
MQTT (Message Queuing Telemetry Transport) — лёгкий Publish/Subscribe протокол поверх TCP, созданный для IoT. С середины 2010-х встраивается в ПЛК как клиент — контроллер может самостоятельно отправлять данные в облако или на центральный MQTT-брокер.
Как работает MQTT
- Брокер (сервер, broker) — централизованный сервис, принимает публикации и рассылает подписчикам
- Клиент-издатель (publisher) — публикует сообщения на определённые топики (темы)
- Клиент-подписчик (subscriber) — подписан на топики, получает все новые сообщения
- Темы (topics) — иерархические строки типа rubicon/itp/moscow-01/temperature/supply
- QoS (Quality of Service) — 0 (at most once), 1 (at least once), 2 (exactly once)
- Retained — последнее опубликованное сообщение сохраняется у брокера, новый подписчик получает его сразу
- LWT (Last Will and Testament) — сообщение которое брокер опубликует если клиент внезапно отключится
Применение в автоматике инженерных систем
- Удалённый мониторинг объектов — ПЛК публикует состояние ИТП/ПВУ в облако, оператор видит в приложении
- Централизация данных сети объектов — 20 ИТП в сети → один MQTT-брокер → одна SCADA/BI-дашборд
- Интеграция с умным домом / BMS верхнего уровня — ПЛК публикует в iQ3, Google Home, Яндекс Умный Дом
- Push-уведомления об авариях — ПЛК публикует в тему alarms/*, Telegram-бот подписан и шлёт сообщения
- Долговременный архив — брокер → Node-RED → PostgreSQL/InfluxDB
Поддержка в ПЛК
Siemens S7-1500
- MQTT Client через TIA Portal V18 (2023) — встроенные блоки MQTT_PUBLISH, MQTT_SUBSCRIBE
- Поддержка TLS, QoS 0/1/2, Retained, LWT
- Для V17 и ниже — через библиотеки TIA Add-Ons
Beckhoff TwinCAT
- Tc3_IotBase — библиотека MQTT, HTTP, OPC UA Cloud Connector
- Поддержка AWS IoT, Azure IoT, Mosquitto, HiveMQ
- Публикация/подписка прямо из PLC-кода
CODESYS
- CODESYS MQTT Client SL — лицензируемая библиотека (от 3S-Smart)
- Поддержка в ОВЕН ПЛК210 (отдельно по лицензии)
- Для Wago PFC200 и Phoenix ILC — встроенная
Rockwell CompactLogix
- MQTT через AOI (Add-On Instructions) от сообщества или Factory Talk Smart Object
Segnetics Pixel 2500
- Встроенный MQTT Client в прошивке с 2023 года
- Публикация в облачную платформу Segnetics-online
ОВЕН ПЛК210
- CODESYS 3.5 + CODESYS MQTT Client (лицензия ~15 000 руб)
Пример структуры топиков для ИТП
**` rubicon/ itp-moscow-01/ status/ online # 1 / 0, retained + LWT firmware # версия прошивки sensors/ t-supply # температура подачи t-return # температура обратки p-supply # давление подачи flow # расход теплоносителя pumps/ p1/status # on/off p1/current # ток двигателя p2/status p2/current valves/ three-way/position # 0-100% alarms/ overheat # событие low-pressure commands/ # для управления с облака p1/start p1/stop three-way/setpoint **`
Безопасность
- TLS 1.2+ обязательно для публичных брокеров
- Аутентификация — username/password или client certificate
- ACL на брокере — ограничение топиков по клиентам
- Firewall — исходящее подключение только на порт брокера (8883 для TLS)
- Не публиковать чувствительные данные без шифрования — пароли, токены, персональные данные
Отличия от OPC UA
| Параметр | MQTT | OPC UA | |----------|------|--------| | Модель | Publish/Subscribe (через брокера) | Client/Server (прямое) + PubSub | | Начальная настройка | Простая | Сложнее | | Browse namespace | Нет | Есть | | Типизация данных | Нет (JSON/binary payload) | Строгая | | Безопасность | TLS + ACL | TLS + сертификаты + аудит | | Задержка | 10–100 мс | 1–50 мс | | Через firewall | Легко (одно исходящее) | Сложнее (входящее на ПЛК) | | IoT и облако | Отлично | Хуже | | Промышленная автоматика | Хуже | Отлично |
Правило: MQTT для облака и дистанционного мониторинга, OPC UA для производственной SCADA.
Пример применения в проекте РУБИКОНа
Диспетчеризация сети ИТП в разных городах:
- На каждом объекте — ОВЕН ПЛК210 с CODESYS + MQTT Client
- Центральный MQTT-брокер — EMQ X на VPS в Москве
- Все ПЛК публикуют в облако 20 ключевых переменных каждые 5 секунд + при изменении
- Node-RED обрабатывает поток и пишет в InfluxDB (TSDB для метрик)
- Grafana — дашборды со всеми объектами
- Telegram-бот подписан на rubicon/+/alarms/# и шлёт уведомления дежурному
- При аварии — оператор видит в Grafana за 1–5 секунд
Такая архитектура дешевле классической SCADA и легче масштабируется (добавить новый ИТП = настроить ещё один ПЛК + ветка топиков).
Готовые брокеры
- Mosquitto — open-source, самохостинг, простой
- EMQ X — open-source + enterprise, высокая нагрузка (миллионы клиентов)
- HiveMQ — коммерческий, корпоративный
- AWS IoT Core — облачный от Amazon
- Azure IoT Hub — облачный от Microsoft
- Яндекс IoT Core — облачный российский
Для РФ в 2026 году актуальны самохостинг Mosquitto / EMQ X на российских VPS или Яндекс IoT Core.
Частые вопросы
MQTT или OPC UA — что выбрать для мониторинга сети ИТП?
MQTT — лучше для распределённой сети объектов: лёгкий, работает через firewall (ПЛК делает исходящее подключение, не нужны публичные IP объектов), через брокер легко подключать новые объекты и клиентов. OPC UA — для централизованных АСУ ТП одного объекта или группы на одной площадке. Для сети 20+ ИТП в разных городах — однозначно MQTT. Внутри одного крупного объекта (бизнес-центра, завода) с десятками ПЛК — OPC UA. Можно комбинировать: внутри объекта OPC UA, в облако из главного ПЛК — MQTT.Какой QoS выбрать для публикации данных мониторинга?
Для простых метрик (температура, давление каждые 5 с) — QoS 0 (at most once): если одно сообщение потерялось — следующее придёт через 5 с, не критично, зато минимум нагрузки. Для событий и аварий — QoS 1 (at least once): гарантируется что сообщение дойдёт хотя бы раз, возможны дубли (приложение должно их фильтровать по event ID). QoS 2 (exactly once) — редко оправдан в автоматике, задержки выше, а защита от дублей обычно и так есть на приложенческом уровне. Retained-флаг — для статусных топиков (online/offline, firmware version) чтобы новый подписчик сразу получал текущее состояние.
Источники
- OASIS MQTT 5.0 Specification — OASIS
- ISO/IEC 20922:2016 — MQTT v3.1.1 — ISO