PLC 中的 SFC 元素
顺序功能图 用于结构化描述PC程序组织单元的内部组织,它使用本标准定义的语言之一,用于执行 顺序控制 功能。
SFC将PC程序组织单元划分为一系列的 步 和 转换 ,它们之间用 有向连接 连起来。每个 步 与一组 动作 关联,每个 转换 与一个 转换条件 关联。
如果一个程序组织单元的任何部分被划分为SFC元素,那么整个程序组织单元都应进行划分。如果一个程序组织单元没有划分,那么整个程序组织单元可被视为单个 动作 。
SFC要求保存状态信息,故可以描述的程序组织单元只有 功能块 和 程序 。
步
步 表示程序组织单元的状态,该状态描述了程序组织单元对于输入输出的行为特性。这些行为规则由其关联的 动作 定义。
步 在图形语言中,表示为包含步名称的块;在文本语言中表示为STEP...END_STEP
构造。 有向连接 表示为步上方的垂直线,或使用文本表示为TRANSITION...END_TRANSITION
构造。
步运行时间 (指从初始化开始)用***.T
表示。当步被置为不活动时,步运行时间置为不活动的时间;当步被激活时,步运行时间被置为T#0s
。
步的状态 可以是激活的或未激活的,文本语言中用***.X
表示,图形语言中用块右侧的连线表示。
程序组织单元的状态 由激活的 步 和内部、输出变量的值定义。其初始状态表示为 初始步 (初始为激活状态的步)、内部和输出变量的初始值。每个 SFC网络 都有且只有一个初始步。初始步表示为双线边缘的块。
步名、步状态、步运行时间的名称的作用域对于其所在的程序组织单元是局部的。 每个SFC图可以拥有的 步 数上限和 步运行时间 的精度是 实现相关 的。
图形语言
|
+-----+
| *** | (* 步 *)
+-----+
|
|
+=======+
|| *** ||
|| || (* 初始步 *)
+=======+
|
文本语言
(* 步 *)
STEP *** :
(* Step body *)
END_STEP
(* 初始步 *)
INITIAL_STEP *** :
(* Step body *)
END_STEP
转换
转换 表示了控制从前面的一个或多个 步 沿着相应的 有向连接 转移到后面的一个或多个 步 。 转换 表示为与表示 有向连接 的垂直线相交的水平线。
与 转换 相关联的 转换条件 有如下表示方法:
- 有向连接 旁放一个ST语言的布尔表达式。
- 有向连接 旁放一个LD语言的网络。
- 有向连接 旁放一个FBD语言的网络。
- 放一个LD或FBD语言的网络,使其输出与 有向连接 通过 连接器 相交。
- 在ST语言中,使用
TRANSITION...END_TRANSITION
构造,应包含TRANSITION FROM
(前面的 步 )TO
(后面的 步 ):=
(指定转换条件)。
- 在IL语言中,使用
TRANSITION...END_TRANSITION
构造,应包含TRANSITION FROM
(前面的 步 )、TO
(后面的 步 )- 另起一行的指令列表(用来计算转换条件)
- 在 有向连接 右边放一个 转换名 ,该标识符应引用一个
TRANSITIN...END_TRANSITINO
构造。
转换条件的名称的作用域对于其所在的程序组织单元是局部的。 在计算转换条件时如果产生副作用(如对除转换条件的变量赋值)将会被视为 错误 。 每个SFC图,每个 步 可以拥有的 转换 数上限是 实现相关 的。
示例:
ST布尔表达式
|
+-----+
|STEP7|
+-----+
|
+ %IX2.4 & %IX2.3
|
+-----+
|STEP8|
+-----+
|
图形网络
(* LD *) |
+-----+
|STEP7|
+-----+
| %IX2.4 %IX2.3 |
+---||-----||--------+
| |
+-----+
|STEP8|
+-----+
|
(* FBD *) |
+-----+
|STEP7|
+-------+ +-----+
| & | |
%IX2.4---| |-----+
%IX2.3---| | |
+-------+ +-----+
|STEP8|
+-----+
|
连接器
|
+-----+
|STEP7|
+-----+
|
>TRANX>-------+
|
+-----+
|STEP8|
+-----+
|
| %IX2.4 %IX2.3
+---||-----||----->TRANX>
|
ST语言
STEP STEP7: END_STEP
TRANSITION FROM STEP7 TO STEP8
:= %IX2.4 & %IX2.3 ;
END_TRANSITION
STEP STEP8: END_STEP
IL语言
STEP STEP7: END_STEP
TRANSITION FROM STEP7 TO STEP 8:
LD %IX2.4
AND %IX2.3
END_TRANSITION
STEP STEP8: END_STEP
LD语言
TRANSITION TRAN78 FROM STEP7 TO STEP8:
| |
| %IX2.4 %IX2.3 TRAN78 |
+---||-----||------( )---+
| |
END_TRANSITION
转换名
|
+-----+
|STEP7|
+-----+
|
+ TRAN78
|
+-----+
|STEP8|
+-----+
|
动作
每个 步 应包含0个或更多的 动作 。没有关联动作的步被视为具有WAIT
功能,等待下一个转换条件变为TRUE
。
动作 可以是:
- 布尔变量
- 一组IL指令
- 一组ST语句
- 一组LD横档
- 一组FBD网络
- SFC图
声明
支持SFC元素的PC实现至少应支持一种以下的动作声明机制。
动作 的作用域对于它的声明所在的程序组织单元是局部的。
LD语言
+----------------------------------------+
| ACTION_4 |
+----------------------------------------+
| | %IX1 %MX3 S8.X %QX17 | |
| +---||-----||----||-----()---+ |
| | | |
| | +------+ | |
| +----|EN ENO| %MX10 | |
| | C--| LT |----------(S)---+ |
| | D--| | | |
| | +------+ | |
+----------------------------------------+
SFC元素
+----------------------------------------+
| OPEN_VALVE_1 |
+----------------------------------------+
| | ... |
| +=================+ |
| || VALVE_1_READY || |
| +=================+ |
| | |
| + STEP8.X |
| | |
| +-----------------+ +---+-----------+ |
| | VALVE_1_OPENING |--| N |VALVE_1_FWD| |
| +-----------------+ +---+-----------+ |
| | ... |
+----------------------------------------+
FBD语言
+----------------------------------------+
| ACTION_4 |
+----------------------------------------+
| +---+ |
| %IX1--| & | |
| %MX3--| |--%QX17 |
| S8.X---------| | |
| +---+ FF28 |
| +----+ |
| | SR | |
| +------+ | Q1 |-%MX10 |
| C--| LT |--| S1 | |
| D--| | +----+ |
| +------+ |
+----------------------------------------+
ST语言
ACTION ACTION_4:
%QX17 := %IX1 & %MX3 & S8.X ;
FF28(S1 := (C<D));
%MX10 := FF28.Q;
END_ACTION
IL语言
ACTION ACTION_4:
LD S8.X
AND %IX1
AND %MX3
ST %QX17
LD C
LT D
S1 FF28
LD FF28.Q
ST %MX10
END_ACTION
与步关联
支持SFC元素的PC实现应至少支持一种以下的动作与步的关联机制。
每步中的动作上限是 实现相关 的。
图形表示
| (* 动作块 *)
+----+ +-----+----------+---+
| S8 |--| L | ACTION_1 |DN1|
+----+ |t#10s| | |
| +-----+----------+---+
+ DN1
|
| (* 连续的动作块 *)
+----+ +-----+---------------------+---+
| S8 |--| L | ACTION_1 |DN1|
+----+ |t#10s| | |
| +-----+---------------------+---+
+DN1 | P | ACTION_2 | |
| +-----+---------------------+---+
| | N | ACTION_3 | |
| +-----+---------------------+---+
(* 动作块的d字段 *)
+-----+----------------------+---+
----| N | ACTION_4 | |---
+-----+----------------------+---+
| %QX17:=%IX1&%MX3&S8.X; |
| FF28 (S1 := (C<D)); |
| %MX10 := FF28.Q; |
+--------------------------------+
文本表示
STEP S8:
ACTION_1(L,t#10s,DN1) ;
ACTION_2(P) ;
ACTION_3(N) ;
END_STEP
动作块
动作块 是包括一个布尔变量和一个动作限定符的图形元素,用来产生激活条件。
可选的指示符(c
字段)可以被指定的动作赋值,来表示该动作的完成、超时、错误等。如果没有指定c
字段,如果b
字段指定了该动作为布尔变量,则该变量在需要的时候应被解释为c
字段,如果b
字段没有指定布尔变量,c
的值应被视为FALSE
。
多个 动作块 可以在图形中相连,此时有多个指示符变量,但只能有单个共同的布尔输出变量。
除了与 步 相关联, 动作块 也可作为图形元素用于LD或FBD语言。
+-----+--------------+-----+
---| "a" | "b" | "c" |---
+-----+--------------+-----+
| "d" |
| |
+--------------------------+
其中:
- a: 限定符
- b: 动作名
- c: 指示符
- d: 动作,可以采用:IL语言,ST语言,LD语言,FBD语言
动作块在LD/FBD图中使用
(* LD *)
| S8.X %IX7.5 +---+------+---+ OK1 |
+--| |----| |----| N | ACT1 |DN1|--( )--+
| +---+------+---+ |
(* FBD *)
+---+ +---+------+-----+
S8.X---| & |-----| N | ACT1 | DN1 |---OK1
%IX7.5---| | +---+------+-----+
+---+
动作限定符
每个动作块、步/动作关联都有一个相应的 动作限定符 ,如下表
限定符 | 解释 | 限定符 | 解释 |
---|---|---|---|
None | 非存储的 | N | 非存储的 |
R | 重载的复位 | S | 设置(存储) |
L | 限制时间 | D | 延迟时间 |
P | 脉冲 | SD | 存储和延迟时间 |
DS | 延迟和存储 | SL | 存储和限制时间 |
P1 | 脉冲(上升沿) | P0 | 脉冲(下降沿) |
动作控制
动作控制应在功能上等效于下列规则:
- 每个动作应与一个
ACTION_CONTROL
功能块实例的功能等价体相关联。当动作被声明为布尔变量时,该功能块的输出Q
即为该变量的状态;当动作被声明为语句或网络时,如果该功能块输出A
为TRUE
则应连续地执行,此时动作标志Q
可以通过功能块实例来只读地访问,实例名即为当前动作名,如ACTION1.Q
; - 如果对
ACTION_CONTROL
的一个布尔输入相应的限定符等效于输入名称(N
,R
,S
,L
,D
,P
,P0
,P1
,SD
,DS
,SL
),则称与 步 或 动作块 有关联。如果至少一个关联是激活的,则ACTION_CONTROL
的该布尔输入的值为TRUE
。 ACTION_CONTROL
的T
输入的值应为一个活动关联的时间相关限定符(L
,D
,SD
,DS
,SL
)的时间部分的值。- 以下的情况将被视为 错误
- 一个动作有多个活动关联具有时间相关限定符。
- 当
ACTION_CONTROL
的SL_FF
的Q1
输出值为TRUE
时,SD
输入值为TRUE
。 - 当
ACTION_CONTROL
的SD_FF
的Q1
输出值为TRUE
时,SL
输入值为TRUE
。
ACTION_CONTROL
本身不要求实现,只要动作控制等效于以上规则。
ACTION_CONTROL
功能块(不带“最后扫描”逻辑)-外部接口:
+----------------+
| ACTION_CONTROL |
BOOL---|N Q|---BOOL
BOOL---|R |
BOOL---|S |
BOOL---|L |
BOOL---|D |
BOOL---|P |
BOOL---|P1 |
BOOL---|P0 |
BOOL---|SD |
BOOL---|DS |
BOOL---|SL |
TIME---|T |
+----------------+
演化规则
SFC网络的 初始状态 表征为 程序 或 功能块 初始化时处于激活状态的 初始步 。激活步在 转换 发生时沿着 有向连接 进行 演化 。
当前面的步都处于激活状态时, 转换 处于激活状态。当 转换 处于激活状态并且转换条件为TRUE
时转换发生。转换发生后,前面步的状态被重置,而后面的步被激活。
如果一次状态转移导致多个步的激活,那么这些步所属序列成为 并发序列 。同时被激活后,他们的演化将相互独立。
当步的激活已经传播至声明该步的整个程序组织单元后,对于激活步的测试和后面的转换才可以发生。
状态转移时间理论上被视为无限短,而实际上不可能为零,该时间应被PC实现限制。 同时激活步的“发散”和“收敛”构造的最大宽度是 实现相关 的。
示例:
|
+----+
| S5 |
+----+
|
+------+----+--...
| |
+e +NOT e & f
| |
+----+ +----+
| S6 | | S8 |
+----+ +----+
| |
5到6的转换发生条件:5为激活状态,且e为TRUE
;
5到8的转换发生条件:5为激活状态,且e为FALSE
,且f为TRUE
;
状态转移步骤示例:
转换未激活(X=0 or 1
):
| | | |
+------+ +-----+ +------+ +------+
|STEP10| |STEP9| |STEP13| |STEP22|
| | | | | * | | * |
+------+ +-----+ +------+ +------+
| | | |
+ X ====+=======+========+====
| |
+------+ +X
|STEP11| |
| | ====+====+===+====
+------+ | |
| +------+ +------+
|STEP15| |STEP16|
| | | |
+------+ +------+
| |
转换激活,但未发生(X=0
):
| | | |
+------+ +-----+ +------+ +------+
|STEP10| |STEP9| |STEP13| |STEP22|
| * | | * | | * | | * |
+------+ +-----+ +------+ +------+
| | | |
+ X ====+=======+========+====
| |
+------+ +X
|STEP11| |
| | ====+====+===+====
+------+ | |
| +------+ +------+
|STEP15| |STEP16|
| | | |
+------+ +------+
| |
转换发生(X=1
):
| | | |
+------+ +-----+ +------+ +------+
|STEP10| |STEP9| |STEP13| |STEP22|
| | | | | | | |
+------+ +-----+ +------+ +------+
| | | |
+ X ====+=======+========+====
| |
+------+ +X
|STEP11| |
| * | ====+====+===+====
+------+ | |
| +------+ +------+
|STEP15| |STEP16|
| * | | * |
+------+ +------+
| |
本文采用 知识共享署名 4.0 国际许可协议(CC-BY 4.0)进行许可,转载注明来源即可: https://harttle.land/2014/07/18/plc-sfc.html。如有疏漏、谬误、侵权请通过评论或 邮件 指出。