Всем спасибо за участие! Буду пробовать дальше... :)
Вид для печати
Всем спасибо за участие! Буду пробовать дальше... :)
Ты это, аккуратней там с АЭС.. Вишь как бывает
Что бы два раза не вставать...
Я тут приложил свой первый проектик умнодомный... Что-то у меня там там в ФБ Prisut не хочет переменная назначаться... Очередная загадка...:confused:
Поможите, кто чем может. На всякие формулы и вычисления можно не обращать внимания - они работают как надо... :)
Утром глянул на написанное - действительно фигня какая-то... :mad:
Да и TOF здесь не подойдет... Попробую фомализовать задачу.
Добавил в ФБ Prisut входную переменную pp - сигнал с датчика движения..
IF NOT pp THEN (*пропало движение*)
"начинаем медленно уменьшать яркость (OUT1) до нуля";
ELSIF pp AND OUT1 > 0 THEN (*пропало движение, но кто-то обратно вошел или пошевелился*)
OUT1 := light; (*возвращаем яркость как было*)
END_IF
Как сделать медленный декремент? :confused:
Вот моя глушилка резких движений для аналогового выхода: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();
Так. Оставим пока в покое медленный декремент, продолжим мозгоштурм.
Программа:
Код: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 ??? :confused:
Код:VAR RETAIN
QQ: INT;
END_VAR
Какая переменная? 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 ничего при этом не потеряв.Цитата:
Но, решение почти есть