Как стать автором
Обновить

Комментарии 49

Спасибо за статью. Я сейчас затеваю ремонт и второпях изучаю, что и как из кабелей вмуровать в стены, пока есть такая возможность.

Объясните, пожалуйста, а зачем вообще вся эта канитель с последовательными интерфейсами и протоколами? Дешевизна? Простота? Ой ли?

Вот держу я в руках Arduino Pro Mini и Ethernet-модуль, они в сумме стоят $5-$6. Предположим, хочу я сделать «умный выключатель» — я вмуровываю в стену Ethernet-кабель, по PoE подаю на Ардуину питание. В результате имею полную свободу от наводок на кабель и простоту интеграции — бери готовую бибилиотеку для Ethernet, TCP/IP и HTTP и знай себе HTTP POST-запросами симистор переключай хоть из браузера.

Правда, сильно гложет мысль, что не могу я один такой быть умный, а вся отрасль — ошибаться. Или они просто тупо за совместимость с legacy-устройствами сражаются?
Modbus — это совсем не legacy, это устоявшийся протокол для управления и измерений. Важен он тем, что его на нем работает практически вся индустриальная автоматика — датчики, исполнительные устройства, PLC. Если у вас налажена, например, производственная линия или охранная система, то наверняка там будет использоваться modbus. Для «умного дома» он тоже применим, но я считаю что удел modbus'a — цеха и лаборатории, а для домашней автоматики нужны другие стандарты. А Arduino и всякие модули к ней — это здорово и интересно, но это не стандарты.
Понятно, спасибо. Т.е. эта штука — для взрослых дядек и промышленных применений, выходит.
практически вся индустриальная автоматика — это слишком громко сказано ;)
Как уже было написано выше, ModBus поддерживается многими устройствами и рассчитан на «несколько устройств на одной линии». Если в будущем захочется подключить помимо выключателя, например, счётчик тепла, то у него врят ли будет выход Ethernet, а ModBus очень даже вероятно и т.д.
Если Вам будет нужно подключить N устройств к сети, то в случае выбора Ethernet нужно будет протянуть N кабелей к коммутатору, причём каждый кабель должен быть не более 100м, и это должен быть кабель как минимум с двумя витыми парами. Если же выбрать RS485 + Modbus, то достаточно кабеля с одной витой парой, и можно подключать все устройства к одному кабелю длиной до 1,2км параллельно.
не более 100 м
А у вас немаленькая квартира, я погляжу :)

Триста метров недорогой витой пары стоят пару тысяч рублей, надёжный как трактор 16-портовый свитч Intel можно купить за 500. Мы тут с вами не на спичках ли экономим?
«100м» — я имел ввиду ограничения «по железу», т.е. при необходимости протянуть дальше — может не заработать. По мне так дело не в цене, а в удобстве монтажа, представьте что в стену нужно будет спрятать десяток кабелей Cat.5, вместо одного
Это только кажется перед прокладкой кабелей, что «100 метров — мало? Ха-ха-ха! Да у меня квартирка всего ничего!»
А потом начинаешь тянуть и выясняется, что или в обход всей квартиры, или под полом, т.к. от комнаты с сервером до кухни — дверь большой комнаты, а роутер — вообще на другой стене!

Поясню, «нафига оно вообще нужно»:
Любое устройство в сети — это лишний порт на маршрутизаторе. И это лишний провод, который надо тащить.
Причём зачастую в комнату надо ставить НЕСКОЛЬКО устройств — кнопка для света, управление люстрой, торшером, датчики и т.д. — к каждому надо тянуть свой шнурочек. От роутера. Который на другой стороне квартиры. Или на комнату ставить свич…

Устройства на 485 шине висят на паре проводов. Можно извратиться, пустив четыре провода и подводя заодно и низковольтное питание, но при этом они все висят параллельно на одном кабеле!!! Без дополнительных роутеров и т.д.!
Надо отвести от магистрали до выключателя? Подрубаешься параллельно и вуаля — новый девайс в сети!
При этом модбас-485 устройства «копеечные» — по факту это тупо контроллер, причём можно и без обвязок!
Если у Вас 5 устройств, то можно, но когда Вы захотите добавить шестое, то придется долбать стену и закладывать провод.
Чувствуете разницу?
НЛО прилетело и опубликовало эту надпись здесь
Так или иначе надо к релюшке доставить питание. Вмуровывать в стену ac/dc преобразователь у каждой релюшке либо страшно (дешёвые), либо разорительно (если качественные).

Радиоканалу в условиях центра города я, боюсь, не доверяю. PoE показался самым адекватным вариантом.
НЛО прилетело и опубликовало эту надпись здесь
32В??? Это что за зверь.
По 12В — каким кабелем протянуто?
А вы нигде не документировали свой опыт? Фоточки, статьи, блог, что-то в этом духе?
НЛО прилетело и опубликовало эту надпись здесь
Эх, у меня уже через неделю полы демонтировать и заменять начнут; боюсь, не дождусь.
ntfs1984, когда примерно?
Думаю, про 220V, 12V и 5V
народ не понимает зачем и страшит падением DC напряжения на длинных участках
НЛО прилетело и опубликовало эту надпись здесь
А каким проводом 12В?
Это наверно к ntfs1984 вопрос, я тоже в стадии ремонта
НЛО прилетело и опубликовало эту надпись здесь
И 12В которые к компу подходят тоже таким проводом? Просадки по напряжению нет? Он же под 20-30А жрет под нагрузкой, игрушками.
Всё дело в помехоустойчивости. Если посмотреть Википедию, то:
A 10BASE-T transmitter sends two differential voltages, +2.5 V or −2.5 V.

