检测基础功能块FB_Init
方法中被基础功能块派生功能块覆盖的方法调用
理由在这种情况下,可能是覆盖方法中的变量没有在基础 FB 中初始化。
重要性:高
示例
功能块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: Virtual method call 'Meth_MyInit' in FB_INIT