Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PLC 0006
PLC 0006
Lenguajes de Programación
Los lenguajes de programación para controladores más empleados hoy en día son:
• Escalera
• Grafcet
• Booleano
Lenguaje 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
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
• 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.
Grafcet
Lógica cableada y su
representación
correspondiente en Grafcet
Traducción Grafcet
Booleano
Lógica cableada y su
correspondiente
representación booleana
Monitoreo de un dispositivo
mostrando (a) continuidad en
el peldaño y (b) continuidad
en una entrada
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
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.
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
Dicha ecuación puede ser simplificada utilizando álgebra de Boole para obtener la siguiente
ecuación:
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.
Solució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.
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.
Instrucción examinar
ENCENDIDO con lógica 0 y
con lógica 1
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.
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.
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
salida negada está APAGADA, sus contactos auxiliares permanecen en sus estados por
defecto.
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
Utilizando las Leyes de Morgan, la función Y negada puede ser expresada como:
Ejemplo 4
Solución
La forma más sencilla es utilizar el diagrama anterior, agregando un peldaño adicional como
se indica en la figura
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 Ramón Página 18
Programables Medina de 89
Lenguajes de Programación
Instrucciones de enganche y
desenganche en formato de
relé
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.
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 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 Ramón Página 21
Programables Medina 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.
Ni la salida de pulso ni el
contacto transicional serán
capaces de desenganchar la
bobina 100
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.
Ejemplo 6
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
Solución
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.
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
Si el pulsador de parada es
presionado cuando el motor
está encendido, éste se
apagará
El pulsador de parada
(normalmente abierto) es
programado como
normalmente cerrado. Al
presionar el botón de
arranque, se enciende el
motor
Si el pulsador de parada es
presionado cuando el motor
está encendido, éste se
apagará
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 Ramón Página 29
Programables Medina 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
Solución
1
1 ciclo = = 16,66 milisegundos
60
3
3 ciclos = = 50,00 milisegundos
60
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
Instrucción de temporizado
en formato de bloque y de
diagrama de escalera
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.
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.
Desenergizado en ENCENDIDO
Energizado en APAGADO
Temporizador de energizado
en apagado
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
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.
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 Ramón Página 36
Programables Medina 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
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
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.
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
Instrucciones de control de
flujo
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.
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.
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.
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
Instrucciones Aritméticas
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.
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
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
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,
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.
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.
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.
Ejemplo 11
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
Instrucción de resta en
formato de escalera
Bloque
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.
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.
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.
División
Escalera
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.
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 Ramón Página 55
Programables Medina 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.
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.
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
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.
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
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
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.
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 Ramón Página 60
Programables Medina de 89
Lenguajes de Programación
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.
Ejemplo de bloque de
función de matriz lógica
Conversión de Datos
Conversión de binario a
formato BCD
Conversión de binario a
formato BCD en múltiples
registros
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.
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.
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.
Incremento
prefijado grande para llevar el conteo de cuántas veces se ha alcanzado el valor máximo del
contador.
Rotación y Desplazamiento
Ejecución de un
desplazamiento a la derecha
Ejecución de rotación a la
derecha
Examinar Bit
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.
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.
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 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.
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
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.
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.
Instrucción para
transferencia de bloques
Instrucción para
transferencia de bloques
Transferencia ASCII
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).
Perfil de temperatura
Ordenamiento
Funciones especiales
Secuenciadores
Tabla secuenciadora
Bloque funcional
secuenciador
Ejemplo 13
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.
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.
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.
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 Ramón Página 82
Programables Medina de 89
Lenguajes de Programación
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.
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.
Mapa de direcciones
compatibles con red con
todos los números en
notación octal
Salida de Red
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.
Recibir de la Red
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
Obtener Nodo
Operación de un bloque
funcional GET NODE
Nemotécnicos Booleanos
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