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

Подозреваю, что дело тут в том, что правило у вас срабатывает по нажатию кнопки на модуле, подключенном по Modbus. Соответственно задержка вызвана скоростью опроса каналов по Modbus, а не устройствами и не движком правил. Можете попробовать принудительно задать низкий poll_interval для регистров с кнопками в настройках wb-mqtt-serial

А что значит “Для регистров с кнопками?”
В файле конфигурации вижу только для порта и для каждого устройства на порту.
Поставил в 1. Особых изменений не заметил. Может, чуть побыстрее стало… Но не уверен.

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

whenChanged: "wb-mr6c_20/Input 1 counter", //модуль DO.1
      then: function() {
      dev["wb-mr6c_20"]["K1"] = !dev["wb-mr6c_20"]["K1"];//группа о1.1
      dev["wb-mr6c_20"]["K2"] = !dev["wb-mr6c_20"]["K2"];//группа о1.2
      }
  });

По документации добавил в конфиг модуля приоритет опроса счетчика:

{
  "name": "input 1 counter",
  "type": "value",
  "reg_type": "input",
  "address": "32",
  "format": "s16",
  "scale": 1,
  "poll_interval": 1
}

Скорость опроса остальных устройств 115200 poll interval - 20 мс
По ощущениям ничего не изменилось - при нажатии на input 1 скорость реакции также примерно 1000 мс.
Из веб-интерфейса срабатывает примерно в 2 раза быстрее.
Также заметил что счетчик input 1 при разовом замыкании с GND практически всегда добавляет не одну единицу а 2-4.

Уважаемый @alexteen, если вы зададите один и тот же вопрос в двух разных темах, то быстрее вам не помогут. Не стоит так делать.

Добрый день. Огромное просьба помочь разобраться((((

Правило выше работает. НО!!!
При подключенном к контроллере единственному модулю реле при кратковременном замыкании необходимого контакта реле включаются почти без задержек.

Сейчас у меня подключено 8 различных модулей. Опрос настроен на скорость 19200, интервал 10 мс. и по индикации Status приборы опрашиваются поочередно, и на вид это явно не 10 мс.
Соответственно при кратковременном замыкании нужного контактк правило срабатывает только если в этот момент происходил опрос данного модуля, либо удержание замкнутого контакта нужно производить порядка 500 мс.

Я правильно понимаю что единсвенный вариант увеличения скорости работы это обратное включение управления “кнопками без фиксации” и запараллеливание кнопки выключателя на несколько входов?

На скорости 19200 у вас никак не получится 10мс.

Если речь про наши модули, то используйте регистры-счётчики нажатий. Т.е. правило должно быть не на “Input стал равен 1”, а на “Input counter поменялся”.

Спасибо. Скорость везде поднял до 115200. добавил “Counter”.
Помогло, но скорости не добавило… Реле включаются с задержкой до 1-2 секунды и не одновременно… При том что в rules только 2 коротких правила типа:

  when: function() {
    return dev["wb-mr6c_20/Input 1 counter"]}, //модуль DO.1
      then: function() {
      dev["wb-mr6c_20"]["K1"] = !dev["wb-mr6c_20"]["K1"];//группа о1.1
      dev["wb-mr6c_20"]["K2"] = !dev["wb-mr6c_20"]["K2"];//группа о1.2
      }
  });

Может есть возможность как-то исключить из опроса ненужные регистры типа питания, неиспользуемых входов/выходов и пр.и оставить опрос только опросы регистров, задействованных в правилах?

Проверьте пожалуйста лог :

tail -f /var/log/messages  

нет ли там ошибок от драйвера serial ? Возможно у вас в конфиге есть, например, отсутствующее физически устройство и ожидание ответа от него тормозит опрос.

В правиле у вас кстати написано странное. Надо писать
whenChanged: “wb-mr6c_20/Input 1 counter”,

Исправил правило:

whenChanged: "wb-mr6c_20/Input 1 counter", //модуль DO.1
      then: function() {
      dev["wb-mr6c_20"]["K1"] = !dev["wb-mr6c_20"]["K1"];//группа о1.1
      dev["wb-mr6c_20"]["K2"] = !dev["wb-mr6c_20"]["K2"];//группа о1.2
      }
  });

Ошибок в логах нет.
Задержка так и присутствует порядка одной секунды.
Я так понимаю по 10 мс опрашивается каждый регистр устройства. Отсюда и такие задержки. потому что даже визуально по индикации видно что круг опроса по всем устройства проходит как раз примерно за 1 секунду. Как сделать чтобы опрос проходил только по нужным регистрам??? мне например не нужно знать что вольтаж питания на каждом модуле. и статус неиспользуемых входов.

Полное содержимое /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:Настройка_через_веб-интерфейс

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