Detecta llamadas recursivas en acciones, métodos y propiedades de bloques de funciones. También detecta posibles recursiones a partir de llamadas a funciones virtuales y llamadas a interfaces.
Justificación: Las recursividades conducen a un comportamiento no determinista y, por lo tanto, son una fuente de errores.
Importancia: Medio
Regla PLCopen: CP13
Ejemplo
El siguiente método Call se asigna al bloque de funciones FB_Test:
FUNCTION_BLOCK FB_Test VAR bParameter: BOOL; END_VAR METHOD Call : BOOL VAR_INPUT END_VAR Call := THIS^.Call(); //SA0160
El programa PLC_PRG llama a 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