結構化語言(Structured Text,ST)是一種類似 C 語言編程方式,程式碼最大的特色是使用人類孰悉的文字例如: if then else, while, for ..等文字敘述組合而成,與CPU有關的IL指令比較,結構化語言接近人類語法所以被稱為高階語言,IL指令式(或LD)被稱為低階指令,IL指令專長在處理0跟1的信號;ST語言則擅長在處理數值資料。當今的工業自動化已朝向智慧化發展,使用AD/DA、伺服馬達、視覺影像、機器手臂已經非常普遍,PLC程式也必須大量的處數值運算,可以預見未來結構化語言會逐漸成為PLC編碼的主流。
ST 程式要素
敘述句(Statement)是 ST 語言中最基本的執行單位,它代表的是一個階梯圖區段(NETWORK),敘述句由表達式(Expression)加上分號 ”;”
而成,而表達式由運算元(Operand)與運算子(Operator)組合而成。
運算元是資料,運算子是處理資料的方法。
EX:
D0 := D1+10;
敘述句: D0 := D1+10;
表達式: D1+10
運算元: D1,10
運算子: +
布林資料做AND,OR及 NOT位元邏輯運算。
EX:
M0 := X0.0 AND X0.1;
數值資料做 加,減,乘,除 算術運算及 <, > ,<= ,>= 比較運算。
EX:
M0 := (D0 >=
100);
假如 D0的數值大於等於100,M0 ON;否則 M0 OFF。
在( * 與 * )符號之間的文字為註解不會進行編譯,程式中多寫注解以便後續維護。
在 ST 語言中使用常數時,其格式如下。
10 進制:23456
16 進制:16#5BA0
8 進制:8#55640
2 進制:2#101101110100000
字串:”XYZ”
BOOL:TRUE 或 FALSE。
ST 語法運算子表。
結構化語言包括3種結構:
l 順序結構:依照程式編寫順序,依序一行一行執行,用上表運算子組成的敘述屬順序結構。
指定結構 :=
語法 |
範例 |
<Var> := <Expressions> |
a :=
b; |
範例說明
將b值指定(傳送)給a裝置或變數符號。
l 分歧結構(判斷結構):依判斷示結果(True或 False) 2擇1執行,有2種語法 IF, CASE。
分歧結構 IF
語法 |
範例 |
IF <Boolean
expression 1> THEN statements; ELSIF
<Boolean expression 2> THEN statements; . . ELSIF
<Boolean expression n> THEN statements; ELSE statements; END_IF; |
IF
d<e THEN f:=1; ELSIF
d=e THEN f:=2; ELSE f:=3; END_IF; |
範例說明
假如 d<e 為真(True)時,然後執行f:=1後離開;否則假如 d=e為真時,
然後執行f:=1後離開;否則執行f:=3後結束。
分歧結構 CASE
語法 |
範例 |
CASE
<Var1> OF |
CASE f OF 1:
g := 10; 2:
g := 20; ELSE g := 0; END_CASE; |
範例說明
判斷 f 的值是否為1,若是,則執行 g := 10; 後離開此結構;若否,繼續判斷 f 的值是否為 2,若是,則執行 g := 20; 後離開此結構;若否,則執行關鍵字「ELSE」之後的 g := 0; 後離開。
l 重複結構(迴圈結構):重複執行程式待條件成立後即離開迴圈,繼續執行下一行程式,有3種語法 REPEAT,WHILE及FOR。
迴圈結構 REPEAT
語法 |
範例 |
REPEAT |
REPEAT i := m + n; UNTIL
i < 100 END_REPEAT; |
範例說明
先執 i := m + n; 後再判斷 i
< 100 的值是否為真(True),若其值為真,則程式會直接離開此結構;若為否(False),則結構內部的程序便會重複執行 i := m + n;,直 i < 100 值為真(True)之後才會離開。
迴圈結構 WHILE
語法 |
範例 |
WHILE
<Boolean expression> DO |
WHILE m > 1
DO a := a + m; END_WHILE; |
範例說明
先判斷假如 m > 1 的值是否為真(True),若為真,則程式便會重複執行 a := a + m;,直到 m > 1值為否(False)之後才會離開。
迴圈結構 FOR
語法 |
範例 |
FOR <Var >
:= <start value> TO <end value> {BY <increment> } DO statements; END_FOR;
|
FOR h:=1 TO 10
BY 2 DO a := a + h; END_FOR; |
範例說明
先將變數 h 設為初始值 1,假如變數 h 值小於終點值10,執行 a := a + h; 之後再將變數h的內容值加上增量值2,接著再判斷變數 h 值是否小於終點值10,若是,則繼續執行 a := a + h; 及 h 的內容值加上增量值2;直到 h 值大於終點值10,則程式便會離開 FOR 結構。
沒有留言:
張貼留言