Documentos de Académico
Documentos de Profesional
Documentos de Cultura
IEC 61131-3
Programación en ST
(Structured Text)
11 de febrero de 2009
Antonio Cambronero , Product Engineer OMRON Electronics Iberia S.A.U.
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.
Elementos de un programa en ST
Parte declarativa
Parte ejecutiva
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 cuenta la precedencia de los operadores
• Una constante
• El valor de una variable.
• El resultado de una función.
Ejemplos:
2.0 * 3.1415 * radio ABS( temp ) / presion
Valvula1 AND NOT Valvula2
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) =
Delimitadores
Cualquier sentencia debe acabar siempre con un delimitador
(* ------ ( ;Asignación*)
)
Asignación------*)
(* ------
a :=aa:=AND NOT
a AND NOTb;b;
(*------ Seleccción
(*------ SeleccciónSimple------*)
Simple*)
IF aIF= aTRUE
= TRUETHEN
THEN
aa:=:=a aAND
AND b;
b; END_IF;
END_IF;
(* ------ Asignación*)
a := a AND NOT b;
(*------ Selección(*Simple*)
------ Asignación------*)
IF a = TRUE THEN a := a AND NOT b;
a := a AND b; END_IF;
(*------ Selección Simple------*)
IF a = TRUE THEN
a := a AND b;
END_IF;
Excepciones:
0 (*------ Selección
(*------ Simple------*)
Selección Simple*)
IF a IF
= aTRUE
= TRUE THEN
THEN
a := aaAND
:= ab;AND b;
END_IF;
END_IF;
Mayúsculas y Minúsculas
Uso indistinto de mayúsculas / minúsculas en cualquier sentencia o nombre de varia
Nombres de variable
Los siguientes caracteres no se pueden utilizar en nombres de variables:
!“#$%&‘()-=^\|@[]{};:+*,< >
./?¿
2
Constantes Numéricas
Los valores numéricos se pueden expresar en...
En constantes enteras o reales, se puede usar ( _ ) para formatear el literal, esto mejora lectura del
Real:12_345.0, 1.2_345
Enteros: -1_23, 1_234_567, 2#1100_0100, 16#FF_0F
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 $ comilla
$$:
(Código
simple
ASCII: #24)
final de línea $':
(LF)
(Código
nueva
ASCII:
línea#27)
(CR (Código
+ LF) final
ASCII:
de pagina
#0A) (FF)
(Código
Retorno
ASCII:
de carro
#0D0A)(CR)
(Código ASCII: #0C) (Código ASCII
$L ó $l:
$N ó $n:
$P ó $p:
$R ó $r:
$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 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
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 (<>)
Operadores
Símbolo Tipo de operación Tipos de datos soportados por los Prioridad
operadores. 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
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
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.
Sentencias 1/2
Sentencia Función Ejemplo
; Final de sentencia END_IF ;
(* *) Comentario (* Comentario *)
:= Asignación A := B
2
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;
4
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:
Sintaxis
Sintaxis de la de la declaración:
declaración:
IFIF<condition>
<condition> THEN
<expression_1>;
THEN
7ELSE
<expression_1>;
<expression_2>;
ELSE
END_IF;
<expression_2>;
IF <condition_1>
IF <condition_1> THEN
THEN
IF <condition_2> THEN
IF <condition_2>
<expression_1>;
THEN
ELSE <expression_1>;
<expression_2>:
ELSE
END_IF;<expression_2>:
END_IF;
END_IF;
Sentencia IF (múltiple condiciones)
Sintaxis de la declaración:
...
ELSIF <condition_n> THEN
<expression_n>;
<expression_m>
9 ;
END_IF;
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;
CASE
CASE A
A OF
OF CASE A OF
1:
1: X:=1;
X:=1; 1: X:=1;
X:=1;
2:
2: X:=2;
X:=2; 2,5: X:=2;
X:=2;
3:
3: X:=3;
X:=3; 6..10: X:=3;
X:=3;
ELSE
ELSE 11,12,15..20: X:=4;
X:=4;
Y:=0;
Y:=0; ELSE
END_CASE; Y:=0;
END_CASE;
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
Sentencia FOR
Sentencia FOR (Ejemplos)
FOR i:=0 TO 100 DO
array[i]:=0;
END_FOR;
IF i=101 THEN
a:=TRUE;
FOR i:=0 TO 100 DO FORFOR n:=0
n:=0 TO TO
50 50
BY BY
5 5 DO
ELSE
array[i]:=0; DO SP[n]:=100;
a:=FALSE;
END_FOR; END_FOR;
SP[n]:=100;
END_IF;
IF i=101 THEN
a:=TRUE;
ELSE
a:=FALSE;
END_IF;
Sentencia WHILE
Ejecuta una serie de instrucciones siempre que una condición dada sea True.
Sintaxis:
WHILE <expression> DO
<statement-list>;
END_WHILE
Sentencia WHILE
Sintaxis:
REPEAT
<statement-list>;
UNTILEND_REPEAT
Sentencia REPEAT
Sentencia REPEAT (Ejemplos)
A:=1; TOTAL:=0; REPEAT
TOTAL:=TOTAL+A; A:=A+1;
UNTIL A>10 END_REPEAT;
A:=1;
TOTAL:=0;
REPEAT
TOTAL:=TOTAL+A;
A:=A+1;
UNTIL A>10 END_REPEAT;
Sentencia EXIT
Fuerza la salida de un bucle ( FOR, WHILE, REPEAT )
Sintaxis:
FOR (WHILE, REPEAT) expression
...
Sintaxis:
RETURN;
5
A(B:=C,………… , D=>E )
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ó
Las variables de salida pueden ser omitidas si los datos no son usados, pero deben de ser omitidas de derecha a izquie
Las especificaciones del método 1, no pueden ser usadas junto a las especificaciones de este método, en una misma ll
A(C,………… , E )
Método 2:
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
0
Funciones numéricas (I)
2
Funciones para cadenas de texto (I)
Función Tipo de datos de Tipo de datos Descripción
argumentos devueltos
LEN (string) String STRING INT Devuelve la longitud
de un texto.
LEFT (<texto fuente>, Texto STRING STRING Extrae caracteres de
fuente un texto comenzando
<numero de caracteres>)
Numero de INT, UINT por la izquierda.
caracteres
RIGHT (<texto fuente>, Texto STRING STRING Extrae caracteres de
fuente un texto comenzando
<numero de caracteres>)
Numero de INT, UINT por la derecha.
caracteres
MID (<texto fuente>, Texto STRING STRING Extrae caracteres de
<numero de caracteres>, fuente un texto.
<posición>) Numero de INT, UINT
caracteres
Posición INT, UINT
6
Funciones de expansión OMRON (II)
Función Tipo de datos de Datos Descripción
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
<puerto serie> ) Puerto serie INT, UINT, cadena de texto por
WORD un puerto serie de la
SCB.
TXD_SCU ( <texto>, Texto STRING --- Transmite una cadena
<Numero Unidad SCU>, Numero INT, UINT, de texto por un puerto
<Puerto serie>, <Puerto serie de la SCU.
Unidad SCU WORD
lógico interno> )
Puerto serie INT, UINT,
WORD
Puerto lógico INT, UINT,
interno WORD
BB:=
:= from_TO_to(
from_TO_to( valor
valor););
Funciones de conversión de texto a números.
B B:=:= REAL_TO_INT(valor);
B := tipo_dato_origen_TO_STRING( valor );
B := tipo_dato_origen_TO_STRING( valor
BB:=:=STRING_TO
); STRING_TO _tipo_dato_destino( valor
_tipo_dato_destino( );
valor
);
B := REAL_TO_STRING(valor); B := STRING_TO _UINT(valor);
B := REAL_TO_STRING(valor);
B := STRING_TO _UINT(valor);
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, IN
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.