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

Материал из Wiren Board

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

Modbus-адрес, установленный на производстве

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

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

ВНИМАНИЕ: если вы выполняете команды на контроллере, то перед началом работы остановите драйвер 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!

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

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

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

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

  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>

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