結構化文本/結構式檔案程式語言(英語:Structured text)也稱為ST語言,是為可程式邏輯控制器(PLC)設計的程式語言,是相關的IEC 61131-3標準中支援幾種語言之一[1]。結構式檔案程式語言是支援塊狀結構(block structured)的高階語言,以Pascal為 基礎,語法也類似Pascal。所有IEC 61131-3的語言都支援IEC61131通用元素(IEC61131 Common Elements)。其變數及函式呼叫是由IEC61131通用元素所定,因此同一個程式中可以使用IEC 61131-3中的不同語言。
結構式檔案程式語言類似於PASCAL及C語言,因此可利用與微電腦及個人電腦相同的程式設計技術,進行階梯圖所難以執行的複雜計算,完成程式的建立。常用的程式及迴路可透過FB(功能區塊)的建立輕易地重複利用。
基本介紹
- 中文名:結構化文本/結構式檔案程式語言
- 外文名:Structured text
ST的構成
- 循環(REPEAT-UNTIL; WHILE-DO)
- 條件式執行(IF-THEN-ELSE; CASE)
- 函式(SQRT(), SIN())
範例
(* simple state machine *)TxtState := STATES[StateMachine];CASE StateMachine OF 1: ClosingValve();ELSE ;; BadCase();END_CASE;
// 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 表達式
個表達式。表達式的計算通過執行具有不同優先權的運算符完成。有最高優先權的運算符先
被執行,然後依次執行下一個優先權的運算符,直到所有的運算符被處理完。有相同優先權
的運算符按從左到右的順序執行。
ST 指令
執行賦值操作時,等號左邊是運算元(變數或地址),右邊是被賦予的表達式的值。例
如:Var1 := Var2 * 10;
調用功能塊
通過寫入功能塊實例的名字,並且在隨後的圓括弧中賦給參數值來調用功能塊。
舉例
變數聲明:
TPInst:TP;
VarBOOL1: BOOL;
程式:
TPInst(IN:= VarBOOL1,PT:= T#5s);(*參數IN 和PT 設定時鐘脈衝的觸發信號和高電平
的長度*)
VarBOOL2:=TPInst.Q;(*輸出脈衝值Q 賦給變數VarBOOL2*)
返回指令
返回指令可以根據條件退出POU。
IF 指令
使用IF 指令可以檢查條件,根據條件執行相應的指令。
語法:
IF <邏輯表達式> THEN
<IF 指令>
{ELSIF <邏輯表達式1> THEN
<ELSE IF 指令1>
ELSIF <邏輯表達式 n> THEN
<ELSE IF 指令 n>
ELSE
<ELSE 指令>}
END_IF;
其中{}的部分可選。
如果<邏輯表達式>返回TRUE,那么只有<IF 指令>被執行,其它的指令不被執行。同樣,
從<邏輯表達式1>開始,相繼執行邏輯表達式,直到其中一個表達式返回TRUE 為止,返回
TRUE 的邏輯表達式對應的指令被執行。
舉例
IF temp<17
THEN heating_on := TRUE;
ELSE heating_on := FALSE;
END_IF;
這裡,如果溫度低於17 度,打開加熱器,反之則保持關閉狀態。
CASE 指令
使用CASE 指令,可以在結構中用一個相同的條件變數表示幾個條件指令。
語法:
CASE <Var1> OF
<Value1>: <指令1>
<Value2>: <指令2>
<Value3, Value4, Value5>: <指令3>
<Value6 .. Value10>: <指令4>
...
<Value n>: <指令n>
ELSE <ELSE 指令>
CASE 指令根據下面的模型來執行:
如果變數<Var1>有值<值 i>,那么<指令i>被執行。
如果變數<Var1>沒有任何指定的值,那么<ELSE 指令>被執行。
如果變數的幾個值都需要執行相同的指令,那么可以把幾個值相繼寫在一起,並且用逗號分
開。這樣,就會有相同的執行指令。
如果對於變數的一個範圍需要執行相同的指令,可以寫入初值和終值,中間用兩個點分開。
這樣,條件就會有相同的執行。
舉例
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;