Q:
我想实现一个bool变量延时置false,用计时器ton来实现,每次计时器复位的时候出问题,主要是第二次触发达不到计时的效果。
IF (a := TRUE) THEN
TON1 ( IN := a,PT := T#10s );
IF (TON1.Q := TRUE) THEN
a := FALSE;
END_IF
END_IF
A:
最外面的if a:=ture 条件去掉。如果你写in:=ture的话必须在ton.q的处理代码里面手动复位ton(in=false),这种简单情况只要in:=a就行。
如果希望实现可以暂停,下载继续累计的效果可以使用暂停动作的下降沿保存ET,下次触发时修改PT的方式实现:
VAR
tontest:TON;
t1:F_TRIG;
t2:R_TRIG;
etcontinue, pttime: TIME;a1:bool;
END_VAR
t1(CLK:=a1 , Q=> );
t2(CLK:=a1 , Q=> );
IF t1.Q THEN etcontinue:=tontest.ET;END_IF
IF t2.Q THEN pttime:=(pttime-etcontinue);END_IF
tontest(IN:= a1, PT:=pttime , Q=> , ET=> );