Description
L’instruction FOR
est utilisée si le nombre d’occurrences
peut être défini à l’avance. Sinon, l'instruction WHILE
ou REPEAT
est utilisée.
L’instruction FOR
reprend une chaîne
d’instructions jusqu’à l’instruction END_FOR
. Le nombre d'occurrences est déterminé
par la valeur initiale, la valeur finale et la variable de commande.
La variable de commande, la valeur initiale et la valeur finale
doivent être du même type de données (INT
, UINT
, DINT
ou UDINT
).
La variable de commande, la variable initiale et la variable finale peuvent être modifiées avec une instruction récurrente. Cela constitue un complément de la norme CEI 61131-3.
L’instruction FOR
incrémente la valeur de la variable de commande
d'une valeur initiale à une valeur finale. Par défaut, la
valeur de l'incrément est 1. Si une autre valeur doit être
utilisée, il est possible d'indiquer explicitement une valeur
d'incrément (variable ou constante). La valeur de la variable
de commande est contrôlée avant chaque nouvelle exécution
de la boucle. La boucle est abandonnée si ladite valeur est en
dehors de la plage de la valeur initiale et de la valeur finale.
Avant la première exécution de la boucle, on contrôlera si l’incrément des variables de commande progresse vers la valeur finale à partir de la valeur initiale. Si ce n'est pas le cas (par ex. valeur initiale ≤ valeur finale et incrément négatif), la boucle n'est pas traitée. La valeur de la variable de commande n'est pas définie en dehors de la boucle.
L’instruction DO
marque la fin de la définition d'une récurrence
et le début de l'instruction (ou des instructions).
L'ocurrence
peut être interrompue avant la fin l'aide de l'instruction EXIT
. L’instruction END_FOR
marque
la fin de l'instruction (ou des instructions).
Exemple : FOR
avec incrément 1
FOR
avec incrément 1

FOR
avec incrément
différent de 1
Si un autre incrément que doit
être utilisé, vous pouvez le définir avec BY
. L'incrément, la valeur initiale, la valeur finale et la variable
de commande doivent être du même type de données (DINT
ou INT
). Le critère qui détermine
le sens de traitement (comptage, décomptage) est le signe de
l'expression BY
Si cette expression est positive,
la boucle est comptée, si elle est négative, la boucle est
décomptée.
Exemple : comptage à deux étapes
Comptage à deux étapes

Exemple : décomptage
Décomptage
FOR i:= 10 TO 1 BY -1 DO (* BY < 0 : Backwards.loop *)
C:= C * COS(B) ; (* Instruction exécutée 10 x *)
END_FOR ;
Exemple : Boucles « uniques »
Les boucles de l'exemple sont exécutées exactement une fois puisque la valeur initiale = la valeur finale. Et ce n'est pas important si l'incrément est positif ou négatif.
FOR i:= 10 TO 10 DO (* Boucle unique *)
C:= C * COS(B) ;
END_FOR ;
ou,
FOR i:= 10 TO 10 BY -1 DO (* Boucle unique *)
C:= C * COS(B) ;
END_FOR ;
Exemple : Boucles critiques
Si dans l'exemple l'incrément est j
> 0,
alors l'instruction est exécutée.
Si j
< 0, les instructions ne sont pas exécutées car la
situation Valeur initiale < Valeur finale ne permet qu'un incrément
≥ 0.
Si Si
= 0, les instructions sont
exécutées et on obtient une boucle sans fin car avec un
incrément de 0 la valeur finale n'est jamais atteinte.
FOR i:= 1 TO 10 BY j DO
C:= C * COS(B) ;
END_FOR ;