16 885
правок
(Первая версия, требует правки) |
м (Поправил текст) |
||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Шлюз Modbus RTU}} | {{DISPLAYTITLE: Шлюз Modbus RTU}} | ||
Контроллеры Wiren Board могут выступать в роли Slave-устройства и транслировать сообщения из выбранных MQTT-топиков в регистры Modbus RTU. Для каждого топика или группы можно указать свой modbus-адрес и номера регистров. | |||
Функция трансляции топиков может быть полезна для настройки взаимодействия между контроллером Wiren Board и внешним программным обеспечением, например, SCADA-системы с поддержкой Modbus RTU. | |||
{{Wbincludes:Installation wb-mqtt-mbgate}} | {{Wbincludes:Installation wb-mqtt-mbgate}} | ||
Строка 10: | Строка 10: | ||
[[File:Modbus-RTU-settings-mbgate.png|right|thumb|300 px|Настройка Modbus-RTU шлюза в веб-интерфейсе контроллера Wiren Board]] | [[File:Modbus-RTU-settings-mbgate.png|right|thumb|300 px|Настройка Modbus-RTU шлюза в веб-интерфейсе контроллера Wiren Board]] | ||
После установки | После установки <code>wb-mqtt-mbgate</code> нужно указать топики, отображаемые в регистры Modbus RTU, уточнить их адреса и выбрать формат регистров. | ||
Чтобы открыть настройку шлюза, в веб-интерфейсе перейдите в раздел '''Settings''' → '''Configs''' → '''MQTT to Modbus TCP and RTU slave gateway configuration''' | |||
=== Modbus binding === | === Modbus binding === | ||
Выберите здесь тип шлюза — '''RTU''', а также serial-порт, на котором будет доступен шлюз и параметры соединения: | |||
* '''Path to device''' — адрес serial-порта контроллера, | * '''Path to device''' — адрес serial-порта контроллера, | ||
* '''Baud rate''' — скорость соединения, | * '''Baud rate''' — скорость соединения, | ||
Строка 23: | Строка 23: | ||
=== MQTT connection === | === MQTT connection === | ||
Здесь | Здесь можно настроить параметры для подключения к брокеру сообщений MQTT. По умолчанию шлюз использует MQTT-брокер контроллера. Также вы можете настроить аутентификацию при подключении к брокеру. | ||
Обязательные параметры: | Обязательные параметры: | ||
* '''Address''' — адрес брокера сообщений. По умолчанию: localhost — подключение к брокеру контроллера. | * '''Address''' — адрес брокера сообщений. По умолчанию: <code>localhost</code> — подключение к брокеру контроллера. | ||
* '''Port''' — номер порта, по которому доступен брокер. По умолчанию: 1883. | * '''Port''' — номер порта, по которому доступен брокер. По умолчанию: <code>1883</code>. | ||
Нажав на кнопку '''Properties''' вы можете включить дополнительные параметры: | Нажав на кнопку '''Properties''' вы можете включить дополнительные параметры: | ||
* '''Keep-alive interval''' — интервал ожидания ответа от брокера. Если сообщение не пришло — запрос повторяется. | * '''Keep-alive interval''' — интервал ожидания ответа от брокера. Если сообщение не пришло — запрос повторяется. | ||
* '''Enable username+password authentification''' — | * '''Enable username+password authentification''' — если брокер требует аутентификации с помощью логина и пароля, установите этот флаг. Также потребуется указать данные учетной записи: | ||
* '''Login''' — имя пользователя | ** '''Login''' — имя пользователя. | ||
* '''Password''' — пароль | ** '''Password''' — пароль. | ||
=== Register bindings === | === Register bindings === | ||
В этом разделе | В этом разделе можно настроить соответствия топиков и регистров. | ||
Раздел содержит список всех найденных каналов в очереди сообщений MQTT, распределённых по типу. Каналы определяются по имени топика: в список вносятся все топики, соответствующие шаблону <code>/devices/+/controls/+</code>, при этом в списке они отображаются как <code>+/+</code>. Например, если в брокере сообщений обнаружено сообщение с топиком <code>/devices/alarms/controls/alarm_test</code>, то в этом списке канал будет записан как <code>alarms/alarm_test</code>. | Раздел содержит список всех найденных каналов в очереди сообщений MQTT, распределённых по типу. Каналы определяются по имени топика: в список вносятся все топики, соответствующие шаблону <code>/devices/+/controls/+</code>, при этом в списке они отображаются как <code>+/+</code>. Например, если в брокере сообщений обнаружено сообщение с топиком <code>/devices/alarms/controls/alarm_test</code>, то в этом списке канал будет записан как <code>alarms/alarm_test</code>. | ||
Строка 43: | Строка 43: | ||
Если в брокере сообщений появились новые каналы, например, при подключении нового устройства — они будут добавлены в список при перезапуске службы. Чтобы перезапустить службу, сохраните конфигурацию или перезапустите контроллер. | Если в брокере сообщений появились новые каналы, например, при подключении нового устройства — они будут добавлены в список при перезапуске службы. Чтобы перезапустить службу, сохраните конфигурацию или перезапустите контроллер. | ||
Каналы распределены по | Каналы распределены по четырем группам — типам регистров в Modbus: | ||
* '''Discrete inputs''' — дискретные входы. Двоичные значения <code>1/0</code>, доступные только на чтение. Например, состояния входов GPIO. | * '''Discrete inputs''' — дискретные входы. Двоичные значения <code>1/0</code>, доступные только на чтение. Например, состояния входов GPIO. | ||
* '''Coils''' — регистры флагов. Двоичные значения, доступные на чтение и на запись | * '''Coils''' — регистры флагов. Двоичные значения, доступные на чтение и на запись: переключатели состояний реле и т.п. | ||
* '''Input registers''' — регистры ввода. Численные значения, доступные только на чтение | * '''Input registers''' — регистры ввода. Численные значения, доступные только на чтение: значение с датчика температуры, давления и т.п. | ||
* '''Holding registers''' — регистры хранения. Численные значения, доступные на чтение и на запись. | * '''Holding registers''' — регистры хранения. Численные значения, доступные на чтение и на запись: яркость освещения, уставки температуры и т.п. | ||
Распределение происходит автоматически на основании описания канала в топиках: <code>/devices/+/controls/+/meta/+</code>. | |||
'''Remap addresses after edit''' — если произошло наложение адресов, то обновить адреса устройств. Если установить флаг и сохранить настройки, то файл будет проанализирован на наложение адресов. Если наложения будут обнаружены, сервис попытается устранить их и после операции снимет флаг. Обновите страницу клавишами <code>Ctrl+Shift+R</code>, чтобы считать внесенные сервисом изменения. | |||
'''ВНИМАНИЕ:''' используйте флаг '''Remap addresses after edit''' только на настраиваемой системе — адреса любых каналов могут измениться, в том числе и настроенных ранее. | |||
=== Discrete inputs and Coils === | |||
Для дискретных и числовых регистров доступны параметры: | Для дискретных и числовых регистров доступны параметры: | ||
* '''Enabled''' — флаг, включающий привязку канала к регистру. По умолчанию все каналы отключены. | * '''Enabled''' — флаг, включающий привязку канала к регистру. По умолчанию все каналы отключены. | ||
* '''MQTT Device''' — имя канала в формате <code>+/+</code>, как соответствие <code>/devices/+/controls/+/</code>. | * '''MQTT Device''' — имя канала в формате <code>+/+</code>, как соответствие <code>/devices/+/controls/+/</code>. | ||
* '''Meta-type''' — тип канала, полученный из очереди MQTT. Параметр отображен только «для пользователя», не влияет на работу службы. | * '''Meta-type''' — тип канала, полученный из очереди MQTT. Параметр отображен только «для пользователя», не влияет на работу службы. | ||
* '''Modbus unit ID''' и '''Start address''' — адресные поля Modbus RTU. Определяются хешированием от имени канала | * '''Modbus unit ID''' и '''Start address''' — адресные поля Modbus RTU. Определяются хешированием от имени канала. Таким образом, одинаковые каналы на разных контроллерах с большой вероятностью будут иметь одинаковые адресные поля. Адреса 1 и 2 зарезервированы за пользователем, поэтому ни один канал не будет назначен на них автоматически. | ||
=== Input- и Holding-registers === | |||
Для Input- и Holding-регистров, | Для Input- и Holding-регистров, доступны все параметры [[#Discrete inputs and Coils |дискретных и числовых]], а также дополнительно: | ||
* '''Register format''' — тип хранимых данных: | * '''Register format''' — тип хранимых данных: | ||
** ''Signed integer'' — знаковое целое; | ** ''Signed integer'' — знаковое целое; | ||
** ''Unsigned integer'' — беззнаковое целое; | ** ''Unsigned integer'' — беззнаковое целое; | ||
** ''BCD'' — двоично-десятичное беззнаковое целое. Например, десятичное значение 123 будет кодироваться как 0x123 == 291; | ** ''BCD'' — двоично-десятичное беззнаковое целое. Например, десятичное значение 123 будет кодироваться как <code>0x123 == 291</code>; | ||
** ''IEEE 754 float'' — число с плавающей точкой; | ** ''IEEE 754 float'' — число с плавающей точкой; | ||
** ''Varchar'' — текстовое поле фиксированного размера (1 символ на регистр). | ** ''Varchar'' — текстовое поле фиксированного размера (1 символ на регистр). | ||
* '''Size''' — размер данных в байтах. Нужно учитывать, что для всех типов, кроме текстового, в один регистр укладывается два байта | * '''Size (in bytes)''' — размер данных в байтах. Нужно учитывать, что для всех типов, кроме текстового, в один регистр укладывается два байта: | ||
** для целочисленных типов — 2, 4 и 8 байт | ** для целочисленных типов — 2, 4 и 8 байт — это будет 1, 2 и 4 регистра соответственно; | ||
** для чисел с плавающей точкой — 4 и 8 байт | ** для чисел с плавающей точкой — 4 и 8 байт, то есть 2 и 4 регистра соответственно; | ||
** для текстовых полей — любое неотрицательное значение. | ** для текстовых полей — любое неотрицательное значение. | ||
Строка 83: | Строка 87: | ||
Таким образом, чтобы записать значение в формате ''little-endian'', нужно установить оба последних флага. | Таким образом, чтобы записать значение в формате ''little-endian'', нужно установить оба последних флага. | ||