Скорость rs-485 для различных устройств WB

Полное содержимое /etc/wb-mqtt-serial.conf пожалуйста выложите сюда.

Тогда пожалуйста добавляйте девайсы не используя device_type, а самостоятельно определяя полный список регистров для каждого устройства в /etc/wb-mqtt-serial.conf . В документации есть подробности.
Нужные регистры выберите из полного списка в шаблоне устройства в /usr/share/wb-mqtt-serial/templates

{
  "debug": false,
  "ports": [
    {
      "path": "/dev/ttyAPP1",
      "devices": [
        {
          "slave_id": "20",
          "device_type": "WB-MR6C",
          "enabled": true,
          "name": "D01",
          "channels": [
            {
              "name": "input 1 counter",
              "type": "value",
              "reg_type": "input",
              "address": "32",
              "format": "s16",
              "poll_interval": 1
            },
            {
              "name": "input 1",
              "type": "value",
              "reg_type": "discrete",
              "address": "0",
              "format": "s16",
              "poll_interval": 1
            }
          ]
        },
        {
          "slave_id": "21",
          "device_type": "WB-MR6C",
          "name": "D02",
          "enabled": true
        },
        {
          "slave_id": "22",
          "device_type": "WB-MDM2",
          "name": "DIM1",
          "enabled": true
        },
        {
          "slave_id": "23",
          "device_type": "WB-MDM2",
          "name": "DIM2",
          "enabled": false
        },
        {
          "slave_id": "26",
          "device_type": "WB-MR3",
          "enabled": true,
          "name": "DR.1"
        },
        {
          "slave_id": "27",
          "device_type": "WB-MR3",
          "enabled": true,
          "name": "DR.2"
        },
        {
          "slave_id": "25",
          "device_type": "WB-MR6C",
          "name": "DL.1",
          "enabled": true
        },
        {
          "slave_id": "24",
          "device_type": "WB-MR6C",
          "name": "DL.2",
          "enabled": true
        }
      ],
      "port_type": "serial",
      "baud_rate": 115200,
      "parity": "N",
      "data_bits": 8,
      "stop_bits": 2,
      "poll_interval": 1,
      "enabled": true
    },
    {
      "path": "/dev/ttyAPP4",
      "devices": [
        {
          "slave_id": "2",
          "channels": [
            {
              "name": "Температура",
              "type": "temperature",
              "reg_type": "holding",
              "address": "1",
              "format": "s16",
              "scale": 0.1,
              "offset": 0
            },
            {
              "name": "Power",
              "type": "switch",
              "reg_type": "holding",
              "address": "0",
              "format": "s16",
              "scale": 1,
              "offset": 0,
              "on_value": "1"
            },
            {
              "name": "Уставка",
              "type": "range",
              "reg_type": "holding",
              "address": "4",
              "format": "s16",
              "scale": 0.1,
              "max": 30,
              "min": 16
            }
          ],
          "setup": [],
          "poll_interval": 20,
          "name": "TS",
          "id": "TS_1",
          "enabled": false
        }
      ],
      "baud_rate": 9600,
      "parity": "N",
      "data_bits": 8,
      "stop_bits": 1,
      "poll_interval": 10,
      "enabled": false
    },
    {
      "path": "/dev/ttyAPP2",
      "devices": [],
      "baud_rate": 9600,
      "parity": "N",
      "data_bits": 8,
      "stop_bits": 1,
      "poll_interval": 10,
      "enabled": false
    },
    {
      "path": "/dev/ttyAPP3",
      "devices": [],
      "baud_rate": 9600,
      "parity": "N",
      "data_bits": 8,
      "stop_bits": 2,
      "poll_interval": 10,
      "enabled": false
    }
  ]
}

Попробуйте у порта поставить “poll_interval” большой, например 10000, а у входов уже поставить маленький. Сейчас poll_interval у вас не работает, потому что он получается одинаковый абсолютно у всех регистров.

Поставил 10000 мс.
По индикации видно что модуль с приоритетным каналом опрашивается 10000 мс непрерывно, после возникает пауза около 1000 мс, и далее по кругу.
Но почему-то счетчик сичтывается также 10000 мс - и соответсвтенно реле включаются также с задержкой (уже 10000 мс)
В веб-интерфейсе также по замыкании input данные обновляются с указнной задержкой.
Такое подозрение, что либо неверно выбран канал, либо драйвер неправильно отрабатывает конфиг.

upd: Еще заметил, что указанные в приоритете регистры отображаются повторными топиками вSettings абсолютно идентичными именами и значениями с основным топиком регистра.

Регистр имеет значение, у вас с неправильным регистром эти каналы в конфиге.

Огромное спасибо! Помогло!

