Texto Estructurado de Loscontroladores Logix5000
Short Description
Download Texto Estructurado de Loscontroladores Logix5000...
Description
Texto estructurado de los controladores Logix5000
Manual de programación (Números de catálogo 1756 ControlLogix,
1769 CompactLogix, 1789 SoftLogix, 1794 FlexLogix, PowerFlex 700S con DriveLogix)
Información importante para el usuario Los equipos de estado sólido tienen características de funcionamiento distintas de las de los equipos electromecánicos. La publicación Safety Guidelines for the Application, Installation and Maintenance of Solid State Controls (publicación SGI-1.1 disponible en su oficina local de ventas de Rockwell Automation o en línea en http://literature.rockwellautomation.com) describe algunas diferencias importantes entre los equipos de estado sólido y los dispositivos electromecánicos de lógica cableada. Debido a esta diferencia y también a la gran variedad de usos de los equipos de estado sólido, toda persona encargada de la aplicación de estos equipos debe asegurarse de la idoneidad de cada una de las aplicaciones concebidas con ellos. En ningún caso Rockwell Automation, Inc. será responsable ni asumirá ninguna obligación por daños indirectos o consecuentes que resulten del uso o de la aplicación de estos equipos. Los ejemplos y los diagramas de este manual se incluyen únicamente con fines ilustrativos. Debido a las numerosas variables y los muchos requisitos asociados con cualquier instalación en particular, Rockwell Automation, Inc. no puede asumir responsabilidad u obligación alguna por el uso de estos equipos basado en ejemplos y diagramas. Rockwell Automation, Inc. no asume ninguna obligación de patente con respecto al uso de la información, los circuitos, los equipos o el software descritos en este manual. Se prohibe la reproducción total o parcial del contenido de este manual sin la autorización por escrito de Rockwell Automation, Inc. Este manual contiene notas de seguridad en todas las situaciones en que se estimen necesarias. ADVERTENCIA
IMPORTANTE ATENCIÓN
Identifica información sobre prácticas o circunstancias que pueden provocar una explosión en un ambiente peligroso, lo que podría causar lesiones personales o la muerte, daños materiales o pérdidas económicas.
Identifica información importante para la correcta aplicación y comprensión del producto. Identifica información sobre prácticas o circunstancias que podrían provocar lesiones personales o la muerte, daños materiales o pérdidas económicas. Los mensajes de Atención le ayudan a identificar y evitar un peligro, y a reconocer las consecuencias.
PELIGRO DE CHOQUE
Puede haber etiquetas en el exterior o en el interior del equipo (por ejemplo, en un variador o un motor) para advertir sobre la posible presencia de voltaje peligroso.
PELIGRO DE QUEMADURA
Puede haber etiquetas en el exterior o en el interior del equipo (por ejemplo, en un variador o un motor) para advertir sobre superficies que podrían estar a temperaturas peligrosas.
Allen-Bradley, Rockwell Automation, and TechConnect son marcas comerciales de Rockwell Automation, Inc. Las marcas comerciales no pertenecientes a Rockwell Automation son propiedad de sus respectivas empresas.
Contenido Prefacio
Propósito de este manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Cómo usar ese manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Capítulo 1 Programación de texto estructurado
Publicación 1756-PM007B-ES-P – Julio 2008
Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Asignaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Especifique una asignación no retentiva. . . . . . . . . . . . . . . . . . . . . . 9 Asigne un carácter ASCII a una cadena.. . . . . . . . . . . . . . . . . . . . . 10 Expresiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Use operadores y funciones aritméticas . . . . . . . . . . . . . . . . . . . . . 12 Use operadores con relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Use operadores lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Use operadores bit a bit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Determine el orden de ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Instrucciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Construcciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Algunas palabras clave están reservadas para uso futuro. . . . . . . . 18 IF...THEN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 CASE...OF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 FOR…DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 WHILE…DO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 REPEAT…UNTIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Servicio de asistencia técnica de Rockwell Automation . . . . . . . . . . . . 36 Asistencia para la instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Devolución de productos nuevos . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3
Contenido
4
Publicación 1756-PM007B-ES-P – Julio 2008
Prefacio
Propósito de este manual
Este manual muestra cómo programar los controladores Logix5000 con el lenguaje de programación de texto estructurado. Este manual es uno de un conjunto de manuales relacionados que muestran los procedimientos comunes para programar y operar los controladores Logix5000. Para obtener una lista completa de manuales de procedimientos comunes, consulte el documento Manual de programación de procedimientos comunes de los controladores Logix5000, publicación 1756-PM001. El término controlador Logix5000 se refiere a cualquier controlador basado en el sistema de operación Logix5000, tales como: • controladores CompactLogix • controladores ControlLogix • controladores DriveLogix • controladores FlexLogix • controladores SoftLogix5800
Cómo usar ese manual
Algunas secciones tienen un formato distinto al resto del texto.
El texto en
Identifica
Por ejemplo
Significa
cursiva
el nombre de un ítem que usted ve en la pantalla o en un ejemplo
Haga clic con el botón derecho del mouse en User-Defined …
Haga clic con el botón derecho del mouse en el ítem que tiene el nombre User-Defined.
courier
información que usted debe proporcionar según su aplicación (una variable)
Haga clic con el botón derecho del mouse en name_of_program …
Usted debe identificar el programa específico en su aplicación. Normalmente es un nombre o una variable que usted ha definido.
encerrado en corchetes
una tecla del teclado
Presione [Enter].
Presione la tecla Enter.
Publicación 1756-PM007B-ES-P – Julio 2008
5
Prefacio
Notas:
6
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo
1
Programación de texto estructurado
El texto estructurado es un lenguaje de programación textual que usa enunciados para definir lo que se va a ejecutar. • El texto estructurado trata indistintamente las mayúsculas y las minúsculas. • Use tabulaciones y retornos de carro (nuevas líneas) para facilitar la lectura del texto estructurado. Éstos no tienen ningún efecto en la ejecución del texto estructurado. El texto estructurado trata indistintamente las mayúsculas y las minúsculas. El texto estructurado puede contener estos componentes:
Introducción
Término
Definición
Ejemplos
Asignación (vea la página 8)
Use un enunciado de asignación para asignar valores a los tags. El operador := es el operador de asignación. Termine la asignación con un signo de punto y coma “;”.
tag := expression;
Expresión Una expresión es parte de una asignación completa o de un enunciado (vea la página 10) de construcción. Una expresión evalúa según un número (expresión numérica) o según un estado de verdadero o falso (expresión BOOL). Una expresión contiene: Tags
Área con nombre de la memoria, donde se value1 almacenan los datos (BOOL, SINT,INT,DINT, REAL, de cadena)
Inmediatos
Un valor constante
4
Operadores
Un símbolo o mnemónico que especifica una operación dentro de una expresión
tag1 + tag2 tag1 >= value1
Funciones
Cuando se ejecuta, una función produce un valor. Use paréntesis para contener el operando de una función. Aunque su sintaxis es similar, las funciones se diferencian de las instrucciones porque las funciones sólo pueden usarse en expresiones. Las instrucciones no pueden usarse en expresiones.
function(tag1)
instruction(); Instrucción Una instrucción es un enunciado autónomo. (vea la página 16) Una instrucción usa paréntesis para contener sus operandos. instruction(operand); Según la instrucción, puede haber, cero, uno o múltiples operandos. Cuando se ejecuta, una instrucción produce uno o más valores que son instruction(operand1, operand2,operand3); parte de una estructura de datos. Termine la instrucción con un signo de punto y coma “;”. Aunque su sintaxis es similar, las instrucciones difieren de las funciones en que las instrucciones no pueden usarse en expresiones. Las funciones sólo pueden usarse en expresiones.
Publicación 1756-PM007B-ES-P – Julio 2008
7
Programación de texto estructurado
Término
Definición
Ejemplos
Construcción Un enunciado condicional usado para activar el código de texto (vea la página 18) estructurado (por ej., otros enunciados). Termine la construcción con un signo de punto y coma “;”.
IF...THEN CASE FOR...DO WHILE...DO REPEAT...UNTIL EXIT
Comentario Texto que explica o aclara lo que hace una sección del texto (vea la página 33) estructurado. • Use comentarios para facilitar la interpretación del texto estructurado. • Los comentarios no tienen ningún efecto en la ejecución del texto estructurado. • Los comentarios pueden aparecer en cualquier lugar del texto estructurado.
//comentario
Asignaciones
Capítulo 1
(*inicio de comentario . . . fin de comentario*) /*inicio de comentario . . . fin de comentario*/
Use una asignación para cambiar el valor almacenado dentro de un tag. Una asignación tiene esta sintaxis: tag := expression ; donde: Componente
Descripción
tag
Representa el tag que está obteniendo el nuevo valor. El tag debe ser de tipo BOOL, SINT, INT, DINT o REAL.
:=
Es el símbolo de asignación.
expresión
Representa el nuevo valor que se va a asigna al tag.
;
Si el tag es de este tipo de datos
Use este tipo de expresión
BOOL
Expresión BOOL
SINT INT DINT REAL
Expresión numérica
Termina la asignación.
El tag retiene el valor asignado hasta que otra asignación cambia el valor. La expresión puede ser simple, como un valor inmediato u otro nombre de tag, o la expresión puede ser compleja e incluir varios operadores y/o funciones. SUGERENCIA
8
Los datos del módulo de E/S se actualizan de manera asíncrona a la ejecución de la lógica. Si usted hace referencia a una entrada múltiples veces en la lógica, la entrada podría cambiar de estado entre las distintas referencias. Si necesita que la entrada tenga el mismo estado en cada referencia, almacene en el búfer el valor de entrada y haga referencia a dicho tag en el búfer.
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
Especifique una asignación no retentiva. La asignación no retentiva es diferente de la asignación regular descrita anteriormente, porque el tag en una asignación no retentiva se restablece a cero cada vez que el controlador: • entra al modo marcha. • deja el paso de un SFC si usted configura el SFC para restablecimiento automático (esto sólo se aplica si usted incorpora la asignación en la acción del paso, o si usa la acción para llamar a una rutina de texto estructurado mediante una instrucción JSR). Una asignación no retentiva tiene esta sintaxis: tag [:=] expression ; donde: Componente
Descripción
tag
Representa el tag que está obteniendo el nuevo valor. El tag debe ser de tipo BOOL, SINT, INT, DINT o REAL.
[:=]
Es el símbolo de asignación no retentiva.
expression
Representa el nuevo valor que se va a asignar al tag.
;
Publicación 1756-PM007B-ES-P – Julio 2008
Si el tag es de este tipo de datos
Use este tipo de expresión
BOOL
Expresión BOOL
SINT INT DINT REAL
Expresión numérica
Termina la asignación.
9
Programación de texto estructurado
Capítulo 1
Asigne un carácter ASCII a una cadena. Use el operador de asignación para asignar un carácter ASCII a un elemento del miembro DATA de un tag de cadena. Para asignar un carácter, especifique el valor del carácter o el nombre del tag, el miembro DATA y el elemento del carácter. Esto es correcto
Esto no es correcto
string1.DATA[0]:= 65;
string1.DATA[0] := A;
string1.DATA[0]:= string2.DATA[0];
string1 := string2;
Para añadir o insertar una cadena de caracteres a un tag de cadena, use cualquiera de estas instrucciones de cadena ASCII.
Expresiones
Para
Use esta instrucción
añadir caracteres al final de una cadena
CONCAT
insertar caracteres dentro de una cadena
INSERT
Una expresión es el nombre de un tag, una ecuación o una comparación. Para escribir una expresión, use uno de estos elementos. • Nombre de tag que almacene el valor (variable) • Número que usted introduce directamente en una expresión (valor inmediato) • Funciones, tales como: ABS, TRUNC • Operadores, tales como: +, -, , And, Or A medida que usted escriba las expresiones, siga estas reglas generales. • Use cualquier combinación de mayúsculas y minúsculas. Por ejemplo, estas tres variaciones de “AND” son aceptables: AND, And, and. • Para requisitos más complejos, use paréntesis para agrupar expresiones dentro de expresiones. Esto hace que toda la expresión sea más fácil de leer y asegura que la expresión se ejecute en la secuencia deseada. IMPORTANTE
10
Usted puede añadir comentarios de usuario en línea. Por lo tanto, la conmutación de lenguaje local no se aplica a su lenguaje de programación.
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
En texto estructurado usted usa dos tipos de expresiones: Expresión BOOL: Una expresión que produce ya sea el valor BOOL de 1 (verdadero) o 0 (falso). • Una expresión Bool usa tags bool, operadores con relaciones y operadores lógicos para comparar valores o verificar si las condiciones son verdaderas o falsas. Por ejemplo, tag1>65. • Una expresión Bool simple puede ser un tag BOOL sencillo. • Normalmente usted usa expresiones BOOL para condicionar la ejecución de otra lógica. Expresión numérica: Una expresión que calcula un valor entero o de coma flotante (punto flotante). • Una expresión numérica usa operadores aritméticos, funciones aritméticas y operadores bit a bit. Por ejemplo, tag1+5. • A menudo usted anida una expresión numérica dentro de una expresión BOOL. Por ejemplo, (tag1+5)>65. Use la siguiente tabla para seleccionar operadores para sus expresiones: Si usted desea
Entonces
Calcular un valor aritmético
Use operadores y funciones aritméticas en la página 12.
Comparar dos valores o cadenas
Use operadores con relaciones en la página 13.
Verificar si las condiciones son verdaderas o falsas
Use operadores lógicos en la página 14.
Comparar los bits dentro de valores
Use operadores bit a bit en la página 15.
Publicación 1756-PM007B-ES-P – Julio 2008
11
Programación de texto estructurado
Capítulo 1
Use operadores y funciones aritméticas Usted puede combinar múltiples operadores y funciones en expresiones aritméticas. Los operadores aritméticos calculan nuevos valores. Para
Use este operador
Tipo óptimo de datos
Sumar
+
DINT, REAL
Restar/cambiar signo
-
DINT, REAL
Multiplicar
*
DINT, REAL
Exponente (x a la potencia de y)
**
DINT, REAL
Dividir
/
DINT, REAL
Modulo-dividir
MOD
DINT, REAL
Las funciones aritméticas realizan operaciones matemáticas. Especifique una constante, un tag no booleano o una expresión para la función.
12
Para obtener
Use esta función
Tipo óptimo de datos
Valor absoluto
ABS (numeric_expression)
DINT, REAL
Arco coseno
ACOS (numeric_expression)
REAL
Arco seno
ASIN (numeric_expression)
REAL
Arco tangente
ATAN (numeric_expression)
REAL
Coseno
COS (numeric_expression)
REAL
Radianes a grados
DEG (numeric_expression)
DINT, REAL
Logaritmo natural
LN (numeric_expression)
REAL
Logaritmo base 10
LOG (numeric_expression)
REAL
Grados a radianes
RAD (numeric_expression)
DINT, REAL
Seno
SIN (numeric_expression)
REAL
Raíz cuadrada
SQRT (numeric_expression)
DINT, REAL
Tangente
TAN (numeric_expression)
REAL
Truncar
TRUNC (numeric_expression)
DINT, REAL
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
Por ejemplo: Use este formato
Ejemplo Para esta situación
Usted escribiría
value1 operador value2
Si gain_4 y gain_4_adj son tags DINT y su especificación dice: “Añadir 15 a gain_4 y almacenar el resultado en gain_4_adj.”
gain_4_adj := gain_4+15;
operador value1
Si alarm y high_alarm son valores DINT y su especificación dice: “Cambiar signo de high_alarm y almacenar el resultado en alarm.”
alarm:= -high_alarm;
función(numeric_expression)
Si overtravel y overtravel_POS son tags DINT y su especificación dice: “Calcular el valor absoluto de overtravel y almacenar el resultado en overtravel_POS.”
overtravel_POS := ABS(overtravel);
value1 operador (función((value2+value3)/2)
Si adjustment y position son tags DINT y sensor1 y sensor2 son tags REAL y su especificación dice: “Encontrar el valor absoluto del sensor1 y sensor2 promedio, añadir el ajuste y guardar el resultado en position.”
position := adjustment + ABS((sensor1 + sensor2)/2);
Use operadores con relaciones Los operadores con relaciones comparan dos valores o cadenas para proporcionar un resultado verdadero o falso. El resultado de una operación con relaciones es un valor BOOL. Si la comparación es
El resultado es
Verdadera
1
Falsa
0
Use estos operadores con relaciones.
Publicación 1756-PM007B-ES-P – Julio 2008
Para esta comparación:
Use este operador:
Tipo óptimo de datos:
Igual
=
DINT, REAL, string
Menor que
<
DINT, REAL, string
Menor o igual que
DINT, REAL, string
Mayor o igual que
>=
DINT, REAL, string
Diferente
DINT, REAL, string
13
Programación de texto estructurado
Capítulo 1
Por ejemplo: Use este formato
EJEMPLO Para esta situación
Usted escribiría
value1 operator value2
Si temp es un tag DINT y su especificación dice: IF temp= length);
Para introducir un carácter ASCII directamente en la expresión, introduzca el valor decimal del carácter. bool_tag := bool_expressions
Cómo se evalúan las cadenas Los valores hexadecimales de los caracteres ASCII determinan si una cadena es menor o mayor que otra cadena. • Cuando las dos cadenas se clasifican como en un directorio telefónico, el orden de las cadenas determina cuál es mayor.
m e n o r
m a y o r
Caracteres ASCII
Códigos hexadecimales
1ab
$31$61$62
1b
$31$62
A
$41
AB
$41$42
B
$42
a
$61
ab
$61$62
AB < B a>B
• Las cadenas son iguales si sus caracteres coinciden. • Los caracteres distinguen entre minúsculas y mayúsculas. La “A” mayúscula ($41) no es igual a la “a” minúscula ($61).
Use operadores lógicos Los operadores lógicos le permiten verificar si múltiples condiciones son verdaderas o falsas. El resultado de una operación lógica es un valor BOOL.
14
Si la comparación es
El resultado es
Verdadera
1
Falsa
0 Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
Use estos operadores lógicos: Para obtener
Use este operador
Tipo de datos
Y lógico
&, AND
BOOL
O lógico
OR
BOOL
O lógico exclusivo
XOR
BOOL
Complemento lógico
NOT
BOOL
Por ejemplo: Use este formato
EJEMPLO Para esta situación
Usted escribiría
BOOLtag
Si photoeye es un tag BOOL y su especificación dice: “Si photoeye_1 está activado, entonces…”
IF photoeye THEN...
NOT BOOLtag
Si photoeye es un tag BOOL y su especificación dice: “Si photoeye está desactivado, entonces…”
IF NOT photoeye THEN...
expression1 & expression2
Si photoeye es un tag BOOL, temp es un tag DIN y su especificación dice: “Si photoeye está activado y la temp es menor que 100° entonces…”
IF photoeye & (temp 3 THEN
transportador = desactivado (0)
conveyor := 0;
alarma = activada (1)
alarm := 1; END_IF;
Ejemplo 2: IF…THEN…ELSE Si usted desea esto
Introduzca este texto estructurado
Si el contacto de dirección del transportador = avance (1) entonces
IF conveyor_direction THEN
luz = apagada De lo contrario luz = encendida
light := 0; ELSE light [:=] 1; END_IF;
[:=] le indica al controlador que restablezca la luz cada vez que el controlador: • entre al modo marcha. • deje el paso de un SFC si usted configura el SFC para restablecimiento automático (esto se aplica sólo si usted incorpora la asignación en la acción del paso, o si usa la acción para llamar a una rutina de texto estructurado mediante una instrucción JSR).
20
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
Ejemplo 3: IF…THEN…ELSIF Si usted desea esto
Introduzca este texto estructurado
Si el interruptor de final de carrera de nivel bajo de azúcar IF Sugar.Low & Sugar.High THEN = baja (activado) y el interruptor de final de carrera de nivel alto de azúcar = no alta (activado) entonces válvula de entrada = abierta (activada)
Sugar.Inlet [:=] 1;
Hasta que el interruptor de final de carrera de nivel alto de azúcar = alta (desactivado)
ELSIF NOT(Sugar.High) THEN Sugar.Inlet := 0; END_IF;
[:=] le indica al controlador que restablezca Sugar.Inlet cada vez que el controlador: • entre al modo marcha. • deje el paso de un SFC si usted configura el SFC para restablecimiento automático (esto se aplica sólo si usted incorpora la asignación en la acción del paso, o si usa la acción para llamar a una rutina de texto estructurado mediante una instrucción JSR).
Ejemplo 4: IF…THEN…ELSIF…ELSE Si usted desea esto
Introduzca este texto estructurado
Si la temperatura del tanque > 100
IF tank.temp > 200 THEN
entonces bomba = lenta Si la temperatura del tanque > 200
pump.fast :=1; pump.slow :=0; pump.off :=0; ELSIF tank.temp > 100 THEN
entonces bomba = rápida de lo contrario bomba = desactivada
pump.fast :=0; pump.slow :=1; pump.off :=0; ELSE pump.fast :=0; pump.slow :=0; pump.off :=1; END_IF;
Publicación 1756-PM007B-ES-P – Julio 2008
21
Programación de texto estructurado
Capítulo 1
Use CASE para seleccionar qué hacer en base a un valor numérico.
CASE...OF Operandos:
Texto estructurado CASE numeric_expression OF selector1: statement; selectorN: statement;
Operando
Tipo
Formato
Introduzca
numeric_ expression
SINT INT DINT REAL
Tag Expresión
Tag o expresión que evalúa a un número (expresión numérica)
selector
SINT INT DINT REAL
Inmediato
El mismo tipo que numeric_expression
ELSE statement; END_CASE;
IMPORTANTE
Si usa valores REAL, use un rango de valores para un selector porque un valor REAL es más probable que esté dentro de un rango de valores que una coincidencia exacta de un valor específico.
Descripción: La sintaxis es: CASE numeric_expression OF
Especifique todos los valores de selector alternativos (rutas) que necesite
selector1 :
; . . .
Enunciados a ejecutarse cuando numeric_expression = selector1
selector2 :
;
Enunciados a ejecutarse cuando numeric_expression = selector2
. . . selector3 :
;
. . .
Enunciados a ejecutarse cuando numeric_expression = selector3
ELSE ; opcional
. . .
Enunciados a ejecutarse cuando numeric_expression ¼ de cualquier selector
END_CASE;
22
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
La sintaxis para introducir los valores de selector es: Cuando el selector es
Introduzca
Un valor
valor: enunciado
Múltiples y diferentes valores
value1, value2, valueN : Use una coma (,) para separar cada valor.
Un rango de valores
value1...valueN : Use dos puntos (..) para identificar el rango.
Valores distintos más un rango de valores
valuea, valueb, value1...valueN :
La construcción CASE es similar a un enunciado de interruptor en los lenguajes de programación C o C++. Sin embargo, con la construcción CASE el controlador ejecuta sólo los enunciados asociados con el primer valor de selector coincidente. La ejecución siempre se interrumpe después de los enunciados de dicho selector y va al enunciado END_CASE.
Indicadores de estado aritméticos: No afectados Condiciones de fallo: Ninguno Ejemplo
Publicación 1756-PM007B-ES-P – Julio 2008
23
Programación de texto estructurado
Capítulo 1
Ejemplo Si usted desea esto
Introduzca este texto estructurado
Si el número de receta = 1 entonces
CASE recipe_number OF
Ingrediente A salida 1 = abierto (1)
1:
Ingrediente B salida 4 = abierto (1)
Ingredient_A.Outlet_1 :=1; Ingredient_B.Outlet_4 :=1;
Si el número de receta = 2 ó 3 entonces
2,3:
Ingrediente A salida 4 = abierto (1)
Ingredient_A.Outlet_4 :=1; Ingredient_B.Outlet_2 :=1;
Ingrediente B salida 2 = abierto (1) Si el número de receta = 4, 5, 6 ó 7 entonces
4..7:
Ingrediente A salida 4 = abierto (1)
Ingredient_A.Outlet_4 :=1; Ingredient_B.Outlet_2 :=1;
Ingrediente B salida 2 = abierto (1) Si el número de receta = 8, 11, 12 ó 13 entonces
8,11..13
Ingrediente A salida 1 = abierto (1)
Ingredient_A.Outlet_1 :=1; Ingredient_B.Outlet_4 :=1;
Ingrediente B salida 4 = abierto (1) De lo contrario, todas las salidas = cerradas (0)
ELSE Ingredient_A.Outlet_1 [:=]0; Ingredient_A.Outlet_4 [:=]0; Ingredient_B.Outlet_2 [:=]0; Ingredient_B.Outlet_4 [:=]0; END_CASE;
[:=] le indica al controlador que también restablezca los tags de salida cada vez que el controlador: • entre al modo marcha. • deje el paso de un SFC si usted configura el SFC para restablecimiento automático (esto se aplica sólo si usted incorpora la asignación en la acción del paso, o si usa la acción para llamar a una rutina de texto estructurado mediante una instrucción JSR).
24
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
Use el lazo FOR…DO para hacer algo un número específico de veces, antes de hacer otra cosa.
FOR…DO Operandos:
Texto estructurado FOR count:= initial_value TO final_value BY increment DO ;
Operando
Tipo
Formato
Descripción
count
SINT INT DINT
Tag
Tag para almacenar la posición de conteo a medida que se ejecuta FOR…DO
initial_ value
SINT INT DINT
Tag Expresión Inmediato
Debe evaluar con respecto a un número. Especifica el valor inicial para el conteo.
final_ value
SINT INT DINT
Tag Expresión Inmediato
Especifica el valor final para el conteo, el cual determina cuándo salir del lazo.
increment
SINT INT DINT
Tag Expresión Inmediato
(opcional) Valor a incrementar el conteo cada vez a través del lazo
END_FOR;
Si usted no especifica un incremento, el conteo se incrementa en un valor de 1.
IMPORTANTE
Asegúrese de no iterar dentro del lazo demasiadas veces en un solo escán. • El controlador no ejecuta ningún otro enunciado en la rutina mientras no se complete el lazo. • Si el tiempo que se requiere para completar el lazo es mayor que el temporizador de control (watchdog) para la tarea, se produce un fallo mayor. • Considere usar una construcción diferente, por ejemplo IF...THEN.
Descripción: La sintaxis es: FOR count := initial_value TO final_value BY increment
opcional {
Si no especifica un incremento, el lazo se incrementa en un valor de 1.
DO ; IF bool_expression THEN EXIT;
opcional
END_IF;
Si existen condiciones en las que usted desee salir del lazo anticipadamente, use otros enunciados, tal como la construcción IF...THEN, para condicionar un enunciado EXIT
END_FOR;
Publicación 1756-PM007B-ES-P – Julio 2008
25
Programación de texto estructurado
Capítulo 1
Estos diagramas muestran cómo se ejecuta un lazo FOR...DO y cómo un enunciado EXIT sale del lazo anticipadamente. ¿Efectuado x número de veces?
¿Efectuado x número de veces?
Sí
No
no
enunciado 1 enunciado 2 enunciado 3 enunciado 4 …
enunciado 1 enunciado 2 enunciado 3 enunciado 4 … ¿Salir ?
Resto de la rutina
Sí
Sí
No Resto de la rutina
El lazo FOR…DO se ejecuta un número específico de veces.
Para detener el lazo antes de que el conteo llegue al último valor, use un enunciado EXIT.
Indicadores de estado aritméticos: No afectados Condiciones de fallo: Ocurre un fallo mayor si
Tipo de fallo
Código de fallo
La construcción tiene un lazo excesivamente largo
6
1
Ejemplo 1:
26
Si usted desea esto
Introduzca este texto estructurado
Restablecer los bits 0 – 31 en una matriz de BOOLs: 1. Inicializar el tag subscript a 0. 2. Restablecer la matriz[ subscript ] . Por ejemplo, cuando subscript = 5, restablecer matriz[5]. 3. Añadir 1 a subscript. 4. Si subscript es £ con respecto a 31, repita 2 y 3. De lo contrario, parar.
For subscript:=0 to 31 by 1 do array[subscript] := 0; End_for;
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
Ejemplo 2: Si usted desea esto
Introduzca este texto estructurado
Un tipo de datos definido por el usuario (estructura)almacena esta información acerca de un ítem en su inventario. • ID de código de barras del ítem (tipo de datos de cadena) • Cantidad en inventario del ítem (tipo de datos DINT) Una matriz de la estructura anterior contiene un elemento para cada ítem diferente en su inventario. Usted desea buscar la matriz para un producto específico (use su código de barras) y determine la cantidad que hay en inventario. 1. Obtenga el tamaño (número de ítems) de la matriz Inventory y almacene el resultado en Inventory_Items (tag DINT). 2. Inicialice el tag position a 0. 3. Si el código de barras coincide con el ID de un ítem en la matriz, entonces:
SIZE(Inventory,0,Inventory_Items); For position:=0 to Inventory_Items – 1 do If Barcode = Inventory[position].ID then Quantity := Inventory[position].Qty; Exit; End_if; End_for;
a. Establezca el tag Quantity = Inventory[position].Qty. Esto produce la cantidad en inventario del ítem. b. Pare.
El código de barras es un tag de cadena que almacena el código de barras del ítem que usted está buscando. Por ejemplo, cuando position = 5, compare Barcode con Inventory[5].ID. 4. Añadir 1 a position. 5. Si position es £ con respecto a (Inventory_Items -1), repita 3 y 4. Puesto que los números de elemento comienzan en 0, el último elemento es 1 menos el número de elementos en la matriz. De lo contrario, parar.
Publicación 1756-PM007B-ES-P – Julio 2008
27
Programación de texto estructurado
Capítulo 1
Use el lazo WHILE…DO para continuar haciendo algo, siempre y cuando ciertas condiciones sean verdaderas.
WHILE…DO Operandos:
Texto estructurado WHILE bool_expression DO ; END_WHILE;
IMPORTANTE
Operando
Tipo
Formato
Introduzca
bool_ expression
BOOL
Tag Expresión
Expresión o tag BOOL que evalúa respecto a un valor BOOL
Asegúrese de no iterar dentro del lazo demasiadas veces en un solo escán. • El controlador no ejecuta ningún otro enunciado en la rutina mientras no se complete el lazo. • Si el tiempo que se requiere para completar el lazo es mayor que el temporizador de control (watchdog) para la tarea, se produce un fallo mayor. • Considere usar una construcción diferente, por ejemplo IF...THEN.
Descripción: La sintaxis es: WHILE bool_expression1 DO ;
Enunciados a ejecutarse mientras bool_expression1 es verdadera
IF bool_expression2 THEN EXIT;
Opcional
END_IF;
Si existen condiciones en las que usted desee salir del lazo anticipadamente, use otros enunciados, tal como la construcción IF...THEN, para condicionar un enunciado EXIT
END_WHILE; Estos diagramas muestran cómo se ejecuta un lazo WHILE...DO y cómo un enunciado EXIT sale del lazo anticipadamente. Expresión BOOL
Falsa
Falsa Expresión BOOL
Verdadera
Verdadera
Enunciado 1 Enunciado 2 Enunciado 3 Enunciado 4 …
Enunciado 1 Enunciado 2 Enunciado 3 Enunciado 4 … ¿Salir ?
Resto de la rutina
Sí
No Resto de la rutina
Mientras bool_expression es verdadero, el controlador ejecuta sólo los enunciados dentro del lazo WHILE…DO.
28
Para detener el lazo antes de que las condiciones sean verdaderas, use un enunciado EXIT.
Publicación 1756-PM007B-ES-P – Julio 2008
Capítulo 1
Programación de texto estructurado
Indicadores de estado aritméticos: No afectados Condiciones de fallo: Ocurre un fallo mayor si
Tipo de fallo
Código de fallo
La construcción tiene un lazo excesivamente largo
6
1
Ejemplo 1: Si usted desea esto
Introduzca este texto estructurado
El lazo WHILE...DO evalúa sus condiciones primero. Si las condiciones son verdaderas, entonces el controlador ejecuta los enunciados dentro del lazo.
pos := 0;
Esto es diferente del lazo REPEAT...UNTIL porque el lazo REPEAT...UNTIL ejecuta los enunciados en la construcción y luego determina si las condiciones son verdaderas antes de ejecutar los enunciados nuevamente. Los enunciados en un lazo REPEAT...UNTIL siempre se ejecutan por lo menos una vez. Es posible que nunca se ejecuten los enunciados en un lazo WHILE...DO.
While ((pos 200 THEN...
/*comment*/
Sugar.Inlet:=0;/*close the inlet*/ IF bar_code=65 /*A*/ THEN... /*Obtiene el número de elementos en la matriz Inventory y almacena el valor en el tag Inventory_Items*/ SIZE(Inventory,0,Inventory_Items);
Publicación 1756-PM007B-ES-P – Julio 2008
33
Servicio de asistencia técnica de Rockwell Automation
Rockwell Automation ofrece información técnica en la Internet para proporcionarle asistencia al momento de utilizar sus productos. En http://support.rockwellautomation.com, puede encontrar manuales técnicos, una base de conocimientos con respuestas a preguntas frecuentes, notas técnicas y de aplicación, ejemplos de código y vínculos a Service Packs de software, así como un vínculo llamado MySupport que se puede personalizar para sacar el máximo provecho de todas estas herramientas. Con el fin de brindarle un nivel adicional de asistencia técnica para la instalación, configuración y resolución de problemas por teléfono, ofrecemos los programas de asistencia técnica TechConnect Support. Si desea obtener más información, póngase en contacto con el representante o distribuidor local de Rockwell Automation, o visítenos en http://support.rockwellautomation.com.
Asistencia para la instalación Si se le presenta un problema durante las 24 horas posteriores a la instalación, revise la información en este manual. También puede llamar a un número especial de asistencia técnica al cliente a fin de recibir ayuda inicial para poner en servicio el producto: En los Estados Unidos
1.440.646.3434 Lunes a viernes de las 08:00 a las 17:00, hora oficial del Este de EE.UU.
Fuera de Estados Póngase en contacto con el representante local de Unidos Rockwell Automation para cualquier consulta relacionada con asistencia técnica.
Devolución de productos nuevos Rockwell Automation prueba todos sus productos para asegurarse de que funcionan correctamente al enviarse desde el punto de fabricación. No obstante, si el producto no funciona y es necesario devolverlo, siga estos procedimientos: En los Estados Unidos
Póngase en contacto con el distribuidor. Debe proporcionar al distribuidor un número de caso de asistencia técnica (llame al número de teléfono indicado anteriormente para obtenerlo) a fin de completar el proceso de devolución.
Fuera de Estados Póngase en contacto con el representante local de Unidos Rockwell Automation para obtener información sobre el procedimiento de devolución.
Publicación 1756-PM007B-ES-P – Julio 2008 36 Reemplaza a la publicación 1756-PM007A-ES-P – Julio de 2007
Copyright © 2008 Rockwell Automation, Inc. Todos los derechos reservados. Impreso en los EE.UU.
View more...
Comments