每个 SFC 步和 IEC 操作提供隐式生成的变量,用于在运行时监视步和 IEC 操作的状态。此外,您可定义变量来监视和控制 SFC 的执行(超时、复位、渐进模式)。这些变量也可由 SFC 对象隐式生成。
基本而言,对于每个步和每个 IEC 操作,将生成隐式变量。其为结构实例,以元素命名,例如对于名称为 step1 的步为 step1。您可在元素属性中定义,对于该标志是否应当将符号定义导出至符号配置以及应该在控制器中如何访问该符号。
这些隐式变量的数据类型在库 IecSFC.library 中定义。一旦添加 SFC 对象,该库将自动包含在项目中。
基本而言,对于每个步和每个 IEC 操作,将创建类型为 SFCStepType 或 SFCActionType 的隐式结构变量。结构组件(标志)描述步或操作的状态或活动步当前已处理的时间。
隐式完成的变量声明的语法为:
<步名称>: SFCStepType;
或
_<操作名称>:SFCActionType;
注意: IEC 操作的隐式变量以下划线开头。
有以下步或操作状态的布尔标志可用:
步的布尔标志:
布尔值标志 |
描述 |
---|---|
<步名称>.x |
显示当前激活状态 |
<步名称>._x |
显示下一个循环的激活状态 |
如果 <步名称>.x = TRUE,则将在当前循环中执行步。
如果 <步名称>._x = TRUE 并且 <步名称>.x = FALSE,将在后续循环中执行步。这意味着将把 <步名称>._x 复制到循环开头的 <步名称>.x。
操作的布尔标志:
布尔值标志 |
描述 |
---|---|
_<操作名称>.x |
在操作执行后为 TRUE |
_<操作名称>._x |
在操作为活动状态时为 TRUE |
符号生成
在步或操作的元素属性中,您可定义是否应当将符号定义添加至可能为步或操作名称标志创建和下载的符号配置。为此,在元素属性视图的符号列中输入所需的访问权限。
注意: 如果使用布尔值标志 <步名称>.x 强制某个步的特定状态值(用于设置步活动),请注意这将影响 SFC 内的非受控状态。
|
意外的设备操作 |
不得使用布尔值标志 <步名称>.x 来强制用于激活步的状态值。 |
不遵循上述说明可能导致人员伤亡或设备损坏。 |
通过 TIME 变量确定时间:
标志 t 指定当前自步变为活动状态经过的时间跨度。这仅用于步,无论是否在步属性中配置了最小时间(请参阅下文的 SFCError)。
对于步:
<步名称>.t (<步名称>._t 不可用于外部)
对于操作:
不使用隐式时间变量。
您可使用一些可隐式使用的变量,也称为 SFC 标志(请参阅下表),来控制 SFC 的操作。例如,用于指示时间溢出或启用渐进模式来切换转移。
要访问这些标志,您必须声明并激活它们。在 SFC 设置对话框中进行该操作。这是对象属性对话框的子对话框。
在 SoMachine / SoMachine Motion V3.1 中需要的手动声明仅在从另一个 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 前不能记录更多超时。如果您希望使用其他时间控制标志(SFCErrorStep、SFCErrorPOU、SFCQuitError),则必须定义 SFCError。 |
SFCEnableLimit |
BOOL |
您可将该变量用于通过 SFCError 显式激活 (TRUE) 和停用 (FALSE) 步中的时间控制。这意味着如果声明并激活了该变量(SFC 设置),则必须将其设置为 TRUE 以让 SFCError 起作用。否则将不会记录步的任何超时。适合在启动期间或手动操作时使用。如果未定义变量,SFCError 将自动生效。 前提条件:必须定义 SFCError。 |
SFCErrorStep |
STRING |
该变量存储特定步的名称,在该步由 SFCError.timeout 记录超时。 前提条件:必须定义 SFCError。 |
SFCErrorPOU |
STRING |
该变量存储其中发生超时的 SFC POU 的名称。 前提条件:必须定义 SFCError。 |
SFCQuitError |
BOOL |
只要该变量为 TRUE,就会停止 SFC 图的执行,并将把变量 SFCError 复位。一旦将变量复位为 FALSE,将会复位活动步中的所有当前时间状态。 前提条件:必须定义 SFCError。 |
SFCPause |
BOOL |
只要该变量为 TRUE,就会停止 SFC 图的执行。 |
SFCTrans |
BOOL |
一旦启动了转移,该变量就会变为 TRUE。 |
SFCCurrentStep |
STRING |
该变量存储当前活动步的名称,与时间监视无关。如果同时有多个序列,将会记录外部右侧的步的名称。 |
SFCTipSFCTipMode |
BOOL |
这些变量可允许在当前图中使用渐进模式。如果通过 SFCTipMode=TRUE 开启该模式,则仅能通过设置 SFCTip=TRUE(上升沿)来跳至下个步。只要将 SFCTipMode 设置为 FALSE,就可通过转移跳过。 |
下图提供了编辑器在线模式下 SFC 检测到的一些错误的示例。
通过标志 SFCError 在 SFC 对象 POU 中的步 s1 中检测到超时。
要能够访问用于控制 SFC 执行(超时、复位、渐进模式)的标志,可如上所述(SFC 执行的控制)声明并激活标志变量。
从 SFC POU 中的操作或转移进行访问的语法:
<步名称>.<标志>
或
_<操作名称>.<标志>
示例:
status:=step1._x;
checkerror:=SFCerror;
从另一个 POU 进行访问的语法:
<SFC POU>.<步名称>.<标志>
或
<SFC POU>._<操作名称>.<标志>
示例:
status:=SFC_prog.step1._x;
checkerror:=SFC_prog.SFCerror;
如果从另一个 POU 进行写入访问,请注意:
o必须额外地将隐式变量显式地声明为 SFC POU 的 VAR_INPUT 变量
o否则必须在 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; //Write access to SFCinit in SFC_prog