Скорость реакции

Всем привет!
Столкнулся с задачей управления светом с двух выключателей.

Выключатели подключил к WBIO-DI-DR-14, который в свою очередь подключен через WB-MIO-E (не через ethernet).

Свет подключил к WB-MRPS6.

Итого - после нажатия выключателя реле реагирует через примерно 5 секунд.

Это я что-то некорректно настроил? Или ситуация нормальная?

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

  1. Подключить по Ethernet.
  2. Увеличить скорость RS-485, изменить шаблон, чтобы уменьшить число опрашиваемых параметров - подробнее ищите в аналогичных темах.

При всём уважении, но это крайне спорное утверждение. Учитывая что многие промышленные протоколы работают по физическому интерфейсу RS-485(Modbus тот-же самый, да и Profibus DP на 485).
А указанная автором задержка в 5 секунд намекает нам о том, что всё-же нелады или в скорости(которая по-дефолту может стоять минимальной, а не разумной) или в конкретной реализации. Потому что даже через минимальные 62,5 килобита в секунду за 5 секунд можно перегнать объёмы информации, значительно превышающие потребности домашней автоматизации.

1 Like

Похожу схему я применил в двух местах, скорость реакции примерно одинаковая.
Первый вариант описал вначале, второй вариант:
WB-MIO-E + WBIO-DI-DR-14 + WBIO-DO-R10A-8

Насколько я понял, задержка связана именно со скоростью реакции самих WBIO-DI-DR-14, т.к. при активации реле в web-интерфейсе реакция мгновенная.

Добрый день!

А что за

?

Добрый день!

– здесь не так.
Сигнал от WBIO-DI-DR-14 до “головного модуля” (Wiren Board 6 или WB-MIO-E) доходит мгновенно, в этой части задержка ноль.
Почему разные задержки при управлении реле и считыванием статуса:

  • при управлении реле из веб-интерфейса идёт мгновенная команда “включи пятое реле на модуле” - это одна посылка, которая отправляется, ничего не дожидаясь.
  • про обновлении статуса входов по RS-485 происходит следующее: “запрос статуса входа 1”, “запрос статуса входа 2”, …, запрос статуса служебных регистров и так далее по кругу. Если вы изменили состояние входа в неудачный момент (сразу после того, как он был опрошен), то вам надо ждать окончания всего цикла опроса, пока он не появится в веб-интерфейсе.

По эмпирической закономерности произведение скорости в битах в секунду умноженное на длину линии в RS-485 не должно превышать 10^8. Максимальная длина линии связи чисто по физике - 1200 метров. Со всякими округлениями и избыточностями это превращается в 62,5 кб/с, что является теоретической максимальной скоростью интерфейса RS-485 при длине линии связи в 1200 метров.

Понял. Меня смутило слово “минимальная”.
Если применительно к нашим устройствам, то скорость по умолчания - 9600 бит/с, максимальная выставляемая - 115200 бит/с.
Увеличение скорости, разумеется, поможет, но есть и другие важные вещи - про это всё я и написал.

попробовал увеличить скорость - все устройства сразу становятся недоступны. Это нормально? :slight_smile:

Нет это не нормально. Какой кабель используете для RS-485? Сколько устройств на шине?

Разумеется есть. Но если бы Ваше утверждение о том, что “RS-485 это медленная шина” в контексте ответа на вопрос “норма ли, что цикл опроса периферии целых 5 секунд” было правдивым, то большая часть промышленных объектов бы не работало. Почему? Потому что исторически так сложилось, что системы распределённого ввода/вывода работают, в основном, поверх Modbus/Profibus. Причём объёмы ввода/вывода этих систем несравнимо больше чем то, что требуется для домашней автоматизации. И задержек опроса периферии по 5 секунд там нет, а если бы были то большая часть автоматики просто не смогла бы работать - слишком высокая инерционность.
Поэтому, что-то мне подсказывает, что здесь, скорее, особенности реализации в вайронборде, а не “шина виновата”. Потому что 9600 бит/с, это 1200 байт/с. Примем что оверхед у нас 100%, то есть на полезные данные остаётся 600 байт. 600 байт это 150 чисел с плавающей запятой в секунду; если мы говорим о передаче дискретных сигналов то это 4800 сигналов в секунду. При этом, повторюсь, на все издержки объём трафика был заложен такой-же, как и на полезные данные. Даже если заложить оверхед в 80% от полной скорости интерфейса (то есть на полезные данные будет использовано всего 20% пропускной способности) то это выйдет 240 байт или 60 чисел с плавающей запятой, то есть 60 аналоговых значений полезной нагрузки.

