Skip to main content

SA0106:FB_INIT 中的虚拟方法调用

检测方法调用 FB_Init 基本功能块的方法,被从基本功能块派生的功能块覆盖

理由:在这些情况下,可能是覆盖方法中的变量未在基础 FB 中初始化。

重要性:高

94. 例子

功能块 FB_A 包括方法 FB_InitMeth_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

输出在 留言 看法:

  • sa_icon_message.png SA0106:FB_INIT 中的虚拟方法调用“Meth_MyInit”