Wiren Board Device Modbus Address: различия между версиями
(Подготовка страницы к переводу) |
|||
(не показано 88 промежуточных версий 8 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE: Modbus-адрес устройства Wiren Board}} | |||
== Общая информация == | |||
[[Файл:wb_modbus_address.png|300px|thumb|right|Modbus-адрес, установленный на производстве. Слева наклейка на верхней крышке устройства, справа — на боковой стенке]] | |||
Заводской Modbus-адрес устройства Wiren Board можно узнать на наклейках, которые находится на корпусе устройства: | |||
* сбоку, где так же указаны ревизия устройства, версия прошивки, серийный номер и QR-код с этими данными; | |||
* на верхней крышке устройства. | |||
Если заводской адрес был изменен, самый лучший способ узнать его - подключить устройство к контроллеру и выполнить [[Fast_Modbus#Сканирование_устройств_на_шине|сканирование]]. Или воспользоваться утилитой [[Modbus-client |Modbus_client]], которая доступна для контроллеров Wiren Board и компьютеров с ОС Linux. | |||
[[ | |||
Если у вас компьютер с ОС Windows, то вы можете [[#Восстановление доступа | восстановить доступ к устройству]]. | |||
[[ | |||
'''ВНИМАНИЕ:''' если вы выполняете команды на контроллере, то перед запуском утилиты ''Modbus-client'' [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]], а после окончания — запустите снова. | |||
== | == Определение адресов всех устройств на шине == | ||
===Сканирование шины в веб-интерфейсе=== | |||
{{Wbincludes:WebUI Scan Devices}} | |||
===Определение адреса методом перебора=== | |||
<syntaxhighlight lang="bash"> | Если перебрать все доступные адреса и прочитать регистр с сигнатурой устройства — можно получить список устройств на шине: | ||
# Подключите устройства по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где будете выполнять команды. | |||
# Если вы выполняете команды на контроллере: | |||
#:* откройте консоль контроллера по [[SSH]], | |||
#:* [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]]. | |||
# Замените в скрипте порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства, настройки соединения '''9600N2''' задаются параметрами <code>-b9600 -pnone -s2</code>: | |||
#:<syntaxhighlight lang="bash"> | |||
for i in {1..247}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-1 --debug -b9600 -pnone -s2 -a$i -t3 -o100 -r200 -c6 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="console"> | |||
# for i in {1..247}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-1 --debug -b9600 -pnone -s2 -a$i -t3 -o100 -r200 -c6 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 - | |||
... | |||
</syntaxhighlight> | |||
Вариант скрипта с перебором не только адресов но и параметров связи: [[UART_Communication_Settings#unknown-params | Если параметры подключения неизвестны]] | |||
== Изменение адреса устройству с известным адресом == | |||
Вы можете записать новый адрес в регистр <code>128(0x80)</code>: | |||
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где будете выполнять команды. | |||
# Если вы выполняете команды на контроллере: | |||
#:* откройте консоль контроллера по [[SSH]], | |||
#:* [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]]. | |||
# Чтобы назначить новый адрес <code>12</code> устройству с адресом <code>1</code> и подключенное к порту <code>/dev/ttyRS485-1</code> выполните команду: | |||
#: <syntaxhighlight lang="bash"> | |||
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12 | |||
</syntaxhighlight> | |||
Пример успешного выполнения команды: | |||
<syntaxhighlight lang="console"> | |||
# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12 | |||
Data to write: 0xc | |||
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2) | |||
[01][06][00][80][00][0C][88][27] | |||
Waiting for a confirmation... | |||
<01><06><00><80><00><0C><88><27> | |||
SUCCESS: written 1 elements! | |||
</syntaxhighlight> | |||
== Изменение адреса устройству с неизвестным адресом == | |||
С расширением Быстрый Modbus, изменить адрес устройства можно используя адресацию по его серийному номеру. В этом случае не нужно отключать другие устройства от шины. О там как это сделать читайте на странице про [[Fast_Modbus |Быстрый Modbus]]. | |||
Если вы используете устройство со старой версией прошивки используйте инструкцию ниже, а лучше обновите прошивку. | |||
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос. | |||
'''ВНИМАНИЕ:''' новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять. | |||
Чтобы изменить адрес, выполните шаги: | |||
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где будете выполнять команды. | |||
# Если вы выполняете команды на контроллере: | |||
#:* откройте консоль контроллера по [[SSH]], | |||
#:* [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]]. | |||
# Замените в команде порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства и выполните команду на контроллере: | |||
#: <syntaxhighlight lang="bash"> | |||
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1 | |||
</syntaxhighlight> | |||
Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой. | |||
<syntaxhighlight lang=" | Запишем всем устройствам на шине в регистр <code>128 (0x80)</code> новый адрес <code>1</code>: | ||
<syntaxhighlight lang="console"> | |||
# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1 | |||
Data to write: 0x1 | Data to write: 0x1 | ||
Opening /dev/ | Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2) | ||
[00][06][00][80][00][01][48][33] | [00][06][00][80][00][01][48][33] | ||
Waiting for a confirmation... | Waiting for a confirmation... | ||
Строка 34: | Строка 101: | ||
ERROR occured! | ERROR occured! | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang="bash">root@wirenboard:~# | == Восстановление доступа == | ||
{{Anchor|restoring-access}} | |||
[[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]] | |||
Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес — 1. | |||
< | |||
Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса настроек используется утилита [[wb-mcu-fw-flasher]], которая доступна для контроллеров Wiren Board, а также компьютеров с ОС Linux и Windows. | |||
# Подключите '''только одно устройство''' по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где будете выполнять команды. | |||
# Если вы выполняете команды на контроллере: | |||
#:* откройте консоль контроллера по [[SSH]], | |||
#:* [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]]. | |||
# Отключите питание устройства. | |||
# Подайте питание на устройство и в течение двух секунд, пока устройство находится в [[Bootloader MOD | режиме загрузчика]], выполните команду, где <code>/dev/ttyRS485-1</code> (<code>COM1</code>) — порт, к которому подключено устройство: | |||
#:* на контроллере или компьютере с ОС Linux: | |||
#:<syntaxhighlight lang="bash"> | |||
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u | |||
</syntaxhighlight> | |||
#:* на компьютере с ОС Windows перейдите в папку с утилитой, а потом выполните команду: | |||
#:<syntaxhighlight lang="bash"> | |||
wb-mcu-fw-flasher_1.0.3.exe -d COM1 -a0 -u | |||
</syntaxhighlight> | |||
# Прошейте устройство новой прошивкой, или перезапустите, для этого отключите и включите питание устройства. | |||
Пример успешного сброса настроек приемопередатчика: | |||
<syntaxhighlight lang="bash"> | |||
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> | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Полезные ссылки == | |||
* [[UART_Communication_Settings | Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board]] | |||
* [[WB Modbus Devices Firmware Update | Обновление прошивки Modbus-устройств Wiren Board]] | |||
* [[Modbus-client | Описание утилиты modbus_client]] | |||
* [[wb-mcu-fw-flasher | Сервисная утилита wb-mcu-fw-flasher]] | |||
* [[Wb-mqtt-serial driver | Описание драйвера wb-mqtt-serial]] | |||
* [[Fast_Modbus |Описание расширения Быстрый Modbus]] |
Текущая версия на 08:20, 31 мая 2024
Общая информация
Заводской Modbus-адрес устройства Wiren Board можно узнать на наклейках, которые находится на корпусе устройства:
- сбоку, где так же указаны ревизия устройства, версия прошивки, серийный номер и QR-код с этими данными;
- на верхней крышке устройства.
Если заводской адрес был изменен, самый лучший способ узнать его - подключить устройство к контроллеру и выполнить сканирование. Или воспользоваться утилитой Modbus_client, которая доступна для контроллеров Wiren Board и компьютеров с ОС Linux.
Если у вас компьютер с ОС Windows, то вы можете восстановить доступ к устройству.
ВНИМАНИЕ: если вы выполняете команды на контроллере, то перед запуском утилиты Modbus-client остановите драйвер wb-mqtt-serial, а после окончания — запустите снова.
Определение адресов всех устройств на шине
Сканирование шины в веб-интерфейсе
Сканирование шины работает только для устройств с поддержкой Быстрого Modbus
В релизах с wb-2304 по wb-2404
В разделе Настройки → Сканирование можно получить список всех устройств Wiren Board подключенных к шине RS-485 с их серийными номерами, настройками соединения и версиями прошивок.
Возможности функции сканирования:
- отображение всех устройств Wiren Board, подключенных к контроллеру,
- обнаружение устройств с одинаковыми адресами на одной шине,
- обнаружение устройств с разными параметрами связи на одной шине.
Благодаря функции сканирования можно собирать шкаф управления не обращая внимания на адреса устройств — все адреса и параметры можно будет получить после сборки и сконфигурировать устройства не отключая от шины.
В релизах wb-2407 и новее
Так как сканирование тесно связано с добавлением устройств в конфигурацию контроллера, то мы убрали отдельный сканер и перенесли сканирование шины в конфигуратор настроек устройств.
Настройки → Конфигурационные файлы → Настройка драйвера serial-устройств → Найти и добавить устройства
- Галерея
Определение адреса методом перебора
Если перебрать все доступные адреса и прочитать регистр с сигнатурой устройства — можно получить список устройств на шине:
- Подключите устройства по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
- Если вы выполняете команды на контроллере:
- откройте консоль контроллера по SSH,
- остановите драйвер wb-mqtt-serial.
- Замените в скрипте порт
/dev/ttyRS485-1
на тот, к которому подключены устройства, настройки соединения 9600N2 задаются параметрами-b9600 -pnone -s2
:for i in {1..247}; do echo -n "$i - "; D=`modbus_client -mrtu /dev/ttyRS485-1 --debug -b9600 -pnone -s2 -a$i -t3 -o100 -r200 -c6 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 -b9600 -pnone -s2 -a$i -t3 -o100 -r200 -c6 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 -
...
Вариант скрипта с перебором не только адресов но и параметров связи: Если параметры подключения неизвестны
Изменение адреса устройству с известным адресом
Вы можете записать новый адрес в регистр 128(0x80)
:
- Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
- Если вы выполняете команды на контроллере:
- откройте консоль контроллера по SSH,
- остановите драйвер wb-mqtt-serial.
- Чтобы назначить новый адрес
12
устройству с адресом1
и подключенное к порту/dev/ttyRS485-1
выполните команду:modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12
Пример успешного выполнения команды:
# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12
Data to write: 0xc
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2)
[01][06][00][80][00][0C][88][27]
Waiting for a confirmation...
<01><06><00><80><00><0C><88><27>
SUCCESS: written 1 elements!
Изменение адреса устройству с неизвестным адресом
С расширением Быстрый Modbus, изменить адрес устройства можно используя адресацию по его серийному номеру. В этом случае не нужно отключать другие устройства от шины. О там как это сделать читайте на странице про Быстрый Modbus. Если вы используете устройство со старой версией прошивки используйте инструкцию ниже, а лучше обновите прошивку.
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос.
ВНИМАНИЕ: новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять.
Чтобы изменить адрес, выполните шаги:
- Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
- Если вы выполняете команды на контроллере:
- откройте консоль контроллера по SSH,
- остановите драйвер wb-mqtt-serial.
- Замените в команде порт
/dev/ttyRS485-1
на тот, к которому подключены устройства и выполните команду на контроллере:modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1
Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой.
Запишем всем устройствам на шине в регистр 128 (0x80)
новый адрес 1
:
# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 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, которая доступна для контроллеров Wiren Board, а также компьютеров с ОС Linux и Windows.
- Подключите только одно устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
- Если вы выполняете команды на контроллере:
- откройте консоль контроллера по SSH,
- остановите драйвер wb-mqtt-serial.
- Отключите питание устройства.
- Подайте питание на устройство и в течение двух секунд, пока устройство находится в режиме загрузчика, выполните команду, где
/dev/ttyRS485-1
(COM1
) — порт, к которому подключено устройство:- на контроллере или компьютере с ОС Linux:
wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
- на компьютере с ОС Windows перейдите в папку с утилитой, а потом выполните команду:
wb-mcu-fw-flasher_1.0.3.exe -d COM1 -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>