Поддержка MODBUS TCP в wb-mqtt-serial

Мы добавили в wb-mqtt-serial 2.3.0 поддержку MODBUS TCP. Приглашаем попробовать!

В настройках появился новый тип порта: “modbus tcp”.

Пример описания порта в конфигурационном файле:

        {
            "port_type": "modbus tcp",
            "address": "localhost",
            "port": 502,
            "devices": [
                {
                    "slave_id": "116",
                    "channels": [
                         {
                              "name": "Supply voltage",
                              "reg_type": "input",
                              "address": 16114,
                              "type": "voltage",
                              "scale": 1.0
                         }
                    ]
                },
                {
                    "slave_id": "1",
                    "device_type": "WB-MR3"
                }
            ]
        }

Так это выглядит в web-интерфейсе:

Как обновляться

Обновлённое ПО вышло только для Wiren Board 6, предыдущие контролеры не поддерживаются.

Если репозиторий experimental не подключен, нужно включить его, выполнив команду:

echo 'deb http://releases.contactless.ru/experimental/stretch stretch main' > /etc/apt/sources.list.d/contactless-experimental.list

Обновить список пакетов:

apt update

Установить wb-mqtt-serial:

apt install wb-mqtt-serial

Версию пакетов и доступные для обновления версии можно посмотреть командой:

apt policy имяпакета
2 лайка

Ии - здравствуйте.

Вроде сконфигурял. Полезло вот что - где-то ошибся, вероятно. Слейв доступен, отвечает.

DEBUG: [serial port driver] setting up devices at <10.112.31.11:502 5000ms, 2>
DEBUG: [serial client] CreateDevice: saia2 @ 2 – protocol: modbus-tcp
DEBUG: [serial client] AddRegister: 0x802f7b88
DEBUG: [serial client] AddRegister: 0x802f7ed8
DEBUG: [modbus] Adding range: 1 input(s) @ 13 of device modbus-tcp:2
DEBUG: [modbus] Adding range: 1 input(s) @ 14 of device modbus-tcp:2
DEBUG: [port] Sleep 0 us
DEBUG: [modbus] modbus: read 1 input(s) @ 13 of device modbus-tcp:2
DEBUG: [port] Sleep 2000 us
DEBUG: [port] Write: 00 01 00 00 00 06 02 04 00 0d 00 01
DEBUG: [port] ReadFrame: 00 01 00 00 00 03 02
DEBUG: [port] ReadFrame: 84 0a
WARNING: [modbus] ModbusRTU::ReadRegisterRange(): failed to read 1 input(s) @ 13 of device modbus-tcp:2: Serial protocol error: gateway path is unavailable
DEBUG: [modbus] modbus: read 1 input(s) @ 14 of device modbus-tcp:2
DEBUG: [port] Sleep 2000 us
DEBUG: [port] Write: 00 02 00 00 00 06 02 04 00 0e 00 01
DEBUG: [port] ReadFrame: 00 02 00 00 00 03 02
DEBUG: [port] ReadFrame: 84 0a
WARNING: [modbus] ModbusRTU::ReadRegisterRange(): failed to read 1 input(s) @ 14 of device modbus-tcp:2: Serial protocol error: gateway path is unavailable

Что это? :slight_smile:

Не подскажите, что за устройство подключено? По логу видно, что подключенное устройство отвечает на запросы от WB. Такая ошибка возникает, когда подключен шлюз, и он не может найти конечное устройство, к которому адресован запрос. У вас выбран slave_id равный 2. Возможно, он не верный.

Подскажу, сторонний контроллер, законфиганный на опрос со стороны моего (такая вот система сбора статистики). На той стороне админ тоже воюет с проблемой, gateway path, как я начинаю понимать, не ошибка libmodbus?

Так, действительно ругался на slave id, спасибо вам!
Теперь discrete читаются, абер не читаются input:

WARNING: [modbus] Register <modbus-tcp:1:input: 8> is not supported

А как holding их не отдает собеседник.
Хотелось бы знать, кем они not supported. Вывод дебужжера очень скуп…

Завел, большое спасибо! Дня три молотит без претензий.

Gateway path возвращает в ответе опрашиваемое устройство.

Мы выдаём в логе Register is not supported, если опрашиваемое устройство возвращает одну из ошибок ILLEGAL FUNCTION, ILLEGAL DATA ADDRESS или ILLEGAL DATA VALUE. Это сигнал, что опрашиваемое устройство не поддерживает данные регистры. wb-mqtt-serial в этом случае перестаёт их читать.

1 лайк

спасибо, работает!
На радостях наваял шаблонов китайских железок HF, USR и т.д.
возможно, кому-то надо? Куда выложить?

Я правильно поминаю, что USR-W600 не поддерживает MODBUS TCP? Подойдет ли USR-W610? Дело в том, что в прозрачном режиме иногда приходят битые значения.

Добрый день!
USR-W6XX мне вообще не понравились. Они конечно, дешёвые, но и работают на свои деньги :slight_smile:
Могу порекомендовать HF вот например
Эта штука адекватна между 485 modbus и modbus tcp или mqtt.

USR-IO424T-EWR.json (3.7 КБ) config-HF6508.json (4.2 КБ) config-ZL-6842.json (4.2 КБ) config-xy-md03.json (611 Байт) config-xy-md02.json (609 Байт)
Может, пригодится кому-нибудь. Что за прибор - в названии понятно. Вроде всё проверил.
!!! Датчики температуры - влажности (XY) китайцы делают глядя на фазу луны. То есть темп-ра и влажность могут быть в регистрах 1 и 2, могут в 0 и 1, а могут быт ьпоменяны местами. Тут уж по ситуации плодите клонов :slight_smile:

1 лайк

Здравствуйте! можно ли сконфигурировать на данном порту 2 контроллера wiren board как master - slave?

Один контроллер - мастер с помошью wb-mqtt-serial, да.
Второй - slave через https://wirenboard.com/wiki/шлюз_Modbus_TCP

1 лайк

Понял, спасибо!

В принципе можно и на обоих настроить и master и slave. Но тогда уж проще mqtt-bridge.

Коллеги, благодарю за своевременную помощь.
Почти месяц эксплуатации - полет нормальный! Не глючило.