Не удается соединиться с устройством через WB-MGE v.2 через modbus_client

не удается соединиться с устройством через WB-MGE v.2 через modbus_client.
Пример команды:
modbus_client --debug -mtcp 10.50.5.14 -a138 -t0x03 -r2
Вывод:
modbus_client --debug -mtcp 10.50.5.14 -a138 -t0x03 -r2
Connecting to 10.50.5.14:502
[00][01][00][00][00][06][8A][03][00][02][00][01]
Waiting for a confirmation…
ERROR Connection timed out: select
ERROR occured!
Устройство подключено и работает

Думаю так не получится…
Использую socast создайте виртуальный serial порт и обращайтесь к нему
https://wirenboard.com/wiki/Socat

Утилита modbus_client не умеет работать с протоколом Modbus over TCP, который используется для коммуникации с модулями WB-MGE и WB-MIO-E по сети Ethernet. Поэтому для конфигурирования Modbus-устройств, подключенных к WB-MGE и WB-MIO-E по сети RS-485 нужно cоздать виртуальный порт с помощью утилиты socat.

1 лайк

Спасибо. Но теперь другая ошибка. Устройство прочиталось, все ок.
А вот датчик [SYCN21B] на угарный газ не хочет работать
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a1 -t0x03 -r1
Opening /dev/ttyRS485-5 at 9600 bauds (N, 8, 2)
[01][03][00][01][00][01][D5][CA]
Waiting for a confirmation…
<01><20><10><48><84>
ERROR CRC received 0x4884 != CRC calculated 0x380C
ERROR occured!

А должен? :slight_smile: если он есть в списке поддерживаемого оборудования - то дождитесь ответа техподдержки. Если нет его - нужно внимательно разбираться с производителем что у него за modbus и с какими параметрами.

Если подключить напрямую к rs-485, то все ок. Соединяется, отвечает и реагирует на команды

А! это совсем другое дело! а как настроен serial у MGE? (т.е. у MGE как у преобразователя интерфейсов 2 конца. Один - Ethernet\TCP, а второй - RS485. Со стороной 1 всё нормально - вы к ней подключаетесь. А настройки второго конца могут отличаться от того что у вас на устройствах)

посмотрите вот эту тему Подключение WB-MAP3E через WB-MGE v.2

Другое устройство тоже пробовала подключать через MGE, взлетело. Проблема конкретно с этим датчиком. Другой такой же датчик тоже не получилось. Хотя все должно поддерживаться

можете показать (картинка) раздел TTL1 на MGE ?
и какой командой (полностью) удачно подключаетесь когда напрямую на rs485 цепляете?

А эта команда для удачного подключения:
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-1 -a171 -t0x03 -r128

У вас настроен режим Modbus RTU over TCP, modbus_client напрямую такое не умеет, только через socat.

Для работы по Modbus TCP настройки такие (картинка из документации):
image

Правильно. Подключаю сначала socat. Эта команда работала только после поднятия socat и в том и другом случае

По сути, тоже самое, что и у меня. Только гоняю не по телнетовскому, а по 502 порту

Смущает только одна галочка “Sync Baudrate(RF2217 Similar)” - без нее будет работать?

У вас другие настройки в Work Mode.

и последнее уточнение:
-покажите команду подключения вирт порта socat ?
-покажите полную команду modbus_client (которая не работает) при подключении через socat?

чисто для успокоения моего интереса :slight_smile:

socat[9166] I socat by Gerhard Rieger and contributors - see www.dest-unreach.org
2024/01/10 15:23:05 socat[9166] I This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)
2024/01/10 15:23:05 socat[9166] I This product includes software written by Tim Hudson (tjh@cryptsoft.com)
2024/01/10 15:23:05 socat[9166] I setting option “raw”
2024/01/10 15:23:05 socat[9166] I setting option “b9600”
2024/01/10 15:23:05 socat[9166] I setting option “parenb” to 0
2024/01/10 15:23:05 socat[9166] I setting option “cstopb” to 1
2024/01/10 15:23:05 socat[9166] I setting option “cs8”
2024/01/10 15:23:05 socat[9166] I setting option “symbolic-link” to “/dev/ttyRS485-5”
2024/01/10 15:23:05 socat[9166] I openpty({5}, {6}, {“/dev/pts/1”},) → 0
2024/01/10 15:23:05 socat[9166] N PTY is /dev/pts/1
2024/01/10 15:23:05 socat[9166] N opening connection to AF=2 10.50.5.14:502
2024/01/10 15:23:05 socat[9166] I starting connect loop
2024/01/10 15:23:05 socat[9166] I socket(2, 1, 6) → 7
2024/01/10 15:23:05 socat[9166] N successfully connected from local address AF=2 10.50.9.8:42214
2024/01/10 15:23:05 socat[9166] I resolved and opened all sock addresses
2024/01/10 15:23:05 socat[9166] N starting data transfer loop with FDs [5,5] and [7,7]

и выхлоп
modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a1 -t0x03 -r0 Opening /dev/ttyRS485-5 at 9600 bauds (N, 8, 2)
[01][03][00][00][00][01][84][0A]
Waiting for a confirmation…
<01><20><10><28>
ERROR CRC received 0x28E5 != CRC calculated 0x380C
ERROR occured!

Попробуйте в socate принудительно установить стоп бит в 2 (cstopb=2)
А то сейчас “I setting option “cstopb” to 1”

Не влияет никак. Параметры связи шины настраиваются только в шлюзе в данном случае.

socat -d -d -d -x PTY,raw,b9600,parenb=0,cstopb=2,cs8,link=/dev/ttyRS485-5 tcp:10.50.5.14:502&

modbus_client --debug -mrtu -b9600 -pnone -s2 /dev/ttyRS485-5 -a1 -t0x03 -r1
Opening /dev/ttyRS485-5 at 9600 bauds (N, 8, 2)
[01][03][00][01][00][01][D5][CA]
Waiting for a confirmation…
<01><20><10><84>
ERROR CRC received 0xA884 != CRC calculated 0x380C
ERROR occured!

Обычно такое или из-за того, что на шине два устройства с одинаковым адресом, или из-за того, что устройство опрашивает кто-то ещё.