IEC 61131-3 Programación en ST (Structured Text) 11 de febrero de 2009 Antonio Cambronero, Product Engineer OMRON Electronics Iberia S.A.U. IEC 61131-3 ( Programación en ST ) Introducción 1
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 2
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: Una constante El valor de una variable. El resultado de una función. NOTA: Tener siempre en cuenta la precedencia de los operadores 6 Ejemplos: 2.0 * 3.1415 * radio ABS( temp ) / presion Valvula1 AND NOT Valvula2 3
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) := (comparación) = Ej. Cálculo longitud longitud := 2 * pi * r R=5, PI=3,14159 longitud := 2 * pi * r Valor actual de la variable... longitud := 31.4159 Se escribe la expresión Se evalúa el resultado Se asigna a la variable 7 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 (*------ Selección Simple ------*) IF a = TRUE ; THEN a := a AND b; END_IF; 8 4
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. (* ------ Asignación ------*) a := a AND NOT b; (*------ Selección Simple ------*) IF a = TRUE THEN a := a AND b; END_IF; Siempre usarlos entre palabras reservadas y variables. 10 5
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; (*------ Seleccción Simple ------*) if a = true then = a := a and b; endif; 11 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 6
Constantes Numéricas Los valores numéricos se pueden expresar en... - Decimal (sin prefijo) : 128 - Hexadecimal : 16#4D2 - Octal : 8#1355 - Binario : 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) 7
Tipos de datos (I) Símbolo Contenido Tamaño BOOL Datos de bit 1 0 (falso), 1 (verdadero) INT Entero 16-32.768 a +32.767 Rango de valores 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 Símbolo Tipos de datos (II) 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 10 308 a 2.22507385850720 10 308, 0, 2.22507385850720 10 308 a 1.79769313486232 10 308 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 -- No soportado en ST 16 8
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: Paréntesis ( brackets () ) Índice de Matriz ( square brackets [ ] ) Operador de Asignación (:=) Operador de Comparación Menor Que (<) Operador de Comparación Menor o Igual Que (<=) Operador de Comparación Mayor Que (>) Operador de Comparación Mayor o Igual Que (>=) Operador de Comparación Igual (=) Operador de Comparación Distinto Que (<>) 18 9
Operadores Símbolo Tipo de operación Tipos de datos soportados por los operadores. Prioridad 1: alta, 11:baja [ ] ( ) Expresión / Tablas [ índices ] 1 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 < > <= >= 19 Comparaciones BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, WORD, DWORD, LWORD, REAL, LREAL = < > Igualdad / Desigualdad BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, WORD, DWORD, LWORD, REAL, LREAL AND & 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 6 7 8 Palabras reservadas. 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 20 10
Tipos de Datos Símbolo Tipo de dato Nº de bits BOOL Booleano 1 INT Entero (Integer) 16 UINT Entero sin Signo (Unsigned Integer) 16 DINT Entero Doble (Doble Integer) 32 UDINT Entero Doble sin Signo (Unsigend Doble Integer) 32 LINT Entero Largo (Long Integer) 64 ULINT Entero Largo sin Signo (Unsigned Long Integer) 64 WORD Secuencia de bit de 16 bits 16 DWORD Secuencia de bit de 32 bits 32 LWORD Secuencia de bit de 64 bits 64 REAL Numero real. 32 LREAL Número real largo 64 STRING Cadena de texto Max. 255 car. 21 Sentencias 1/2 Sentencia Función ; Final de sentencia END_IF ; Ejemplo (* *) Comentario (* Comentario *) := Asignación A := B IF, THEN, ELSE, ELSEIF, END_IF Condicional simple CASE OF, ELSE, END_CASE Condicional compuesta CASE a OF 1: b := 1; 2: b := 2; ELSE b := 3; END_CASE; IF a < b THEN c := a END_IF; 22 11
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: Azul Verde Rojo Negro Los colores NO pueden ser personalizados. 24 12
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 13
Sentencia IF (condición simple) Sintaxis de la declaración: IF <condition> THEN <expression_1>; ELSE <expression_2>; END_IF; 27 Sentencia IF (condición simple) Sintaxis de la declaración: IF <condition_1> THEN IF <condition_2> THEN <expression_1>; ELSE <expression_2>: END_IF; END_IF; 28 14
Sentencia IF (múltiple condiciones) Sintaxis de la declaración: IF <condition_1> THEN <expression_1>; ELSIF <condition_2> THEN <expression_2>; ELSIF <condition_3> THEN <expression_3>;... ELSIF <condition_n> THEN <expression_n>; ELSE <expression_m>; END_IF; 29 Sentencia IF (múltiple condiciones) 30 15
Sentencia IF (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; 31 Sentencia CASE Ejecuta uno de varios grupos de instrucciones según el valor de una expresión. Sintaxis: CASE <ecuación_entera> OF <ecuación_entera_valor_1>: <expresión_1>; <ecuación_entera_valor_2>: <expresión_2>;... <ecuación_entera_valor_n>: : <expresión_n>; ELSE <expresión_m>; END_CASE; 32 <ecuación_entera> -> INT, DINT, LINT, UINT, UDINT, ULINT 16
Sentencia CASE 33 Sentencia CASE (Ejemplos) CASE A OF 1: X:=1; 2: X:=2; 3: X:=3; ELSE Y:=0; END_CASE; CASE A OF 1: X:=1; 2,5: X:=2; 6..10: X:=3; 11,12,15..20: X:=4; ELSE Y:=0; END_CASE; 34 17
Sentencia FOR 35 Repite un grupo de instrucciones un número de veces especificado. Sintaxis: FOR control variable := <integer_expression1> TO <integer_expression2> [ BY <integer_expression3> ] DO <statement-list>; END_FOR; <integer_expression1> : valor inicial de la variable de control. <integer_expression2> : valor final de la variable de control. <integer_expression3> : incrementos de la variable de control. <integer_expressionx> : (INT, DINT, LINT, UINT, UDINT, ULINT). Sentencia FOR 36 18
Sentencia FOR (Ejemplos) FOR i:=0 TO 100 DO array[i]:=0; END_FOR; FOR n:=0 TO 50 BY 5 DO SP[n]:=100; END_FOR; IF i=101 THEN a:=true; ELSE a:=false; END_IF; 37 Sentencia WHILE Ejecuta una serie de instrucciones siempre que una condición dada sea True. Sintaxis: WHILE <expression> DO <statement-list>; END_WHILE; 38 19
Sentencia WHILE 39 Sentencia WHILE (Ejemplos) A:=0; WHILE A<=1000 DO A:=A+7; END_WHILE; n:=1; WHILE X<3000 DO X:=X*2; DATA[n]:=X; n:=n+1; END_WHIE; 40 20
Sentencia REPEAT Ejecuta una serie de instrucciones hasta que una condición sea True. Sintaxis: REPEAT <statement-list>; UNTIL <expression> END_REPEAT; 41 Sentencia REPEAT 42 21
Sentencia REPEAT (Ejemplos) A:=1; TOTAL:=0; REPEAT TOTAL:=TOTAL+A; A:=A+1; UNTIL A>10 END_REPEAT; 43 Sentencia EXIT Fuerza la salida de un bucle ( FOR, WHILE, REPEAT ) Sintaxis: FOR (WHILE, REPEAT) expression... IF <condition> THEN EXIT; END_IF;... END_FOR (WHILE, REPEAT); A := 10; 44 22
Sentencia RETURN La operativa de RETURN depende de donde se use el programa. Programa ST: Fuerza el final de la tarea ST que esta siendo ejecutada y ejecuta la siguiente tarea. ST usado en SFC: Fuerza el final de la acción que esta siendo ejecutada y ejecuta la siguiente programa de acción o programa de transición. ST usado en FB: Fuerza el final de bloque de función ST que contiene el RETURN, retorna a el sitio donde fue llamada la FB y ejecuta la siguiente instrucción. 45 Sintaxis: RETURN; Llamadas a Bloques de Función Método 1: Usando este método se pasan los valores a los argumentos específicos. 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. Las especificaciones del método 2, no pueden ser usadas junto a las especificaciones de este método, en una misma llamada a una FB. A( B:=C,, D=>E ) 46 23
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. 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( C,, E ) 47 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: Instance_FB( IN1, IN2, IN3, OUT1, OUT2, OUT3 ) Instance_FB( IN1, IN2, IN3, OUT1 ) Instance_FB( IN1, IN2, IN3, OUT1, OUT3 ) 48 24
IEC 61131-3 ( Programación en ST ) Librería de Funciones Funciones Tipo de función Funciones numéricas Funciones para manejo de strings Funciones de expansión OMRON Conversiones de tipos de datos Utilidad Valor absoluto, funciones trigonométricas, etc Manejo de cadenas de caracteres. Funciones de expansión al lenguaje estándar. Conversiones entre tipos de datos. 50 25
Funciones numéricas (I) Función ABS (arg) Tipo de datos de argumentos INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL Tipo de datos devueltos INT, DINT, LINT, UINT, UDINT, ULINT, REAL, LREAL Descripción Valor absoluto SQRT (arg) REAL, LREAL REAL, LREAL Raíz cuadrada LN (arg) REAL, LREAL REAL, LREAL Logaritmo natural: LOG e LOG (arg) REAL, LREAL REAL, LREAL Logaritmo: LOG 10 EXP (arg) REAL, LREAL REAL, LREAL Exponencial natural: e arg EXPT (arg) Base REAL, LREAL REAL, LREAL Exponencial: base expo Exponente INT, DINT, LINT, UINT, UDINT, ULINT 51 Función Funciones numéricas (II) Tipo de datos de argumentos Tipo de datos devueltos SIN (arg) REAL, LREAL REAL, LREAL Sino Descripción 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 26
53 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>, <numero de caracteres>) RIGHT (<texto fuente>, <numero de caracteres>) MID (<texto fuente>, <numero de caracteres>, <posición>) Texto fuente Numero de caracteres Texto fuente Numero de caracteres Texto fuente Numero de caracteres Posición STRING STRING Extrae caracteres de un texto comenzando INT, UINT por la izquierda. STRING STRING Extrae caracteres de un texto comenzando INT, UINT por la derecha. STRING STRING Extrae caracteres de un texto. INT, UINT INT, UINT La posición del primer carácter en las cadenas de texto es 1 Funciones para cadenas de texto (II) Función CONCAT(<texto fuente1>, <texto fuente2>,..) Hasta 32 argumentos INSERT (<texto fuente>, <texto a insertar>, <posición>) Tipo de datos de argumentos Texto fuente Texto fuente Texto a insertar Posición Tipo de datos devueltos Descripción STRING STRING Une cadenas de texto. STRING STRING Inserta un cadena de texto dentro de otra. STRING INT, UINT DELETE (<texto fuente>, <numero de caracteres>, <posición>) Texto fuente Numero de caracteres Posición STRING STRING Borra caracteres de un cadenas de texto. INT, UINT INT, UINT 54 La posición del primer carácter en las cadenas de texto es 1 27
Funciones para cadenas de texto (III) Función REPLACE (<texto fuente>, <texto a insertar>, <numero de caracteres>, <posición>) Tipo de datos de argumentos Texto fuente Texto a insertar Numero de caracteres Posición Tipo de datos devueltos Descripción STRING STRING Reemplaza caracteres dentro de un cadena STRING de texto. INT, UINT INT, UINT FIND (<texto fuente>, <texto a buscar>) ) Texto fuente Texto a insertar STRING INT Busca una cadena dentro de otra cadena STRING de texto. 55 La posición del primer carácter en las cadenas de texto es 1 Funciones de expansión OMRON (I) Función WRITE_TEXT (<texto a escribir>, <Nombre del directorio y el fichero>, <Delimitador>, <Parámetros>) Tipo de datos de argumentos Texto a escribir Nombre del directorio y el fichero Delimitador Tipo de datos devueltos Descripción STRING --- Escribe una cadena de texto en la tarjeta de STRING memoria. STRING Parámetros INT, UINT, WORD 56 28
Funciones de expansión OMRON (II) Función Tipo de datos de argumentos Datos devueltos Descripción TXD_CPU ( <texto> ) Texto STRING --- Transmite una cadena de texto por el puerto RS-232 de la CPU. TXD_SCB ( <texto>, <puerto serie> ) TXD_SCU ( <texto>, <Numero Unidad SCU>, <Puerto serie>, <Puerto lógico interno> ) Texto STRING --- Transmite una cadena de texto por un puerto Puerto serie INT, UINT, WORD serie de la SCB. Texto STRING --- Transmite una cadena de texto por un puerto Numero INT, UINT, Unidad SCU WORD serie de la SCU. Puerto serie Puerto lógico interno INT, UINT, WORD INT, UINT, WORD 57 Funciones de expansión OMRON (III) Función Tipo de datos de argumentos Datos devueltos Descripción RXD_CPU ( <carga>, Carga STRING --- Recibe una cadena de <numero caracteres> ) texto por el puerto RS- Numero INT, UINT, caracteres WORD 232 de la CPU. 58 RXD_SCB ( <carga>, <numero caracteres>, <puerto serie> ) Carga STRING --- Recibe una cadena de texto por un puerto Numero INT, UINT, caracteres WORD serie de la SCB. Puerto serie INT, UINT, WORD RXD_SCU ( <carga>, Carga STRING --- Recibe una cadena de <numero caracteres>, texto por un puerto Numero INT, UINT, <numero Unidad SCU>, caracteres WORD serie de la SCU. <puerto serie>, <puerto lógico interno> ) Numero Unidad SCU Puerto serie Puerto lógico interno INT, UINT, WORD INT, UINT, WORD INT, UINT, WORD 29
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 Convierte de grados a radianes. RAD_TO_DEG ( arg) REAL, LREAL REAL, LREAL Convierte de radianes a grados. 59 Conversión entre tipo de datos Funciones de conversión de tipos de datos. B := from_to_to( valor ); B := REAL_TO_INT(valor); NOTA: : Los tipos reales son redondeados 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 30
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. 31
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. 32