Modbus-client: различия между версиями

Материал из Wiren Board
Строка 60: Строка 60:
  <syntaxhighlight lang="bash">  </syntaxhighlight>
  <syntaxhighlight lang="bash">  </syntaxhighlight>


1. Запись нового адреса устройства WB-MR14 в регистр 0x80
1. Запись нового адреса устройства WB-MR14 в регистр 0x80? используя команду 0x06 (Write Single Register)


<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a0x00 -t0x06 -r0x80 0x02</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a0x00 -t0x06 -r0x80 0x02</syntaxhighlight>

Версия 18:03, 8 декабря 2016

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

Утилита modbus-client используется для коммуникации по протоколам Modbus RTU и Modbus TCP из командной строки. Утилита modbus-client поставляется вместе с набором ПО контроллера Wiren Board. Утилита написана на C и использует открытую библиотеку libmodbus. Форк этой утилиты, поставляемый с устройствами Wiren Board хранится здесь. Основная задача этой утилиты — использование в качестве отладочного средства или средства настройки Modbus-устройств. Поскольку на функционирующем контроллере Wiren Board запущен драйвер modbus, его необходимо останавливать перед работой с modbus-client — вместе они не могут использовать один и тот же порт RS-485. Команды останова сервиса

для WB4:

service wb-homa-modbus stop

и для WB5:

service wb-mqtt-serial stop

Вызов и аргументы командной строки

Вызов modbus_client без аргументов выдает краткое описание возможных аргументов команды:

modbus_client [--debug] [-m {rtu|tcp}] [-a<slave-addr=1>] [-c<read-no>=1]
        [-r<start-addr>=100] [-t<f-type>] [-o<timeout-ms>=1000] [{rtu-params|tcp-params}] serialport|host [<write-data>]
NOTE: if first reference address starts at 0, set -0
f-type:
        (0x01) Read Coils, (0x02) Read Discrete Inputs, (0x05) Write Single Coil
        (0x03) Read Holding Registers, (0x04) Read Input Registers, (0x06) WriteSingle Register
        (0x0F) WriteMultipleCoils, (0x10) Write Multiple register
rtu-params:
        b<baud-rate>=9600
        d{7|8}<data-bits>=8
        s{1|2}<stop-bits>=1
        p{none|even|odd}=even
tcp-params:
        p<port>=502
Examples (run with default mbServer at port 1502): 
        Write data:     modbus_client --debug -mtcp -t0x10 -r0 -p1502 127.0.0.1 0x01 0x02 0x03
        Read that data: modbus_client --debug -mtcp -t0x03 -r0 -p1502 127.0.0.1 -c3

Значения параметров (адрес, таймаут, тип функции и т.д.) можно указывать как в шестнадцатеричном (0x**), так и в десятичном виде.

  • Первый аргумент --debug — произвольный. Он может указываться в любой позиции и включает отладку, выводя на экран шестнадцатеричные коды отправляемых и принимаемых данных.
  • Следующий аргумент -m. Он должен указываться первым в командной строке, или вторым, если первый аргумент — --debug или имя файла порта RS-485. Аргумент определяет тип используемого протокола -mrtu — Modbus RTU, -mtcp — Modbus TCP.
  • Аргумент -a задает Modbus-адрес устройства, к которому мы обращаемся. Если аргумент не используется, то по умолчанию выбирается адрес 0x01.
  • Аргумент определяет, какое количество элементов мы запрашиваем. По умолчанию — один.
  • Аргумент -r задает начальный адрес для чтения или записи. По умолчанию используется значение 100 (0x64).
  • Аргумент -t указывает код функции Modbus. Кратко они перечислены в выводе modbus_client, подробнее значения кодов описаны на странице Протокол Modbus.
  • Аргумент -o задает таймаут в миллисекундах (по умолчанию 1000).
  • Аргумент -0 (ноль) уменьшает на единицу адрес, задаваемый аргументом -r. Это может быть полезным при работе с устройствами с нестандартной адресацией.

Затем указываются специфические параметры протокола (Modbus RTU или Modbus TCP). Несмотря на информацию, выводимую в подсказке, эти параметры также начинаются со знака '-' (минус).

Для Modbus RTU:

  • -b — скорость передачи данных по последовательной линии (по умолчанию — 9600).
  • -d — количество передаваемых бит данных (7 или 8, по умолчанию — 8).
  • -s — количество стоповых битов (1 или 2, по умолчанию — 1).
  • -p — контроль четности (-p none — нет проверки, -p even — передается бит контроля на четность, -p odd — передается бит контроля на нечетность). По умолчанию передается бит контроля на четность(E).

Для Modbus TCP:

  • -p — номер TCP-порта устройства, с которым взаимодействует контроллер.


Далее следует имя файла порта RS-485 или адрес хоста, а в конце (факультативно, только для функций записи) — данные.

Примеры использования в Modbus RTU

Приведем несколько примеров, иллюстрирующих возможности данной утилиты.

1. Запись нового адреса устройства WB-MR14 в регистр 0x80? используя команду 0x06 (Write Single Register)

modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a0x00 -t0x06 -r0x80 0x02

Ответ:

Data to write: 0x2
Opening /dev/ttyAPP1 at 9600 bauds (N, 8, 2)
[00][06][00][80][00][02][08][32]
Waiting for a confirmation...
ERROR Connection timed out: select
ERROR occured!

Сообщение об ошибке возникает всегда, когда запись производится на специальный адрес 0 (-a0x00)

2. Проверка: читаем содержимое регистра 0x80 (теперь уже с устройства с адресом 0x02)

modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a2 -t0x03 -r0x80

Ответ:

Opening /dev/ttyAPP1 at 9600 bauds (N, 8, 2)
[02][03][00][80][00][01][85][D1]
Waiting for a confirmation...
<02><03><02><00><02><7D><85>
SUCCESS: read 1 of elements:
        Data: 0x0002