西門子PLC SCL語言開發學習筆記(二)

 

 

今天來說下scl兩個關鍵的點程序員

 

1、按鍵事件

好比地址I0.0是某個按鈕的狀態,他只有True和False兩個狀態,因此咱們要得到按下事件須要咱們本身模擬。編程

#KeyPress := "Btn1" AND NOT #LastKey;函數

#LastKey := "Btn1";spa

這樣經過對#KeyPress判斷是否爲True便可得到一次點擊事件,至關於 |P|code

把上一次的存起來,而後判斷按下,若是你想把按鍵放在鬆開時也能夠。blog

由於大多數事情都是用按鍵觸發的,掌握這一點才能開始跑代碼。事件

 

 

2、定時器

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能代替梯形圖的寫法,作到是個程序員就無門檻

暫時告一段落

相關文章
相關標籤/搜索