複製鏈接
請複製以下鏈接發送給好友

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中的不同語言。
結構式文件編程語言類似於PASCALC語言,因此可利用與微電腦及個人電腦相同的程式設計技術,進行階梯圖所難以執行的複雜計算,完成程式的建立。常用的程式及迴路可透過FB(功能區塊)的建立輕易地重複利用。
中文名
結構化文本/結構式文件編程語言
外文名
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;
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 的邏輯表達式對應的指令被執行。
如果沒有邏輯表達式生成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 指令>
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;