UART Communication Settings: различия между версиями

Материал из Wiren Board
Строка 1: Строка 1:
<languages/>
<languages/>
{{DISPLAYTITLE:Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board}}
{{DISPLAYTITLE:Настройка параметров подключения по RS-485 для Modbus-устройств Wiren Board}}
<translate>
<translate>
== Регистры параметров обмена данными по RS-485 == <!--T:1-->
== Введение ==
Устройства Wiren Board управляются по протоколу Modbus RTU и на физическом уровне подключаются через интерфейс [[RS-485]].
{{Wbincludes:Modbus Default Settings}}


<!--T:2-->
== Настройка параметров ==
В заводской конфигурации все устройства Wiren Board поставляются со следующими настройками RS-485: 9600 бит/с, бит чётности отсутствует (none), количество стоп-битов — 2.
Чтобы изменить параметры подключения, нам понадобится:
Однако в прошивках почти всех современных устройств Wiren Board поддерживаются дополнительные регистры настройки параметров обмена данными по RS-485:
* знать текущие настройки подключения устройства;
* контроллер с утилитой [[modbus_client]] или компьютер с адаптером USB-RS485 и [[Working_with_WB_devices_without_a_controller | программой для работы с Modbus]];
* номера регистров, которые описаны в [[Common_Modbus_Registers | таблице общих регистров]].


<!--T:3-->
Подготовка:
{|  border="1" class="wikitable" style="text-align:center; width:1000px;"
# Подключите устройство по [[RS-485 | шине RS-485]] к контроллеру или другому оборудованию, где будете выполнять команды.
!Регистр / адрес
# Если вы выполняете команды на контроллере:
!Тип
#:* откройте консоль контроллера по [[SSH]],
!Чтение/запись
#:* [[Modbus-client#Подготовка к работе | остановите драйвер wb-mqtt-serial]].
!Значение по умолчанию
# Можно менять настройки устройств.
!Формат
!Назначение
|-
| 110 || holding || RW || 96 ||  baud rate / 100 || скорость порта RS-485, '''делённая на 100'''. Допустимые скорости: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200
|-
| 111 || holding || RW || 0 || || настройка бита чётности порта RS-485. Допустимые значения: 0 - нет бита чётности (none), 1 - нечётный (odd), 2 - чётный (even)
|-
| 112 || holding || RW || 2 || || количество стоп-битов порта RS-485. Допустимые значения: 1, 2
|-
|}


== Изменение параметров обмена данными == <!--T:4-->
Допустим, у нас есть Modbus-устройство Wiren Board с заводскими параметрами подключения, Modbus-адресом <code>1</code> и подключённое к порту <code>/dev/ttyRS485-1</code>.


<!--T:5-->
Изменим адрес устройства, для этого запишем в регистр <code>128</code> новый адрес, например <code>12</code>:
Чтобы иметь возможность обратиться к устройству, поддерживающем протокол modbus RTU по шине RS-485, необходимо знать его modbus-адрес, а так же установленные на устройстве скорость обмена данными, четность, количество стоп-битов. '''Важно: Перед выполнением команд, описанных ниже, остановите сервис wb-mqtt-serial: <code>service wb-mqtt-serial stop</code>'''
<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12
</syntaxhighlight>


<!--T:6-->
Теперь изменим скорость порта устройства с 9600 бит/с на 115 200 бит/с, для этого запишем в регистр <code>110</code> новое значение, формат которого можно посмотреть в таблице общих регистров:
Узнать текущие настройки параметров обмена данными, можно, прочитав значение указанных выше регистров, например:
<syntaxhighlight lang="bash">
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r110 1152
</syntaxhighlight>


    <!--T:7-->
Теперь устройство передаёт и принимает данные на скорости 115 200 бит/с.
(echo -n '100 \* '; echo  -e `modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyAPP1 -a0x01 -t0x03 -r110 | grep Data | sed -e 's/Data://' -e 's/s//g'` | xargs printf "%d") | xargs expr


    <!--T:8-->
Остальные параметры меняются аналогично: смотрите, в каком регистре хранится значение и записываете в него новое.
9600
 
<!--T:9-->
Подробнее смотрите описание команды [[Special:MyLanguage/Modbus-client|modbus_client]].
'''Важно: в примерах ниже используется порт /dev/ttyAPP1. Если устройство подключено к другому порту, необходимо заменить /dev/ttyAPP1 на название этого порта!'''
 
<!--T:10-->
Записать новое значение можно с помощью следующей команды:
 
    <!--T:11-->
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyAPP1 -a0x01 -t0x06 -r110 1152
 
<!--T:12-->
Теперь устройство передает и принимает данные на скорости 115200 бит/с.
 
<!--T:13-->
Записью в соответствующие регистры изменяется четность и количество стоп-битов.


== Если параметры подключение неизвестны ==
<!--T:14-->
<!--T:14-->
При этом возникает парадоксальная ситуация: мы не можем узнать значение скорости, если мы заранее не укажем её значение при обращении к устройству! Поэтому стоит внимательно относиться к тому, какие коммуникационные параметры вы устанавливайте. Наклейте на устройство наклейку с новыми параметрами. В случае, если все коммуникационные параметры неизвестны, найти их можно только перебором:


