Modbus

Хочу использовать устройства, поделюченные по modbus. Посмотрел пример “стенд автоматизации”, там есть ссылка на гитхаб. Вытащил “драйвер” на js для разумного дома MSU21. Если не ошибаюсь, то это файл ninja-razumdom/lib/device.js

В файле есть строка self.modbusCmd = "/root/modbus_client --debug -m rtu -s2 -pnone /dev/ttyNSC0 -a0x01 ";
Где взять этот /root/modbus_client ?
Ну или ткните в ссылку по работе с modbus из wiren board, буду признателен.

Добрый день,

Документации нет пока к сожалению.
modbus-client - это https://github.com/Krzysztow/modbus-utils

Скомпилированный бинарник выложил в https://github.com/contactless/wirenboard/tree/master/contrib/modbus-utils

На плате ещё надо поставить пакет libmodbus5:
apt-get install libmodbus5

Спасибо еще раз! Оперативность ответов очень радует

2 сообщения перенесены в новую тему: Модули WBIO с другим контроллером

Здравствуйте.
Новичок.
Настроил через WebUI работу с частотным преобразователем по modbus.

Сводка

{
“path”: “/dev/ttyAPP1”,
“devices”: [
{
“slave_id”: 1,
“name”: “N700”,
“id”: “N700”,
“enabled”: true,
“protocol”: “modbus”,
“channels”: [

    {
      "name": "Пуск",
      "type": "wo-switch",
      "reg_type": "holding",
      "address": "2",
      "format": "s16",
      "on_value": 1
    }  ....................................

],
“port_type”: “serial”,
“baud_rate”: 9600,
“parity”: “N”,
“data_bits”: 8,
“stop_bits”: 1,
“poll_interval”: 10,
“enabled”: true
}

То есть, в регистр 0x02, используя функцию 0x06, записываем значение 1 для запуска частотного преобразователя и ноль для останова.
Все замечательно работает. Без сбоев, с первого раза и т.п.

Теперь пытаюсь это сделать в терминале, используя modbus_client, используя вызов и аргументы командной строки, приведенной в описании https://wirenboard.com/wiki/index.php/Modbus-client.

Перепробовал варианты без таймаута, не работает.
При этом код посылки из modbus_client совпадает с кодом посылки, проверенным в логах message.0

Вот формируемая команда в терминале…
modbus_client --debug -mrtu -pnone -o10 /dev/ttyAPP1 -a0x01 -t0x06 -r2 0x01
Не сработала ни разу.

Сводка

Data to write: 0x1
Opening /dev/ttyAPP1 at 9600 bauds (N, 8, 1)
[01][06][00][02][00][01][E9][CA]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!

Сработала только тогда, когда таймаут методом подбора перебрал значения по порядкам.

modbus_client --debug -mrtu -pnone -o10000000 /dev/ttyAPP1 -a0x01 -t0x06 -r2 0x01

Сводка

Data to write: 0x1
Opening /dev/ttyAPP1 at 9600 bauds (N, 8, 1)
[01][06][00][02][00][01][E9][CA]
Waiting for a confirmation…
<01><06><00><02><00><01>
SUCCESS: written 1 elements!

Теперь, при повторе эксперимента,
modbus_client --debug -mrtu -pnone -o10000000 /dev/ttyAPP1 -a0x01 -t0x06 -r2 0x01
отрабатывать совсем не хочет.

Сводка

Data to write: 0x1
Opening /dev/ttyAPP1 at 9600 bauds (N, 8, 1)
[01][06][00][02][00][01][E9][CA]
Waiting for a confirmation…
<01><03><02><00><00><44>
Message length not corresponding to the computed length (7 != 8)
ERROR occured!

Нет, я конечно сделал предположение, что возможно после этих манипуляций, что то с контроллером частотника могло произойти, но при этом управление через WebUI работает.

Что не так?

Подскажите пожалуйста попутно, где смотреть debug logging для Serial Device Driver Configuration
Спасибо.

1 лайк

У вас скорее всего порт занят программой wb-mqtt-serial.

Читайте информацию здесь
https://wirenboard.com/wiki/index.php/Modbus-client

2 лайка

Добрый день! Лог отладки пишется в /var/log/messages

Скажите, вы остановили сервис wb-mqtt-serial перед работой с modbus_client?
service wb-mqtt-serial stop

После этого работа через Web будет невозможна, но в косандной строке никаких помех не будет. Для восстановления работы через Web выполните команду
service wb-mqtt-serial start

1 лайк

Спасибо за ответы, так и есть.
При стопе сервиса wb-mqtt-serial modbus_client заработал
Смутило, что один раз команда на запись прошла, видимо удачно попал в “паузу” освободившегося порта.
Осталось только разобраться с таймаутами.
Под документации 10 мс не срабатывает, 100 мс проходит.