День добрый,
проблема давняя, очередной раз решил попробовать решить но пока не выходит
Дано:
wb7.4, 3 устройства на шине через MOD2. Одно из них - пву turkov zenit.
У данного устройства есть несколько input и несколько holding регистров.
max_read_registers: 1
guard_interval_us: 5000 (увеличение до 50000 не влияет)
response_timeout_ms: 500 (default) (увеличение хоть до 1000 хоть до 5000 не влияет)
Лог выглядит так
09-02-2025 16:42:32.418 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:42:06.667 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:42:02.796 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:58.956 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:55.115 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:51.306 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:46.938 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:43.098 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:39.272 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:35.449 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:31.639 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
09-02-2025 16:41:27.800 WARNING: [modbus] failed to read 1 input(s) @ 256 of device </dev/ttyMOD2 19200 8 N 1> modbus:31: Serial protocol error: request timed out
1ый по порядку input регистр раз в несколько секунд читается с ошибкой Serial protocol error: request timed out. Иногда читается нормально (он всегда отмечен красным, но значения иногда меняются).
- Напр есть регистры 0x100, 0x101, 0x102 etc. Если все опрашиваем, то ошибка будет регистре 0x100 (как в логе сейчас). Если 0x100 не опрашивать - ошибка будет с регистром 0x101 etc.
- Если выставить max_read_registers: 2, то ошибка будет у 2 первых регистров по порядку, у остальных - все ок.
- Если период опроса у всех “по умолчанию”, а у 0x100 фиксированный - то будет ошибка у 0x100 (первый, когда опрос начинается с него) и у 0х101 (он станет первым, когда чтение “по умолчанию”)
- У holding регистров такой ошибки нет.
- Через modbus_poll чтение идет без проблем, хоть 1 хоть 5 подряд
root@Wb-74-AMENMA3Q:~# service wb-mqtt-serial stop
root@Wb-74-AMENMA3Q:~# modbus_client --debug -mrtu -pnone -b19200 -s1 /dev/ttyMOD2 -c5 -a31 -t4 -r256
Opening /dev/ttyMOD2 at 19200 bauds (N, 8, 1)
[1F][04][01][00][00][05][32][4B]
Waiting for a confirmation...
<1F><04><0A><00><D4><00><30><00><C1><00><C8><00><C8><DB><DC>
SUCCESS: read 5 of elements:
Data: 0x00d4 0x0030 0x00c1 0x00c8 0x00c8
root@Wb-74-AMENMA3Q:~# modbus_client --debug -mrtu -pnone -b19200 -s1 /dev/ttyMOD2 -c1 -a31 -t4 -r256
Opening /dev/ttyMOD2 at 19200 bauds (N, 8, 1)
[1F][04][01][00][00][01][33][88]
Waiting for a confirmation...
<1F><04><02><00><D4><11><6D>
SUCCESS: read 1 of elements:
Data: 0x00d4
- Сразу же через modbus_poll_rpc - уже с ошибкой
root@Wb-74-AMENMA3Q:~# service wb-mqtt-serial start
root@Wb-74-AMENMA3Q:~# modbus_client_rpc --debug -mrtu -pnone -b19200 -s1 /dev/ttyMOD2 -c1 -a31 -t4 -r256
2025-02-09 17:01:17,066 [DEBUG] [1f][04][01][00][00][01][33][88]
2025-02-09 17:01:17,075 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2025-02-09 17:01:17,080 [DEBUG] RPC Client -> {'path': '/dev/ttyMOD2', 'baud_rate': 19200, 'parity': 'N', 'data_bits': 8, 'stop _bits': 1, 'response_size': 7, 'format': 'HEX', 'msg': '1f04010000013388', 'total_timeout': 1000} (1000 timeout ms)
2025-02-09 17:01:18,093 [ERROR] Mqtt-rpc client timeout error, timeout 1000 ms
root@Wb-74-AMENMA3Q:~# modbus_client_rpc --debug -mrtu -pnone -b19200 -s1 /dev/ttyMOD2 -c5 -a31 -t4 -r256
2025-02-09 17:01:30,113 [DEBUG] [1f][04][01][00][00][05][32][4b]
2025-02-09 17:01:30,117 [DEBUG] Connecting to broker unix:///var/run/mosquitto/mosquitto.sock
2025-02-09 17:01:30,122 [DEBUG] RPC Client -> {'path': '/dev/ttyMOD2', 'baud_rate': 19200, 'parity': 'N', 'data_bits': 8, 'stop _bits': 1, 'response_size': 15, 'format': 'HEX', 'msg': '1f0401000005324b', 'total_timeout': 1000} (1000 timeout ms)
2025-02-09 17:01:31,017 [DEBUG] Options: {'debug': True, 'mode': 'rtu', 'slave_addr': 31, 'read_count': 5, 'start_addr': 256, ' func_type': 4, 'timeout': 1000, 'address_decrement': False, 'baudrate': 19200, 'data_bits': 8, 'stop_bits': 1, 'parity_port': ' N', 'mqtt_broker': 'unix:///var/run/mosquitto/mosquitto.sock', 'serialport_host': '/dev/ttyMOD2', 'write_data': []}
ERROR occurred
2025-02-09 17:01:32,020 [DEBUG] Error message: Server error
2025-02-09 17:01:32,021 [DEBUG] Error code: -32000
2025-02-09 17:01:32,022 [DEBUG] Error data: Port IO error: Serial protocol error: request timed out
Есть идеи в какую сторону копать? “Методом тыка” увеличение различных задержек в настройках, лишь ухудшает ситуацию (либо вообще не читается устройство, либо ошибки в разных регистрах подряд)