『壹』 西門子PLC SCL編程指令講解
在SCL程序編寫中,在邏輯控制或者數據處理分析中,有一類指令我們用得最多,就是程序控制指令,常見的入IF ,Case ,For 和While 等。下面我仔細的講解,有疑問可以留言提出:
圖1 程序控制指令
IF .. THEN 指令
IF 指令含有含有三個分支,分別是Then ,Else 和ElsIF。
圖2 IF 語句
圖3 浮點數比較條件
IF語句應該是SCL裡面最常用的語句了,常用於條件判斷。判斷類型可以是BOOL類型,可以是浮點類型等等,基本上所有類型都可以判斷,只要比較的兩個變數類型是一樣。
在圖2中,AByte 是Byte 類型,因為1在0..255之間,所以1會自動轉化為Byte類型。如果比較的是Abyte類型是256,會是什麼樣子呢?讀者可以自己寫的程序,試驗一下,看看結果,會加深你對數據類型的理解。
上面程序中,首先比如AByte是否和1相等,如果相等則Outvalue的值為1,然後和2比較,如果和2相等,那麼OuValue值為2,如果都滿足條件OuValue 的輸出值則為5。
上述的IF條件語句,也可以用CASE語句來進行表示。CASE的比較類型沒有IF 范圍廣,只有整形才能做為比較條件。
CASE指令
圖4 IF語句的CASE表達方式
從CASE語句表述中,我們發現語句相對於IF表達式來說,更加清晰簡單明了,所以如果需要用到整形條件作為判斷,盡量用CASE來實現,會提高效率。
FOR 指令
FOR指令常用來對數組類型數據進行批量處理,在上一期講解中已經舉過一個例子,下面舉個稍微復雜點的例子。
圖5 FOR循環語句
在FOR程序,我們對數組的每一個索引值進行賦值,同時判斷索引值的奇偶性來進行賦值操作。
圖6 FOR循環語句2
在上面的程序裡面,我們發現有一個關鍵字Continue .當FOR循環執行到該語句的時候,Continue下面的程序都不會執行。所以,當iCout小於15的時候,AArray[iCount]:=iCount賦值語句不會執行。
還有一個地方有點區別,就是FOR 語句後面,多了一個關鍵字 BY 。BY的含義是For 執行的間隔按照BY的設定來執行。如果後面設定為1,則0..99全部執行;如果設定為2,則執行順序為0,2,4,6,8的順序來執行。
上述的FOR循環語句,我們同樣可以採用WHILE循環來實現。
WHILE 指令
圖7 WHILE指令
WHILE循環的表達方式和FOR循環基本類型,但是我們注意一點,這裡面對循環變數,手動進行進行遞進。如果沒有這一句,iCount的值一直為0,循環條件iCount<100將一直為True,WHILE循環會一直執行。所以切記一定執行該語句。
我們還注意到一個關鍵字EXIT,當執行到該指令的時候,WHILE循環會停止執行,FOR指令也是一樣。所以上面的程序,運行下來的情況是,數組的賦值只執行到AArray[81]結束。
GOTO指令
goto指令主要用來執行跳轉過程,可以帶來程序操作的便利性,一般不推薦使用。若操作不當,則會打亂整個程序的邏輯性。
在圖7 中,如果iCount 大於90,那麼,程序就會跳出WHILE 循環執行指定標簽lable13地方程序#iCount=0,繼續從頭開始執行WHILE循環。當然這個操作是毫無意義的,這里只是舉個例子而已。