3. Tc2_Standard

3.7. 我想实现一个Bool变量延时置False,用计时器ton来实现,每次计时器复位的时候出问题,主要是第二次触发达不到计时的效果 累计计时

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=> );