[Перевод] MQTT и Modbus: cравнение протоколов, используемых в шлюзах для IoT
В становлении интернета вещей важны не только совершенно новые технологии. Неоценимую роль здесь играет возможность интеграции с разработками прошлых лет. А ключевой момент такой интеграции — связь. Существует немало протоколов, которые позволяют огромному количеству разнообразных «вещей» подключаться к интернету и взаимодействовать друг с другом.
Сегодня мы расскажем о паре взаимодополняющих протоколов, которые нашли применение в IoT. Первый — это Modbus. Он служит для организации связи между устройствами, расположенными недалеко друг от друга. Второй — MQTT. Он обладает гораздо более широкими возможностями, поддерживает работу в локальных сетях и в Интернете. С его помощью можно организовать обмен данными между «вещами» в глобальных масштабах.
Modbus — это последовательный протокол обмена данными, который появился в 1979 году и стал стандартом де-факто для организации связи между промышленными устройствами. MQTT появился на 20 лет позже, но, несмотря на разницу в возрасте, совместное использование этих двух протоколов позволяет дать узкоспециализированным интегрированным устройствам все возможности, которые доступны при подключении к интернету.
На рисунке ниже показана схема взаимодействия этих протоколов, а также — устройство, которое позволяет такое взаимодействие организовать — шлюз для интернета вещей.
Шлюз для интернета вещей позволяет объединить возможности MQTT и Modbus
Рассмотрим подробнее Modbus и MQTT, изучим их особенности и возможности их совместного использования в IoT-решениях.
Modbus
Modbus, за десятилетия существования, развился в широкий набор протоколов, использующих различные способы физической связи устройств (например, интерфейс RS-485). В основе всех этих реализаций — последовательный протокол, построенный по модели «ведущий — ведомый». Ведущее устройство отправляет ведомому запрос, а ведомое на этот запрос отвечает. В стандартной сети Modbus присутствует один главный, ведущий узел и до 247 подчинённых –ведомых. Однако, надо отметить, что двухбайтовая система адресации способна значительно ослабить это ограничение.
С использованием интерфейса RS-485 связь между главными и подчинёнными устройствами осуществляется с помощью пакетов, которые содержат код функции и данные. Этот код указывает на то, какое действие необходимо предпринять, например, на необходимость прочесть дискретные входные данные, прочесть данные из FIFO-очереди, выполнить диагностическую операцию. Подчинённое устройство, получив команду и исполнив её, отвечает, отправляя пакет, структура которого очень проста. Благодаря низкой вычислительной нагрузки, которую создаёт взаимодействие по Modbus, «общаться» с его использованием могут очень разные устройства: от интеллектуальных контроллеров до обычных датчиков.
Из описания можно судить о крайней простоте Modbus, но его открытость сделала этот протокол стандартном де-факто для индустриальных и SCADA-систем.
MQTT
MQTT (Message Queuing Telemetry Transport) — это простой открытый протокол, разработанный специально для IoT и применяемый для обмена данными между устройствами. MQTT-сеть включает в себя MQTT-брокера, который служит посредником во взаимодействии MQTT-агентов — издателей и подписчиков. Издатели публикуют информацию, предназначенную для подписчиков.
Брокер, издатель и подписчик в MQTT-сети
MQTT разработан в расчёте на маломощные встроенные устройства, поэтому вычислительные требования для его реализации минимальны. В дополнение к очень низкой нагрузке на системы, MQTT отличается высокой эффективности связи даже в сетях с низкой пропускной способностью. При этом в структуре передаваемых с его помощью данных очень мало служебной информации, то есть, в сравнении со многими другими протоколами, например — с HTTP, он почти не нагружает сети передачей информации, которая нужна лишь для функционирования протокола. По измерениям, сделанным в 3G-сетях, пропускная способность MQTT в 93 раза выше, чем протокола REST (Representational State Transfer), работающего поверх HTTP.
MQTT реализует модель «издатель — подписчик», используя минимальное количество методов. Они служат для указания действий, которые нужно выполнять. Эти действия сводятся к взаимодействию с брокером и к работе с темами и сообщениями. Агенты подключаются к брокеру, а затем либо публикуют темы и сообщения в них, либо подписываются на темы и получают сообщения, в этих темах опубликованные. Завершив работу, агент отключается от брокера. Вот как выглядят методы MQTT:
- Connect — установить соединение с брокером.
- Disconnect — разорвать соединение с брокером.
- Publish — опубликовать тему на брокере.
- Subscribe — подписаться на тему на брокере.
- Unsubscribe — отписаться от темы на брокере.
Вот как выглядит упрощённая схема взаимодействия между подписчиком и издателем с использованием MQTT-брокера.
Взаимодействие подписчика и издателя
Издатель, который является источником неких данных, подключается к брокеру. Подписчик, потребитель информации, делает то же самое и подписывается на тему, которая представлена здесь как »/home/alarms/1/status». В данном примере в этой теме публикуются сведения об изменениях состояния домашней сигнализации в некоей «зоне №1». Когда у издателя есть новые данные, он обращается к брокеру и публикует сообщение в этой теме. Брокер же, в свою очередь, передаёт опубликованное сообщения всем, кто на эту тему подписан.
Обратите внимание на иерархическую структуру имени темы из нашего примера. Она похожа на путь в файловой системе. Это упрощает организацию тем. Кроме того, подобные иерархические структуры именования ресурсов популярны и в других архитектурах протоколов, например, в REST.
MQTT, кроме того, позволяет пользоваться подстановочными символами, что упрощает процесс подписки. Если подписчик, например, желает знать о состояниях всех датчиков сигнализации, он может подписаться на тему следующего вида:»/home/alarms/+/status». В результате, он будет уведомлён о срабатываниях сигнализации во всех зонах, а не только в «зоне №1», как в вышеприведённом примере. Подписаться на целое поддерево тем можно с помощью шаблонна со знаком »#». Например, подписка на »/home/#» позволит получать сообщения обо всём, что происходит в темах, находящихся ниже узла »/home».
Качество обслуживания
MQTT поддерживает указание уровня качества обслуживания (QoS). А именно, существуют три таких уровня:
- QoS 0. Этот уровень задействует стратегию «максимум однократная доставка сообщений». Приёмник сообщения не подтверждает их получение, отправитель, соответственно, передаёт сообщение лишь раз, не предпринимая попыток по их повторной передаче. Это — метод «отправил и забыл».
- QoS 1. Здесь применяется подход «минимум однократная доставка сообщений». Гарантируется, что приёмник получит сообщение хотя бы один раз. При этом подписчик может получить одно и то же сообщение несколько раз. А отправитель будет предпринимать повторные попытки отправки до тех пор, пока не получит подтверждение в успешной доставке сообщения.
- QoS 2. Этому уровню качества обслуживания соответствует самая медленная процедура доставки сообщений, но при этом он — самый надёжный. Его основная особенность — реализация стратегии «однократная доставка сообщений». При его использовании применяется четырёхступенчатая процедура подтверждения доставки сообщений.
Выбор конкретного уровня качества обслуживания зависит от особенностей передаваемых данных и от того, насколько важно, чтобы они были доставлены.
MQTT-брокеры и шлюзы Intel для интернета вещей
Растущая популярность MQTT в роли важного элемента построения IoT-проектов привела к тому, что создано немало реализаций MQTT с открытым исходным кодом, он применяется во множестве аппаратных разработок. Шлюзы Intel для интернета вещей — это одно из продвинутых решений промышленного уровня, которое поддерживает MQTT.
Это семейство продуктов позволяет налаживать безопасные подключения между датчиками, IoT-устройствами и облачными службами. Шлюзы тщательно протестированы и готовы к установке на них программного обеспечения, необходимого для функционирования конкретного проекта. Они отличаются отличной управляемостью, высоким уровнем безопасности и широким набором поддерживаемых способов связи с внешним миром. Среди этих способов, помимо традиционного проводного Ethernet и беспроводного Wi-Fi, можно найти и ZigBee, и поддержку сотовых сетей, и USB, и, конечно, MQTT и Modbus.
Если говорить о сетевых возможностях, то существует три варианта шлюзов Intel для интернета вещей, они имеют различные конфигурации подсистем ввода-вывода информации. Это деление основано на потребностях рынка. Среди таких потребностей, которые могут учитываться как по отдельности, так и в комбинациях, можно отметить создание стационарных решений промышленного класса, экономичное потребление энергии, разработка решений для подвижных объектов. Но, даже обладающие разными характеристиками, все шлюзы поддерживают функции управления и конфигурирования, обеспечивают безопасность передачи и хранения данных, предоставляют среду для исполнения приложений. При этом стандартной ОС шлюзов является безопасная и стабильная Wind River Linux.
Очень важное преимущество шлюзов Intel для интернета вещей заключается в поддержке технологий безопасности McAfee Embedded Control. В частности, благодаря этим технологиям становится возможным отслеживать изменение состояния устройства, основываясь на политике безопасности. Подобное наблюдение за состоянием устройства, отслеживание всех событий, происходящих с ним, позволяет организовать полностью прозрачную, непрерывно действующую систему аудита, отчётам которой можно доверять.
Заключение
MQTT и Modbus — технологии очень разные, но вместе они помогают строить надёжные IoT-решения. Modbus используется в качестве локального интерфейса для взаимодействия с устройствами, роль MQTT — организация глобальных связей между компонентами системы. Каждый из них играет важную роль. При этом шлюзы Intel для интернета вещей поддерживают оба этих протокола, помимо других средств связи и технологий, обеспечивающих стабильность и безопасность функционирования проектов. С помощью таких шлюзов можно быстро создавать надёжные современные IoT-решения, которые останутся актуальными и в будущем.