今天來講下scl兩個關鍵的點
一、按鍵事件
比如地址I0.0是某個按鈕的狀態,他只有True和False兩個狀態,所以我們要獲得按下事件需要我們自己模擬。
#KeyPress := "Btn1" AND NOT #LastKey;
#LastKey := "Btn1";
這樣通過對#KeyPress判斷是否為True即可獲得一次點擊事件,相當於 |P|
把上一次的存起來,然后判斷按下,如果你想把按鍵放在松開時也可以。
因為大多數事情都是用按鍵觸發的,掌握這一點才能開始跑代碼。
二、定時器
PLC在梯形圖中使用定時器很困難,比如TON 5秒,需要輸入一直保持True,持續5s后輸出變為True,TOF則需要輸入從True變成False,然后持續5秒后輸出False,自帶各種邏輯,一旦碰到復雜的條件判斷頭都暈了,我是只能做到間隔時間打開幾個燈,但要做另一個按鈕還能間隔關上就不會了。
我們寫程序的只需要一個計時器就好了,不需要你帶這么多亂七八糟的邏輯,我們自己決定到時間了干嘛就好了。
1) 使用TON TORN
使用TON很簡單,讓一個變量保持True,然后判斷輸出是否時間到了,時間到了既可以做事情了,同時讓輸入變為False。
TORN則還含有Reset功能,他能累計計時,同時能取到計時了多久,下面這個程序展示了一開始就給TimerStart設置為True,開始計時並變燈的情況。
下面是代碼塊,不要忘了這是被循環不斷執行的,大概功能是第五秒打開一個燈,第10秒再打開一個,到15秒重置, 為了代碼簡單理解就不加各種為了嚴謹的判斷了
#TimerStart := TRUE; // 隨便打開一下,就不寫事件了 "IEC_Timer_0_DB".TONR(IN := #TimerStart, PT := T#15S, // 計時15秒 Q => #TmpOut, //計時完畢,我們不去用這個 R:= #Reset, ET => #Time1);// ET為取出計時了多久 IF #Reset THEN #Reset := FALSE; END_IF; IF #Time1 >= T#5s THEN "Light1" := TRUE; END_IF; IF #Time1 >= T#10s THEN "Light2" := TRUE; END_IF; IF #TmpOut THEN "Light1" := FALSE; "Light2" := FALSE; #Reset := TRUE; END_IF;
2)時鍾存儲器位
首先右鍵PLC進入屬性
找到時鍾存儲器位
我們把地址放到100那里去,這樣子這幾個存儲器里,就會有震盪,不斷在True False之間來回變化,比圖1HZ會在一秒的開始變為True,到一半變為False,再下一秒開始變True,通過他的變化就能計時了
下面這個程序,再按下按鈕1后亮一個燈,過5秒再亮一個,再過5秒再亮一個,關閉時也是間隔滅燈,不考慮打開過程中關閉等情況。
IF #TT <> "Clock_1Hz" THEN //一個不斷根據震盪時間增加的Count 計數器 #Count += 1; END_IF; #TT := "Clock_1Hz"; #KeyPress := "Btn1" AND NOT #LastKey; #LastKey := "Btn1"; IF #KeyPress AND NOT "Light1" THEN // 開燈事件 #TurnOn := TRUE; #TurnOff := FALSE; #Count := 0; //重置計數器 END_IF; IF #KeyPress AND "Light1" THEN // 關燈事件 #TurnOn := FALSE; #TurnOff := TRUE; #Count := 0; END_IF; IF #TurnOn THEN // 持續處理開燈 "Light1" := TRUE; IF #Count >= 5 * 2 THEN "Light2" := TRUE; ELSIF #Count >= 20 THEN "Light3" := TRUE; END_IF; END_IF; IF #TurnOff THEN "Light1" := FALSE; IF #Count >= 10 THEN "Light2" := FALSE; ELSIF #Count >= 20 THEN "Light3" := FALSE; END_IF; END_IF;
3) 時間函數
其實PLC里面本來也有很多時間函數,比如獲取當前機器時間,比較時間差等,我們完全可以很靈活的去使用這些方法,變得和編程無異,這里就不介紹了
結語:我們可以識別按鈕事件,然后獲得了好用的計時器后,scl的邏輯處理剩下的就都是寫代碼了和調方法了,沒有什么能難倒我們程序員了
SCL邏輯比梯形圖更嚴謹明白,復雜邏輯控制更簡單,是我們程序員的好幫手。
以后會繼續挖掘SCL的寫法,教大家SCL能代替梯形圖的寫法,做到是個程序員就無門檻
暫時告一段落