Modbus RTU/TCP Slave: различия между версиями

Материал из Wiren Board
м
(Отметить эту версию для перевода)
Строка 1: Строка 1:


<translate>
<translate>
<!--T:1-->
В Wiren Board добавлена возможность отображать сообщения из определённых топиков в очереди сообщений MQTT в регистры Modbus TCP. Это может быть полезным для настройки  
В Wiren Board добавлена возможность отображать сообщения из определённых топиков в очереди сообщений MQTT в регистры Modbus TCP. Это может быть полезным для настройки  
простого взаимодействия Wiren Board и SCADA-систем с поддержкой Modbus TCP.
простого взаимодействия Wiren Board и SCADA-систем с поддержкой Modbus TCP.




== Установка и настройка на контроллере ==
== Установка и настройка на контроллере == <!--T:2-->


=== Установка ===
=== Установка === <!--T:3-->


<!--T:4-->
Для начала нужно установить пакет wb-mqtt-mbgate. В консоли устройства вводим
Для начала нужно установить пакет wb-mqtt-mbgate. В консоли устройства вводим


<!--T:5-->
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
root@wirenboard:~# apt-get update && apt-get install wb-mqtt-mbgate
root@wirenboard:~# apt-get update && apt-get install wb-mqtt-mbgate
</syntaxhighlight>
</syntaxhighlight>


=== Настройка ===
=== Настройка === <!--T:6-->


<!--T:7-->
[[File:web-mbgate-settings.png|right|thumb|250 px|Страница настройки шлюза]]
[[File:web-mbgate-settings.png|right|thumb|250 px|Страница настройки шлюза]]


<!--T:8-->
После установки требуется указать топики, которые будут отображаться на регистры Modbus TCP, уточнить их адреса и указать формат регистров. Для этого в веб-интерфейсе переходим в раздел Configs (Конфигурирование) и открываем конфигурационный файл /etc/wb-mqtt-mbgate.conf.
После установки требуется указать топики, которые будут отображаться на регистры Modbus TCP, уточнить их адреса и указать формат регистров. Для этого в веб-интерфейсе переходим в раздел Configs (Конфигурирование) и открываем конфигурационный файл /etc/wb-mqtt-mbgate.conf.


==== Modbus binding ====
==== Modbus binding ==== <!--T:9-->
Здесь можно настроить порт и адрес, по которым будет доступен сервер Modbus TCP.
Здесь можно настроить порт и адрес, по которым будет доступен сервер Modbus TCP.


<!--T:10-->
Обязательные параметры:
Обязательные параметры:
* '''Bind address''' - адрес, по которому будет доступен сервер Modbus TCP. Значение по умолчанию - * - означает, что возможно подключение по любому адресу, по которому доступен контроллер (например, по IP-адресу или по доменному имени).
* '''Bind address''' - адрес, по которому будет доступен сервер Modbus TCP. Значение по умолчанию - * - означает, что возможно подключение по любому адресу, по которому доступен контроллер (например, по IP-адресу или по доменному имени).
* '''Server TCP port''' - номер порта, по которому будет доступен сервер Modbus TCP. Значение по умолчанию - 502 - стандартный порт для Modbus TCP.
* '''Server TCP port''' - номер порта, по которому будет доступен сервер Modbus TCP. Значение по умолчанию - 502 - стандартный порт для Modbus TCP.


==== MQTT connection ====
==== MQTT connection ==== <!--T:11-->
Здесь настраиваются параметры для подключения к брокеру сообщений MQTT. По умолчанию шлюз использует MQTT-брокер контроллера. Есть возможность настроить аутентификацию.
Здесь настраиваются параметры для подключения к брокеру сообщений MQTT. По умолчанию шлюз использует MQTT-брокер контроллера. Есть возможность настроить аутентификацию.


<!--T:12-->
Обязательные параметры:
Обязательные параметры:
* '''Address''' - адрес брокера сообщений. По умолчанию - localhost - подключение к брокеру контроллера.
* '''Address''' - адрес брокера сообщений. По умолчанию - localhost - подключение к брокеру контроллера.
* '''Port''' - номер порта, по которому доступен брокер. По умолчанию - 1883.
* '''Port''' - номер порта, по которому доступен брокер. По умолчанию - 1883.


