SA0106:FB_INIT 中的虚拟方法调用
检测方法调用 FB_Init
基本功能块的方法,被从基本功能块派生的功能块覆盖
理由:在这些情况下,可能是覆盖方法中的变量未在基础 FB 中初始化。
重要性:高
例 94. 例子
功能块 FB_A
包括方法 FB_Init
和 Meth_MyInit
. FB_Init
来电 Meth_MyInit
用于初始化。功能块 FB_B
来源于 FB_A
. PLC_PRG
来电 FB_B
因此使用它的 mbMyDintB
变量在初始化之前。 FB_B.Meth_MyInit
覆盖 FB_A.Meth_MyInit
.
FUNCTION_BLOCK FB_A VAR mbMyDintA : DINT; END_VAR
FUNCTION_BLOCK FB_B EXTENDS FB_A VAR mbMyDintB : DINT; END_VAR
METHOD FB_Init : BOOL VAR_INPUT bInitRetains:BOOL; bInCopyCode:BOOL; END_VAR VAR diDummy:DINT; //SA0106 END_VAR
mbMyDintA := 123; diDummy := Meth_MyInit();
METHOD Meth_MyInit : DINT VAR_INPUT END_VAR
mbMyDintB := 123; //access to member of FB_B
PROGRAM PLC_PRG VAR g_BInst : FB_B; xVar : BOOL; END_VAR
xVar := g_BInst.fb_init(TRUE, TRUE); //this instruction causes the following order of initializations: //FB_A.fb_init //FB_B.Meth_MyInit //SA0106 //FB_B.fb_init //FB_B.Meth_MyInit
输出在 留言 看法:
SA0106:FB_INIT 中的虚拟方法调用“Meth_MyInit”