WHILE_DO

Use el lazo WHILE_DO para seguir realizando una acción mientras el valor de ciertas condiciones sea verdadero.
Operandos
WHILE bool_expression DO
<statement>;
Texto estructurado
Operando
Tipo
Formato
Descripción
bool_expression
BOOL
etiqueta
expresión
Etiqueta o expresión BOOL que evalúa hasta un valor BOOL
IMPORTANTE:
  • No realice demasiadas iteraciones del lazo en un mismo escaneado.
  • El controlador no ejecuta otras instrucciones de la rutina hasta que complete 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 es:
While_Do_syntax
Los siguientes diagramas muestran cómo se ejecuta un lazo WHILE_DO y cómo sale del lazo de forma prematura mediante una instrucción EXIT.
While Do executes
While Do
Mientras bool_expression sea verdadero, el controlador
ejecuta únicamente las instrucciones que se encuentren dentro del lazo WHILE_DO.
Para detener el lazo antes de que las condiciones sean verdaderas, use una instrucción EXIT.
Afecta a las marcas de estado matemáticas
No
Condiciones de fallo
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
El lazo WHILE_DO evalúa primero sus condiciones. Si el valor de las condiciones es verdadero, el controlador ejecuta las instrucciones que se encuentren dentro del lazo.
Esto es distinto al lazo REPEAT_UNTIL en cuanto a que este ejecuta las declaraciones del construcción y después determina si el valor de las condiciones es verdadero antes de volver a ejecutar las instrucciones. Las instrucciones de un lazo REPEAT_UNTIL siempre se ejecutan al menos una vez. Puede que las instrucciones de un lazo WHILE_DO nunca lleguen a ejecutarse.
pos := 0;
While ((pos <= 100) & structarray[pos].value <> targetvalue)) do
pos := pos + 2;
String_tag.DATA[pos] := SINT_array[pos];
end_while;
Ejemplo 2
Si se lleva a cabo lo siguiente,
Introduzca este texto estructurado
Mover caracteres ASCII de una matriz SINT a una etiqueta de cadena. (En una matriz SINT cada elemento tiene un carácter). Detener al alcanzar el retorno de carro.
Inicializar Element_number a 0.
Cuente el número de elementos en SINT_array (matriz que contiene los caracteres ASCII) y almacene el resultado en SINT_array_size (etiqueta DINT).
Si el carácter en SINT_array[element_number] = 13 (valor decimal del retorno de carro), parar.
Establecer String_tag[element_number] = el carácter en
SINT_array[element_number].
Añadir 1 al valor de element_number. Esto deja que el controlador compruebe el siguiente carácter de SINT_array.
Establecer el miembro Length de String_tag = element_number. (Esto registra el número de carácteres que hay en String_tag hasta el momento).
Si element_number = SINT_array_size, a continuacion se detiene. (Se encuentra al final de la matriz y no contiene un retorno de carro).
element_number := 0;
SIZE(SINT_array, 0, SINT_array_size);
While SINT_array[element_number] <> 13 do
String_tag.DATA[element_number] := SINT_array[element_number];
element_number := element_number + 1;
String_tag.LEN := element_number;
If element_number = SINT_array_size then
exit;
end_if;
end_while;
Entregue su opinión
¿Tiene dudas o comentarios acerca de esta documentación? Por favor deje su opinión aquí.
Normal