SA0160: Recursive callsPermalink

Detects recursive calls in actions, methods, and properties of function blocks. Also detects possible recursions from virtual function calls and interface calls.

Justification: Recursions lead to non-deterministic behavior and are therefore a source of errors.

Importance: Medium

PLCopen rule: CP13

Example

The following method ‎Call‎ is assigned to the function block ‎FB_Test‎:

FUNCTION_BLOCK FB_Test
VAR
	bParameter: BOOL;
END_VAR

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

The program ‎PLC_PRG‎ calls ‎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