IF (HW_PIR_hall=FALSE ) THEN Timer1(IN:=NOT Timer1Q , PT:=T#60s , Q=>Timer1Q , ET=> ); HW_LIGHT_hall:=TRUE; END_IF Timer1(); IF Timer1.q THEN HW_LIGHT_hall:=FALSE; END_IF По датчику движения свет должен гореть 1 мин.
IF (HW_PIR_hall=FALSE ) THEN Timer1(IN:=NOT Timer1Q , PT:=T#60s , Q=>Timer1Q , ET=> ); HW_LIGHT_hall:=TRUE; END_IF Timer1(); IF Timer1.q THEN HW_LIGHT_hall:=FALSE; END_IF По датчику движения свет должен гореть 1 мин.
я уже спрашивал в смежной конфе , теперь интерестно что тут посоветуют не у кого 6 небыло , с прыгающим нет сим карты, нет... Читать далее
не у кого 6 небыло , с прыгающим нет сим карты, нет сети секунд в 40-50, модем катан с востановлением дорог , кп рф заменен... Читать далее
Приветствую! ищу специалиста, который возмется за ремонт ноута Lenovo Ideapad Z710 * Не работает видеокарта (NVidia Geforce)... Читать далее
Так. а тут же наверное можно попросить проверить схему девайса полностью? Чтобы услышать компетентный ответ и указание на... Читать далее
Внимание рубрика - гадание по фото! На мониторе остается призрачный след того, что висело на экране перед этим. Например... Читать далее
мне тоже не нравится рвать GND, но если я буду разрывать Vcc то мне вроде надо будет другой тип мосфета, который будет управляться... Читать далее
Комментарии: 15
Aleksey
В условии не обязательно вызывать фб, т.к. вызов выполняется ещё раз в после условия. Timer1.IN :=NOT Timer1q; Timer1.pt :=t#60s; Timer1q.in :=timer1.q; Либо с параметрами вызывать после условия, а оставить только Timer1.IN :=NOT Timer1q; В условии, но мне не совсем понятен смысл от hw сигналов из названия переменных.
Vasily
т.е. тебе надо вызывать таймер без IF с входным параметром IN:= (NOT HW_PIR_hall) ну на первый взгляд не верно вызывать два раза экземпляр одного и того же таймера. К тому же есть типовые таймеры TOFF - с задержкой на выключение. используй его. во инет-то глючит =) к тому же под ифом вызывать таймер вообще нельзя, он глючить будет. экземпляр таймера надо вызывать каждый раз с циклом ПЛК. он таким образом узнает, сколько времени прошло =)
Andrey
код в реале работает. HW - я так помечаю "HardWare" переменые, привязаные к физ. портам IX, QX. "IF" срабатывает при падении фронта, внтури "IF" запускается таймер (и именно там задаются параметры), но так как логический "0" держится только секунду таймер не работает более 1 сек, поэтому за пределами IF вызывается Timer1() уже без параметров.
Konstantin
Не понял как фронт у вас держится целую секунду? Он обычно активен только в течении одного машинного цикла...
Andrey
не правильно выразился, логический "0" держится 1 сек.
Nick
Всегда, иначе это уже будет не фронт.
Konstantin
А зачем такие вещи писать на ST? Ладдер тут в самый раз: просто и любому понятно, а ST имхо на таких задачах как из пушки по воробьям...
Maxim
Ладдер рулит
Andrey
Ну в УД ресурсы плк задействованы на 1%, не жалко. а ST прост и понятен - не надо ничего изучать, и код в сообществе DIY поймут, когда опытом делиться буду.
Konstantin
Если бы был прост и понятен, то вы бы тут не спрашивали. Стандартным языком для таких задач долгое время был Ладдер, сейчас его вытесняет FBD
Andrey
так вопрос в оптимизации был больше, код рабочий. С ладдером и FBD возможно было бы гораздо больше вопросов. Кстати есть 100% точные механизмы конвертации между этими языками?
Nick
Нет. В ST можно конвертировать всё, обратно не всегда.
Konstantin
В симатике для S7-300/400 существует автоматическая конвертация между IL, LAD, FBD но не в 100% случаев, как у других я не знаю Сегодня код рабочий, а завтра, особенно при дальнейшей разработке, может и перестать рабочим быть, такое бывало неоднократно Не знаю как это у вас принято, у нас без знания LAD & FBD как ОтчеНаш в программировании ПЛК делать нечего, без них ты просто чужой
Andrey
Я сам себе ТЗ, ТТ, Проект, Внедрение, Эксплуатация. ПЛК в квартире и на даче.
Konstantin
Ну удачи вам! Как говорится - хозяин барин