ST

結構化文本語言(ST)

結徠構化文本/結構式文件編程語言(英語:Structured text)也稱為ST語言,是為可編程邏輯控制器(PLC)設計的編程語言,是相關的IEC 61131-3標準中支援幾種語言之一。結構式文件編程語言是支援塊狀結構(block structured)的高階語言,以Pascal為 基礎,語法也類似Pascal。所有IEC 61131-3的語言都支援IEC61131通用元素(IEC61131 Common Elements)。其變數及函式呼叫是由IEC61131通用元素所定,因此同一個程式中可以使用IEC 61131-3中的不同語言。

結構式文件編程語言類似於PASCAL及C語言,因此可利用與微電腦及個人電腦相同的程式設計技術,進行階梯圖所難以執行的複雜計算,完成程式的建立。常用的程式及迴路可透過FB(功能區塊)的建立輕易地重複利用。

範例


1
2
3
4
5
(* simple state machine *)
TxtState := STATES[StateMachine];
CASE StateMachine OF 1: ClosingValve();
ELSE ;; BadCase();
END_CASE;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// PLC configurationCONFIGURATION DefaultCfg
VAR_GLOBAL
b_Start_Stop : BOOL;
// Global variable to represent a boolean.
b_ON_OFF : BOOL;
// Global variable to represent a boolean.
Start_Stop AT %IX0.0:BOOL;
// Digital input of the PLC (Address 0.0)
ON_OFF AT %QX0.0:BOOL;
// Digital output of the PLC (Address 0.0). (Coil)
END_VAR
// Schedule the main program to be executed every 20 ms
TASK Tick(INTERVAL := t#20ms);
PROGRAM Main WITH Tick : Monitor_Start_Stop;
END_CONFIGURATIONPROGRAM Monitor_Start_Stop
// Actual Program
VAR_EXTERNAL
Start_Stop : BOOL;
ON_OFF : BOOL;
END_VAR
VAR
// Temporary variables for logic handling
ONS_Trig : BOOL;
Rising_ONS : BOOL;
END_VAR
// Start of Logic
// Catch the Rising Edge One Shot of the Start_Stop input
ONS_Trig := Start_Stop AND NOT Rising_ONS;
// Main Logic for Run_Contact -- Toggle ON / Toggle OFF ---
ON_OFF := (ONS_Trig AND NOT ON_OFF) OR (ON_OFF AND NOT ONS_Trig);
// Rising One Shot logic
Rising_ONS := Start_Stop;END_PROGRAM

ST的構成


Structured text is one of the five languages supported by the IEC 61131-3 standard, designed for programmable logic controllers (PLCs). It is a high level language that is block structured and syntactically resembles Pascal, on which it is based. All of the languages share IEC61131 Common Elements. The variables and function calls are defined by the common elements so different languages within the IEC 61131-3 standard can be used in the same program.
結構式文件編程語言支援複雜的敘述及巢狀指令:
• 循環(REPEAT-UNTIL; WHILE-DO)
• 條件式執行(IF-THEN-ELSE; CASE)
• 函數(SQRT(), SIN())

ST 表達式


ST 語言中的表達式由運算符和操作數組成。操作數可以是常量、變數、函數調用或另一
個表達式。表達式的計算通過執行具有不同優先順序的運算符完成。有最高優先順序的運算符先
徠被執行,然後依次執行下一個優先順序的運算符,直到所有的運算符被處理完。有相同優先順序
的運算符按從左到右的順序執行。

ST 指令


賦值
執行賦值操作時,等號左邊是操作數(變數或地址),右邊是被賦予的表達式的值。例
如:Var1 := Var2 * 10;
調用功能塊
通過寫入功能塊實例的名字,並且在隨後的圓括弧中賦給參數值來調用功能塊。
舉例
變數聲明:
TPInst:TP;
VarBOOL1: BOOL;
VarBOOL2: BOOL;
程序:
TPInst(IN:= VarBOOL1,PT:= T#5s);(*參數IN 和PT 設定時鐘脈衝的觸發信號和高電平
的長度*)
VarBOOL2:=TPInst.Q;(*輸出脈衝值Q 賦給變數VarBOOL2*)
返回指令
返回指令可以根據條件退出POU。
IF 指令
使用IF 指令可以檢查條件,根據條件執行相應的指令。
語法:
IF <邏輯表達式> THEN
{ELSIF <邏輯表達式1> THEN
ELSIF <邏輯表達式 n> THEN
ELSE
}
END_IF;
其中{}的部分可選。
如果<邏輯表達式>返回TRUE,那麼只有被執行,其它的指令不被執行。同樣,
從<邏輯表達式1>開始,相繼執行邏輯表達式,直到其中一個表達式返回TRUE 為止,返回
TRUE 的邏輯表達式對應的指令被執行。
如果沒有邏輯表達式生成TRUE,那麼只有被執行。
舉例
IF temp<17
THEN heating_on := TRUE;
ELSE heating_on := FALSE;
END_IF;
這裡,如果溫度低於17 度,打開加熱器,反之則保持關閉狀態。
CASE 指令
使用CASE 指令,可以在結構中用一個相同的條件變數表示幾個條件指令。
語法:
CASE OF
: <指令1>
: <指令2>
: <指令3>
: <指令4>
...
: <指令n>
ELSE
END_CASE;
CASE 指令根據下面的模型來執行:
如果變數有值<值 i>,那麼<指令i>被執行。
如果變數沒有任何指定的值,那麼被執行。
如果變數的幾個值都需要執行相同的指令,那麼可以把幾個值相繼寫在一起,並且用逗號分
開。這樣,就會有相同的執行指令。
如果對於變數的一個範圍需要執行相同的指令,可以寫入初值和終值,中間用兩個點分開。
這樣,條件就會有相同的執行。
舉例
CASE INT1 OF
1, 5: BOOL1 := TRUE;
BOOL3 := FALSE;
2: BOOL2 := FALSE;
BOOL3 := TRUE;
10..20: BOOL1 := TRUE;
BOOL3:= TRUE;
ELSE
BOOL1 := NOT BOOL1;
BOOL2 := BOOL1 OR BOOL2;
END_CASE;