Насколько я понял, недостаточно поменять скорость на WB, кроме этого нужно поменять скорость на самих устройствах. Пока не разобрался, как это сделать.
И попутно вопрос - могут ли устройства на одной шине работать на разных скоростях?

По идее скорости обмена подтягиваются или автоматически, или устанавливаются DIP-переключателями. Но, похоже, не в случае вайрона:
https://wirenboard.com/wiki/index.php/UART_Communication_Settings

нет.

В вашем случае я бы всё же ответил на мой вопрос о том, какой кабель вы используете. Есть ли терминальные резисторы?
Потому что чем выше скорость - тем выше влияние несогласованного кабеля и отсутствия терминаторов на концах линий.

Кабель - КСПЭВГ 4х0,35 и КСПЭВГ 6х0,35
Терминальные резисторы… нет.

Который не предназначен для интерфейса RS-485, как минимум из-за того что рассчитан на значительно более низкие рабочие частоты: https://paritet.su/catalog/gibkie_kspvg_kspevg/kspvg_4kh0_35_mm_kv/
А вот нормальный кабель для RS-485: https://paritet.su/catalog/kis_v/

Которые требуются для согласования линии.
Вот, относительно краткая статья на тему того, почему важно взять нормальный кабель и поставить терминальные резисторы: https://www.bookasutp.ru/Chapter2_3.aspx

Всем добрый день!
Уважаемый @PavelSolovev, не путайте, пожалуйста, людей. Ваши теоретические знания хороши и верны, но я не понимаю, о чём вы со мной спорите:

Верно ли моё утверждение, что RS-485 - медленная шина (относительно, например, Ethernet, которым @browser также мог воспользоваться) - конечно да, 9600-115200 бит/с против 100 Мбит/с.
Верно ли ваше утверждение, что за 1 секунду по RS-485 можно передать 9600 бит, а не 1 бит за 5 секунд - тоже да. Разумеется, эту конфигурацию можно настроить на лучшее время, и я указал, куда смотреть, чтобы это сделать. Wiren Board при правильной настройке работает в больших инсталляциях, и даёт маленькое время опроса для маленьких инсталляций, но для этого нужно выполнить ряд действий, а не ждать, что это случится само.

Про оверхед запроса одного бита в Modbus можете почитать здесь: Протокол Modbus — Wiren Board - 8 “байт” (каждый по 10-11 бит, потом что плюс стартовый и стоповые биты). И на это следует ответ 6 “байт”. И да, в худшем случае за такую процедуру будет передан 1 бит (1 coil). То есть один значащий бит на на 140 бит.

Ещё раз повторюсь, что конкретно эту конфигурацию можно настроить на гораздо меньшую задержку. Если у уважаемого @browser на этом пути возникнут проблемы, я или мои коллеги поможем.

Кабель КСПЭВГ мы официально рекомендуем, потому что он существенно дешевле и проще в приобретении, чем КИС, при этом работает не хуже, что проверено сотнями инсталляций. Мы подключали устройства через километр КСПЭВГ, и проблем не возникало.

@PavelSolovev совершенно верно подсказал: нужно на каждом устройстве задать новую скорость по инструкции https://wirenboard.com/wiki/index.php/UART_Communication_Settings, и только затем менять скорость порта в самом контроллере.
После этого, с большой вероятностью, все устройства снова станут доступны.

Практические. Я немножк асушник, именно поэтому я и триггернулся от “медленной шины RS-485”

Вообще не спорю, а говорю что несколько опрометчиво называть RS-485 “медленной шиной” тогда, когда это практически промышленный стандарт для станций удалённого ввода/вывода. И утверждаю что скорее всего присутствуют некоторые эээ “особенности реализации” в вайроне.

