Capítulo 1
Programación de texto estructurado
Indicadores de estado
Condiciones de fallo:
Si usted desea esto
El lazo WHILE...DO evalúa sus condiciones primero. Si las
condiciones son verdaderas, entonces el controlador ejecuta
los enunciados dentro del lazo.
Esto es diferente del lazo REPEAT...UNTIL porque el lazo
REPEAT...UNTIL ejecuta los enunciados en la construcción y
luego determina si las condiciones son verdaderas antes de
ejecutar los enunciados nuevamente. Los enunciados en un
lazo REPEAT...UNTIL siempre se ejecutan por lo menos una
vez. Es posible que nunca se ejecuten los enunciados en un
lazo WHILE...DO.
Si usted desea esto
Mover caracteres ASCII desde una matriz SINT a un tag de
cadena. (En una matriz SINT, cada elemento retiene un
carácter). Pare cuando llegue al retorno de carro.
1. Inicializar Element_number a 0.
2. Cuente el número de elementos en SINT_array (la
matriz que contiene los caracteres ASCII) y almacene
el resultado en SINT_array_size (tag DINT).
3. Si el carácter en SINT_array[element_number] = 13
(valor decimal del retorno de carro), entonces pare.
4. Establezca String_tag[element_number] = el carácter
en SINT_array[element_number].
5. Añadir 1 a element_number. Esto permite al
controlador verificar el siguiente carácter en
SINT_array.
6. Establezca el miembro Length de String_tag =
element_number. (Así registra el número de caracteres
que hay hasta el momento en String_tag).
7. Si element_number = SINT_array_size, entonces pare.
(Usted está al final de la matriz y ésta no contiene un
retorno de carro).
8. Vaya a 3.
Publicación 1756-PM007B-ES-P – Julio 2008
No afectados
aritméticos:
Ocurre un fallo mayor si
La construcción tiene un lazo
excesivamente largo
Ejemplo 1:
Ejemplo 2:
Tipo de fallo
6
Introduzca este texto estructurado
pos := 0;
While ((pos <= 100) & structarray[pos].value <> targetvalue)) do
pos := pos + 2;
String_tag.DATA[pos] := SINT_array[pos];
end_while;
Introduzca este texto estructurado
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;
Código de fallo
1
29