对于每一个功能块,一个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;