Skip to main content

SA0081 : La bordure supérieure n'est pas une constante

Détecte le FOR instructions où la limite supérieure n'est pas définie avec une valeur constante

Justification : Si la borne supérieure d'une boucle est une valeur variable, il n'est plus possible de voir à quelle fréquence une boucle est exécutée. Cela peut entraîner de graves problèmes lors de l'exécution. Le pire des cas est une boucle infinie.

Importance : Élevée

Exemple 86. Exemple
PROGRAM PLC_PRG
VAR
    i:INT;
    iBorder1: INT := 10;
    iBorder2: INT := 10;
    iCounter: INT;
END_VAR
VAR CONSTANT
    ciBorder:INT := 10;
END_VAR
FOR i:=0 TO 10 DO    //OK
    iCounter := i;
END_FOR

FOR i:=0 TO ciBorder DO    // OK
    iCounter := i;
END_FOR

FOR i:=0 TO iBorder1 DO    // SA0081
    iCounter := i;
END_FOR

FOR i:=0 TO iBorder2 DO    // SA0081
    iCounter := i;
    IF iCounter = 10 THEN
        iBorder2 := 50;
    END_IF
END_FOR

Sortie dans le messages voir:

  • sa_icon_message.png SA0081 : La bordure supérieure d'une boucle for doit être une valeur constante