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

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

Материал из XIOT Wiki
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
__NOTOC__
__NOTOC__


Все устройства Wirenboard поддерживают смену Modbus-адреса записью нового значения в регистр `0x80`. Для этого используется утилита `modbus_client` на контроллере.
Все устройства Wirenboard поддерживают смену Modbus-адреса записью нового значения в регистр `128`. Для этого используется утилита `modbus_client`, запускаемая из консоли контроллера.


== ⛔ Остановить Modbus-сервис ==
== ⛔ Остановить Modbus-сервис ==
Сначала необходимо остановить `wb-mqtt-serial`, чтобы освободить порт:
Перед выполнением команды необходимо остановить сервис `wb-mqtt-serial`, чтобы освободить доступ к порту:


<pre>
<pre>
Строка 16: Строка 16:
modbus_client \
modbus_client \
   -m rtu                # режим работы Modbus RTU
   -m rtu                # режим работы Modbus RTU
   -b 9600              # скорость порта (бит/с) — какая сейчас настроена на устройстве
   -b 9600              # текущая скорость устройства
   -p none              # чётность (none/even/odd) — зависит от устройства, чаще всего none
   -p none              # чётность (none/even/odd) — чаще всего none
   -s 1                  # количество стоп-бит (1 или 2)
   -s 1                  # количество стоп-бит (1 или 2)
   /dev/ttyRS485-1      # используемый RS-485 порт контроллера (обычно ttyRS485-1)
   /dev/ttyRS485-1      # RS-485 порт контроллера
   -a 1                  # текущий адрес устройства
   -a 1                  # текущий адрес устройства
   -t 0x06              # тип Modbus-запроса: запись одного регистра
   -t 0x06              # тип Modbus-запроса: запись одного регистра
   -r 0x80              # регистр смены адреса (в устройствах WB всегда 0x80)
   -r 128                # регистр смены адреса
   10                    # новый адрес устройства
   10                    # новый адрес устройства
</pre>
</pre>
Строка 30: Строка 30:
Смена адреса с 1 на 10 через первый порт (RS-485-1), 9600 бод:
Смена адреса с 1 на 10 через первый порт (RS-485-1), 9600 бод:
<pre>
<pre>
modbus_client -m rtu -b 9600 -p none -s 1 /dev/ttyRS485-1 -a 1 -t 0x06 -r 0x80 10
modbus_client -m rtu -b 9600 -p none -s 1 /dev/ttyRS485-1 -a 1 -t 0x06 -r 128 10
</pre>
</pre>


Смена адреса с 3 на 50 через второй порт (RS-485-2), 19200 бод:
Смена адреса с 3 на 50 через второй порт (RS-485-2), 19200 бод:
<pre>
<pre>
modbus_client -m rtu -b 19200 -p none -s 1 /dev/ttyRS485-2 -a 3 -t 0x06 -r 0x80 50
modbus_client -m rtu -b 19200 -p none -s 1 /dev/ttyRS485-2 -a 3 -t 0x06 -r 128 50
</pre>
</pre>


Смена адреса с 5 на 8 через MOD1, 38400 бод:
Смена адреса с 5 на 8 через MOD1, 38400 бод:
<pre>
<pre>
modbus_client -m rtu -b 38400 -p none -s 1 /dev/ttyMOD1 -a 5 -t 0x06 -r 0x80 8
modbus_client -m rtu -b 38400 -p none -s 1 /dev/ttyMOD1 -a 5 -t 0x06 -r 128 8
</pre>
</pre>


Смена адреса с 6 на 9 через MOD2, 19200 бод:
Смена адреса с 6 на 9 через MOD2, 19200 бод:
<pre>
<pre>
modbus_client -m rtu -b 19200 -p none -s 1 /dev/ttyMOD2 -a 6 -t 0x06 -r 0x80 9
modbus_client -m rtu -b 19200 -p none -s 1 /dev/ttyMOD2 -a 6 -t 0x06 -r 128 9
</pre>
</pre>


Смена адреса с 100 на 1 через второй порт, 115200 бод:
Смена адреса с 100 на 1 через второй порт, 115200 бод:
<pre>
<pre>
modbus_client -m rtu -b 115200 -p none -s 1 /dev/ttyRS485-2 -a 100 -t 0x06 -r 0x80 1
modbus_client -m rtu -b 115200 -p none -s 1 /dev/ttyRS485-2 -a 100 -t 0x06 -r 128 1
</pre>
</pre>


'''Важно:''' всегда указывайте корректный текущий адрес, иначе команда не выполнится. На шине должно находиться только одно устройство с указанным адресом.
'''Важно:''' всегда указывайте правильный текущий адрес. На шине должно быть только одно устройство с указанным адресом.


== ✅ Проверка ==
== ✅ Проверка ==
Проверка связи по новому адресу:
Проверка связи с устройством по новому адресу:


<pre>
<pre>
modbus_client -m rtu -b 9600 -p none -s 1 /dev/ttyRS485-1 -a 10 -t 0x03 -r 0x00 -c 1
modbus_client -m rtu -b 9600 -p none -s 1 /dev/ttyRS485-1 -a 10 -t 0x03 -r 0 -c 1
</pre>
</pre>


