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廠家的編程語言合理地吸收、借鑒的基礎上形成的一套針對工業(yè)控制系統(tǒng)的國際編程語言標準,它不但適用于PLC系統(tǒng),而且還適用于更廣泛的工業(yè)控制領域;IEC 1131-3 的編程工具提供對現(xiàn)場總線系統(tǒng)的支持,并對現(xiàn)場總線裝置的軟件設計產(chǎn)生了很大影響。
本專題將分兩部分介紹IEC 1131-3的編程語言,本文是IEC 1131-3編程語言的第一部分,重點介紹IEC 1131-3的兩種文本化編程語言;第二部分重點介紹IEC 1131-3的兩種三種圖形化編程語言,將在下一篇文章作介紹。
一、結構化文本(ST)
結構化文本(ST)是一種高級的文本語言,可以用來描述功能,功能塊和程序的行為,還可以在順序功能流程圖中描述步、動作和轉變的行為。
結構化文本(ST)語言表面上與PASCAL語言很相似,但它是一個專門為工業(yè)控制應用開發(fā)的編程語言,具有很強的編程能力用于對變量賦值、回調功能和功能塊、創(chuàng)建表達式、編寫條件語句和迭代程序等。結構化文本(ST)非常適合應用在有復雜的算術計算的應用中。
結構化文本(ST)程序格式自由,可以在關鍵詞與標識符之間任何地方插入制表符、換行字符和注釋。對于熟悉計算機高級語言開發(fā)的人員來說,結構化文本(ST)語言更是易學易用。此外,結構化文本(ST)語言還易讀易理解,特別是當用有實際意義的標識符、批注來注釋時,更是這樣。
1.1 操作符
結構化文本(ST)定義了一系列操作符用于實現(xiàn)算術和邏輯運算,如邏輯運算符:AND,&,XOR,OR; 算術運算符:<, >, <=, >=, =, <>, +, -, MOD, / 等,此外,還定義了這些操作符的優(yōu)先級。如下是操作符預算的兩個例子:
Start := Oilpress AND Stream AND Pump;
V : = K*(-W*T)
1.2 賦值語句
結構化文本(ST)程序既支持很簡單的賦值語句,如 X:=Y, 也支持很復雜的數(shù)組或結構賦值,如Profile[3]:=10.3+SQRT((Rate+2.0)), Alarm.TimeOn:=RCT1.CDT。
1.3在程序中調用功能塊
在結構化文本(ST)程序中可以直接調用功能塊。功能塊在被調用以前,輸入?yún)?shù)被分配為缺省值;在調用后,輸入?yún)?shù)值保留為最后一次調用的值。功能塊調用的格式如下:
FunctionBlockInstance(
InputParameter1:=ValueExpression1,
InputParameter2:=ValueExpression2, …);
ValueExpression1……ValueExpressionN是符合功能塊數(shù)據(jù)類型輸入變量,InputParameter1……InputParameterN功能塊的輸入?yún)?shù)。FunctionBlockInstance是要調用的功能塊。
1.4結構化文本(ST)程序中的條件語句
條件語句的功能是,某一條件滿足時執(zhí)行相應的選擇語句。結構化文本(ST)有如下的條件語句:
l IF …THEN…ELSE條件語句
該選擇語句依據(jù)不同的條件分別執(zhí)行相應THEN及ELSE語句。該條件語句可以嵌套入另一條件語句中,以實現(xiàn)更復雜的條件語句。條件語句的格式如下:
IF THEN
ELSE
< statements2…>
END_IF;
“boolean expression”可以是“true”或“false”,根據(jù)“true”或“false”的情況,程序執(zhí)行相應的statements1或statements2語句。
l CASE 條件語句
該選擇語句的執(zhí)行方向取決于CASE語句的條件, 并有一返回值。實例見最后的應用舉例。該條件語句的格式如下:
CASEOF
< integer selector value1> : < statements1…>
< integer selector value2> : < statements2…>
……
ELSE
< statements …>
END_CASE;
“integer expression”可以是一個數(shù)值,根據(jù)數(shù)值的不同執(zhí)行相應的statements1或statements2等語句。
1.5 結構化文本(ST)程序中的迭代語句
迭代語句適用于需要一條或多條語句重復執(zhí)行許多次的情況,迭代語句的執(zhí)行取決于某一變量或條件的狀態(tài)。應用迭代語句應避免迭代死循環(huán)的情況。
l FOR…DO
該迭代格式語句允許程序依據(jù)某一整型變量迭代。該迭代格式語句格式如下:
FOR
TO
BY DO
END_FOR
“initialize iteraion variable”是迭代開始的計數(shù)值,“final value expression” 迭代結束的計數(shù)值。迭代從“initialize iteraion variable”開始,每迭代一次,計數(shù)值增加“increment expression”,計數(shù)值增加到“final value expression”,迭代結束。
結構化文本(ST)程序中還有其它的迭代語句,如WHILE … DO,REPEAT … UNTIL等,迭代原理與FOR…DO 格式基本相同。此外,結構化文本(ST)的迭代語句中還有EXIT,RETURN兩種格式,分別用于程序的返回和退出。
1.6 編程舉例:用結構化文本(ST)程序編功能塊
本程序是一用結構化文本(ST)程序編功能塊的例子。該實例描述的是如何用功能塊控制箱體中的流體,箱體可以通過閥門被注滿和倒空,如圖所示,箱體的重量由一個稱重單元監(jiān)視。功能塊通過比較兩個輸入值FullWeight和EmptyWeight以確定箱體是滿的還是空的。
該功能塊提供了一個“Command”輸入,該輸入有四種狀態(tài),1.給箱體加水;2. 保持不變;3.起動“Stirrer”;4. 清空箱體。實現(xiàn)該功能塊算法的結構化文本(ST)程序如下:
(*箱體狀態(tài)*)
TYPE_T_STATE: (FULL,NOT_FULL,EMPTIED);END_TYPE;
(*閥門狀態(tài)*)
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廠商的指令表語言的基礎上形成的一種標準語言,可以用來描述功能,功能塊和程序的行為,還可以在順序功能流程圖中描動作和轉變的行為。
指令表語言能用于調用,如有條件和無條件地調用功能塊和功能,還能執(zhí)行賦值以及在區(qū)段內執(zhí)行有條件或無條件的轉移。指令表語言不但簡單易學,而且非常容易實現(xiàn),可不通過編譯和連編就可以下載到PLC。IEC 1131-3的其它語言如功能塊圖、結構化文本等都可以轉換為指令表語言。
2.1指令表語言結構
指令表語言是由一系列指令組成的語言。每條指令在新一行開始,指令由操作符和緊隨其后的操作數(shù)組成,操作數(shù)是指在IEC 1131-3的“公共元素”中定義的變量和常量。有些操作符可帶若干個操作數(shù),這時各個操作數(shù)用逗號隔開。指令前可加標號,后面跟冒號,在操作數(shù)之后可加注釋。
IL是所謂面向累加器(Accu)的語言,即每條指令使用或改變當前Accu內容。IEC 1131-3將這一Accu標記為“結果”。通常,指令總是以操作數(shù)LD(“裝入Accu命令”)開始。指令表程序如下所示:
2.2 指令表操作符
IEC 1131-3指令表包括四類操作符:一般操作符、比較操作符、跳轉操作符和調用操作符。
2.2.1一般操作符符
指令表一般操作符是指在程序中經(jīng)常會用到的操作符.
l 裝入指令:LD N等。
l 邏輯指令:AND N( (與指令)、OR N( (或指令)、XOR N( (異或指令)等。
l 算術指令:ADD ((加指令)、SUB((減指令)、MUL ( (乘指令),DIV((除指令)、MOD ( (取模指令)等。
2.2.2 比較指令:GT ( (大于)、GE ( (大于等于)、EQ( (等于)、 NE( (不等于)、 LE( (小于等于)、 LT( (小于)等。
2.2.3 跳轉及調用操作符
JMP C,N (跳轉操作符)、 CALL C,N (調用操作符)等。
2.3 在指令表中調用功能及功能塊
在IEC 1131-3指令表的程序中,可以直接調用功能塊和功能。指令表的功能塊調用有
種格式,功能調用有兩種格式。詳細的調用可見IEC 1131-3標準。
2.4 用指令表定義功能及功能塊
指令表可用于定義功能塊和功能。當用指令表定義功能時,功能的返回值是結果寄存
內的最新值;當用指令表定義功能塊時,指令表引用功能塊的輸入?yún)?shù)(VAR_INPUT),并且把值寫到輸出參數(shù)(VAR_OUPUT)。
2.5 指令表與其它語言的移植性
指令表語言轉換為其它語言是非常困難的,除非指令表操作符的使用范圍及書寫格式受到嚴格的限制,才有可能實現(xiàn)轉換。IEC 1131-3的其它語言較容易轉換為指令表。
2.6 IL的編程實例
本例是一個用指令表程序定義功能的實例,功能描述的計算平面上兩點的移動距離。 兩點X,Y的坐標如下圖所示。
用結構化文本描述的兩點間距離的計算公式為:Travel_distance:=SQRT((X1-X2)*(X1-X2)+(Y1-Y2)*(YI-Y2)))。TMax是X,Y兩點見的最大距離,當計算值小于TMax時,說明計算正確;當計算值大于TMax時,說明X,Y兩點間的距離超出了最大距離,在這種情況下,功能是沒有輸出的。
用指令表編寫的該功能的函數(shù)TRAVEL()如下:
FUNCTION TRAVEL : REAL
VAR_INPUT
X1,X2,Y1,Y2 : REAL (*點X,Y坐標*)
TMax : REAL (*最大移動距離*)
END_VAR
VAR
Temp : REAL; (*中間值*)
END_VAR
LD Y1
SUB Y2 (*計算Y2-Y1*)
ST Temp (*將Y2-Y1值存入Temp *)
MUL Temp (*計算(Y2-Y1)的平方*)
ADD( X1
SUB X2 (*計算(X1-X2)*)
ST Temp (*將(X1-X2)值存入Temp *)
MUL Temp (*計算(X1-X2)的平方*)
) (*將兩平方值相加*)
CAL SQRT (*調平方根函數(shù)*)
ST TRAVEL (*設定計算結果*)
GT TMax (*比TMax 大嗎?*)
JMPC ERR (*是,轉到ERR 執(zhí)行*)
S ENO (*設定ENO *)
ERR:
RET (*錯誤返回,ENO 不輸出*)
END_FUNCTION