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.