ST語言是IEC61131-3中規定的5中標准語言之一,目前常用見品牌的PLC都支持這種語言(施耐德,AB可以直接選擇創建該類型的程序段或者功能塊,西門子的略微麻煩一點),ST語言的一個好處是移植性好,各家的ST語言基本都是類似的,所以如果有一個巨牛逼的算法,用ST語言實現是再好不過的了,這樣可以很容易的在多個品牌的PLC上移植,當前,有個前提條件是在這個算法中不要使用太多的系統功能塊,因為系統功能塊往往都是各個品牌比較個性的東西,會給移植帶來麻煩。另外,ST語言最適合寫一些復雜的算法,個人覺得尤其是對應一些數組的操作,用ST語言是最方便的,當然有梯形圖也能實現,不過遠沒有用ST來的方便。ST語言的語法和pascal非常像,有時候各種語言用多了,就會混,所以這里將ST語言的幾種常用控制語句記錄下來。
1,IF結構:
基本語法是:
IF bool_expression_1 THEN
<邏輯語句>
ELSE IF bool_expression_2 THEN //這兩行可選
<邏輯語句>
ElSE //這兩行可選
<邏輯語句>
END_IF;
舉例:
IF a>b THEN
flag:=1;
ELSE IF a<b THEN
flag:=2;
ELSE
flag:=3;
END_IF;
說明:
IF語句和梯形圖里的常開常閉指令類似,不太推薦用IF語句寫復雜邏輯,bool邏輯還是用梯形圖寫起來方便也直觀,除非對ST語言非常熱愛同時對梯形圖一點不懂。
2,FOR結構:
基本語法是:
FOR
count:= initial_value TO
final_value BY
increment DO
<循環體>
END_FOR;
舉例:
sum:=0;
FOR
i:= 2 TO
100 BY
2 DO
sum:=sum+i; //計算0-100內偶數和,包含100
END_FOR;
說明:
BY可后面跟的步長是可選的,如果沒有默認為1.
如果要提前退出循環,可以在循環內部增加一個判斷條件,配合EXIT語句實現,如下:
FOR
count:= initial_value TO
final_value BY
increment DO
IF bool_expression THEN
EXIT;
END_IF;
END_FOR;
3,CASE結構:
基本語法:
CASE numeric_expression OF
selector_1:
<邏輯語句>
……
selector_n:
<邏輯語句>
ELSE
<邏輯語句>
END_CASE;
舉例:
CASE num OF
1,2,3:
a:=10;
4:
a:=20;
else
a:=100;
END_CASE;
說明:
CASE語句和其他高級語言中的CASE語句很類似,但是少了break,實際上這里的CASE只會執行第一個滿足條件的語句,相當於在每一個選項里自動增加了一個break操作。
4,WHILE結構:
基本語法:
WHILE bool_expression DO
<邏輯語句>
END_WHILE;
舉例:
i:=0;
sum:=0;
WHILE i=100 DO
sum:=sum+i;
i:=i+1;
END_WHILE;
說明:
WHILE和FOR幾乎是可以通用的,隨個人喜好用吧。
基本結構就上面幾種,上面的語法參照了AB的資料,不同品牌之間可能略有區別,具體使用可以參考具體品牌的手冊。