Skip to main content

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:

  • sa_icon_message.png SA0160 : Appel récursif détecté : 'PLC_PRG' -> 'FB_Test.Call' -> 'FB_Test.Call'