Ошибка при чтении первого input регистра пву TURKOV

День добрый,
проблема давняя, очередной раз решил попробовать решить но пока не выходит
Дано:
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. Иногда читается нормально (он всегда отмечен красным, но значения иногда меняются).

  1. Напр есть регистры 0x100, 0x101, 0x102 etc. Если все опрашиваем, то ошибка будет регистре 0x100 (как в логе сейчас). Если 0x100 не опрашивать - ошибка будет с регистром 0x101 etc.
  2. Если выставить max_read_registers: 2, то ошибка будет у 2 первых регистров по порядку, у остальных - все ок.
  3. Если период опроса у всех “по умолчанию”, а у 0x100 фиксированный - то будет ошибка у 0x100 (первый, когда опрос начинается с него) и у 0х101 (он станет первым, когда чтение “по умолчанию”)
  4. У holding регистров такой ошибки нет.
  5. Через 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

  1. Сразу же через 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

Есть идеи в какую сторону копать? “Методом тыка” увеличение различных задержек в настройках, лишь ухудшает ситуацию (либо вообще не читается устройство, либо ошибки в разных регистрах подряд)

Здравствуйте. Благодарю за ожидание.

Чтобы опрашивать регистры с помощью modbus_client всегда следует останавливать wb-mqtt-serial.

Остановите и выполните 6й пункт снова.

Прошу поделиться результатом. А также, прошу прислать документацию на устройство, согласно которой вы работает с Modbus регистрами.

Андрей, день добрый. Вы, к сожалению, невнимательно прочитали. В п5 - опрос через modbus_client. И там есть остановка сервиса в тексте. В п6 - сразу же после этого опрос через modbus_client_rpc, и да, перед этим сервис запускается, это тоже указано.
В документации нет ничего полезного, просто список регистров. Приложу шаблон устройства:
config-turkov-hvac.json (20,4 КБ)

и кусок описания устройства из wb-mqtt-serial.conf

          "device_type" : "turkov_zenit",
          "guard_interval_us" : 5000,
          "max_read_registers" : 1,
          "response_timeout_ms" : 500,
          "slave_id" : "31"

Up

Здравствуйте.

Прошу прощения за задержку - тема потерялась. Вопрос актуален еще?