Wiren Board Device Modbus Address: различия между версиями

Материал из Wiren Board
Строка 74: Строка 74:
# Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
# Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
# Отключите питание устройства.
# Отключите питание устройства.
# Подайте питание на устройство и в течение двух секунд, пока устройство находится в [[Wbincludes:Bootloader MOD | режиме загрузчика]], выполните команду, где <code>/dev/ttyRS485-1</code> — порт, к которому подключено устройство:
# Подайте питание на устройство и в течение двух секунд, пока устройство находится в [[Wbincludes:Bootloader MOD | режиме загрузчика]], выполните команду, где <code>/dev/ttyRS485-1</code> (<code>COM1</code>) — порт, к которому подключено устройство:
#:* на контроллере или компьютере с ОС Linux:
#:<syntaxhighlight lang="bash">
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
</syntaxhighlight>
#:* на компьютере с ОС Windows:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher.exe -d COM1 -a0 -u
</syntaxhighlight>
</syntaxhighlight>


Пример успешного сброса:
Пример успешного сброса из ОС Linux:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
root@wirenboard-A4DTZKTB:~# wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
root@wirenboard-A4DTZKTB:~# wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u

Версия 10:17, 28 мая 2021

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

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

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

Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже, для работы вам понадобится утилита Modbus_client.

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

Узнать адреса всех устройств на шине

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

  1. Откройте консоль контроллера по SSH.
  2. Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
  3. Замените в скрипте порт /dev/ttyRS485-1 на тот, к которому подключены устройства:
    for i in {1..247}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-1 --debug -a$i -t3 -o100 -r200 -s2 -c6 -pnone 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 -a$i -t3 -o100 -r200 -s2 -c6 -pnone 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 - 
...

Изменить адрес широковещательным запросом

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

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

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

  1. Откройте консоль контроллера по SSH.
  2. Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
  3. Замените в команде порт /dev/ttyRS485-1 на тот, к которому подключены устройства и выполните команду на контроллере:
    modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1
    

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

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

modbus_client --debug -mrtu -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. Оставьте на шине только одно устройство.
  2. Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
  3. Отключите питание устройства.
  4. Подайте питание на устройство и в течение двух секунд, пока устройство находится в режиме загрузчика, выполните команду, где /dev/ttyRS485-1 (COM1) — порт, к которому подключено устройство:
    • на контроллере или компьютере с ОС Linux:
    wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
    
    • на компьютере с ОС Windows:
    wb-mcu-fw-flasher.exe -d COM1 -a0 -u
    

Пример успешного сброса из ОС Linux:

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>

Устройство питается от V_Out контроллера

Если устройство питается от V_Out контроллера, то вы можете управлять его питанием программно. Этот способ доступен только для контроллеров Wiren Board.

  1. Оставьте на шине только одно устройство.
  2. Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
  3. Выполните команду, которая перезагрузит устройство, подключенное к порту /dev/ttyRS485-1 и сбросит настройки приемопередатчика:
    mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 0 && sleep 3 && mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 1 && sleep 1 && wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
    

Пример успешного сброса:

~# mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 0 && sleep 3 && mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 1 && sleep 1 && 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>

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