Wiren Board Device Modbus Address: различия между версиями
(не показано 29 промежуточных версий 5 участников) | |||
Строка 2: | Строка 2: | ||
== Общая информация == | == Общая информация == | ||
[[Файл: | [[Файл:modbus_address_mr14.png|300px|thumb|right|Modbus-адрес, установленный на производстве]] | ||
Заводской Modbus-адрес устройства Wiren Board можно узнать на | Заводской Modbus-адрес устройства Wiren Board можно узнать на наклейке, которая находится на корпусе устройства. | ||
Если заводской адрес был изменен, | Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже, для работы вам понадобится утилита [[Modbus-client |Modbus_client]], которая доступна для контроллеров Wiren Board и компьютеров с ОС Linux. Если у вас компьютер с ОС Widnows, то вы можете [[#Восстановление доступа | восстановить доступ к устройству]]. | ||
'''ВНИМАНИЕ:''' если вы выполняете команды на контроллере, то перед началом работы [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]], а после окончания — запустите снова. | |||
'''ВНИМАНИЕ:''' если вы выполняете команды на контроллере, то перед | |||
== Определение адресов всех устройств на шине == | == Определение адресов всех устройств на шине == | ||
Если перебрать все доступные адреса и прочитать регистр с сигнатурой устройства — можно получить список устройств на шине: | Если перебрать все доступные адреса и прочитать регистр с сигнатурой устройства — можно получить список устройств на шине: | ||
# Подключите устройства по | # Подключите устройства по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды. | ||
# Если вы выполняете команды на контроллере: | # Если вы выполняете команды на контроллере: | ||
#:* откройте консоль контроллера по [[SSH]], | #:* откройте консоль контроллера по [[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'''. | # Скопируйте и вставьте измененный скрипт в консоль контроллера, нажмите '''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: | Строка 40: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Изменение адреса устройству с известным адресом == | |||
Если вам известен адрес Modbus-устройства и вы хотите его изменить, то вы можете записать новый адрес в регистр <code>128(0x80)</code>. | |||
Чтобы изменить адрес, выполните шаги: | |||
# Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды. | |||
# Подключите устройство по | |||
# Если вы выполняете команды на контроллере: | # Если вы выполняете команды на контроллере: | ||
#:* откройте консоль контроллера по [[SSH]], | #:* откройте консоль контроллера по [[SSH]], | ||
#:* | #:* остановите драйвер wb-mqtt-serial. | ||
# Чтобы назначить новый адрес <code>12</code> устройству с адресом <code>1</code> и подключенное к порту <code>/dev/ttyRS485-1</code> выполните команду: | # Чтобы назначить новый адрес <code>12</code> устройству с адресом <code>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 -a1 -t0x06 -r128 12 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Пример успешного выполнения команды: | Пример успешного выполнения команды: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
# modbus_client --debug -mrtu | ~# modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12 | ||
Data to write: 0xc | Data to write: 0xc | ||
Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2) | Opening /dev/ttyRS485-1 at 9600 bauds (N, 8, 2) | ||
Строка 71: | Строка 64: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Изменение | == Изменение адрес устройству с неизвестным адресом == | ||
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос. | Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос. | ||
Строка 80: | Строка 70: | ||
Чтобы изменить адрес, выполните шаги: | Чтобы изменить адрес, выполните шаги: | ||
# Подключите устройство по | # Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды. | ||
# Если вы выполняете команды на контроллере: | # Если вы выполняете команды на контроллере: | ||
#:* откройте консоль контроллера по [[SSH]], | #:* откройте консоль контроллера по [[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 -r128 1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 92: | Строка 82: | ||
Запишем всем устройствам на шине в регистр <code>128 (0x80)</code> новый адрес <code>1</code>: | Запишем всем устройствам на шине в регистр <code>128 (0x80)</code> новый адрес <code>1</code>: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 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: | Строка 93: | ||
== Восстановление доступа == | == Восстановление доступа == | ||
[[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]] | [[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]] | ||
Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес — 1. | Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес — 1. | ||
Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса | Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса используется утилита [[wb-mcu-fw-flasher]], которая доступна для контроллеров Wiren Board, а также компьютеров с ОС Linux и Windows. | ||
# Подключите '''только одно устройство''' по | === Устройство питается от блока питания === | ||
# Подключите '''только одно устройство''' по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды. | |||
# Если вы выполняете команды на контроллере: | # Если вы выполняете команды на контроллере: | ||
#:* откройте консоль контроллера по [[SSH]], | #:* откройте консоль контроллера по [[SSH]], | ||
#:* | #:* остановите драйвер wb-mqtt-serial. | ||
# Отключите питание устройства. | # Отключите питание устройства. | ||
# Подайте питание на устройство и в течение двух секунд, пока устройство находится в [[Bootloader MOD | режиме загрузчика]], выполните команду, где <code>/dev/ttyRS485-1</code> (<code>COM1</code>) — порт, к которому подключено устройство: | # Подайте питание на устройство и в течение двух секунд, пока устройство находится в [[Wbincludes:Bootloader MOD | режиме загрузчика]], выполните команду, где <code>/dev/ttyRS485-1</code> (<code>COM1</code>) — порт, к которому подключено устройство: | ||
#:* на контроллере или компьютере с ОС Linux: | #:* на контроллере или компьютере с ОС Linux: | ||
#:<syntaxhighlight lang="bash"> | #:<syntaxhighlight lang="bash"> | ||
Строка 125: | Строка 115: | ||
# Прошейте устройство новой прошивкой, или перезапустите, для этого отключите и включите питание устройства. | # Прошейте устройство новой прошивкой, или перезапустите, для этого отключите и включите питание устройства. | ||
Пример успешного сброса | Пример успешного сброса: | ||
<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. | |||
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> | |||
=== Устройство питается от V_Out контроллера === | |||
Если устройство питается от V_Out контроллера, то вы можете управлять его питанием программно. Этот способ доступен только для контроллеров Wiren Board. | |||
# Подключите '''только одно устройство''' по шине RS-485 к контроллеру. | |||
# Откройте консоль контроллера по [[SSH]]. | |||
# Остановите драйвер wb-mqtt-serial. | |||
# Выполните команду, которая перезагрузит устройство, подключенное к порту <code>/dev/ttyRS485-1</code> и сбросит настройки приемопередатчика: | |||
#:<syntaxhighlight lang="bash"> | |||
mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 0 && sleep 3 && mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 1 && sleep 1 && wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u | |||
</syntaxhighlight> | |||
Пример успешного сброса: | |||
<syntaxhighlight lang="bash"> | |||
~# mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 0 && sleep 3 && mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 1 && sleep 1 && 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: | Строка 146: | ||
== Полезные ссылки == | == Полезные ссылки == | ||
* [[ | * [[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]] | ||
* [[Modbus-client | Описание утилиты modbus_client]] | * [[Modbus-client | Описание утилиты modbus_client]] | ||
* [[wb-mcu-fw-flasher | Сервисная утилита wb-mcu-fw-flasher]] | * [[wb-mcu-fw-flasher | Сервисная утилита wb-mcu-fw-flasher]] | ||
* [[Wb-mqtt-serial driver | Описание драйвера wb-mqtt-serial]] | * [[Wb-mqtt-serial driver | Описание драйвера wb-mqtt-serial]] | ||
Версия 10:52, 28 мая 2021
Общая информация
Заводской Modbus-адрес устройства Wiren Board можно узнать на наклейке, которая находится на корпусе устройства.
Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже, для работы вам понадобится утилита Modbus_client, которая доступна для контроллеров Wiren Board и компьютеров с ОС Linux. Если у вас компьютер с ОС Widnows, то вы можете восстановить доступ к устройству.
ВНИМАНИЕ: если вы выполняете команды на контроллере, то перед началом работы остановите драйвер wb-mqtt-serial, а после окончания — запустите снова.
Определение адресов всех устройств на шине
Если перебрать все доступные адреса и прочитать регистр с сигнатурой устройства — можно получить список устройств на шине:
- Подключите устройства по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
- Если вы выполняете команды на контроллере:
- откройте консоль контроллера по 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 -
...
Изменение адреса устройству с известным адресом
Если вам известен адрес Modbus-устройства и вы хотите его изменить, то вы можете записать новый адрес в регистр 128(0x80)
.
Чтобы изменить адрес, выполните шаги:
- Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
- Если вы выполняете команды на контроллере:
- откройте консоль контроллера по SSH,
- остановите драйвер wb-mqtt-serial.
- Чтобы назначить новый адрес
12
устройству с адресом1
и подключенное к порту/dev/ttyRS485-1
выполните команду:modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12
Пример успешного выполнения команды:
~# modbus_client --debug -mrtu -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!
Изменение адрес устройству с неизвестным адресом
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос.
ВНИМАНИЕ: новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять.
Чтобы изменить адрес, выполните шаги:
- Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
- Если вы выполняете команды на контроллере:
- откройте консоль контроллера по SSH,
- остановите драйвер wb-mqtt-serial.
- Замените в команде порт
/dev/ttyRS485-1
на тот, к которому подключены устройства и выполните команду на контроллере:modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1
Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой.
Запишем всем устройствам на шине в регистр 128 (0x80)
новый адрес 1
:
modbus_client --debug -mrtu -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>
Устройство питается от V_Out контроллера
Если устройство питается от V_Out контроллера, то вы можете управлять его питанием программно. Этот способ доступен только для контроллеров Wiren Board.
- Подключите только одно устройство по шине RS-485 к контроллеру.
- Откройте консоль контроллера по SSH.
- Остановите драйвер wb-mqtt-serial.
- Выполните команду, которая перезагрузит устройство, подключенное к порту
/dev/ttyRS485-1
и сбросит настройки приемопередатчика:mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 0 && sleep 3 && mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 1 && sleep 1 && wb-mcu-fw-flasher -d /dev/ttyRS485-1 -a0 -u
Пример успешного сброса:
~# mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 0 && sleep 3 && mosquitto_pub -t '/devices/wb-gpio/controls/V_OUT/on' -r -m 1 && sleep 1 && 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>