Upload
buidung
View
244
Download
3
Embed Size (px)
Citation preview
11/02/2009
1
IEC 61131-3
Programación en STProgramación en ST
(StructuredStructured TextText)
11 de febrero de 2009
Antonio Cambronero , Product Engineer
OMRON Electronics Iberia S.A.U.
IEC 61131-3 ( Programación en ST )
IntroducciónIntroducción
11/02/2009
2
¿qué es y para que sirveStructured 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
asignación.
Elementos de un programa en ST
Parte declarativa
4
Parte ejecutiva
11/02/2009
3
IEC 61131-3 ( Programación en ST )
Reglas de sintaxisReglas de sintaxis
Expresiones
• Son reglas para calcular un valor.
NOTANOTA: Tener siempre en : Tener siempre en cuenta la precedencia de cuenta la precedencia de los operadoreslos operadores
• 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.
Ejemplos:
2.0 2.0 * 3.1415 * 3.1415 * radio* radio
ABS( ABS( temptemp ) / ) / presionpresion
Valvula1 AND NOT Valvula2Valvula1 AND NOT Valvula26
• El resultado de una función.
11/02/2009
4
La instrucción de asignación• Asigna el valor de la expresión de la derecha a la variable de la izquierda.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 longitudEj. Cálculo longitud R=5, PI=3,14159R=5, PI=3,14159Valor actual de la Valor actual de la
7
Se escribe la expresión Se evalúa el resultado Se asigna a la variable
Ej. Cálculo longitudEj. Cálculo longitud
longitud := 2 * pi * r
R=5, PI=3,14159R=5, PI=3,14159
longitud := 2 * pi * r
Valor actual de la Valor actual de la
variable...variable...
longitud := 31.4159
DelimitadoresCualquier sentencia debe acabar siempre con un delimitador ( ; )
(* ------ Asignación ------*)a := a AND NOT b;(* ------ Asignación ------*)a := a AND NOT b;siempre con un delimitador ( ; )
No usar un delimitador dentro de
a := a AND NOT b;
(*------ Seleccción Simple ------*)IF a = TRUE THEN
a := a AND b;END_IF;
a := a AND NOT b;
(*------ Seleccción Simple ------*)IF a = TRUE THEN
a := a AND b;END_IF;
(*------ Selección Simple ------*)(*------ Selección Simple ------*)
8
No usar un delimitador dentro de una sentencia
(*------ Selección Simple ------*)IF a = TRUE ; THEN
a := a AND b;END_IF;
(*------ Selección Simple ------*)IF a = TRUE ; THEN
a := a AND b;END_IF;
11/02/2009
5
Añadir Comentarios
• Los comentarios se encierran entre paréntesis y asteriscos (* y *)• 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 ------*)
(* ------ Asignación ------*)a := a AND NOT b;
(*------ Selección Simple ------*)
9
(*------ Selección Simple ------*)IF a = TRUE THEN
a := a AND b;END_IF;
(*------ Selección Simple ------*)IF a = TRUE THEN
a := a AND b;END_IF;
Espacios, Retornos de Carro y Tabulaciones
• Se puede usar cualquier número de • Se puede usar cualquier número de estos caracteres dentro del código ST.
• Excepciones:
• Palabras reservadas, nombres de variables, caracteres especiales,
(* ------ Asignación ------*)a := a AND NOT b;
(*------ Selección Simple ------*)IF a = TRUE THEN
a := a AND b;END_IF;
(* ------ Asignación ------*)a := a AND NOT b;
(*------ Selección Simple ------*)IF a = TRUE THEN
a := a AND b;END_IF;
10
variables, caracteres especiales, constantes.
• Siempre usarlos entre palabras reservadas y variables.
11/02/2009
6
Mayúsculas y Minúsculas
Uso indistinto de mayúsculas / minúsculas en cualquier Uso indistinto de mayúsculas / minúsculas en cualquier sentencia o nombre de variable
==
(*------ Seleccción Simple ------*)if a = true then
a := a and b;
(*------ Seleccción Simple ------*)if a = true then
a := a and b;
(*------ Selección Simple ------*)IF A = TRUE THEN
A := A AND B;
(*------ Selección Simple ------*)IF A = TRUE THEN
A := A AND B;
11
== a := a and b;endif;
a := a and b;endif;
A := A AND B;END_IF;
A := A AND B;END_IF;
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.
12
• Las variables no pueden comenzar con un numero (0 a 9)
11/02/2009
7
Constantes NuméricasLos valores numéricos se pueden expresar en...
(*------ Seleccción Simple ------*)(*------ Seleccción Simple ------*)
- Decimal (sin prefijo) : 128- Hexadecimal : 16#4D2- Octal : 8#1355- Binario : 2#10010010
En constantes enteras o reales, se puede usar ( _ ) para formatear el
(*------ Seleccción Simple ------*)if chico_a = true then
a := 10;b := 16#A;c := 8#12;d := 2#1010;
endif;
(*------ Seleccción Simple ------*)if chico_a = true then
a := 10;b := 16#A;c := 8#12;d := 2#1010;
endif;
13
En constantes enteras o reales, se puede usar ( _ ) para formatear el literal, esto mejora lectura del código.
Real: 12_345.0, 1.2_345Enteros: -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'.• 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)$': 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)
11/02/2009
8
Tipos de datos (I)SímboloSímbolo ContenidoContenido TamañoTamaño Rango de valoresRango de valores
BOOL Datos de bit 1 0 (falso), 1 (verdadero)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
15
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
Tipos de datos (II)SímboloSímbolo ContenidoContenido TamañoTamaño Rango de valoresRango de valores
REAL Numero real 32 −3.402823 × 10 38 a −1.175494 × 10−38, 0,REAL Numero real 32 −3.402823 × 10 a −1.175494 × 10 , 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
16
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
11/02/2009
9
Texto estructurado.
• Funciones matemáticas soportadas:• Funciones matemáticas soportadas:– Suma (+)– Resta (-)– Multiplicación (*)– División (/)
• Funciones de bit soportadas:– Bitwise AND (AND o &)
17
– Bitwise AND (AND o &)– Bitwise OR (OR)– OR Exclusiva OR (XOR)– NOT (NOT)
Operadores.• Operadores soportados:– Paréntesis ( brackets () )– 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 (>)
18
– Operador de Comparación Mayor o Igual Que (>=)– Operador de Comparación Igual (=)– Operador de Comparación Distinto Que (<>)
11/02/2009
10
OperadoresSí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
6
19
< > <= >=
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
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
20
– FOR, TO, BY, END_FOR
– CASE, OF, ELSE, END_CASE
11/02/2009
11
Tipos de DatosSí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
21
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
SentenciaSentencia FunciónFunción EjemploEjemploSentenciaSentencia FunciónFunción EjemploEjemplo; 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 OF1: b := 1;2: b := 2;
22
2: b := 2;ELSE
b := 3;END_CASE;
11/02/2009
12
Sentencias 2/2
Sentencia Función EjemploFOR, 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 DOb := b + 3;
END_WHILE;
REPEAT, UNTIL, END_REPEAT Bucle con condición final. REPEATd := d + 1;
UNTIL d < 15END_REPEAT;
23
END_REPEAT;
EXIT Sale del proceso de un bucle. WHILE truea := a + 1;IF a > 4 THEN EXIT END_IF;
END_WHILE;
RETURN Sale del bloque de función RETURN;
Colores usados en el código.
Palabras reservadas: AzulComentarios: VerdeErrores: RojoResto de cosas: Negro
24
Los colores NO pueden ser personalizados.
11/02/2009
13
IEC 61131-3 ( Programación en ST )
Sentencias de controlSentencias de control
Sentencia IF• Ejecuta de forma condicional un grupo de instrucciones, dependiendo del valor de una expresión.dependiendo del valor de una expresión.
• Sintaxis:
IF expression1 THEN statement-list1
[ ELSIF expression2 THEN statement-list2 ]
26
[ ELSE statement-list3 ]
END_IF;
11/02/2009
14
Sentencia IF (condición simple)
Sintaxis de la declaración:Sintaxis de la declaración:Sintaxis de la declaración:
IF <condition> THEN<expression_1>;
ELSE<expression_2>;
END_IF;
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:Sintaxis de la declaración:Sintaxis de la declaración:
IF <condition_1> THENIF <condition_2> THEN
<expression_1>;ELSE
<expression_2>:END_IF;
END_IF
Sintaxis de la declaración:
IF <condition_1> THENIF <condition_2> THEN
<expression_1>;ELSE
<expression_2>:END_IF;
END_IF
28
END_IF;END_IF;
11/02/2009
15
Sentencia IF (múltiple condiciones)
Sintaxis de la declaración: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
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
29
ELSE<expression_m>;
END_IF;
ELSE<expression_m>;
END_IF;
Sentencia IF (múltiple condiciones)
30
11/02/2009
16
Sentencia IF (Ejemplos)
IF A>0 THENIF A>0 THEN IF A THEN X:=10;ELSE X:=0;IF A THEN X:=10;ELSE X:=0;
IF A>0 AND B>1 THENIF A>0 AND B>1 THENIF A>0 THEN X:=10;
ELSIF B=1 THEN X:=1;ELSIF THEN
IF A>0 THEN X:=10;ELSIF B=1 THEN X:=1;ELSIF THEN
X:=10;ELSE
X:=0;END_IF;
X:=10;ELSE
X:=0;END_IF;
ELSE X:=0;END_IF;ELSE X:=0;END_IF;
31
X:=10; Y:=20;ELSE
X:=0; Y:=0;END_IF;
X:=10; Y:=20;ELSE
X:=0; Y:=0;END_IF;
ELSIF B=2 THEN X:=2;ELSE
X:=0;END_IF;
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.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>;...
:
32
<ecuación_entera_valor _n>: <expresión_n>;ELSE
<expresión_m>;END_CASE;
<ecuación_entera> -> INT , DINT, LINT , UINT, UDINT, ULINT
11/02/2009
17
Sentencia CASE
33
Sentencia CASE (Ejemplos)
CASE A OF1: X:=1;2: X:=2;3: X:=3;
ELSEY:=0;
CASE A OF1: X:=1;2: X:=2;3: X:=3;
ELSEY:=0;
CASE A OF1: X:=1;2,5: X:=2;6..10: X:=3;11,12,15..20: X:=4;
ELSE
CASE A OF1: X:=1;2,5: X:=2;6..10: X:=3;11,12,15..20: X:=4;
ELSE
34
END_CASE;END_CASE;ELSE
Y:=0;END_CASE;
ELSEY:=0;
END_CASE;
11/02/2009
18
Sentencia FOR• Repite un grupo de instrucciones un número de veces especificado.especificado.
• Sintaxis:
FOR control variable := < integer_expression1> TO <integer_expression2> [ BY <integer_expression3> ]
DO<statement-list> ;
END_FOR;
35
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
11/02/2009
19
Sentencia FOR (Ejemplos)
FOR i:=0 TO 100 DOarray[i]:=0;
END_FOR;
IF i=101 THENa:=TRUE;
ELSE
FOR i:=0 TO 100 DOarray[i]:=0;
END_FOR;
IF i=101 THENa:=TRUE;
ELSE
FOR n:=0 TO 50 BY 5 DOSP[n]:=100;
END_FOR;
FOR n:=0 TO 50 BY 5 DOSP[n]:=100;
END_FOR;
37
ELSEa:=FALSE;
END_IF;
ELSEa:=FALSE;
END_IF;
Sentencia WHILE• Ejecuta una serie de instrucciones siempre que una condición dada sea True.dada sea True.
• Sintaxis:
WHILE <expression> DO<statement-list> ;
END_WHILE;
38
END_WHILE;
11/02/2009
20
Sentencia WHILE
39
Sentencia WHILE (Ejemplos)
A:=0;A:=0;A:=0;WHILE A<=1000 DO
A:=A+7;END_WHILE;
A:=0;WHILE A<=1000 DO
A:=A+7;END_WHILE;
n:=1;WHILE X<3000 DO
X:=X*2;
n:=1;WHILE X<3000 DO
X:=X*2;
40
X:=X*2;DATA[n]:=X;n:=n+1;
END_WHIE;
X:=X*2;DATA[n]:=X;n:=n+1;
END_WHIE;
11/02/2009
21
Sentencia REPEAT• Ejecuta una serie de instrucciones hasta que una condición sea True.True.
• Sintaxis:
REPEAT<statement-list> ;
UNTIL <expression> END_REPEAT;
41
UNTIL <expression> END_REPEAT;
Sentencia REPEAT
42
11/02/2009
22
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;
43
Sentencia EXIT• Fuerza la salida de un bucle ( FOR, WHILE, REPEAT )
• Sintaxis:
FOR ( WHILE, REPEAT) expression...
IF <condition> THEN EXIT ;
44
END_IF;...
END_FOR( WHILE, REPEAT);
A := 10;
11/02/2009
23
Sentencia RETURN• La operativa de RETURN depende de donde se use el programa.
•• Programa STPrograma ST: • Fuerza el final de la tarea ST que esta siendo ejecutada y ejecuta la siguiente tarea.
•• ST usado en SFCST 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 FBST usado en FB:
45
•• ST usado en FBST 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;
Llamadas a Bloques de Función
• Método 1:• 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.
46
A( B:=C, ………… , D=>E )
11/02/2009
24
Llamadas a Bloques de Función
• Método 2:• 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.
47
A( C, ………… , E )
• Método 1:
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_I N2:=IN2, FB_OUT2=>OUT2, FB_IN3:=IN3, FB_OUT3=>OUT3, ENO=>B)
48
• Método 2:• Instance_FB( IN1, IN2, IN3, OUT1, OUT2, OUT3 )
• Instance_FB( IN1, IN2, IN3, OUT1 )
• Instance_FB( IN1, IN2, IN3, OUT1, OUT3 )
11/02/2009
25
IEC 61131-3 ( Programación en ST )
Librería de FuncionesLibrería de Funciones
Funciones
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.
50
11/02/2009
26
Funciones numéricas (I)Función Tipo de datos de
argumentosTipo de datosdevueltos
Descripciónargumentos devueltos
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
51
EXPT (arg) Base REAL, LREAL REAL, LREAL Exponencial: baseexpo
Exponente INT, DINT, LINT, UINT,UDINT, ULINT
Funciones numéricas (II)Función Tipo de datos de
argumentosTipo 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
11/02/2009
27
Funciones para cadenas de texto (I)Función Tipo de datos de
argumentosTipo de datos devueltos
Descripción
LEN ( ) String STRING INT Devuelve la longitud LEN (string) String STRING INT Devuelve la longitud de un texto.
LEFT (<texto fuente>,<numero de caracteres>)
Texto fuente
STRING STRING Extrae caracteres de un texto comenzandopor la izquierda.Numero de
caracteresINT, UINT
RIGHT (<texto fuente>,<numero de caracteres>)
Texto fuente
STRING STRING Extrae caracteres de un texto comenzandopor la derecha.Numero de INT, UINT
53
por la derecha.Numero de caracteres
INT, UINT
MID (<texto fuente>, <numero de caracteres>,
<posición>)
Texto fuente
STRING STRING Extrae caracteres de un texto.
Numero de caracteres
INT, UINT
Posición INT, UINT
La posición del primer carácter en las cadenas de texto es 1La 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
argumentosTipo de datos devueltos
Descripción
CONCAT(<texto fuente1>, <texto fuente2>, …..)Hasta 32 argumentos
Texto fuente
STRING STRING Une cadenas de texto.
INSERT (<texto fuente>, <texto a insertar>,
<posición>)
Texto fuente
STRING STRING Inserta un cadena de texto dentro de otra.
Texto a insertar
STRING
Posición INT, UINT
54
Posición INT, UINT
DELETE (<texto fuente>, <numero de caracteres>,
<posición>)
Texto fuente
STRING STRING Borra caracteres de un cadenas de texto.
Numero de caracteres
INT, UINT
Posición INT, UINT
La posición del primer carácter en las cadenas de texto es 1La posición del primer carácter en las cadenas de texto es 1
11/02/2009
28
Funciones para cadenas de texto (III)Función Tipo de datos de
argumentosTipo de datos devueltos
Descripción
REPLACE (<textofuente>, <texto a insertar>, <numero de caracteres>,
<posición>)
Texto fuente
STRING STRING Reemplaza caracteres dentro de un cadena de texto.Texto a
insertarSTRING
Numero de caracteres
INT, UINT
Posición INT, UINT
FIND (<texto fuente>,
)Texto fuente
STRING INT Busca una cadena dentro de otra cadena
55
<texto a buscar>) fuente dentro de otra cadena de texto.Texto a
insertarSTRING
La posición del primer carácter en las cadenas de texto es 1La posición del primer carácter en las cadenas de texto es 1
Funciones de expansión OMRON (I)Función Tipo de datos de
argumentosTipo de datos devueltos
Descripción
WRITE_TEXT (<texto a escribir>, <Nombre del directorio y el fichero>, <Delimitador>,
<Parámetros>)
Texto a escribir
STRING --- Escribe una cadena de texto en la tarjeta de memoria.Nombre del
directorio y el fichero
STRING
Delimitador STRING
Parámetros INT, UINT, WORD
56
11/02/2009
29
Funciones de expansión OMRON (II)Función Tipo de datos de
argumentosDatos 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> )Texto STRING --- Transmite una cadena
de texto por un puerto serie de la SCB.
Puerto serie INT, UINT, WORD
TXD_SCU ( <texto>, <Numero Unidad SCU>, <Puerto serie>, <Puerto
Texto STRING --- Transmite una cadena de texto por un puerto serie de la SCU.
Numero INT, UINT,
57
<Puerto serie>, <Puerto
lógico interno> )serie de la SCU.
NumeroUnidad SCU
INT, UINT, WORD
Puerto serie INT, UINT, WORD
Puerto lógico interno
INT, UINT, WORD
Funciones de expansión OMRON (III)Función Tipo de datos de
argumentosDatos devueltos
Descripción
RXD_CPU ( <carga>, Carga STRING --- Recibe una cadena deRXD_CPU ( <carga>,
<numero caracteres> )Carga STRING --- Recibe una cadena de
texto por el puerto RS-232 de la CPU.
Numero caracteres
INT, UINT, WORD
RXD_SCB ( <carga>, <numero caracteres>, <puerto
serie> )
Carga STRING --- Recibe una cadena detexto por un puerto serie de la SCB.
Numero caracteres
INT, UINT, WORD
Puerto serie INT, UINT, WORD
RXD_SCU ( <carga>, Carga STRING --- Recibe una cadena de
58
RXD_SCU ( <carga>, <numero caracteres>, <numero Unidad SCU>, <puerto serie>, <puerto lógico
interno> )
Carga STRING --- Recibe una cadena de texto por un puerto serie de la SCU.
Numerocaracteres
INT, UINT, WORD
NumeroUnidad SCU
INT, UINT, WORD
Puerto serie INT, UINT, WORD
Puerto lógico interno
INT, UINT, WORD
11/02/2009
30
Funciones de expansión OMRON (IV)Función Tipo de datos
de argumentosTipo de datos devueltos
Descripciónde argumentos devueltos
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);
B := from_TO_to( valor );
B := REAL_TO_INT(valor);
NOTANOTA: Los tipos reales : Los tipos reales son redondeadosson redondeados
B := tipo_dato_origen_TO_STRING( valor );B := tipo_dato_origen_TO_STRING( valor );
– Funciones de conversión de texto a números.
60
B := tipo_dato_origen_TO_STRING( valor );B := STRING_TO _tipo_dato_destino( valor );
B := REAL_TO_STRING(valor);B := STRING_TO _UINT(valor);
B := tipo_dato_origen_TO_STRING( valor );B := STRING_TO _tipo_dato_destino( valor );
B := REAL_TO_STRING(valor);B := STRING_TO _UINT(valor);
11/02/2009
31
IEC 61131-3 ( Programación en ST )
RestriccionesRestricciones
Restricciones
– No hay limite en el anidamiento de las – 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 – Hasta 8 niveles de anidamiento, en las llamadas a FB’s.
11/02/2009
32
Restricciones
– Los entero solamente pueden ser asignados a – 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.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 EngineerProduct Engineer
Omron Electronics Iberia, S.A.