FUNCTION_BLOCK "FOR"
TITLE = 'FOR Statement'
//Examples of the control statements
//Section 28.3: FOR Statement
//Section 28.6: CONTINUE Statement
//Section 28.7: EXIT Statement
//FOR ... TO ... BY ... DO ... END_FOR
//CONTINUE ... EXIT
VAR
index1 : INT := 4;
index2 : INT := 6;
index3 : INT := 8;
END_VAR
VAR_TEMP
Runtime_variable : INT;
i, k : INT;
END_VAR
BEGIN
//Simple FOR loop
FOR Runtime_variable := 0 TO 7 DO
M[index1,Runtime_variable] := TRUE;
END_FOR;
FOR Runtime_variable := 0 TO 15 BY 2 DO
M[index2 + Runtime_variable MOD 8, Runtime_variable] := TRUE;
END_FOR;
MD[index1] := 0;
MD[index2] := 0;
(* Set memory bits *)
FOR i := 2 TO 23 DO
M[i DIV 8,i MOD 8] := TRUE;
END_FOR;
MD[index2] := MD[index1];
//Nested FOR loops
(* Reset memory bits *)
FOR i := 0 TO 2 DO
FOR k := 0 TO 7 DO
IF (k < 2 AND i = 0) THEN CONTINUE; END_IF;
IF (i = 2 AND k > 5) THEN EXIT; END_IF;
M[i,K] := FALSE;
END_FOR;
END_FOR;
MW[index3] := INT_TO_WORD(i);
MW[index3 + 2] := INT_TO_WORD(k);
//FOR loop with step width <> 1
FOR i:=128 TO 142 BY 2 DO
MW[i] := PIW[i];
END_FOR;
//Abort FOR loops
FOR Runtime_variable := 0 TO 15 DO
M[index2,Runtime_variable] := TRUE;
IF Runtime_variable = 7 THEN CONTINUE;
ELSIF Runtime_variable = 8 THEN CONTINUE;
END_IF;
IF Runtime_variable = 10 THEN EXIT; END_IF;
M[index2 + 1,Runtime_variable] := TRUE;
END_FOR;
MD[index2] := 0;
END_FUNCTION_BLOCK