跳到主要内容

SFC 顺序功能图

SFC 用步骤表示流程所处阶段,用转换决定何时进入下一步,并把执行逻辑放在步骤关联的动作中。动作的实现语言支持 ST 和 LD。

创建 SFC 程序​

  1. 在项目树中添加 POU,填写名称,选择所需 POU 类型。
  2. 在 语言 下拉列表中选择 顺序功能图语言(SFC),然后确认。
  3. 打开新建的 POU。编辑器默认显示初始步骤 Init,下方有转换和指向 Init 的跳转。

添加 POU 对话框中选择 SFC 语言

认识编辑器​

编辑区上方是变量表,下面依次是 SFC 工具栏和流程图画布。变量表中的 添加变量 可声明转换条件和动作代码使用的变量。图中 Init 为双边框初始步骤,步骤之间的小矩形为转换,箭头旁的名称为跳转目标。

SFC 编辑器工具栏及主要图元

工具栏图标用途
步转移连续插入一个步骤和后续转换
步插入步骤
转移插入转换
跳转插入指向指定步骤的跳转
动作为选中步骤添加动作
分支插入分支结构
删除、撤销、恢复调整当前图表

插入命令作用于当前选中的图元。先选中步骤、转换或连接位置,再使用工具栏;也可以在步骤上右键打开可用命令。

添加步骤和转换​

识别步骤与转换​

  • 步骤是写有步骤名称的矩形。SFC 程序中的初始步骤 Init 使用双边框;其他步骤通过连接线与前后的转换连接。步骤名称可在图中编辑。同一 POU 内建议使用唯一且有意义的名称,便于关联动作和排查流程。
  • 转换是连接步骤的小矩形。它的条件必须得到 BOOL 结果;条件为 TRUE 时,流程才可以进入后续步骤。截图中显示的 TRUE 是演示用恒真条件,应按实际控制条件修改。
  • 跳转以箭头和目标步骤名称表示,可将流程接回已有步骤。使用跳转后,应检查目标名称对应的步骤。

插入单个图元或一组“步骤+转换”​

  1. 选中准备插入的位置。只需要一个图元时,分别点击工具栏的 步 或 转移。
  2. 需要连续扩展流程时,点击 步转移;也可在步骤上右键,选择 插入步转移 或 在…之后插入步转移。这会同时增加一个步骤和相邻的转换。
  3. 继续插入后续步骤。下方动图从 Init 开始,依次插入 Step0、Step1。
  4. 在图中编辑步骤名称,例如“等待启动”“运行”“停止”。如果需要更换初始步骤,在目标步骤的右键菜单中选择 转为初始步,并检查双边框是否移到该步骤。
  5. 检查每个步骤、转换和跳转之间的连接方向,确认流程可以到达预期的后续步骤。

从 Init 连续插入 Step0 和 Step1

设置转换条件​

在转换处填写能够计算为 BOOL 的条件,例如一个 BOOL 变量或返回 BOOL 的表达式。条件中的变量可在 SFC 编辑器上方的变量表中声明。例如,先声明 Ready、Fault 为 BOOL,再将转换条件写为 Ready AND NOT Fault。不要把动作赋值语句写成转换条件。

转换条件也支持直接输入文本表达式,包括布尔逻辑、比较和组合表达式,例如 a AND b、int1 > 5、(a AND b) OR (c > 3)。表达式中使用的变量须先声明,且表达式最终必须得到 BOOL 值。还可直接引用功能块的 BOOL 输出(例如 TON_1.Q、CTU_1.Q)或 BOOL 地址(例如 %IX0.0、%QX0.1、%MX10.0)。下图展示了在转换上直接输入布尔逻辑表达式的示例。

在 SFC 转换上直接输入布尔逻辑表达式

将鼠标移到转换条件上,编辑器会显示表达式及其类型提示。完成后逐个检查转换条件;图中的 TRUE 会让对应转换始终满足,通常只适合演示流程。

通过右键菜单编辑流程​

在步骤上右键,可使用 插入步转移、在…之后插入步转移、插入左分支、插入右分支 等命令;菜单还提供 转为初始步 和动作相关命令。右键操作前应先确认当前选中的步骤。

