РЕКЛАМА НА ФОРУМХАУС Насколько я знаю, вы указали type=input, а input это только чтение. Вам нужно holding
Братцы, подскажите, а есть способ опенхабом разложить 2байта на биты? Т. е. по модбасу от ОВЕНА прилетает 2 байта, а я читаю и пишу отдельные биты типа UNPACK или PUTBIT с EXTRACTом?
Это неспортивно! Ну, если в общем, то конструкция такая: Ардуина, куда прицеплены через SPI 16 релюх через 595 регистры, кроме релюх там еще датчики температуры, влажности и пр., но с ними проблем нет. Ардуина через RS485 по модбасу будет цепляться к OWEN PLC110-60. Ну, а мордой дома является OpenHAB. Т. е. основной элемент - это ПЛК110-60 - там вся логика. Опенхаб в основном для видимости, что происходит и ручного управления при необходимости. Т. е. без опенхаба дом будет жить, как ни в чем не бывало. Так вот о реле. Эти 16 релюх дабы не расписывать 16 coils, все равно управляются с ПЛК110, я пишу как uint16_t: Код: void write_releys(){ byte registerOne = highByte(rele_out); byte registerTwo = lowByte(rele_out); digitalWrite(pinSelect, LOW); SPI.transfer(registerOne); SPI.transfer(registerTwo); digitalWrite(pinSelect, HIGH); } т. е. в SPI тупо шлю 2 байта. Соответственно в ПЛК110 в настройках модбаса это дело у меня передается как "Register output module", что как раз составляет 2 байта. В программе ПЛК для начала создал ФБ Код: FUNCTION_BLOCK Regul_TP VAR_INPUT Temperature_current : WORD; (* Температура в помещении *) Mod_Ustavka: WORD; (* Уставка *) END_VAR VAR_OUTPUT Status_circuit: BOOL; (* Контур ТП - ВКЛ-ВЫКЛ *) END_VAR VAR END_VAR IF (Temperature_current < Mod_Ustavka) THEN Status_circuit := TRUE; ELSIF (Temperature_current >= Mod_Ustavka) THEN Status_circuit := FALSE; END_IF В PLC_PRG это дело вызывается как Код: TP_Kitchen: Regul_TP; TP_Kitchen( Temperature_current := REAL_TO_WORD(T01), Mod_Ustavka := 24); D_Relays:=PUTBIT(D_Relays,14,TP_Kitchen.Status_circuit); Relays_TP := DWORD_TO_WORD(D_Relays); (Кстати, кто-нибудь пробовал прикручивать ПИД для управления ТП? Там инертность адская.) Вот этот самый Relays_TP - я даю ардуине. Хотел и его же пихать в опенхаб, дабы не плодить сущности. Можно, конечно, нагенерить койлов и писать в них что-то вроде Код: Rele_OpenHAB_01:=EXTRACT(X:=D_Relays, N:=14); Но я очень надеялся перенести задачи опенхаба на опенхаб. Чорд. Что-то много букв получилось...
Посмотрите мой проект в соседней теме. Я как раз подобную систему реализовал. Вся логика на ПЛК110, а OH для визуализации и ручного управления (наряду с некоторыми физическими кнопками). То как Вы цепляете ардуинку и ПЛК - не важно. На ПЛК Вы создаете Modbus Slave (TCP). Я создал 2 слейва. Один для real значений (4-х байтовые) и один для дискретных (bool, int, word) Со стороны ПЛК не важно как Вы будете заполнять регистры слейва. Хоть dword все пишите. А со стороны OH делайте запрос как coil. И на OH Вы сделайте несколько слейвов. Один так же для real, другой для bit, третий можно для int. Со стороны ПЛК обращаться к биту любого слова можно просто указав его позицию. Например: VAR i: INT; b0,b1,b2: BOOL; END_VAR i := 2; b0 := i. 0; (* b0 = false *) b1 := i. 1; (* b1 = true *) b2 := i. 2; (* b2 = false *) А на стороне OH в любом случае к этим реле обращаться отдельно нужно так и считываете coil И еще в пользу coil. В некоторых случая в один байт можно упаковать несколько счетчиков. Допустим 3 бита на режим работы узла 1 (8 вариантов), 3 бита на режим работы узла 2 (8 вариантов) и 2 бита на режим работы узла 3 (4 варианта). Со стороны OH считав эти coil (items: b0, b1, ... b7) получаем режим работы: Unit1_Mode, Unit2_Mode, Unit3_Mode - определяем как number в *.items rule "Unit2_Mode" when Item b3 changed or Item b4 changed or Item b5 changed then var int bit0 = 0 var int bit1 = 0 var int bit2 = 0 if (b3.state = ON) { bit0 = 1 } if (b4.state = ON) { bit1 = 1 } if (b5.state = ON) { bit2 = 1 } var int id = bit0 + bit1 * 2 + bit2 * 4 postUpdate (Unit2_Mode, id) end на стороне ПЛК еще проще Unit2_Mode.0 := b3; Unit2_Mode.1 := b4; Unit2_Mode.2 := b5; Если на ПЛК вы определили переменную dwMode: DWORD (т.е. не отдельными битами) то: Unit2_Mode.0 := dwMode. 3; Unit2_Mode.1 := dwMode. 4; Unit2_Mode.2 := dwMode. 5; Немного грубовато, но зато работает.
Хотелось побаловаться с умным домом, но все не могу остановиться на чем-то конкретном. Поскольку не понятно в какую сторону процесс по УД устаканиться - решил провода от выключателей и исполнителей стянуть в два места, причем с некоторым запасом. Лапша сейчас висит знатная. Только на втором этаже сейчас порядка 50 проводов 3х1.5 и 5х1.5. На розетки 3х2.5 отдельно. Сначала думал на z-wave, но din модули кубино стоят 65 евро/канал там. А коммутировать на двухканальных фибаро - не слишком удобно, они всетаки для подрозетников. Хотя купил vera edge и попробовал вариации с империхоум. Настраивается на редкость просто и удобно. Для квартиры наверное самое оно. Потом появилась мысль сделать на loxone + овен modbus. Ввели в сомнения тут. Плюс так и не понял - заработала связка или не очень. Ну последняя - попробовать OH+овен. Нужно порядка 25-30 исполнителей на этаж, управляющих выводов чуть больше. Но можно закоммутировать. Из плюсов относительно дешево и можно быстро заменить, если что-то выгорит. С локсоном такой вариант не прокатит - будешь сидеть без света несколько недель в лучшем случае. Из минусов все-таки центральный контроллер. В этом случае распределенные knx и z-wave выглядят устойчивее. Какие будут мысли-комментарии по этому варианту с учетом уже накопленного постояльцами опыта? Может какие-то еще варианты? На чем лучше поставить OH? у меня на работе есть несколько интелевых компов с пассинвным охлаждением, брали давненько для кассовых терминалов. Но всяко производительнее малинки будет. Только есть вопрос rs485, скорее всего там его нет.
Смотря для чего Вы планируете его использовать. Если всю логику управления вывести на контроллер с RS485 и eth интерфейсом, а на OH возложить только визуализацию и управление (кнопки, переключатели и пр) то вполне подойдет малинка. Тем более для малинки сейчас уже имеются корпуса на DIN рейку. Если планируете управление алгоритмами работы системы то тут хотя бы на базе intel atom девайс иметь. зы. Шкафчик коммутационный Вам нужен будет очень приличных размеров. Просчитайте заранее сколько проводов будете коммутировать, сколько контактов на модулях ввода-вывода будет и заложите еще запас 10-15%
планировал в основном для освещения почитал про потенциальные задержки и наверное попробую уложиться в ПЛК110-60 по одному на этаж. Иначе управление светом будет явно нервировать. А ОН тогда только для визуалаизации. А не подскажите - вариант плк110+модули расширения 110 нормально будет работать или задержки гарантированы? Еще вопрос - по внутренним реле на овене, полагаю придется ставить допником нормальные реле?
Это для чего так усложнять? ПЛК одного хватит. Добавьте просто модули ввода-вывода. Есть на 32 канала и ввод и вывод. Зависит от предполагаемой нагрузки. Смотрите характеристики ваших светильников. На уличное освещение я сделал через промежуточный контактор. Но там нагрузка предполагается высокая. Задержки можно сделать очень маленькими если установить цикличность работы программы скажем 100 мс. или еще меньше.
а может тогда нет смысла ставить ПЛК, а всем управлять модулями расширения через ОН. Просто взять комп помощнее и 485 в него добавить?
Теоретически можно. Но смысл задействовать целый комп в простейших алгоритмах управления? Для ПЛК есть хорошая среда программирования, которую ну ни как нельзя сравнить с xTend, что OH использует. Можно конечно и микроскопом гвозди заколачивать, но он быстро сломается в отличии от нормального молотка. ПЛК зарекомендовали себя как надежные, отказоустойчивые устройства. Чего не скажешь о компах. Мне кажется более рациональным использовать ПЛК в качестве центрального устройста, на котором вся логика работы систем устроена, а OH - средство визуализации и управления разными режимами (переключатели, димеры и пр). И при всем при этом жизненно важные элементы (отопление, водоснабжение. электрика) должны иметь ручное управление. Т. е. упал OH - лишились красивости. Упал ПЛК - перешли на ручное управление. ПЛК все же гораздо лучше "заточен" для этих целей. Посмотрите видеоуроки по Codesys и через неделю станете самостоятельно программировать свой ПЛК.
Вы можете спокойно реализовать все алгоритмы на OpenHAB. В том числе используя графические среды программирования. Например я всю логику делаю в Node-RED: Мощности даже RPi 2 или 3 для этого хватит с головой. А если не хватит - сможете легко перелезть на любое железо помощнее. Основное отличие данного подхода от ПЛК - программа исполняется не циклически, а по событиям - например вы нажали на кнопку, появилось событие, которое сразу же отработалось алгоритмом и сразу создало события исполнителям. В итоге задержки получаются меньше 100мс, и мощный компьютер не надо. Проблема в том, что теоретически все события могут произойти одновременно и тогда данный подход может привести к большим задержкам, чем в ПЛК, так как события будут обрабатываться по очереди. Для производственных процессов это катастрофа, поэтому ПЛК и работают по циклическим программам, чтобы гарантировать свои 100мс вне зависимости от количества событий. Но для дома это далеко не критично - вы не щелкаете светом в 10 помещениях одновременно. Проблема будет в RS485. Из стандартных протоколов для него есть только Modbus, который опять же приведет к задержкам из-за поллинга, как ни крути. В вашем случае я бы сделал какой-нибудь IP шлюз на тот же KNX, а дальше бы уже в шкафу разместил все I/O модули.
Хороший вопрос. Согласен - в двух вариантах есть свои плюсы и минусы. С одной стороны в рамках одной железки включения-выключения будут идти однозначно быстрее, чем через ОН и модбас. Но потенциально тормоза возможно даже в пределах родного железа (если подключать доп модули). ну Вы же сами говорите именно этого я опасаюсь, поэтому была мысль с двумя поэтажными ПЛК. А так все выгляит чудесно - воткнул еще пришлепку с z-wave и управляешь всем в рамках ОН. такой вариант предлагали. но есть пару моментов - ценники и доступность в московии. Овен в этом отношении в разы дешевле и доступнее. С учетом, что рассматриваю как временное решение, пока не устаканятся вариации с УД - вкладываться на 200 тыр в динозавра индустрии УД не слишком хочется.