Download Lenguajes de Programación

Document related concepts

Little man computer wikipedia , lookup

Transcript
Lenguajes de Programación
Lenguajes de Programación
Introducción a los Lenguajes de Programación
Los lenguajes de programación utilizados en los controladores programables han
evolucionado a la par que es estos se han desarrollado y expandido. Los lenguajes de
programación permiten que el usuario introduzca programas de control dentro de un
controlador programable, utilizando una sintaxis establecida. Los lenguajes de hoy tienen
instrucciones nuevas y versátiles, que llevan a cabo potentes funciones que les permiten
manejar grandes cantidades de información fácilmente.
Tipos de Lenguajes de Programación
Los lenguajes de programación para controladores más empleados hoy en día son:
• Escalera
• Grafcet
• Booleano
Los lenguajes de escalera y booleano implementan operaciones esencialmente de la misma
manera, pero difieren en la forma como las instrucciones son representadas e ingresadas en
el controlador. El lenguaje Grafcet implementa instrucciones de control de una manera
diferente, basado en pasos y acciones en un programa orientado a gráficos
Lenguaje de Escalera
Los controladores programables fueron desarrollados para ser fácilmente programados
utilizando expresiones y símbolos de los diagramas de relés, para representar la lógica de
programación necesaria para el control de máquinas y procesos. El lenguaje de programación
resultante, que usa los símbolos básicos de la lógica de relés se llama lenguaje de escalera.
Controladores
Programables
Ramón
Medina
Página 2
de 89
Lenguajes de Programación
Circuito en lógica cableada y
su correspondiente
implementación en diagrama
de escalera
La evolución del lenguaje de escalera original ha ido añadiendo instrucciones cada vez más
poderosas. Estas nuevas funciones han sido agregadas a las operaciones básicas de relé,
temporizado y conteo. El término función es utilizado para describir instrucciones, que como
su nombre implica, llevan a cabo funciones de transferencia de datos dentro de los
controladores programables. Estas instrucciones siguen basadas en los principios de la lógica
básica de relés, aunque permiten la implementación de operaciones complejas. Las adiciones
a la lógica básica de relés incluyen bloques de función que usan un conjunto de instrucciones
para operar sobre un bloque de información. El uso de los bloques de función incrementa la
potencia del lenguaje de escalera básico, conformando lo que se conoce como lenguaje de
escalera mejorado.
Formato de bloques de
función mejorados
El formato de representación de las funciones mejoradas dependen del fabricante del
controlador programable; sin embargo, todas las funciones básicas y mejoradas similares,
operan de la misma manera.
Como se indicó anteriormente, los lenguajes de escalera disponibles pueden ser divididos en:
Controladores
Programables
Ramón
Medina
Página 3
de 89
Lenguajes de Programación
• Lenguaje de escalera básico
• Lenguaje de escalera mejorado
Cada uno de los grupos consta de muchas instrucciones que forman el lenguaje. La
clasificación de qué instrucciones caen dentro de cada categoría, difiere de un fabricante a
otro, ya que no existe una clasificación formalmente estandarizada. Sin embargo, a lo largo
de los años se ha establecido un estándar de facto. Algunas veces las instrucciones del
lenguaje básico de escalera son frecuentemente referidas como lenguajes de bajo nivel.
Clasificación de las
instrucciones
La línea que define la agrupación de instrucciones es típicamente establecida entre
categorías funcionales. Estas categorías incluyen:
•
•
•
•
•
•
•
•
•
Relé
Temporizado
Conteo
Control de programa y flujo
Aritmética
Manipulación de datos
Transferencia de datos
Funciones especiales (secuenciadores)
Comunicación a través de la red
Aunque las categorías están claramente definidas, la clasificación es subjetiva. Sin embargo,
no obstante la clasificación, el hecho es que mientras más categorías de instrucciones un
controlador soporta, más poderosas son las estrategias de control que se pueden
implementar con él.
Lo usual es que controladores pequeños tengan sólo instrucciones básicas con tal vez algunas
instrucciones mejoradas. Los controladores más potentes, incorporan conjuntos de
instrucciones avanzadas. Sin embargo, la tendencia es hacia que los controladores pequeños
incorporen instrucciones avanzadas.
Controladores
Programables
Ramón
Medina
Página 4
de 89
Lenguajes de Programación
Grafcet
Grafcet (Graphe Fonctionnel de Commande Étape Transition) es un lenguaje gráfico
simbólico que fue originado en Francia, que representa el programa de control como pasos o
etapas de la máquina o proceso. Grafcet es el fundamento del estándar IEC 1131 para
Diagramas de Funciones Secuenciales (SFC) que permite que varios lenguajes de
programación de controladores puedan ser utilizados en un único programa de control.
Lógica cableada y su
representación
correspondiente en Grafcet
Los diagramas Grafcet proporcionan una representación parecida a la de un diagrama de
flujo, de los eventos que se dan en cada etapa de un programa de control. Estos diagramas
usan tres componentes principales - pasos, transiciones y acciones - para representar
eventos. EL estándar IEC 1131 utiliza también esos mismos componentes; sin embargo, las
instrucciones dentro de las acciones pueden utilizar cualquiera de los lenguajes posible,
incluyendo diagrama de escalera.
Algunos controladores programables pueden ser directamente en lenguaje Grafcet. Lo usual
sin embargo, es que los fabricantes proporcionen herramientas para programación Grafcet
fuera de línea, que es convertido en lenguaje de escalera o lenguaje booleano para ser
descargado en el controlador.
Traducción Grafcet
Controladores
Programables
Ramón
Medina
Página 5
de 89
Lenguajes de Programación
Booleano
Algunos fabricantes de controladores programables utilizan lista de instrucciones (a veces
llamado lenguaje booleano) para programar sus equipos. La lista de instrucciones utiliza
sintaxis del álgebra booleana para ingresar y explicar la lógica de control; usan funciones
lógicas AND, OR y NOT para implementar programas de control.
Lógica cableada y su
correspondiente
representación booleana
El lenguaje booleano es básicamente una manera de ingresar programas de control en un
controlador, en lugar de propiamente un lenguaje orientado a instrucciones. Cuando se
despliega en un dispositivo de programación, el lenguaje booleano es muchas veces
visualizado como diagrama de escalera en lugar de los comandos booleanos que definen la
instrucción.
Formato de Lenguaje de Escalera
El diagrama de escalera es un conjunto de instrucciones simbólicas que son utilizadas para
crear programas de control. Los símbolos pueden ser configurados para obtener la lógica de
control deseada. El lenguaje de escalera es también conocido con el nombre de simbología
de contactos.
Las funciones principales de un programa en diagrama de escalera están orientadas a
controlar salida y ejecutar funciones operacionales, basado en la condición de las entradas.
Los diagramas de escalera utilizan peldaños (rung) para acometer su control.
Controladores
Programables
Ramón
Medina
Página 6
de 89
Lenguajes de Programación
Estructura del peldaño de un
diagrama en escalera
En general, un peldaño consiste de un conjunto de condiciones de entrada (representado por
instrucciones de contactos) y una instrucción de salida al final del peldaño (representado por
un símbolo de bobina). Las instrucciones de contacto para un peldaño puede ser
referenciados como condiciones de entrada, condiciones de peldaño o lógica de control.
Un peldaño es VERDAD cuando su lógica tiene continuidad. La continuidad lógica existe
cuando la potencia fluye a través del peldaño de izquierda a derecha. La ejecución de
eventos lógicos que habilitan la salida, proveen esta continuidad. En un diagrama de
escalera, la línea de la izquierda simula la línea L1 de un diagrama de relé, mientras que la de
la derecha simula la línea L2 de una representación electromecánica. La continuidad ocurre
cuando el paso entre esas dos líneas contiene elementos de contacto en condición cerrada,
permitiendo que la potencia fluya de izquierda a derecha. Esos elementos de contacto se
cierran o abren de acuerdo al estado de las entradas referenciadas.
Ilustración de varios caminos
de continuidad en un
diagrama de escalera
Controladores
Programables
Ramón
Medina
Página 7
de 89
Lenguajes de Programación
La continuidad es normalmente representada por los dispositivos de monitoreo del
controlador, por líneas resaltadas.
Monitoreo de un dispositivo
mostrando (a) continuidad en
el peldaño y (b) continuidad
en una entrada
Cuando un diagrama de escalera contiene un bloque funcional, las instrucciones de contacto
se usan para representar las condiciones de entrada que habilitan la lógica del bloque. Un
bloque funcional puede tener una o varias entradas de habilitación que controlan su
operación. Adicionalmente, puede tener una o varias salidas, que representan el estado de la
función que se ejecuta.
Bloques funcionales con (a)
una línea de habilitación y
una salida y (b) una línea de
habilitación, un comando de
inicio de conteo y dos salidas
Dependiendo de la instrucción, se habilitan otras líneas que manejan el bloque utilizando
funciones de reinicialización o control.
Para hacer que un bloque esté activo en todo momento sin ninguna lógica que lo controle, el
usuario puede omitir toda lógica de contacto y colocar una línea de continuidad.
Controladores
Programables
Ramón
Medina
Página 8
de 89
Lenguajes de Programación
Bloque de función que está
siempre habilitado
La matriz de peldaños de escalera determina el número máximo de elementos de contacto
que pueden ser utilizados para programar un peldaño. El tamaño de la matriz es diferente
según el fabricante y del dispositivo de programación empleado. Para operaciones de
bloques funcionales, la matriz de escalera puede tener menos elementos de contacto
disponibles, porque la representación del bloque de función toma espacio en la matriz. En
controladores con formatos de escalera mejorados, la matriz puede usar uno o más espacios
de símbolos de contacto para representar la instrucción en el dispositivo de programación.
Matriz de condiciones de
entrada en un diagrama de
escalera en formato de
bloque
Matriz de condiciones de
entrada en un diagrama de
escalera en formato de
instrucciones de escalera
mejoradas
La matriz de escalera representa todas las posibles posiciones donde se pueden colocar
símbolos de contacto. Los dispositivos de programación normalmente despliegan todas esas
posibles posiciones en la pantalla, permitiendo que los usuarios coloquen los contactos
donde deseen. Sin embargo, según el fabricante, algunas reglas para la colocación de
contactos pueden aplicar. La mayoría de los controladores no permiten contactos que
provoquen un flujo de potencia de derecha a izquierda. Por lo tanto, estrategias de control
Controladores
Programables
Ramón
Medina
Página 9
de 89
Lenguajes de Programación
que hagan uso de este recurso, deben ser reescritas de tal manera que sólo incluyan lógicas
donde el flujo sea de izquierda a derecha.
Flujo inverso en el contacto D
Ejemplo 1
Se pide resolver la lógica de escalera representada en la siguiente figura, de tal manera que
no exista la condición de flujo reverso. Dicha condición no es parte de la lógica requerida
para que la salida sea energizada.
Solución
La lógica del flujo directo determina a salida Y. La implementación utilizando conceptos
lógicos es como se muestra:
Controladores
Programables
Ramón
Medina
Página 10
de 89
Lenguajes de Programación
Dicha ecuación puede ser simplificada utilizando álgebra de Boole para obtener la siguiente
ecuación:
Esta es equivalente al circuito lógico:
Y equivalente al siguiente diagrama de escalera:
Ejemplo 2
Se pide resolver el siguiente caso de tal manera que no exista flujo reverso, considerando
que dicho flujo es necesario para la lógica de control.
Controladores
Programables
Ramón
Medina
Página 11
de 89
Lenguajes de Programación
Solución
La lógica requerida para la salida Y queda reflejada en la siguiente ecuación lógica:
El término F•D•B•C implementa la secuencia correspondiente al flujo inverso que requiere la
salida Y. El diagrama de escalera correspondiente se muestra a continuación:
Instrucciones de Relés
Las instrucciones de relé son las instrucciones más básicas del lenguaje de escalera. Estas
instrucciones representan estados ENCENDIDO/APAGADO de las entras y salidas conectadas.
Las instrucciones de relés usan dos tipos de símbolos: contactos y bobinas. Los contactos
representan las condiciones de entrada que deben ser evaluadas en un peldaño específico,
para determinar el control de la salida. Las bobinas representan las salidas de los peldaños.
Controladores
Programables
Ramón
Medina
Página 12
de 89
Lenguajes de Programación
Instrucciones de relé
En un programa, cada contacto y bobina está referenciado con una dirección, la cual
identifica que está siendo evaluado o controlado. La dirección referencia la tabla de entradas
y salidas de la entrada o salida conectada, o del bit de almacenamiento interno.
El formato de los contactos depende de la lógica de control deseada. Los contactos pueden
ser colocados en serie, paralelo o serie-paralelo, según lo requiera la estrategia de control de
una salida en particular. Cuando la continuidad lógica existe, la condición del peldaño es
VERDADERA; esto significa, que el peldaño controlará la salida especificada. Si la condición
del peldaño es FALSA, no existe continuidad.
Las instrucciones de relés proporcionan la misma funcionalidad que la lógica de relé
cableada, pero con mayor flexibilidad. Estas instrucciones proporcionan la capacidad de
examinar el estado ENCENDIDO/APAGADO de bits específicos en memoria y controlar el
estado de salidas internas y externas.
Examinar ENCENDIDO / Normalmente Abierto
Una instrucción Examinar ENCENDIDO (examine-ON) referidas como contacto normalmente
abierto (NO), verifica la condición de ENCENDIDO de una dirección referenciada. Esta
dirección puede referenciar un bit de la tabla de entrada, correspondiendo a un dispositivo
de entrada, un bit de salida en la tabla de estados internos, o un bit en la tabla de salida,
correspondiendo a un dispositivo de salida.
Durante la ejecución de una instrucción Examinar ENCENDIDO en el programa de control, el
procesador determina si la dirección referenciada está en condición ENCENDIDO. Si la
Controladores
Programables
Ramón
Medina
Página 13
de 89
Lenguajes de Programación
dirección contiene un cero lógico (APAGADO), el procesador no cambia el estado del
contacto normalmente abierto y por ende, no proporciona continuidad al peldaño. Si la
dirección referenciada contiene un uno lógico (ENCENDIDO), el procesador cierra la
condición normalmente abierto, proporcionando flujo de potencia a través del peldaño.
Instrucción examinar
ENCENDIDO con lógica 0 y
con lógica 1
Examinar APAGADO / Normalmente Cerrado
Una instrucción Examinar APAGADO (Examine OFF), llamada contacto normalmente cerrado
(NC), verifica una condición de APAGADO en la dirección referida. Al igual que en el caso de
la instrucción Examinar ENCENDIDO, la dirección referenciada puede estar en la tabla de
entradas, salidas o estados internos.
Durante la ejecución de una instrucción Examinar APAGADO, el procesador verifica que la
dirección referenciada este APAGADA. Si la dirección contiene un cero lógico (APAGADO), la
instrucción continuará permitiendo el flujo de potencia (continuidad) a través de sus
contactos normalmente cerrados. Si la dirección contiene un uno lógico (ENCENDIDO), la
instrucción abrirá los contactos normalmente cerrados, rompiendo la continuidad en el
peldaño. Una instrucción Examinar APAGADO puede ser asociada con una función lógica
NOT.
Controladores
Programables
Ramón
Medina
Página 14
de 89
Lenguajes de Programación
Instrucción examinar
APAGADO con lógica 0 y con
lógica 1
Bobina de Salida
Una instrucción de bobina de salida controla bien sea una salida real (conectada al
controlador a través de una interface de salida) o un estado interno (relé de control). Esta
instrucción utiliza una dirección de salida en su área de almacenamiento interna.
Durante la ejecución de una instrucción de bobina de salida, el procesador evalúa todas las
condiciones de entrada en el peldaño. Si no existe continuidad, el procesador coloca un cero
en el bit de la dirección de la bobina de salida, indicando una condición APAGADA. Si por el
contrario el procesador detecta continuidad, el procesador coloca un uno lógico en la
dirección referenciada por la instrucción de bobina de salida. Este estado lógico uno indica
una condición ENCENDIDA para la instrucción de bobina de salida. Por lo tanto, si la
instrucción de bobina está referenciando un bit en la tabla de salidas, el procesador
encenderá la salida correspondiente. Esto a su vez encenderá el dispositivo de campo
conectado al terminar referenciado por la dirección de la bobina de salida. El procesador
encenderá el dispositivo sólo después de haber resuelto completamente el programa y
actualizado las salidas al final del ciclo de ejecución.
Controladores
Programables
Ramón
Medina
Página 15
de 89
Lenguajes de Programación
Instrucción de bobina de
salida con lógica 0 y con
lógica 1
Cuando una bobina de salida se usa como estado interno, la dirección hace referencia a un
bit en la tabla de estados internos. En este caso, cuando la bobina de salida es ENCENDIDA, el
bit correspondiente se coloca en estado uno. Estas salidas internas son utilizadas cuando el
programa requiere de secuencias de bloqueo cruzado o cuando una salida real no es
necesaria. Los contactos normalmente abiertos y cerrados de una bobina de salida se abrirán
o cerrarán de acuerdo con el estado de la bobina.
Contactos normalmente
abiertos y cerrados
manejando bobinas internas
y reales
Bobina de Salida Negada
Una instrucción de bobina de salida negada es esencialmente lo opuesto a una instrucción de
bobina de salida. Si no existe continuidad en el peldaño, la instrucción ENCIENDE el bit de
salida correspondiente. Si existe continuidad, la salida es APAGADA. Cuando una bobina de
salida negada está encendida, sus contactos de referencia cambian de estado. Si la bobina de
Controladores
Programables
Ramón
Medina
Página 16
de 89
Lenguajes de Programación
salida negada está APAGADA, sus contactos auxiliares permanecen en sus estados por
defecto.
Diagrama de escalera donde
se ilustra un bobina negada
Una instrucción de bobina negada puede ser complicada de implementar. Por esta razón, es
frecuentemente más fácil obtener dicha funcionalidad aplicando reglas Booleanas a la
expresión lógica que maneja el peldaño.
Ejemplo 3
Implementar una lógica de escalera equivalente a la que se muestra, utilizando una salida de
bobina negada.
Solución
La expresión lógica asociada a Y se describe con la siguiente ecuación:
Utilizando las Leyes de Morgan, la función Y negada puede ser expresada como:
Y el diagrama de escalera correspondiente se muestra a continuación:
Controladores
Programables
Ramón
Medina
Página 17
de 89
Lenguajes de Programación
En esta lógica, la salida Y se ACTIVARÁ si y A y B están ENCENDIDOS o si C y B están
ENCENDIDOS. Este último circuito es lógicamente idéntico al primero.
Ejemplo 4
Implementar una lógica Y negada sin utilizar bobina de salida negada
Solución
La forma más sencilla es utilizar el diagrama anterior, agregando un peldaño adicional como
se indica en la figura
Bobina de Salida con Memoria
La instrucción de enganche de bobina de salida (latch coil) ocasiona que una salida
permanezca energizada aún cuando cambie el estado de los contactos que causaron su
Controladores
Programables
Ramón
Medina
Página 18
de 89
Lenguajes de Programación
energización. Si cualquier peldaño tiene continuidad lógica, la instrucción ENCIENDE el bit de
salida y lo mantiene así, aún cuando la continuidad lógica se pierda. La salida permanecerá
ENCENDIDA hasta que sea 'borrada' con la instrucción correspondiente. La instrucción de
borrado es la única manera automática (programada) de APAGAR la salida.
La instrucción de desenganche de una bobina de salida APAGA una bobina de salida
enganchada. Cuando el peldaño tiene continuidad lógica, la instrucción APAGA la salida
referida.
Instrucciones de enganche y
desenganche en formato de
relé
Las instrucciones de enganche y desenganche pueden ser representadas por un bloque de
función.
Bloques funcionales de
enganche y desenganche
Salida de Pulso
Una instrucción de salida de pulso opera de manera parecida a como lo hace la bobina de
salida. Si el peldaño tiene continuidad lógica, la salida de pulso es ENCENDIDA. Sin embargo,
la duración del estado ENCENDIDO es de un ciclo de ejecución o menos, dependiendo de
dónde esté localizado en el programa de control. Las salidas de pulso son normalmente
utilizadas para reinicializar condiciones en un ciclo de ejecución.
Controladores
Programables
Ramón
Medina
Página 19
de 89
Lenguajes de Programación
Instrucción de salida de pulso
y su diagrama de tiempo
Dependiendo del tipo de controlador que se use, la salida de pulso puede ser disparada por
un flanco de bajada o de un flanco de subida.
Contacto de Transición
La instrucción de contacto de transición proporciona un pulso cuando la señal que la dispara
hace una transición de ENCENDIDO a APAGADO o de APAGADO a ENCENDIDO. En una
instrucción de flanco de subida, los contactos cerrarán por exactamente un ciclo de ejecución
cada vez que la señal de disparo pasa de APAGADO a ENCENDIDO. El contacto permitir la
continuidad lógica durante el ciclo de ejecución luego de lo cual, se abrirá nuevamente,
aunque la señal de disparo continúe en su estado de aserción. La señal de disparo debe hacer
nuevamente la transición de APAGADO a ENCENDIDO para que el contacto se pueda cerrar
nuevamente. De manera similar, en una instrucción de flanco de bajada, la señal de disparo
debe ir de ENCENDIDO a APAGADO para cerrar el contacto por un ciclo de ejecución. La señal
de disparo puede ser una entrada o salida externa así como una salida interna.
Contactos transicionales por
flancos de subida y bajada, y
sus diagramas de tiempo
Los controladores programables que no proveen instrucciones de salida de pulso,
generalmente cuentan con instrucciones de contacto de transición. Al igual que en las salidas
de pulso, el contacto de transición es usado para reinicializar condiciones en un ciclo de
ejecución, como por ejemplo, una bobina de salida con memoria (desenganchar).
Controladores
Programables
Ramón
Medina
Página 20
de 89
Lenguajes de Programación
Programación de Instrucciones Relés
Evaluación de la Ejecución de la Escalera
La evaluación del barrido (ciclo de ejecución) es un concepto importante, ya que define el
orden en que el procesador ejecutará el diagrama de escalera. El procesador inicia la
ejecución del diagrama de escalera luego de que ha leído el estado de las entradas y
actualizado la tabla de entradas. Comienza desde el tope del programa (primer peldaño) y
continua ejecutándolos secuencialmente uno a la vez. A medida que resuelve cada peldaño,
examina las direcciones referenciadas por cada instrucción programada, para evaluar la
continuidad lógica.
Si la salida de un peldaño afecta peldaños subsiguientes, el procesador considerará cualquier
cambio en el mismo barrido. Sin embargo, si la salida de un peldaño afecta peldaños
anteriores, el procesador no regresará para resolverlos. Esto se puede comprender con
mayor claridad al observar las siguientes figuras. El contacto normalmente abierto 10, que
asumiremos corresponde a un pulsador, activa el primer peldaño. Si el contacto 10 se
ENCIENDE, el a su vez encenderá la salida 100. En los peldaños siguientes, el contacto 100
enciende la salida 101, el contacto 101 enciende la salida 102 y el contacto 102 enciende la
salida 103. Aunque estén conectados en diferentes peldaños, todas las salidas se encenderán
en el mismo ciclo de ejecución, porque el procesador actualiza los dispositivos físicos cuando
este finaliza. En este caso, si las salidas 100, 101, 102 y 103 estuvieran conectadas a lámparas
piloto, todas ellas se encenderían al mismo tiempo.
Diagrama de escalera donde
todas las salidas se
encienden en el mismo ciclo
de ejecución
La siguiente figura ilustra la misma lógica de escalera, pero con los peldaños ubicados en
orden inverso. Asumiendo que la entrada 10 es presionada en el primer barrido, el
procesador debe hacer cuatro ciclos de ejecución antes de energizar la salida 103. La lógica
que el procesador usa en el primer barrido es la que se describe a continuación. Cuando la
entrada 10 es activada, el procesador examina la referencia 102 y encuentra que está
APAGADA; por lo tanto, la salida 103 permanece APAGADA. En el segundo peldaño el
contacto 101 está APAGADO; por lo tanto, la salida 102 permanece APAGADA. En el tercer
Controladores
Programables
Ramón
Medina
Página 21
de 89
Lenguajes de Programación
peldaño, el contacto 100 está apagado, de tal manera que la salida 101 permanece
APAGADA. En el cuarto peldaño, el contacto 10 está ENCENDIDO, porque el pulsador fue
presionado, de tal manera que la salida 100 se enciende. El siguiente ciclo de ejecución
(segundo), si el pulsador permanece ENCENDIDO, la salida 101 se encenderá porque al final
del primer barrido, la dirección de referencia 100 fue puesta a uno lógico. Esta lógica
continuará hasta el cuarto barrido, cuando las cuatro salidas estarán ENCENDIDAS. Las
salidas se apagarán de la misma manera, cuando el pulsador sea liberado.
Diagrama de escalera donde
las salidas se encienden en
diferentes ciclos de ejecución
La operación física de un circuito como el de la última figura es caso imposible de observar
mientras el controlador ejecuta el programa, porque este completa su ciclo de ejecución en
milisegundos. Las lámparas piloto parecerá que se encienden al mismo tiempo, aún cuando
realmente lo hagan en diferentes ciclos de ejecución. La única forma de observar las salidas
del diagrama de escalera es utilizando la operación de ejecución de un sólo ciclo. Con esta
operación, el procesador lee las entradas, ejecuta la lógica, actualiza las salidas y se detiene
hasta que otra operación un sólo ciclo sea ejecutada. La operación de un sólo ciclo de
ejecución es usada generalmente durante el período de prueba del programa de control.
Lo importante en este caso es que si se desea que la salida de un peldaño tenga efecto en
otro en el mismo ciclo de ejecución, este debe ser programado primero. Si no se hace así,
podrían suscitarse problemas de orden de ejecución, especialmente cuando se emplean
contactos de transición y salidas de pulso para desenganchar salidas. La siguiente figura
ilustra este tipo de problema, donde la instrucción de desenganche de la salida nunca
ocurrirá. Una vez que se cierra el contacto 10, el enganche de la salida 100 sólo podrá ser
desecho por la activación del contacto 11. Cuando se cierra el contacto 12, dispara un pulso
de salida 11 (o el contacto transicional 12) durante un ciclo de ejecución. Sin embargo, al
final del ciclo, la salida de pulso se apaga, de tal manera que no alcanza a desenganchar la
salida 100 en el siguiente barrido.
Controladores
Programables
Ramón
Medina
Página 22
de 89
Lenguajes de Programación
Ni la salida de pulso ni el
contacto transicional serán
capaces de desenganchar la
bobina 100
Programando Entradas Normalmente Cerradas
Para explicar cómo programar entradas normalmente cerradas, veamos el siguiente ejemplo.
Supongamos que queremos implementar una lógica idéntica a la del circuito presentado.
Lógica cableada
Implementar la misma lógica significa que la lámpara piloto PL1 en el controlador debe
comportarse de la misma manera que el circuito cableado. Si PB1 no es presionado, PL1
estará ENCENDIDA; al presionar PB1, PL1 se apaga. Las figuras muestran dos métodos
posibles para programar PB1 e implementar la lógica. A primera vista podría pensarse que la
primera figura contiene la solución; sin embargo, esto no es verdad. La solución correcta es la
que se muestra en la segunda figura.
Implementación lógica con
PB1 programado como
contacto normalmente
cerrado
Controladores
Programables
Ramón
Medina
Página 23
de 89
Lenguajes de Programación
Implementación lógica con
PB1 programado como
contacto normalmente
abierto
En la primera figura, la dirección de referencia de PB1 (entrada 10) es programada como un
contacto normalmente cerrado (examinar APAGADO) que maneja la bobina de salida 100,
que está conectada a la lámpara piloto PL1. Cuando el controlador inicia, lee el estado del
dispositivo conectado a la entrada 10 y almacena la información en la tabla de entradas. Si
PB1 no es presionado, el procesador lee la entrada 10 como un uno lógico. Durante la
ejecución de la lógica de escalera, el controlador evaluará la instrucción examinar APAGADO,
y como la referencia (entrada 10) está ENCENDIDA, abrirá el contacto normalmente cerrado,
interrumpiendo la continuidad. Por lo tanto, la salida 100 estará desactivada y PL1 no se
encenderá. . Si por el contrario PB1 es presionado, la localidad 10 estará en un cero lógico. La
instrucción examinar APAGADO del procesador estará en su condición acertada
proporcionando continuidad lógica al peldaño y encendiendo la salida 100 y la lámpara piloto
PL1.
Continuidad lógica con (a)
PB1 sin presionar y (b) PB1
presionado
En el segundo de los casos planteados originalmente, la condición de entrada normalmente
cerrada fue programada como una instrucción examinar ENCENDIDO. Durante la operación,
si PB1 no es presionado, la entrada 10 permanece en estado ENCENDIDO. Cuando el
procesador evalúa el peldaño, su búsqueda de una condición ENCENDIDA en la referencia 10
será VERDAD. Por lo tanto, el contacto 10 se cerrará proporcionando continuidad lógica
encendiendo la salida 100 y la lámpara piloto. Por otra parte, cuando PB1 es presionada, la
entrada tendrá un estado APAGADO y el procesador almacenará un cero lógico en la tabla de
entrada. Durante la evaluación del peldaño, el procesador encontrará que la condición
ENCENDIDA en la referencia 10 es FALSA (la entrada 10 está apagada) por lo que no habrá
continuidad lógica porque los contactos permanecerán abiertos. Por lo tanto, la salida 100 y
la lámpara piloto estarán apagadas.
Controladores
Programables
Ramón
Medina
Página 24
de 89
Lenguajes de Programación
Continuidad lógica con (a)
PB1 sin presionar y (b) PB1
presionado
La solución de programación para una entrada normalmente cerrada (como se muestra en el
segundo caso), ejemplifica lo siguiente: para que un dispositivo cableado normalmente
cerrado se comporte como normalmente cerrado al ser conectado a un controlador, este
debe ser programa como una instrucción examinar ENCENDIDO (instrucción de contacto
normalmente abierto). Las entradas discretas de un controlador pueden ser configuradas
para que se comporten como normalmente abierta o cerrada sin importar su condición
original. Esta habilidad de poder examinar el estado cerrado o abierto de cada dispositivo, es
la clave de la flexibilidad de los controladores. No importa cómo esté cableado el dispositivo
(normalmente abierto o cerrado), el controlador puede ser programado para que lleve a
cabo la operación deseada sin modificar el cableado. Recuerde que el estado de
programación de las entradas depende no sólo de cómo está cableado, si también de la
acción de control deseada.
Ejemplo 6
Muestre la implementación en un controlador de la lógica cableada que se presenta en la
siguiente figura, considerando que un contacto normalmente abierto está conectado a la
entrada del módulo. Describa la operación de cada implementación. Use la dirección de
entrada 10 para el pulsador y las direcciones 30 y 31 para las lámparas piloto PL1 y PL2
respectivamente.
Controladores
Programables
Ramón
Medina
Página 25
de 89
Lenguajes de Programación
Solución
Al examinar el circuito se tiene que si PB1 no es presionado, la lámpara PL1 debe estar
apagada. PL2 debe estar encendida por que el otro contacto de PB1 (el normalmente
cerrado) proporciona potencia a PL2. Es posible cablear cualquiera de las dos conexiones (A o
B) de PB1 al módulo de entrada para satisfacer la lógica requerida. Recuerde que es posible
hacer que cualquier contacto funcione como lo requiere el programa de control.
La siguiente figura muestra la solución para la conexión del contacto normalmente abierto.
Una instrucción examinar ENCENDIDO maneja a PL1 y una examinar APAGADO a PL2. Cuando
el contacto A de PB1 no está presionado, PL1 está apagado y PL2 encendido. El primer
peldaño implementa un pulsador cableado como un contacto normalmente abierto para que
actúe como tal, mientras que el segundo implementa un pulsador cableado como
normalmente abierto, para que se comporte como uno normalmente cerrado.
Ejemplo 7
Muestre la implementación en un controlador de la lógica cableada que se presenta en la
siguiente figura, considerando que un contacto normalmente cerrado está conectado a la
entrada del módulo. Describa la operación de cada implementación. Use la dirección de
entrada 10 para el pulsador y las direcciones 30 y 31 para las lámparas piloto PL1 y PL2
respectivamente.
Controladores
Programables
Ramón
Medina
Página 26
de 89
Lenguajes de Programación
Solución
La siguiente figura muestra la solución cuando se conecta el contacto normalmente cerrado.
En este caso, una instrucción examinar APAGADO es la que maneja a PL1. Durante la
operación, el contacto B de PB1 proporciona potencia al módulo si el pulsador no es
presionado y por lo tanto, su dirección de referencia (10) es en estado uno lógico. El contacto
normalmente cerrado de la dirección 10 permanece abierto mientras que PB1 no sea
presionando manteniendo a PL1 apagado. En el segundo peldaño, la instrucción examinar
ENCENDIDO maneja la salida para PL2 (31), que permanece cerrada mientras PB1 no sea
presionado. El primer peldaño implementa un pulsador cableado como normalmente
cerrado, para que se comporte como uno normalmente abierto, mientras que el segundo
implementa un pulsador cableado como normalmente cerrado, para que se comporte como
tal.
Como se ilustra en el ejemplo anterior, una entrada normalmente abierta puede ser
programada para que se comporte con una normalmente cerrada y viceversa. Sin embargo,
por razones de seguridad, los dispositivos normalmente cerrados deben ser cableados al
módulo de entrada como tal, utilizando instrucciones examinar ENCENDIDO, de tal manera
que se comporten de la manera en que han sido diseñados. Un dispositivo cableado como
normalmente abierto no debe ser programado para que se comporte como uno
normalmente cerrado, especialmente si está siendo usado para interrumpir la continuidad
cuando un dispositivo está presionado o cerrado.
La siguiente figura muestra un ejemplo de un botón de parada normalmente cerrado,
utilizado para interrumpir la alimentación de un motor. Durante la operación, cuando el
pulsador de arranque ha sido presionado y enganchado por los contactos internos del motor
(100), el motor enciende. El pulsador (normalmente cerrado) de parada interrumpe la
continuidad lógica de la bobina de salida del motor. Pulsando este pulsador de parada, es la
única manera en la que el motor puede ser detenido. Sin embargo, si el cableado del
pulsador se corta por accidente, el circuito del motor se desacopla.
Controladores
Programables
Ramón
Medina
Página 27
de 89
Lenguajes de Programación
El pulsador de parada
(normalmente cerrado) es
programado como
normalmente abierto. El
contacto 100 es usado como
enganche con el botón de
arranque luego de ser
presionado
Luego de que el pulsador de
arranque es presionado y
liberado, el motor
permanece encendido
Si el pulsador de parada es
presionado cuando el motor
está encendido, éste se
apagará
Si el cableado del pulsador de
parada se rompe
accidentalmente cuando el
motor está encendido, éste
se apaga
Es posible conseguir la misma lógica de control colocando un pulsador de parada
normalmente abierto en lugar de uno normalmente cerrado, implementándolo como un
circuito normalmente cerrado en el programa del controlador. Cuando el botón de arranque
es presionado, el motor se enciende; si el botón de parada es presionado, el motor se apaga.
Sin embargo, no habrá manera de detener el motor si el cableado del pulsador normalmente
abierto se rompe. La instrucción examinar APAGADO correspondiente al pulsador de parada
no interrumpirá nunca la continuidad lógica. La única manera de detener el motor será
apagando el controlador. Este tipo de configuración del controlador es peligrosa y debe ser
evitada.
Controladores
Programables
Ramón
Medina
Página 28
de 89
Lenguajes de Programación
El pulsador de parada
(normalmente abierto) es
programado como
normalmente cerrado. Al
presionar el botón de
arranque, se enciende el
motor
Luego de que el pulsador de
arranque es presionado y
liberado, el motor
permanece encendido
Si el pulsador de parada es
presionado cuando el motor
está encendido, éste se
apagará
Si el cable del botón de
parada se rompe mientras
está encendido el motor, no
habrá forma de detenerlo
Temporizadores y Contadores
Los temporizadores y contadores son instrucciones internas que proveen las mismas
funciones que sus contrapartes de hardware. Ellos activan o desactivan un dispositivo luego
de que transcurre un determinado lapso de tiempo o de que se ha alcanzado un conteo
específico. Los temporizadores y contadores son típicamente considerados como salidas
internas. Al igual que las instrucciones de relé, los temporizadores y contadores son
fundamentales para la programación en diagrama de escalera.
Las instrucciones de temporizador pueden tener un o más bases de tiempo que son usadas
para cronometrar un evento. La base de tiempo es la resolución o precisión del
temporizador. Si se desea que un temporizador cronometre un evento de 10 segundos, el
usuario debe configurarlo especificando el número de veces que la base de tiempo se debe
repetir para llegar a los 10 segundos. Por lo tanto, si la base de tiempo es de un segundo,
entonces el temporizador debe contar diez veces antes de activar su salida. A este número
de cuentas se le llama comúnmente tick. Las bases de tiempo más comunes son 0,01
segundos, 0,1 segundos y 1 segundo.
Controladores
Programables
Ramón
Medina
Página 29
de 89
Lenguajes de Programación
Bases de tiempo
Los temporizadores son usados para añadir un determinado lapso de tiempo a una salida del
programa. Las aplicaciones de los temporizadores en un controlador son innumerables, ya
que han reemplazado casi completamente a sus contrapartes de hardware. Como ejemplo,
un temporizador puede ser utilizado para introducir un retardo de 0,01 segundos en un
programa de control. El programa requiere el retardo, porque de otra forma el controlador
encenderá sus salidas demasiado rápido en comparación con el sistema cableado de relés
que está reemplazando. Este pequeño retardo disminuye la velocidad de repuesta de otros
componentes, de tal manera que la operación del sistema sea la correcta.
Las instrucciones de conteo, son utilizadas para contar eventos tales como partes que
transitan por una banda transportadora y el número de veces que una válvula solenoide se
enciende, entre otros. Los contadores, junto con los temporizadores, deben tener dos
valores, el valor final y el valor acumulado. Estos valores son almacenados en la tabla de
datos. El valor final es el número de ticks o cuentas que debe ser alcanzado antes de que el
temporizador o contador encienda su salida. El valor acumulado es el número actual de ticks
o cuentas que han transcurrido desde que el temporizador o contador inició su operación.
Ambos registros son definidos al momento de programar la instrucción.
Ejemplo 8
Durante la ejecución de un proyecto de modernización, se encontró que una parte del
circuito de escalera al ser configurado en el controlador, no funcionaba correctamente. Este
malfuncionamiento se debía al hecho de que en el circuito cableado, el relé CR5, que era
energizado a través del dispositivo LS4, tenía un tiempo de retardo suficientemente grande
como para sincronizarse con el resto del circuito permitiendo que la actuación del solenoide
fuera la correcta. Ahora que ha sido implementado en el controlador, el relé CR5 no tiene el
retardo. El retardo requerido se estima en 3 ciclos AC (60 Hz) y las bases de tiempo
disponibles en el controlador son 0,01, 0,1 y 1 segundo. ¿Cuál base de tiempo debe ser usada
para crear el retardo y cuántos ticks debe demorar?
Solución
El retardo estimado de 3 ciclos AC se calcula de la siguiente manera:
Controladores
Programables
Ramón
Medina
Página 30
de 89
Lenguajes de Programación
1
= 16,66 milisegundos
60
3
= 50,00 milisegundos
3 ciclos =
60
1 ciclo =
El retardo requerido es de 50 milisegundos. Por lo tanto, la única base de tiempo
suficientemente pequeña es la de 0,01 segundos. Usando esta base de tiempo, el
temporizador debe contar 5 ticks para recrear el retardo.
Instrucciones de Temporizado
Los controladores proveen varios tipos de instrucciones de temporizado. Sin embargo, los
distintos fabricantes dan diferentes definiciones para las funciones de temporizado que
ofrecen.
Instrucciones de temporizado
La función de las distintas instrucciones de temporizado es esencialmente la misma,
difiriendo únicamente en el tipo de salida que proporciona. La siguiente figura muestra los
dos formatos que se emplean para los temporizadores.
Instrucción de temporizado
en formato de bloque y de
diagrama de escalera
Controladores
Programables
Ramón
Medina
Página 31
de 89
Lenguajes de Programación
Un temporizador con formato de bloque, tiene una o más entradas dependiendo del
controlador. Estas entradas son la línea de control y la línea de habilitación/inicialización. Si la
línea de control es VERDAD y la línea de habilitación es también VERDAD, el bloque de
función iniciará el temporizado. Un temporizador con formato de escalera generalmente
tiene sólo una entrada, la cual corresponde a la línea de control. Si la línea de control está
ENCENDIDA, el temporizador iniciará su conteo.
Un aspecto común de ambos formatos es el uso de un registro que contiene el valor final y
otro que contiene el valor acumulado. Algunos controladores permiten que el usuario
ingrese un valor constante directamente en el temporizador, para establecer el valor final.
Este valor particular debe ser ingresado en el registro predefinido para el temporizador
especificado.
La base de tiempo del temporizador es configurable de acuerdo con el controlador utilizado.
Cuando el conteo acumulado de ticks iguala el valor final, el temporizador ejecuta su función
y establece su condición de salida, que depende del tipo de temporizador utilizado.
Es importante destacar que cuando un temporizador programado reemplaza un
temporizador cableado, ellos sustituyen los contactos demorados asociados a los
temporizadores, pero no los contactos instantáneos que puedan estar disponibles en un
temporizador cableado.
Circuito cableado con
contactos instantáneos y
retardados
Controladores
Programables
Ramón
Medina
Página 32
de 89
Lenguajes de Programación
La figura anterior ilustra un ejemplo que muestra contactos de temporizadores ‘demorados’
e instantáneos. El temporizador TMR1 en l línea 1 tiene un contacto instantáneo en la línea 2
(TMR1-1), el cual es usado para enganchar PB1, y un contacto demorado (TMR1-2) en la línea
5. Para traducir este tipo de lógica a un programa de control, el usuario debe 'atrapar' el
temporizador, de tal manera que se consiga el enganche instantáneo
Energizado en ENCENDIDO
El temporizador con retardo para encender (TON) proporciona una acción retardada o mide
la duración de un evento. Una vez que el peldaño tiene continuidad, el temporizador
continúa contando los intervalos de tiempo (ticks) y lo hace hasta que el tiempo acumulado
iguala al tiempo prefijado. Cuando los dos valores son iguales, el temporizador energiza su
salida y cierra los contactos demorados asociados con la salida. El contacto demorado puede
ser usado en el programa tanto normalmente abierto como normalmente cerrado. Si la
continuidad lógica se pierde antes de que el temporizador finalice su conteo, este reinicializa
su registro acumulador a cero.
Temporizador con retardo en
encendido
Desenergizado en ENCENDIDO
La instrucción de desenergizado en encendido (TON) opera de manera similar a como lo hace
la de energizado en encendido, con la diferencia de que la salida del temporizador inicia
ENCENDIDA. La instrucción desenergiza la salida una vez que el peldaño tienen continuidad
lógica y que el lapso de tiempo ha transcurrido (valor del registro acumulador igual al del
registro preestablecido). Los fabricantes de controladores normalmente proporcionan sólo
Controladores
Programables
Ramón
Medina
Página 33
de 89
Lenguajes de Programación
temporizador de desenergizado o de energizado en encendido, ya que es muy fácil
implementar uno a partir del otro. La figura a continuación muestra el diagrama de tiempo
para ambos tipos.
Diagrama de tiempo para un
temporizador energizado en
ENCENDIDO y desenergizado
en ENCENDIDO
Energizado en APAGADO
Una instrucción de temporizador energizado en APAGADO proporciona una acción
demorada. Si el peldaño no tiene continuidad, el temporizador comienza el conteo de los
intervalos de tiempo hasta que el valor acumulado iguala al valor prefijado. Cuando los
valores son iguales, el temporizador energiza su salida y cierra el contacto demorado
asociado. El contacto demorado puede ser usado en el programa normalmente abierto o
normalmente cerrado. Si la continuidad lógica ocurre antes de que el temporizador finalice
su conteo, el valor acumulado retorna a cero.
Temporizador de energizado
en apagado
Controladores
Programables
Ramón
Medina
Página 34
de 89
Lenguajes de Programación
Desenergizado en APAGADO
La instrucción de desenergizado en APAGADO (TOF) opera de manera similar a como lo hace
la de desenergizado en encendido; sin embargo, la salida del temporizador está ENCENDIDA
y será apagada cuando el peldaño pierda continuidad lógica y el lapso de tiempo establecido
haya transcurrido. Algunos fabricantes de controladores proporcionan sólo uno de los
temporizadores de desenergizado, ya que es muy sencillo implementar uno a partir del otro.
La figura a continuación, muestra los diagramas de tiempo correspondientes.
Diagrama de tiempo para (a)
una instrucción de
energizado en apagado y (b)
desenergizado en apagado
Retentivo en ENCENDIDO
Un temporizador retentivo con retardo en ENCENDIDO (RTO) es utilizado en los casos en que
el valor acumulado deba ser mantenido aún cuando la continuidad lógica o la energía del
sistema. Si el peldaño tiene continuidad lógica, el temporizador comienza el conteo de los
intervalos de tiempo hasta que el valor acumulado iguala al preestablecido. El acumulador
mantiene su valor, aún si la energía o la continuidad lógica se pierden antes de que el
temporizador haya finalizado su conteo. Cuando el tiempo acumulado igual al
preestablecido, el temporizador energiza su salida y cierra los contactos asociados. Los
contactos pueden ser usados normalmente abiertos o cerrados. La instrucción de
reinicialización del temporizador retentivo regresa el valor acumulado a cero.
Reinicialización de Retentivo
La instrucción de reinicialización del temporizador retentivo es la única manera para
reinicializar automáticamente el valor acumulado. Si el peldaño tiene continuidad lógica, esta
instrucción reinicializa el valor acumulado a cero. La dirección de la instrucción de
reinicialización debe ser igual a la del temporizador retentivo.
Controladores
Programables
Ramón
Medina
Página 35
de 89
Lenguajes de Programación
Instrucciones de Conteo
Existen dos tipos básicos de contadores: los que cuentan hacia arriba y los que lo hacen hacia
abajo. El formato puede variar según el controlador. En algunos controladores se usa un
formato de escalera, mientras que en otros se usa de bloque. La figura a continuación
muestra ambos formatos.
Contador en formato (a) de
bloque y (b) de relé
Tipos de contadores
Contador Ascendente
El contador ascendente (CTU) añade una cuenta, cada vez que el evento referido ocurre. En
una aplicación de control, este contador enciende o apaga un dispositivo luego de alcanza un
cierto conteo. Además, este contador puede llevar registro del número de partes (botellas,
piezas, etc.) que pasan por un cierto punto. Un contador ascendente incrementa su valor
Controladores
Programables
Ramón
Medina
Página 36
de 89
Lenguajes de Programación
acumulado cada vez que el evento hace una transición de APAGADO a ENCENDIDO. Cuando
el valor acumulado alcanza el valor prefijado, el contador enciende su salida, finaliza el
conteo y cierra el contacto asociado. Luego de que el contador alcanza su valor prefijado,
inicializa el valor de su acumulador o simplemente continua contando cada evento que
suceda.
Contador Descendente
Un contador descendente (CTD) decrementa el valor de conteo cada vez que ocurre un
evento determinado. En muchas ocasiones es utilizado en conjunto con un contador
ascendente para formar un contador ascendente/descendente, sobre la base de que ambos
contadores tengan los mismos registros. En un contador bidireccional, el contador
descendente proporciona una manera de corregir información introducida por el
ascendente. Por ejemplo, mientras que un contador ascendente totaliza el número de
botellas llenas que pasan por un cierto punto, un contador descendente con el mismo
registro puede restar una del valor acumulado, cada vez que detecta que está
incorrectamente llena. Dependiendo del tipo de controlador, el contador descendente puede
detenerse al llegar a cero o continuar hasta un número negativo máximo. En el formato de
bloque, el conteo descendente ocurre cada vez que la entrada correspondiente pasa de
APAGADO a ENCENDIDO.
Inicialización de Contador
La instrucción de inicialización del contador (CTR) coloca un valor cero en el registro
acumulador. Al programarlo, esta instrucción tendrá la misma dirección que la del contador
al que inicializa. Si el peldaño donde está esta instrucción de inicialización tiene continuidad
lógica, entonces inicializa el contador. La línea de inicialización en el formato de bloque
almacena un cero en el registro acumulador. La figura a continuación muestra un ejemplo
típico de un contador en formato de bloque con instrucciones de conteo ascendente,
descendente y de inicialización. El contador incrementará su valor acumulado hasta que el
contacto 10 se cierre, lo decrementará hasta que cierre el contacto 11 y se reinicializará a
cero cuando cierre el contacto 12. Si el conteo es igual a 15, la salida 100 se encenderá. Si el
contenido del registro 1003 es mayor que 15, la salida 101 se encenderá. La salida 102 se
encenderá cuando el valor acumulado sea menor que 15.
Controladores
Programables
Ramón
Medina
Página 37
de 89
Lenguajes de Programación
Bloque contador con
instrucciones de conteo hacia
arriba, hacia abajo e
inicialización
Ejemplo 9
La figura a continuación muestra un bloque contador empleado para totalizar las partes que
son detectadas por un sensor fotoeléctrico (PE). El valor predefinido de conteo es de 500. Se
pide modificar el circuito de tal manera que el contador se inicialice automáticamente cada
vez que llegue a 500. Adicionalmente, se pide añadir las instrucciones necesarias para
implementar una salida que indique cuando el conteo haya llegado a 500.
Solución
La siguiente figura muestra el circuito que inicializará el contador automáticamente. Cuando
el valor prefijado y el acumulado se igualan, la salida 100 del contador se ENCIENDE,
enganchando la salida 101 para indicar que se alcanzó el conteo. La misma salida del
contador lo inicializa. Recuerda que el controlador ha evaluado todas las entradas, de tal
manera que el contador estará inicializado para el próximo ciclo de ejecución. La entrada 11
es utilizada para desenganchar manualmente la salida 101.
Controladores
Programables
Ramón
Medina
Página 38
de 89
Lenguajes de Programación
Ejemplo 10
Resuelva el caso del ejemplo 9 utilizando permisivos en lugar de bobinas con memoria.
Solución
La siguiente figura ilustra el circuito de permisivos que engancha la salida del contador,
indicando que esté alcanzó el valor predeterminado. El pulsador de inicialización (entrada 11)
es programado como normalmente cerrado a partir de un dispositivo normalmente abierto.
Si la entrada es de importancia para efectos de seguridad, entonces el circuito debe
incorporar un pulsador normalmente cerrado que sea programado con una instrucción
examinar APAGADO.
Instrucciones de Control de Programa y Flujo
Este grupo de instrucciones dirige el flujo de las operaciones así como la ejecución de
instrucciones dentro del programa en escalera. Esas funciones son llevadas a cabo mediante
instrucciones de salto y retorno, que son ejecutadas cuando ocurren ciertas condiciones
lógicas que han sido programadas. Las instrucciones de control de flujo forman una especie
de enrejado dentro del programa. Este enrejado contiene grupos de instrucciones que son
Controladores
Programables
Ramón
Medina
Página 39
de 89
Lenguajes de Programación
utilizadas para implementar una determinada función. La figura siguiente muestra el
enrejado logrado a partir del uso de instrucciones de control de flujo.
Enrejado creado mediante el
uso de instrucciones para
control de flujo
Las instrucciones en el enrejado son ejecutadas sólo si el peldaño donde se encuentra la
instrucción de control de flujo, tiene continuidad lógica. Algunos controladores
programables, dependiendo de sus capacidades y del alcance de la aplicación, puede usar
varios tipos de instrucciones de control de flujo. Esas instrucciones permiten que el
controlador eficientemente ejecute rutinas especiales (programadas por el usuario) que son
invocadas sólo cuando es necesario, optimizando la respuesta del sistema.
La siguiente tabla muestra algunas de las más usadas instrucciones para control del flujo.
Esas instrucciones normalmente funcionan en pareja. Cuando es así, la instrucción de inicia
hace que el controlador ejecute una serie de instrucciones en otra sección del programa de
control. La otra instrucción regresa la ejecución del controlador hasta el sitio donde quedó el
programa cuando se verificó la bifurcación.
Controladores
Programables
Ramón
Medina
Página 40
de 89
Lenguajes de Programación
Instrucciones de control de
flujo
Relé de Control Maestro
Un relé de control maestro (MCR) activa o desactiva la ejecución de un grupo o zona de
peldaños. Un peldaño MCR es usado con un peldaño END para encerar un grupo de
peldaños.
Ejemplo de una instrucción
MCR
Controladores
Programables
Ramón
Medina
Página 41
de 89
Lenguajes de Programación
El enrejado consiste en un peldaño MCR con entradas condicionales al inicio de la zona y un
peldaño END sin condicionales al final de la zona. Cuando el peldaño MCR es VERDAD, activa
la salida referenciada, permitiendo que las salidas de los peldaños dentro de la zona sean
controladas por sus respectivas entradas. Cuando la salida MCR se APAGA, desenergiza las
salidas dentro de la zona.
Control de Último Estado en la Zona
La instrucción para control de último estado en la zona (ZCL) es similar al relé de control
maestro (MCR). Esta determina si va a ser evaluado o no un grupo de peldaños. Para usar
esta instrucción se coloca una salida ZCL con entradas condicionales al inicio de la zona y una
END ZCL sin condicionales al final. Cuando se activa la salida ZCL, las salidas dentro de la zona
son controladas por sus respectivas entradas. Cuando la instrucción ZCL se apaga, las salidas
dentro de la zona permanecen en su último estado.
Fin
La instrucción fin (END) establece el final de una zona controlada por un relé de control
maestro (MCR) o por una instrucción de control de último estado de la zona (ZCL). Esta
instrucción típicamente es incondicional. Esta instrucción puede o no referenciar a una
instrucción MCR o ZCL. Si lo hace, la instrucción termina ese MCR o ZCL específico. Si no es
así, terminará la última instrucción MCR o ZCL.
Ir a
La instrucción ir a (JMP) permite que la secuencia de ejecución del programa sea alterada
bajo ciertas condiciones. Si existe continuidad lógica en el peldaño, la instrucción JMP le
indica al procesador que vaya directamente a ejecutar el peldaño indicado. Al usar esta
instrucción, el controlador puede alterar el orden de ejecución del programa de control
ejecutando los peldaños que requieren atención inmediata. La figura a continuación ilustra
un ejemplo de uso de la instrucción JMP. Es necesario tener especial cuidado cuando se
'salte' sobre contadores y temporizadores ya que esto evita que dichas instrucciones realicen
su trabajo.
Controladores
Programables
Ramón
Medina
Página 42
de 89
Lenguajes de Programación
Ejecutar Subrutina
Similar a la instrucción JMP, ejecutar subrutina (GOSUB) permite que sea alterada la
ejecución secuencial de un programa dada una condición. Al usar esta instrucción, si la
condición lógica es VERDAD, la salida GOSUB le indica al procesador que transfiera la
ejecución del programa de control a la etiqueta (LBL) especificada.
Ejemplo de una instrucción
JMP
El procesador continúa la ejecución hasta que encuentra una instrucción de retorno. Cada
subrutina en el programa debe comenzar con un peldaño etiquetado y terminar con una
instrucción de retorno incondicional.
La instrucción GOSUB es muy útil cuando una porción del programa es referenciada por
varias secciones del programa de control principal o es utilizada cada vez que transcurre un
determinado lapso de tiempo. Normalmente las subrutinas están localizadas al final del
programa o en un área especificada por el fabricante del controlador. Si el controlador no
tiene un área reservada para subrutinas, es posible crearla programando un peldaño falso
con control directo a otro peldaño falso al final de las subrutinas programadas.
Controladores
Programables
Ramón
Medina
Página 43
de 89
Lenguajes de Programación
Controlador con subrutinas
asignadas al final del
programa de control
Controladores
Programables
Ramón
Medina
Página 44
de 89
Lenguajes de Programación
Área de subrutinas creada
por el usuario
Etiqueta
Una etiqueta (LBL) identifica un peldaño destino de una instrucción GOSUB. La dirección de
referencia de la instrucción LBL debe ser igual a la de la instrucción GOSUB con la cual
funciona. La instrucción LBL no contribuye a la continuidad lógica del peldaño, y para efectos
prácticos, siempre es VERDAD.
Esta instrucción debe ser siempre la primera condición en el peldaño. Una etiqueta que haya
sido referenciada por una dirección única, sólo puede ser usada una vez en un programa.
Retorno
La instrucción de retorno (RET) termina una subrutina y es programada sin entradas
condicionales. Cuando el programa de control se encuentra con la instrucción, retorna al
programa principal, a partir del peldaño inmediato siguiente a la instrucción GOSUB que
inició la ejecución de la subrutina. A partir de ese momento, continua la ejecución normal.
Cada subrutina debe tener una instrucción de retorno.
Controladores
Programables
Ramón
Medina
Página 45
de 89
Lenguajes de Programación
Instrucciones Aritméticas
Las instrucciones aritméticas en un controlador incluyen las cuatro operaciones básicas de
suma, resta, multiplicación y división. En adición a dichas operaciones básicas, algunos
controladores incluyen el cálculo de raíz cuadrada.
Instrucciones aritméticas
Como otras instrucciones, las aritméticas puede estar en formato básico o de bloque; sin
embargo, la operación es básicamente la misma. La figura a continuación ilustra los
diferentes formatos.
Controladores
Programables
Ramón
Medina
Página 46
de 89
Lenguajes de Programación
Bobina, contacto e
instrucción aritmética en
formato de bloque
La mayoría de las instrucciones aritméticas requieren de tres registros, dos para los
operandos y uno para el resultado. Lagunas instrucciones, como la multiplicación y la
división, pueden usar cuatro registros. La mayoría de las operaciones aritméticas en un
controlador requieren aritmética de simple precisión, lo cual implica que los resultados
pueden ser almacenados en un registro cada uno. Para operaciones que requieran manejar
números grandes, algunos controladores ofrecen aritmética de doble precisión. En términos
prácticos esto significa que los resultados requieren el doble de registros para ser
almacenados. Por ejemplo, una operación de suma en doble precisión requiere seis registros.
Un registro puede almacenar como valor máximo el número 65.535 en 16 bits si no se
considera signo. Si el bit más significativo es utilizado para el signo, entonces el rango de
representación será desde -37.678 hasta -37.677. Si el resultado de la operación es mayor
que el máximo soportado, se presenta una condición de desbordamiento y se encenderá un
bit o salida asociado a esta condición. El formato numérico empleado en las operaciones
matemáticas varía de acuerdo al controlador, pero normalmente es de tres, cuatro o cinco
dígitos binarios (BCD o binario)- En simple precisión BCD, el valor máximo es 9.999 (sin signo)
y +/-999 (con signo).
La figura a continuación presenta instrucciones aritméticas en formato tanto de escalera
como de bloque. El formato de escalera requiere de instrucciones de transferencia de datos
para obtener los operandos. En el formato de bloque funcional, algunos fabricantes
proporcionan la habilidad de colocarlos en cascada.
Configuración en cascada
que permite la ejecución de
varias funciones aritméticas
en secuencia
Controladores
Programables
Ramón
Medina
Página 47
de 89
Lenguajes de Programación
La posibilidad de colocarlos en cascada es muy útil cuando se tiene que trabajar con
múltiples operaciones aritméticas, ya que una instrucción activa la siguiente una vez que ha
finalizado. Otros fabricantes permiten que las operaciones aritméticas se ejecutadas usando
bloques de varios registros contiguos como operandos para almacenar los resultados en otro
bloque de registros.
Operación aritmética en
forma de bloque funcional
En este caso, el contenido de los registros 1000, 1001, 1002 y 1003 van a ser sumados a los
registros 1200, 1201, 1202 y 1203 y el resultado almacenado en 1400, 1401, 1402 y 1403.
Suma
Escalera
La instrucción de suma en formato de escalera suma los valores almacenados en dos
posiciones de memoria referenciadas por la instrucción. Cada controlador accede a dichos
valores de manera distinta. Algunos usan la instrucción de transferencia de datos obtener
(GET) para acceder a los registros de los operandos.
Suma en formato de escalera
Otros simplemente referencian dos registros utilizando símbolos de contacto.
Suma en formato de
contactos
El procesador almacena la suma de los valores en el registro referenciado por la bobina ADD.
Si la operación de suma está habilitada sólo cuando algunas condiciones sean VERDADERAS,
Controladores
Programables
Ramón
Medina
Página 48
de 89
Lenguajes de Programación
entonces dichas condiciones han de ser programadas antes del peldaño con la operación de
suma. La condición de desbordamiento es típicamente señalada por un bit en registro de
resultado.
Bloque
La instrucción de suma en formato de bloque, suma dos valores almacenados dentro del
controlador y coloca el resultado en el registro especificado. Los operandos pueden ser
constantes, valores provenientes de las tablas de entradas y salidas o variables almacenadas
en la memoria.
Bloque funcional de suma
Una línea de control habilita la operación de suma. Cuando la condición del peldaño es
VERDAD, el procesador lleva a cabo la operación de suma. En la figura anterior, los registros
1000 y 1001 pueden tener valores preestablecidos, registros de almacenamiento o registros
de entradas y salidas. Cada vez que una transición de APAGADO a ENCENDIDO habilita la
línea de control, la instrucción suma los valores de los dos registros y coloca el resultado en la
dirección 2000. La salida de terminado indica que la instrucción fue completada. Esta salida
permanece ENCENDIDA en tanto la línea de control sea VERDAD. Si se produce un
desbordamiento como resultado de la operación, se enciende la salida correspondiente.
Cuando esto sucede, el controlador almacena como resultado, el máximo valor que él pueda
manejar.
Controladores
Programables
Ramón
Medina
Página 49
de 89
Lenguajes de Programación
Algunos controladores usan aritmética de doble precisión cuando trabajan con formato de
bloque. Esta operación es idéntica en esencia y sólo difiere en que se emplean dos registros
por operando y dos para el resultado.
Bloque de suma con doble
precisión
Ejemplo 11
En la figura siguiente, dos ingredientes son añadidos al tanque de un reactor para su
mezclado. Los módulos de entrada analógicas, que proporcionan información de 12 bits en
formato BCD, envían datos de los flujos de los dos ingredientes al controlador. Los valores
son almacenados en los registros 1000 y 1001. Se pide implementar instrucciones que lleven
el control del monto total de los ingredientes combinados, de tal manera que dicha
información puede ser desplegada en el monitor del operador.
Controladores
Programables
Ramón
Medina
Página 50
de 89
Lenguajes de Programación
Solución
Un registro puede mantener el total de ambos ingredientes luego de añadir los dos flujos. La
siguiente figura muestra cómo usar la instrucción sumar para almacenar el resultado BCD en
el registro 2000.Nótese que dicho bloque está siempre activo.
Resta
Escalera
La instrucción de substracción resta los valores almacenados en dos registros. Como en la
instrucción de suma, si el peldaño está habilitado, la operación se ejecuta. Una instrucción de
transferencia de datos GET es la que usualmente accede a los registros donde se encuentran
los operandos. El resultado de la resta normalmente tiene un bit que indica un resultado
negativo.
Instrucción de resta en
formato de escalera
Bloque
La instrucción de resta determina la diferencia entre dos valores y almacena el resultado en
un registro.
Controladores
Programables
Ramón
Medina
Página 51
de 89
Lenguajes de Programación
Bloque funcional de resta
Cuando la entrada de control está en estado lógico uno, el procesador ejecuta la operación.
Tres registros mantienen la información durante la operación. Los valores contenidos en los
registros pueden variar en formato e incluir o no el bit de signo. En la figura anterior, el
registro 1000 puede contener el número 9.009 y el registro 1001 -10.020. El resultado de esa
operación sería 19.029, que sería almacenado en el registro 2000.
El algunos casos, el formato del registro de salida no incluye el signo y el controlador señaliza
este dato utilizando salidas independientes que señalan si el resultado fue positivo, negativo
o cero.
Bloque de resta con salidas
de signo
Algunos controladores permiten añadir constantes añadiendo un indicador como por
ejemplo la letra K, adelante del número. Los controladores que no proporcionan
instrucciones para transferencia de E/S puede usar bloques de substracción para transferir
valores multibit o analógicos desde o hacia la tabla de E/S. Ellos lo hace restando una
constante igual a cero al dato de entrado y almacenando el resultado en el registro destino.
La siguiente figura ilustra un ejemplo de un bloque SUB usado para leer una entrada
analógica y escribirla en una salida del mismo tipo. Cuando se cierra el contacto 10, se
ejecuta la función SUB. El registro 100 especifica la dirección de referencia del módulo de
entrada o salida (analógico o multibit). Durante la lectura de una entrada, se resta una
constante cero (registro 1001) del valor del registro 100 y el resultado es almacenado en el
registro 1000 para su uso por parte del programa de control. Durante la operación de
escritura en la salida, se resta una constante cero (registro 1001) del valor del registro 1000 y
el resultado es enviado al módulo de salida (registro 100).
Bloque de resta utilizado
para (a) leer una entrada
analógica y (b) escribir en
una salida analógica
Controladores
Programables
Ramón
Medina
Página 52
de 89
Lenguajes de Programación
Multiplicación
Escalera
La multiplicación en formato de escalera trabaja sobre dos operandos y usa dos registros
para depositar el resultado, esto porque en la mayor parte de los casos, el producto de dos
números de cuadro dígitos produce un valor de más de 4 dígitos. Algunos controladores
proporcionan registros adyacentes para almacenar el resultado.
Instrucción de multiplicación
en formato de escalera
Dependiendo del controlador, una o dos bobinas referencian a los registros que contienen el
resultado de la multiplicación. Las instrucciones GET permiten acceder a los registros
operandos. Si se requiere que una condición habilite la operación, esta debe ser programada
antes de que el peldaño de multiplicación acceda a los operandos. En la figura anterior, el
contenido de los registros 1000 y 1001 serán multiplicados y el resultado almacenado en los
registros 2000 y 2001.
Bloque
El bloque de multiplicación (MUL) usa dos registros para almacenar el resultado y un registro
para cada operando. La siguiente figura ilustra el bloque de multiplicación, con una línea de
control que habilita la operación.
Controladores
Programables
Ramón
Medina
Página 53
de 89
Lenguajes de Programación
Bloque funcional de
multiplicación
El controlador puede utilizar doble precisión para el bloque de multiplicación, por lo cual
utilizaría el doble de registros para operandos y resultado. Esto permitiría que un número de
8 dígitos BCD pudiera ser multiplicado por otro número de 8 dígitos BCD produciendo un
resultado de hasta 16 dígitos BCD, almacenado en 4 registros. Algunos controladores usan
escalamiento, en los cuales el resultado de la multiplicación es mantenido temporalmente en
dos registros y luego multiplicado por un valor de escalamiento (ver siguiente figura). Por
ejemplo, supongamos que el controlador maneja formato de 4 dígitos BCD y que los registros
1000 y 1001 contienen los valores 9.001 y 8.172 respectivamente, con un factor de
escalamiento de -5 (o 10 elevado a la -5). Si el controlador usa escalamiento, almacenará el
resultado (73.556.172) en dos registros temporales (7355 en uno y 6172 en el otro) y luego lo
multiplicará por el valor de escalamiento resultando 735,56173. Este resultado es
redondeado a 736 y almacenado en un único registro. Conociendo que el resultado ha sido
escalado, el usuario puede determinar el valor actual.
Multiplicación con bloque de
escalamiento
Controladores
Programables
Ramón
Medina
Página 54
de 89
Lenguajes de Programación
División
Escalera
La instrucción DIV encuentra el cociente de dos números. Este cociente es almacenado en
dos registros y referenciado por una bobina de salida. El primer registro contiene la parte
entera del cociente y el segundo la fracción decimal. Los operandos son recolectados
utilizando una instrucción GET.
Instrucción de división en
formato de escalera
Bloque
El bloque funcional DIV calcula el cociente de dos números, almacenando el resultado en uno
o más registros. El cálculo de la división se inicia cuando el peldaño de la línea de control
tiene continuidad lógica. El registro 1000 (dividendo) es dividido por el contenido del registro
1001 (divisor) y el resultado es almacenado en dos registros contiguos.
Bloque funcional de división
En este caso, los registros destino son el 2000, que almacena la parte entera del resultado y
el 2001, que almacena la fracción decimal. Dependiendo del controlador, el segundo registro
puede contener el residuo en lugar de la fracción decimal. Algunos controladores permiten la
utilización de un factor de escalamiento especificado en el bloque de división. Este factor
permite la obtención de fracciones como resultado.
Dependiendo del controlador que sea usado, un bloque de división puede tener tres posibles
salidas. Cuando está energizado, la salida del tope indica si la operación fue exitosa, el
segundo refleja un desbordamiento o error (división por cero) y la de abajo señala si el
resultado tiene o no un residuo.
Controladores
Programables
Ramón
Medina
Página 55
de 89
Lenguajes de Programación
Raíz Cuadrada
El bloque de raíz cuadrada (SQR) tiene generalmente dos o tres registros, uno que mantiene
el operando y uno (o dos) que contiene el resultado. Uno de los registros para el resultado
puede contener la parte entera y el otro la fracción decimal. El procesador puede también
proporcionar la posibilidad de usar un factor de escalamiento. Cuando el peldaño tiene
continuidad lógica, se ejecuta la operación. La primera salida señala si la operación fue o no
exitosa y la segunda, si existe una condición de desbordamiento.
Bloque funcional de raíz
cuadrada
La operación de raíz cuadrada es útil en aplicaciones como el cálculo del flujo a partir de la
presión diferencial en una placa orificio. En esta aplicación, la rata de flujo (Q) es igual a una
constante (K) multiplicada por la raíz cuadrada de la presión diferencial (∆Pa= Pout - Pin). Es
necesario calcular la raíz cuadrada del valor analógico proveniente de la placa orificio y el
resultado, multiplicado por la constante K. El valor final proporciona el volumen por unidad
de tiempo.
Instrucción de raíz cuadrada
aplicada a la medición de
flujo con placa orificio
Controladores
Programables
Ramón
Medina
Página 56
de 89
Lenguajes de Programación
Instrucciones de Manipulación de Datos
Las instrucciones para manipulación de datos son mejoras sobre el conjunto básico de
instrucciones en escalera. Mientras que las instrucciones tipo relé están limitadas al control
de salidas internas y externas basado en el estado de un bit específico, las instrucciones de
manipulación de datos permiten operaciones multibit. Estas instrucciones manejan
operaciones que tienen lugar en uno, dos o más registros.
Instrucciones de
manipulación de datos
Comparación de Datos
Las instrucciones de comparación de datos (CMP) como lo implica su nombre, comparan
valores almacenados en dos registros. Estas instrucciones son útiles cuando se verifica el
rango de datos de una variable. En algunos controladores, las instrucciones de comparación
de datos son expresadas en formato básico de escalera, mientras que en otros, son bloques
funcionales. En ambos formatos, proporcionan tres comparaciones básicas: igual a, menor
que y mayor que. Con base en el resultado de la comparación, el procesador puede encender
o apagar salidas y llevar a cabo otras operaciones.
Las instrucciones de comparación que usan el formato básico de escalera operan de manera
similar a como lo hacen las instrucciones aritméticas. Si el peldaño tiene continuidad, la
Controladores
Programables
Ramón
Medina
Página 57
de 89
Lenguajes de Programación
instrucción lleva a cabo la operación; si la comparación es VERDAD, la instrucción pasa
continuidad a la bobina de salida.
Comparaciones en formato
de escalera
Las instrucciones de comparación típicas son mayor que (>), menor que (<) e igual a (=),
además de las combinaciones entre ellas. La instrucción GET accede al primer registro a ser
comparado. Las condiciones de la escalera son programadas antes de las instrucciones GET y
CMP.
En la figura anterior, si el contacto 10 cierra, el contenido del registro 600 es comparado con
el del registro 501; si son iguales, se enciende la bobina 100. Si se cierra el contacto 11, el
contenido del registro 601 es comparado con el contenido del registro 502; si es mayor o
igual, se enciende la salida 101.
El bloque funcional de comparación (mostrado en la siguiente figura), compara el contenido
de dos registros, el 2000 y el 2001, para determinar en este caso si son iguales. El bloque
energiza la salida 100 cuando se ejecuta la comparación y la 101, si la comparación es
satisfecha. Algunos controladores pueden tener un bloque de comparación con varias
salidas, que llevan a cabo múltiples comparaciones a la vez. Este tipo de bloques de
comparación enciende la salida que corresponde al resultado obtenido.
Bloques para (a)
comparación sencilla y (b)
comparación múltiple
Algunos controladores ofrecen otra opción de comparación que usa un registro para
implementar un límite (LIM). Esta instrucción compara el valor en tres registros para
determinar si el dato en el registro del medio, entra comprendido entre los valores
almacenados en los otros registros. Por ejemplo, el bloque funcional de límite que se
muestra en la siguiente figura, compara los contenidos de los registros 1100, 1200 y 1300
para determinar si el valor en 1200 es menor o igual que el contenido en 1100 y si es mayor o
Controladores
Programables
Ramón
Medina
Página 58
de 89
Lenguajes de Programación
igual que el contenido en el registro 1300. Si la comparación es VERDAD, la instrucción
energiza la salida que indica que la comparación fue satisfecha.
Bloque de comparación que
usa función limitadora
En controladores que no disponen de la instrucción de comparación, es posible comparar
valores utilizando un bloque de substracción. En este caso, las bobinas de salida señalan si el
resultado de la comparación es positivo (mayor que), cero (igual a) o negativo (menor que).
Ejemplo 11
La figura a continuación muestra una sección del programa de un ejemplo anterior en el que
una instrucción de suma (ADD) fue usada para llevar registro de los dos ingredientes que
estaban siendo añadidos al tanque reactor. Los dos primeros peldaños abren las válvulas de
los ingredientes A y B, permitiendo que sean añadidos al tanque una vez que el comando
correspondiente se ha encendido (entrada 10). Se pide implementar un bloque de
instrucción que asegure que la válvula se cierre cuando el ingrediente A alcance 500 galones
y el B alcance 750 galones.
Solución
La siguiente figura ilustra el uso de instrucciones de comparación que detectan cuando la
cantidad de cada ingrediente llega a su máximo. Las salidas de las instrucciones de
comparación son utilizadas como permisivos para romper la continuidad de los circuitos de
Controladores
Programables
Ramón
Medina
Página 59
de 89
Lenguajes de Programación
cada válvula. Los valores de los flujos de cada ingrediente (registros 1000 y 1001) son
comparados con dos constantes (K).
Matriz Lógica
Un bloque funcional de matriz lógica implementa operaciones lógicas AND, OR, OR exclusivo,
NAND, NOR y NOT sobre dos o más registros. La siguiente figura muestra una función típica
de matriz lógica.
Bloque funcional de matriz
lógica
Una operación de matriz lógica entre dos registros puede ser usada para enmascarar cierto
bit del dato original y pasar sólo el estado de esos bits al registro de salida. La entrada de
control de habilitación dispara la ejecución del bloque de función de matriz lógica. El bloque
especifica el tipo de función lógica que será ejecutada, mientras que el usuario especifica los
registros dentro del bloque. En la figura anterior, los registros 1000 y 1100 contienen los
operandos, mientras que el registro 2000 contiene el resultado. La longitud de la operación
indica el número de palabras o registros adyacentes a cada registro.
Controladores
Programables
Ramón
Medina
Página 60
de 89
Lenguajes de Programación
Bloque de función de matriz lógica utilizado
para enmascarar bits de salida
El bloque de función de matriz lógica tiene tres posibles salidas. Este energiza la salida
superior cuando la línea de control está activa, energiza la salida del medio una vez que la
operación ha sido completada y energiza la salida inferior si ocurrió algún error. Como
ejemplo, examinemos la siguiente figura, que tiene una longitud de 8 y una función lógica
AND. Cuando la entrada de control habilita el bloque, la función lógica ejecutará la operación
AND entre el contenido de los registros 1000 al 1007 con los de los registros 1100 al 1107.
Cada registro típicamente puede almacenar 16 bits de datos. En este caso, el bloque de
función ejecutará una operación AND de 128 bits, almacenando el resultado en los registros
2000 al 2007.
Algunos controladores tienen sólo dos operandos (por ejemplo, R1000 y R1001). En ese caso,
ellos almacenan el resultado en uno de los registros que contiene uno de los operandos,
borrando el dato previamente almacenado. Se puede prevenir la pérdida de la información
contenida en el registro sobrescrito, transfiriendo previamente su contenido a otro registro.
Controladores
Programables
Ramón
Medina
Página 61
de 89
Lenguajes de Programación
Ejemplo de bloque de
función de matriz lógica
Conversión de Datos
La instrucción de conversión de datos cambia el contenido de un registro dado de un formato
a otro. Las instrucciones de conversión de datos típicamente incluyen BCD a binario, binario a
BCD, absoluto, complemento e inversión.
Una instrucción de conversión de BCD a binario (BCD-BIN) convierte un dato de entrada en
formato BCD a formato binario. Esta conversión permite que el dato de entrada pueda ser
utilizado en operaciones matemáticas. De manera similar, una instrucción binaria a BCD
convierte datos en formato binario a formato BCD, permitiendo su uso por dispositivos de
campo que operen en BCD.
La operación del bloque de conversión de datos es básicamente la misma, no importa cual
sea la dirección de la conversión. Cuando esté habilitada la línea de control, el bloque
convierte el contenido del primer registro (BCD o binario) a binario o BCD según el tipo de
instrucción. Hecha la conversión, coloca el resultado en el segundo registro y energiza el
bloque de salida, una vez que la instrucción ha finalizado. Algunos controladores permiten
que varios registros sean convertidos al mismo tiempo, indicando la longitud de la
instrucción.
Controladores
Programables
Ramón
Medina
Página 62
de 89
Lenguajes de Programación
Conversión de formato BCD a
binario
Conversión de binario a
formato BCD
Conversión de binario a
formato BCD en múltiples
registros
Las operaciones de valor absoluto, complemento e inversión normalmente se ejecutan sobre
un único registro. En otras palabras, la operación almacena el resultado en el mismo registro
donde se encuentra el operando.
Controladores
Programables
Ramón
Medina
Página 63
de 89
Lenguajes de Programación
Un bloque funcional de valor absoluto (ABS) calcula el valor absoluto del valor de entrada. Si
el operando es -5876, el resultado será 5876. Un bloque funcional de complemento (COMPL)
cambia el signo del valor original. Si el valor de entrada es 5876, el resultado será -5876.
Bloque funcional para cálculo
de valor absoluto,
complemento e inversión
La función de inversión (INV) invierte el estado de los bits del operando de entrada. Si el valor
en el registro de entrada es 0000 1111 0000 1111, el resultado será 1111 0000 1111 0000 y
se encenderá el bloque de salida cuando la instrucción se haya completado.
Establecer Parámetros Constantes
Algunas veces es necesario almacenar una constante en un registro. Por esta razón, algunos
controladores proporcionan una instrucción que permite establecer parámetros constantes
(SET). Cuando se habilita este bloque de función, almacena un valor determinado en el
registro especificado, y enciende la salida una vez que la instrucción ha sido completada. Esta
instrucción es muy útil para poner los registros de E/S a cero durante la inicialización.
Bloque funcional para
establecer constantes
Incremento
La instrucción INCR incrementa el contenido de un registro en uno. La instrucción es útil, por
ejemplo, cuando se lleva registro de un número de eventos o de veces que se ejecuta una
rutina. El bloque de incremento puede ser usado con un contador que tenga un valor
Controladores
Programables
Ramón
Medina
Página 64
de 89
Lenguajes de Programación
prefijado grande para llevar el conteo de cuántas veces se ha alcanzado el valor máximo del
contador.
Bloque funcional incremento
Rotación y Desplazamiento
Una instrucción de desplazamiento (SHIFT) mueve los bits de un registro de derecha a
izquierda o de izquierda a derecha según el tipo utilizado. El bloque de desplazamiento utiliza
variables bit-in y bit-out para especificar la ubicación del bit cuyo valor será desplazado. La
variable bit-in es el valor que será añadido al registro, mientras que la variable bit-out es el
valor que está siendo eliminado del registro. Estos bits pueden estar localizados en E/S reales
que pueden ser usados como salida o entrada de datos de una operación de desplazamiento.
Ejecución de un
desplazamiento a la derecha
Una instrucción de rotación (ROT), de manera similar a como lo hace la instrucción de
desplazamiento, mueve la información de derecha a izquierda o de izquierda a derecha, pero
en lugar de eliminar el dato que sale fuera del registro, este se convierte en el dato que
ingresa por el extremo contrario.
Controladores
Programables
Ramón
Medina
Página 65
de 89
Lenguajes de Programación
Ejecución de rotación a la
derecha
La siguiente figura ilustra bloques funcionales para instrucciones de rotación y
desplazamiento. La línea de control habilita la operación del bloque. Algunos bloques
funcionales tienen líneas derecha e izquierda que determinan la dirección de la rotación o
desplazamiento. El bloque de rotación o desplazamiento puede tener varias variables
internadas, dependiendo del modelo del controlador.
Bloques funcionales de (a)
desplazamiento y (b) rotación
En general el primer registro contiene el dato a ser desplazado o rotado. Si se especifica
longitud, el primer registro especifica la posición de arranque. Por ejemplo, si la longitud es 3
en una instrucción de desplazamiento hacia la derecha, el bloque operará sobre un total de
48 bits. EL número de bits indica el número de posiciones que se desplazará o rotará de una
vez, cuando se la línea de control se habilite. Las instrucciones de rotación y desplazamiento
son útiles cuando el controlador deba llevar registro del estado de las entradas a lo largo de
una banda transportadora.
Ejemplo de una instrucción
de desplazamiento a la
derecha
Controladores
Programables
Ramón
Medina
Página 66
de 89
Lenguajes de Programación
Examinar Bit
El bloque funcional examinar bit (XB) verifica el estado (ENCENDIDO o APAGADO) de un
punto, bit o localidad de memoria. Este tipo de instrucción es usada cuando se emplean
'banderas' en un programa de control. Una bandera es un bit que es marcado para su
posterior evaluación. En una instrucción examinar ENCENDIDO (XBON), el bloque verifica que
el bit especificado esté ENCENDIDO. Si es así, el bloque energiza la salida. De manera similar,
la instrucción examinar APAGADO, verifica que el bit especificado esté APAGADO.
Bloque funcional de
evaluación de bit
Ejemplo 12
Una aplicación de control está a cargo del manejo de un proceso por lotes donde la lectura
de una entrada de temperatura es crítica para este. El transductor de temperatura del
proceso está conectado a un módulo de entradas analógicas de 4 canales de 0 a 10VDC con
12 bits de resolución. Los 4 bits restantes de cada canal son usados como indicador de estado
del módulo. Ilustre cómo verificar la presencia de una falla en una entrada analógica que
mida este crítico valor de temperatura.
Solución
Verificando el bit 17 del registro 1000 por una condición de APAGADO, es posible determinar
si el canal ha fallado. La siguiente figura muestra cómo una instrucción XBOFF consigue hacer
esta prueba. Cuando el bit 17 está APAGADO, se sabe que ha ocurrido una falla; si está
ENCENDIDO, el canal está bien.
Controladores
Programables
Ramón
Medina
Página 67
de 89
Lenguajes de Programación
La instrucción que maneja la lógica de control es un contacto que se cierra cuando se lee la
señal analógica. Para que la instrucción esté siempre operativa, aún cuando no se esté
leyendo valor alguno, la línea de habilitación debe estar programada sin condicionales.
Instrucciones de Transferencia de Datos
Las instrucciones de transferencia de datos mueven (o transfieren) datos numéricos dentro
del controlador en registros individuales o bloques (grupos de registros). Estas instrucciones
pueden mover información hacia o desde cualquier lugar en la tabla de datos, con excepción
de las áreas restringidas. Un uso típico de estas instrucciones lo constituye al traslado de
constantes o valores preestablecidos hacia contadores y temporizadores, la lectura de
entradas analógicas y módulos de entrada multibit y la transferencia de datos hacia módulos
de salida.
Al igual que con otras instrucciones, estas pueden ser representadas en formato de escalera
y de bloque, aunque el segundo es el más común. Las funciones en formato de escalera
Controladores
Programables
Ramón
Medina
Página 68
de 89
Lenguajes de Programación
usadas para transferir información son GET y PUT, las cuales son utilizadas para implementar
funciones aritméticas y de comparación de datos. Una instrucción GET accede a la
información que se encuentra en un registro en particular, mientras que PUT sirve para
almacenar valores.
Instrucciones GET y PUT
utilizadas en un diagrama de
escalera
El grupo de instrucciones de transferencia de datos constituye el conjunto de funciones más
útil de los controladores 'mejorados'. Los nombres de las instrucciones para transferencia de
datos puede que difieran de un controlador a otro, aunque ellos implementen básicamente
las mismas funciones.
Instrucciones de
transferencia de datos
Mover
Esta instrucción (MOV) transfiere información de una localidad a otra, siendo el destino un
registro de un bit. La figura a continuación muestra la función mover bit (MOVB) y mover
registro (MOVR). Algunos controladores ofrecen instrucciones para mover bytes.
Controladores
Programables
Ramón
Medina
Página 69
de 89
Lenguajes de Programación
Bloques funcionales para (a)
mover un bit y (b) mover
registros
Algunos controladores ejecutan la función mover hacia localidades especiales en la tabla de
datos. En este caso, el controlador convierte automáticamente la información copiado al
formato requerido por la ubicación destino. Por ejemplo, un registro o palabra puede
contener un valor en formato BCD, que al ser transferido a otro registro o palabra sea
almacenado en formato binario, ejecutándose una conversión BCD-binario.
Otro tipo de instrucción es mover máscara (MOVM), que enmascara ciertos bits dentro del
registro. La siguiente figura muestra este tipo de instrucción.
Bloques funcionales para
mover máscara
El bloque mover máscara transfiere información en el registro 1000 al 1100, con la excepción
de los bits especificados como 0 en la máscara del registro 2000.
Otra instrucción de transferencia disponible en algunos controladores es mover estado. Esta
función transfiere el estado de los módulos de E/S a registros de almacenamiento. Luego
puede ser enmascarada, comparada o evaluada para determinar el estado de fallas en el
sistema o en módulos de E/S. Con esta información, el controlador puede tomar acciones
correctivas a través del programa de control.
Mover Bloque
La instrucción mover bloque (MOVBK) copia un grupo de registros de un lugar a otro. La
longitud de los bloques es generalmente especificada por el usuario. La siguiente figura
muestra un ejemplo de esta instrucción.
Controladores
Programables
Ramón
Medina
Página 70
de 89
Lenguajes de Programación
Bloque funcional para mover
grupos de registros
Cuando se energiza, la entrada de control dispara la ejecución del bloque. Este entonces
transfiere información desde las localidades 1000 a la 1023 hasta 2000 a la 2003
respectivamente. Los datos en los registros 1000 al 1023 quedan inalterados. En algunos
controladores, el usuario puede especificar cuantas localidades pueden ser transferidas
durante un ciclo de ejecución.
Mover Tabla
La instrucción mover tabla transfiere información desde un bloque o tabla hasta un registro o
palabra en la memoria. Existen dos tipos de instrucciones de movimiento de tabla: tabla a
registro (TABLE-REG) y registro a tabla (REG- TABLE). La características principal de esta
instrucción es el uso de un registro apuntador, que especifica la posición dentro de la tabla
donde el registro será almacenado. La siguiente figura muestra un ejemplo de esta
instrucción.
Controladores
Programables
Ramón
Medina
Página 71
de 89
Lenguajes de Programación
Bloques funcionales mara
mover un valor de (a) una
tabla a un registro y (b) de un
registro a una tabla
Una transición de APAGADO a ENCENDIDO en la entrada de control habilita la instrucción,
que incrementa el contenido del registro apuntador cada vez que la entrada del medio (INCR)
pasa de APAGADO a ENCENDIDO. La entrada inferior reinicializa el apuntador a cero
(apuntando entonces al tope de la tabla). Si la información debe ser recuperada o
almacenada en una posición específica de la tabla, el registro apuntador puede ser
configurado con el valor apropiado para apuntar a la posición especificada. En la figura
anterior la longitud especifica el número de posiciones en la tabla que serán transferidos (8
en el ejemplo). El bloque encenderá la salida superior luego de haber transferido los 8
registros. Energizará la salida del medio cuando el registro apuntador alcance la posición final
de la tabla.
Aplicaciones que usen esta instrucción incluyen carga de nueva información en una tabla,
almacenamiento de información de entrada proveniente de módulos especiales, y la entrada
de información de errores proveniente de otros procesos controlados. También es útil
cuando se cambian parámetros en temporizadores y contadores y cuando se manejan
simultáneamente grupos de salidas a través de registros de E/S. Una instrucción de
movimiento de tabla puede también ser usada cuando se buscan valores en una tabla para
comparación, interpolación lineal, etc.
Controladores
Programables
Ramón
Medina
Página 72
de 89
Lenguajes de Programación
Ejemplo 12
Un proceso por lotes opera en turnos de 8 horas cada, donde son procesados lotes de
diferentes tamaños que son procesados a una velocidad aproximada de un lote por hora. Se
pide implementar instrucciones para almacenar la información del lote, incluyendo el
tamaño del lote en galones y la hora del día en que el lote fue finalizado. El registro 1000
mantiene el valor de lotes totales mientras que el 1500 almacena la hora del día (en horas y
minutos) en formato BCD (HHMM).
Solución
La siguiente figura ilustra una instrucción de transferencia registro a tabla que moverá las
salidas de los registros 1000 y 1500, usando el mismo registro apuntador para almacenar la
información en dos tablas simultáneamente. Esto asegura que el registro apuntador señale a
una cantidad de lote que corresponde a la hora en que este finalizar. La señal lote finalizado
(Batch Done), que tal vez venga de la apertura de la válvula de descarga, dispara la ejecución
de la instrucción de transferencia. Una vez que el registro es almacenado en la tabla, la
instrucción incrementa el apuntador. El apuntador es incrementado en sólo uno de los
bloques para evitar doble incremento. El incremento ocurre luego de que ambos bloques
funcionales han sido ejecutados para asegurar que la información sea almacenado en la
misma posición relativa dentro de cada tabla. En este caso la señal Batch Done es un
contacto transicional, de tal manera que la instrucción registro a tabla sólo transfiera el
registro una vez a la posición apropiada dentro de la tabla.
Controladores
Programables
Ramón
Medina
Página 73
de 89
Lenguajes de Programación
Transferencia de Bloque - E/S
Algunos controladores proporcionan instrucciones para transferencia de bloques (BXFER),
que son principalmente usados para transferir bloques de información con módulos de E/S
especiales. Los dos tipos básicos de este tipo de instrucciones son block transfer in y block
transfer out. La siguiente figura muestra un ejemplo de esta instrucción.
Instrucción para
transferencia de bloques
La dirección del módulo para la transferencia de datos se especifica de manera explícita
usando los parámetros chasis (rack) y ranura (slot). En la figura siguiente, se leerá el
contenido de 8 canales del módulo inteligente ubicado en el la ranura 3 del chasis 1, cuya
información será almacenada en los registros 1000 al 1007.
Controladores
Programables
Ramón
Medina
Página 74
de 89
Lenguajes de Programación
Instrucción para
transferencia de bloques
La entrada de control, cuando es habilitada, ejecuta la instrucción de transferencia. Durante
la ejecución de esta instrucción, la información es almacenada en la posición de memoria o
registros especificados. La longitud del bloque especifica cuántas posiciones son necesarias
para almacenar los datos. Por ejemplo, la información proveniente de un módulo de
entradas analógicas con cuatro canales, puede ser leída toda de una sola vez, si la longitud
especificada es 4. Una instrucción block transfer out funciona de manera similar, con la
dirección del módulo de salida especificando el destino de la información a ser transferida. La
salida superior del bloque es la encargada de indicar la completación de la instrucción (al
estar ENCENDIDA).
Transferencia ASCII
Las instrucciones de transferencia ASCII (ASCII XFER) transmiten información en formato
ASCII entre el controlador y un dispositivo periférico. El bloque funcional opera en conjunto
con el módulo de comunicación ASCII. La comunicación ASCII puede ocurrir de dos maneras:
leer información desde un periférico o escribir datos en él. Este bloque funcional es usado
ampliamente en aplicaciones donde se requiere generación de reportes. La siguiente figura
muestra un bloque funcional ASCII.
Controladores
Programables
Ramón
Medina
Página 75
de 89
Lenguajes de Programación
Bloque funcional para
transferencia ASCII
La entrada de control activa la ejecución de la instrucción. Cuando se lee información, la
instrucción permite que módulos especiales de E/S lleven a cabo la operación. El procesador
entonces lee la información a partir de estos módulos, y la almacena en localidades
especiales de la memoria (desde el primer registro hasta el último, tal y como se especifique
por el parámetro de longitud). Las direcciones de E/S en el bloque especifica la localización
del módulo. Cuando se escribe información, el procesador transfiere datos desde la posición
donde están almacenados hasta la dirección donde se ubica el módulo.
Algunas instrucciones de transferencia ASCII utilizan registros apuntadores para acceder a
posiciones específicas en una tabla (por ejemplo, para decodificar un caracter de datos
específico en una tabla de datos). Otras instrucciones ASCII permiten que el usuario
especifique cuántos bytes o caracteres son transmitidos durante un ciclo de ejecución. La
velocidad de transmisión es una función del ciclo de ejecución, que a su vez depende del
número de dispositivos ASCII que estén activos en un momento dado. Una instrucción ASCII
asume que se han configurado los valores apropiados de rata de transmisión, bit de arranque
y parada y de paridad en el hardware del módulo de E/S.
Transferencia de Cola - FIFO
La instrucción de transferencia de cola (primero en entrar - primero en salir o FIFO) construye
una tabla o cola donde se almacena la información. La función básica de esta operación es
similar a la de un registro de desplazamiento, en la que una palabra (16 bits) es desplazada
dentro de la cola, cada vez que se ejecuta la instrucción. La información siempre es
desplazada en el orden en que fue recibida: el primer dato que ingresó será el primero en
salir. La figura siguiente muestra un ejemplo de esta instrucción.
Controladores
Programables
Ramón
Medina
Página 76
de 89
Lenguajes de Programación
Bloque funcional FIFO
Una operación FIFO consta de dos partes: una instrucción de entrada FIFO (FIFO IN) y otra de
salida (FIFO OUT). La instrucción FIFO IN carga la cola mientras que FIFO OUT la descarga. Las
instrucciones FIFO son útiles para almacenar información (recuperándola luego) de
naturaleza temporal, en la medida en que vaya estando disponible. Una aplicación típica es el
almacenamiento de recuperación de datos que están sincronizados con el movimiento
externo de partes en una banda transportadora.
Una transición APAGADO-ENCENDIDO en la línea de control se usa para iniciar el bloque
FIFO. Algunos bloques puede disponer de una línea de inicializar para borrar la cola. En una
instrucción FIFO, el registro de entrada contiene el valor que va a ser ingresado en la cola. La
información es colocada en la cola cuando se ENCIENDE la línea de control. La información de
la última posición de la cola es colocada en el registro de salida. La longitud del FIFO
especifica el tamaño de la cola.
La instrucción FIFO es muy útil cuando se trata de mantener valores obtenidos de un proceso
en una 'ventana de tiempo en movimiento'. Por ejemplo, en la siguiente figura se muestra un
perfil de temperatura en función del tiempo. Si se desea mantener una ventana de tiempo
desde t0 hasta t1, los valores pueden ser almacenados en una cola. De esta manera, la cola
mantendrá siempre los últimos valores (desde t0 hasta t1).
Controladores
Programables
Ramón
Medina
Página 77
de 89
Lenguajes de Programación
Perfil de temperatura
Ordenamiento
El bloque de función de ordenamiento (SORT) permite ordenar un bloque de registros, en
orden ascendente o descendente, de acuerdo a su contenido. La siguiente figura muestra un
bloque de ordenamiento en el cual el cierre del contacto 10, habilita la función. El bloque
ordena el contenido de los registros 1000 al 1017 en orden ascendente y almacena el
resultado en los registros 2000 al 2017. Este tipo de función es muy útil cuando se calculan
estadísticos descriptivos tales como la mediana, operaciones éstas que requieren que la
muestra esté ordenada.
Bloque funcional para
ordenamiento ascendente
Instrucciones para Funciones Especiales
Estas instrucciones, como su nombre lo implica, corresponde a operaciones que no son
incluidas en ninguno de los otros grupos. Estas funciones típicamente están disponibles en
controladores de medianos a grandes.
Controladores
Programables
Ramón
Medina
Página 78
de 89
Lenguajes de Programación
Funciones especiales
Secuenciadores
Un bloque secuenciador (SEQ) es una potente instrucción que proporciona un mecanismo
para manipular un grupo de datos (secuencialmente) con base a una tabla de datos
predefinida.
Tabla secuenciadora
La siguiente figura muestra un típico bloque funcional secuenciador. La entrada de control se
encarga de iniciar la ejecución del bloque, ocasionando que el contenido de la tabla de
secuencias sea transferida a salidas de manera secuencial. El registro apuntador señala al
paso que será procesado. Cada vez que se energiza la entrada de control, el apuntador es
incrementado automáticamente, apuntando al siguiente paso de la tabla. Dependiendo del
tipo de controlador, la entrada de control puede ser manipulada por eventos o por tiempo.
La línea de inicialización del apuntador puede hacer que este señale al primer paso en caso
de ser necesario. La longitud y ancho de la secuencia especifican cuantos pasos y el número
de bits contenidos en la tabla (respectivamente). Cuando se habilita la instrucción
secuenciadora, se energiza la primera salida del bloque. La segunda salida señala el fin de la
tabla del secuenciador.
Controladores
Programables
Ramón
Medina
Página 79
de 89
Lenguajes de Programación
Bloque funcional
secuenciador
Ejemplo 13
Una aplicación exigen la implementación de 10 pasos que deben ser ejecutados
secuencialmente. Con el propósito de detectar fallas en la secuencia, el código del paso que
está siendo ejecutado, debe ser mostrado en una pantalla de visualización. Se pide
implementar un bloque de instrucción que satisfaga esta aplicación.
Solución
La siguiente figura muestra una manera de mostrar el código del paso utilizando un registro
salida de 16 bits, conectado a un panel de visualización de 4 dígitos. El secuenciador
transfiere los códigos de la tabla al registro de salida. El registro de salida es configurada de
tal manera que haga referencia al interface de salida (por ejemplo chasis 0, ranura 7, palabra
7). Cada vez que la señal Start of Process Step va de APAGADO a ENCENDIDO, la salida del
secuenciador envía la información al indicador.
Controladores
Programables
Ramón
Medina
Página 80
de 89
Lenguajes de Programación
Diagnóstico
El bloque de diagnóstico (DIAG) compara dos bloques de memoria, uno que contiene las
condiciones de entrada actuales y que contiene los valores de referencia. La instrucción
compara esos bloques bit por bit para determinar si son idénticos. Si se presenta alguna
diferencia, la instrucción almacena el número y el estado del bit en un registro de
almacenamiento. Las instrucciones de diagnóstico son útiles para identificar
malfuncionamiento de las máquinas.
La siguiente figura ilustra un bloque de diagnóstico. La línea de control, al estar energizada,
inicia el bloque de función. El bloque luego compara el contenido de los registros 1000 al
1007 con el contenido de los ubicados del 200 al 2007.
Controladores
Programables
Ramón
Medina
Página 81
de 89
Lenguajes de Programación
Bloque funcional para
diagnóstico
Si encuentra alguna diferencia, almacena la información en el registro 3000 sin alterar otras
posiciones. Cuando finaliza la instrucción, se energiza la salida superior. La instrucción
energiza la segunda salida, sólo cuando encuentra alguna diferencia.
PID
Los controladores capaces de ejecutar estrategias de control analógicos, serán los que
dispongan de bloques funcionales PID. El usuario especifica los parámetros asociados al
algoritmo, para el proceso de manera apropiada. La siguiente figura muestra un ejemplo de
este tipo de instrucción.
Bloque funcional PID
La entrada de control, al estar energizada, inicia la operación automática del bloque PID. La
entrada inferior, al estar energizada, determina si las variables del PID son monitoreadas
pero no procesadas. Si el bloque no está activado (por ejemplo en modo manual), el
controlador puede monitorear las variables si la línea correspondiente está habilitada. El
Controladores
Programables
Ramón
Medina
Página 82
de 89
Lenguajes de Programación
usuario especifica el registro correspondiente a la variable de entrada (IVR) y el registro de la
variable de salida (OVR), que estarán asociados a localidades en módulos analógicos (entrada
y salida). Los registros proporcional (PR), integral (IR) y derivativo (DR) contienen los valores
de ganancia que deben ser especificados para controlar el proceso. El registro SPR (set point
register) contiene el valor de referencia para el proceso. Dependiendo del controlador, el
usuario puede también especificar otros registros tales como tiempo muerto, límites alto y
bajo y velocidad de actualización. La salida superior del bloque PID indica que el lazo de
control está activo. Otras salidas pueden indicar alarmas.
Algunos controladores proporcionan capacidades de control PID sin bloques PID. En este
caso, el controlador usa un módulo especial que contiene todos los parámetros necesarios.
Una instrucción de salida, como por ejemplo un bloque de transferencia de salida o de
movimiento de dato, transfiere los parámetros al módulo durante el proceso de inicialización
del programa. El programa de control puede modificar la información en este módulo, en
caso de ser necesario.
Instrucciones de Comunicación en Red
Las redes de área local (LAN) proporcionan canales de comunicación entre computadores
independientes (referidos como nodos). Debido a que conectan computadores distintos, las
LAN han creado la necesidad de instrucciones que permitan comunicación e intercambio de
información entre los controladores conectados a la red. Por esta razón los fabricantes de
controladores ofrecen instrucciones para comunicación a través de la red, que transfieren
datos relacionados con el estado de contactos, bobinas y registros. Estas instrucciones de red
son normalmente específicas a ciertas familias de controladores.
La siguiente tabla muestra las instrucciones más comunes utilizadas en un entorno de red de
controladores. Estas instrucciones son fáciles de implementar; sin embargo, el programador
deberá ajustarse a las reglas de la red. Adicionalmente, el programador deberá asignar
registros y organizar el programa de tal manera que eviten confusiones en la red.
Controladores
Programables
Ramón
Medina
Página 83
de 89
Lenguajes de Programación
Instrucciones para
comunicación a través de la
red
Cuando el controlador ejecuta una instrucción de comunicación a través de la red, este envía
la información al dispositivo correspondiente para procesar la transmisión. El formato de la
instrucción puede variar dependiendo del controlador. En algunos casos el controlador usa
instrucciones de transferencia de datos para acceder a la red mientras que en otros, emplea
instrucciones específicas. Por lo tanto, las instrucciones que se presentan aquí representan
una guía de referencia para ilustrar la implementación.
La organización de una red depende de cómo ésta esté configurada. En algunos
controladores, la interface de red está incluida en el procesador principal, mientras que en
otros es un módulo independiente. Sin importar el formato, ambos interfaces llevan a cabo la
misma función: comunicarse con la red. En los casos en que la interface de red está instalada
en las ranuras de E/S, el controlador provee uno de varios mecanismos para configurar la
red. Una solución es especificar el módulo de comunicaciones durante el proceso de
configuración del sistema. Algunos controladores reconocen automáticamente la presencia y
ubicación del módulo de comunicaciones. En otros casos, una instrucción de acceso a la red
permite identificar la localización del módulo de red.
Los contactos y bobinas de salida en una red pueden ser referenciados como salidas y
contactos de red. Las salidas de red son salidas internas que están típicamente ubicadas en
posiciones especiales dentro de la tabla de datos, junto con otros registros asociados a la red.
Esos elementos pueden ser parte del área de almacenamiento interno, pero con capacidades
adicionales relacionadas con la red. Por ejemplo (como se ilustra en la siguiente figura), si un
controlador tiene 512 posibles salidas internas, 64 de ellas pudieran ser usadas como salidas
de red. Asimismo, si dispone de 128 registros de almacenamiento, 32 de ellos podrían ser
usados como registros de red. Esas direcciones asociadas a la red serán enviadas
automáticamente si la red está activa.
Controladores
Programables
Ramón
Medina
Página 84
de 89
Lenguajes de Programación
Mapa de direcciones
compatibles con red con
todos los números en
notación octal
Las instrucciones presentadas en esta sección suponen que el controlador especifica la
ranura del módulo de red durante la configuración del sistema.
Salida de Red
Una instrucción de salida de red, como se muestra en la siguiente figura, es usada en
conjunto con un contacto de red para transferir la información de un bit de estado del
controlador a la red.
Operación de una salida de
red y un contacto de red
Si existe continuidad lógica, la salida de red encenderá la dirección referenciada. Enviará la
información acerca del estado de la dirección especificada a la interface de red para su
transmisión. Dependiendo del controlador, la dirección referenciada debe ser una bobina de
red válida. Luego de la transmisión, el estado de la salida está disponible para todos los
nodos en la red.
Controladores
Programables
Ramón
Medina
Página 85
de 89
Lenguajes de Programación
Contacto de Red
Un contacto de red es una instrucción que captura la información de estado de una salida de
red. La dirección de referencia del contacto de red debe ser el mismo que de la salida de red
activa; de lo contrario, el contacto nunca será evaluado. La referencia debe ser una dirección
válida.
La figura anterior ilustra la operación de una instrucción de contacto de red usada en
conjunto con una instrucción de salida de red. En esta instrucción, el procesador obtiene
información de la red a medida que lee el buffer de estado del módulo de red, como si fuera
una pequeña tabla de datos. Si la salida de red referenciada tiene estado lógico 1, el
controlador ejecutará la evaluación de contactos abiertos o cerrados para proporcionar o
remover continuidad. Esta evaluación dependerá de cómo fue configurado el contacto de red
(normalmente abierto o cerrado).
Enviar a la Red
La instrucción enviar a la red (NET SEND) envía la información de un registro a la red local.
Esta instrucción es habilitada a través de la línea de control. Puede incluir dos salidas para
indicar que la operación fue ejecutada y que no se detectó ningún error.
La siguiente figura ilustra una típica instrucción de envío a la red. Si se especifica una longitud
de más de uno, la red puede recibir más de un registro (transmitido). Los registros a ser
transmitidos deben ser consecutivos. La instrucción de envío a la red operan normalmente
en conjunto con un de recepción de la red.
Instrucción (a) enviar a la red
y (b) recibir de la red
Controladores
Programables
Ramón
Medina
Página 86
de 89
Lenguajes de Programación
Recibir de la Red
La instrucción recibir de la red (NET RCV) captura información de registros disponible en la
red y la almacena en la tabla de datos del controlador. El usuario debe asegurarse que la
dirección de los registros solicitados esté correctamente referenciada en la instrucción. Por
ejemplo, si una instrucción NET SEND usa los registros 400 al 403, el controlador que recibe
los datos debe hacer referencia a los mismos registros en la instrucción NET RCV.
La figura anterior ilustra el uso de instrucciones de recepción de la red. Una vez que la
información de la red es capturada, esta es almacenada en los registros destino. Las salidas
disponibles señalan la completación de la operación y la presencia o no de errores.
Enviar Nodo
La instrucción enviar nodo (SEND NODE) opera de una manera más directa que lo que lo hace
la instrucción NET SEND. En este caso, la información es transmitida a un nodo (controlador)
específico en la red. Esencialmente, la instrucción SEND NODE implementa una función
copiar, donde varios registros del nodo fuente, son copiados en el nodo destino.
La siguiente figura ilustra la instrucción SEND NODE. La presencia de continuidad lógica en la
línea de control, habilita la operación del bloque, que envía el contenido de los registros al
nodo especificado como destino. El bloque almacena la información en los registros destino.
Al finalizar enciende la primera salida, y en caso de error, enciende la segunda.
Operación de un bloque
funcional SEND NODE
Controladores
Programables
Ramón
Medina
Página 87
de 89
Lenguajes de Programación
Obtener Nodo
La instrucción GET NODE recupera información de registros a partir de la información vertida
en la red por otro controlador. Esta instrucción esencialmente copia la información del nodo
origen al nodo destino.
La siguiente figura ilustra el uso de una instrucción GET NODE. Cuando el bloque está
habilitado, solicita el contenido de los registros especificados y almacena la información de
los registros destino del controlador que ejecuta la función. La primera salida se energiza
como señal de que la instrucción fue completada. La segunda se energiza si ocurre algún
problema de comunicación durante la transmisión de los datos.
Operación de un bloque
funcional GET NODE
Nemotécnicos Booleanos
Los nemotécnicos booleanos constituyen un lenguaje de programación de controladores
basado en operadores booleanos tales como AND, OR y NOT. Una instrucción nemotécnica
escrita en una forma abreviada que incluye de 3 a 4 letras del nombre de la correspondiente
operación. La siguiente tabla muestra un conjunto de instrucciones booleanas típicas y sus
símbolos en diagrama de escalera equivalentes. El lenguaje booleano es usado para ingresar
lógica en la memoria del controlador. Sin embargo, muchos controladores muestran la
instrucción ingresada como diagrama de escalera.
Controladores
Programables
Ramón
Medina
Página 88
de 89
Lenguajes de Programación
Instrucciones booleanas y su
equivalente en diagrama de
escalera
Los operadores booleanos de salida mejorados, que llevan a cabo funciones de control
adicionales, son el resultado de actualizaciones del conjunto de instrucciones. La siguiente
figura muestra un programa en lenguaje booleano con su diagrama de escalera equivalente.
Programa en lenguaje
booleano y su representación
en diagrama de escalera
Controladores
Programables
Ramón
Medina
Página 89
de 89