步骤右键菜单及流程编辑命令

下面的示例展示了从 Init 分出多个路径、在后续步骤汇合并跳转回初始步骤的图表。变量表中可看到 t1 至 t4 等 BOOL 变量;图中步骤右上角的 A 是基础动作标记。插入左、右分支后,在分支节点上右键,可选择 选择分支 或 并行分支,并检查每条支线的连接和汇合位置。

带分支、转换和动作标记的 SFC 示例

编辑器对两类分支的结构要求不同:选择分支的每条支线以转换开始,以转换或跳转结束;并行分支的每条支线以步骤或嵌套并行分支开始,以步骤、跳转或嵌套并行分支结束,并且分支整体的上方、下方需要转换。若结构不符合要求,编辑器会给出图形诊断。

分支可以嵌套,测试用例覆盖了选择分支中嵌套选择或并行分支,以及并行分支中嵌套选择或并行分支。并行分支的入口转换满足时,各支线步骤同时激活;汇合转换可组合各支线条件,例如用 t1 AND t2 AND t3 等待全部条件满足,或按流程需要使用 t1 OR t2 OR t3。

**选择分支示例:**下图中,初始步后的多个转换分别进入不同支线,适合用于说明按转换条件选择路径。

选择分支示例:一个前置步连接多条可选支线

**并行分支示例:**下图中,一个转换后同时展开多条支线,适合用于说明并行步骤结构。

并行分支示例:一个转换后展开多条并行支线

理解流程的推进​

阅读 SFC 图表时,可以按以下顺序检查:

  1. 找到双边框的初始步。程序开始执行该 SFC 流程时,从初始步进入。
  2. 确认当前活动步骤及其关联动作。入口动作对应进入步骤,基础动作对应步骤活动期间,出口动作对应离开步骤;关联动作还会受到限定符影响。
  3. 查看活动步骤后面的转换条件。条件得到 TRUE 时,流程可以转向连接的后续步骤;条件为 FALSE 时,流程停留在当前步骤。
  4. 遇到分支时,先辨认分支类型:选择分支从满足条件的支线中进入一条;并行分支使多条支线同时参与流程。再检查各支线的转换、汇合位置和跳转目标。
  5. 进入后续步骤后,继续按步骤、动作和转换的关系检查流程。

这是一种阅读和排查图表的方法。动作在控制器周期内的精确调用次数、分支条件同时为真时的优先级以及出口动作落在哪个周期,应通过当前版本的运行结果确认,不能只凭图形位置推断。

下图标出了初始步和活动步。阅读流程时,从当前活动步沿连接线检查后续转换条件,再确认条件满足后进入的步骤。

SFC 图中初始步与活动步的标注示例

创建步骤动作​

步骤动作分为 基础动作、入口动作、出口动作。步骤上的标记表示已关联的动作类别:E(Entry)表示入口动作,在步骤激活时执行一次;A(Action)表示基础动作,在步骤活动期间执行;X(eXit)表示出口动作,在步骤停用时执行一次。它们在右键菜单中分别有对应的添加命令;需要编辑已有动作时,可通过步骤上的动作标记或 选择(更新)动作 进入。先确定动作属于哪一步,再选择动作类别。

创建基础动作并选择实现语言​

  1. 选中目标步骤,点击工具栏中的 动作 图标,或在步骤上右键选择 添加基础动作。
  2. 在 添加动作 对话框中输入动作名称。
  3. 在 实现语言 下拉列表中选择 梯形图(LD) 或 结构化文本(ST),点击 确认。
  4. 打开新建动作的编辑器,编写该动作的逻辑。

添加动作对话框中的名称和实现语言

动图展示了在 Step1 上新建 Action1、选择 LD 并进入 LD 编辑器的完整过程。

创建 LD 动作并打开编辑器

使用 ST 编写动作​

在 实现语言 中选择 结构化文本(ST) 后,在打开的 ST 编辑器中编写动作语句。以下仅展示动作代码写法;Ready 和 MotorCommand 需要先在可见的变量范围中声明。

