SA0160: Chiamate ricorsivePermalink

Rileva le chiamate ricorsive in azioni, metodi e proprietà dei blocchi funzione. Rileva anche le possibili ricorsioni dalle chiamate di funzioni virtuali e dalle chiamate di interfaccia.

Giustificazione: Le ricorsioni portano a un comportamento non deterministico e sono quindi fonte di errori.

Importanza: Medio

Regola PLCopen: CP13

Esempio

Il seguente metodo ‎Call‎ è assegnato al blocco funzione ‎FB_Test‎:

FUNCTION_BLOCK FB_Test
VAR
	bParameter: BOOL;
END_VAR

METHOD Call : BOOL
VAR_INPUT
END_VAR
Call := THIS^.Call();		//SA0160

Il programma ‎PLC_PRG‎ chiama ‎FB_Test‎:

PROGRAM PLC_PRG
VAR
	fbTest : FB_Test;
	bValue : BOOL;	
END_VAR
bValue := fbTest.bParameter;
fbTest.Call();

--> SA0160: Recursive call detected: 'PLC_PRG -> FB_Test.Call -> FB_Test.Call