CODESYS的SFC资料把step与transition成对介绍,但两者承担的内容不同。步可以关联在其激活时执行的动作;转换则包含使下一步激活的条件,该条件的值为TRUE或FALSE。一个说明执行什么,另一个说明何种条件下转向下一步,不能仅因图形上相邻,就当成同一项内容。

Action页进一步将动作定义为一种可用编程语言中的一条或多条语句,并说动作可以关联步或转换。SFC步调用的动作,在项目中属于POU。文档随后保留一项例外:作为IEC action关联到步时,可以用布尔变量代替动作对象;step action没有这项替代。因此,“动作”在这两种语境中并非始终要求完全相同的对象形态。

Step action内的entry、main与exit分别联系不同阶段。Entry在步激活之后执行一次,而且发生在main之前。Main则在步已激活、任何entry已经执行之后运行。这既交代进入动作与主体动作的先后,也保留二者同样联系步激活的背景。main不是entry换了一个名字,更不能仅凭两个名称推断同一条动作必定在同一时刻重复两遍。

Exit的时点在步失活之后。文档特别补充,它不在失活的同一周期执行,而到下一周期开始时执行一次。于是,步失活这个事件与退出动作真正执行之间,仍有文档明确分开的时点。描述exit时若只保留“失活后”,便会省掉这个周期边界;本文仅解释文字,不据此设计现场控制延迟。

IEC action还受到qualifier限定。这里采用的是Difference一节明确针对N限定符的比较:步激活时执行一次,步失活时又执行一次;main step action则不会在失活时再执行第二次。这是两种动作语义的具体对照,不能扩展成所有限定符、所有动作在任何情况下都固定执行两次。

来源已经用一个计数例子展开了差别。两种情况都经过两个PLC周期回到初始步,计数变量从零开始,所关联动作使其增加;作为step action的例子回到初始步后为一,作为N限定IEC action的例子则为二。相同的两个周期并没有让结果相同,差别来自后一种动作在失活时还执行一次。这里转述的是文档自身叙述的结果,没有运行程序、读取图形或验证真实控制器。

对象身份还有独立的一层。Step action可以embedded,只能由相应步访问;复制该步时,会建立新的动作对象并复制实现。因此,副本与原动作有相同实现来源,不代表它们从此只剩下一个共同对象。这个复制关系与entry、main、exit的时点区别并列存在:一个交代动作属于谁,另一个交代关联动作何时发生。

两页还要求步名称在上层POU范围内唯一,嵌套SFC动作不能包含与所关联步同名的步。这使名称范围继续有自己的条件,不会因动作被关联或复制而消失。本文只整理这些文档定义与具名例子,不提供代码、界面操作、PLC写入或生产安全控制方案;两页首次公开日均未确认。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。