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

Материал из Wiren Board
м (A.Degtyarev переименовал страницу Определение и изменение Modbus-адреса устройств Wirenboard в Wiren Board Device Modbus Address без оставления перенаправления: Часть переводимой страницы Определение и изменение Modbus-адреса устройств Wirenboard.)
Строка 5: Строка 5:


[[Файл:modbus_address_mr14.png|300px|thumb|right|Modbus-адрес, установленный на производстве]]
[[Файл:modbus_address_mr14.png|300px|thumb|right|Modbus-адрес, установленный на производстве]]
Заводской адрес устройства можно узнать на наклейке, которая находится на корпусе устройства.
Заводской Modbus-адрес устройства можно узнать на наклейке, которая находится на корпусе устройства.


Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже. В них используется утилита [[Modbus-client |modbus_client]]. Перед её использованием нужно [[Modbus-client#Подготовка к работе | остановить драйвер wb-mqtt-serial]].
Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже. В них используется утилита [[Modbus-client |modbus_client]]. Перед её использованием нужно [[Modbus-client#Подготовка к работе | остановить драйвер wb-mqtt-serial]].

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

Это черновик страницы. Последняя правка сделана 27.05.2021 пользователем A.Degtyarev.


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

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

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

Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже. В них используется утилита 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 -r0x80 1
    

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

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

modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r0x80 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, если у вас нет этой утилиты — установите её.

Режим загрузчика

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

Для сброса устройство должно находиться в режиме загрузчика, оно переходит в этот режим, если:

  • на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
  • на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
  • при работе основной программы записать 1 в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилиту wb-mcu-fw-flasher с ключем -j.

В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.

Сброс настроек приемопередатчика

  1. Оставьте на шине только одно устройство.
  2. Переведите устройство в режим загрузчика одним из способов, описанных выше.
  3. Пока устройство в режиме загрузчика выполните команду, где /dev/ttyRS485-1 — порт, к которому подключено устройство.
    wb-mcu-fw-flasher  -d /dev/ttyRS485-1 -a0 -u
    

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

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>

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