FOR-Anweisung in ST
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. 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. 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. |
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
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
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
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