A 100BASE-TX transmitter sends three differential voltages, +1 V, 0 V, or −1 V.

Тамже:
Логическому «0» соответствует положительное напряжение (от +5 до +15 В для передатчика), а логической «1» отрицательное (от −5 до −15 В для передатчика).
Ну за помехоустойчивость Ethernet мы и любим, чего не скажешь о последовательных линиях.

Подключите Ардуину к COM-порту и напишите простенький скетч, который будет непрерывно шарашить одну букву в терминал. А потом попросите у жены фен, положите рядом и включите. Лишнего мусора в терминале будет дофига.
Как-то странно у вас COM работает. Я сколько лет с ним работаю, но про такое безобразие не слышал. Встречал правда когда на передачу данных влияют помехи источников питания, или разводка электронной части выполнена некорректно.

Про Ethernet — лично видел что два компьютера, которые соединены кабелем в один метр шлют пакеты с ошибками. Источников помех (вроде фена) вроде бы не наблюдалось. Про COM — часа 4 непрерывно слал данные по кабелям длинной 6 метров — ошибок не было (скорость 9600, кабель как и подобает экранированный брал + заземлял корректно).
У меня была неудачная попытка заменить Ардуиной выгоревший блок управления посудомоечной машиной. А там, в тесном объёме — несколько электромагнитных вентилей на трубах с водой и мощная электрическая помпа. Даже при том, что реле были оптически развязаны с Ардуиной, помехи прилетали такие, что о надёжной работе речь перестала идти сразу. Каждое включение реле ТЭН или слива воды приводило к тому, что в debug-консоль по последовательному соединению сыпался мусор и это сильно коррелировало с зависаниями самого МК.
Боюсь что проблемы были не с RS-232, а с самим контроллером или питанием. Подробности показал бы осциллограф.
А ещё контролировать протокол проще, диагностика неисправностей легче. Вот вы можете сказать через сколько отработает устройство, если ему TCP-пакет отправить? С RS-232 это проще сделать. Для домашней автоматизации время не критично, но критично в некоторых приложениях. На RS-232 для простых приложений можно свой легковестный протокол использовать.
а нужно? Эти свои легковесные велосипеды изобретать?
Потом такие велосипеды внезапно попадают в разные серийные устройства (почему-то, чаще всего это происходит с российскими устройствами) и начинается пляска с бубном: а как же подружить «взрослую» систему с этой поделкой…
Да, это вопрос очень важен. Я сам долго старался разобраться в критериях когда применять что-то самописное, а когда готовые решения. Этот вопрос очень сходен например со следующим: «Когда надо разбирать беспорядок на столе? Если я всё время буду убирать инструмент на место (в ящик), то это очень увеличит время работы, но стол будет в идеальном порядке. Если не разбирать инструмент по ящикам, то очень скоро на столе образуется куча хлама, в котором сложно найти нужное.» Решение, на мой взгляд, следующее — начинайте разбираться на столе как только беспорядок начинает вам мешать.
Применительно к «велосипедам» такой подход даёт следующее решение: решайте ваши проблемы самым простым и доступным для вас способом. Если планируется встраивать ваше решение в большую систему, то используйте протокол этой системы. Если вы хорошо разбираетесь в каком-то протоколе передачи данных (или его легко понять), то используйте этот протокол. Если нет — пишите свой протокол и не парьтесь (если конечно устройство имеет уровень «поделка»). Используйте модульный подход (логика работы отдельно, а логика передачи данных — отдельно), так как это поможет сменить протокол в случае необходимости. Учитывайте что «взрослая система» может запросто поменять протокол обмена данными, или иметь особенности реализации протокола (добавить «фич»), которые сделают ваш модуль несовместимым.
И ещё про случай, когда устройство имеет уровень НЕ «поделка». В этом случае, вероятно, потребуется передача большого объема данных + управление протоколом + контроль ошибок. Соответственно надо в самописном протоколе это всё реализовать, а это долго и сложно. Получается что проще разобраться и использовать уже готовый формат передачи данных и не париться с написанием велосипеда. По этой причине серьёзные устройства как правило используют какие-то стандартные форматы передачи данных. Но писать велосипеды очень рекомендую — они помогают понять что и как с передачей данных и разобраться какие готовые реализации использовать (а может и дорабатывать их). :)
И ещё про случай, когда устройство имеет уровень НЕ «поделка». В этом случае, вероятно, потребуется передача большого объема данных

