MODBUS
Драйвер для Modbus-подобных протоколов.
Опрос и запись параметров устройств с поддержкой:
Соединение | Устройство | Описание |
---|---|---|
base.tcp base.udp | mb-tcp mb-udp mb-rtu mb-ascii | Передача данных через TCP/UDP соединение возможна для всех основных протоколов Modbus: * Modbus TCP/UDP * Modbus RTU Over TCP/UDP * Modbus ASCII Over TCP/UDP |
base.rs | mb-rtu mb-ascii | Передача данных через RS соединение возможна для протоколов: * Modbus RTU * Modbus ASCII |
Важно!
Параметры, выделенные в таблицах красным цветом, в текущей версии НЕ РЕАЛИЗОВАНЫ
Ключи командной строки
Параметр | Описание |
---|---|
-c | Путь к файлу конфигурации По умолчанию: /etc/modbus2mqtt.json |
-l | Путь к файлу лога По умолчанию: /var/log/modbus2mqtt/modbus2mqtt.log |
-d | Режим отладки (расширенное логирование) Имеет приоритет над параметром "log::is_debug" конфигурации |
-v | Дублировать лог в консоли |
-x | Запуск с удалением кэша |
Структура конфигурации драйвера
{
"log": {...},
"mqtt": {...},
"ports": [
{
"connection": {...},
"devices": [...],
"parameters": [...]
}
]
}
Объект "log"
Параметры логирования.
При отсутствии данного объекта конфигурации, применяются значения по умолчанию.
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
max_size | int | 5 | Максимальный размер файла лога, при достижении которого происходит ротация (МБ) |
max_files | int | 10 | Максимальное количество файлов лога при ротации |
is_debug | bool | false | Режим отладки (расширенное логирование) |
Объект "mqtt"
Параметры подключения к брокеру Mosquitto.
При отсутствии данного объекта конфигурации, применяются значения по умолчанию.
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
url | string | localhost | IPv4 адрес брокера |
port | int | 1883 | Порт брокера |
keep_alive | int | 60 | Интервал периода активности |
Массив "ports"
Содержит список портов, описывающих параметры подключения к физическим портам, список устройств и список параметров устройств.
Объект "connection" элемента массива "ports"
"connection": {
"enabled": true,
"name": "port_1",
"type": "base.tcp",
"tcp": {
"url": "127.0.0.1",
"port": 502
},
"rto": 1000,
"sto": 2000,
"poll_interval": 100,
"poll_reconnect": false,
}
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
name | string | Имя соединения | |
type | string | Тип соединения. Допустимы следующие значения: * base.rs * base.tcp * base.udp | |
enabled | bool | true | Флаг разрешения подключения |
tcp | object | Описание tcp-подключения. Используется при "base.tcp" типе соединения | |
udp | object | Описание udp-подключения. Используется при "base.udp" типе соединения | |
rto | int | 500 | Тайм-аут приема (мсек) |
sto | int | 500 | Тайм-аут передачи (мсек) |
poll_interval | int | 60 | Интервал опроса (сек). Каждый следующий опрос начиначется через интервал, кратный указанному, даже если сессия опроса превысила данное значение |
poll_reconnect | bool | false | Установка соединения при запуске опроса параметров устройств порта и отключения при завершении |
Параметр "rs"
"rs": {
"com_port": "/dev/ttyRS485-1",
"baud_rate": 9600,
"com_options": "8N1"
},
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
com_port | string | Порт последовательного подключения | |
baud_rate | int | 9600 | Скорость обмена |
com_options | string | Параметры порта Строка из четырех символов, задающих настройки порта. Первый символ - цифра. Определяет количество бит в байте. Возможные значения: * 5 * 6 * 7 * 8 Второй символ - буква. Определяет контроль четности. Возможные значения: * N - отсутствует * O - odd * E - even * M - mark * S - space Третий символ - цифра. Определяет количество стоп-бит. Возможные значения: * 1 - 1 * 2 - 2 * 5 - 1.5 Четвертый символ - буква. Определяет управление потоком. Возможные значения: * N - отсутствует * S - программное * H - аппаратное |
Параметр "tcp/udp"
"tcp": {
"url": "127.0.0.1",
"port": 502
},
"udp": {
"url": "127.0.0.1",
"port": 502
},
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
url | string | localhost | IPv4 адрес подключения |
port | int | 502 | Порт подключения |
Массив devices
/*
Общее описание массива devices
*/
Параметры элемента массива "devices"
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
name | string | Имя устройства | |
type | string | Тип соединения для устройства. Допустимы следующие значения: * mb-tcp * mb-udp * mb-rtu * mb-ascii | |
enabled | bool | true | Флаг разрешения опроса устройства |
sid | int hex-string spec-string | ID (адрес) устройства. Является частью топика (cname_sid). | |
cname | string | Имя набора параметров каналов устройства. Является частью топика (cname_sid) | |
poll_delay | int | 0 | Задержка между опросами параметров устройства (мсек) |
---batch_poll--- | bool | false | Пакетный опрос параметров устройства. Позволяет вычитывать все параметры устройства большими блоками, уменьшая количество запросов к устройству. |
codepage | string | Текущая кодовая страница драйвера | Кодовая страница устройства. Используется только для типов "strX" и предназначен для локализации строковых параметров в текущую кодировку системы, для публикации по mqtt. См. iconv -l для конкретной системы |
repeat_on_error | int | 1 | Количество повторов операций опроса/записи параметров устройства при ошибке |
update_on_write | bool | false | Перечитать все параметры устройства после записи |
Параметры элемента массива "parameters"
Параметр | Тип | Описание |
---|---|---|
cname | string | Имя блока параметров каналов устройства |
config | object string | Если параметр "config" имеет строковый тип, то он содержит имя файла-шаблона (без расширения .json). Если тип - объект, то содержит описание каналов |
Параметры объекта "config" элемента массива "parameters" или файла-шаблона
Параметр | Тип | Описание |
---|---|---|
channels | array | Массив с описанием параметров устройства |
classes | array | Массив с описанием пользовательских типов данных |
errors | array | Массив с описанием специфичных ошибок устройства |
Параметры элемента массива "channels"
Параметр | Тип | Значение по умолчанию | Описание |
---|---|---|---|
name | string | Имя параметра | |
enabled | bool | true | Флаг разрешения опроса параметра |
reg_type | string | - | Тип регистра. Возможные значения: * coil - однобитовый тип, доступен для чтения и записи * status - однобитовый тип, доступен только для чтения * holding - 16-битовый знаковый или беззнаковый тип, доступен для чтения и записи * input - 16-битовый знаковый или беззнаковый тип, доступен только для чтения |
reg_addr | int string | Адрес регистра/бита по карте опроса. В строковом варианте можно задавать значение и в шестнадцатеричной форме "0x..." | |
value_type | string | См.таблицу "Типы параметров". Для использования blob-типов, см.раздел "Пользовательские типы параметров" | |
prefix | bool | true | Использовать имя параметра для формирования полного имени топика для пользовательских типов данных. См.раздел "Пользовательские типы" |
bh_list | array | - | Массив описания битовых полей. См.таблицу "Битовые поля" |
word_order | string | big_endian | Порядок байт. Возможные значения: * big_endian * little_endian * mid_big_endian * mid_little_endian |
read_only | bool | true | Флаг запрета записи параметра |
scale | float | - | Коэффициент масштабирования по формуле [value * scale]. Может быть заменен выражением в параметрах converter_read и converter_write |
correction | int | - | Корректировка значения по формуле (value * scale + correction). Может быть заменен выражением в параметрах converter_read и converter_write |
inverted | bool | false | Признак инвертирования значения параметра |
unit | string | - | Обозначение единицы измерения. Добавляется при публикации значения |
error_value | hex-string | - | Ошибочное значение параметра |
min | float | - | Минимальная граница допустимого диапазона значений параметра |
max | float | - | Максимальная граница допустимого диапазона значений параметра |
debounce | int | 0 | Время контроля дребезга (сек) |
converter_read | string | - | Выражение (ECMAScript), вычисляемое при чтении параметра. Вычисляется ПЕРЕД примененем scale и correction |
converter_write | string | - | Выражение (ECMAScript), вычисляемое при записи параметра |
function_read | int hex-string | - | Код функции чтения параметра. Производители оборудования могут использовать нестандартные функции для чтения/записи определенных параметров (архивные записи, журналы и т.д.) |
function_write | int hex-string | - | Код функции записи параметра (см. function_read) |
pattern | fmt-string | - | Форматная строка с кодом, который применяется как блок "data" в стандартном фрейме Modbus. |
format | fmt-string | Для типов float16, float32 или float64, а так же если определены параметры min, max, scale или converter_read, значение {:.2f} | Форматная строка, используемая для представления результата. |
Встроенные типы
Тип | Байтов | Регистров | Описание |
---|---|---|---|
bit | 1 | 1 | Однобитовое значение регистров coil и status, а так же битовых полей регистров holding и input |
i8 | 1 | 1 | 8-битное знаковое целочисленное значение |
u8 | 1 | 1 | 8-битное беззнаковое целочисленное значение |
i16 | 2 | 1 | 16-битное знаковое целочисленное значение |
u16 | 2 | 1 | 16-битное беззнаковое целочисленное значение |
i24 | 3 | 2 | 24-битное знаковое целочисленное значение |
u24 | 3 | 2 | 24-битное беззнаковое целочисленное значение |
i32 | 4 | 2 | 32-битное знаковое целочисленное значение |
u32 | 4 | 2 | 32-битное беззнаковое целочисленное значение |
i40 | 5 | 3 | 40-битное знаковое целочисленное значение |
u40 | 5 | 3 | 40-битное беззнаковое целочисленное значение |
i48 | 6 | 3 | 48-битное знаковое целочисленное значение |
u48 | 6 | 3 | 48-битное беззнаковое целочисленное значение |
i56 | 7 | 4 | 56-битное знаковое целочисленное значение |
u56 | 7 | 4 | 56-битное беззнаковое целочисленное значение |
i64 | 8 | 4 | 64-битное знаковое целочисленное значение |
u64 | 8 | 4 | 64-битное беззнаковое целочисленное значение |
float16 | 2 | 1 | 16-битное значение с плавающей точкой половинной точности (half-float) по стандарту IEEE-754 |
float32 | 4 | 2 | 32-битное значение с плавающей точкой одинарной точности (single-float) по стандарту IEEE-754 |
float64 | 8 | 4 | 64-битное значение с плавающей точкой двойной точности (double) по стандарту IEEE-754 |
bcd8 | 1 | 1 | 8-битное BCD-значение |
bcd16 | 2 | 1 | 16-битное BCD-значение |
bcd24 | 3 | 2 | 24-битное BCD-значение |
bcd32 | 4 | 2 | 32-битное BCD-значение |
bcd40 | 5 | 3 | 40-битное BCD-значение |
bcd48 | 6 | 3 | 48-битное BCD-значение |
bcd56 | 7 | 4 | 56-битное BCD-значение |
bcd64 | 8 | 4 | 64-битное BCD-значение |
utc4 | 4 | 2 | 32-битное значение Unix Epoch time. Преобразуется в текстовую строку формата [Year-Mon-Day Hour:Min:Sec] при условии, если не задан параметр "format" |
utc8 | 8 | 4 | 64-битное значение Unix Epoch time. Преобразуется в текстовую строку формата [Year-Mon-Day Hour:Min:Sec] при условии, если не задан параметр "format" |
strX | x | ~[x/2] | Строковый тип, определяющий текстовую строку с указанной (в байтах) длиной X |
Важно учитывать, что некоторые устройства могут хранить в целочисленных регистрах float-значения. Для интерпретации таких значений, используется параметр scale или формулы в параметрах converter_read и converter_write.
Специальные встроенные типы
Тип | Байтов | Регистров | Устройство | Описание |
---|---|---|---|---|
fixi16 | 2 | 1 | С2000ПП Болид | 16-битное комбинированное знаковое значение c фиксированной точкой [i8].[u8 * 39.0625]. Диапазон возможных значений от -127.9961 до +127.9961 |
fixu16 | 2 | 1 | С2000ПП Болид | 16-битное комбинированное беззнаковое значение c фиксированной точкой [u8].[u8 * 39.0625]. Диапазон возможных значений от 0.0 до 255.9961 |
Параметры элемента массива "classes"
Пользовательские типы
Примечание
Имена пользовательских типов не должны начинаться с "str": Это приведет к ошибке чтения конфигурации и невозможности запуска драйвера
Если устройство хранит информацию в структурах, определенных производителем и расположенных в регистровом адресном пространстве, существует возможность описания подобных произвольных структур.
Параметры элемента массива "errors"
Массив объектов, содержащих код и описание ошибки.
Производители часто используют нестандартные сообщения об ошибках.
Этот раздел важен для диагностики ошибок опросов специфического оборудования. Список ошибок содержится в документации прибора.
"errors": [
{
"code": 1,
"message": "Ошибка 1"
},
{
"code": 2,
"message": "Ошибка 2"
}
]