Grupos de mando
Los siguientes grupos de comandos son las construcciones básicas del Texto Estructurado y pueden combinarse y anidarse entre sí de forma flexible.
Enlaces booleanos
Los enlaces booleanos se utilizan para el enlace binario de variables.
| Símbolo | Operación lógica | Ejemplo | | --- | | --- | |NOT | Negación binaria | a := NOT b;| | AND| AND lógico | a := b AND c;| | OR | OR lógico | a := b OR c;| | XOR| OR exclusivo | a := b XOR c;|
La tabla de verdad de los enlaces booleanos tiene el siguiente aspecto:
| Entrada | Y | O | XOR |
|---|---|---|---|
| 0 0 | 0 | 0 | 0 |
| 0 1 | 0 | 1 | 1 |
| 1 0 | 0 | 1 | 1 |
| 1 1 | 1 | 1 | 0 |
Operaciones aritméticas
El texto estructurado contiene operaciones aritméticas básicas para su uso. Las prioridades deben respetarse durante la ejecución.
| Símbolo | Operación aritmética | Ejemplo |
|---|---|---|
:= | Asignación | a := b; |
+ | Adición | a := b + c; |
- | Resta | a := b - c; |
* | Multiplicación | a := b * c; |
/ | División | a := b / c; |
MOD | Modulo, resto entero de la división | a := b MOD c; |
El tipo de datos de las variables y los valores es siempre determinante para su cálculo.
| Expresión / Sintaxis | Var1 | Var2 | Var3 | Resultado | | --- | | | --- | -- | | Var 1 := 10 / 4; | INT | INT | 2 | | Var1 := 10 / 4; | REAL | INT | 2.0 | | Var1 := 10.0 / 4; | REAL | REAL | INT | 2.5 |
Operadores de comparación
| Símbolo | Expresión comparada | Ejemplo | |
|---|---|---|---|
= | Anon | IF a = b THEN | |
<> | Desigual | IF a <> b THEN | |
> | Mayor que | IF a > b THEN | |
>= | Mayor o igual que | IF a >= b THEN | |
< | Más pequeño que | IF a < b THEN | |
<= | Inferior o igual a | IF a <= b THEN |
Decisiones
IF a > b THEN // 1. Comparación
c := 1; // Instrucción si 1. Comparación TRUE
ELSIF a > d THEN // 2. Comparación
e := 1; // Instrucción if 2. Comparación TRUE
ELSE // Rama alternativa, sin comparación TRUE
f := 1; // Enunciado de la rama alternativa
END_IF // Fin de la decisión
Declaración IF - ELSE
Instrucción IF - ELSIF
Declaración CASE
La sentencia CASE se utiliza para agrupar varias sentencias condicionales con la misma variable condicional.
CASE newCase OF // Inicio del caso
1,5: // para 1 y 5
StateDescription := "Stopped";
2: // para 2
Statedescription := "Running";
3, 4, 6 ... 8: // para 3, 4, 6, 7, 8
Statedescription := "Failed";
ELSE // Rama alternativa
(* .. *)
END_CASE // Fin del caso
En un ciclo de programa, sólo se procesa un paso de la instrucción CASE a la vez. La variable de paso debe ser de tipo entero.
Rectificado
Los bucles se procesan repetidamente dentro de un ciclo. El código se ejecuta hasta que se cumple una condición de finalización definida.
Para evitar bucles sin fin, siempre se debe proporcionar una ruta que termine el bucle después de un cierto número de repeticiones.
Los bucles controlados por el cabezal (FOR, WHILE) comprueban la condición de finalización antes de la ejecución, bucles controlados por el pie (REPEAT) al final.
Declaración FOR
La instrucción FOR se utiliza para ejecutar un determinado número de repeticiones de una parte del programa.
Sum := 0;
FOR Index := 0 TO 3 DO
Sum := Sum + Values[ Index ];
END_FOR;
Declaración WHILE
La instrucción WHILE no tiene contador de bucle. Se llama hasta que una condición o expresión es FALSE.
WHILE Índice < 10 DO
Suma := Suma + Valores[ Índice ];
Índice := Índice + 1;
END_WHILE;
Declaración REPEAT
La condición de terminación se comprueba en el bucle REPEAT sólo después de la ejecución.
Índice := 0;
Suma := 0;
REPEAT
Suma := Suma + Valores[ Índice ];
Índice := Índice + 1;
UNTIL Índice >= 10 END_REPEAT;
Declaración EXIT
Puede utilizarse con todo tipo de bucles y conduce a la terminación inmediata.
REPEAT
IF Exit = TRUE THEN
EXIT;
END_IF
UNTIL Index >5
END_REPEAT