SA0160: Chiamate ricorsive
Rileva le chiamate ricorsive nelle azioni, nei metodi e nelle proprietà dei blocchi funzione. Rileva anche possibili ricorsioni da chiamate di funzioni virtuali e chiamate di interfaccia.
Motivazione: Le ricorsioni portano a comportamenti non deterministici e sono quindi fonte di errori.
Importanza: Media
Regola PLCopen: CP13
Esempio 118. 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
chiamate FB_Test
:
PROGRAM PLC_PRG VAR fbTest : FB_Test; bValue : BOOL; END_VAR
bValue := fbTest.bParameter; fbTest.Call();
Uscita in Messaggi vista:
SA0160: Chiamata ricorsiva rilevata: 'PLC_PRG' -> 'FB_Test.Call' -> 'FB_Test.Call'