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

Ensystec-modbus-address-change: различия между версиями

Материал из XIOT Wiki
Добавлена инструкция по смене Modbus адреса Ensystec
 
Английские адреса Wiki: обновление ссылок с сохранением русских подписей
 
(не показано 6 промежуточных версий этого же участника)
Строка 1: Строка 1:
{{DISPLAYTITLE:Смена Modbus адреса Ensystec через консоль Wiren Board}}
__NOTOC__
__NOTOC__
= Смена Modbus адреса Ensystec через консоль Wiren Board =
= Смена Modbus адреса Ensystec через консоль Wiren Board =


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


Способ применяется, когда Ensystec уже подключён к одному из портов RS-485 контроллера и нужно назначить ему уникальный адрес на шине Modbus RTU.
В примере ниже:
* Ensystec подключён к <code>RS485-2</code>;
* текущий адрес устройства — <code>247</code>;
* новый адрес — <code>11</code>.


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


{| class="wikitable"
{| class="wikitable"
Строка 26: Строка 28:
|}
|}


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


== ⚠ Перед началом ==
== Определить порт RS-485 ==


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


== 1. Подключиться к Wiren Board по SSH ==
{| class="wikitable"
! Группа в веб-интерфейсе !! Порт в командах
|-
| <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>RS485-2</code>, замените <code>/dev/ttyRS485-2</code> в командах на нужный порт.
 
== Подключиться по SSH ==


<pre>
<pre>
Строка 43: Строка 56:
</pre>
</pre>


Вместо <code>192.168.88.27</code> укажите IP-адрес своего контроллера.
Замените <code>192.168.88.27</code> на IP-адрес своего контроллера.
 
== 2. Проверить, на каком порту добавлен Ensystec ==
 
Посмотреть конфигурацию <code>wb-mqtt-serial</code> можно командой:
 
<pre>
grep -n 'Ensystec\|ttyRS485\|ttyMOD' /etc/wb-mqtt-serial.conf
</pre>
 
В веб-интерфейсе Wiren Board этот же порт виден в разделе устройства, например как <code>RS485-2</code>.


== 3. Остановить wb-mqtt-serial ==
== Остановить опрос Modbus ==


<pre>
<pre>
Строка 61: Строка 64:
</pre>
</pre>


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


== 4. Проверить текущий адрес 247 ==
Прочитать регистр <code>0x0F</code> на текущем адресе <code>247</code>:
 
Прочитайте регистр адреса <code>0x0F</code> по заводскому адресу <code>247</code>:


<pre>
<pre>
Строка 71: Строка 72:
</pre>
</pre>


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


<pre>
<pre>
SUCCESS: read 1 of elements:
SUCCESS: read 1 of elements:
Data: 0xfff7
Data: 0x00f7
</pre>
</pre>


Если ответа нет, проверьте порт, A/B линии RS-485, питание Ensystec и текущий адрес устройства.
На некоторых версиях устройства значение может отображаться как <code>0xfff7</code>. Важен младший байт <code>f7</code>, то есть адрес <code>247</code>.


== 5. Записать новый адрес 11 ==
== Записать новый адрес 11 ==
 
Запишите в регистр <code>0x0F</code> значение <code>0xFF0B</code>:


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


Строка 94: Строка 93:
</pre>
</pre>


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


== 6. Проверить новый адрес ==
Прочитать регистр <code>0x0F</code> на новом адресе <code>11</code>:
 
Прочитайте тот же регистр уже по адресу <code>11</code>:


<pre>
<pre>
Строка 104: Строка 101:
</pre>
</pre>


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


<pre>
<pre>
SUCCESS: read 1 of elements:
SUCCESS: read 1 of elements:
Data: 0xff0b
Data: 0x000b
</pre>
</pre>


Дополнительно можно проверить, что старый адрес больше не отвечает:
Проверить, что старый адрес <code>247</code> больше не отвечает:


<pre>
<pre>
Строка 117: Строка 114:
</pre>
</pre>


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


<pre>
<pre>
Строка 123: Строка 120:
</pre>
</pre>


== 7. Обновить адрес в конфигурации Wiren Board ==
== Изменить адрес в веб-интерфейсе Wiren Board ==


Сначала сделайте резервную копию конфигурации:
Откройте веб-интерфейс Wiren Board: '''Устройства''' → Ensystec → настройки устройства. Укажите Modbus-адрес <code>11</code>, сохраните и примените конфигурацию.


<pre>
== Запустить опрос Modbus ==
cp /etc/wb-mqtt-serial.conf /etc/wb-mqtt-serial.conf.bak-$(date +%Y%m%d-%H%M%S)
</pre>
 
Затем замените адрес Ensystec в конфигурации на <code>11</code>:
 
<pre>
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
</pre>
 
Если Ensystec подключён к другому порту, замените <code>/dev/ttyRS485-2</code> в команде на нужный порт.
 
== 8. Запустить wb-mqtt-serial и проверить подключение ==
 
Запустите сервис обратно:


<pre>
<pre>
Строка 147: Строка 130:
</pre>
</pre>


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


<pre>
== Если текущий адрес уже не 247 ==
systemctl is-active wb-mqtt-serial
</pre>


Проверьте журнал на подключение устройства с новым адресом:
Если адрес устройства уже был изменён, используйте текущий адрес вместо <code>247</code> в командах чтения и записи. Например, для смены адреса с <code>12</code> на <code>11</code>:
 
<pre>
journalctl -u wb-mqtt-serial -n 80 --no-pager | grep -E 'Ensystec|modbus:11|failed.*11'
</pre>
 
Нормальный признак успешной настройки:
 
<pre>
device modbus:11 is connected
</pre>
 
== Быстрый пример для адреса 11 ==
 
Если Ensystec подключён к <code>RS485-2</code>, текущий адрес <code>247</code>, новый адрес <code>11</code>, последовательность команд будет такой:


<pre>
<pre>
systemctl stop wb-mqtt-serial
systemctl stop wb-mqtt-serial
 
modbus_client --debug -mrtu -a12 -t0x06 -r0x0F -b9600 -d8 -pnone -s2 /dev/ttyRS485-2 11
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
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
systemctl start wb-mqtt-serial
journalctl -u wb-mqtt-serial -n 80 --no-pager | grep -E 'Ensystec|modbus:11|failed.*11'
</pre>
</pre>


== См. также ==
== См. также ==


* [[Описание и схема подключения блока защиты от протечек воды Ensystec]]
* [[Ensystec-leak-protection-wiring|Описание и схема подключения блока защиты от протечек воды Ensystec]]
* [[Смена Modbus адреса у устройств Wiren Board через консоль]]
* [[Wiren-board-modbus-address-change|Смена Modbus адреса у устройств Wiren Board через консоль]]
* [https://wiki.wirenboard.com/wiki/images/4/44/Ensystec_Leak_Protect_MODBUS_RTU.pdf Таблица регистров Ensystec Leak Protect Modbus RTU]
* [https://wiki.wirenboard.com/wiki/images/4/44/Ensystec_Leak_Protect_MODBUS_RTU.pdf Таблица регистров Ensystec Leak Protect Modbus RTU]

Текущая версия от 22:24, 2 октября 2026


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

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

В примере ниже:

  • Ensystec подключён к RS485-2;
  • текущий адрес устройства — 247;
  • новый адрес — 11.

Параметры Ensystec

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

Новый адрес записывается в регистр 0x0F обычным числом: для адреса 11 записывается значение 11.

Определить порт RS-485

Откройте веб-интерфейс Wiren Board и перейдите в раздел Устройства. Найдите Ensystec и посмотрите, в какой группе RS-485 он находится.

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

Если устройство находится не на RS485-2, замените /dev/ttyRS485-2 в командах на нужный порт.

Подключиться по SSH

ssh root@192.168.88.27

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

Остановить опрос Modbus

systemctl stop wb-mqtt-serial

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

Прочитать регистр 0x0F на текущем адресе 247:

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

Ожидаемый ответ для адреса 247:

SUCCESS: read 1 of elements:
	Data: 0x00f7

На некоторых версиях устройства значение может отображаться как 0xfff7. Важен младший байт f7, то есть адрес 247.

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

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

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

SUCCESS: written 1 elements!

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

Прочитать регистр 0x0F на новом адресе 11:

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

Ожидаемый ответ:

SUCCESS: read 1 of elements:
	Data: 0x000b

Проверить, что старый адрес 247 больше не отвечает:

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

Ожидаемый ответ:

ERROR Connection timed out: select

Изменить адрес в веб-интерфейсе Wiren Board

Откройте веб-интерфейс Wiren Board: Устройства → Ensystec → настройки устройства. Укажите Modbus-адрес 11, сохраните и примените конфигурацию.

Запустить опрос Modbus

systemctl start wb-mqtt-serial

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

Если текущий адрес уже не 247

Если адрес устройства уже был изменён, используйте текущий адрес вместо 247 в командах чтения и записи. Например, для смены адреса с 12 на 11:

systemctl stop wb-mqtt-serial
modbus_client --debug -mrtu -a12 -t0x06 -r0x0F -b9600 -d8 -pnone -s2 /dev/ttyRS485-2 11
modbus_client --debug -mrtu -a11 -t0x03 -r0x0F -c1 -b9600 -d8 -pnone -s2 /dev/ttyRS485-2
systemctl start wb-mqtt-serial

См. также