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

Читаю описание для различных модулей RS-485 и вижу, что где-то указана скорость только 9600, а где-то вплоть до 115200. Вопрос связан вот с чем: на скорости 9600 по отзывам, входы для кнопок в режиме поллинга обрабатывают нажатие с небольшой, но всё-таки заметной задержкой. Будет ли влиять на это воприятие увеличение скорости на интерфейсе и если да, то как же всё-таки устройства из ныне выпускаемых позволяют это делать?

Спасибо!

Добрый день!
Да, увеличение скорости уменьшит задержку при опросе. Ещё поможет уменьшение количества устройств на линии.
Изменение скорости с дефолтной 9600 доступно в тех устройствах, у которых это указано в документации в вики (в частности, на всех модулях реле).

1 лайк

понял, спасибо. Получается, что рекоммендация - разнести устройства реле и модуль счётных входов WB-MCM16, верно?
Кстати, для реле также в документации указаны скорости только 9600: WB-MR6C, WB-MAO4 (хотя это диммер, но идея та же), WB-MRGB, WB-MRGB-D (тоже диммер), WB-MRM2-mini, WB-MR3xV_and_WB-MR6xV. И лишь WB-MD2 в описании содержит весь перечень скоростей…

В вики есть вот такие странички: управление модулями реле Wirenboard по протоколу Modbus и управление датчиками Wirenboard по протоколу Modbus. Там видно, что практически все новые устройства от Contactless позволяют настраивать скорость (записью в регистр 110).

Да, спасибо, согласен, там об этом упонинается, но довольно поверхностно: “В новых моделях реле поддерживаются дополнительные регистры…”. Я то просто не знаю какие именно модули считаются “новыми”.

Добрый день!
Спасибо за замечание. Действительно, в документации не везде верно, постарался исправить. Если ещё остались вопросы/замечания - пишите, будем рады услышать.

Здравствуйте!
У меня есть 2 реле WB-MR14. Не устраивает скорость включения при управлении по MQTT путем программирования Rules.js в веб-интерфейсе. Причем при щелкании из MQTT клиента скорость мгновенная, а вот правила из Rules.js тормозят. Вы пишете, что можно увеличить скорость реакции изменением скорости MODBUS. К сожалению, в моих реле стоит прошивка 1.5.1, а в документации сказано, что изменение скорости возможно начиная с 1.6.1.
И правда, при попытке прочитать 110 регистр выдает ошибку.
Собственно вопросы:

  1. Можно ли как-то перепрошить реле в домашних условиях? Или может хотя бы вам их привезти на перепрошивку?
  2. Если это невозможно (напр аппаратные ограничения), что еще можно сделать для увеличения быстродействия? Например как-то влезть в драйвер wb-mqtt-serial и управлять прямо по MODBUS, в обход MQTT?

И 3. Если перепрошивка возможна, сколько она займет по времени? Если я привезу в Долгопрудный мои реле, смогу ли я забрать их в тот же день?

Добрый день!
Устройства перепрошить дома нельзя, перепрошить у нас в офисе можно, если вы заранее договоритесь с менеджерами.
Но сейчас у вас дело не в скорости опроса. Подскажите, пожалуйста:

  • как вы “щелкаете из MQTT клиента”, когда не видите задержки,
  • и как управляете из js скрипта, когда задержка видна (проще всего опубликовать весь скрипт).

Просто переключаю канал не связанным через Rules.js выключателем, а из программы.
Пробовал и из web-интерфейса (вкладка Devices) и с Андроид-клиента “MQTT Dash”. По ощущениям если задержка и есть, то очень небольшая.
А вот при щелканьи связанным выключателем задержка по ощущениям может доходить чуть не до секунды.

Скрипт самый стандартный из примера:

var R13 = "wb-mr14_13";
var R15 = "wb-mr14_15";
var s_bathroom_2 = "Input 4";
var l_hallway    = "K3"; 

// place your rules here or add more .js files in this directory
defineRule("Koridor_svet", {
  whenChanged: R13+"/"+s_bathroom_2,
  then: function (newValue, devName, cellName) { //выполняй следующие действия
    if ( newValue > 0) {
      dev[R15][l_hallway] = 1; 
    } else {
      dev[R15][l_hallway] = 0; 
    }
  }
});
log("add your rules to /etc/wb-rules/");

Возможно, разница во времени реакции чисто психологическая, проверю вечером еще раз.

Еще раз проверил. Нет, не обманулся. При управлении из MQTT Dash задержка присутствует, но невелика, и не раздражает.
При включении связанным Rules.js выключателем задержка явно более чем в 2 раза (что должно быть в норме, как я понимаю) дольше.
Что делать?

Подозреваю, что дело тут в том, что правило у вас срабатывает по нажатию кнопки на модуле, подключенном по 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 секунду. Как сделать чтобы опрос проходил только по нужным регистрам??? мне например не нужно знать что вольтаж питания на каждом модуле. и статус неиспользуемых входов.