Skip to main content

SFC 标志

SFC 标志是具有预定义名称的隐式创建变量,它们提供用于控制和诊断 SFC 图的功能。借助这些标志,您可以有针对性地触发转移。

例如

  • 检测超时

  • 复位步链

  • 激活点动模式

要访问这些变量,必须声明并启用相应的标志。

名称

数据类型

描述

SFCInit

BOOL

TRUE:将流程复位到初始步。其他 SFC 标志也会被复位(初始化)。只要该变量为TRUE,初始步就保持置位(激活),但不会被执行。只有在您将SFCInit重新设置为FALSE之后,POU 才会被正常处理。

SFCReset

BOOL

行为与SFCInit类似

与之不同的是,初始化之后,初始步会继续执行。例如,您可以在初始步中立即将SFCReset标志重新设置为FALSE。

SFCError

BOOL

当 SFC 图中发生超时时,变为TRUE。

如果在第一次超时之后程序中又发生另一次超时,则只有在变量SFCError事先已被复位的情况下才会检测到它。否则,该标志保持置位,其他超时不会被记录。

必须声明SFCError,用于监视时间的其他标志变量才能工作:SFCErrorStep、SFCErrorPOU、SFCQuitError

SFCEnableLimit

BOOL

用于有针对性地激活(TRUE)和停用(FALSE)由SFCError进行的步超时控制

如果您声明并激活了该变量(SFC 设置),则还必须将其设置为TRUE,SFCError才能起作用;否则,所有超时都将被忽略。例如,这在调试或手动操作期间可能很有用。如果您未声明该变量,则SFCError会自动工作。

前提条件是声明SFCError。

SFCErrorStep

STRING

存储导致SFCError所记录的超时的步的名称

该名称将一直保留,直到使用SFCQuitError(FALSE -> TRUE)复位所记录的步错误。

前提条件是声明SFCError。

SFCErrorPOU

STRING

发生超时时,存储发生了由SFCError所记录的超时的 POU 的名称。该名称将一直存储,直到通过SFCQuitError复位该超时。

前提条件是声明SFCError。

SFCQuitError

BOOL

只要该布尔变量为TRUE,SFC 图的处理就会暂停。在此过程中,存储在变量SFCError中的任何超时都会被复位。如果将该变量重新设置为FALSE,则激活步中之前的所有时间都将被复位。

前提条件是声明SFCError。

SFCPause

BOOL

只要该变量为TRUE,SFC 图的处理就会暂停。

SFCTrans

BOOL

当转移切换时,变为TRUE。

SFCCurrentStep

STRING

显示当前激活步的名称,与时间检查无关

对于并行分支,始终存储最右侧分支的步的名称。

SFCTip

SFCTipMode

BOOL

TRUE:激活 SFC POU 的点动模式

当您通过设置SFCTipMode := TRUE启用点动模式时,只能通过将SFCTip设置为TRUE来进入下一步。只要您将SFCTipMode设置为FALSE,也可以通过转移切换到下一步。

SFCErrorAnalyzation

包含一个字符串,其中列出导致SFCError总值为TRUE(某个步超时)的所有变量

必须启用SFCError,此功能才能工作。

为此,SFCErrorAnalyzation隐式使用Analyzation库中AnalyzeExpression POU 的功能。

有关分析的高级配置的信息,另请参阅:SFC

SFCErrorAnalyzationTable

包含一个表,其中列出导致SFCError总值为TRUE(某个步超时)的变量

必须启用SFCError,此功能才能工作。

为此,SFCErrorAnalyzationTable隐式使用Analyzation库中AnalyzeExpressionTable POU 的功能。

有关分析的高级配置的信息,另请参阅:SFC

隐式生成 SFC 标志

当您启用了相应选项时,SFC 标志会被自动声明。您可以在针对单个 POU 的SFC设置属性对话框中,或者在针对项目中所有 SFC POU 的SFC项目设置对话框中设置此选项。

提示

只有在您未启用使用默认值选项时,单个 POU 的 SFC 标志的 SFC 设置才会生效。如果您启用了此选项,则将应用项目设置中定义的设置。

提示

在 SFC 设置对话框中声明的 SFC 标志仅在 SFC POU 的在线视图中可见。

提示

在SFC 元素属性中,您可以定义是否应将标志的符号定义导出到符号配置中。

显式生成 SFC 标志

只有在需要从另一个 POU 对标志进行写访问时,才仍需要进行手动声明(如以前在CoDeSys V2.3中所要求的那样)。对此请注意以下事项:

重要

如果标志已在全局变量列表中声明,则必须在 SFC 设置对话框中禁用声明设置。否则,还会隐式创建一个局部 SFC 标志。随后将使用该标志,而不是全局变量。

SFCError 的应用示例

例 1. 示例

您已创建一个名为sfc1的 SFC POU,其中包含一个步s1。您已在该步的属性中定义了时间限制。

如果步s1的激活持续时间超过其时间属性中定义的限制,则标志SFCError将被置位。应用程序可以评估该标志,以便对超时作出响应。

要允许此访问,您必须在 SFC 设置中启用并声明该标志。如果仅声明该标志,则 SFC 标志会显示在sfc1在线视图的声明部分中,但不会起作用。

_cds_img_sfc_sfc_flags.png

现在,您可以在 POU 内(例如在动作中 (2))或从 POU 外部 (1) 访问该 SFC 标志。

_cds_img_sfc_sfcerror_example.png

SFC POUsfc1的在线视图:

_cds_img_sfc_sfcerror_example_online.png

一旦sfc1中发生超时,SFCError就会变为TRUE。

您可以使用Analyzation库中的SFCErrorAnalyzation和SFCErrorAnalyzationTable标志来分析超时的原因。借助这些标志,您可以识别表达式中导致SFCError获得值TRUE的各个组成部分。



访问标志

访问语法

在 POU 内,直接为标志赋值:<variable name> := <sfc flag>

例 2. 示例
checkerror := SFCError;


从另一个 POU 通过名称访问:<variable name> := <pou name>.<sfc flag>

例 3. 示例:
checkerror := SFC_prog.SFCError;


如果需要从另一个 POU 进行写访问,则还必须在 SFC POU 中或在 GVL 中全局地将 SFC 标志显式声明为 VAR_INPUT 变量。

例 4. 示例

局部声明

PROGRAM SFC_prog
VAR_INPUT
    SFCInit : BOOL;
END_VAR

或者在全局变量列表中进行全局声明

VAR_GLOBAL
    SFCInit : BOOL;
END_VAR
PROGRAM PLC_PRG
VAR
    SetInit : BOOL;
END_VAR
SFC_prog.SFCInit := SetInit;  //Write access to SFCInit in SFC_prog