Ещё, к сожалению, наш драйвер так устроен, что если у вас есть много регистров с одинаковым poll_interval (в вашем случае все, кроме входов), то они будут группироваться и опрашиваться вместе. Т.е. если остальные регистры у вас опрашиваются раз в минуту, то раз в минуту вся шина будет на секунду или около того занята опросом этих регистров.

да уже заметил) но это уже не так критично.

А не подскажете ссылку на ту самую документацию, по которой добавляли

?

https://contactless.ru/wiki/index.php/RS-485:Настройка_через_веб-интерфейс

В конце страницы

Спасибо. Так получилось. Собственно, этот вопрос я и задавал полгода назад. Жаль, мне не ответили на него тогда…
Скорость реакции заметно возросла, но все равно не устраивает. Видимо, придется все-таки везти перепрошивать реле на 115200…

А ещё такой вопрос: Наверное, опрос будет быстрее, если 2 реле WB-MR14 повесить на разные порты RS-485? Судя по документации, второй порт мультиплексирован c CAN-шиной. Нужны какие-то действия по переводу его в режим RS-485 (кроме включения в wb-mqtt-serial.conf, разумеется), или все будет распознано автоматически?

Добрый день!
Второй порт по умолчанию как раз RS-485, ничего дополнительного, кроме настройеи параметров, делать не придется.

Я хочу увеличить скорость работы связки DI-DR-16 - rules- MR6CLV. Понимаю, что дело может быть и в скриптах, в скорости их обработки, потому хочу попробовать сделать все, что можно настройками и принять результат как есть.
У меня на модулях входы, а на одном из 485 3 реле. Меня интересует одно из них.
Пробовал поднять скорость до 115200 на порт и все реле настроить на эту скорость - не помогло. Уменьшил поллинг порта - не помогло.
Что остается? В шаблоне отдельно на интересующие меня реле выставить поллинг на 1?

Как я понял, скорость работы входов-модулей не регулируется? Читал, что модули на отдельных прерываниях и, вроде как работают максимально быстро.

Консоль москито показывает изменения быстро, а само реле клацает с небольшой задержкой. Но, если работать с прямыми входами на реле, то отрабатывает идеально, хотелось бы приблизиться к такой скорости. Лагающие выключатели - штука раздражающая…

Добрый день!

Время WBIO-DI-DR-16 -> wb-rules должно быть примерно равным нулю. То, что сообщения MQTT появляются мгновенно, это подтверждает.
Вся задержка остаётся на части wb-rules -> WB-MR6. Убедитесь в этом: нажимайте кнопку в веб-интерфейсе и следите, сколько времени проходит до звука переключения реле.
Как понять теоретический максимум этой скорости: остановите wb-mqtt-serial и отправляйте команду на переключение реле через modbus_client. Если это время будет для вас достаточно маленьким (а должно быть именно так), нужно будет разбираться, какие именно настройки wb-mqtt-serial его ухудшают.

Здравствуйте!
А их там много? Я думал поллинг и скорость и все. Я и хотел просто покрутить и понять - есть результат или нет, глубоко лезть не стану, страшно вообще все заломать)
Ну и, если честно, я не знаю, как отправить команду на модбас клиент) Может на самом wb есть такой клиент и консольной командой это можно сделать?

https://www.google.com/search?client=ubuntu&channel=fs&q=modbus_client+wiren+board&ie=utf-8&oe=utf-8

я и не догадался бы таким простым способом искать. Не смог бы сформулировать запрос. Спасибо большое!

Я сделал, как Вы посоветовали. С морды небольшая задержка есть, но меня бы устроило, если бы так работало через правила.
Через клиент - молниеносно - идеально!
Остаются либо мои правила, либо настройки serial.
Я првильно понял, что настройки serial, это помимо скорости и поллинга в морде, добавить в шаблон реле
“poll_interval”: 1 у интересующего меня канала.
Все? на этом настройки будут исчерпаны?

Самое полное описание настроек драйвера - внизу страницы https://github.com/contactless/wb-mqtt-serial
Как проверить, что правила работают достаточно быстро: вместо инструкции, которая подразумевает передачу/приём команды, поставьте инструкцию log(), и в веб-интерфейсе включите режим отладки (гаечный ключ) - тогда увидите, как быстро доходят до нужного места ваши правила.
Как бы оптимизировал скорость я:

  1. Поднял скорость устройств до 115200.
  2. Удалил ненужные регистры из шаблонов.
  3. Больше бы ничего не трогал, потому что wb-mqtt-serial сам пытается опрашивать максимально быстро. Ещё точно нужно посмотреть, все ли ответы приходят корректно:
    tail -f /var/log/messages
    и смотреть, есть ли какие-то ошибки при опросе.