Бага! modbus/tcp modbus_client

Привет.
Пытаюсь осознать, как замостить сторонний контроллер (который отдает мне параметры на WB6 по modbus/tcp) на mqtt. Обратный мост вроде бы есть, аж конфигурится в вебморде, но прямого почему-то пока не нашел…

Пробую modbus_client. Натолкнулся на глюк: независимо от адреса сервера (если это не localhost с запущенным wb_mqtt_mbgate), modbus_client не может с ним соединиться, выдавая:

0x000a Connecting to 0.0.0.0
Connection failed: Connection refused

хотя я указываю реальный айпишник сервера, порт итд. Фильтрации пакетов нет, устройства в одной локалке, icmp идет.
Похоже, клиент баговит… не парсит адрес сервера. Поправите?

Спасибо.

Апд.
Если прописать в /etc/hosts строчку myhost 192.168.0.111 и сказать

modbus_client --debug -mtcp -t0x03 -r0 -p502 myhost

эта редиска отвечает

Connecting to myhost
Connection failed: Network is unreachable

Точно бага. Причем как бы не в libmodbus, ну оооооочень старый бранч у вас используется…

Попробую пересобрать со свежим libmodbus. Ну и дебаг выведу - где там параметры парсятся.

1 лайк

Спасибо!
Я уже забрался в конфиг wb-mqtt-serial с призрачной надеждой найти там tcp - и, к удивлению, нашел!!! - но тоже не пашет, хотя и несколько иначе. Встать tcpdump’ом пока некуда, но есть сильнейшее подозрение, что вместо шапки MBAP шлется шапка RTU…
Тут, если что, поправить совсем ерунда по времени.

wb-mqtt-serial -c /etc/wb-mqtt-serial.conf -d

address: 2
address: 3
Warning: no devices defined for port </dev/ttyRS485-1 9600 8 N2 timeout 500> . Skipping.
Warning: no devices defined for port </dev/ttyRS485-2 9600 8 N2 timeout 500> . Skipping.
Setting up devices at <192.168.0.111:502 timeout 500>
CreateDevice: saia2 (SAIA-BURGESS) @ 2 – protocol: modbus
AddRegister: 0x8042d788
AddRegister: 0x8042da38
Adding range: 1 input(s) @ 2 of device modbus:2
Adding range: 1 input(s) @ 3 of device modbus:2
modbus: read 1 input(s) @ 2 of device modbus:2
Connected with code 0
Write: 02 04 00 02 00 01 90 39
Subscription succeeded.
Subscription succeeded.
ModbusRTU::ReadRegisterRange(): failed to read 1 input(s) @ 2 of device modbus:2: Serial protocol error: request timed out
modbus: read 1 input(s) @ 3 of device modbus:2
Write: 02 04 00 03 00 01 c1 f9
ModbusRTU::ReadRegisterRange(): failed to read 1 input(s) @ 3 of device modbus:2: Serial protocol error: request timed out
modbus: read 1 input(s) @ 2 of device modbus:2
Write: 02 04 00 02 00 01 90 39
ModbusRTU::ReadRegisterRange(): failed to read 1 input(s) @ 2 of device modbus:2: Serial protocol error: request timed out
modbus: read 1 input(s) @ 3 of device modbus:2
Write: 02 04 00 03 00 01 c1 f9
Connected with code 0
Subscription succeeded.
Subscription succeeded.
ModbusRTU::ReadRegisterRange(): failed to read 1 input(s) @ 3 of device modbus:2: Serial protocol error: request timed out
device modbus:2 disconnected

Нет. Там используется Modbus RTU over TCP
Говоря грубо “прямо так”.
https://wirenboard.com/wiki/index.php/Доступ_к_порту_RS-485_контроллера_Wiren_Board_с_компьютера
Именно Modbus TCP - несколько “другой” протокол.

Не, надо нормальный modbus/TCP, один крохопусечный шажок остался.

А отладка всего этого?
Так-то да, в планах.
ЗЫ. Ник классный.

Нененене. Прямо пш-пш горит. Если не беретесь, сам сяду допишу, НО тогда денешку себе заберу, вместо чтоб купить еще десяток WB6.
Правда надо.

Ник еще в студенчестве прилип, да так и держится… :slight_smile:

Сегодня не отвечу, в затра - да. Как пообщаемся с разработчиками. То есть нужно чтобы wb-mqtt-serial умел в “чистый” Modbus-TCP?

Спасибо, да! Готов побыть тестером, бездвоздбездно, т.е. дадом.

Ну это ж самое ценное - толковый замотивированный тестер, которому надо.

1 лайк

Как обещал - отвечаю. Будет на следующей неделе, дадим версию (просто пакет файлом) для тестирования.Так что можно готовить шаблоны устройств.

1 лайк

Привет, я бы тоже затестил modbusTCP, актуально очень

Ну, буду иметь в виду.
Но с нестабильными версиями и такое бывает:

Во, я тоже хочу. А то сторонние костыли юзать не комильфо.

Версия wb-mqtt-serial 2.3.0 можно установить из репы experimental. Добавлен TCP.

1 лайк

Yessup.
Смотрим.

так, я 2.2.1 в experimental вижу - не там смотрю?

apt update && apt policy wb-mqtt-serial        
wb-mqtt-serial:
  Installed: 2.2.2
  Candidate: 2.3.0
  Version table:
     2.3.0 910
        910 http://releases.contactless.ru/experimental/stretch stretch/main armhf Packages
 *** 2.2.2 100
        100 /var/lib/dpkg/status
     2.2.1 920
        920 http://releases.contactless.ru/unstable/stretch stretch/main armhf Packages
     2.2.0 920

Странно…

apt-cache policy wb-mqtt-serial

wb-mqtt-serial:
Installed: 2.2.1
Candidate: 2.2.1
Version table:
2.3.0 910
910 http://releases.contactless.ru/experimental/stretch stretch/main armhf Packages
*** 2.2.1 920
920 http://releases.contactless.ru/unstable/stretch stretch/main armhf Packages

при этом

cat 10wb-experimental

Package: *
Pin: release o=wirenboard, l=experimental*
Pin-Priority: 910

Ща пофиксим.