FOR-Anweisung in ST

Syntax
FOR ... TO ... BY ... DO
...
END_FOR;

Bedeutung

Mit der FOR-Anweisung bestimmen Sie, dass eine Gruppe von Anweisungen (nach DO bis zu END_FOR eingegeben) wiederholt ausgeführt wird, während eine Reihe von Werten der Steuervariable der FOR-Anweisung (nach FOR eingegeben) zugewiesen wird. Die FOR-Anweisung erhöht oder verringert die Steuervariable, beim Anfangswert beginnend (der der Steuervariable zugewiesen ist) bis zum Endwert (nach TO eingegeben), und zwar in jener Schrittweite, die durch den Wert eines Ausdrucks bestimmt ist (die Schrittweite ist nach BY eingegeben). Falls Sie das BY-Konstrukt entfallen lassen, wird der Wert 1 für die schrittweisen Erhöhung verwendet.

Der Durchlauf der FOR-Anweisung wird beendet, wenn der Wert der Steuervariable außerhalb des Bereichs liegt, der durch das TO-Konstrukt bestimmt ist.
Die Bedingung für die Beendigung wird am Beginn jedes Durchlaufs für jede schrittweisen Erhöhung bzw. Verminderung bestimmt: Die Gruppe der Anweisungen wird nicht ausgeführt, falls der Wert der Steuervariable den Endwert überschritten hat (bei einem positiven Wert für die Schrittweite) bzw. falls der Wert der Steuervariable den Endwert unterschritten hat (bei einem negativen Wert für die Schrittweite).

D er Wert der Steuervariable nach Ausführung der FOR-Anweisung entspricht dem letzten Wert des letzten Durchlaufs (also: des Endwerts). Falls die Gruppe von Anweisungen gar nicht ausgeführt werden, wird d er Wert der Steuervariable nicht verändert.

Die Steuervariable, der Anfangswert und der Endwert müssen Ausdrücke des gleichen Integer-Typs ANY_INT (z.B. INT, SINT oder DINT) sein und dürfen von den wiederholten Anweisungen nicht verändert werden.
Die Schrittweite darf hingegen von einem unterschiedlichen Integer-Typs sein. So kann ein Anfangswert verringert werden, während eine Steuervariable vom einem ANY_UNSIGNED-Datentyp verwendet wird (siehe Beispiel 2).

Keine Änderungen der Steuervariable, des Anfangswert, des Endwerts und der Schrittweite in den wiederholten Anweisungen

Beachten Sie, dass logi.CAD 3 die Anzahl der Durchläufe bestimmt, bevor die FOR-Anweisung gestartet wird. Geben Sie daher keine Anweisungen nach DO bis zu END_FOR ein, die die Steuervariable, den Anfangswert, den Endwert und/oder der Schrittweite ändern.

Unbestimmbar Anzahl der Durchläufe

Ist die Anzahl der Durchläufe unbestimmbar (siehe Beispiel 4, da darin der Endwert nie erreicht werden kann), wird die FOR-Anweisung gar nicht gestartet.

Beispiel 1: FOR-Anweisung wird ausgeführt.
FUNCTION_BLOCK ExampleExecutedFORDocumentation
VAR
count, sum, I : INT;
END_VAR
count := 1;
sum := 0;
FOR I := 1 TO 50 BY 2 DO
(* "I" ist die Steuervariable, "1" ist der Anfangswert, "49" ist der Endwert (obwohl "50" eingegeben ist), "2" ist die Schrittweite. *)
sum := ADD(sum, count);
count := ADD(count, 1);
END_FOR;
END_FUNCTION_BLOCK
Beispiel 2: FOR-Anweisung wird ausgeführt.
FUNCTION_BLOCK ExampleExecutedFORDocumentation2
VAR
I : UINT;
END_VAR
FOR I := 100 TO 1 BY -1 DO
(* "I" ist die Steuervariable, "100" ist der Anfangswert, "1" ist der Endwert, "-1" ist die Schrittweite. *)
(* ... *)
END_FOR;
END_FUNCTION_BLOCK
Beispiel 3: FOR-Anweisung wird nicht ausgeführt.
FUNCTION_BLOCK ExampleNotExecutedFORDocumentation
VAR
count, sum, I : INT;
END_VAR
count := 1;
sum := 0;
FOR I := 1 TO 10 BY -1 DO
(* Die FOR-Anweisung wird nicht ausgeführt werden, da es nicht möglich ist den Anfangswert "1" um den Wert "-1" zu erhöhen (= um "1" zu verringern), bis der Endwert "10" erreicht wird. *)
sum := ADD(sum, count);
count := ADD(count, 1);
END_FOR;
END_FUNCTION_BLOCK
Beispiel 4: FOR-Anweisung wird nicht ausgeführt.
FUNCTION_BLOCK ExampleNotExecutedFORDocumentation2
VAR
count, sum, I : INT;
byVar : INT;
END_VAR
count := 1;
sum := 0;
byVar := 0;
FOR I := 1 TO 10 BY byVar DO
(* Die FOR-Anweisung wird nicht ausgeführt werden, da die Anzahl der Durchläufe unbestimmbar ist. *)
(* ... *)
END_FOR;
END_FUNCTION_BLOCK