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

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


<syntaxhighlight lang="bash">  </syntaxhighlight>


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


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


----
2. Проверка: читаем содержимое регистра 0x80 (теперь уже с устройства с адресом 0x02) с помощью функции 0x03 (Read Holding Registers). Заметим, что в устройствах Wiren Board функции 0x03 и 0x04 взаимозаменяемы и приводят к одному и тому же результату.
2. Проверка: читаем содержимое регистра 0x80 (теперь уже с устройства с адресом 0x02) с помощью функции 0x03 (Read Holding Registers). Заметим, что в устройствах Wiren Board функции 0x03 и 0x04 взаимозаменяемы и приводят к одному и тому же результату.


Строка 84: Строка 85:
         Data: 0x0002</syntaxhighlight>
         Data: 0x0002</syntaxhighlight>


----
3. Прочтем регистры релейного модуля WB-MR14 с адресом 0x01, содержащие сигнатуру устройства, WBMR14. Известно, что сигнатура хранится по адресу 200 и занимает 6 регистров.
3. Прочтем регистры релейного модуля WB-MR14 с адресом 0x01, содержащие сигнатуру устройства, WBMR14. Известно, что сигнатура хранится по адресу 200 и занимает 6 регистров.


Строка 102: Строка 104:
<syntaxhighlight lang="bash">WBMR14</syntaxhighlight>
<syntaxhighlight lang="bash">WBMR14</syntaxhighlight>


 
----
4. Определим текущий адрес устройства, подключенного к Wiren Board. Адрес нам неизвестен и мы не хотим его менять.
4. Определим текущий адрес устройства, подключенного к Wiren Board. Адрес нам неизвестен и мы не хотим его менять.
Для этого в командной строке выполним циклическую команду опроса регистра 0x80 устройств с адресами с 1 по 247:
Для этого в командной строке выполним циклическую команду опроса регистра 0x80 устройств с адресами с 1 по 247:
Строка 110: Строка 112:
Результат: адрес подключенного устройства — 0x0072, то есть 114. Перебор всех адресов от 1 до 247 занимает чуть больше 2 минут.
Результат: адрес подключенного устройства — 0x0072, то есть 114. Перебор всех адресов от 1 до 247 занимает чуть больше 2 минут.


----
5. На модуле WB-MR14 включим реле с номером 6 (адреса регистрв флагов начинаются с нуля, помним об этом!). Используем для этого команду 0x05 (Write Single Coil):
5. На модуле WB-MR14 включим реле с номером 6 (адреса регистрв флагов начинаются с нуля, помним об этом!). Используем для этого команду 0x05 (Write Single Coil):
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x05 -r0x05 0x01</syntaxhighlight>
<syntaxhighlight lang="bash">modbus_client --debug -mrtu -pnone -s2 /dev/ttyAPP1 -a1 -t0x05 -r0x05 0x01</syntaxhighlight>
Строка 122: Строка 125:
Обратите внимание, утилита modbus_client при записи заменила 1 на 0x00FF, поскольку именно это значение служит для включения реле. Любое ненулевое значение будет заменено на 0x00FF, поэкспериментируйте.
Обратите внимание, утилита modbus_client при записи заменила 1 на 0x00FF, поскольку именно это значение служит для включения реле. Любое ненулевое значение будет заменено на 0x00FF, поэкспериментируйте.


----
6. Включим все нечетные реле и выключим все четные. Для этого используем функцию 15 (Write Multiple Coils). В модуле всего 14 реле, так что мы должны передать значения для 14 регистров с 0 по 13.
6. Включим все нечетные реле и выключим все четные. Для этого используем функцию 15 (Write Multiple Coils). В модуле всего 14 реле, так что мы должны передать значения для 14 регистров с 0 по 13.


5813

правок