<!--T:13-->
Дополнительные параметры:
Дополнительные параметры:
* '''Keep-alive interval'''
* '''Keep-alive interval'''
Строка 41: Строка 49:
* '''Password''' - пароль для подключения к брокеру. Обязательный параметр, если установлен флаг '''Enable username+password authentification'''.
* '''Password''' - пароль для подключения к брокеру. Обязательный параметр, если установлен флаг '''Enable username+password authentification'''.


==== Register bindings ====
==== Register bindings ==== <!--T:14-->
В этом разделе настраиваются соответствия топиков и регистров.  
В этом разделе настраиваются соответствия топиков и регистров.  


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


<!--T:16-->
Если в брокере сообщений появились новые каналы (например, при подключении нового устройства), они будут добавлены в список при перезапуске службы (это происходит при сохранении конфигурационного файла или при перезапуске контроллера).
Если в брокере сообщений появились новые каналы (например, при подключении нового устройства), они будут добавлены в список при перезапуске службы (это происходит при сохранении конфигурационного файла или при перезапуске контроллера).


<!--T:17-->
Каналы распределены по 4 группам - типам регистров в Modbus:
Каналы распределены по 4 группам - типам регистров в Modbus:
* '''Discrete inputs''' - дискретные входы - двоичные значения (1/0), доступные только на чтение (например, состояния входов GPIO);
* '''Discrete inputs''' - дискретные входы - двоичные значения (1/0), доступные только на чтение (например, состояния входов GPIO);
Строка 54: Строка 65:
* '''Holding registers''' - регистры хранения - численные значения, доступные на чтение и на запись (например, яркость освещения).
* '''Holding registers''' - регистры хранения - численные значения, доступные на чтение и на запись (например, яркость освещения).


<!--T:18-->
Распределение происходит автоматически на основании описания канала (в топиках /devices/+/controls/+/meta/+).
Распределение происходит автоматически на основании описания канала (в топиках /devices/+/controls/+/meta/+).


<!--T:19-->
Для дискретных и числовых регистров доступны следующие параметры:
Для дискретных и числовых регистров доступны следующие параметры:


<!--T:20-->
* '''Enabled''' - флаг, включающий привязку канала к регистру. По умолчанию, все каналы отключены.
* '''Enabled''' - флаг, включающий привязку канала к регистру. По умолчанию, все каналы отключены.
* '''MQTT channel''' - имя канала в формате +/+ (как соответствие /devices/+/controls/+)
* '''MQTT channel''' - имя канала в формате +/+ (как соответствие /devices/+/controls/+)
Строка 63: Строка 77:
* '''Unit ID''' и '''Start address''' - адресные поля Modbus TCP. Определяются хешированием от имени канала; таким образом, одинаковые каналы на разных контроллерах с большой вероятностью будут иметь одинаковые адресные поля. ''Замечание:'' Unit ID 1 и 2 зарезервированы за пользователем - никакие каналы не будут автоматически назначены на эти адреса.
* '''Unit ID''' и '''Start address''' - адресные поля Modbus TCP. Определяются хешированием от имени канала; таким образом, одинаковые каналы на разных контроллерах с большой вероятностью будут иметь одинаковые адресные поля. ''Замечание:'' Unit ID 1 и 2 зарезервированы за пользователем - никакие каналы не будут автоматически назначены на эти адреса.


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


<!--T:22-->
Для числовых регистров, помимо вышеописанных, доступны также параметры:
Для числовых регистров, помимо вышеописанных, доступны также параметры:


<!--T:23-->
* '''Register format''' - тип хранимых данных:
* '''Register format''' - тип хранимых данных:
** '''Signed integer''' - знаковое целое;
** '''Signed integer''' - знаковое целое;
Строка 74: Строка 91:
** '''Varchar''' - текстовое поле фиксированного размера (1 символ на регистр).
** '''Varchar''' - текстовое поле фиксированного размера (1 символ на регистр).


<!--T:24-->
* '''Size''' - размер данных в байтах. Нужно учитывать, что для всех типов, кроме текстового, в один регистр укладывается два байта.
* '''Size''' - размер данных в байтах. Нужно учитывать, что для всех типов, кроме текстового, в один регистр укладывается два байта.
** для целочисленных типов - 2, 4 и 8 байт (соответственно, в регистрах это будет 1, 2 и 4 регистра);
** для целочисленных типов - 2, 4 и 8 байт (соответственно, в регистрах это будет 1, 2 и 4 регистра);
Строка 79: Строка 97:
** для текстовых полей - любое неотрицательное значение.
** для текстовых полей - любое неотрицательное значение.


