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

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

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


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

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!

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