IEC 1131-3 的程式設計語言(一):文本化語言
IEC 1131-3國際标準的程式設計語言包括圖形化程式設計語言和文本化程式設計語言。圖形化程式設計語言包括:梯形圖(LD-Ladder Diagram)、功能塊圖(FBD - Function Block Diagram)、順序功能圖(SFC - Sequential Function Chart)。文本化程式設計語言包括:指令表(IL-Instruction List)和結構化文本 (ST-Strutured Text)。IEC 1131-3的程式設計語言是IEC工作組對世界範圍的PLC廠家的程式設計語言合理地吸收、借鑒的基礎上形成的一套針對工業控制系統的國際程式設計語言标準,它不但适用于PLC系統,而且還适用于更廣泛的工業控制領域;IEC 1131-3 的程式設計工具提供對現場總線系統的支援,并對現場總線裝置的軟體設計産生了很大影響。
本專題将分兩部分介紹IEC 1131-3的程式設計語言,本文是IEC 1131-3程式設計語言的第一部分,重點介紹IEC 1131-3的兩種文本化程式設計語言;第二部分重點介紹IEC 1131-3的兩種三種圖形化程式設計語言,将在下一篇文章作介紹。
一、結構化文本(ST)
結構化文本(ST)是一種進階的文本語言,可以用來描述功能,功能塊和程式的行為,還可以在順序功能流程圖中描述步、動作和轉變的行為。
結構化文本(ST)語言表面上與PASCAL語言很相似,但它是一個專門為工業控制應用開發的程式設計語言,具有很強的程式設計能力用于對變量指派、回調功能和功能塊、建立表達式、編寫條件語句和疊代程式等。結構化文本(ST)非常适合應用在有複雜的算術計算的應用中。
結構化文本(ST)程式格式自由,可以在關鍵詞與辨別符之間任何地方插入制表符、換行字元和注釋。對于熟悉計算機進階語言開發的人員來說,結構化文本(ST)語言更是易學易用。此外,結構化文本(ST)語言還易讀易了解,特别是當用有實際意義的辨別符、批注來注釋時,更是這樣。
1.1 操作符
結構化文本(ST)定義了一系列操作符用于實作算術和邏輯運算,如邏輯運算符:AND,&,XOR,OR; 算術運算符:, <=, >=, =, <>, +, -, MOD, / 等,此外,還定義了這些操作符的優先級。如下是操作符預算的兩個例子:
Start := Oilpress AND Stream AND Pump;
V : = K*(-W*T)
1.2 指派語句
結構化文本(ST)程式既支援很簡單的指派語句,如 X:=Y, 也支援很複雜的數組或結構指派,如Profile[3]:=10.3+SQRT((Rate+2.0)), Alarm.TimeOn:=RCT1.CDT。
1.3在程式中調用功能塊
在結構化文本(ST)程式中可以直接調用功能塊。功能塊在被調用以前,輸入參數被配置設定為預設值;在調用後,輸入參數值保留為最後一次調用的值。功能塊調用的格式如下:
FunctionBlockInstance(
InputParameter1:=ValueExpression1,
InputParameter2:=ValueExpression2, …);
ValueExpression1……ValueExpressionN是符合功能塊資料類型輸入變量,InputParameter1……InputParameterN功能塊的輸入參數。FunctionBlockInstance是要調用的功能塊。
1.4結構化文本(ST)程式中的條件語句
條件語句的功能是,某一條件滿足時執行相應的選擇語句。結構化文本(ST)有如下的條件語句:
lIF …THEN…ELSE條件語句
該選擇語句依據不同的條件分别執行相應THEN及ELSE語句。該條件語句可以嵌套入另一條件語句中,以實作更複雜的條件語句。條件語句的格式如下:
IF THEN
ELSE
< statements2…>
END_IF;
“boolean expression”可以是“true”或“false”,根據“true”或“false”的情況,程式執行相應的statements1或statements2語句。
lCASE 條件語句
該選擇語句的執行方向取決于CASE語句的條件, 并有一傳回值。執行個體見最後的應用舉例。該條件語句的格式如下:
CASEOF
< integer selector value1> : < statements1…>
< integer selector value2> : < statements2…>
……
ELSE
< statements …>
END_CASE;
“integer expression”可以是一個數值,根據數值的不同執行相應的statements1或statements2等語句。
1.5 結構化文本(ST)程式中的疊代語句
疊代語句适用于需要一條或多條語句重複執行許多次的情況,疊代語句的執行取決于某一變量或條件的狀态。應用疊代語句應避免疊代死循環的情況。
lFOR…DO
該疊代格式語句允許程式依據某一整型變量疊代。該疊代格式語句格式如下:
FOR
TO
BY DO
END_FOR
“initialize iteraion variable”是疊代開始的計數值,“final value expression” 疊代結束的計數值。疊代從“initialize iteraion variable”開始,每疊代一次,計數值增加“increment expression”,計數值增加到“final value expression”,疊代結束。
結構化文本(ST)程式中還有其它的疊代語句,如WHILE … DO,REPEAT … UNTIL等,疊代原理與FOR…DO 格式基本相同。此外,結構化文本(ST)的疊代語句中還有EXIT,RETURN兩種格式,分别用于程式的傳回和退出。
1.6 程式設計舉例:用結構化文本(ST)程式編功能塊
本程式是一用結構化文本(ST)程式編功能塊的例子。該執行個體描述的是如何用功能塊控制箱體中的流體,箱體可以通過閥門被注滿和倒空,如圖所示,箱體的重量由一個稱重單元監視。功能塊通過比較兩個輸入值FullWeight和EmptyWeight以确定箱體是滿的還是空的。
圖一 水箱控制及功能塊示意圖
該功能塊提供了一個“Command”輸入,該輸入有四種狀态,1.給箱體加水;2. 保持不變;3.起動“Stirrer”;4. 清空箱體。實作該功能塊算法的結構化文本(ST)程式如下:
(*箱體狀态*)
TYPE_T_STATE: (FULL,NOT_FULL,EMPTIED);END_TYPE;
(*閥門狀态*)
TYPE_T_VALVE: (OPEN,SHUT);END_TYPE;
FUNCTION_BLOCK TankControl
VAR_IN (**)
Command:SINT;
Weight :REAL;
FullWeight,EmptyWeight : REAL;
END_VAR
VAR_OUT (**)
FillValve :T_VALVE:=SHUT;
EmptyValve :T_VALVE:=SHUT;
StirSpeed :REAL:=0.0;
END_VAR
VAR
State :=T_STATE :=EMPTYIED;
END_VAR
二、指令表(IL-Instruction List)
IEC 1131-3的指令表(IL-Instruction List)語言是一種低級語言,與彙編語言很相似,是在借鑒、吸收世界範圍的PLC廠商的指令表語言的基礎上形成的一種标準語言,可以用來描述功能,功能塊和程式的行為,還可以在順序功能流程圖中描動作和轉變的行為。
指令表語言能用于調用,如有條件和無條件地調用功能塊和功能,還能執行指派以及在區段内執行有條件或無條件的轉移。指令表語言不但簡單易學,而且非常容易實作,可不通過編譯和連編就可以下載下傳到PLC。IEC 1131-3的其它語言如功能塊圖、結構化文本等都可以轉換為指令表語言。
2.1指令表語言結構
指令表語言是由一系列指令組成的語言。每條指令在新一行開始,指令由操作符和緊随其後的操作數組成,操作數是指在IEC 1131-3的“公共元素”中定義的變量和常量。有些操作符可帶若幹個操作數,這時各個操作數用逗号隔開。指令前可加标号,後面跟冒号,在操作數之後可加注釋。
I
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SN4EDO5UDZwUjZyADNxYGZlF2Y5UTO3AzYjRGN4UjYm9CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)