PLC 中的文本语言
IEC 61131-3 定义的文本语言包括IL语言和ST语言,SFC元素可以用于这些语言之间的连接。 首先列出文本语言中共同的程序结构元素:
TYPE...END_TYPE VAR...END_VAR
VAR_INPUT...END_VAR VAR_OUTPUT...END_VAR
VAR_IN_OUT...END_VAR VAR_EXTERNAL...END_VAR
VAR_TEMP...END_VAR VAR_ACCESS...END_VAR
VAR_GLOBAL...END_VAR VAR_CONFIG...END_VAR
FUNCTION ... END_FUNCTION FUNCTION_BLOCK...END_FUNCTION_BLOCK
PROGRAM...END_PROGRAM STEP...END_STEP
TRANSITION...END_TRANSITION ACTION...END_ACTION
IL语言
IL语言的形式化语法定义在附录B中,这里介绍IL语言的语义。
指令
IL(instruction list)由指令(instruction)序列组成。每个指令另起一行,包含操作符、可选的限定符、逗号分隔的不少于一个的操作数。指令可以前加一个标签和:
来标识,指令间的空行是允许的。
操作数可以是直接量、枚举值、变量。
操作符、限定符、操作数
一般地,操作符的语义表示为:
result := result OP operand
以
N
结尾的操作符表示操作数取反码。类型不匹配和溢出都会被视为 错误 。
左括号(
表示操作符的求值将被一直延迟到)
出现为止。
功能和功能块
可以通过把功能名放在操作符的域来进行功能调用。功能调用有通过形参调用和直接写实参两种形式,参数间用,
分隔。可以通过RET
指令得到返回值。
功能块的调用可以通过CAL
操作符,操作数为功能块的实例名。功能调用的规则和特性同样适用于功能块调用。
ST语言
这部分定义了ST语言的语义,其语法定义在附录B3中。
表达式
表达式 是一个语言构造,求值后,将产生一个对应这某种数据类型的值。表达式的最大长度是 实现相关 的。
表达式由 操作符 和 操作数 组成,ST语言的操作符见下表;操作数可以是直接量、枚举值、变量、功能调用、或者另一个表达式。功能通过功能名和括号内的参数列表来调用。
编号 | 操作 | 符号 | 优先级 |
---|---|---|---|
1 | 括号 | (表达式) | 最高 |
2 | 功能求值 | 标识符(参数列表) | |
4 | 取负 | - |
|
5 | 取反 | NOT |
|
3 | 指数 | ** |
|
6 | 乘 | * |
|
7 | 除 | / |
|
8 | 模 | MOD |
|
9 | 加 | + |
|
10 | 减 | - |
|
11 | 比较 | >,<.>=,<= |
|
12 | 相等 | = |
|
13 | 不等 | <> |
|
14 | 布尔与 | & |
|
15 | 布尔与 | AND |
|
16 | 布尔异或 | XOR |
|
17 | 布尔或 | OR |
最低 |
表达式中,高优先级的运算符总是先求值,同样优先级的从左到右求值。当一个操作符有两个操作数时,左侧的操作数总是被先求值。
语句
ST语言的语句以;
结尾,其语法见附录B3。语句的最大长度是 实现相关 的。ST语言的语句有10种:赋值、功能块调用、return
、if
、case
、for
、while
、repeat
、exit
、空语句。
赋值语句 将当期变量的值替换为表达式的值,包括三部分:变量名、:=
、表达式。同时,赋值语句可以用来赋功能的返回值,此时用功能名代替变量名。
功能和功能块控制语句 包括调用功能或功能块的机制和调用结束后控制返回调用处的机制。对功能块的调用可以通过实例名加括号内的参数列表。RETURN
语句提供了提前结束功能、功能块、程序的机制。
选择语句 包括if
和case
,根据指定的条件选择一部分继续执行。允许选择的数目是 实现相关 的。
迭代语句 包括WHILE
,REPEAT
和FOR
。后者用于迭代次数已知的情况。迭代语句中出现EXIT
时,最内层循环将被结束。FOR
可以在迭代中对控制变量递增或递减,循环结束后控制变量的值是 实现相关 的。
图形语言
该标准中定义的图形语言包括LD语言和FBD语言,SFC元素可用于它们之间的连接。
共同元素
这里定义了LD、FBD、SFC的共同元素。图形语言元素使用的字符集在第二章给出了定义,使用的图形和半图形元素定义在IOS/IEC 10646-1。并且线可以通过 连接符 扩展。
网络 被定义为互相连接的图形元素(不包括LD语言中的左右电源墙)的最大集合。网络可以用标识符或十进制无符号整数加:
标识,网络与其标签的作用域对其所在程序组织单元应是局部的。
图形语言用来描述概念量在表示控制计划的网络中的流动:
- 功率流:类似继电系统中的电流,用于LD语言中,流向为从左到右;
- 信号流:类似信号处理系统元素间的信号流,用于FBD语言中,流向为一个元素的输出到另一元素的输入。
- 活动流:类似控制流在组织或机电定序器的步骤之间的流动,用于SFC中,流向为从一个步的底部经过合适的转换到后续步的顶部。
网络求值顺序 不一定与其标记或显示顺序相同。同样地,一个网络求值能被重复前,不必对所有网络进行求值。然而,当一个程序组织单元体包含一个或多个网络时,该程序组织单元体网络求值的结果应功能上等价于以下规则:
- 当一个网络元素的所有输入求值后,该网络元素才能求值。
- 一个网络元素的所有输出求值后,该网络元素才能结束求值。
- 当网络的所有元素求值结束后,该网络才能结束求值。
- 网络求值顺序应符合LD和FBD语言中的规定。
当一个功能或功能块的输出被用于网络中处于它前面的功能或功能块的输入,就称该网络存在 回路 ,与之关联的变量称为 反馈变量 。回路的使用应满足如下规则:
- 显式的回路只能出现在FBD语言中。
- 用户应能够使用 实现相关 的方式来决定在显式回路中元素的执行顺序。
- 反馈变量可以使用第二部分定义的机制来初始化,初始值将被用于第一次网络求值。
- 一旦将反馈变量作为输出的元素被求值,新的反馈变量将被使用,直到该元素的下一次求值。
LD和FBD语言中,提供了很多 控制转移 机制。跳转表示为从布尔变量开始的以双箭头结束的信号线,该变量即为跳转条件(如果为直接量TRUE
则表示无条件跳转),跳转的目标应为当前程序组织单元中的网络标签。功能和功能块中的有条件返回应使用RETURN
关键字。
+---+
%IX20---| & |--->>NEXT
%MX50---| |
+---+
NEXT:
+---+
%IX25---|>=1|---%QX100
%MX60---| |
+---+
LD语言
LD程序使得可编程控制器可以使用标准化的图形符号测试和修改数据。这些符号表现为类似继电逻辑电路中的横档构成的网络。LD网络左右都用 电源墙 作为边界:
|
+--- (* 左电源墙 *)
|
|
---+ (* 右电源墙 *)
|
连接 元素表示这ON
或OFF
,分别对应于布尔值1
或0
。 连接状态 是 功率流 的同义词。左电源墙的状态始终为ON
,右电源墙的状态没有定义。
水平的连接表示为水平线,它将紧邻的左侧元素状态传递给紧邻的右侧元素。垂直的连接表示为垂直线,将左侧紧邻元素的状态取OR
后传递给右侧紧邻元素。
---------- (* 水平连接 *)
|
----+----
----+ (* 垂直连接 *)
|
+----
触点 有条件地将左侧水平连接的状态传递到右侧,等效于将左侧状态与某个功能取AND
后传递到右侧。包括:常开触点、常闭出点、正转换检测触点、负转换检测触点。
线圈 将左侧水平连接状态复制到右侧水平连接,并将以左侧状态为参数的某个功能的值存储入与之关联的布尔变量。
| a b c d |
+--( )--| |--+--( )---( )--+
| | e |
| +-----( )-----+
| |
功能和功能块的表示在第二部分已有定义,此外有如下特殊情况:
- 实参连接是可选的,在块外侧挨着形参的地方写合适的数据或者变量。
- 至少一个布尔输入和至少一个布尔输出必须显示在每个块上,以允许功率流通过该块。
在LD语言表示的程序组织单元中,通过自上而下的顺序进行网络求值,除非该顺序被执行控制元素修改。
FBD语言
该部分定义FBD语言,用于可编程控制器的图形编程语言。该语言应尽量与 IEC 60617-12 保持一致,冲突的部分应使用本标准。
第二部分和第四部分第一节规定的共同元素适用于FBD语言的可编程控制器程序的构造和解释。FBD语言使用示例见附录F。
FBD语言元素应使用信号线互相连接,功能块的输出不能被连接在一起。特别地,LD语言中直接相连的OR
结构在FBD语言中是不允许的,应显式地使用OR
块:
| a c | +-----+
+---||--+--()--+ a---| >=1 |---c
| b | | b---| |
+--||---+ | +-----+
| |
(* LD语言OR *) (* FBD语言OR *)
当FBD语言的程序组织单元包含多于一个网络时,制造商应提供 实现相关 方法来让用户能够决定网络求值顺序。
本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2014/07/20/plc-text-lang.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。