对于每一个功能块,一个SUPER指针是自动获得的,他指向一个基本的函数接口,此函数是通过一个基本的功能块继承得到的。
因此对于以下问题有一个有效的解决方法:
SUPER 仅可以用在方法和相关的功能块中实现。
因为 SUPER 是一个指向基本功能块的指针,在使用时必须对其进行定义以便获得功能块的地址:SUPER^.METH_DoIt
示例
本地变量 iVarB 覆盖功能变量 iVarB。
FUNCTION_BLOCK FB_Base
VAR_OUTPUT
iCnt : INT;
END_VAR
METHOD METH_DoIt : BOOL
iCnt := -1;
METHOD METH_DoAlso : BOOL
METH_DoAlso := TRUE;
FUNCTION_BLOCK FB_1 EXTENDS FB_Base
VAR_OUTPUT
iBase: INT;
END_VAR
// Calls the method defined under FB_1
THIS^.METH_DoIt();
THIS^.METH_DoAlso();
// Calls the method defined under FB_Base
SUPER^.METH_DoIt();
SUPER^.METH_DoAlso();
iBase := SUPER^.iCnt;
METHOD METH_DoIt : BOOL
iCnt := 1111;
METH_DoIt := TRUE;
END_VAR
PROGRAM PLC_PRG
VAR
myBase: FB_Base;
myFB_1: FB_1;
iTHIS: INT;
iBase: INT;
END_VAR
myBase();
iBase := myBase.iCnt;
myFB_1();
iTHIS := myFB_1.iCnt;