Ensystec-modbus-address-change: различия между версиями
Admin (обсуждение | вклад) Добавлена инструкция по смене Modbus адреса Ensystec |
Admin (обсуждение | вклад) Уточнена проверка порта Ensystec через веб-интерфейс Wiren Board |
||
| Строка 47: | Строка 47: | ||
== 2. Проверить, на каком порту добавлен Ensystec == | == 2. Проверить, на каком порту добавлен Ensystec == | ||
Порт удобнее проверять в веб-интерфейсе Wiren Board, а не через консольный вывод. | |||
< | Откройте веб-интерфейс контроллера, перейдите в раздел '''Устройства''' и найдите устройство Ensystec. Название группы, в которой оно находится, показывает используемый порт. Например, если Ensystec находится в группе <code>RS485-2</code>, то в командах ниже нужно использовать порт <code>/dev/ttyRS485-2</code>. | ||
</ | |||
В веб-интерфейсе Wiren Board | Соответствие имён: | ||
{| class="wikitable" | |||
! В веб-интерфейсе Wiren Board !! Порт в командах | |||
|- | |||
| <code>RS485-1</code> || <code>/dev/ttyRS485-1</code> | |||
|- | |||
| <code>RS485-2</code> || <code>/dev/ttyRS485-2</code> | |||
|- | |||
| <code>MOD1</code> || <code>/dev/ttyMOD1</code> | |||
|- | |||
| <code>MOD2</code> || <code>/dev/ttyMOD2</code> | |||
|- | |||
| <code>MOD3</code> || <code>/dev/ttyMOD3</code> | |||
|} | |||
В примерах ниже используется <code>/dev/ttyRS485-2</code>. Если Ensystec находится на другом порту, замените путь во всех командах. | |||
== 3. Остановить wb-mqtt-serial == | == 3. Остановить wb-mqtt-serial == | ||
Версия от 09:16, 28 мая 2026
Смена 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'