SA0106: Richiami di metodi virtuali in FB_Init
Rileva le chiamate al metodo nel metodo FB_Init
di un blocco funzione di base che vengono sovrascritti da un blocco funzione derivato dall'FB di base.
Motivo: in questi casi è possibile che le variabili nei metodi sovrascritti nell'FB di base non vengano inizializzate.
Importanza: Alta
modulo funzionale FB_A
ha i metodi FB_Init
e Meth_MyInit
. FB_Init
chiamate Meth_MyInit
per l'inizializzazione. modulo funzionale FB_B
è di FB_A
derivato. PLC_PRG
chiamate FB_B
e quindi usa la sua variabile mbMyDintB
prima che fosse inizializzato. FB_B.Meth_MyInit
sovrascrive 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
Uscita in Messaggi vista:
SA0106: Chiamata del metodo virtuale 'Meth_MyInit' in FB_INIT