Wiren Board Device Modbus Address: различия между версиями
м (Добавил про сброс приемопередатчика) |
|||
(не показаны 74 промежуточные версии 5 участников) | |||
Строка 1: | Строка 1: | ||
{{Draft}} | |||
{{DISPLAYTITLE: Modbus-адрес устройства Wiren Board}} | {{DISPLAYTITLE: Modbus-адрес устройства Wiren Board}} | ||
== Общая информация == | == Общая информация == | ||
[[Файл: | [[Файл:modbus_address_mr14.png|300px|thumb|right|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: | Строка 37: | ||
</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: | Строка 63: | ||
== Восстановление доступа == | == Восстановление доступа == | ||
Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес будет равен 1. | |||
Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса используется утилита [[wb-mcu-fw-flasher]], если у вас нет этой утилиты — установите её. | |||
=== Режим загрузчика === | |||
[[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 секунда, а при записи прошивки мигание индикатора учащается. | |||
=== Сброс настроек приемопередатчика === | |||
# | # Оставьте на шине только одно устройство. | ||
# | # Переведите устройство в режим загрузчика одним из способов, описанных выше. | ||
# | # Пока устройство в режиме загрузчика выполните команду, где <code>/dev/ttyRS485-1</code> — порт, к которому подключено устройство. | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
wb-mcu-fw- | 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: | Строка 96: | ||
== Полезные ссылки == | == Полезные ссылки == | ||
* [[ | * [[Restore factory settings | Сброс устройства к заводским настройками]] | ||
Версия 15:03, 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!
Восстановление доступа
Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес будет равен 1.
Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса используется утилита wb-mcu-fw-flasher, если у вас нет этой утилиты — установите её.
Режим загрузчика
Для сброса устройство должно находиться в режиме загрузчика, оно переходит в этот режим, если:
- на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
- на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
- при работе основной программы записать
1
в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилитуwb-mcu-fw-flasher
с ключем-j
.
В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.
Сброс настроек приемопередатчика
- Оставьте на шине только одно устройство.
- Переведите устройство в режим загрузчика одним из способов, описанных выше.
- Пока устройство в режиме загрузчика выполните команду, где
/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>