Вообще до 10 Мбит/с в RS-485 :slight_smile:
Но что 10, что 100 это оверкилл для передачи пары десятков сигналов. И пары сотен тоже. И даже тысячи.

Таки не поверите, но это и относится к “особенностям” реализации. Ведь и правда можно опрашивать состояние 16 канального дискретного модуля индивидуально по каналам, а не одним словом.

То есть в случае, если система не заработает на нормальных скоростях, вы вернёте пользователю деньги за кабель? :slight_smile:
Или это как обычная рекомендация на форумах с контекстом “ну ответственности мы в любом случае не несём, так что смотрите…”.

Ну вы же специалист - уточните скорости тогда уж. Ведь Вы не хуже меня знаете что проблемы в сетях RS-485 начинаются с увеличением частоты. А на минимальных скоростях можно и по распрямлённой вешалке два устройства подключить)
Статья почему важно использовать правильный кабель выше, ну на всякий случай. Там даже явно написано что “в зависимости от скорости понадобится специальный кабель или практически любая пара проводов”. И даже написано что на длинных (>1000м) линиях не всегда терминальные резисторы надо ставить :slight_smile:

Добрый день!

Предлагаю эту часть закрыть.

Мне кажется, вы используете эту фразу в негативном ключе - что у реализации работы Wiren Board с RS-485 Modbus есть какие-то проблемы. Так ли это?

Это не механизм работы Wiren Board, если что. Это я к тому, что вы для некоторых применений (например, нужно с каждого устройства получить только состояние 1 входа) занизили в своих расчётах оверхед к полезной информации в несколько раз.

Конструктивной части в этих двух предложениях не нашёл. Увидел только желание уязвить, но зачем - не понял.

9600 точно. Проверяли ли больше - не помню, но уточню у коллег.

Статья вроде неплохая, спасибо.

Цикл опроса в 5 секунд для <100 сигналов при расстояниях явно меньше 100 метров свидетельствует о наличии проблем в реализации.

Потому что обычный алгоритм работы примерно такой:

  1. Начало цикла опроса.
  2. Перенос данных от периферии по-блочно в некий “темп”.
  3. Весь код работает с “темпом”.
  4. Перенос битов управления из “темпа” в периферию.
  5. Новый цикл.
    Исключения в этом делают лишь для всяких сигналов защит.
    То есть пример, приведённый Вами, скорее всего был лишь для того, чтобы попытаться уязвить и доказать что таки шина то медленная и оверхед огого может быть. Может, но так обычно никто не делает.

Конструктивная часть проста: “официально рекомендовать” то, что с наибольшей вероятностью не будет нормально работать, с формулировками вида “работает не хуже” (процитирую на всякий случай):

Очень ээээ “странно”. Я бы так советовать в любом случае не стал.
Особенно при том, что по факту скорость была по низу стандарта:

что никак не соответствует формулировке “проблем не возникало”. Ведь невозможность устройства работать на нормальной скорости это проблема.
Более корректно в данной ситуации было бы помогать с выбором кабеля примерно так: “Если вам неважна скорость передачи данных, то можете использовать любой кабель, хоть ВВГнг, хоть КСПВГ. В случае, если вы хотите быть уверенными в том, что сможете использовать RS-485 на максимально доступных скоростях и с минимальными проблемами - используйте специальный кабель, например КИС”
Кстати да, лично проверено что через ВВГнг 485 работает, да и шутка про вешалку на самом деле не шутка (но, естественно, в “сотни инсталляций” такие смелые решения не уходили). Вопрос в том, что он это делает на минимальной скорости и при тепличных условиях.

Единственное что в этой статье не отражён ещё один немаловажный момент: коэффициенты затухания сигнала от частоты у разных кабелей разные. То есть, банально, более высокочастотные сигналы просто затухнут и даже с переотражением проблем не будет.
Именно поэтому и существует такое многообразие кабелей, а вовсе не потому что кто-то решил срубить денег за специальный кабель КИС.