Перейти к основному содержимому

Подключение устройств Modbus TCP к облачным сервисам MQTT


MQTT предоставляет преимущества как телеметрический протокол: он обеспечивает обмен данными между устройствами (клиентами) в условиях ненадёжной или непостоянной связи. Устройства могут отключаться от сети, но при повторном подключении MQTT-брокер гарантированно передаст сообщение.

В последнее время набирают популярность различные облачные сервисы с MQTT-брокерами, например, Центр Интернета вещей Azure от Microsoft или AWS IoT от Amazon.

Вы можете подключить к облачным сервисам MQTT устройства, не поддерживающие MQTT, например, Modbus-устройства, используя для этого iRidium server как шлюз.

Описание примера


Скачать пример проекта

iRidium server используется для подключения устройств Modbus TCP к облачному сервису CloudMQTT. Также к сервису подключается панель, для которой разрабатывается отдельный проект с графическим интерфейсом. Таким образом появляется возможность удалённо управлять устройствами в сети Modbus TCP по телеметрическому протоколу MQTT.

CloudMQTT_scheme(1).png

Настройка CloudMQTT

CloudMQTT предлагает различные планы использования.

Вы можете выбрать бесплатный план Cute Cat, который предоставляет виртуальный сервер (не выделенный), максимум 5 пользователей, 5 правил доступа и 5 соединений, трафик 10 кБит/с. Этот план не рекомендуется для коммерческого использования, но отлично подойдёт для тестирования и домашнего хобби.

  1. Зарегистрируйтесь на сайте CloudMQTT и войдите под учётной записью.

  2. Нажмите кнопку "Create New Instance".

CloudMQTT01.png

  1. Задайте имя инстанса, план использования и географическое расположение сервера (Data Center ). Нажмите кнопку "Create New Instance".

CloudMQTT02.png

  1. Кликните на имя созданного инстанса, чтобы перейти к его настройкам.

CloudMQTT03.png

  1. На вкладке DETAILS отобразятся все данные, необходимые для подключения к облачному сервису.

CloudMQTT04.png

Настройка iRidium server

Настройка драйвера MQTT

  1. Создайте проект сервера.

  2. Добавьте драйвер MQTT в проект.

MQTT01(1).png

  1. Настройте драйвер в соответствии со вкладкой DETAILS инстанса сервиса CloudMQTT:
  • Host - адрес инстанса сервиса (Server )

  • Port - порт инстанса:

    • 13816 (незащищённое соединение),
    • 23816 (защищённое соединение SSL),
    • 33816 (защищённое содинение WebSocket; не поддерживается iRidium pro)
  • Login - логин для доступа к инстансу (User )

  • Password - пароль для доступа к инстансу (Password )

  • Client ID - идентификатор MQTT-клиента, уникальное имя для каждого устройства MQTT

  • SSL - метод шифрования:

    • Disable
    • TLS 1.2 (рекомендуется)
    • SSL 2.3
    • SSL 3.0 (не поддерживается CloudMQTT)

Подробнее: Настройка параметров подключения MQTT.

  1. Создайте необходимое количество каналов и тэгов. Настройте каждый канал и тэг.

MQTT02.png

CloudMQTT позволяет задавать параметру Topic произвольную строку. Рекомендуется задавать Topic в стандартной иерархической форме, напоминающей адресную строку файловой системы, например:

/place/device_name/group_name/parameter_name

Подробнее: Настройка параметров каналов и фидбеков MQTT.

Настройка драйвера Modbus TCP

  1. Добавьте драйвер Modbus TCP.

  2. Настройте параметры подключения.

  3. Создайте необходимое количество команд и тэгов в драйвере.

  4. Настройте каждую команду и тэг в соответствии с задачей.

Шлюз между драйверами MQTT и Modbus TCP

  1. Добавьте скрипт в проект:
var driver1 = IR.GetDevice("MQTT");       // name of a driver 1
var driver2 = IR.GetDevice("Modbus TCP"); // name of a driver 2

var gatemap = {
// Tag name Channel name
"Door_switch" : "MQTT_Door_switch",
"Ring_button" : "MQTT_Ring_button",
"Outdoor_temperature" : "MQTT_Outdoor_temperature",
"Indoor_temperature" : "MQTT_Indoor_temperature",
"MQTT_Lock" : "Lock",
"MQTT_Siren" : "Siren",
"MQTT_Dimmer_R" : "Dimmer_R",
"MQTT_Dimmer_G" : "Dimmer_G",
"MQTT_Dimmer_B" : "Dimmer_B",
"MQTT_Dimmer_ON" : "Dimmer_ON"
};

