Сообщение от
Атаман
Почему на время одного цикла? Постоянно есть значение d.
В целом я понял, что повторно вызывать таймер наоборот необходимо и такой вариант лучший получается?
TIMEdoz: TON;
d: TIME;
IF Knopka= TRUE THEN
OUT := TRUE;
TIMEdoz(IN:=TRUE,PT:=t#100s, ET=>d);
END_IF
IF Datchik = TRUE THEN
TIMEdoz();
OUT := FALSE;
TIMEdoz.IN := FALSE;
END_IF
1. Не используйте IF Knopka= TRUE THEN или IF Datchik = TRUE THEN просто пишите IF Knopka THEN или IF Datchik THEN. Получается масло масляное или так называемый "индусский код".
2. Для "Хочу померить время между началом и концом процесса" можно таймер не использовать, а пользоваться функцией TIME()
Код:
VAR
d: TIME;
Datchik: BOOL;
OUT: BOOL;
Knopka: BOOL;
R_TR1: R_TRIG;
R_TR2: R_TRIG;
time_start: TIME;
END_VAR
R_TR1(CLK:=Knopka);
IF R_TR1.Q THEN
time_start:=TIME();
OUT := TRUE;
END_IF
R_TR2(CLK:=Datchik);
IF R_TR2.Q THEN
d:=TIME()-time_start;
OUT := FALSE;
END_IF
Подойде для измерения времени процесса до ~49 суток и если макс. время процесса заранее не известно.
ЗЫ. А на счет таймера, то перед анализом состояния таймера его всегда перед этим нужно вызывать.