16 348
правок
м |
м (Переписал) |
||
Строка 1: | Строка 1: | ||
{{Draft}} | {{Draft}} | ||
{{DISPLAYTITLE: Modbus-адрес устройства Wiren Board}} | |||
== | == Общая информация == | ||
[[Файл:modbus_address_mr14.png|300px|thumb|right|Modbus-адрес, установленный на производстве]] | [[Файл:modbus_address_mr14.png|300px|thumb|right|Modbus-адрес, установленный на производстве]] | ||
Заводской адрес устройства можно узнать на наклейке, которая находится на корпусе устройства. | |||
Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже. В них используется утилита [[Modbus-client |modbus_client]]. Перед её использованием нужно [[Modbus-client#Подготовка к работе | остановить драйвер wb-mqtt-serial]]. | |||
Методы ниже хорошо работают если известны другие настройки подключения к устройству: скорость, четность, стоп-бит. Если эти параметры вам неизвестны, вы можете [[Restore factory settings | сбросить настройки устройства]]. | |||
== Узнать адреса всех устройств на шине == | |||
<syntaxhighlight lang="bash"> | Если перебрать все доступные адреса и прочитать в ответивших устройствах регистр с адресом — можно получить список адресов всех устройств на шине с их сигнатурой: | ||
# Откройте консоль контроллера по [[SSH]]. | |||
<syntaxhighlight lang="bash"> | # Если вы работаете с контроллера — остановите драйвер wb-mqtt-serial. | ||
# Замените в скрипте порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства: | |||
#:<syntaxhighlight lang="bash"> | |||
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 | |||
</syntaxhighlight> | |||
# Скопируйте и вставьте измененный скрипт в консоль контроллера и нажмите '''Enter'''. | |||
Скрипт переберет все адреса с 1 по 247 и выведет в консоль результат для каждого адреса: | |||
<syntaxhighlight lang="bash"> | |||
~# 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 - | 1 - | ||
2 - | 2 - | ||
Строка 24: | Строка 29: | ||
4 - | 4 - | ||
5 - | 5 - | ||
6 - | 6 - WBMWAC | ||
7 - | 7 - | ||
8 - | 8 - | ||
9 - | 9 - WBMRGB | ||
10 - | 10 - | ||
11 - | 11 - | ||
12 - | 12 - | ||
... | ... | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Изменить адрес широковещательным запросом == | ||
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос. | |||
'''ВНИМАНИЕ:''' новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять. | |||
# Откройте консоль контроллера по [[SSH]]. | |||
# Если вы работаете с контроллера — остановите драйвер wb-mqtt-serial. | |||
<syntaxhighlight lang="bash"> | # Замените в команде порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства и выполните её на контроллере: | ||
#: <syntaxhighlight lang="bash"> | |||
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r0x80 1 | |||
</syntaxhighlight> | |||
Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой. | |||
< | Запишем всем устройствам на шине в регистр <code>128</code> новый адрес <code>1</code> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r0x80 1 | |||
Data to write: 0x1 | Data to write: 0x1 | ||
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2) | Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2) | ||
Строка 56: | Строка 63: | ||
ERROR occured! | ERROR occured! | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Полезные ссылки == | |||
* [[Restore factory settings | Сброс устройства к заводским настройками]] | |||
[ | |||