今天來說下scl兩個關鍵的點程序員
好比地址I0.0是某個按鈕的狀態,他只有True和False兩個狀態,因此咱們要得到按下事件須要咱們本身模擬。編程
#KeyPress := "Btn1" AND NOT #LastKey;函數
#LastKey := "Btn1";spa
這樣經過對#KeyPress判斷是否爲True便可得到一次點擊事件,至關於 |P|code
把上一次的存起來,而後判斷按下,若是你想把按鍵放在鬆開時也能夠。blog
由於大多數事情都是用按鍵觸發的,掌握這一點才能開始跑代碼。事件
PLC在梯形圖中使用定時器很困難,好比TON 5秒,須要輸入一直保持True,持續5s後輸出變爲True,TOF則須要輸入從True變成False,而後持續5秒後輸出False,自帶各類邏輯,一旦碰到複雜的條件判斷頭都暈了,我是隻能作到間隔時間打開幾個燈,但要作另外一個按鈕還能間隔關上就不會了。ast
咱們寫程序的只須要一個計時器就行了,不須要你帶這麼多亂七八糟的邏輯,咱們本身決定到時間了幹嗎就行了。class
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能代替梯形圖的寫法,作到是個程序員就無門檻
暫時告一段落