2021年6月4日 星期五

PLC ST教學4 - ST語法介紹

結構化語言(Structured TextST)是一種類似 C 語言編程方式,程式碼最大的特色是使用人類孰悉的文字例如: if then else while for ..等文字敘述組合而成,與CPU有關的IL指令比較,結構化語言接近人類語法所以被稱為高階語言,IL指令式(LD)被稱為低階指令,IL指令專長在處理01的信號;ST語言則擅長在處理數值資料。當今的工業自動化已朝向智慧化發展,使用AD/DA、伺服馬達、視覺影像、機器手臂已經非常普遍,PLC程式也必須大量的處數值運算,可以預見未來結構化語言會逐漸成為PLC編碼的主流。

ST 程式要素

敘述句(Statement)是 ST 語言中最基本的執行單位,它代表的是一個階梯圖區段(NETWORK),敘述句由表達式(Expression)加上分號 ”;” 而成,而表達式由運算元(Operand)與運算子(Operator)組合而成。

運算元是資料,運算子是處理資料的方法。

EX:

D0 := D1+10;

敘述句: D0 := D1+10;

表達式: D1+10

運算元: D1,10

運算子: + 

布林資料做ANDOR NOT位元邏輯運算。

EX:

M0 := X0.0 AND X0.1; 

數值資料做 加,減,乘,除 算術運算及 < > <= >= 比較運算。

EX:

M0 := (D0 >= 100);

假如 D0的數值大於等於100M0 ON;否則 M0 OFF 

在(   * )符號之間的文字為註解不會進行編譯,程式中多寫注解以便後續維護。 

ST 語言中使用常數時,其格式如下。

10 進制:23456

16 進制:16#5BA0

8 進制:8#55640

2 進制:2#101101110100000

字串:”XYZ 

BOOLTRUE FALSE 

ST 語法運算子表。



 











結構化語言包括3種結構:

l   順序結構:依照程式編寫順序,依序一行一行執行,用上表運算子組成的敘述屬順序結構。

指定結構 :=

語法

範例

<Var> := <Expressions>

a := b;

 

範例說明

b值指定(傳送)給a裝置或變數符號。

 

l   分歧結構(判斷結構):依判斷示結果(True False) 21執行,有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
<Value 1>:
   statements 1;
<Value 2>:
    statements 2;
    ...
<Value n>:
    statements n;
ELSE
    statements
END_CASE;

CASE f OF

   1:  g := 10;

   2:  g := 20;

ELSE

    g := 0;

END_CASE;

範例說明

判斷 的值是否為1,若是,則執行 g := 10; 後離開此結構;若否,繼續判斷 的值是否為 2,若是,則執行 g := 20; 後離開此結構;若否,則執行關鍵字「ELSE」之後的 g := 0; 後離開。

 

l   重複結構(迴圈結構):重複執行程式待條件成立後即離開迴圈,繼續執行下一行程式,有3種語法 REPEATWHILEFOR

迴圈結構 REPEAT

語法

範例

REPEAT
   statements;
UNTIL <Boolean expression>
END_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
    statements;
END_WHILE;

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;

範例說明

先將變數 設為初始值 1,假如變數 h 值小於終點值10,執行 a := a + h;  之後再將變數h的內容值加上增量值2,接著再判斷變數 h 值是否小於終點值10,若是,則繼續執行 a := a + h; 及 的內容值加上增量值2;直到 值大於終點值10,則程式便會離開 FOR 結構。 

沒有留言:

張貼留言