IF Ready THEN
MotorCommand := TRUE;
END_IF;

保存动作后返回 SFC 图表,确认该动作仍关联到目标步骤,并编译检查变量名和 ST 语法。ST 编辑器的通用操作见结构化文本开发。

ST 动作中还可以调用系统函数、项目中的自定义函数,以及系统或自定义功能块。调用功能块时使用已声明的实例;实例可位于程序变量范围或全局变量范围。调用语法和参数要求遵循对应函数或功能块的定义。

使用 LD 编写动作​

在 实现语言 中选择 梯形图(LD) 后,打开 LD 编辑器。新建动作最初可能显示“暂无网络”;使用上方工具栏添加网络、触点和线圈,并为元件绑定变量。完成后保存并返回 SFC 图表。触点、线圈和变量绑定的操作见梯形图开发。

新建 LD 动作打开后的空白网络编辑器

添加入口动作或出口动作​

  1. 在目标步骤上右键,选择 添加入口动作 或 添加出口动作。
  2. 在 选择动作 对话框中检查 动作类别;下拉列表可选 基础动作、入口动作、出口动作。
  3. 选择已有动作,或继续新建动作并设置名称与 ST/LD 实现语言。
  4. 返回图表后检查步骤旁的动作标记。截图中的 E 为入口动作标记,X 为出口动作标记。

选择动作类别的对话框

下方动图展示了从步骤菜单选择动作类别、关联动作以及继续新建动作的过程。它没有演示添加变量;变量应在编辑器上方的变量表中另行声明。

在步骤上添加入口或出口动作

设置关联动作的限定符​

为步骤插入关联动作后,点击动作区域左侧的限定符下拉框,再选择或填写动作名称。限定符决定何时开始执行、执行多久以及是否保持动作状态;动作内部仍可用 ST 或 LD 编写。它与前面选择的基础动作、入口动作、出口动作是不同的设置。

关联动作区域的限定符下拉列表

限定符作用
N非存储型:仅当关联步骤处于活动状态时,动作处于活动状态。
R复位:清除存储型动作的保持状态。
S置位:步骤变为活动状态时启动存储型动作,步骤停用后仍保持,直到被复位。
L限时:步骤活动时启动,持续到步骤停用或达到设定时长,以先发生者为准。
D延时:步骤保持活动达到设定时长后开始执行,随后持续到步骤停用。如果步骤在延时结束前停用,则不启动动作。
P脉冲:步骤激活沿和停用沿各执行一次,持续活动期间不重复触发。
SD存储并延时:经过设定时长后开始,并保持到复位。
DS延时并存储:步骤在整个延时期间保持活动才启动,启动后保持到复位。
SL存储并限时:步骤活动时启动,执行到设定时长结束或被复位。
P0下降沿脉冲。
P1上升沿脉冲。

L、D、SD、DS、SL 必须设置时间:先在左侧选择限定符,再点击旁边的时间栏输入 T#10s、LTIME#1s 等 TIME 或 LTIME 字面量,最后在右侧选择关联的 Action。其他限定符的时间栏不可编辑;关联动作没有选择 Action 或时间型限定符缺少时长时,编辑器会报错。

使用存储型限定符时,应在流程中安排相应的复位操作。P0、P1 在本编辑器源码中分别标为下降沿脉冲、上升沿脉冲;R、S 是本编辑器使用的名称。控制器周期内的具体调用次数需通过实际运行确认。

若需重复执行一段流程,可在末尾插入指向已有步骤的跳转,形成闭环。检查闭环是否有可控的退出条件,避免流程无限循环。

保存与检查​

  1. 保存 SFC 图表和动作,编译工程,先处理转换条件、动作代码及变量引用的错误。
  2. 检查流程:初始步骤、各转换条件、分支连接、跳转目标以及每个步骤关联的动作。
  3. 在线运行时观察当前激活步骤和转换状态。如果流程停留在某一步,先检查该步骤下方的转换条件。
  4. 如果步骤已激活而结果不符合预期,检查动作类别、限定符、ST/LD 逻辑以及变量值。