TwinCAT3中TON和R_TRIG用法體會
阿新 • • 發佈:2019-01-05
程式碼在文後
使用兩個定時器實現自動交替定時。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