Modbus


#1

Хочу использовать устройства, поделюченные по 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, буду признателен.


#2

Добрый день,

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

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


#3

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


#4

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


#5

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


#6

Здравствуйте.
Новичок.
Настроил через 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
Спасибо.


#7

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

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


#8

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

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

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


#9

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