UART Communication Settings/en: различия между версиями
(Новая страница: «RS-485 data exchange parameters registers In the factory configuration, all Wiren Board devices are supplied with the following RS-485 settings: 9600 bps, no pari…») |
(Новая страница: «{| border="1" class="wikitable" style="text-align:center; width:1000px;" !Register / address !Type !Read/write !Value by default !Format !Function |- | 110 || h…») |
||
Строка 11: | Строка 11: | ||
{| border="1" class="wikitable" style="text-align:center; width:1000px;" | {| border="1" class="wikitable" style="text-align:center; width:1000px;" | ||
! | !Register / address | ||
! | !Type | ||
! | !Read/write | ||
! | !Value by default | ||
! | !Format | ||
! | !Function | ||
|- | |- | ||
| 110 || holding || RW || 96 || baud rate / 100 || | | 110 || holding || RW || 96 || baud rate / 100 || RS-485 port speed, '''divided by 100'''. Permissible speeds: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 | ||
|- | |- | ||
| 111 || holding || RW || 0 || || | | 111 || holding || RW || 0 || || set the parity bit of the RS-485 port. Valid values: 0 - no parity bit (none), 1 - odd , 2 - even | ||
|- | |- | ||
| 112 || holding || RW || 2 || || | | 112 || holding || RW || 2 || || umber of stop bits of RS-485 port. Valid values: 1, 2 | ||
|- | |- | ||
|} | |} |
Версия 20:29, 29 мая 2019
Внимание: Отображаемое название «Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board» переопределяет ранее заданное отображаемое название «UART Communication Settings».
== RS-485 data exchange parameters registers
==
RS-485 data exchange parameters registers In the factory configuration, all Wiren Board devices are supplied with the following RS-485 settings: 9600 bps, no parity bit (none), stop bit count — 2. However, the firmware of almost all modern devices Wiren Board supports additional registers settings data exchange via RS-485:
Register / address | Type | Read/write | Value by default | Format | Function |
---|---|---|---|---|---|
110 | holding | RW | 96 | baud rate / 100 | RS-485 port speed, divided by 100. Permissible speeds: 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200 |
111 | holding | RW | 0 | set the parity bit of the RS-485 port. Valid values: 0 - no parity bit (none), 1 - odd , 2 - even | |
112 | holding | RW | 2 | umber of stop bits of RS-485 port. Valid values: 1, 2 |
Изменение параметров обмена данными
Чтобы иметь возможность обратиться к устройству, поддерживающем протокол modbus RTU по шине RS-485, необходимо знать его modbus-адрес, а так же установленные на устройстве скорость обмена данными, четность, количество стоп-битов. Важно: Перед выполнением команд, описанных ниже, остановите сервис wb-mqtt-serial: service wb-mqtt-serial stop
Узнать текущие настройки параметров обмена данными, можно, прочитав значение указанных выше регистров, например:
(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
9600
Подробнее смотрите описание команды modbus_client. Важно: в примерах ниже используется порт /dev/ttyAPP1. Если устройство подключено к другому порту, необходимо заменить /dev/ttyAPP1 на название этого порта!
Записать новое значение можно с помощью следующей команды:
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyAPP1 -a0x01 -t0x06 -r110 1152
Теперь устройство передает и принимает данные на скорости 115200 бит/с.
Записью в соответствующие регистры изменяется четность и количество стоп-битов.
При этом возникает парадоксальная ситуация: мы не можем узнать значение скорости, если мы заранее не укажем её значение при обращении к устройству! Поэтому стоит внимательно относиться к тому, какие коммуникационные параметры вы устанавливайте. Наклейте на устройство наклейку с новыми параметрами. В случае, если все коммуникационные параметры неизвестны, найти их можно только перебором:
#/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
В этом скрипте мы обращаемся к регистру 0x80, в котором во всех 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 стоп-бита.