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