IR.AddListener(IR.EVENT_TAG_CHANGE, driver1, function(name, value) {
if (gatemap[name]) {
driver2.Set(gatemap[name], value);
}
});
IR.AddListener(IR.EVENT_TAG_CHANGE, driver2, function(name, value) {
if (gatemap[name]) {
driver1.Set(gatemap[name], value);
}
});
  1. Не забудьте в скрипте задать правильные имена драйверов, между которыми организуется шлюз, а также карту шлюза.

Карта шлюза (переменная gatemap) представляет с собой список соответствующих пар имён тэгов и каналов двух разных драйверов. Между парами этих тэгов и каналов и будет происходить обмен данными. Вы можете дополнять этот список.

Неуправляемый шлюз

Выше был приведён метод управляемого шлюза между драйверами, который требовал указания карты шлюза тэгов и каналов. В случае управляемого шлюза вы можете указать, какие данные нужно пересылать с тэга одного драйвера на канал другого драйвера, а какие - нет.

Может быть применён более простой скрипт, в котором не нужно будет задавать карту шлюза. В этом случае шлюз будет называться неуправляемым и все данные будут пересылаться с тэгов на каналы. При этом необходимо, чтобы имена тэги одного драйвера совпадали с именами каналов другого драйвера, и наоборот.

  1. Задайте одинаковые имена тэгам драйвера MQTT и каналам драйвера Modbus TCP, и соответственно - тэгам драйвера Modbus TCP и каналам драйвера MQTT.

  2. Удалите предыдущий скрипт. Вместо него добавьте скрипт:

// Assign the same names to tags of first driver and to channels of second driver,
// and accordingly - to tags of second drivers and to channels of first driver.
var driver1 = IR.GetDevice("MQTT"); // name of a driver 1
var driver2 = IR.GetDevice("Modbus TCP"); // name of a driver 2

IR.AddListener(IR.EVENT_TAG_CHANGE, driver1, function(name,value) {
driver2.Set(name, value);
});
IR.AddListener(IR.EVENT_TAG_CHANGE, driver2, function(name,value) {
driver1.Set(name, value);
});
  1. В этом скрипте достаточно лишь указать имена драйверов.

Настройка проекта i3 pro

  1. Создайте проект панели.

  2. Добавьте драйвер MQTT.

  3. Настройте подключение к сервису CloudMQTT аналогично тому, как это было сделано в проекте сервера, а именно: введите те же параметры подключения драйвера MQTT (Host , Port , Login , Password ). Назначьте другой идентификатор клиента (Client ID ), чтобы сервис CloudMQTT мог отличать подключающихся клиентов друг от друга.

  4. Создайте необходимое количество команд и тэгов. Те переменные, которые были командами в сервере, в панели должны сопоставлены тэгам, и наоборот, тэги в сервере должны соответствовать командам в панели.

  5. У команд и тэгов следует задать параметры Topic и Value Type так же, как у соответствующих каналов сервера.

  6. Создайте графический интерфейс. Свяжите графические элементы с командами и тэгами драйвера MQTT по событиям или связями.

CloudMQTT_GUI(2).png

Тестирование проектов

  1. Запустите проект сервера и проект панели в любом порядке. Вы можете использовать для этого эмулятор i3 pro и iRidium server для Windows.

  2. Перейдите на вкладку CONNECTIONS инстанса CloudMQTT. На этой вкладке отображается состояние MQTT-соединений.

CloudMQTT05.png

  1. Перейдите на вкладку WEBSOCKET UI, используемую разработчиками для тестирования. Здесь вы можете просматривать все получаемые MQTT-сообщения и отправлять их.

CloudMQTT06.png

  1. Вы может использовать любой эмулятор сервера Modbus TCP, например, бесплатный Modbus PLC Simulator для тестирования проекта.

В рассматриваемом примере все издатели и подписчики имеют полные права доступа на MQTT-топики, но Вы можете задать правила и ограничения на вкладке USERS & ACL инстанса CloudMQTT.