Wiren Board Device Modbus Address: различия между версиями

Материал из Wiren Board
(не показано 69 промежуточных версий 5 участников)
Строка 1: Строка 1:
{{Draft}}
{{DISPLAYTITLE: Modbus-адрес устройства Wiren Board}}
{{DISPLAYTITLE: Modbus-адрес устройства Wiren Board}}
== Общая информация ==
== Общая информация ==


[[Файл:wb_modbus_address.png|300px|thumb|right|Modbus-адрес, установленный на производстве. Слева наклейка на верхней крышке устройства, справа — на боковой стенке]]
[[Файл:modbus_address_mr14.png|300px|thumb|right|Modbus-адрес, установленный на производстве]]
Заводской Modbus-адрес устройства Wiren Board можно узнать на наклейках, которые находится на корпусе устройства:
Заводской Modbus-адрес устройства можно узнать на наклейке, которая находится на корпусе устройства.
* сбоку, где так же указаны ревизия устройства, версия прошивки, серийный номер и QR-код с этими данными;
* на верхней крышке устройства.


Если заводской адрес был изменен, самый лучший способ узнать его - подключить устройство к контроллеру и выполнить [[Fast_Modbus#Сканирование_устройств_на_шине|сканирование]]. Или воспользоваться утилитой  [[Modbus-client |Modbus_client]], которая доступна для контроллеров Wiren Board и компьютеров с ОС Linux.  
Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже. В них используется утилита [[Modbus-client |modbus_client]]. Перед её использованием нужно [[Modbus-client#Подготовка к работе | остановить драйвер wb-mqtt-serial]].


Если у вас компьютер с ОС Windows, то вы можете [[#Восстановление доступа | восстановить доступ к устройству]].
== Узнать адреса всех устройств на шине ==
 
Если перебрать все доступные адреса и прочитать в ответивших устройствах регистр с адресом — можно получить список адресов всех устройств на шине с их сигнатурой:
'''ВНИМАНИЕ:''' если вы выполняете команды на контроллере, то перед запуском утилиты ''Modbus-client'' [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]], а после окончания — запустите снова.
# Откройте консоль контроллера по [[SSH]].
 
# Если вы выполняете команды на контроллере остановите драйвер wb-mqtt-serial.
== Определение адресов всех устройств на шине ==
# Замените в скрипте порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства:
===Сканирование шины в веб-интерфейсе===
{{Wbincludes:WebUI Scan Devices}}
 
===Определение адреса методом перебора===
Если перебрать все доступные адреса и прочитать регистр с сигнатурой устройства — можно получить список устройств на шине:
# Подключите устройства по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где будете выполнять команды.
# Если вы выполняете команды на контроллере:
#:* откройте консоль контроллера по [[SSH]],
#:* [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]].
# Замените в скрипте порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства, настройки соединения '''9600N2''' задаются параметрами <code>-b9600 -pnone -s2</code>:
#:<syntaxhighlight lang="bash">
#:<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
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="console">
<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
~# 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>


Вариант скрипта с перебором не только адресов но и параметров связи: [[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]].
Если вы используете устройство со старой версией прошивки используйте инструкцию ниже, а лучше обновите прошивку.
 
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос.
Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос.


'''ВНИМАНИЕ:''' новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять.
'''ВНИМАНИЕ:''' новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять.


Чтобы изменить адрес, выполните шаги:
# Откройте консоль контроллера по [[SSH]].
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где будете выполнять команды.
# Если вы выполняете команды на контроллере остановите драйвер wb-mqtt-serial.
# Если вы выполняете команды на контроллере:
# Замените в команде порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства и выполните её на контроллере:
#:* откройте консоль контроллера по [[SSH]],
#:* [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]].
# Замените в команде порт <code>/dev/ttyRS485-1</code> на тот, к которому подключены устройства и выполните команду на контроллере:
#: <syntaxhighlight lang="bash">
#: <syntaxhighlight lang="bash">
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1
modbus_client --debug -mrtu -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r0x80 1
</syntaxhighlight>
</syntaxhighlight>


Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой.
Так как команда отправляет данные по широковещательному адресу — сообщение об ошибке в ответе является нормой.


Запишем всем устройствам на шине в регистр <code>128 (0x80)</code> новый адрес <code>1</code>:
Запишем всем устройствам на шине в регистр <code>128</code> новый адрес <code>1</code>
<syntaxhighlight lang="console">
<syntaxhighlight lang="bash">
# modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a0 -t0x06 -r128 1
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:


== Восстановление доступа ==
== Восстановление доступа ==
{{Anchor|restoring-access}}
Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес будет равен 1.
 
Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса используется утилита [[wb-mcu-fw-flasher]], которая доступна для ОС Linux и Widnows.
 
=== Режим загрузчика ===
[[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]]
[[File:Bootloader.gif|300px|thumb|right|Индикация режима загрузчика]]
Вы можете сбросить настройки приемопередатчика Modbus-устройства до заводских: скорость — 9600, чётность (parity) — N, количество стоп-бит — 2, Modbus-адрес — 1.


Это может быть полезно, если вам неизвестны все параметры подключения. Для сброса настроек используется утилита [[wb-mcu-fw-flasher]], которая доступна для контроллеров Wiren Board, а также компьютеров с ОС Linux и Windows.
Для сброса устройство должно находиться в режиме загрузчика, оно переходит в этот режим, если:
* на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
* на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
* при работе основной программы записать <code>1</code> в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилиту <code>wb-mcu-fw-flasher</code> с ключем <code>-j</code>.


# Подключите '''только одно устройство''' по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где будете выполнять команды.
В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.
# Если вы выполняете команды на контроллере:
 
#:* откройте консоль контроллера по [[SSH]],
=== Сброс настроек приемопередатчика ===
#:* [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]].
# Оставьте на шине только одно устройство.
# Отключите питание устройства.
# Если вы выполняете команды на контроллере остановите драйвер wb-mqtt-serial.
# Подайте питание на устройство и в течение двух секунд, пока устройство находится в [[Bootloader MOD | режиме загрузчика]], выполните команду, где <code>/dev/ttyRS485-1</code> (<code>COM1</code>) — порт, к которому подключено устройство:
# Переведите устройство в режим загрузчика одним из способов, описанных выше.
#:* на контроллере или компьютере с ОС Linux:
# Пока устройство в режиме загрузчика выполните команду, где <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>
#:* на компьютере с ОС Windows перейдите в папку с утилитой, а потом выполните команду:
#:<syntaxhighlight lang="bash">
wb-mcu-fw-flasher_1.0.3.exe -d COM1 -a0 -u
</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: Строка 97:


==  Полезные ссылки ==
==  Полезные ссылки ==
* [[UART_Communication_Settings | Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board]]
* [[Restore factory settings | Сброс устройства к заводским настройками]]
* [[WB Modbus Devices Firmware Update | Обновление прошивки 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]]

Версия 17:14, 27 мая 2021

Это черновик страницы. Последняя правка сделана 27.05.2021 пользователем A.Degtyarev.


Общая информация

Modbus-адрес, установленный на производстве

Заводской Modbus-адрес устройства можно узнать на наклейке, которая находится на корпусе устройства.

Если заводской адрес был изменен, то можно воспользоваться одним из способов ниже. В них используется утилита modbus_client. Перед её использованием нужно остановить драйвер wb-mqtt-serial.

Узнать адреса всех устройств на шине

Если перебрать все доступные адреса и прочитать в ответивших устройствах регистр с адресом — можно получить список адресов всех устройств на шине с их сигнатурой:

  1. Откройте консоль контроллера по SSH.
  2. Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
  3. Замените в скрипте порт /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
    
  4. Скопируйте и вставьте измененный скрипт в консоль контроллера и нажмите 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 - 
...

Изменить адрес широковещательным запросом

Если вам достаточно изменить адрес устройства, то вы можете сделать это отправив ему широковещательный запрос.

ВНИМАНИЕ: новый адрес будет установлен для всех устройств на шине, поэтому отключите те устройства, адреса которых вы не хотите менять.

  1. Откройте консоль контроллера по SSH.
  2. Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
  3. Замените в команде порт /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 и Widnows.

Режим загрузчика

Индикация режима загрузчика

Для сброса устройство должно находиться в режиме загрузчика, оно переходит в этот режим, если:

  • на устройстве имеется корректная прошивка, то первые 2 секунды после включения питания устройство работает в режиме загрузчика;
  • на устройстве нет корректной прошивки (например, был сбой при обновлении прошивки), то режим загрузчика активен постоянно;
  • при работе основной программы записать 1 в holding-регистр 129 (0x81) — в этом случае устройство перезагружается и остается в режиме загрузчика 120 секунд. Это можно сделать, запустив утилиту wb-mcu-fw-flasher с ключем -j.

В режиме загрузчика индикатор Status устройства мигает с периодом 1 секунда, а при записи прошивки мигание индикатора учащается.

Сброс настроек приемопередатчика

  1. Оставьте на шине только одно устройство.
  2. Если вы выполняете команды на контроллере — остановите драйвер wb-mqtt-serial.
  3. Переведите устройство в режим загрузчика одним из способов, описанных выше.
  4. Пока устройство в режиме загрузчика выполните команду, где /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>

Полезные ссылки