SA0106: Llamadas a métodos virtuales en FB_INIT
Detecta llamadas a métodos en el FB_Init
método de un bloque de funciones base, que se sobrescriben con un bloque de funciones derivado de un bloque de funciones base
Justificación: En estos casos, puede ser que las variables de los métodos sobrescritos no estén inicializadas en el FB base.
Importancia: Alta
El bloque de funciones FB_A
incluye los métodos FB_Init
y Meth_MyInit
. FB_Init
llamadas Meth_MyInit
para la inicialización. El bloque de funciones FB_B
se deriva de FB_A
. PLC_PRG
llamadas FB_B
y por lo tanto utiliza su mbMyDintB
variable antes de que haya sido inicializada. FB_B.Meth_MyInit
sobrescribe 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
Salida en el Mensajes vista:
SA0106: Llamada al método virtual 'Meth_MyInit' en FB_INIT