'''Что делает эта команда:'''
'''Что делает эта команда:'''
* `-a 10` — обращается к устройству с новым адресом `10`.
* `-a 10` — обращение к устройству с новым адресом `10`
* `-t 0x03` — читает Holding-регистр (стандартное чтение значений).
* `-t 0x03` — чтение holding-регистров
* `-r 0x00` — запрашивает значение из регистра `0x00` (часто содержит информацию о типе устройства, состоянии или просто возвращает валидное значение).
* `-r 0` — начальный регистр (0)
* `-c 1` — читается 1 регистр.
* `-c 1` — количество регистров — 1


'''Результат:'''
'''Результат:'''
Если устройство доступно и отвечает, команда вернёт строку вида:
Если устройство отвечает, появится строка:


<pre>
<pre>
Строка 75: Строка 75:
</pre>
</pre>


Где `0xXXXX` — шестнадцатеричное значение, прочитанное из регистра. Значение может быть любым — главное, что есть ответ. Это означает, что адрес успешно установлен и связь работает.
Значение может быть любым — главное, что есть ответ. Это означает, что адрес установлен успешно.


== 🔄 Запуск Modbus-сервиса ==
== 🔄 Запуск Modbus-сервиса ==
После завершения смены адреса запустите сервис обратно:
После завершения настроек запустите сервис обратно:


<pre>
<pre>
Строка 85: Строка 85:


== ⚠ Важно ==
== ⚠ Важно ==
* Регистр `0x80` используется во всех устройствах WB для установки адреса.
* Регистр `128` (десятичный) используется во всех устройствах Wirenboard для смены адреса.
* Адрес применяется сразу после записи.
* Изменения применяются сразу после записи.
* На шине должно быть только одно устройство с текущим адресом при смене.
* При смене адреса убедитесь, что только одно устройство подключено по указанному адресу.

Версия от 06:19, 10 июня 2025


Все устройства Wirenboard поддерживают смену Modbus-адреса записью нового значения в регистр `128`. Для этого используется утилита `modbus_client`, запускаемая из консоли контроллера.

⛔ Остановить Modbus-сервис

Перед выполнением команды необходимо остановить сервис `wb-mqtt-serial`, чтобы освободить доступ к порту:

service wb-mqtt-serial stop

⚙ Смена адреса

Пример: текущее устройство на адресе `1`, нужно установить новый адрес `10`.

modbus_client \
  -m rtu                # режим работы Modbus RTU
  -b 9600               # текущая скорость устройства
  -p none               # чётность (none/even/odd) — чаще всего none
  -s 1                  # количество стоп-бит (1 или 2)
  /dev/ttyRS485-1       # RS-485 порт контроллера
  -a 1                  # текущий адрес устройства
  -t 0x06               # тип Modbus-запроса: запись одного регистра
  -r 128                # регистр смены адреса
  10                    # новый адрес устройства

🧪 Примеры команд

Смена адреса с 1 на 10 через первый порт (RS-485-1), 9600 бод:

modbus_client -m rtu -b 9600 -p none -s 1 /dev/ttyRS485-1 -a 1 -t 0x06 -r 128 10

Смена адреса с 3 на 50 через второй порт (RS-485-2), 19200 бод:

modbus_client -m rtu -b 19200 -p none -s 1 /dev/ttyRS485-2 -a 3 -t 0x06 -r 128 50

Смена адреса с 5 на 8 через MOD1, 38400 бод:

modbus_client -m rtu -b 38400 -p none -s 1 /dev/ttyMOD1 -a 5 -t 0x06 -r 128 8

Смена адреса с 6 на 9 через MOD2, 19200 бод:

modbus_client -m rtu -b 19200 -p none -s 1 /dev/ttyMOD2 -a 6 -t 0x06 -r 128 9

Смена адреса с 100 на 1 через второй порт, 115200 бод:

modbus_client -m rtu -b 115200 -p none -s 1 /dev/ttyRS485-2 -a 100 -t 0x06 -r 128 1

Важно: всегда указывайте правильный текущий адрес. На шине должно быть только одно устройство с указанным адресом.

✅ Проверка

Проверка связи с устройством по новому адресу:

modbus_client -m rtu -b 9600 -p none -s 1 /dev/ttyRS485-1 -a 10 -t 0x03 -r 0 -c 1

Что делает эта команда:

  • `-a 10` — обращение к устройству с новым адресом `10`
  • `-t 0x03` — чтение holding-регистров
  • `-r 0` — начальный регистр (0)
  • `-c 1` — количество регистров — 1

Результат: Если устройство отвечает, появится строка:

Data: 0xXXXX

Значение может быть любым — главное, что есть ответ. Это означает, что адрес установлен успешно.

🔄 Запуск Modbus-сервиса

После завершения настроек запустите сервис обратно:

service wb-mqtt-serial start

⚠ Важно

  • Регистр `128` (десятичный) используется во всех устройствах Wirenboard для смены адреса.
  • Изменения применяются сразу после записи.
  • При смене адреса убедитесь, что только одно устройство подключено по указанному адресу.