SA0106 : Appels de méthodes virtuelles dans FB_INIT
Détecte les appels de méthode dans le FB_Init
méthode d'un bloc fonctionnel de base, qui sont écrasés par un bloc fonctionnel dérivé d'un bloc fonctionnel de base
Justification : Dans ces cas, il se peut que les variables des méthodes écrasées ne soient pas initialisées dans le FB de base.
Importance : Élevée
Le bloc fonction FB_A
comprend les méthodes FB_Init
et Meth_MyInit
. FB_Init
appels Meth_MyInit
pour l'initialisation. Le bloc fonction FB_B
dérive de FB_A
. PLC_PRG
appels FB_B
et utilise donc son mbMyDintB
variable avant qu'elle ne soit initialisée. FB_B.Meth_MyInit
écrase 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
Sortie dans le messages voir:
SA0106 : Appel de méthode virtuelle 'Meth_MyInit' dans FB_INIT