隐含变量——SFC标志

每个SFC步和IEC动作提供隐含生成变量供运行时监视步和IEC动作 状态 。同样可以定义变量来监视和控制SFC执行(超时,重启,尖模式)。这些变量也可由SFC对象隐含生成。

针对每个步和IEC动作,隐含变量会生成。一个结构实例,如元素的命名,如“step1 ”对一个步名为“step1”的步。注意,定义 元素属性,对这个元素一个符号定义是否应该输出到符号配置中,以及这个符号如何在PLC中被访问。

这些隐含变量的类型实在库IecSFC.library中定义的。SFC对象添加时这个库会自动被包含。

步和动作状态及步时间

针对每个步和IEC动作,一个隐含结构变量类型 SFCStepTypeSFCActionType被创建。结构组件(标示)描述了步和动作的状态,或活跃步的当前处理时间。

隐含变量声明的语法是:

<stepname>: SFCStepType; bzw. _<actionname>:SFCActionType;

不同于CoDeSys V2.3不同于CoDeSys V2.3,步的隐含变量总是跟一个下划线。

步或动作的以下布尔标示状态变量是:: i

针对步:

<stepname>.x:显示了当前活跃状态。

<stepname>._x: 显示了下个周期活跃状态。

如果<stepname>.x = TRUE,步会在当前周期执行。

如果 <stepname>._x = TRUE and <stepname>.x = FALSE,步会在以下周期执行, 即 在下一周期开始 <stepname>._x gets copied 被复制到 <stepname>.x 。

针对动作:

_<actionname>.x is TRUE,如果动作被执行

_<actionname>.xist TRUE, 如果动作活跃

符号生成:

在步或动作的 元素属性中你可以定义,针对步名或动作名标示,一个符号定义应该添加到可能创建和下载的 符号配置中。为了这个目的,在元素属性视图中的“符号”列,为想要的访问变量做一个入口。

提示!

上述标示可能用来强制一个步的特定状态,来设置一个步活跃,但要清楚,这会影响SFC中未控制步的状态!

通过时间变量的时间:

标示“t”给出步激活后过去的时间;这指示针对步的,无论在 步特性 中是否定义了最小时间(参见以下: SFC错误

针对步: <stepname>.t (<stepname>._t 对外部使用无效)

针对动作:时间隐含变量没使用。

SFC执行的控制(超时,尖模式)

一些隐含变量,也叫SFC标示,(见下表)可以控制SFC的操作,如用来指示过去的时间或使能尖模式来切换转换。

为了访问这些标示使它们工作,它们必须声明和激活。这在 SFC 设置 对话框中设置。 它是对象属性对话框的子对话框。手动声明,像CoDeSys V2.3中需要的,只是对其它POU有写权限的有必要。(见下, 访问标识)这种情况下,注意以下:如果 全局声明这些标示,你必须失效SFC设置对话框中“声明”选项,不暗含声明本地标示,否则它会代替全局的使用!记住,SFC POU的SFC设置初始是由当前 SFC 选项对话框设置的定义决定的。

注意只是通过SFC设置对话框完成的标示变量的声明,只会在SFC POU在线模式下可见

以下隐含变量(标示)可以使用。它们必须在SFC设置中声明并激活:

SFCInit: BOOL;

如果这个变量变TRUE,顺序功能图会回到 初始步。所有步和动作及其它SFC标示都会重启(初始化)。初始步会保持激活,但是步执行直到变量为TRUE。SFCInit必须重置回FALSE,来回到正常的处理中。

SFCReset: BOOL;

这个变量和SFCInit相似。不同于后者,初始步的初始化完成后,继续的处理才发生。因此,这种情况下,SFCReset标示重置回FALSE需在初始步中完成。

SFCError: BOOL;

SFC中步的任何超时发生的话,这个变量变为TRUE。先决条件:SFCEnableLimit必须为TRUE。注意任意超时可以在SFCError重启前被注册。SFCError必须被定义,如果你想用其它时间控制标示(SFCErrorStep, SFCErrorPOU, SFCQuitError)。

SFCEnableLimit: BOOL;

这个变量通过SFCError进行步中时间控制,隐含激活(TRUE)和失效(FALSE) 。这意味着,如果这个变量声明并激活了( SFC 设置)),那么它必须设为TRUE来使SFCError工作。否则,任何超时都不会注册。在启动或手动操作时可以使用。如果这个变量没有定义,SFCError会自动工作。当然作为先决条件,SFCError必须定义!

SFCErrorStep: STRING;

这个变量存储SFCError超时时注册的步的名字。先决条件:SFCError必须定义!

SFCErrorPOU: STRING;

这个变量存储超时发生时SFC POU的名字。先决条件:SFCError必须定义!

SFCQuitError: BOOL;

只要这个变量是TRUE,SFC图的执行就停止,且SFCError会被重启。当这个变量被重置为FALSE后,所有活跃的步中的当前时间状态会重启。先决条件:SFCError必须定义!

SFCPause: BOOL;

只要这个变量是TRUE,SFC图的执行停止。

SFCTrans: BOOL;

当一个转换驱动时,这个变量变TRUE

SFCCurrentStep: STRING;

这个变量存储当前活跃的步名,独立于时间监视。针对同时的,外右的步名会注册。

SFCTip, SFCTipMode: BOOL;

这个变量在当前表中允许使用微调模式。当这个模式通过SFCTipMode=TRUE打开时,你只能设置SFCTip=TRUE(上升沿)来跳到下一步。只要SFCTipMode为FALSE,可以跳过转换。

 编辑器在线模式一些SFC错误标示例子
访问标示:

为了访问SFC执行控制时的标示(超时,尖模式),标示变量必须上面描述的一样声明和激活 ( SFC 执行控制)。

访问语法:

... SFC POU中,动作或转换: <stepname>.<flag> resp. _<actionname>.<flag>

例子:

status:=step1._x;

checkerror:=SFCerror;

... 从另一个 POU:<SFC POU>.<stepname>.<flag> resp. <SFC POU>_<actionname>.<flag>

例子:

status:=SFC_prog.step1._x;

checkerror:=SFC_prog.SFCerror;

注意从其它POU中写访问,隐含变量必须隐含声明为SFC POU VAR_INPUT变量,或 全局变量,如在 GVL中。

例子:

本地声明:

PROGRAM SFC_prog

VAR_INPUT

  SFCinit:BOOL;

END_VAR

或 GVL中的全局声明:

VAR_GLOBAL

  SFCinit:BOOL;

END_VAR

在PLC_PRG中访问标识:

PROGRAM PLC_PRG

VAR

  setinit: BOOL;

END_VAR

SFC_prog.SFCinit:=setinit;  //Schreibzugriff auf SFCinit in SFC_prog