Перейти к содержанию

Ensystec-modbus-address-change

Материал из XIOT Wiki
Версия от 09:16, 28 мая 2026; Admin (обсуждение | вклад) (Уточнена проверка порта Ensystec через веб-интерфейс Wiren Board)

Смена Modbus адреса Ensystec через консоль Wiren Board

Эта инструкция описывает смену Modbus-адреса системы защиты от протечек Ensystec Leak Protect через SSH-консоль контроллера Wiren Board.

Способ применяется, когда Ensystec уже подключён к одному из портов RS-485 контроллера и нужно назначить ему уникальный адрес на шине Modbus RTU.

📌 Исходные параметры Ensystec

Для штатного подключения используются параметры:

Параметр Значение
Интерфейс RS-485, Modbus RTU
Скорость 9600 бод
Формат 8N2: 8 бит данных, без чётности, 2 стоп-бита
Заводской Modbus-адрес 247
Регистр адреса holding-регистр 0x0F
Функция записи 0x06, Write Single Register

В регистре 0x0F адрес находится в младшем байте. На практике заводской адрес читается как 0xFFF7, где F7 — это 247. Для адреса 11 записывается значение 0xFF0B, где 0B — это 11.

⚠ Перед началом

  • Убедитесь, что на линии RS-485 нет другого устройства с адресом, который вы собираетесь назначить.
  • Убедитесь, что обращаетесь к правильному порту: например, /dev/ttyRS485-1, /dev/ttyRS485-2 или /dev/ttyMOD1.
  • На время ручных команд нужно остановить сервис wb-mqtt-serial, иначе он будет занимать порт.
  • В примерах ниже Ensystec подключён к /dev/ttyRS485-2, текущий адрес — 247, новый адрес — 11.

1. Подключиться к Wiren Board по SSH

На компьютере откройте терминал и подключитесь к контроллеру:

ssh root@192.168.88.27

Вместо 192.168.88.27 укажите IP-адрес своего контроллера.

2. Проверить, на каком порту добавлен Ensystec

Порт удобнее проверять в веб-интерфейсе Wiren Board, а не через консольный вывод.

Откройте веб-интерфейс контроллера, перейдите в раздел Устройства и найдите устройство Ensystec. Название группы, в которой оно находится, показывает используемый порт. Например, если Ensystec находится в группе RS485-2, то в командах ниже нужно использовать порт /dev/ttyRS485-2.

Соответствие имён:

В веб-интерфейсе Wiren Board Порт в командах
RS485-1 /dev/ttyRS485-1
RS485-2 /dev/ttyRS485-2
MOD1 /dev/ttyMOD1
MOD2 /dev/ttyMOD2
MOD3 /dev/ttyMOD3

В примерах ниже используется /dev/ttyRS485-2. Если Ensystec находится на другом порту, замените путь во всех командах.

3. Остановить wb-mqtt-serial

systemctl stop wb-mqtt-serial

После остановки сервис перестаёт опрашивать Modbus-устройства, и порт можно использовать вручную через modbus_client.

4. Проверить текущий адрес 247

Прочитайте регистр адреса 0x0F по заводскому адресу 247:

modbus_client --debug -mrtu -a247 -t0x03 -r0x0F -c1 -b9600 -d8 -pnone -s2 /dev/ttyRS485-2

Ожидаемый результат для заводского адреса:

SUCCESS: read 1 of elements:
	Data: 0xfff7

Если ответа нет, проверьте порт, A/B линии RS-485, питание Ensystec и текущий адрес устройства.

5. Записать новый адрес 11

Запишите в регистр 0x0F значение 0xFF0B:

modbus_client --debug -mrtu -a247 -t0x06 -r0x0F -b9600 -d8 -pnone -s2 /dev/ttyRS485-2 0xFF0B

Ожидаемый результат:

SUCCESS: written 1 elements!

После этой команды Ensystec должен перестать отвечать на адресе 247 и начать отвечать на адресе 11.

6. Проверить новый адрес

Прочитайте тот же регистр уже по адресу 11:

modbus_client --debug -mrtu -a11 -t0x03 -r0x0F -c1 -b9600 -d8 -pnone -s2 /dev/ttyRS485-2

Ожидаемый результат:

SUCCESS: read 1 of elements:
	Data: 0xff0b

Дополнительно можно проверить, что старый адрес больше не отвечает:

modbus_client --debug -mrtu -a247 -t0x03 -r0x0F -c1 -o300 -b9600 -d8 -pnone -s2 /dev/ttyRS485-2

Ожидаемый результат для старого адреса:

ERROR Connection timed out: select

7. Обновить адрес в конфигурации Wiren Board

Сначала сделайте резервную копию конфигурации:

cp /etc/wb-mqtt-serial.conf /etc/wb-mqtt-serial.conf.bak-$(date +%Y%m%d-%H%M%S)

Затем замените адрес Ensystec в конфигурации на 11:

jq '(.ports[] | select(.path == "/dev/ttyRS485-2").devices[] | select(.device_type == "Ensystec-Leak-Protect").slave_id) = "11"' /etc/wb-mqtt-serial.conf > /tmp/wb-mqtt-serial.conf && mv /tmp/wb-mqtt-serial.conf /etc/wb-mqtt-serial.conf

Если Ensystec подключён к другому порту, замените /dev/ttyRS485-2 в команде на нужный порт.

8. Запустить wb-mqtt-serial и проверить подключение

Запустите сервис обратно:

systemctl start wb-mqtt-serial

Проверьте, что сервис активен:

systemctl is-active wb-mqtt-serial

Проверьте журнал на подключение устройства с новым адресом:

journalctl -u wb-mqtt-serial -n 80 --no-pager | grep -E 'Ensystec|modbus:11|failed.*11'

Нормальный признак успешной настройки:

device modbus:11 is connected

Быстрый пример для адреса 11

Если Ensystec подключён к RS485-2, текущий адрес 247, новый адрес 11, последовательность команд будет такой:

systemctl stop wb-mqtt-serial

modbus_client --debug -mrtu -a247 -t0x03 -r0x0F -c1 -b9600 -d8 -pnone -s2 /dev/ttyRS485-2
modbus_client --debug -mrtu -a247 -t0x06 -r0x0F -b9600 -d8 -pnone -s2 /dev/ttyRS485-2 0xFF0B
modbus_client --debug -mrtu -a11 -t0x03 -r0x0F -c1 -b9600 -d8 -pnone -s2 /dev/ttyRS485-2

cp /etc/wb-mqtt-serial.conf /etc/wb-mqtt-serial.conf.bak-$(date +%Y%m%d-%H%M%S)
jq '(.ports[] | select(.path == "/dev/ttyRS485-2").devices[] | select(.device_type == "Ensystec-Leak-Protect").slave_id) = "11"' /etc/wb-mqtt-serial.conf > /tmp/wb-mqtt-serial.conf && mv /tmp/wb-mqtt-serial.conf /etc/wb-mqtt-serial.conf

systemctl start wb-mqtt-serial
journalctl -u wb-mqtt-serial -n 80 --no-pager | grep -E 'Ensystec|modbus:11|failed.*11'

См. также