-
ST
(結構化文本語言(ST))
鎖定
結構化文本/結構式文件編程語言(英語:Structured text)也稱為ST語言,是為可編程邏輯控制器(PLC)設計的編程語言,是相關的IEC 61131-3標準中支援幾種語言之一[1]。結構式文件編程語言是支援塊狀結構(block structured)的高階語言,以Pascal為 基礎,語法也類似Pascal。所有IEC 61131-3的語言都支援IEC61131通用元素(IEC61131 Common Elements)。其變數及函式呼叫是由IEC61131通用元素所定,因此同一個程式中可以使用IEC 61131-3中的不同語言。
- 中文名
- 結構化文本/結構式文件編程語言
- 外文名
- Structured text
STST的構成
結構化文本是IEC 61131-3標準支持的五種語言之一,專為可編程邏輯控制器(PLC)設計。它是一種塊結構的高級語言,在語法上類似於它所基於的Pascal。所有語言都共享IEC61131公共元素。變量和函數調用由公共元素定義,因此可以在同一程序中使用IEC 61131-3標準中的不同語言。
結構式文件編程語言支援複雜的敍述及巢狀指令:
- 循環(REPEAT-UNTIL; WHILE-DO)
- 條件式執行(IF-THEN-ELSE; CASE)
- 函數(SQRT(), SIN())
ST範例
(* 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
STST 表達式
ST 語言中的表達式由運算符和操作數組成。操作數可以是常量、變量、函數調用或另一
個表達式。表達式的計算通過執行具有不同優先級的運算符完成。有最高優先級的運算符先
被執行,然後依次執行下一個優先級的運算符,直到所有的運算符被處理完。有相同優先級
的運算符按從左到右的順序執行。
個表達式。表達式的計算通過執行具有不同優先級的運算符完成。有最高優先級的運算符先
被執行,然後依次執行下一個優先級的運算符,直到所有的運算符被處理完。有相同優先級
的運算符按從左到右的順序執行。
STST 指令
賦值
執行賦值操作時,等號左邊是操作數(變量或地址),右邊是被賦予的表達式的值。例
如:Var1 := Var2 * 10;
調用功能塊
通過寫入功能塊實例的名字,並且在隨後的圓括號中賦給參數值來調用功能塊。
舉例
變量聲明:
TPInst:TP;
VarBOOL1: BOOL;
執行賦值操作時,等號左邊是操作數(變量或地址),右邊是被賦予的表達式的值。例
如: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
<IF 指令>
{ELSIF <邏輯表達式1> THEN
<ELSE IF 指令1>
ELSIF <邏輯表達式 n> THEN
<ELSE IF 指令 n>
ELSE
<ELSE 指令>}
END_IF;
其中{}的部分可選。
如果<邏輯表達式>返回TRUE,那麼只有<IF 指令>被執行,其它的指令不被執行。同樣,
從<邏輯表達式1>開始,相繼執行邏輯表達式,直到其中一個表達式返回TRUE 為止,返回
TRUE 的邏輯表達式對應的指令被執行。
程序:
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 的邏輯表達式對應的指令被執行。
如果沒有邏輯表達式生成TRUE,那麼只有<ELSE 指令>被執行。
舉例
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 指令>
舉例
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 指令>
END_CASE;
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;
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;
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:9次歷史版本
- 最近更新: w_ou