En el control industrial se utiliza la norma estándar internacional IEC 61131-3 que define los lenguajes de programación de los Controladores Lógicos Programables (PLC). Uno de ellos es el Texto Estructurado (Structured Text - ST) que es un lenguaje textual de alto nivel similar a PASCAL.
Lenguajes de programación usados en autómatas y estandarizados por la IEC 61131
Texto estructurado (ST)
En el control industrial se utiliza la norma estándar internacional IEC 61131-3 que define los lenguajes de programación de los Controladores Lógicos Programables (PLC). Uno de ellos es el Texto Estructurado (Structured Text - ST) que es un lenguaje textual de alto nivel similar a PASCAL.
Un programa en ST se compone de declaraciones. Hay dos tipos de declaraciones: de asignación, para asignar un valor a una variable y de control, como sentencias de selección y sentencias de repetición.
Las declaraciones se componen de los siguientes elementos:
Variables, Constantes, Operadores y Funciones.
-------------------------------------------------------------------------------------------------
Nota: Lo que sigue está particularizado para el programa CX-Programer.
-------------------------------------------------------------------------------------------------
2.- Composición del Texto Estructurado
Operador de asignación:
El operador de asignación es := y asigna el valor de la expresión de la derecha a la variable de la izquierda. Se utiliza para establecer valores iniciales, almacenar resultados de cálculo e incrementar las variables.
Ejemplos:
A := 4 Asignamos a A el valor 4.
B := 2 * C Asignamos a B el doble del valor de C.
D := E Asignamos a D el valor de E.
F := TRUE Asignamos a F el valor “cierto” (1 lógico)(on).
G := FALSE Asignamos a G el valor “falso” (0 lógico)(off).
Operador de comparación:
El operador de comparación es = no confundir el operador de asignación, con el de comparación.
Ejemplos:
A = 4 comparamos el valor de A con 4.
B = 2 * C comparamos el valor de B con el doble del valor de C.
Colores usados en el código
El CX-Programmer muestra automáticamente texto en los colores siguientes:
Palabras reservadas: Azul
Comentarios: Verde
Errores: Rojo
Resto de cosas: Negro
Los colores NO los podemos personalizar.
(* Ejemplo *)
a := a AND NOT b;
(* Selección *)
IF a = TRUE THEN
a := a AND B;
valor := (a+b) *15 +16#FF;
d := ABS (valor);
END_IF;
Delimitador de instrucciones:
Las declaraciones de asignación y control deben acabar siempre con un delimitador de punto y coma ( ; ), no se pueden completar simplemente usando un retorno de carro.
Ejemplos:
(* Ejemplo 1 *)
A := A + B;
(* Ejemplo 2 *)
IF C = TRUE THEN
C := C AND B;
END_IF;
No se puede usar un delimitador dentro de una sentencia ya que se producirá un error de sintaxis.
Ejemplo:
(* Ejemplo *) MAL
IF C = TRUE ; THEN
C := C AND B;
END_IF;
Comentarios:
Los comentarios se encierran entre paréntesis y asteriscos (* y *). Se puede usar cualquier carácter dentro del comentario excepto paréntesis y asteriscos. Los comentarios pueden comprender varias líneas. No se admite anidamiento dentro de los comentarios.
Ejemplos:
(*Este es un ejemplo de comentario válido*)
(*(*Este es un ejemplo de comentario no válido*)*)
Espacios, Retornos de Carro y Tabulaciones:
Se pueden utilizar cualquier número de espacios, retornos de carro y tabulaciones en cualquier lugar dentro de las sentencias. Se recomienda usarlos entre palabras reservadas y ecuaciones para facilitar su mejor comprensión.
No podemos utilizar espacios, retornos de carro y tabulaciones dentro de palabras reservadas, nombres de variables, caracteres especiales y constantes (valores numéricos).
Ejemplos:
(* Ejemplo 1 *) → (* Ejemplo 1 *)
A:=A+B; A := A + B;
(* Ejemplo 2 *) → (* Ejemplo 2 *)
IFC=TRUE THEN IF C = TRUE THEN
C:=C ANDB; C := C AND B;
END_IF; END_IF;
Mayúsculas y Minúsculas:
Es indistinto el uso de mayúsculas y minúsculas en cualquier sentencia o nombre de variable.
Ejemplos:
(* Ejemplo 1 *)
IF A = TRUE THEN
A := A AND B;
END_IF;
(* Ejemplo 2 *)
if a = true then
a := a and b;
end_if;
Nombres de variables:
Los caracteres siguientes no se pueden utilizar en nombres de variables:
! " # \( % & ` ( ) - = ^ ~ \ / | @ [ ] { } ; : + * , < > . ¿ ?
Las variables no pueden comenzar por un número (0 a 9).
No se pueden utilizar espacios en nombres de variables.
Prioridad entre operadores:
Las operaciones que requieran prioridad las pondremos entre paréntesis.
Ejemplo:
AND tiene prioridad sobre OR.
En “A OR B AND C”, se dará prioridad a B AND C.
En “(A OR B) AND C”, se dará prioridad a (A OR B).
Cadenas de Texto:
- El número máximo de caracteres alfanuméricos en una cadena de texto (tipo STRING) es de 255.
- Las cadenas de texto no distinguen entre mayúsculas y minúsculas.
- Una cadena de texto se tiene que poner entre comillas → 'AAA'.
Notación |
Descripción |
‘A’ |
Indica la cadena de texto "A" (ASCII 41) |
‘ ’ |
Indica una cadena de texto que contiene un único espacio (ASCII 20) |
‘’ |
Indica una cadena de texto vacía |
- Un carácter \) seguido de dos dígitos numéricos se interpretan como un hexadecimal.
\(02 → #02 hexadecimal
- Un carácter \) seguido de una letra se interpreta como:
Notación |
Descripción |
|
'$\(' |
Carácter de \) (signo del dollar) |
(Código ASCII: #24) |
'\('' |
Comilla simple |
(Código ASCII: #27) |
'\)L' ó '\(l' |
Final de línea (LF) |
(Código ASCII: #0A) |
'\)N' ó '\(n' |
Nueva línea (CR + LF) |
(Código ASCII: #0D0A) |
'\)P' ó '\(p' |
Final de página (FF) |
(Código ASCII: #0C) |
'\)R' ó '\(r' |
Retorno de carro (CR) |
(Código ASCII: #0D) |
'\)T' ó '$t' |
Tabulación horizontal (Tab) |
(Código ASCII: #09) |
Constantes Numéricas:
Los valores numéricos se pueden expresar en decimal, hexadecimal, octal o binario de la siguiente forma:
Ejemplo, para el valor decimal 12:
- Decimal (sin prefijo): 12
- Hexadecimal: 16#C
- Octal: 8#14
- Binario: 2#1100
(* Ejemplo *)
IF Z = TRUE THEN
a := 12;
b := 16#C;
c := 8#14;
d := 2#1100;
END_IF;
Operadores o Funciones (de más a menos prioridad):
Operador |
Tipo de operación |
( ) [ ] |
Expresión/Tablas[índices] |
Función () |
Evaluación de una función |
** |
Exponenciación |
NOT |
Complemento |
* / |
Multiplicación / División |
+ - |
Suma / Resta |
< > <= >= |
Comparaciones |
= < > |
Igualdad / Desigualdad |
AND & |
Operación Booleana AND |
XOR |
Operación Booleana XOR |
OR |
Operación Booleana OR |
Sentencias o declaraciones:
Sentencias o Declaraciones |
Función |
; |
Final de declaración |
(* *) |
Comentario |
:= |
Asignación |
IF, THEN, ELSE, ELSIF, END_IF |
Condicional simple |
CASE OF, ELSE, END_CASE |
Condicional compuesta |
FOR, TO, BY, DO, END_FOR |
Bucle con n repeticiones |
WHILE, DO, END_WHILE |
Bucle con condición inicial |
REPEAT, UNTIL, END_REPEAT |
Bucle con condición final |
EXIT |
Sale del proceso de un bucle |
RETURN |
Sale del bloque de función |
3.- Sentencias de control
Sentencia IF:
Esta sentencia se utiliza para ejecutar una expresión cuando se cumple una condición especificada. Si la condición no se cumple, se ejecuta una expresión diferente.
IF se debe utilizar junto con END_IF.
IF - Condición Simple:
Sintaxis:
IF < Condición > THEN
< Expresión_1 >;
ELSE
< Expresión_2 >;
END_IF;
Diagrama de flujo:
Sintaxis:
IF < Condición_1 > THEN
IF < Condición_2 > THEN
< Expresión_1 >;
ELSE
< Expresión_2 >;
END_IF;
END_IF;
Diagrama de flujo:
IF - Condición Múltiple:
Sintaxis:
IF < Condición_1 > THEN < Expresión_1 >;
ELSIF < Condición_2> THEN < Expresión_2 >;
ELSIF < Condición_3> THEN < Expresión_3 >;
etc…..
ELSIF < Condición _n > THEN < Expresión _n >;
ELSE
< Expresión _m >;
Diagrama de flujo:
Ejemplos:
IF A>0 THEN
X:=10;
ELSE
X:=0;
END_IF;
IF A THEN X:=10;
ELSE X:=0;
END_IF;
IF A>0 AND B>1 THEN
X:=10; Y:=20;
ELSE
X:=0; Y:=0;
END_IF;
IF A>0 THEN X:=10;
ELSIF B=1 THEN X:=1;
ELSIF B=2 THEN X:=2;
ELSE
X:=0;
END_IF;
Referencias
Web: portalelectrozona