FOR_DO

Use el lazo FOR_DO para realizar una acción un número de veces específico antes de hacer cualquier otra cosa.
Si se habilita, la instrucción FOR ejecuta la Rutina repetidamente hasta que el valor Index excede el Terminal value. El valor del paso puede ser positivo o negativo. Si es negativo, el lazo finaliza cuando el índice sea menor que el valor terminal. Si es positivo, el lazo finaliza cuando el índice es mayor que el valor terminal.
Cada vez que la instrucción FOR ejecuta la rutina, añade el Step size al Index.
No haga demasiados lazos en un solo escaneado. Un número excesivo de repeticiones puede provocar que la vigilancia del controlador exceda el tiempo de espera, lo que provocaría un fallo mayor.
Operandos
FOR count:= initial_value TO
final_value BY increment DO
<statement>;
END_FOR;
Operando
Tipo
Formato
Descripción
count
SINT INT DINT
Etiqueta
Etiqueta para almacenar la posición de conteo a medida que se ejecuta el lazo FOR_DO.
initial_ value
SINT INT DINT
Etiqueta Expresión Inmediato
Debe evaluar hasta un número
Especifica el valor inicial de counteo
final_ value
SINT INT DINT
Etiqueta Expresión Inmediato
Especifica el valor final de counteo, que determina cuándo salir del lazo
increment
SINT INT DINT
Etiqueta Expresión Inmediato
(Opcional) cantidad en la que se debe incrementar el conteo cada vez que se pasa el lazo
Si no especifica un valor de incremento, el conteo se aumentará de 1 en 1.
IMPORTANTE:
  • No realice demasiadas iteraciones del lazo en un mismo escaneado.
  • El controlador no ejecuta otras instrucciones de la rutina hasta completar el lazo.
  • Se produce un fallo grave si la ejecución del lazo supera el temporizador de vigilancia para la tarea.
  • Considere la posibilidad de usar otro construción, como IF_THEN.
Descripción
La sintaxis se describe en la tabla.
FOR_DO_syntax
Los siguientes diagramas muestran cómo se ejecuta un lazo FOR_DO y cómo una instrucción EXIT sale del lazo de forma prematura.
FOR_DO Executes
FOR DO exits
El lazo FOR_DO se ejecuta un número de veces específico.
Para detener el lazo antes de que el counteo alcance el último valor, use una instrucción EXIT.
Afecta a las marcas de estado matemáticas
No
Fallos mayores/menores
Se producirá un fallo mayor si
Tipo de fallo
Código de fallo
El lazo de la construcción es demasiado largo.
6
1
Ejemplo 1
Si se lleva a cabo lo siguiente,
Introduzca este texto estructurado
Borrar el valor de bits 0…31 en una matriz de valores de tipo BOOL:
Inicializar la etiqueta de subíndice a 0.
Borrar i. Por ejemplo, cuando subscript = 5, borrar array[5].
Añadir 1 a subscript.
Si subscript es ≤ 31, repetir 2 y 3.
De lo contrario, detener.
Para subscript:=0 a 31 por 1, hacer
array[subscript] := 0;
End_for;
Ejemplo 2
Si se lleva a cabo lo siguiente,
Introduzca este texto estructurado
Un tipo de datos definido por el usuario (estructura) almacena la siguiente información sobre un elemento en su inventario:
  • ID de códigos de barra del elemento (tipo de datos de cadena)
  • Cantidad en depósito del elemento (tipo de datos DINT)
Una matriz de la estructura anterior contiene un elemento para cada elemento diferente de su inventario. Debe buscar la matriz de un producto específico (use su código de barras) y determine la cantidad que hay en depósito.
  1. Obtenga el tamaño (número de elementos) de la matriz Inventory y almacene el resultado en
  2. Inventory_Items (etiqueta DINT).
Inicialice la etiqueta position a 0.
  1. Si Barcode coincide con el ID de un elemento de la matriz, entonces:
Establecer la etiqueta Quantity = Inventory[position].Qty. Esto produce la cantidad que hay en depósito del elemento.
Detener.
Barcode es una etiqueta de cadena que almacena el código de barras del elemento que está buscando. Por ejemplo , cuando
position = 5, comparar Barcode con Inventory[5].ID.
  1. Añadir 1 a position.
  2. Si position es ≤ (Inventory_Items -1), repetir 3 y 4. Dado que los números de elemento comienzan en 0, el último elemento es menor que el número de elementos de la matriz en 1.
De lo contrario, detener.
SIZE(Inventory,0,Inventory_Items);
For position:=0 to Inventory_Items - 1 do
If Barcode = Inventory[position].ID then
Quantity := Inventory[position].Qty;
Exit;
End_if;
End_for;
Entregue su opinión
¿Tiene dudas o comentarios acerca de esta documentación? Por favor deje su opinión aquí.
Normal