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 ;