На WB7 не корректно работает Modbus TCP

Подключаю через Modbus TCP венустановку, на WB6.7 все работало как часы, показания считывались, команды отправлялись. При переходе на WB7 - состояние считывает, но при попытке отправить команду любую - подвисает красным (при этом иногда команды доходят), выглядит как будто состояние не может обратное получить команды. Все вопросы связанные с некорректной работой ПУ можно откинуть, она с момента переустановки контроллера не изменялись настройки, да и подключиться по Modbus по тому же адресу и порту без проблем можно через Винду и отправлять и получать команды, как починить?

Параметры подключения: локальный ip адрес и порт 502

Добрый день.
Очень не помешает диагностический архив с контроллера ну и обязательно - кусок логов serial, с включенным Debug, желательно.

Подскажите как правильно сделать и при каких условиях и в какой момент?

Хорошо - показать вывод из Debug лога wb-mqtt-serial
Лучше, конечно, на период создания лога отключить опрос всех остальных устройств.

diag_output_A3S3EB4_2022-08-02-23.50.00.zip (77.7 КБ)

Видно что между запросами нет задержек и (скорее всего) от устройства читаются нулевые байты

Aug 02 23:49:56 wirenboard-A3S3EB4 wb-mqtt-serial[26740]: DEBUG: [port] Sleep 0 us
Aug 02 23:49:56 wirenboard-A3S3EB4 wb-mqtt-serial[26740]: DEBUG: [port] Write: 08 0d 00 00 00 06 01 06 00 05 00 e6
Aug 02 23:49:56 wirenboard-A3S3EB4 wb-mqtt-serial[26740]: DEBUG: [port] ReadFrame: 00 00 00 00 00 00 00
Aug 02 23:49:56 wirenboard-A3S3EB4 wb-mqtt-serial[26740]: DEBUG: [port] read noise:  00 00 00 00 00
Aug 02 23:49:56 wirenboard-A3S3EB4 wb-mqtt-serial[26740]: WARNING: [register handler] failed to write: <modbus-tcp:1:holding: 5>: Serial protocol error: malformed response: Wrong MBAP length value: 0

Скорее всего оно, устройство не успевает отвечать с той же частотой которой контроллер способен его опрашивать. Добавьте времени между запросами, должно помочь.

Время добавляли вплоть до 10000 - не помогло (подскажите какой именно параметр править?). При этом через вин по умолчанию 30-40мс и работает без проблем.

Какой параметр меняли? “Читать не чаще (мс)”?

Выложите файл /etc/wb-mqtt-serial.conf пожалуйста.

Да верно, не чаще чем.

"devices" : 
      [
        {
          "device_type" : "breezart_1000_aqua_f",
          "read_rate_limit_ms" : 1000,
          "slave_id" : "1"
        }

wb-mqtt-serial.conf (114.6 КБ)

Опрашивать не реже установленного.
И это для устройства.
Я про общую настройку порта, для проверки, “read_period_ms”: 5000

А frame_timeout_ms в шаблоне устройства определен? Ну и, для проверки все же опросите с помощью modbus_client.

"devices" : 
      [
        {
          "device_type" : "breezart_1000_aqua_f",
          "enabled" : true,
          "read_rate_limit_ms" : 1000,
          "slave_id" : "1"
        }
      ],
      "enabled" : true,
      "port" : 502,
      "port_type" : "modbus tcp",
      "read_period_ms" : 5000
    }
  ]

Не помогло, тоже самое

"device_type": "breezart_1000_aqua_f",
    "device": {
        "name": "Breezart 1000 Aqua F",
        "id": "breezart_1000Aqua_F",
        "max_read_registers": 60,
        "channels": [

В шаблоне стоит только, но оно и раньше стояло также и на Wb 6.7 работало без проблем

Какую команду?

Какой командой? Да, собственно 06 (чтение holding) тот же на который чаще всего ошибка, по адресу 262, чтение двух регистров.
Не забудьте остановить wb-mqtt-serial предварительно.

Я не настолько силен в этом, через modbus_client если можно скинуть строчку, проверю.

Но пока не проверю, тк вчера решил перезагрузить can путем удаления из network/interfaces

allow-hotplug can0
iface can0 can static
  bitrate 20000

После сохранения WB7 в ауте, я так понимаю теперь надо через debug туда залазить и возвращать строчку, что спровоцировало такое поведение?

modbus_client  --debug -mtcp 192.168.1.15 -a1 -r22 -t0x3

Здесь 192.168.1.15 - адрес устройства
1 - UnitId
22 - адрес регистра (свой/свои поставьте)

~# modbus_client  --debug -mtcp 192.168.1.15 -a1 -r2 -t0x3
0x00c0 Connecting to 0.0.0.0
[00][01][00][00][00][06][01][03][00][02][00][01]
Waiting for a confirmation...
<00><01><00><00><00><03><01><83><02>
ERROR Illegal data address
ERROR occured!

Адрес верно вписал? из шаблона взял.

{
    "device_type": "breezart_1000_aqua_f",
    "device": {
        "name": "Breezart 1000 Aqua F",
        "id": "breezart_1000Aqua_F",
        "max_read_registers": 60,
        "channels": [
            {
                "name": "Set fan performance",
        "id": "f_task",
                "type": "value",
                "reg_type": "holding",
                "address": "0",
                "format": "u16",
                "min": 15,
                "max": 100,
                "scale":0.01      
            },
            {
                "name": "Set temperature",
		"id": "t_task",
                "type": "temperature",
                "reg_type": "holding",
                "address": "1",
                "format": "s16",
                "scale":0.1
            },
            {
                "name": "Set humidity",
        "id": "h_task",
                "type": "rel_humidity",
                "reg_type": "holding",
                "address": "2",
                "format": "s16",
                "max": 100,
                "scale":0.1

Да. В шаблоне вижу адреса 0, 1, 2
И такой ответ на все попытки?

на все попытки одно и то же

0x00c0 Connecting to 0.0.0.0
[00][01][00][00][00][06][01][03][00][02][00][01]
Waiting for a confirmation...
<00><01><00><00><00><03><01><83><02>
ERROR Illegal data address
ERROR occured!