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

Материал из Wiren Board
(Новая страница: «{| border="1" class="wikitable" style="text-align:center; width:1000px;" !Register / address !Type !Read/write !Value by default !Format !Function |- | 110 || h…»)
(Новая страница: «== Changing data exchange settings ==»)
Строка 27: Строка 27:




== Изменение параметров обмена данными ==
== Changing data exchange settings ==


Чтобы иметь возможность обратиться к устройству, поддерживающем протокол modbus RTU по шине RS-485, необходимо знать его modbus-адрес, а так же установленные на устройстве скорость обмена данными, четность, количество стоп-битов. '''Важно: Перед выполнением команд, описанных ниже, остановите сервис wb-mqtt-serial: <code>service wb-mqtt-serial stop</code>'''
Чтобы иметь возможность обратиться к устройству, поддерживающем протокол modbus RTU по шине RS-485, необходимо знать его modbus-адрес, а так же установленные на устройстве скорость обмена данными, четность, количество стоп-битов. '''Важно: Перед выполнением команд, описанных ниже, остановите сервис wb-mqtt-serial: <code>service wb-mqtt-serial stop</code>'''

Версия 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


Changing data exchange settings

Чтобы иметь возможность обратиться к устройству, поддерживающем протокол 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 стоп-бита.