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

Материал из Wiren Board
Строка 6: Строка 6:
== RS-485 data exchange parameters registers==
== 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 Wiren Board devices supports additional registers, which set parameters of data exchange via RS-485:
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:


{|  border="1" class="wikitable" style="text-align:center; width:1000px;"
{|  border="1" class="wikitable" style="text-align:center; width:1000px;"

Версия 19:42, 30 мая 2019

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

Внимание: Отображаемое название «Настройка параметров обмена данными по RS-485 для modbus-устройств Wiren Board» переопределяет ранее заданное отображаемое название «UART Communication Settings».


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 Wiren Board devices supports additional registers, which set parameters of 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


Changing data exchange settings

To be able to access the device that supports the modbus RTU Protocol over the RS-485 bus, it is necessary to know its modbus address, as well as the data exchange rate, parity, the number of stop bits installed on the device. Important: Before executing the commands below, stop the wb-mqtt-serial: service wb-mqtt-serial stop service

Узнать текущие настройки параметров обмена данными, можно, прочитав значение указанных выше регистров, например:

   (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 стоп-бита.