Modbus RTU/TCP Slave: различия между версиями
(→Input- и Holding-registers: исправил информацию для текстовых полей) |
N.maslov (обсуждение | вклад) |
||
(не показаны 24 промежуточные версии 9 участников) | |||
Строка 1: | Строка 1: | ||
В Wiren Board добавлена возможность отображать сообщения из определённых топиков в очереди сообщений MQTT в регистры Modbus TCP. Это может быть полезным для настройки | |||
простого взаимодействия Wiren Board и SCADA-систем с поддержкой Modbus TCP. | |||
== Установка и настройка на контроллере == | |||
=== Установка === | |||
Для начала нужно установить пакет wb-mqtt-mbgate. В консоли устройства вводим | |||
= | <syntaxhighlight lang="bash"> | ||
root@wirenboard:~# apt-get update && apt-get install wb-mqtt-mbgate | |||
</syntaxhighlight> | |||
== | === Настройка === | ||
== | [[File:web-mbgate-settings.png|right|thumb|250 px|Страница настройки шлюза]] | ||
Здесь можно настроить | |||
После установки требуется указать топики, которые будут отображаться на регистры Modbus TCP, уточнить их адреса и указать формат регистров. Для этого в веб-интерфейсе переходим в раздел Configs (Конфигурирование) и открываем конфигурационный файл /etc/wb-mqtt-mbgate.conf. | |||
==== Modbus binding ==== | |||
Здесь можно настроить порт и адрес, по которым будет доступен сервер Modbus TCP. | |||
Обязательные параметры: | Обязательные параметры: | ||
* | * '''Bind address''' - адрес, по которому будет доступен сервер Modbus TCP. Значение по умолчанию - * - означает, что возможно подключение по любому адресу, по которому доступен контроллер (например, по IP-адресу или по доменному имени). | ||
* | * '''Server TCP port''' - номер порта, по которому будет доступен сервер Modbus TCP. Значение по умолчанию - 502 - стандартный порт для Modbus TCP. | ||
==== MQTT connection ==== | |||
Здесь настраиваются параметры для подключения к брокеру сообщений MQTT. По умолчанию шлюз использует MQTT-брокер контроллера. Есть возможность настроить аутентификацию. | |||
Обязательные параметры: | |||
* '''Address''' - адрес брокера сообщений. По умолчанию - localhost - подключение к брокеру контроллера. | |||
* '''Port''' - номер порта, по которому доступен брокер. По умолчанию - 1883. | |||
Дополнительные параметры: | |||
* '''Keep-alive interval''' | |||
* '''Enable username+password authentification''' - установите этот флаг в случае, если брокер требует аутентификации с помощью логина и пароля. | |||
* '''Login''' - имя пользователя для подключения к брокеру. Обязательный параметр, если установлен флаг '''Enable username+password authentification'''. | |||
* '''Password''' - пароль для подключения к брокеру. Обязательный параметр, если установлен флаг '''Enable username+password authentification'''. | |||
==== Register bindings ==== | |||
В этом разделе настраиваются соответствия топиков и регистров. | |||
Каналы | Раздел содержит список всех найденных каналов в очереди сообщений MQTT, распределённых по типу. Каналы определяются по имени топика: в список вносятся все топики, соответствующие шаблону /devices/+/controls/+, при этом в списке они отображаются как +/+. Например, если в брокере сообщений обнаружено сообщение с топиком /devices/alarms/controls/alarm_test, то в этом списке канал будет записан как alarms/alarm_test. | ||
Если в брокере сообщений появились новые каналы (например, при подключении нового устройства), они будут добавлены в список при перезапуске службы (это происходит при сохранении конфигурационного файла или при перезапуске контроллера). | |||
''' | Каналы распределены по 4 группам - типам регистров в Modbus: | ||
* '''Discrete inputs''' - дискретные входы - двоичные значения (1/0), доступные только на чтение (например, состояния входов GPIO); | |||
* '''Coils''' - регистры флагов - двоичные значения, доступные на чтение и на запись (например, переключатели состояний реле); | |||
* '''Input registers''' - регистры ввода - численные значения, доступные только на чтение (например, значение с датчика температуры); | |||
* '''Holding registers''' - регистры хранения - численные значения, доступные на чтение и на запись (например, яркость освещения). | |||
Распределение происходит автоматически на основании описания канала (в топиках /devices/+/controls/+/meta/+). | |||
Для дискретных и числовых регистров доступны следующие параметры: | |||
Для дискретных и числовых регистров доступны параметры: | |||
''' | * '''Enabled''' - флаг, включающий привязку канала к регистру. По умолчанию, все каналы отключены. | ||
* '''MQTT channel''' - имя канала в формате +/+ (как соответствие /devices/+/controls/+) | |||
* '''Meta-type''' - тип канала, полученный из очереди MQTT. Параметр внесён только "для пользователя", не влияет на работу службы. | |||
* '''Unit ID''' и '''Start address''' - адресные поля Modbus TCP. Определяются хешированием от имени канала; таким образом, одинаковые каналы на разных контроллерах с большой вероятностью будут иметь одинаковые адресные поля. ''Замечание:'' Unit ID 1 и 2 зарезервированы за пользователем - никакие каналы не будут автоматически назначены на эти адреса. | |||
Для числовых регистров, помимо вышеописанных, доступны также параметры: | |||
* '''Register format''' - тип хранимых данных: | |||
** '''Signed integer''' - знаковое целое; | |||
** '''Unsigned integer''' - беззнаковое целое; | |||
** '''BCD''' - двоично-десятичное беззнаковое целое. (Например, десятичное значение 123 будет кодироваться как 0x123 == 291); | |||
** '''IEEE 754 float''' - число с плавающей точкой; | |||
** '''Varchar''' - текстовое поле фиксированного размера (1 символ на регистр). | |||
* '''Size''' - размер данных в байтах. Нужно учитывать, что для всех типов, кроме текстового, в один регистр укладывается два байта. | |||
** для целочисленных типов - 2, 4 и 8 байт (соответственно, в регистрах это будет 1, 2 и 4 регистра); | |||
** для чисел с плавающей точкой - 4 и 8 байт (2 и 4 регистра); | |||
** | ** для текстовых полей - любое неотрицательное значение. | ||
** | |||
** | |||
* '''Maximum value''' - максимальное значение поля. Требуется для каналов типа range. Все значения больше максимума будут заменены на максимальное. | |||
* | * '''Value scale''' - множитель значения. Например, если множитель равен 2 и в канале появилось значение 10, значение регистра будет 20. И наоборот, если в регистр было записано значение 30, в брокер уйдёт сообщение со значением 15. | ||
* | * '''Byte swap''' - поменять порядок байт в регистрах Modbus. По умолчанию, значения записываются в регистры в формате big-endian. Если установить этот флаг, регистр будет интерпретироваться как little-endian. ''Важно:'' флаг действует только на отдельные регистры; в случае составных значений (размером больше 2 байт), меняется порядок только в каждом двухбайтном слове. Например, значение 0x12345678 будет записываться как 0x34127856, | ||
* | * '''Word swap''' - поменять порядок слов для составных значений. Например, значение 0x12345678 будет записываться как 0x56781234. | ||
Таким образом, чтобы записать значение в формате little-endian, нужно установить оба последних флага. | |||
Общие параметры: | |||
* '''Remap addresses after edit''' - обновить адреса устройств в случае, если произошло наложение адресов. Полезно, если требуется изменить размер данных в сторону увеличения. При установке этого флага после сохранения конфигурационного файла он будет проанализирован на наложения адресов; если таковые будут обнаружены, сервис попытается их устранить, после чего флаг будет снят. (Для того, чтобы получить обновлённый конфигурационный файл, после сохранения требуется перезагрузить страницу). |
Версия 17:35, 7 ноября 2016
В Wiren Board добавлена возможность отображать сообщения из определённых топиков в очереди сообщений MQTT в регистры Modbus TCP. Это может быть полезным для настройки простого взаимодействия Wiren Board и SCADA-систем с поддержкой Modbus TCP.
Установка и настройка на контроллере
Установка
Для начала нужно установить пакет wb-mqtt-mbgate. В консоли устройства вводим
root@wirenboard:~# apt-get update && apt-get install wb-mqtt-mbgate
Настройка
После установки требуется указать топики, которые будут отображаться на регистры Modbus TCP, уточнить их адреса и указать формат регистров. Для этого в веб-интерфейсе переходим в раздел Configs (Конфигурирование) и открываем конфигурационный файл /etc/wb-mqtt-mbgate.conf.
Modbus binding
Здесь можно настроить порт и адрес, по которым будет доступен сервер Modbus TCP.
Обязательные параметры:
- Bind address - адрес, по которому будет доступен сервер Modbus TCP. Значение по умолчанию - * - означает, что возможно подключение по любому адресу, по которому доступен контроллер (например, по IP-адресу или по доменному имени).
- Server TCP port - номер порта, по которому будет доступен сервер Modbus TCP. Значение по умолчанию - 502 - стандартный порт для Modbus TCP.
MQTT connection
Здесь настраиваются параметры для подключения к брокеру сообщений MQTT. По умолчанию шлюз использует MQTT-брокер контроллера. Есть возможность настроить аутентификацию.
Обязательные параметры:
- Address - адрес брокера сообщений. По умолчанию - localhost - подключение к брокеру контроллера.
- Port - номер порта, по которому доступен брокер. По умолчанию - 1883.
Дополнительные параметры:
- Keep-alive interval
- Enable username+password authentification - установите этот флаг в случае, если брокер требует аутентификации с помощью логина и пароля.
- Login - имя пользователя для подключения к брокеру. Обязательный параметр, если установлен флаг Enable username+password authentification.
- Password - пароль для подключения к брокеру. Обязательный параметр, если установлен флаг Enable username+password authentification.
Register bindings
В этом разделе настраиваются соответствия топиков и регистров.
Раздел содержит список всех найденных каналов в очереди сообщений MQTT, распределённых по типу. Каналы определяются по имени топика: в список вносятся все топики, соответствующие шаблону /devices/+/controls/+, при этом в списке они отображаются как +/+. Например, если в брокере сообщений обнаружено сообщение с топиком /devices/alarms/controls/alarm_test, то в этом списке канал будет записан как alarms/alarm_test.
Если в брокере сообщений появились новые каналы (например, при подключении нового устройства), они будут добавлены в список при перезапуске службы (это происходит при сохранении конфигурационного файла или при перезапуске контроллера).
Каналы распределены по 4 группам - типам регистров в Modbus:
- Discrete inputs - дискретные входы - двоичные значения (1/0), доступные только на чтение (например, состояния входов GPIO);
- Coils - регистры флагов - двоичные значения, доступные на чтение и на запись (например, переключатели состояний реле);
- Input registers - регистры ввода - численные значения, доступные только на чтение (например, значение с датчика температуры);
- Holding registers - регистры хранения - численные значения, доступные на чтение и на запись (например, яркость освещения).
Распределение происходит автоматически на основании описания канала (в топиках /devices/+/controls/+/meta/+).
Для дискретных и числовых регистров доступны следующие параметры:
- Enabled - флаг, включающий привязку канала к регистру. По умолчанию, все каналы отключены.
- MQTT channel - имя канала в формате +/+ (как соответствие /devices/+/controls/+)
- Meta-type - тип канала, полученный из очереди MQTT. Параметр внесён только "для пользователя", не влияет на работу службы.
- Unit ID и Start address - адресные поля Modbus TCP. Определяются хешированием от имени канала; таким образом, одинаковые каналы на разных контроллерах с большой вероятностью будут иметь одинаковые адресные поля. Замечание: Unit ID 1 и 2 зарезервированы за пользователем - никакие каналы не будут автоматически назначены на эти адреса.
Для числовых регистров, помимо вышеописанных, доступны также параметры:
- Register format - тип хранимых данных:
- Signed integer - знаковое целое;
- Unsigned integer - беззнаковое целое;
- BCD - двоично-десятичное беззнаковое целое. (Например, десятичное значение 123 будет кодироваться как 0x123 == 291);
- IEEE 754 float - число с плавающей точкой;
- Varchar - текстовое поле фиксированного размера (1 символ на регистр).
- Size - размер данных в байтах. Нужно учитывать, что для всех типов, кроме текстового, в один регистр укладывается два байта.
- для целочисленных типов - 2, 4 и 8 байт (соответственно, в регистрах это будет 1, 2 и 4 регистра);
- для чисел с плавающей точкой - 4 и 8 байт (2 и 4 регистра);
- для текстовых полей - любое неотрицательное значение.
- Maximum value - максимальное значение поля. Требуется для каналов типа range. Все значения больше максимума будут заменены на максимальное.
- Value scale - множитель значения. Например, если множитель равен 2 и в канале появилось значение 10, значение регистра будет 20. И наоборот, если в регистр было записано значение 30, в брокер уйдёт сообщение со значением 15.
- Byte swap - поменять порядок байт в регистрах Modbus. По умолчанию, значения записываются в регистры в формате big-endian. Если установить этот флаг, регистр будет интерпретироваться как little-endian. Важно: флаг действует только на отдельные регистры; в случае составных значений (размером больше 2 байт), меняется порядок только в каждом двухбайтном слове. Например, значение 0x12345678 будет записываться как 0x34127856,
- Word swap - поменять порядок слов для составных значений. Например, значение 0x12345678 будет записываться как 0x56781234.
Таким образом, чтобы записать значение в формате little-endian, нужно установить оба последних флага.
Общие параметры:
- Remap addresses after edit - обновить адреса устройств в случае, если произошло наложение адресов. Полезно, если требуется изменить размер данных в сторону увеличения. При установке этого флага после сохранения конфигурационного файла он будет проанализирован на наложения адресов; если таковые будут обнаружены, сервис попытается их устранить, после чего флаг будет снят. (Для того, чтобы получить обновлённый конфигурационный файл, после сохранения требуется перезагрузить страницу).