无虚拟动作属性

假定功能模块,是由一个基本功能模块在一个SFC中实施而来并且其是用在主SFC基本类工作流中。其中的操作称为显示相同的虚拟行为的方法,换言之,基本类的操作可能是超载了具体实现相关的派生类。

如果基本类中的操作将防止被覆盖,基本类能被给予指令 {attribute 'no_virtual_actions'}。

句法:

{attribute 'no_virtual_actions'}

例子:

在以下例子中,功能块 POU_SFC提供基本类,将被功能块 POU_child扩展

使用关键词 SUPER 派生类 POU_child调用在 SFC补充的基本量工作流程。

该工作流程的典型补充严格限制在紧跟一个单步的初始步,相关步动作 ActiveAction 结合分配的输出变量:

 

an_int:=an_int+1;          // counting the action calls

test_act:='father_action'; // writing string variable test_act

METH();                    // Calling method METH for writing string variable test_meth

 

派生类POU_child,步动作将被与原始类不同的具体补充ActiveAction覆盖,通过分配字符 'child_action' 而不是'father_action'到变量test_act

同样方法METH,在基础类中分配字符 'father_method'到变量 test_meth , 将被覆盖, test_meth将被分配到 'child_method' 。

主程序PLC_PRG将执行重新调用到 Child (例子POU_child),如预期,输入字符的实际值报告了派生类动作和方法的调用:

如果派生类被属性 'no_virtual_actions' 优先

{attribute 'no_virtual_actions'}

FUNCTION_BLOCK POU_SFC...

将看到不同的情况: 方法METH在派生类中 将补充被覆盖,步动作的调用将引起基本类中动作ActiveAction的调用 。因此test_act 将被分配到字符 'father_action':