Wiren Board Device Modbus Address: различия между версиями
м |
м (Переписал) |
||
Строка 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 | Сброс устройства к заводским настройками]] | |||
[ | |||
Версия 14:29, 27 мая 2021
Это черновик страницы. Последняя правка сделана 27.05.2021 пользователем A.Degtyarev.
Общая информация
Заводской адрес устройства можно узнать на наклейке, которая находится на корпусе устройства.
Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже. В них используется утилита modbus_client. Перед её использованием нужно остановить драйвер wb-mqtt-serial.
Методы ниже хорошо работают если известны другие настройки подключения к устройству: скорость, четность, стоп-бит. Если эти параметры вам неизвестны, вы можете сбросить настройки устройства.
Узнать адреса всех устройств на шине
Если перебрать все доступные адреса и прочитать в ответивших устройствах регистр с адресом — можно получить список адресов всех устройств на шине с их сигнатурой:
- Откройте консоль контроллера по SSH.
- Если вы работаете с контроллера — остановите драйвер wb-mqtt-serial.
- Замените в скрипте порт
/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
- Скопируйте и вставьте измененный скрипт в консоль контроллера и нажмите 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 -
...
Изменить адрес широковещательным запросом
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос.
ВНИМАНИЕ: новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять.
- Откройте консоль контроллера по SSH.
- Если вы работаете с контроллера — остановите драйвер wb-mqtt-serial.
- Замените в команде порт
/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!