Documentos de Académico
Documentos de Profesional
Documentos de Cultura
IyCnet Omron Programacion ST PDF
IyCnet Omron Programacion ST PDF
IEC 61131-3
Programación en ST
(Structured
Structured Text)
Text
11 de febrero de 2009
Antonio Cambronero , Product Engineer
OMRON Electronics Iberia S.A.U.
Introducción
1
11/02/2009
Elementos de un programa en ST
Parte declarativa
Parte ejecutiva
2
11/02/2009
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
NOTA
cuenta la precedencia de
• Una constante los operadores
• El valor de una variable.
• El resultado de una función.
Ejemplos:
2.0 * 3.1415 * radio
ABS( temp ) / presion
Valvula1 AND NOT Valvula2
6
3
11/02/2009
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) =
Valor actual de la
Ej. Cálculo longitud R=5, PI=3,14159
variable...
longitud := 2 * pi * r longitud := 2 * pi * r
longitud := 31.4159
Delimitadores
Cualquier sentencia debe acabar (* ------ Asignación ------*)
a := a AND NOT b;
siempre con un delimitador ( ; )
(*------ Seleccción Simple ------*)
IF a = TRUE THEN
a := a AND b;
END_IF;
4
11/02/2009
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.
5
11/02/2009
Mayúsculas y Minúsculas
Uso indistinto de mayúsculas / minúsculas en cualquier
sentencia o nombre de variable
11
Nombres de variable
• Los siguientes caracteres no se pueden utilizar en nombres de
variables:
•! “ # $ % & ‘ ( ) - = ^ \ | @ [ ] { } ; : + * , < >
. / ?¿
12
6
11/02/2009
Constantes Numéricas
Los valores numéricos se pueden expresar en...
(*------ Seleccción 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 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
11/02/2009
15
16
8
11/02/2009
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
11/02/2009
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, 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 & 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
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
10
11/02/2009
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 Ejemplo
; Final de sentencia END_IF ;
(* *) Comentario (* Comentario *)
:= Asignación A := B
22
11
11/02/2009
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
24
12
11/02/2009
Sentencias de control
Sentencia IF
• Ejecuta de forma condicional un grupo de instrucciones,
dependiendo del valor de una expresión.
• Sintaxis:
[ ELSE statement-list3 ]
END_IF;
26
13
11/02/2009
IF <condition> THEN
<expression_1>;
ELSE
<expression_2>;
END_IF;
27
IF <condition_1> THEN
IF <condition_2> THEN
<expression_1>;
ELSE
<expression_2>:
END_IF;
END_IF
END_IF;
28
14
11/02/2009
...
ELSIF <condition_n> THEN <expression_n>;
ELSE
<expression_m>;
END_IF;
29
30
15
11/02/2009
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 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;
16
11/02/2009
Sentencia CASE
33
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
17
11/02/2009
Sentencia FOR
• 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;
35
Sentencia FOR
36
18
11/02/2009
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
11/02/2009
Sentencia WHILE
39
n:=1;
WHILE X<3000 DO
X:=X*2;
DATA[n]:=X;
n:=n+1;
END_WHIE;
40
20
11/02/2009
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
11/02/2009
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
22
11/02/2009
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.
• Sintaxis:
RETURN;
45
46
23
11/02/2009
A( C, ………… , E )
47
• 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
11/02/2009
Librería de Funciones
Funciones
50
25
11/02/2009
51
52
26
11/02/2009
27
11/02/2009
56
28
11/02/2009
57
29
11/02/2009
59
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
30
11/02/2009
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
11/02/2009
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.
32