Всем спасибо за участие! Буду пробовать дальше...![]()
Всем спасибо за участие! Буду пробовать дальше...![]()
Ты это, аккуратней там с АЭС.. Вишь как бывает
Что бы два раза не вставать...
Я тут приложил свой первый проектик умнодомный... Что-то у меня там там в ФБ Prisut не хочет переменная назначаться... Очередная загадка...![]()
Поможите, кто чем может. На всякие формулы и вычисления можно не обращать внимания - они работают как надо...![]()
Утром глянул на написанное - действительно фигня какая-то...![]()
Да и TOF здесь не подойдет... Попробую фомализовать задачу.
Добавил в ФБ Prisut входную переменную pp - сигнал с датчика движения..
IF NOT pp THEN (*пропало движение*)
"начинаем медленно уменьшать яркость (OUT1) до нуля";
ELSIF pp AND OUT1 > 0 THEN (*пропало движение, но кто-то обратно вошел или пошевелился*)
OUT1 := light; (*возвращаем яркость как было*)
END_IF
Как сделать медленный декремент?![]()
Вот моя глушилка резких движений для аналогового выхода:AO1 — аналоговый выход, Power — уставка, 0.016 — максимальное изменение в вольтах за миллисекунду.Код:VAR MaxOutputDelta: REAL; PrevScanTimestamp: TIME; END_VAR MaxOutputDelta := TIME_TO_REAL(TIME() - PrevScanTimestamp) * 0.016; AO1 := AO1 + LIMIT(-MaxOutputDelta, Power - AO1, MaxOutputDelta); PrevScanTimestamp := TIME();
Последний раз редактировалось Yegor; 20.09.2012 в 08:38.
Так. Оставим пока в покое медленный декремент, продолжим мозгоштурм.
Программа:
Код:PROGRAM PLC_PRG VAR TT : INT := 100; QQ : INT; END_VAR QQ := TT; IF DI1 AND TT >0 THEN TT := TT - 1; ELSE TT := QQ; END_IF
В этом случае QQ будет равно тому, до чего успела уменьшится TT.
А как сохранить эту QQ ???![]()
Какая переменная? QQ ? Я же говорю, что она меняется так же, как ТТ... от 100 до 0..
Но, решение почти есть:
Осталось вписать его в мой проект...Код:PROGRAM PLC_PRG VAR TT : INT := 100; QQ : INT; INIT_VAR : BOOL := 1; END_VAR IF INIT_VAR THEN QQ := TT; INIT_VAR := 0; END_IF IF DI1 AND TT >0 THEN TT := TT - 1; ELSE TT := QQ; END_IF![]()
Ну так поставьте задачу лучше. Что вы понимаете под сохранением в данном случае?В вашем решении можно выкинуть INIT_VAR вместе с ифом и написать TT, QQ: INT := 100 ничего при этом не потеряв.Но, решение почти есть
Последний раз редактировалось Yegor; 20.09.2012 в 11:45.