Skip to main content

SA0106:FB_Initでの仮想メソッド呼び出し

メソッド内のメソッド呼び出しを検出します FB_Init 基本FBから派生した機能ブロックによって上書きされる基本機能ブロックの。

理由:このような場合、基本FBの上書きされたメソッドの変数が初期化されていない可能性があります。

重要性:高い

94.

ファンクションブロック FB_A メソッドがあります FB_InitMeth_MyInitFB_Init 呼び出し Meth_MyInit 初期化用。ファンクションブロック FB_BFB_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'