<!--T:15-->
Бывает так, что параметры подключения устройства неизвестны, то можно или [[Wiren_Board_Device_Modbus_Address#Восстановление доступа| сбросить их к заводским]], или узнать перебором, для этого загрузите на контроллер скрипт [[Media:Perebor.sh.tar.gz|Perebor.sh.tar.gz]] и выполните его. Если адрес, к которому подключено устройство отличается от <code>/dev/ttyRS485-1</code>, измените его в теле скрипта.
<syntaxhighlight lang="bash">
#!/bin/bash
for l in {1,2};
do
for k in {none,odd,even};
do
    for j in {1200,2400,4800,9600,19200,38400,57600,115200};
    do
        for i in {1..247}; do
                    modbus_client -mrtu /dev/ttyAPP1 --debug -o 300 -a$i -t3 -r0x80 -b$j -s$l -p$k
        done 2>/dev/null | grep Data: | sed -e 's/ //g' -e 's/\n//' | xargs -I {} printf "Speed:$j\tStop bits:$l\tParity:$k\tModbus address:{}" | grep Data: | sed -e 's/Data://'
    done
done
done
</syntaxhighlight>


<!--T:16-->
<!--T:16-->
В этом [[Media:Perebor.sh.tar.gz|скрипте]] мы обращаемся к регистру 0x80, в котором во всех modbus-устройствах Wiren Board хранится modbus-адрес. Вывод скрипта будет содержать строки, подобные этим:
Как это работает: мы обращаемся к регистру <code>128</code>, в котором во всех modbus-устройствах Wiren Board хранится modbus-адрес. Вывод скрипта будет содержать строки, подобные этим:
  Speed:9600      Stop bits:1    Parity:none    Modbus address:0x0001
  Speed:9600      Stop bits:1    Parity:none    Modbus address:0x0001
  Speed:9600      Stop bits:2    Parity:none    Modbus address:0x0001
  Speed:9600      Stop bits:2    Parity:none    Modbus address:0x0001


<!--T:17-->
<!--T:17-->
Для стоп-битов, скорее всего, вы получите два значения: 1 и 2. Уточнить настройку можно считав значение из регистра 112 с уже известным адресом, скоростью, четностью:
Для стоп-битов, скорее всего, вы получите два значения: 1 и 2. Уточнить настройку можно считав значение из регистра <code>112</code> с уже известным адресом, скоростью, четностью:


  <!--T:18-->
  <!--T:18-->
Строка 97: Строка 62:


<!--T:22-->
<!--T:22-->
Если при чтении из регистра 112 вы получаете ошибку, то устройство не поддерживает установку коммуникационных параметров. В этом случае для коммуникации используется значение по умолчанию,2 стоп-бита.
Если при чтении из регистра 112 вы получаете ошибку — устройство не поддерживает изменение параметров подключения. В этом случае для подключения используется значение по умолчанию,2 стоп-бита.
</translate>
</translate>

Версия 17:34, 16 февраля 2022

Другие языки:

Введение

Устройства Wiren Board управляются по протоколу Modbus RTU и на физическом уровне подключаются через интерфейс RS-485.

Параметры порта по умолчанию

Значение
по умолчанию
Название параметра
в веб-интерфейсе
Параметр
9600 Baud rate Скорость, бит/с
8 Data bits Количество битов данных
None Parity Бит чётности
2 Stop bits Количество стоповых битов

Настройка параметров

Чтобы изменить параметры подключения, нам понадобится:

Подготовка:

  1. Подключите устройство по шине RS-485 к контроллеру или другому оборудованию, где будете выполнять команды.
  2. Если вы выполняете команды на контроллере:
  3. Можно менять настройки устройств.

Допустим, у нас есть Modbus-устройство Wiren Board с заводскими параметрами подключения, Modbus-адресом 1 и подключённое к порту /dev/ttyRS485-1.

Изменим адрес устройства, для этого запишем в регистр 128 новый адрес, например 12:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r128 12

Теперь изменим скорость порта устройства с 9600 бит/с на 115 200 бит/с, для этого запишем в регистр 110 новое значение, формат которого можно посмотреть в таблице общих регистров:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a1 -t0x06 -r110 1152

Теперь устройство передаёт и принимает данные на скорости 115 200 бит/с.

Остальные параметры меняются аналогично: смотрите, в каком регистре хранится значение и записываете в него новое.

Если параметры подключение неизвестны

Бывает так, что параметры подключения устройства неизвестны, то можно или сбросить их к заводским, или узнать перебором, для этого загрузите на контроллер скрипт Perebor.sh.tar.gz и выполните его. Если адрес, к которому подключено устройство отличается от /dev/ttyRS485-1, измените его в теле скрипта.

Как это работает: мы обращаемся к регистру 128, в котором во всех modbus-устройствах Wiren Board хранится modbus-адрес. Вывод скрипта будет содержать строки, подобные этим:

Speed:9600      Stop bits:1     Parity:none     Modbus address:0x0001
Speed:9600      Stop bits:2     Parity:none     Modbus address:0x0001

Для стоп-битов, скорее всего, вы получите два значения: 1 и 2. Уточнить настройку можно считав значение из регистра 112 с уже известным адресом, скоростью, четностью:

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyAPP1 -a0x01 -t0x03 -r112

или

modbus_client --debug -mrtu -b9600 -pnone -s1 /dev/ttyAPP1 -a0x01 -t0x03 -r112
   SUCCESS: read 1 of elements:
   Data: 0x0002

Если при чтении из регистра 112 вы получаете ошибку — устройство не поддерживает изменение параметров подключения. В этом случае для подключения используется значение по умолчанию,2 стоп-бита.