www.infoPLC.net
IEC 61131-3
Programación en ST (Structured Text)
24 de marzo de 2013 Antonio Cambronero , Product Engineer OMRON Electronics Iberia S.A.U.
IEC 61131-3 ( Programación en ST )
Introducción
¿qué es y para que sirve Structured Text (ST)? • Lenguaje de alto nivel (similar a PASCAL). • Utilizado en control industrial. • Definido por IEC 61131-3. • Incluye sentencias de control y asignación.
3
Elementos de un programa en ST Parte declarativa
Parte ejecutiva
4
IEC 61131-3 ( Programación en ST )
Reglas de sintaxis
Expresiones • Son reglas para calcular un valor. • Los tipos pueden ser: booleano, real, entero, etc. • Los operadores pueden ser: NOTA: Tener siempre en • Una constante • El valor de una variable. • El resultado de una función.
cuenta la precedencia de los operadores
Ejemplos: 2.0 * 3.1415 * radio ABS( temp ) / presion Valvula1 AND NOT Valvula2 6
La instrucción de asignación • Asigna el valor de la expresión de la derecha a la variable de la izquierda. • El operador de asignación es := • No confundir el operador de asignación, con el de comparación •
(Asignación) :=
Ej. Cálculo longitud
longitud := 2 * pi * r
Se escribe la expresión
7
(comparación)
R=5, PI=3,14159
longitud := 2 * pi * r
Se evalúa el resultado
=
Valor actual de la variable...
longitud := 31.4159 Se asigna a la variable
Delimitadores Cualquier sentencia debe acabar siempre con un delimitador ( ; )
(* ------ Asignación ------*) a := a AND NOT b;
(*------ Seleccción Simple ------*) IF a = TRUE THEN a := a AND b; END_IF;
No usar un delimitador dentro de una sentencia
8
(*------ Selección Simple ------*) IF a = TRUE ; THEN a := a AND b; END_IF;
Añadir Comentarios • Los comentarios se encierran entre paréntesis y asteriscos (* y *) • Se puede usar cualquier carácter dentro del comentario. • Los comentarios pueden comprender varias líneas. (* ------ Asignación ------*) a := a AND NOT b;
(*------ Selección Simple ------*) IF a = TRUE THEN a := a AND b; END_IF;
9
Espacios, Retornos de Carro y Tabulaciones • Se puede usar cualquier número de estos caracteres dentro del código ST. • Excepciones: • Palabras reservadas, nombres de variables, caracteres especiales, constantes. • Siempre usarlos entre palabras reservadas y variables. 10
(* ------ Asignación ------*) a := a AND NOT b; (*------ Selección Simple ------*) IF a = TRUE THEN a := a AND b; END_IF;
Mayúsculas y Minúsculas Uso indistinto de mayúsculas / minúsculas en cualquier sentencia o nombre de variable
(*------ Selección Simple ------*) IF A = TRUE THEN A := A AND B; END_IF;
11
=
(*------ Seleccción Simple ------*) if a = true then a := a and b; endif;
Nombres de variable • Los siguientes caracteres no se pueden utilizar en nombres de variables: •! “ # $ % & ‘ ( ) - = ^ \ | @ [ ] { } ; : + * , < > . / ?¿
• Los nombre de variables pueden ser de hasta 30,000 caracteres de longitud. • Las variables no pueden comenzar con un numero (0 a 9)
12
Constantes Numéricas Los valores numéricos se pueden expresar en... - Decimal (sin prefijo) - Hexadecimal - Octal - Binario
: 128 : 16#4D2 : 8#1355 : 2#10010010
(*------ Seleccción Simple ------*) if chico_a = true then a := 10; b := 16#A; c := 8#12; d := 2#1010; endif;
En constantes enteras o reales, se puede usar ( _ ) para formatear el literal, esto mejora lectura del código. Real: 12_345.0, 1.2_345 Enteros: -1_23, 1_234_567, 2#1100_0100, 16#FF_0F
13
Constantes de Texto • • • •
•
El numero de caracteres en una variable de tipo STRING es de 1 a 255. Una constante de texto se pone entre comillas → 'AAA'. Las mayúsculas y minúsculas son discriminadas. Un carácter $ seguido de dos dígitos numéricos son interpretados como un hexadecimal. • $02 → #02 hexadecimal Un carácter $ seguido de una letra es interpretado como: $$: carácter $ (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 pagina (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)
Tipos de datos (I) Símbolo
Contenido
Tamaño
Rango de valores
BOOL
Datos de bit
1
0 (falso), 1 (verdadero)
INT
Entero
16
-32.768 a +32.767
DINT
Entero Doble
32
−2,147,483,648 a +2,147,483,647
LINT
Entero Largo
64
−9,223,372,036,854,775,808 a +9,223,372,036,854,775,807
UINT
Entero sin signo
16
&0 a 65,535
UINT BCD
Entero sin signo BCD
WORD
( #0000 a #FFFF ) ó ( &0 a 65,535 )
UDINT
Entero doble sin signo
32
&0 a 4,294,967,295
UDINT BCD
Entero doble sin signo BCD
DWORD
#00000000 a #FFFFFFFF ó &0 a 4,294,967,295
ULINT
Entero largo sin signo
64
&0 a 18,446,744,073,709,551,615
ULINT BDC
Entero largo sin signo BCD
LWORD
#0000000000000000 a #FFFFFFFFFFFFFFFF ó &0 a 18,446,744,073,709,551,615
15
Tipos de datos (II) Símbolo
Contenido
Tamaño
Rango de valores
REAL
Numero real
32
−3.402823 × 10 38 a −1.175494 × 10−38, 0, +1.175494 × 10−38 a +3.402823 × 10 38
LREAL
Numero real largo
64
−1.79769313486232 × 10308 a −2.22507385850720 × 10−308 , 0, 2.22507385850720 × 10−308 a 1.79769313486232 × 10308
WORD
Dato de 16-bits
16
( #0000 a #FFFF ) ó ( &0 a 65,535 )
DWORD
Dato de 32-bits
32
#00000000 a #FFFFFFFF ó &0 a 4,294,967,295
LWORD
Dato de 64-bits
64
#0000000000000000 a #FFFFFFFFFFFFFFFF ó &0 a 18,446,744,073,709,551,615
STRING
Cadena de texto
Variable
De 0 a 255 bytes.
FUNCTION BLOCK
Instancia de bloque de función
---
---
CHANNEL
Word
WORD
NUMBER
Constante ó numero
--
16
No soportado en ST
Texto estructurado. • Funciones matemáticas soportadas: – Suma (+) – Resta (-) – Multiplicación (*) – División (/) • Funciones de bit soportadas: – Bitwise AND (AND o &) – Bitwise OR (OR) – OR Exclusiva OR (XOR) – NOT (NOT) 17
Operadores. • Operadores soportados: – – – – – – – – –
18
Paréntesis ( brackets () ) Índice de Matriz ( square brackets [ ] ) Operador de Asignación (:=) Operador de Comparación Menor Que (=) Operador de Comparación Igual (=) Operador de Comparación Distinto Que ()
Operadores Símbolo
Tipo de operación
Tipos de datos soportados por los operadores.
Prioridad 1: alta, 11:baja
[]()
Expresión / Tablas [ índices ]
Función ()
Evaluación de una función
Dependiendo de la función.
2
**
Exponenciación
REAL, LREAL
3
NOT
Complemento
BOOL, WORD, DWORD, LWORD
4
*
Multiplicación
INT, DINT, UINT, UDINT, ULINT, REAL, LREAL
5
/
División
INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL
+ -
Suma / Resta
INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL
6
< > =
Comparaciones
BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, WORD, DWORD, LWORD, REAL, LREAL
7
=
Igualdad / Desigualdad
BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, WORD, DWORD, LWORD, REAL, LREAL
8
Operación Booleana AND
BOOL, WORD, DWORD, LWORD
9
XOR
Operación Booleana XOR
BOOL, WORD, DWORD, LWORD
10
OR
Operación Booleana OR
BOOL, WORD, DWORD, LWORD
11
AND
19
&
1
Palabras reservadas. – – – – – –
20
TRUE, FALSE IF, THEN, ELSE, ELSEIF, END_IF DO, WHILE, END_WHILE REPEAT, UNTIL, END_REPEAT FOR, TO, BY, END_FOR CASE, OF, ELSE, END_CASE
Sentencias 1/2 Sentencia
Función
Ejemplo
;
Final de sentencia
END_IF ;
(* *)
Comentario
(* Comentario *)
:=
Asignación
A := B
IF, THEN, ELSE, ELSEIF, END_IF
Condicional simple
IF a < b THEN c := a END_IF;
CASE OF, ELSE, END_CASE
Condicional compuesta
CASE a OF 1: b := 1; 2: b := 2; ELSE b := 3; END_CASE;
22
Sentencias 2/2 Sentencia
Función
Ejemplo
FOR, TO, BY, DO, END_FOR
Bucle con n repeticiones.
FOR d := 1 TO 5 b := d * 2; END_FOR;
WHILE, DO, END_WHILE
Bucle con condición inicial.
WHILE a < 15 DO b := b + 3; END_WHILE;
REPEAT, UNTIL, END_REPEAT
Bucle con condición final.
REPEAT d := d + 1; UNTIL d < 15 END_REPEAT;
EXIT
Sale del proceso de un bucle.
WHILE true a := a + 1; IF a > 4 THEN EXIT END_IF; END_WHILE;
RETURN
Sale del bloque de función
RETURN;
23
Colores usados en el código. Palabras reservadas: Comentarios: Errores: Resto de cosas:
Los colores NO pueden ser personalizados.
24
Azul Verde Rojo Negro
IEC 61131-3 ( Programación en ST )
Sentencias de control
Sentencia IF • Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresión. • Sintaxis: IF expression1 THEN statement-list1 [ ELSIF expression2 THEN statement-list2 ] [ ELSE statement-list3 ] END_IF;
26
Sentencia IF (condición simple) Sintaxis de la declaración: IF THEN ; ELSE ; END_IF;
27
Sentencia IF (condición simple) Sintaxis de la declaración: IF THEN IF THEN ; ELSE : END_IF; END_IF;
28
Sentencia IF (múltiple condiciones) Sintaxis de la declaración:
IF THEN ; ELSIF THEN ; ELSIF THEN ; ... ELSIF THEN ; ELSE ; END_IF;
29
Sentencia IF (múltiple condiciones)
30
Sentencia IF (Ejemplos) IF A>0 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;
31
IF A THEN X:=10; ELSE X:=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;
Sentencia CASE • Ejecuta uno de varios grupos de instrucciones según el valor de una expresión. • Sintaxis: CASE OF : ; : ; ... : ; ELSE ; END_CASE;
-> INT, DINT, LINT, UINT, UDINT, ULINT 32
Sentencia CASE
33
Sentencia CASE (Ejemplos) CASE A OF 1: X:=1; 2: X:=2; 3: X:=3; ELSE Y:=0; END_CASE;
34
CASE A OF 1: 2,5: 6..10: 11,12,15..20: ELSE Y:=0; END_CASE;
X:=1; X:=2; X:=3; X:=4;
Sentencia FOR • Repite un grupo de instrucciones un número de veces especificado. • Sintaxis: FOR control variable := TO [ BY ] DO ; END_FOR; : valor inicial de la variable de control . : valor final de la variable de control. : incrementos de la variable de control. : (INT, DINT, LINT, UINT, UDINT, ULINT). 35
Sentencia FOR
36
Sentencia FOR (Ejemplos) FOR i:=0 TO 100 DO array[i]:=0; END_FOR;
IF i=101 THEN a:=TRUE; ELSE a:=FALSE; END_IF;
37
FOR n:=0 TO 50 BY 5 DO SP[n]:=100; END_FOR;
Sentencia WHILE • Ejecuta una serie de instrucciones siempre que una condición dada sea True. • Sintaxis: WHILE DO ; END_WHILE;
38
Sentencia WHILE
39
Sentencia WHILE (Ejemplos) A:=0; WHILE AE )
Llamadas a Bloques de Función • Método 2: •
• • •
Usando este método se pasan y reciben los valores justo en el orden en el que se han declarado en el bloque de función. Los argumentos de las variables de entrada deben de estar al principio de la lista, o justo después de la variable EN, si esta en la lista. Las variables de salida pueden ser omitidas si los datos no son usados, pero deben de ser omitidas de derecha a izquierda. Las especificaciones del método 1, no pueden ser usadas junto a las especificaciones de este método, en una misma llamada a una FB. A(
47
C,
………… , E )
Llamadas a Bloques de Función (Ejemplos) • Método 1: • • •
Instance_FB(EN:=A, FB_IN1:=IN1, FB_IN2:=IN2, FB_IN3:=IN3, FB_OUT1=>OUT1, FB_OUT2=>OUT2, FB_OUT3=>OUT3, ENO=>B) Instance_FB( FB_IN1:=IN1, FB_IN2:=IN2, FB_IN3:=IN3, FB_OUT1=>OUT1, FB_OUT2=>OUT2, FB_OUT3=>OUT3 ) Instance_FB(EN:=A, FB_IN1:=IN1, FB_OUT1=>OUT1, FB_IN2:=IN2, FB_OUT2=>OUT2, FB_IN3:=IN3, FB_OUT3=>OUT3, ENO=>B)
• Método 2: • • •
48
Instance_FB( IN1, IN2, IN3, OUT1, OUT2, OUT3 ) Instance_FB( IN1, IN2, IN3, OUT1 ) Instance_FB( IN1, IN2, IN3, OUT1, OUT3 )
IEC 61131-3 ( Programación en ST )
Librería de Funciones
Funciones
50
Tipo de función
Utilidad
Funciones numéricas
Valor absoluto, funciones trigonométricas, etc…
Funciones para manejo de strings
Manejo de cadenas de caracteres.
Funciones de expansión OMRON
Funciones de expansión al lenguaje estándar.
Conversiones de tipos de datos
Conversiones entre tipos de datos.
Funciones numéricas (I) Función
Tipo de datos de argumentos
Tipo de datos devueltos
Descripción
ABS (arg)
INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL
INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL
Valor absoluto
SQRT (arg)
REAL, LREAL
REAL, LREAL
Raíz cuadrada
LN (arg)
REAL, LREAL
REAL, LREAL
Logaritmo natural: LOGe
LOG (arg)
REAL, LREAL
REAL, LREAL
Logaritmo: LOG10
EXP (arg)
REAL, LREAL
REAL, LREAL
Exponencial natural: earg
EXPT (arg)
Base
REAL, LREAL
REAL, LREAL
Exponencial: baseexpo
Exponente
INT, DINT, LINT, UINT, UDINT, ULINT
51
Funciones numéricas (II) Función
Tipo de datos de argumentos
Tipo de datos devueltos
Descripción
SIN (arg)
REAL, LREAL
REAL, LREAL
Sino
COS (arg)
REAL, LREAL
REAL, LREAL
Coseno
TAN (arg)
REAL, LREAL
REAL, LREAL
Tangente
ASIN (arg)
REAL, LREAL
REAL, LREAL
Arco Seno
ACOS (arg)
REAL, LREAL
REAL, LREAL
Arco Coseno
ATAN (arg)
REAL, LREAL
REAL, LREAL
Arco Tangente
52
Funciones para cadenas de texto (I) Función
Tipo de datos de argumentos
Tipo de datos devueltos
Descripción
LEN (string)
String
STRING
INT
Devuelve la longitud de un texto.
LEFT (,
Texto fuente
STRING
STRING
Numero de caracteres
INT, UINT
Extrae caracteres de un texto comenzando por la izquierda.
Texto fuente
STRING
STRING
Numero de caracteres
INT, UINT
Extrae caracteres de un texto comenzando por la derecha.
Texto fuente
STRING
STRING
Extrae caracteres de un texto.
Numero de caracteres
INT, UINT
Posición
INT, UINT
)
RIGHT (, )
MID (, , )
53
La posición del primer carácter en las cadenas de texto es 1
Funciones para cadenas de texto (II) Función
Tipo de datos de argumentos
Tipo de datos devueltos
Descripción
CONCAT(, , …..) Hasta 32 argumentos
INSERT (, , )
DELETE (, , )
54
La posición del primer carácter en las cadenas de texto es 1
Funciones para cadenas de texto (III) Función
Tipo de datos de argumentos
Tipo de datos devueltos
Descripción
REPLACE (, , , )
FIND (, )
La posición del primer carácter en las cadenas de texto es 1 55
Funciones de expansión OMRON (I) Función
Tipo de datos de argumentos
Tipo de datos devueltos
Descripción
WRITE_TEXT (, , , )
56
Funciones de expansión OMRON (II) Función
Tipo de datos de argumentos
Datos devueltos
Descripción
TXD_CPU ( )
Texto
STRING
---
Transmite una cadena de texto por el puerto RS-232 de la CPU.
TXD_SCB ( , )
Texto
STRING
---
Puerto serie
INT, UINT, WORD
Transmite una cadena de texto por un puerto serie de la SCB.
TXD_SCU ( ,
Texto
STRING
---
, , )
Numero Unidad SCU
INT, UINT, WORD
Transmite una cadena de texto por un puerto serie de la SCU.
Puerto serie
INT, UINT, WORD
Puerto lógico interno
INT, UINT, WORD
57
Funciones de expansión OMRON (III) Función
Tipo de datos de argumentos
Datos devueltos
Descripción
RXD_CPU ( , )
Carga
STRING
---
Numero caracteres
INT, UINT, WORD
Recibe una cadena de texto por el puerto RS232 de la CPU.
RXD_SCB ( ,
Carga
STRING
---
, )
Numero caracteres
INT, UINT, WORD
Recibe una cadena de texto por un puerto serie de la SCB.
Puerto serie
INT, UINT, WORD
Carga
STRING
---
Numero caracteres
INT, UINT, WORD
Recibe una cadena de texto por un puerto serie de la SCU.
Numero Unidad SCU
INT, UINT, WORD
Puerto serie
INT, UINT, WORD
Puerto lógico interno
INT, UINT, WORD
RXD_SCU ( , , , , )
58
Funciones de expansión OMRON (IV) Función
Tipo de datos de argumentos
Tipo de datos devueltos
Descripción
DEG_TO_RAD (arg)
REAL, LREAL
REAL, LREAL
Devuelve la longitud de un texto.
RAD_TO_DEG ( arg)
REAL, LREAL
REAL, LREAL
Extrae caracteres de un texto comenzando por la izquierda.
59
Conversión entre tipo de datos – Funciones de conversión de tipos de datos. B := from_TO_to( valor );
NOTA: Los tipos reales son redondeados
B := REAL_TO_INT(valor);
– Funciones de conversión de texto a números. B := tipo_dato_origen_TO_STRING( valor ); B := STRING_TO _tipo_dato_destino( valor ); B := REAL_TO_STRING(valor); B := STRING_TO _UINT(valor); 60
IEC 61131-3 ( Programación en ST )
Restricciones
Restricciones – No hay limite en el anidamiento de las instrucciones IF, CASE, FOR, WHILE ó REPEAT. – No es posible llamar a instrucciones Ladder desde el ST. – Desde un programa ST es posible llamar a FB’s. – Hasta 8 niveles de anidamiento, en las llamadas a FB’s.
Restricciones – Los entero solamente pueden ser asignados a variables de tipo WORD, DWORD, INT, DINT, UINT, UDINT ó ULINT. – Los números reales solamente se pueden asignar a variables de tipo REAL ó LREAL. – Los bits (TRUE, FALSE) pueden solamente ser asignados a variables de tipo BOOL. – Los tipos de datos deben de estar en concordancia con el ST.
¡¡¡ Gracias por la atención !!! Antonio Cambronero Berlanga Product Engineer
Omron Electronics Iberia, S.A.