TwinCAT3中TON和R_TRIG用法体会

代码在文后

使用两个定时器实现自动交替定时。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

TwinCAT3中TON和R_TRIG用法体会_第1张图片 

TwinCAT3中TON和R_TRIG用法体会_第2张图片 

 

你可能感兴趣的:(写代码)