SA0106:FB_Initでの仮想メソッド呼び出し
メソッド内のメソッド呼び出しを検出します FB_Init
基本FBから派生した機能ブロックによって上書きされる基本機能ブロックの。
理由:このような場合、基本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'