Шлюз Modbus RTU/TCP

From Wiren Board
(Redirected from Шлюз Modbus TCP)

This is the approved revision of this page, as well as being the most recent.


Описание

Контроллеры Wiren Board могут выступать в роли Slave-устройства и транслировать сообщения из выбранных MQTT-топиков по протоколам Modbus RTU, Modbus TCP.

Функция трансляции топиков может быть полезна для настройки взаимодействия между контроллером Wiren Board и внешним программным обеспечением, например, SCADA-системы с поддержкой Modbus RTU/TCP.

Для создания шлюза Modbus RTU/TCP служит сервис wb-mqtt-mbgate. Перед использованием нужно указать топики, отображаемые в регистры Modbus RTU/TCP, уточнить их адреса и выбрать формат регистров.

Настройки шлюза хранятся в файле /etc/wb-mqtt-mbgate.conf и доступны в разделе Настройки → Конфигурационные файлы → Шлюз MQTT - Modbus RTU/TCP slave.

Настройка Modbus TCP

Настройка Modbus TCP шлюза в веб-интерфейсе контроллера Wiren Board
  1. Выберите режим работы шлюза — TCP.
  2. Укажите IP-адрес и порт создаваемого сервера:
    • IP-адрес, по которому будет доступен сервер Modbus TCP. По умолчанию: * — возможно подключение к любому IP-адресу контроллера;
    • Порт, на котором сервер будет ждать соединение. По умолчанию: 502 — стандартный для Modbus TCP порт.
  3. Нажмите Сохранить.

Важно для Modbus TCP: Так как контроллер является шлюзом, то он назначает разным устройствам, которые к нему подключены, разные ID данных Modbus. Некоторое программное обеспечение рассчитано на работу с одним ID (например 1) на одном IP-адресе. В некоторых программах стартовый адрес считается начинающимся с 1, а не с 0. В таком случае к стартовому адресу из конфигурации шлюза надо добавлять 1 при указании его в вашем ПО.

Настройка Modbus RTU

Внимание! Порт, выбранный для работы в режиме Modbus-slave, не должен использоваться в настройках опроса драйвера wb-mqtt-serial. Отключить порт можно в разделе Настройки → Конфигурационные файлы → Настройка драйвера serial-устройств.

Настройка Modbus RTU шлюза в веб-интерфейсе контроллера Wiren Board
  1. Выберите режим работы шлюза — RTU.
  2. Укажите serial-порт и параметры соединения:
    • Путь к устройству — адрес serial-порта контроллера, на котором будет доступен шлюз. Например /dev/ttyRS485-1;
    • параметры соединения: скорость обмена, контроль чётности, число бит данных, стоп биты.
  3. Нажмите Сохранить.

Настройки подключения к брокеру MQTT

Настройки подключения к брокеру MQTT

По умолчанию шлюз использует MQTT-брокер контроллера.

Обязательные параметры:

  • Адрес — адрес брокера сообщений. По умолчанию: /var/run/mosquitto/mosquitto.sock — подключение к брокеру контроллера;
  • Порт — номер порта, по которому доступен брокер. По умолчанию: 0.

Дополнительные параметры:

  • Интервал ожидания ответа. Запрос к брокеру повторяется, если данные не были получены в течение заданного интервала. Если значение не указано, интервал составляет 60 мс.
  • Включить аутентификацию по логину и паролю — если брокер требует аутентификации с помощью логина и пароля, установите этот флаг. Также потребуется указать данные учетной записи Логин и Пароль.

Соответствие каналов и регистров

Раздел содержит список всех найденных каналов в очереди сообщений MQTT, распределённых по типу. Каналы определяются по имени топика: в список вносятся все топики, соответствующие шаблону /devices/+/controls/+, при этом в списке они отображаются как +/+. Например, если в брокере сообщений обнаружено сообщение с топиком /devices/alarms/controls/alarm_test, то в этом списке канал будет записан как alarms/alarm_test.

Если в брокере сообщений появились новые каналы, например, при подключении нового устройства — они будут добавлены в список после сохранения новой конфигурации.

Настройка каналов шлюза Modbus RTU/TCP в веб-интерфейсе контроллера Wiren Board

Для добавления канала:

  1. Нажмите Добавить.
  2. Выберите один или несколько каналов из списка, нажмите Добавить.
  3. При необходимости задайте ID данных Modbus и Начальный адрес канала.
  4. Нажмите Сохранить.

Типы и параметры регистров

Каналы распределены по четырем группам — типам регистров в Modbus. Распределение происходит автоматически на основании описания канала в топиках /devices/+/controls/+/meta/+:

  • дискретные входы (Discrete inputs) — дискретные входы. Двоичные значения 1/0, доступные только на чтение. Например, состояния входов GPIO;
  • дискретные выходы (Coils) — регистры флагов. Двоичные значения, доступные на чтение и на запись: переключатели состояний реле и т.п;
  • регистры Input (Input registers) — регистры ввода. Численные значения, доступные только на чтение: значение с датчика температуры, давления и т.п;
  • регистры Holding (Holding registers) — регистры хранения. Численные значения, доступные на чтение и на запись: яркость освещения, уставки температуры и т.п.

Дискретные входы и выходы

Для дискретных и числовых регистров доступны параметры:

  • Включить — флаг, включающий привязку канала к регистру. По умолчанию все каналы отключены.
  • Канал MQTT — имя канала в формате +/+, как соответствие /devices/+/controls/+/.
  • ID данных Modbus и Начальный адрес — адрес slave-устройства в сети Modbus RTU/TCP и адрес его регистра. Определяются хешированием от имени канала. Таким образом, одинаковые каналы на разных контроллерах с большой вероятностью будут иметь одинаковые адресные поля. Адреса 1 и 2 зарезервированы за пользователем, поэтому ни один канал не будет назначен на них автоматически.

Регистры Input и Holding

Для Input и Holding регистров, доступны все параметры дискретных входов и выходов, а также дополнительно:

  • Register format — тип хранимых данных:
    • Signed integer — знаковое целое;
    • Unsigned integer — беззнаковое целое;
    • BCD — двоично-десятичное беззнаковое целое. Например, десятичное значение 123 будет кодироваться как 0x123 == 291;
    • IEEE 754 float — число с плавающей точкой;
    • Varchar — текстовое поле фиксированного размера (1 символ на регистр).
  • Size (in bytes) — размер данных в байтах. Нужно учитывать, что для всех типов в один регистр укладывается два байта:
    • для целочисленных типов — 2, 4 и 8 байт — это будет 1, 2 и 4 регистра соответственно;
    • для чисел с плавающей точкой — 4 и 8 байт, то есть 2 и 4 регистра соответственно;
    • для текстовых полей — длина строки указывается в регистрах (не в байтах), при этом 1 регистр = 1 символ.
  • Value scale — множитель значения. Например, если множитель равен 2 и в канале появилось значение 10, значение регистра будет 20. И наоборот, если в регистр было записано значение 30, в брокер уйдёт сообщение со значением 15;
  • Byte swap — поменять порядок байт в modbus-регистрах. По умолчанию значения записываются в регистры в формате big-endian. Если установить этот флаг, регистр будет интерпретироваться как little-endian. Важно: флаг действует только на отдельные регистры; в случае составных значений (размером больше 2 байт), меняется порядок только в каждом двухбайтном слове. Например, значение 0x12345678 будет записываться как 0x34127856;
  • Word swap — поменять порядок слов для составных значений. Например, значение 0x12345678 будет записываться как 0x56781234.

Таким образом, чтобы записать значение в формате little-endian, нужно установить оба последних флага: Byte swap и Word swap.