К содержимому
BlueTraktor
BlueTraktor · Обзор и работа с системой

Плагин Modbus to MQTT Bridge

Опрос Modbus TCP по карте сигналов и передача значений в локальный MQTT без добавления Modbus-сервера.

Что делает Modbus to MQTT Bridge

Bridge читает Modbus TCP с заданным периодом и отправляет сигналы в зарегистрированный локальный MQTT. Каждый экземпляр имеет своё подключение и карту. Плагин не добавляет Modbus во вкладку «Серверы», не обнаруживает адреса автоматически и не записывает значения в оборудование. Прямое подключение RTU через последовательный порт не поддерживается.

Подготовьте подключение

  1. В каталоге выберите совместимый пакет Modbus to MQTT Bridge. Установите его и проверьте разрешение в лицензии.
  2. В «Настройки» → «Плагины» → «Экземпляры» создайте новый экземпляр Bridge.
  3. Укажите «Адрес Modbus TCP» и явно выберите «Локальный MQTT». Пустой выбор не заменяется автоматически.
  4. Установите «Период опроса, мс», «Таймаут ответа, мс» и MQTT QoS. Согласуйте нагрузку с владельцем оборудования и права на подключение и топики.

Добавьте или импортируйте карту

Карты регистров у производителей различаются. Плагин не угадывает таблицу, адресацию или формат значения по названию сигнала. Для битов и строк задайте дополнительные параметры, показанные в форме.

  1. В «Сигналы» нажмите «Добавить сигнал» либо «Импорт карты» и выберите JSON. Форма импорта не принимает CSV.
  2. В предварительной проверке просмотрите строки и ошибки; подтвердите замену карты. Импорт не сохраняет настройки и не запускает экземпляр.
  3. Для каждого сигнала задайте таблицу Modbus, Unit ID, адрес и базу адресов. Сверяйте их с картой производителя: адрес с базой 0 отличается от номера с базой 1.
  4. Выберите тип данных, порядок байтов и регистров, количество элементов, множитель и смещение. Укажите название, ID сигнала USEPI и отдельный точный топик с префиксом USEPI в верхнем регистре.

Как устроен файл карты

Сохраните текст в UTF-8 с расширением .json. В корне нужны schemaVersion: 1 и массив mappings; один объект массива описывает один сигнал. Это карта чтения, не MQTT-сообщение и не полная конфигурация экземпляра. Адрес сервера, выбор MQTT и пароли в неё не добавляют.

В примере source.table выбирает holdingRegisters, source.address — адрес 0 при source.addressBase: 0, source.unitId — устройство 1. UInt16 читает один беззнаковый 16-битный регистр. scale: 0.1 и offset: 0 дают результат raw × 0.1 + 0. Числа и логические значения записываются без кавычек.

topic задаёт отдельный точный топик с префиксом USEPI/, signalId — ID документа внутри сообщения. Для этого примера лист значения под выбранным MQTT-источником будет examples/modbus/pump-1/pressure/value. Параметры count, byteOrder и wordOrder сверяйте с картой производителя, не копируйте их наугад.

Адреса и имена в примерах вымышлены. Успешный импорт подтверждает формат карты, но не существование ноды, доступ к ней или правильность измерения. Перед запуском замените источники и топики на согласованные.

json
{
  "schemaVersion": 1,
  "mappings": [{
    "name": "Pressure",
    "source": {"table": "holdingRegisters", "address": 0, "addressBase": 0, "unitId": 1},
    "dataType": "UInt16", "count": 1,
    "byteOrder": "bigEndian", "wordOrder": "bigEndian",
    "scale": 0.1, "offset": 0,
    "topic": "USEPI/examples/modbus/pump-1", "signalId": "pressure",
    "payloadFormat": "usepi", "enabled": true, "retain": true
  }]
}

Какие значения можно читать

Некорректные BCD, кодировки и значения с недопустимой точностью не выдаются за корректное измерение. Числовой множитель и смещение применяются только там, где это допускает выбранный тип.

Источник или типВозможности
Coils и Discrete InputsЛогические значения; функции чтения FC1 и FC2.
Holding Registers и Input RegistersРегистры; функции чтения FC3 и FC4.
ЧислаЗнаковые и беззнаковые 16/32/64-битные целые, Float32 и Float64; явный порядок байтов и регистров.
БитыОтдельный бит регистра или битовое поле с указанными началом и шириной.
СтрокиASCII, UTF-8, UTF-16BE и UTF-16LE; длина в байтах и правило окончания.
BCD и массивыБеззнаковые BCD16/32/64 и типизированные массивы с заданным количеством элементов.

Настройте опрос

«Объединять соседние чтения» сокращает число запросов: объединяются соседние или перекрывающиеся диапазоны одной таблицы и одного Unit ID, без чтения незаданных промежутков. Максимум одного запроса — 125 регистров или 2000 бит; в настройках можно уменьшить эти пределы под оборудование.

«Публиковать только изменения» исключает повторную отправку неизменившегося значения в текущем соединении. После переподключения Bridge заново читает актуальные значения. Большие массивы могут требовать нескольких запросов: это не атомарный снимок состояния оборудования.

Запустите экземпляр

  1. Проверьте всю карту, включая отключённые строки. JSON не допускает комментарии и запятую после последнего элемента; имена полей и значения типов чувствительны к регистру.
  2. Проверьте всю карту, включая отключённые строки. После согласования доступа сохраните настройки и запустите экземпляр.

Проверьте данные и свяжите модель

Работающий экземпляр и подтверждение MQTT-брокера не доказывают, что данные уже попали в модель. Точный входящий формат и получение полной модели описаны в общей инструкции MQTT.

  1. Сравните начальные и изменившиеся значения в дереве MQTT-источника с показаниями оборудования. Проверьте тип, размерность, качество и время измерения.
  2. При ошибке чтения проверяйте качество: плохое измерение передаётся с пустым значением и quality bad, а не с выдуманным числом.
  3. Свяжите листья USEPI с полями устройства и отдельно включите трансляцию модели. Bridge передаёт входные сигналы, но не создаёт модель; полную актуальную модель в TRAKTOR публикует Core.

Ошибки и остановка

При разрыве соединения Bridge переподключается и читает свежие значения. Пропущенные измерения не восстанавливаются как история. При сбое части большого массива всё значение признаётся плохим; успешная часть не выдаётся за полный результат.

Остановка экземпляра прекращает опрос и публикации, но не очищает ранее доставленные значения. Перед сменой карты или переходом с другого сборщика согласуйте остановку прежнего писателя: два экземпляра не должны одновременно писать одни и те же топики.

Modbus TCP в этом плагине не использует TLS. Подключайте его только в согласованной защищённой сети; доступность порта не подтверждает правильность карты или безопасность подключения.