FUNCTION_BLOCK <功能块名称> IMPLEMENTS <接口_1 名称>|,<接口_2 名称>, ..., <接口_n 名称>
实现接口的功能块必须包含该接口定义的所有方法和属性(接口属性)。这包括特定方法或属性的名称、输入和输出,它们必须完全相同。
为此,在创建实现接口的新功能块时,在该接口中定义的所有方法和属性都将自动插入
中的该新功能块下。使用功能块继承时,应注意:如果方法或属性是通过接口的继承创建的,则要么实现这些方法或属性,要么在要实现基本功能块的情况下删除这些方法或属性。pragma 属性自动插入。这些属性在编译期间被检测,并生成消息以向您提醒必须验证继承的方法或属性。完全实现了新功能块后,删除 pragma 属性。
有关更多信息,请参阅命令的说明。
INTERFACE I1
包括方法 GetName
:
METHOD GetName : STRING
功能块 A
和 B
各自实现接口 I1
。
FUNCTION_BLOCK A IMPLEMENTS I1
FUNCTION_BLOCK B IMPLEMENTS I1
从而在两个功能块中,方法 GetName
必须可用并且将在功能块插入 时自动插入每个功能块下。
注意 I1
类型的变量的声明:
FUNCTION DeliverName : STRING
VAR_INPUT
l_i : I1;
END_VAR
该输入可接收实现接口 I1
的所有功能块。
功能调用示例:
DeliverName(l_i := A_instance); // call with instance of type A
DeliverName(l_i := B_instance); // call with instance of type B
因此对于接口方法结果的调用会导致对于功能块实现的调用。一旦分配了引用,则会于在线模式下监控相应地址。否则,如果尚未分配引用,则会于在线模式的监视中显示值 0。
相关示例请参阅功能 DeliverName
的实现部分:
DeliverName := l_i.GetName(); // in this case it depends on the "real" type of l_i whether A.GetName or B.GetName is called