ELXSoftware

ELX-MODBUS

Документация

От установки пакета до чтения устройства, которого нет в библиотеке.

Установка

Скачайте пакет для своей архитектуры и поставьте его. apt предпочтительнее dpkg, потому что сам разрешает зависимости.

Установка
sudo apt install ./elxmodbusmqtt_1.2.38_amd64.deb
systemctl status elxmodbusmqtt
xdg-open http://localhost:8080

Какой пакет нужен, скажет uname -m: x86_64 — amd64, aarch64 — arm64, armv7l — armhf.

Служба и журнал
systemctl status elxmodbusmqtt
journalctl -u elxmodbusmqtt -f
sudo systemctl restart elxmodbusmqtt

Добавление шлюза

Шлюз — это физический путь к шине. Всё, что под ним, — устройства и регистры — опрашивается через него, по одному запросу за раз.

ТипЧто указать
Modbus TCPАдрес и порт устройства, обычно 502
RTU-over-TCPАдрес и порт преобразователя Ethernet ↔ RS-485
Serial RTUПорт (/dev/ttyUSB0), скорость, чётность, биты данных и стоп-биты
Права на последовательный портВ Linux порт обычно принадлежит группе dialout. Если в терминале одни тайм-ауты, а проводка в порядке, проверьте, может ли пользователь службы открыть устройство.
Два шлюза вместо одногоУстройства на разных физических шинах должны быть под разными шлюзами: тогда они опрашиваются параллельно, а не по очереди, и переставшее отвечать устройство не тормозит остальные.

Устройства и регистры

У устройства есть адрес на шине, имя, префикс MQTT и список регистров. Шаблон из библиотеки заполняет список; своё устройство начинается с пустого.

ПолеЧто означает
Тип регистраHolding и Coil можно писать; Input и Discrete только читаются
АдресНомер регистра как в техпаспорте — следите за началом отсчёта, некоторые производители считают с единицы
Тип данныхint16, uint16, int32, float32, строка или один бит
Порядок словКакая половина 32-разрядного значения идёт первой; обычная причина неправдоподобных чисел
Множитель и смещениеПревращают сырой отсчёт в единицы: 0,1 делает из 245 значение 24,5
Битовая маскаВынимает один флаг из упакованного слова состояния
ПериодКак часто опрашивается именно этот регистр, если он должен отличаться от устройства
Значение в разы больше или задом наперёдПочти все такие случаи — три причины: неверный множитель, переставленный порядок слов или знаковое значение, прочитанное как беззнаковое. Терминал показывает сырой кадр и закрывает вопрос за секунды.

Брокер

  • Адрес и порт. Хост и порт брокера; TLS доступен там, где брокер его предлагает.
  • Учётные данные. Имя и пароль, если брокер их требует.
  • Базовый топик. Префикс, под которым появляется всё, что публикует эта служба, — например home.
  • Retain. Хранить ли брокеру последнее значение каждого топика.
  • Командные топики. Суффикс, принимающий запись, по умолчанию /set.

Полный топик складывается как {базовый}/{префикс устройства}/{ключ регистра}, поэтому его можно предсказать по одной конфигурации — подписку в Home Assistant реально написать раньше, чем устройство будет подключено к шине.

Какой брокерЛюбой стандартный. Если своего ещё нет, ELX-MQTT Broker есть на этом сайте и ставится так же просто.

Терминал обмена

Терминал показывает каждый запрос и каждый ответ сырыми кадрами, с временем и ошибками. Это инструмент для двух самых трудных моментов: запустить устройство, которое никто не описал, и объяснить, почему перестало работать то, что работало.

Что видноЧто это обычно значит
Тайм-аут на каждом запросеНе тот порт, не та скорость, перепутаны A и B или на устройство не подано питание
Тайм-аут только у одного устройстваНе тот адрес на шине или это устройство отключено
Исключение 02Такого адреса регистра у этого устройства нет
Исключение 03Записываемое значение вне диапазона, который принимает устройство
Ошибки CRC под нагрузкойСлишком длинный кабель, отсутствие терминаторов или скорость, которую линия не тянет

Резервная копия и восстановление

Вся конфигурация — шлюзы, устройства, карты регистров и настройки брокера — выгружается в один файл JSON и восстанавливается из него. Этот же файл — правильный способ перенести рабочую настройку на вторую машину или положить конфигурацию объекта под контроль версий.

Когда что-то не так

СимптомКуда смотреть
Веб-интерфейс не открываетсяsystemctl status elxmodbusmqtt; служба могла не занять порт 8080
Значения есть в интерфейсе, но нет в MQTTПубликация выключена или неверные данные брокера — журнал событий скажет, что именно
Команда в /set ничего не меняетКанал только для чтения или регистр относится к Input, а не к Holding
Значения обновляются слишком медленноСлишком много регистров на одном шлюзе с одним периодом; поднимите период тем, что не меняется
Числа скачут между правдоподобными и абсурднымиПорядок слов или два мастера на одной шине, отвечающие друг поверх друга

Частые вопросы

Где хранится конфигурация?
В базе SQLite в рабочем каталоге службы. Из интерфейса её можно выгрузить в JSON — именно этот файл и стоит хранить.
Можно ли запустить несколько экземпляров на одной машине?
Да, с разными веб-портами и разными рабочими каталогами — это полезно, когда две шины должны оставаться строго раздельными.
Брокер должен быть на той же машине?
Нет. Брокер может находиться где угодно, лишь бы он был доступен по сети.

Рядом в разделе