TwinCAT3中TON和R_TRIG用法体会
程序员文章站
2022-03-13 19:21:23
...
代码在文后
使用两个定时器实现自动交替定时。TRIGGER_ORIGEN为强制输入,后面自动循环交替定时。
总结:
1.TON用法
实例:TON(IN:= , PT:= , Q=> , ET=> );
IN:上升沿开始计时,要保持高,直到Q输出,Q未输出前变低定时器停止工作
PT:时间设定
Q:输出
ET:定时器工作实时时间
定时器有输出后,马上复位,定时器输出信号只保持一个扫描周期(从我的程序可验证)
2.R_TRIG用法
R_TRIG(CLK:= , Q=> );
检测到CLK信号,Q输出一个上升沿,实际上输出一个周期脉冲,这个周期可能是PLC一个扫描周期(猜的,没有测试)
注意:当CLK一直为高是,Q只有一次输出(下面程序可验证)
AA只加1一次
DD、EE、FF、GG每次输入变化加1
3. IF TRIGGER6=TRUE THEN FF:=FF+1;END_IF
如果TRIGGER6为R_TRIG输出,值改变一次,FF加一,TRIGGER6不声明为功能块输出时,FF每次扫描加一
估计其他功能块同样是这样,有时间验证下
BB、CC每个扫描周期加1
声明变量
PROGRAM MAIN
VAR
TON1,TON2: TON;
TRIGGER: BOOL;
T30S: TIME:=T#5000MS;
TON1_Q: BOOL;
TRIGGER_ORIGEN AT%I* :BOOL;
OUTPUT: INT;
TON2_Q: BOOL;
RTRIG1: R_TRIG;
TRIGGER1: BOOL;
RTRIG2: R_TRIG;
TRIGGER3: BOOL;
TRIGGER4: BOOL;
RTRIG3: R_TRIG;
TRIGGER5: BOOL;
AA: INT:=0;
BB: INT:=0;
CC: INT:=0;
DD: INT:=0;
EE: INT:=0;
RTRIG4,RTRIG5: R_TRIG;
TRIGGER6: BOOL;
TRIGGER7: BOOL;
FF: INT;
GG: INT;
END_VAR
程序代码
RTRIG1(CLK:=TRIGGER_ORIGEN , Q=> TRIGGER);//TRIGGER_ORIGEN调试用强制输入
IF TRIGGER=TRUE THEN
TRIGGER1:=TRUE;
END_IF
TON1(IN:= TRIGGER1, PT:= T30S, Q=> TON1_Q, ET=> );
IF TON1_Q=TRUE THEN
TRIGGER:=FALSE;//复位RTRIG1产生脉冲,实际上不能复位
TRIGGER1:=FALSE;//只能用自定义的TRIGGER1
END_IF
RTRIG2(CLK:=TON1_Q , Q=>TRIGGER3 );
IF TRIGGER3=TRUE THEN
TRIGGER4:=TRUE;
END_IF
TON2(IN:= TRIGGER4, PT:= T30S, Q=> TON2_Q, ET=> );
IF TON2_Q=TRUE THEN
TRIGGER:=TRUE; //同上,不能改变值
TRIGGER1:=TRUE; //TON1使能
TRIGGER4:=FALSE;
END_IF
//查看PLC周期扫描,R_TRIG功能块输出
RTRIG3(CLK:= TRIGGER_ORIGEN, Q=> TRIGGER5);
RTRIG4(CLK:=TRIGGER1 , Q=> TRIGGER6);
RTRIG5(CLK:= TRIGGER4, Q=> TRIGGER7);
IF TRIGGER5=TRUE THEN AA:=AA+1;END_IF
IF TRIGGER1=TRUE THEN BB:=BB+1;END_IF
IF TON1_Q=TRUE THEN DD:=DD+1;END_IF
IF TRIGGER4=TRUE THEN CC:=CC+1;END_IF
IF TON2_Q=TRUE THEN EE:=EE+1;END_IF
IF TRIGGER6=TRUE THEN FF:=FF+1;END_IF
IF TRIGGER7=TRUE THEN GG:=GG+1;END_IF
上一篇: CSS全科教程——第一部分:CSS基础