SA0106: Chiamate di metodi virtuali in FB_INITPermalink

Rileva le chiamate di metodo nel metodo ‎FB_Init‎ di un blocco funzione di base, che vengono sovrascritte da un blocco funzione derivato da un blocco funzione di base.

Giustificazione: In questi casi, potrebbe essere che le variabili dei metodi sovrascritti non siano inizializzate nel blocco funzionale di base.

Importanza: Alto

Esempio

Il blocco funzionale ‎FB_A‎ comprende i metodi ‎FB_Init‎ e ‎Meth_MyInit‎. ‎FB_Init‎ chiama ‎Meth_MyInit‎ per l'inizializzazione. Il blocco funzionale ‎FB_B‎ è derivato da ‎FB_A‎. ‎PLC_PRG‎ chiama ‎FB_B‎ e quindi utilizza la sua variabile ‎mbMyDintB‎ prima che sia stata inizializzata. ‎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

--> SA0106: Virtual method call 'Meth_MyInit' in FB_INIT