Está en la página 1de 36

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.

Identifica información sobre prácticas o circunstancias que pueden provocar una explosión en un
ADVERTENCIA
ambiente peligroso, lo que podría causar lesiones personales o la muerte, daños materiales o
pérdidas económicas.

IMPORTANTE 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
ATENCIÓN
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 Puede haber etiquetas en el exterior o en el interior del equipo (por ejemplo, en un variador o un
DE CHOQUE motor) para advertir sobre la posible presencia de voltaje peligroso.

PELIGRO Puede haber etiquetas en el exterior o en el interior del equipo (por ejemplo, en un variador o un
DE QUEMADURA 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 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
estructurado 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

Publicación 1756-PM007B-ES-P – Julio 2008 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 Haga clic con el botón derecho Haga clic con el botón derecho del mouse
en la pantalla o en un ejemplo del mouse en User-Defined … en el ítem que tiene el nombre
User-Defined.
courier información que usted debe Haga clic con el botón derecho Usted debe identificar el programa
proporcionar según su aplicación del mouse en específico en su aplicación.
(una variable) name_of_program … Normalmente es un nombre o una
variable que usted ha definido.
encerrado en una tecla del teclado Presione [Enter]. Presione la tecla Enter.
corchetes

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

Introducción 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:

Término Definición Ejemplos


Asignación Use un enunciado de asignación para asignar valores a los tags. tag := expression;
(vea la página 8) El operador := es el operador de asignación.
Termine la asignación con un signo de punto y coma “;”.
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 tag1 + tag2
operación dentro de una expresión tag1 >= value1
Funciones Cuando se ejecuta, una función produce un valor. function(tag1)
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.
Instrucción Una instrucción es un enunciado autónomo. instruction();
(vea la página 16) Una instrucción usa paréntesis para contener sus operandos.
Según la instrucción, puede haber, cero, uno o múltiples operandos. instruction(operand);
Cuando se ejecuta, una instrucción produce uno o más valores que son
parte de una estructura de datos. instruction(operand1, operand2,operand3);
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 Capítulo 1

Término Definición Ejemplos


Construcción Un enunciado condicional usado para activar el código de texto IF...THEN
(vea la página 18) estructurado (por ej., otros enunciados). CASE
Termine la construcción con un signo de punto y coma “;”. FOR...DO
WHILE...DO
REPEAT...UNTIL
EXIT
Comentario Texto que explica o aclara lo que hace una sección del texto //comentario
(vea la página 33) estructurado.
• Use comentarios para facilitar la interpretación del texto (*inicio de comentario . . . fin de
estructurado. comentario*)
• Los comentarios no tienen ningún efecto en la ejecución del texto
estructurado. /*inicio de comentario . . . fin de
• Los comentarios pueden aparecer en cualquier lugar del texto comentario*/
estructurado.

Asignaciones 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 Use este tipo de expresión
datos
BOOL Expresión BOOL
SINT Expresión numérica
INT
DINT
REAL
; 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 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.

8 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.
Si el tag es de este tipo de Use este tipo de expresión
datos
BOOL Expresión BOOL
SINT Expresión numérica
INT
DINT
REAL
; Termina la asignación.

Publicación 1756-PM007B-ES-P – Julio 2008 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.

Para Use esta instrucción


añadir caracteres al final de una cadena CONCAT
insertar caracteres dentro de una cadena INSERT

Expresiones 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 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.

10 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 Use operadores lógicos en la página 14.
o falsas
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.

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

12 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 gain_4_adj := gain_4+15;
especificación dice: “Añadir 15 a gain_4 y
almacenar el resultado en gain_4_adj.”
operador value1 Si alarm y high_alarm son valores DINT y su alarm:= -high_alarm;
especificación dice: “Cambiar signo de high_alarm
y almacenar el resultado en alarm.”
función(numeric_expression) Si overtravel y overtravel_POS son tags DINT y su overtravel_POS :=
especificación dice: “Calcular el valor absoluto de ABS(overtravel);
overtravel y almacenar el resultado en
overtravel_POS.”
value1 operador (función((value2+value3)/2) Si adjustment y position son tags DINT y sensor1 y position := adjustment +
sensor2 son tags REAL y su especificación dice: ABS((sensor1 + sensor2)/2);
“Encontrar el valor absoluto del sensor1 y sensor2
promedio, añadir el ajuste y guardar el resultado en
position.”

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.

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 que > DINT, REAL, string
Mayor o igual que >= DINT, REAL, string
Diferente <> DINT, REAL, string

Publicación 1756-PM007B-ES-P – Julio 2008 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<100 THEN...
“Si temp es menor que 100° entonces…”
stringtag1 operator stringtag2 Si bar_code y dest son tags de cadena y su IF bar_code=dest THEN...
especificación dice: “Si bar_code es igual a
dest entonces…”
char1 operator char2 Si bar_code es un tag de cadena y su IF bar_code.DATA[0]=65 THEN...
especificación dice: “Si bar_code.DATA[0] es
Para introducir un carácter ASCII igual a ’A’ entonces…”
directamente en la expresión, introduzca
el valor decimal del carácter.
bool_tag := bool_expressions Si count y length son tags DINT, done es un tag done := (count >= length);
BOOL y su especificación dice ”Si el conteo es
mayor o igual que la longitud, ya terminó el
conteo.”

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.

Caracteres ASCII Códigos


hexadecimales
1ab $31$61$62
m m 1b $31$62
e a A $41
n y
o o AB $41$42 AB < B
r r B $42
a $61 a>B
ab $61$62

• 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.

Si la comparación es El resultado es
Verdadera 1
Falsa 0

14 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 IF photoeye THEN...
dice: “Si photoeye_1 está activado,
entonces…”
NOT BOOLtag Si photoeye es un tag BOOL y su especificación IF NOT photoeye THEN...
dice: “Si photoeye está desactivado,
entonces…”
expression1 & expression2 Si photoeye es un tag BOOL, temp es un tag IF photoeye & (temp<100) THEN...
DIN y su especificación dice: “Si photoeye está
activado y la temp es menor que 100°
entonces…”
expression1 OR expression2 Si photoeye es un tag BOOL, temp es un tag IF photoeye OR (temp<100) THEN...
DIN y su especificación dice: “Si photoeye está
activado o la temp es menor que 100°
entonces…”
expression1 XOR expression2 Si photoeye1 y photoeye2 son tags BOOL y su IF photoeye1 XOR photoeye2 THEN...
especificación dice: “Si:
• photoeye1 está activado mientras que
photoeye2 está desactivado o
• photoeye1 está desactivado mientras
que photoeye2 está activado
entonces…”
BOOLtag := expression1 & expression2 Si photoeye1 y photoeye2 son tags BOOL, open open := photoeye1 & photoeye2;
es un tag BOOL y su especificación dice: “Si
photoeye1 y photoeye2 están activados,
establezca open en verdadero”.

Use operadores bit a bit

Los operadores bit a bit manipulan los bits dentro de un valor basado en dos
valores.

Para obtener Use este operador Tipo óptimo de datos


Función Y &, AND DINT
Función O OR DINT
Función O exclusivo XOR DINT
Complemento de función NOT DINT

Publicación 1756-PM007B-ES-P – Julio 2008 15


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 input1, input2 y result1 son tags DINT y su result1 := input1 AND input2;
especificación dice: “Calcule el resultado de la
función de input1 y input2. Guarde el resultado en
result1.”

Determine el orden de ejecución

Las operaciones que usted escribe en una expresión se realizan en un orden


predeterminado, no necesariamente de izquierda a derecha.
• Las operaciones de igual orden se realizan de izquierda a derecha.
• Si una expresión contiene múltiples operadores o funciones, agrupe las
condiciones en paréntesis “( )”. Esto asegura el orden correcto de
ejecución y facilita la lectura de la expresión.

Orden Operación
1. ()
2. función (…)
3. **
4. - (cambiar signo)
5. NOT
6. *, /, MOD
7. +, – (restar)
8. <, <=, >, >=
9. =, <>
10. &, AND
11. XOR
12. OR

Instrucciones Los enunciados de texto estructurado también pueden ser instrucciones. Una
instrucción de texto estructurado se ejecuta cada vez que se escanea. Una
instrucción de texto estructurado dentro de una construcción se ejecuta cada
vez que las condiciones de la construcción son verdaderas. Si las condiciones
de la construcción son falsas, los enunciados dentro de la construcción no se
escanean. No existe una condición de renglón o transición de estado que active
la ejecución.

Esto es diferente de las instrucción de bloque de funciones que usan EnableIn


para activar la ejecución. Las instrucciones de texto estructurado se ejecutan
como si EnableIn siempre estuviera establecido.

16 Publicación 1756-PM007B-ES-P – Julio 2008


Capítulo 1 Programación de texto estructurado

Esto también es diferente de las instrucciones de lógica de escalera que usan


condición de entrada de renglón para activar la ejecución. Algunas
instrucciones de lógica de escalera de relés sólo se ejecutan cuando la
condición de entrada de renglón cambia de falso a verdadero. Éstas son
instrucciones de lógica de escalera de relés transicionales. En texto
estructurado, las instrucciones se ejecutan cada vez que son escaneadas, a
menos que usted condicione previamente la ejecución de la instrucción de
texto estructurado.

Por ejemplo, la instrucción ABL es una instrucción transicional en lógica de


escalera de relés. En este ejemplo, la instrucción ABL sólo se ejecuta en un
escán cuando tag_xic cambia de borrado a establecido. La instrucción ABL no
se ejecuta cuando tag_xic permanece establecido ni cuando se borra tag_xic.

En texto estructurado, si usted escribe este ejemplo como:

IF tag_xic THEN ABL(0,serial_control);

END_IF;

la instrucción ABL se ejecuta en cada escán en que tag_xic se establece, no


sólo cuando tag_xic cambia de borrado a establecido.

Si desea que la instrucción ABL se ejecute sólo cuando tag_xic cambia de


borrado a establecido, tiene que condicionar la instrucción de texto
estructurado. Use un impulso para activar la ejecución.

osri_1.InputBit := tag_xic;
OSRI(osri_1);

IF (osri_1.OutputBit) THEN
ABL(0,serial_control);
END_IF;

Publicación 1756-PM007B-ES-P – Julio 2008 17


Programación de texto estructurado Capítulo 1

Construcciones Las construcciones pueden programarse individualmente o anidadas dentro de


otras construcciones.

Si usted desea Use esta construcción


Hacer algo si o cuando ocurra una condición específica IF...THEN
Seleccionar qué hacer en base a un valor numérico CASE...OF
Hacer algo un número específico de veces antes de hacer FOR...DO
otra cosa
Continuar haciendo algo siempre y cuando ciertas WHILE...DO
condiciones sean verdaderas
Seguir haciendo algo hasta que una condición sea REPEAT...UNTIL
verdadera

Algunas palabras clave están reservadas para uso futuro

Estas construcciones no están disponibles:

• GOTO
• REPEAT

El software RSLogix 5000 no le permite usarlas.

18 Publicación 1756-PM007B-ES-P – Julio 2008


Capítulo 1 Programación de texto estructurado

IF...THEN Use IF…THEN para hacer algo si o cuando ocurra una condición específica.

Operandos:

Texto estructurado
IF bool_expression THEN
Operando Tipo Formato Introduzca
<enunciado>;
END_IF; bool_ BOOL Tag Expresión o tag BOOL que evalúa
expression Expresión respecto a un valor BOOL (expresión
BOOL)

Descripción: La sintaxis es:

IF bool_expression1 THEN
<enunciado >; Enunciados a ejecutarse cuando
bool_expression1 es verdadera
.
.
.
ELSIF bool_expression2 THEN
Opcional
<enunciado>; Enunciados a ejecutarse cuando
bool_expression2 es verdadera
.
.
.
ELSE
Opcional
<enunciado>; Enunciados a ejecutarse cuando
ambas expresiones son falsas
.
.
.
END_IF;

Para usar ELSIF o ELSE, siga estas pautas.

1. Para seleccionar entre varios posibles grupos de enunciados, añada uno


o más enunciados ELSIF.

• Cada enunciado ELSIF representa una ruta alternativa.


• Especifique todas las rutas ELSIF que necesite.
• El controlador ejecuta el primer enunciado IF o ELSIF verdadero y
se salta el resto de los enunciados ELSIFs y ELSE.

2. Para hacer algo cuando todas las condiciones IF o ELSIF son falsas,
añada un enunciado ELSE.

Publicación 1756-PM007B-ES-P – Julio 2008 19


Programación de texto estructurado Capítulo 1

Esta tabla resume combinaciones de IF, THEN, ELSIF, and ELSE.

Si usted desea Y Entonces use esta


construcción
Hacer algo si o cuando las No hacer nada si las condiciones son IF…THEN
condiciones son verdaderas falsas
Hacer algo distinto si las condiciones IF…THEN…ESLE
son falsas
Seleccionar entre enunciados No hacer nada si las condiciones son IF…THEN…ELSIF
alternativos (o grupos de enunciados) falsas
en base a condiciones de entrada
Asignar enunciados predeterminados si IF…THEN…ELSIF…ELSE
todas las condiciones son falsas

Indicadores de estado
aritméticos: No afectados

Condiciones de fallo: Ninguno

Ejemplo 1: IF…THEN

Si usted desea esto Introduzca este texto estructurado


Si rechaza > 3 entonces IF rejects > 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) IF conveyor_direction THEN
entonces
luz = apagada light := 0;
De lo contrario luz = encendida 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 ELSIF NOT(Sugar.High) THEN
de azúcar = alta (desactivado)
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 pump.fast :=1; pump.slow :=0; pump.off :=0;
Si la temperatura del tanque > 200 ELSIF tank.temp > 100 THEN
entonces bomba = rápida pump.fast :=0; pump.slow :=1; pump.off :=0;
de lo contrario bomba = desactivada 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

CASE...OF Use CASE para seleccionar qué hacer en base a un valor numérico.

Operandos:

Texto estructurado
CASE numeric_expression OF
Operando Tipo Formato Introduzca
selector1: statement;
selectorN: statement; numeric_ SINT Tag Tag o expresión que evalúa a un número
expression INT Expresión (expresión numérica)
ELSE DINT
statement; REAL
END_CASE; selector SINT Inmediato El mismo tipo que numeric_expression
INT
DINT
REAL

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
selector1 : <enunciado>; Enunciados a ejecutarse cuando
. numeric_expression = selector1
.
.
selector2 : <enunciado>; Enunciados a ejecutarse cuando
Especifique todos los numeric_expression = selector2
valores de selector .
alternativos (rutas) que .
necesite .
selector3 : <enunciado>; Enunciados a ejecutarse cuando
. numeric_expression = selector3
.
.
ELSE
<enunciado>; Enunciados a ejecutarse cuando
opcional . 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 value1, value2, valueN : <enunciado>
valores
Use una coma (,) para separar cada valor.
Un rango de valores value1...valueN : <enunciado>

Use dos puntos (..) para identificar el rango.


Valores distintos más un valuea, valueb, value1...valueN : <enunciado>
rango de valores

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: Ingredient_A.Outlet_1 :=1;
Ingrediente B salida 4 = abierto (1) Ingredient_B.Outlet_4 :=1;
Si el número de receta = 2 ó 3 entonces 2,3: Ingredient_A.Outlet_4 :=1;
Ingrediente A salida 4 = abierto (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: Ingredient_A.Outlet_4 :=1;
Ingrediente A salida 4 = abierto (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 Ingredient_A.Outlet_1 :=1;
Ingrediente A salida 1 = abierto (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

FOR…DO Use el lazo FOR…DO para hacer algo un número específico de veces, antes
de hacer otra cosa.

Operandos:

Texto estructurado
FOR count:= initial_value TO final_value BY
increment DO Operando Tipo Formato Descripción
<statement>; count SINT Tag Tag para almacenar la posición de
END_FOR; INT conteo a medida que se ejecuta
DINT FOR…DO
initial_ value SINT Tag Debe evaluar con respecto a un número.
INT Expresión Especifica el valor inicial para el conteo.
DINT Inmediato
final_ value SINT Tag Especifica el valor final para el conteo, el
INT Expresión cual determina cuándo salir del lazo.
DINT Inmediato
increment SINT Tag (opcional) Valor a incrementar el conteo
INT Expresión cada vez a través del lazo
DINT Inmediato
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
opcional { BY increment Si no especifica un incremento, el lazo se
incrementa en un valor de 1.
DO
<enunciado>;
IF bool_expression THEN
opcional EXIT; Si existen condiciones en las que usted
desee salir del lazo anticipadamente, use
END_IF; 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 Sí ¿Efectuado x Sí
número de veces? número de veces?

No no

enunciado 1 enunciado 1
enunciado 2 enunciado 2
enunciado 3 enunciado 3
enunciado 4 enunciado 4
… … Sí
¿Salir ?
Resto de la rutina
No
Resto de la rutina

El lazo FOR…DO se ejecuta un número Para detener el lazo antes de que el conteo llegue al
específico de veces. ú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 6 1
excesivamente largo

Ejemplo 1:

Si usted desea esto Introduzca este texto estructurado


Restablecer los bits 0 – 31 en una matriz de BOOLs: For subscript:=0 to 31 by 1 do
1. Inicializar el tag subscript a 0. array[subscript] := 0;
2. Restablecer la matriz[ subscript ] . Por ejemplo,
cuando subscript = 5, restablecer matriz[5]. End_for;
3. Añadir 1 a subscript.
4. Si subscript es £ con respecto a 31, repita 2 y 3.
De lo contrario, parar.

26 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 SIZE(Inventory,0,Inventory_Items);
esta información acerca de un ítem en su inventario.
• ID de código de barras del ítem (tipo de datos de For position:=0 to Inventory_Items – 1 do
cadena) If Barcode = Inventory[position].ID then
• Cantidad en inventario del ítem (tipo de datos DINT)
Una matriz de la estructura anterior contiene un elemento Quantity := Inventory[position].Qty;
para cada ítem diferente en su inventario. Usted desea buscar Exit;
la matriz para un producto específico (use su código de barras)
y determine la cantidad que hay en inventario. End_if;
1. Obtenga el tamaño (número de ítems) de la matriz End_for;
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:
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

WHILE…DO Use el lazo WHILE…DO para continuar haciendo algo, siempre y cuando
ciertas condiciones sean verdaderas.

Operandos:

Texto estructurado
WHILE bool_expression DO
Operando Tipo Formato Introduzca
<statement>;
END_WHILE; bool_ BOOL Tag Expresión o tag BOOL que evalúa
expression Expresión respecto a un valor BOOL

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:

WHILE bool_expression1 DO
<statement>; Enunciados a ejecutarse mientras
bool_expression1 es verdadera
IF bool_expression2 THEN
EXIT; Si existen condiciones en las que usted
Opcional desee salir del lazo anticipadamente, use
END_IF; 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.
Falsa Falsa
Expresión BOOL Expresión BOOL
Verdadera Verdadera
Enunciado 1 Enunciado 1
Enunciado 2 Enunciado 2
Enunciado 3 Enunciado 3
Enunciado 4 Enunciado 4
… … Sí
¿Salir ?
Resto de la rutina
No
Resto de la rutina

Mientras bool_expression es verdadero, el Para detener el lazo antes de que las condiciones
controlador ejecuta sólo los enunciados dentro sean verdaderas, use un enunciado EXIT.
del lazo WHILE…DO.

28 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 6 1
excesivamente largo

Ejemplo 1:

Si usted desea esto Introduzca este texto estructurado


El lazo WHILE...DO evalúa sus condiciones primero. Si las pos := 0;
condiciones son verdaderas, entonces el controlador ejecuta
While ((pos <= 100) & structarray[pos].value <> targetvalue)) do
los enunciados dentro del lazo.
Esto es diferente del lazo REPEAT...UNTIL porque el lazo pos := pos + 2;
REPEAT...UNTIL ejecuta los enunciados en la construcción y String_tag.DATA[pos] := SINT_array[pos];
luego determina si las condiciones son verdaderas antes de
ejecutar los enunciados nuevamente. Los enunciados en un end_while;
lazo REPEAT...UNTIL siempre se ejecutan por lo menos una
vez. Es posible que nunca se ejecuten los enunciados en un
lazo WHILE...DO.

Ejemplo 2:

Si usted desea esto Introduzca este texto estructurado


Mover caracteres ASCII desde una matriz SINT a un tag de element_number := 0;
cadena. (En una matriz SINT, cada elemento retiene un
SIZE(SINT_array, 0, SINT_array_size);
carácter). Pare cuando llegue al retorno de carro.
1. Inicializar Element_number a 0. While SINT_array[element_number] <> 13 do
2. Cuente el número de elementos en SINT_array (la String_tag.DATA[element_number] :=
matriz que contiene los caracteres ASCII) y almacene SINT_array[element_number];
el resultado en SINT_array_size (tag DINT).
3. Si el carácter en SINT_array[element_number] = 13 element_number := element_number + 1;
(valor decimal del retorno de carro), entonces pare.
String_tag.LEN := element_number;
4. Establezca String_tag[element_number] = el carácter
en SINT_array[element_number]. If element_number = SINT_array_size then
5. Añadir 1 a element_number. Esto permite al
controlador verificar el siguiente carácter en exit;
SINT_array. end_if;
6. Establezca el miembro Length de String_tag =
element_number. (Así registra el número de caracteres end_while;
que hay hasta el momento en String_tag).
7. Si element_number = SINT_array_size, entonces pare.
(Usted está al final de la matriz y ésta no contiene un
retorno de carro).
8. Vaya a 3.

Publicación 1756-PM007B-ES-P – Julio 2008 29


Programación de texto estructurado Capítulo 1

REPEAT…UNTIL Use el lazo REPEAT…UNTIL para continuar haciendo algo hasta que las
condiciones sean verdaderas.

Operandos:

Texto estructurado
REPEAT
Operando Tipo Formato Introduzca
<statement>;
UNTIL bool_expression bool_ BOOL Tag Expresión o tag BOOL que evalúa
expression Expresión respecto a un valor BOOL (expresión
END_REPEAT; BOOL)

IMPORTANTE Asegúrese de no repetir 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:

REPEAT
<statement>; Enunciados a ejecutarse mientras
bool_expression1 es falsa
IF bool_expression2 THEN
EXIT; Si existen condiciones en las que usted
Opcional desee salir del lazo anticipadamente, use
END_IF; otros enunciados, tal como la construcción
IF...THEN, para condicionar un enunciado
EXIT.
UNTIL bool_expression1
END_REPEAT;

30 Publicación 1756-PM007B-ES-P – Julio 2008


Capítulo 1 Programación de texto estructurado

Estos diagramas muestran cómo se ejecuta un lazo REPEAT...UNTIL y cómo


un enunciado EXIT sale del lazo anticipadamente.
Enunciado 1 Enunciado 1
Enunciado 2 Enunciado 2
Enunciado 3 Enunciado 3
Enunciado 4 Enunciado 4
… … Sí
Verdadera
Expresión BOOL ¿Salir ?
No
Falsa
Verdadera
Expresión BOOL
Resto de la rutina
Falsa

Resto de la rutina

Mientras bool_expression sea falso, el controlador Para detener el lazo antes de que las condiciones
ejecuta sólo los enunciados dentro del lazo sean falsas, use un enunciado EXIT.
REPEAT…UNTIL.

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 6 1
excesivamente largo.

Ejemplo 1:

Si usted desea esto Introduzca este texto estructurado


El lazo REPEAT...UNTIL ejecuta los enunciados en la pos := -1;
construcción y luego determina si las condiciones son
REPEAT
verdaderas antes de ejecutar los enunciados nuevamente.
Esto es diferente del lazo WHILE...DO porque el lazo pos := pos + 2;
WHILE...DO primero evalúa su condición. Si las condiciones UNTIL ((pos = 101) OR (structarray[pos].value = targetvalue))
son verdaderas, entonces el controlador ejecuta los
enunciados dentro del lazo. Los enunciados en un lazo end_repeat;
REPEAT...UNTIL siempre se ejecutan por lo menos una vez.
Es posible que nunca se ejecuten los enunciados en un lazo
WHILE...DO.

Publicación 1756-PM007B-ES-P – Julio 2008 31


Programación de texto estructurado Capítulo 1

Ejemplo 2:

Si usted desea esto Introduzca este texto estructurado


Mover caracteres ASCII de una matriz SINT a un tag de element_number := 0;
cadena (en una matriz SINT, cada elemento retiene un
carácter). Pare cuando llegue al retorno de carro. SIZE(SINT_array, 0, SINT_array_size);
1. Inicializar Element_number a 0. Repeat
2. Cuente el número de elementos en SINT_array (la String_tag.DATA[element_number] :=
matriz que contiene los caracteres ASCII) y almacene
el resultado en SINT_array_size (tag DINT). SINT_array[element_number];
3. Establezca String_tag[element_number] = el carácter element_number := element_number + 1;
en SINT_array[element_number].
String_tag.LEN := element_number;
4. Añada 1 a element_number. Esto le permite al
controlador verificar el siguiente carácter en If element_number = SINT_array_size then
SINT_array.
5. Establezca el miembro Length de String_tag = exit;
element_number. (Así registra el número de caracteres end_if;
que hay hasta el momento en String_tag).
6. Si element_number = SINT_array_size, entonces pare Until SINT_array[element_number] = 13
(está al final de la matriz y ésta no contiene un retorno
de carro). end_repeat;
7. Si el carácter en SINT_array[element_number] = 13
(valor decimal del retorno de carro), entonces pare.
De lo contrario, vaya a 3.

32 Publicación 1756-PM007B-ES-P – Julio 2008


Capítulo 1 Programación de texto estructurado

Comentarios Para facilitar la interpretación del texto estructurado, añada comentarios.


• Los comentarios le permiten usar lenguaje común para describir cómo
funciona su texto estructurado.
• Los comentarios no tienen ningún efecto en la ejecución del texto
estructurado.

Los comentarios de texto estructurado se descargan a la memoria del


controlador y están disponibles para descarga. Para añadir comentarios a su
texto estructurado:

Para añadir un comentario Use uno de estos formatos


En una sola línea //comment
Al final de una línea de texto
(*comment*)
estructurado
/*comment*/
Dentro de una línea de texto (*comment*)
estructurado
/*comment*/
Que abarque más de una línea (*start of comment . . . end of comment*)

/*start of comment . . . end of comment*/

Por ejemplo:

Formato Ejemplo
//comentario Al comienzo de una línea
//Check conveyor belt direction
IF conveyor_direction THEN...

Al final de una línea


ELSE //If conveyor isn’t moving, set alarm light
light := 1;
END_IF;
(*comentario*) Sugar.Inlet[:=]1;(*open the inlet*)

IF Sugar.Low (*low level LS*)& Sugar.High (*high level LS*)THEN...

(*Controla la velocidad de la bomba de recirculación. La velocidad depende de la


temperatura del tanque*).
IF tank.temp > 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 Rockwell Automation ofrece información técnica en la Internet para proporcionarle
asistencia al momento de utilizar sus productos.
técnica de En http://support.rockwellautomation.com, puede encontrar manuales técnicos, una
Rockwell Automation 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 1.440.646.3434


Unidos 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 Póngase en contacto con el distribuidor. Debe proporcionar al


Unidos 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.

También podría gustarte