<!--T:25-->
* '''Maximum value''' - максимальное значение поля. Требуется для каналов типа range. Все значения больше максимума будут заменены на максимальное.
* '''Maximum value''' - максимальное значение поля. Требуется для каналов типа range. Все значения больше максимума будут заменены на максимальное.


<!--T:26-->
* '''Value scale''' - множитель значения. Например, если множитель равен 2 и в канале появилось значение 10, значение регистра будет 20. И наоборот, если в регистр было записано значение 30, в брокер уйдёт сообщение со значением 15.
* '''Value scale''' - множитель значения. Например, если множитель равен 2 и в канале появилось значение 10, значение регистра будет 20. И наоборот, если в регистр было записано значение 30, в брокер уйдёт сообщение со значением 15.


<!--T:27-->
* '''Byte swap''' - поменять порядок байт в регистрах Modbus. По умолчанию, значения записываются в регистры в формате big-endian. Если установить этот флаг, регистр будет интерпретироваться как little-endian. ''Важно:'' флаг действует только на отдельные регистры; в случае составных значений (размером больше 2 байт), меняется порядок только в каждом двухбайтном слове. Например, значение 0x12345678 будет записываться как 0x34127856,
* '''Byte swap''' - поменять порядок байт в регистрах Modbus. По умолчанию, значения записываются в регистры в формате big-endian. Если установить этот флаг, регистр будет интерпретироваться как little-endian. ''Важно:'' флаг действует только на отдельные регистры; в случае составных значений (размером больше 2 байт), меняется порядок только в каждом двухбайтном слове. Например, значение 0x12345678 будет записываться как 0x34127856,


<!--T:28-->
* '''Word swap''' - поменять порядок слов для составных значений. Например, значение 0x12345678 будет записываться как 0x56781234.
* '''Word swap''' - поменять порядок слов для составных значений. Например, значение 0x12345678 будет записываться как 0x56781234.


<!--T:29-->
Таким образом, чтобы записать значение в формате little-endian, нужно установить оба последних флага.
Таким образом, чтобы записать значение в формате little-endian, нужно установить оба последних флага.


<!--T:30-->
Общие параметры:
Общие параметры:
* '''Remap addresses after edit''' - обновить адреса устройств в случае, если произошло наложение адресов. Полезно, если требуется изменить размер данных в сторону увеличения. При установке этого флага после сохранения конфигурационного файла он будет проанализирован на наложения адресов; если таковые будут обнаружены, сервис попытается их устранить, после чего флаг будет снят. (Для того, чтобы получить обновлённый конфигурационный файл, после сохранения требуется перезагрузить страницу). '''Внимание!''' Использовать этот флаг можно только на настраиваемой системе, так как могут измениться адреса любых каналов, в том числе и уже настроенных.
* '''Remap addresses after edit''' - обновить адреса устройств в случае, если произошло наложение адресов. Полезно, если требуется изменить размер данных в сторону увеличения. При установке этого флага после сохранения конфигурационного файла он будет проанализирован на наложения адресов; если таковые будут обнаружены, сервис попытается их устранить, после чего флаг будет снят. (Для того, чтобы получить обновлённый конфигурационный файл, после сохранения требуется перезагрузить страницу). '''Внимание!''' Использовать этот флаг можно только на настраиваемой системе, так как могут измениться адреса любых каналов, в том числе и уже настроенных.
</translate>
</translate>

Версия 12:33, 12 июня 2019

В 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 зарезервированы за пользователем - никакие каналы не будут автоматически назначены на эти адреса.

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

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

  • 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 - обновить адреса устройств в случае, если произошло наложение адресов. Полезно, если требуется изменить размер данных в сторону увеличения. При установке этого флага после сохранения конфигурационного файла он будет проанализирован на наложения адресов; если таковые будут обнаружены, сервис попытается их устранить, после чего флаг будет снят. (Для того, чтобы получить обновлённый конфигурационный файл, после сохранения требуется перезагрузить страницу). Внимание! Использовать этот флаг можно только на настраиваемой системе, так как могут измениться адреса любых каналов, в том числе и уже настроенных.