1. 程式人生 > >TwinCAT3中TON和R_TRIG用法體會

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