Что касается систем автоматики (к которым можно и глупый дом отнести) — там объёмы данных небольшие.
Если мы рассмотрим в качестве эталона Profibus (на мой взгляд, лучшая система, хоть и закрытая) — там объём данных, которые слэйв может передать мастеру, ограничен 244 байтами. И этого хватает! Я ещё ни разу не упёрся в это ограничение. Для примера — один дискретный сигнал — это один бит. Итого, если использовать только дискреты, получается 1952 канала. Если взять модули по 32 канала — это 61 модуль. Их в шкаф столько не влезет :)
С аналоговыми каналами менее радужно. Каждый занимает 2 байта. Итого, 8-канальных модулей можно поставить только 15. Но это 122 канала. Чтоб в одном месте кучно их столько потребовалось — фантастика :)

Вот такие в промышленности объёмы передачи данных :)
Ваша фантастика для меня реальность :(
А можно немного узнать про проект, где такая «фантастика» понадобилась?
И про «российские устройства»: очевидно люди стараются разобраться с передачей данных, изобретают, думают, творят. Это очень хорошо. То, что такие устройства идут в серию — недостаток системы образования. Вы хоть на википедию Русскую посмотрите — там многие статьи (может даже специально) приведены в нечитаемый вид. Вот как учиться, что бы к моменту трудоустройства на завод уже грамотно устройства проектировать? А ещё про утечку мозгов вспомнить можно!
И ещё… А зачем дружить поделку и «взрослую систему»??? Используйте взрослую и систему, и модуль!
И про «российские устройства»: очевидно люди стараются разобраться с передачей данных, изобретают, думают, творят. Это очень хорошо.

Это очень хорошо, но очень плохо то, что слово «думают» иногда отсутствует. Иначе объяснить подобные примеры невозможно:
fixik-papus.livejournal.com/14924.html
Этот случай не мой, но тут он замечательно описан и отлично иллистрирует типовую проблему, с которой мне тоже приходилось сталкиваться.
Боюсь, что там специально несовместимость делали и полагаю, что идея сделать такую хрень принадлежит не разработчикам, а менеджерам. :(
Я тоже подозреваю вероятность злого умысла, но никак не могу догадаться до причин. Вот если б они какое-то законченное решение сделали — типа, вот у нас есть специальный OPC сервер за отдельную денежку… В этом случае подлянка была бы понятна.
А зачем дружить поделку и «взрослую систему»??? Используйте взрослую и систему, и модуль!

Затем, что Modbus — это как английский в современной действительности. Универсальный язык для международного общения. Соответственно, глупо специально учить малораспространённый папуасский, если можно пользоваться английским. Тем более, что готовую реализацию Modbus можно найти уже под любую платформу.
Вот держу я в руках Arduino Pro Mini и Ethernet-модуль, они в сумме стоят $5-$6.

Очень интересует надёжность таких модулей. Они у Вас работают? Как от качества пайки впечатления? Ссылочку на поставщика дать можете?
Если вы хотите использовать витую пару, вам никто не мешает использовать не Modbus RTU, а Modbus TCP.
Программно — абсолютно то же самое, физически — ethernet вместо RS-232/485.

Преимущество — таки в лёгкой стыковке с миллионами существующих устройств.
Можно и без проводов обойтись. X10
Все ты правильно рассуждаешь ИМХО.
Питание вести к контроллеру полюбому надо, а если тащить питание — то проще кинуть витуху и не парить себе мозг преобразованием 220->5V на каждом устройстве. Единственное — учитывай что Ethernet скушает ноги SPI интерейса и как IO их уже не используешь.
С учётом того, что Ардуине требуется просто-напросто быть прослойкой между HTTP и релюшками, PIR-датчиками, ИК-передатчиками, герконами и фоторезисторами в 95% случаев — невелика беда.

А с преобразованием 220В — 5В правда проблема. Вскрытие зарядок от телефонов и смартфонов made in China навевает ужас, оставлять такое в стене включённым 24x7x365 просто опасно. Хорошие же преобразователи типа MeanWell стоят, как самолёт.

Уж лучше взять блок питания от приличного ноутбука и раздать питание по PoE централизованно. Часть потеряется по пути, а дошедшее до необходимых 5 или 3.3 вольт можно привести мегагерцовым XM1584 размерами с ноготь.
Вскрытие зарядок от телефонов и смартфонов made in China навевает ужас, оставлять такое в стене включённым 24x7x365 просто опасно.

Аналогичная практика. Купил «несколько видов» на вскрытие, что бы выбрать. Вскрытие показало — все в мусорку.
Хорошие же преобразователи типа MeanWell стоят, как самолёт.

Ну не как самолет :), но дороже контролер+ethernet точно. В каждую розетку пихать — бюджет позволяет, но это как то «не красиво» что ли и с местом проблема, 220в надо изолировать…
Спасибо за отзывы, постараюсь учесть в следующей статье пожелания и рассмотреть проблемы, связанные с железом.
А почему не использовать 1-Wire вместо Modbus? Для кнопочки и мигания лампочкой вроде как проще, поддерживается тоже везде, устройства дешевле, обвязки тоже не нужно.
Не сталкивались с проблемой передачи данных температурных датчиков с arduino по Modbus в OpenHAB?
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.