Modbus-адрес устройства Wiren Board

(перенаправлено с «Определение и изменение Modbus-адреса устройств Wirenboard»)

Это утверждённая версия страницы. Она же — наиболее свежая версия.

Общая информация

 
Modbus-адрес, установленный на производстве. Слева наклейка на верхней крышке устройства, справа — на боковой стенке

Заводской Modbus-адрес устройства Wiren Board можно узнать на наклейках, которые находится на корпусе устройства:

  • сбоку, где так же указаны ревизия устройства, версия прошивки, серийный номер и QR-код с этими данными;
  • на верхней крышке устройства.

Если заводской адрес был изменен, самый лучший способ узнать его - подключить устройство к контроллеру и выполнить сканирование. Или воспользоваться утилитой Modbus_client, которая доступна для контроллеров Wiren Board и компьютеров с ОС Linux.

Если у вас компьютер с ОС Windows, то вы можете восстановить доступ к устройству.

ВНИМАНИЕ: если вы выполняете команды на контроллере, то перед запуском утилиты Modbus-client остановите драйвер wb-mqtt-serial, а после окончания — запустите снова.

Определение адресов всех устройств на шине

Сканирование шины в веб-интерфейсе

Функция сканирования шины. Она доступна в веб-интерфейсе контроллера на вкладке Настройки - Сканирование. Убедитесь что все устройства подключены к шине и запустите сканирование. Если вы используете контроллер с устаревшим ПО воспользуйтесь инструкцией ниже.

Определение адреса методом перебора

Если перебрать все доступные адреса и прочитать регистр с сигнатурой устройства — можно получить список устройств на шине:

  1. Подключите устройства по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
  2. Если вы выполняете команды на контроллере:
  3. Замените в скрипте порт /dev/ttyRS485-1 на тот, к которому подключены устройства, настройки соединения 9600N2 задаются параметрами -b9600 -pnone -s2:
    for i in {1..247}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-1 --debug -b9600 -pnone -s2 -a$i -t3 -o100 -r200 -c6 2>/dev/null | grep Data: | awk 'gsub("Data:","")' | sed -e 's/0x00/\\\x/g' -e 's/\s//g'`; echo -e $D; done
    
  4. Скопируйте и вставьте измененный скрипт в консоль контроллера, нажмите Enter.

Скрипт переберет все адреса с 1 по 247 и выведет в консоль результат для каждого адреса:

# for i in {1..247}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-1 --debug -b9600 -pnone -s2 -a$i -t3 -o100 -r200 -c6 2>/dev/null | grep Data: | awk 'gsub("Data:","")' | sed -e 's/0x00/\\\x/g' -e 's/\s//g'`; echo -e $D; done
1 - 
2 - 
3 - 
4 - 
5 - 
6 - WBMWAC
7 - 
8 - 
9 - WBMRGB
10 - 
11 - 
12 - 
...

Вариант скрипта с перебором не только адресов но и параметров связи: Если параметры подключения неизвестны

Изменение адреса устройству с известным адресом

Вы можете записать новый адрес в регистр 128(0x80):

  1. Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
  2. Если вы выполняете команды на контроллере:
  3. Чтобы назначить новый адрес 12 устройству с адресом 1 и подключенное к порту /dev/ttyRS485-1 выполните команду:
    modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12
    

Пример успешного выполнения команды:

# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12
Data to write: 0xc
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[01][06][00][80][00][0C][88][27]
Waiting for a confirmation...
<01><06><00><80><00><0C><88><27>
SUCCESS: written 1 elements!

Изменение адреса устройству с неизвестным адресом

С расширением Быстрый Modbus, изменить адрес устройства можно используя адресацию по его серийному номеру. В этом случае не нужно отключать другие устройства от шины. О там как это сделать читайте на странице про Быстрый Modbus. Если вы используете устройство со старой версией прошивки используйте инструкцию ниже, а лучше обновите прошивку.

Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос.

ВНИМАНИЕ: новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять.

Чтобы изменить адрес, выполните шаги:

  1. Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
  2. Если вы выполняете команды на контроллере:
  3. Замените в команде порт /dev/ttyRS485-1 на тот, к которому подключены устройства и выполните команду на контроллере:
    modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1
    

Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой.

Запишем всем устройствам на шине в регистр 128 (0x80) новый адрес 1:

# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1
Data to write: 0x1
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[00][06][00][80][00][01][48][33]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured!

Восстановление доступа

 
Индикация режима загрузчика

Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес — 1.

Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса настроек используется утилита wb-mcu-fw-flasher, которая доступна для контроллеров Wiren Board, а также компьютеров с ОС Linux и Windows.

  1. Подключите только одно устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
  2. Если вы выполняете команды на контроллере:
  3. Отключите питание устройства.
  4. Подайте питание на устройство и в течение двух секунд, пока устройство находится в режиме загрузчика, выполните команду, где /dev/ttyRS485-1 (COM1) — порт, к которому подключено устройство:
    • на контроллере или компьютере с ОС Linux:
    wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
    
    • на компьютере с ОС Windows перейдите в папку с утилитой, а потом выполните команду:
    wb-mcu-fw-flasher_1.0.3.exe -d COM1 -a0 -u
    
  5. Прошейте устройство новой прошивкой, или перезапустите, для этого отключите и включите питание устройства.

Пример успешного сброса настроек приемопередатчика:

root@wirenboard-A4DTZKTB:~# wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
/dev/ttyRS485-1 opened successfully.
Send reset UART settings and modbus address command...
Ok.
Device is in Bootloader now! To flash FW run
wb-mcu-fw-flasher -d <port> -f <firmware.wbfw>

Полезные ссылки