InfoPLC Net Omron Programacion ST
InfoPLC Net Omron Programacion ST
InfoPLC Net Omron Programacion ST
net
IEC 61131-3
Programacin en ST
(Structured Text)
24 de marzo de 2013
Antonio Cambronero , Product Engineer
OMRON Electronics Iberia S.A.U.
IEC 61131-3 ( Programacin en ST )
Introduccin
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
asignacin.
3
Elementos de un programa en ST
Parte declarativa
Parte ejecutiva
4
IEC 61131-3 ( Programacin 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
cuenta la precedencia de
Una constante los operadores
El valor de una variable.
El resultado de una funcin.
Ejemplos:
2.0 * 3.1415 * radio
ABS( temp ) / presion
Valvula1 AND NOT Valvula2
6
La instruccin de asignacin
Asigna el valor de la expresin de la derecha a la variable de la
izquierda.
El operador de asignacin es :=
No confundir el operador de asignacin, con el de comparacin
(Asignacin) := (comparacin) =
Valor actual de la
Ej. Clculo longitud R=5, PI=3,14159
variable...
longitud := 2 * pi * r longitud := 2 * pi * r
longitud := 31.4159
7
Delimitadores
Cualquier sentencia debe acabar (* ------ Asignacin ------*)
a := a AND NOT b;
siempre con un delimitador ( ; )
(*------ Selecccin Simple ------*)
IF a = TRUE THEN
a := a AND b;
END_IF;
8
Aadir Comentarios
Los comentarios se encierran entre parntesis y asteriscos (* y *)
Se puede usar cualquier carcter dentro del comentario.
Los comentarios pueden comprender varias lneas.
9
Espacios, Retornos de Carro y
Tabulaciones
Se puede usar cualquier nmero de
estos caracteres dentro del cdigo ST. (* ------ Asignacin ------*)
a := a AND NOT b;
11
Nombres de variable
Los siguientes caracteres no se pueden utilizar en nombres de
variables:
! # $ % & ( ) - = ^ \ | @ [ ] { } ; : + * , < >
. / ?
12
Constantes Numricas
Los valores numricos se pueden expresar en...
(*------ Selecccin Simple ------*)
if chico_a = true then
- Decimal (sin prefijo) : 128 a := 10;
- Hexadecimal : 16#4D2 b := 16#A;
c := 8#12;
- Octal : 8#1355 d := 2#1010;
endif;
- Binario : 2#10010010
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 maysculas y minsculas son discriminadas.
Un carcter $ seguido de dos dgitos numricos son interpretados como un
hexadecimal.
$02 #02 hexadecimal
Un carcter $ seguido de una letra es interpretado como:
$$: carcter $ (Cdigo ASCII: #24)
$': comilla simple (Cdigo ASCII: #27)
$L $l: final de lnea (LF) (Cdigo ASCII: #0A)
$N $n: nueva lnea (CR + LF) (Cdigo ASCII: #0D0A)
$P $p: final de pagina (FF) (Cdigo ASCII: #0C)
$R $r: Retorno de carro (CR) (Cdigo ASCII: #0D)
$T $t: Tabulacin horizontal (Tab) (Cdigo ASCII: #09)
Tipos de datos (I)
Smbolo Contenido Tamao 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 DWORD #00000000 a #FFFFFFFF
BCD &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 LWORD #0000000000000000 a #FFFFFFFFFFFFFFFF
BCD &0 a 18,446,744,073,709,551,615
15
Tipos de datos (II)
Smbolo Contenido Tamao Rango de valores
REAL Numero real 32 3.402823 10 38 a 1.175494 1038, 0,
+1.175494 1038 a +3.402823 10 38
LREAL Numero real largo 64 1.79769313486232 10308 a
2.22507385850720 10308 , 0,
2.22507385850720 10308 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 Instancia de bloque de --- ---
BLOCK funcin
CHANNEL Word WORD
NUMBER Constante numero -- No soportado en ST
16
Texto estructurado.
Funciones matemticas soportadas:
Suma (+)
Resta (-)
Multiplicacin (*)
Divisin (/)
Funciones de bit soportadas:
Bitwise AND (AND o &)
Bitwise OR (OR)
OR Exclusiva OR (XOR)
NOT (NOT)
17
Operadores.
Operadores soportados:
Parntesis ( brackets () )
ndice de Matriz ( square brackets [ ] )
Operador de Asignacin (:=)
Operador de Comparacin Menor Que (<)
Operador de Comparacin Menor o Igual Que (<=)
Operador de Comparacin Mayor Que (>)
Operador de Comparacin Mayor o Igual Que (>=)
Operador de Comparacin Igual (=)
Operador de Comparacin Distinto Que (<>)
18
Operadores
Smbolo Tipo de operacin Tipos de datos soportados por los operadores. Prioridad
1: alta,
11:baja
[]() Expresin / Tablas [ ndices ] 1
Funcin () Evaluacin de una funcin Dependiendo de la funcin. 2
** Exponenciacin REAL, LREAL 3
NOT Complemento BOOL, WORD, DWORD, LWORD 4
* Multiplicacin INT, DINT, UINT, UDINT, ULINT, REAL, LREAL 5
/ Divisin INT, DINT, LINT, UINT, UDINT, ULINT, REAL,
LREAL
+ - Suma / Resta INT, DINT, LINT, UINT, UDINT, ULINT, REAL, 6
LREAL
< > <= Comparaciones BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, 7
>= WORD, DWORD, LWORD, REAL, LREAL
= <> Igualdad / Desigualdad BOOL, INT, DINT, LINT, UINT, UDINT, ULINT, 8
WORD, DWORD, LWORD, REAL, LREAL
AND & Operacin Booleana AND BOOL, WORD, DWORD, LWORD 9
XOR Operacin Booleana XOR BOOL, WORD, DWORD, LWORD 10
OR Operacin Booleana OR BOOL, WORD, DWORD, LWORD 11
19
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
Sentencias 1/2
Sentencia Funcin Ejemplo
; Final de sentencia END_IF ;
(* *) Comentario (* Comentario *)
:= Asignacin A := B
22
Sentencias 2/2
Sentencia Funcin 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 condicin inicial. WHILE a < 15 DO
b := b + 3;
END_WHILE;
REPEAT, UNTIL, END_REPEAT Bucle con condicin 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 funcin RETURN;
23
Colores usados en el cdigo.
24
IEC 61131-3 ( Programacin en ST )
Sentencias de control
Sentencia IF
Ejecuta de forma condicional un grupo de instrucciones,
dependiendo del valor de una expresin.
Sintaxis:
[ ELSE statement-list3 ]
END_IF;
26
Sentencia IF (condicin simple)
Sintaxis de la declaracin:
IF <condition> THEN
<expression_1>;
ELSE
<expression_2>;
END_IF;
27
Sentencia IF (condicin simple)
Sintaxis de la declaracin:
IF <condition_1> THEN
IF <condition_2> THEN
<expression_1>;
ELSE
<expression_2>:
END_IF;
END_IF;
28
Sentencia IF (mltiple condiciones)
Sintaxis de la declaracin:
...
ELSIF <condition_n> THEN <expression_n>;
ELSE
<expression_m>;
END_IF;
29
Sentencia IF (mltiple condiciones)
30
Sentencia IF (Ejemplos)
IF A>0 THEN IF A THEN X:=10;
X:=10; ELSE X:=0;
ELSE END_IF;
X:=0;
END_IF;
31
Sentencia CASE
Ejecuta uno de varios grupos de instrucciones segn el valor de
una expresin.
Sintaxis:
CASE <ecuacin_entera> OF
<ecuacin_entera_valor_1>: <expresin_1>;
<ecuacin_entera_valor_2>: <expresin_2>;
...
<ecuacin_entera_valor_n>: <expresin_n>;
ELSE
<expresin_m>;
END_CASE;
33
Sentencia CASE (Ejemplos)
CASE A OF CASE A OF
1: X:=1; 1: X:=1;
2: X:=2; 2,5: X:=2;
3: X:=3; 6..10: X:=3;
ELSE 11,12,15..20: X:=4;
Y:=0; ELSE
END_CASE; Y:=0;
END_CASE;
34
Sentencia FOR
Repite un grupo de instrucciones un nmero de veces
especificado.
Sintaxis:
FOR control variable := <integer_expression1>
TO <integer_expression2> [ BY <integer_expression3> ]
DO
<statement-list>;
END_FOR;
35
Sentencia FOR
36
Sentencia FOR (Ejemplos)
IF i=101 THEN
a:=TRUE;
ELSE
a:=FALSE;
END_IF;
37
Sentencia WHILE
Ejecuta una serie de instrucciones siempre que una condicin
dada sea True.
Sintaxis:
WHILE <expression> DO
<statement-list>;
END_WHILE;
38
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
Sentencia REPEAT
Ejecuta una serie de instrucciones hasta que una condicin sea
True.
Sintaxis:
REPEAT
<statement-list>;
UNTIL <expression> END_REPEAT;
41
Sentencia REPEAT
42
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:
A := 10;
44
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 accin que esta siendo ejecutada y ejecuta la siguiente
programa de accin o programa de transicin.
ST usado en FB:
Fuerza el final de bloque de funcin ST que contiene el RETURN, retorna a
el sitio donde fue llamada la FB y ejecuta la siguiente instruccin.
Sintaxis:
RETURN;
45
Llamadas a Bloques de Funcin
Mtodo 1:
Usando este mtodo se pasan los valores a los argumentos especficos.
Los argumentos de las variables de entrada deben de estar al principio de
la lista, o justo despus 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 mtodo 2, no pueden ser usadas junto a las
especificaciones de este mtodo, en una misma llamada a una FB.
A( B:=C, , D=>E )
46
Llamadas a Bloques de Funcin
Mtodo 2:
Usando este mtodo se pasan y reciben los valores justo en el orden en el
que se han declarado en el bloque de funcin.
Los argumentos de las variables de entrada deben de estar al principio de
la lista, o justo despus 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 mtodo 1, no pueden ser usadas junto a las
especificaciones de este mtodo, en una misma llamada a una FB.
A( C, , E )
47
Llamadas a Bloques de Funcin
(Ejemplos)
Mtodo 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)
Mtodo 2:
Instance_FB( IN1, IN2, IN3, OUT1, OUT2, OUT3 )
Instance_FB( IN1, IN2, IN3, OUT1 )
Instance_FB( IN1, IN2, IN3, OUT1, OUT3 )
48
IEC 61131-3 ( Programacin en ST )
Librera de Funciones
Funciones
50
Funciones numricas (I)
Funcin Tipo de datos de Tipo de datos Descripcin
argumentos devueltos
ABS (arg) INT, DINT, LINT, UINT, UDINT, INT, DINT, LINT, UINT, Valor absoluto
ULINT, REAL, LREAL UDINT, ULINT, REAL,
LREAL
SQRT (arg) REAL, LREAL REAL, LREAL Raz 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 numricas (II)
Funcin Tipo de datos de Tipo de datos Descripcin
argumentos devueltos
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)
Funcin Tipo de datos de Tipo de datos Descripcin
argumentos devueltos
LEN (string) String STRING INT Devuelve la longitud
de un texto.
LEFT (<texto fuente>, Texto STRING STRING Extrae caracteres de
<numero de caracteres>) fuente un texto comenzando
Numero de INT, UINT por la izquierda.
caracteres
56
Funciones de expansin OMRON (II)
Funcin Tipo de datos de Datos Descripcin
argumentos devueltos
TXD_CPU ( <texto> ) Texto STRING --- Transmite una cadena
de texto por el puerto
RS-232 de la CPU.
TXD_SCB ( <texto>, Texto STRING --- Transmite una cadena
<puerto serie> ) de texto por un puerto
Puerto serie INT, UINT,
WORD serie de la SCB.
57
Funciones de expansin OMRON (III)
Funcin Tipo de datos de Datos Descripcin
argumentos devueltos
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.
59
Conversin entre tipo de datos
Funciones de conversin de tipos de datos.
B := from_TO_to( valor ); NOTA: Los tipos reales
son redondeados
B := REAL_TO_INT(valor);
Funciones de conversin de texto a nmeros.
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 ( Programacin 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 FBs.
Hasta 8 niveles de anidamiento, en las llamadas a
FBs.
Restricciones
Los entero solamente pueden ser asignados a
variables de tipo WORD, DWORD, INT,
DINT, UINT, UDINT ULINT.
Los nmeros 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 atencin !!!
Antonio Cambronero Berlanga
Product Engineer