Wiren Board Device Modbus Address: различия между версиями
(не показаны 63 промежуточные версии 5 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Modbus-адрес устройства Wiren Board}} | {{DISPLAYTITLE: Modbus-адрес устройства Wiren Board}} | ||
== Общая информация == | == Общая информация == | ||
[[Файл: | [[Файл:modbus_address_mr14.png|300px|thumb|right|Modbus-адрес, установленный на производстве]] | ||
Заводской Modbus-адрес устройства | Заводской Modbus-адрес устройства можно узнать на наклейке, которая находится на корпусе устройства. | ||
Если заводской адрес был изменен, | Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже, для работы вам понадобится утилита [[Modbus-client |Modbus_client]]. | ||
'''ВНИМАНИЕ:''' если вы выполняете команды на контроллере, то перед началом работы [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]], а после окончания запустите снова. | |||
== Узнать адреса всех устройств на шине == | |||
Если перебрать все доступные адреса и прочитать в ответивших устройствах регистр с адресом — можно получить список адресов всех устройств на шине с их сигнатурой: | |||
== | # Откройте консоль контроллера по [[SSH]]. | ||
# Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial. | |||
# Замените в скрипте порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства: | |||
Если перебрать все доступные адреса и прочитать регистр с | |||
# | |||
# Если вы выполняете команды на контроллере | |||
# Замените в скрипте порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства | |||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
for i in {1..247}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-1 --debug | 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> | </syntaxhighlight> | ||
# Скопируйте и вставьте измененный скрипт в консоль контроллера | # Скопируйте и вставьте измененный скрипт в консоль контроллера и нажмите '''Enter'''. | ||
Скрипт переберет все адреса с 1 по 247 и выведет в консоль результат для каждого адреса: | Скрипт переберет все адреса с 1 по 247 и выведет в консоль результат для каждого адреса: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
# for i in {1..247}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-1 --debug | ~# 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 - | ||
Строка 47: | Строка 38: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Изменить адрес широковещательным запросом == | |||
== | |||
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос. | Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос. | ||
'''ВНИМАНИЕ:''' новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять. | '''ВНИМАНИЕ:''' новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять. | ||
# Откройте консоль контроллера по [[SSH]]. | |||
# | # Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial. | ||
# Если вы выполняете команды на контроллере | # Замените в команде порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства и выполните её на контроллере: | ||
# Замените в команде порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства и выполните | |||
#: <syntaxhighlight lang="bash"> | #: <syntaxhighlight lang="bash"> | ||
modbus_client --debug -mrtu | modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r0x80 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой. | Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой. | ||
Запишем всем устройствам на шине в регистр <code>128 | Запишем всем устройствам на шине в регистр <code>128</code> новый адрес <code>1</code> | ||
<syntaxhighlight lang=" | <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) | ||
Строка 103: | Строка 64: | ||
== Восстановление доступа == | == Восстановление доступа == | ||
Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес будет равен 1. | |||
Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса используется утилита [[wb-mcu-fw-flasher]], которая доступна для ОС Linux и Windows. | |||
=== Режим загрузчика === | |||
[[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]] | [[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]] | ||
Для сброса устройство должно находиться в режиме загрузчика, оно переходит в этот режим, если: | |||
* на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика; | |||
* на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно; | |||
* при работе основной программы записать <code>1</code> в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилиту <code>wb-mcu-fw-flasher</code> с ключем <code>-j</code>. | |||
В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается. | |||
# | === Сброс настроек приемопередатчика === | ||
# Если вы выполняете команды на контроллере | # Оставьте на шине только одно устройство. | ||
# Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial. | |||
# Переведите устройство в режим загрузчика одним из способов, описанных выше. | |||
# | # Пока устройство в режиме загрузчика выполните команду, где <code>/dev/ttyRS485-1</code> — порт, к которому подключено устройство. | ||
# | |||
#:<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> | </syntaxhighlight> | ||
Пример успешного сброса | Пример успешного сброса: | ||
<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 | ||
/dev/ttyRS485-1 opened successfully. | /dev/ttyRS485-1 opened successfully. | ||
Send reset UART settings and modbus address command... | Send reset UART settings and modbus address command... | ||
Строка 136: | Строка 98: | ||
== Полезные ссылки == | == Полезные ссылки == | ||
* [[ | * [[Restore factory settings Wiren Board Modbus device | Сброс Modbus-устройства Wiren Board к заводским настройкам]] | ||
* [[WB Modbus Devices Firmware Update | Обновление прошивки Modbus-устройств Wiren Board]] | * [[WB Modbus Devices Firmware Update | Обновление прошивки Modbus-устройств Wiren Board]] | ||
Версия 20:09, 27 мая 2021
Общая информация
Заводской Modbus-адрес устройства можно узнать на наклейке, которая находится на корпусе устройства.
Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже, для работы вам понадобится утилита 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!
Восстановление доступа
Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес будет равен 1.
Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса используется утилита wb-mcu-fw-flasher, которая доступна для ОС Linux и Windows.
Режим загрузчика
Для сброса устройство должно находиться в режиме загрузчика, оно переходит в этот режим, если:
- на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
- на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
- при работе основной программы записать
1
в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилитуwb-mcu-fw-flasher
с ключем-j
.
В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.
Сброс настроек приемопередатчика
- Оставьте на шине только одно устройство.
- Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
- Переведите устройство в режим загрузчика одним из способов, описанных выше.
- Пока устройство в режиме загрузчика выполните команду, где
/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>