Modbus в системах Умного Дома
В проводных системах автоматики Умный Дом связь по RS-485 Modbus используется очень широко. В большом количестве систем невысокого ценового уровня это связь между модулями контроллера. Wirenboard, Разумдом, EasyHomePLC используют ModBus для подключения между контроллером и модулями ввода-вывода. Этот протокол передачи данных достаточно крут: высокая надёжность работы, большая дальность связи (шлейф до 1200 метров), работа по распространённому кабелю «витая пара», простота написания драйверов.
Я тут недавно писал неплохую статью про то, что такое, в общих чертах, Modbus и что такое RS-485 (не одно и то же): Что такое Modbus, максимально просто
Есть в Modbus большой минус — скорость обмена данными не так велика, как хотелось бы. Хотелось бы, конечно, чтобы всё работало мгновенно, но работает не совсем так. В Modbus всегда есть устройство-ведущий (он же master) и одно или много устройств-ведомых (они же slave). Ведомое устройство не может никак инициировать связь с ведущим. Ведущий постоянно по очереди опрашивает всех ведомых на предмет изменения их входов. Если выключатель подключен на вход модуля ввода-вывода, и мы на этот выключатель нажали, то модуль никак не может сам сообщить контроллеру-мастеру о том, что изменилось состояние входа, он должен дождаться опроса контроллером состояния входов этого модуля, передать в ответ состояния входов контроллеру, который уже сам увидит, что вход изменился.
Этот опрос занимает некоторое время. Мастеру надо последовательно опросить все регистры всех ведомых устройств, а потом, чтобы, например, включить свет, отправить на нужное устройство команду на изменение состояния выхода (то есть, соответствующего регистра). На самом деле, всё происходит быстро, но задержка может быть заметна. Чем больше ведомых устройств, тем больше задержка.
Например, у меня у одного клиента установлен контроллер EasyHomePLC, три модуля расширения входов-выходов Овен и диммер Разумдом. Свет подключен на встроенные в контроллер реле, а вот некоторые выключатели на входы Овенов. Клиент звонил и пожаловался на то, что от нажатия выключателя до включения света проходит «от четверти до трети секунды». Как он их засекал, не могу сказать, но такая задержка вполне возможна. Кстати, при включении светодиодных ламп всегда есть какая-то задержка, связанная с переходными процессами в электронике самих ламп, вероятно, часть этих долей секунды связана с лампами.
Если почитать форум техподдержки WirenBoard, то также увидим обсуждение возможностей уменьшения задержки.
Уменьшать задержку на уровне проектирования системы нужно использовать максимально входы и выходы, работающие не по Modbus. Например, у контроллера EasyHomePLC версии 5.2 9 встроенных реле, можно подключить два блока по 9 реле, есть также 6 выходов ШИМ, которых можно использовать как дискретные выходы. Все эти выходы работают мгновенно, без заметной человеку задержки. У контроллера также 32 входа. Логично подключать на эти входы и выходы то, где задержка наиболее неприятна, то есть, свет. Включение даже на полсекунды позднее тёплого пола, или радиатора, или вытяжки, или электрошторы никто никогда не заметит.
У Wirenboard к контроллеру можно подключить модули ввода-вывода (до 4 модулей ввода и 4 вывода), работающие также без задержки, остальные модули также по ModBus, включая датчики температуры. Но у Wirenboard есть удобная фишка: на релейных модулях есть также и дискретные входы, к которым можно подключать выключатели, и настроить сам модуль так, чтобы при изменении входного сигнала менялся и выход. Таким образом, свет будет работать с выключателей не только без задержки, но и вообще при отключении контроллера или обрыве линии связи. Но переключение зависимостей света и клавиш выключателей происходит не программно, а переключением кабелей, что не так удобно, как, например, в EasyHomePLC, где можно менять зависимости прямо из пользовательского интерфейса.
Пусть вас не пугают, на самом деле, эти мои комментарии по поводу задержки. Лично я считаю, что 500 миллисекунд и не заметил бы, особенно, если это не самый часто используемый свет (который был бы подключен на мгновенные реле), а что-то редкое.
Но здесь я вижу некую границу, разделяющую то, что с простого недорого контроллера надо перейти на что-то более серьёзное, например, на Beckhoff. В линейке модулей Beckhoff серии KL используется собственная шина K-Bus, в ней может быть огромное количество модулей, все их которых будут отрабатывать мгновенно.
Физическое подключение Modbus в щите
Шину Modbus надо подключать витой парой, желательно экранированной. Нам нужны две жилы: А и B, а также экран. Питание 12 или 24 вольта для одиночных устройств (датчиков, реле, ИК-передатчиков) можно передавать по той же витой паре, что и шину. Если подключаем несколько устройств в отдельном щите, то лучше перекинуть в него питание кабелем потолще либо поставить там свой блок питания, чтобы не было просадки напряжения, которая тем больше, чем больше нагрузка.
Обычная витая пара, кстати, имеет диаметр жилы 0.51 или 0.52мм. Это диаметр, сечение получается всего 0.2мм2.
Не надо для улучшения связи пытаться сделать кабель шины Modbus толще, используя какой-то сигнальный кабель или засовывая несколько жил витой пары в одну клемму! Пара жил должна быть обязательно перевита, как в обычной витой паре либо чаще, шаг намотки не очень важен.
Принцип передачи по витой паре простой: по одной жиле подаётся сигнал, а по другой противоположный сигнал, в приёмнике стоит сумматор, который проверяет, что сумма сигналов обеих жил нулевая. Если на кабель действует помеха, то она действует на обе жилы, смещая сигнал, сумма получается ненулевая, и приёмник понимает, что передаваемый сигнал повреждён. Если жилы не перевиты, то проверка не работает. Поэтому берём кабель FTP и используем из него две перевитые между собой жилы.
В щите, в котором стоят модули, помех хватает, там же вся электрика стоит. Но и длина соединительного кабеля очень маленькая. Всё равно, очень важно, чтобы кабель Modbus был перевит и закрыт экраном. Существует специальный шинный кабель RS-485, 2 или 4 жилы сечением по 0.6мм2, если хочется сделать всё совсем идеально, можно использовать его. Но лично у меня с соединением по Modbus проблем не были ни единого раза, кроме одного случая, когда монтажник пытался использовать две перевитые жилы как А и ещё две как В, чтобы толще было.
В интернете можно найти данные о том, что в некоторых случаях требуется устанавливать на шину резистор. Советую не заморачиваться этими мыслями, если у вас дом или квартира, а не промышленная сеть предприятия. Рекомендации такие же, как и для прочих слаботочных кабелей: качественный кабель с экраном, удаление от силовых кабелей, отсутствие скруток.
Я в некоторых проектах соединяю устройства «звездой», а не шлейфом. То есть, от всех элементов отдельный кабель к контроллеру, у контроллера они соединяются. Это гораздо универсальнее, чем соединение шлейфом, хоть и требует больше кабеля. Зато легко отключать и подключать линии, легко понять, в какой линии проблема. Важно не делать «дерево», когда кабель отходит от контроллера, а потом от него идут ответвления, для RS-485 эта топология не подходит. Вот пример подключения элементов «звездой», в данном случае, это блоки кондиционеров к контроллеру Beckhoff:
Вот последовательное подключение на шину modbus датчиков Wirenboard:
От всех элементов отдельный кабель к контроллеру, у контроллера они соединяются.
Можете добавить живое фото такого подключения ?
Живого фото, на котором было бы крупно видно подключение, у себя не нашёл. Но выглядит как в проекте — кабели подходят на кросс-модуль или клеммник TB1506, от него на порт контроллера.
Полезный сайт, спасибо автору за материалы. Я только начал изучать эту тему, а тут прям понятно описаны интересующие меня вещи.