SA0160 : Appels récursifs
Détermine les appels récursifs dans les actions, les méthodes et les propriétés des blocs fonctionnels. Détecte également les récursions possibles via des appels de fonctions virtuelles et des appels d'interface.
Raison : Les récursions conduisent à un comportement non déterministe et sont donc une source d'erreur.
Importance : Moyenne
Règle PLCopen : CP13
Exemple 118. Exemple
Le bloc fonction FB_Test
est la méthode suivante Call
attribué:
FUNCTION_BLOCK FB_Test VAR bParameter: BOOL; END_VAR
METHOD Call : BOOL VAR_INPUT END_VAR
Call := THIS^.Call(); //SA0160
Le programme PLC_PRG
appels FB_Test
au:
PROGRAM PLC_PRG VAR fbTest : FB_Test; bValue : BOOL; END_VAR
bValue := fbTest.bParameter; fbTest.Call();
Sortie dans le messages voir:
SA0160 : Appel récursif détecté : 'PLC_PRG' -> 'FB_Test.Call' -> 'FB_Test.Call'