Omron SPA 2018
Omron SPA 2018
Omron SPA 2018
Programación de
autómatas Omron
Roberto Álvarez Sindín
Revisión 1.2
Octubre 2018
Índice
Blog en:
https://automatizacioncavanilles.blogspot.com.es/
Lista de reproducción en YouTube:
https://www.youtube.com/playlist?list=PL6w-_JQPzf2G5cTGHG3IOS8rKLKtyhpGY
Documentación de referencia:
W394-ES2-07 Manual de programación CS/CJ
W474-E1-09 Manual de referencia de instrucciones
W393-E1-14 Manual de operación de la serie CS/CJ
W516-E1-01 Manual de operación del CP1L-EL y CP1L-EM
W451-E1-03 Manual de programación CP1L / CP1H
Debido al tremendo auge de la industria, cada vez las máquinas habilitadas para procesos productivos
eran más grandes y complejas, necesitando armarios eléctricos donde poder ubicar el aparellaje cada
vez más voluminosos y complicados, aumentando las dificultades de reparación de las mismas.
En 1968, las factorías de automóviles de Ford y General Motors, construyeron conjuntamente el primer
‘Transfer’ controlado electrónicamente. Este equipo electrónico tenía ventaja sobre los automatismos
convencionales basado en relés, temporizadores, etc. de que era fácilmente programable, sin necesidad
de recurrir a ordenadores externos. Se puede decir que éste fue el primer Autómata Programable o PLC
(Program Logic Control) y fue diseñado por Allen Bradley.
No existe un lenguaje común a todos los autómatas, cada marca utiliza el suyo propio. La norma
internacional de estandarización IEC normaliza de los lenguajes de programación entre las diferentes
marcas, de forma que se puedan adaptar entre las diferentes marcas. Lo que sí es igual es el concepto
de trabajo, como todos se basan en esquemas eléctricos, todos los PLC´s son básicamente iguales, pero
con diferentes juegos de instrucciones, de esta manera se puede decir que una vez conocida una marca
conoces el resto.
VENTAJAS E INCONVENIENTES
Ventajas:
Inconvenientes:
Necesidad de un programador.
Coste más elevado.
Necesidad de personal especializado.
2. Estructura de un PLC
La mejor opción para el control de procesos industriales es el empleo de autómatas programables. Estos
aparatos se basan en el empleo de un microcontrolador para el manejo de las entradas y salidas. La
memoria del aparato contendrá tanto el programa de usuario que le introduzcamos como el sistema
operativo que permite ejecutar secuencialmente las instrucciones del programa. Opcionalmente, en la
mayoría de los autómatas, también se incluyen una serie de funciones pre-implementadas de uso
general (como reguladores PID).
La mayor ventaja es que si hay que variar el proceso basta con cambiar el programa introducido en el
autómata (en la mayoría de los casos). Otra ventaja es que el autómata también nos permite saber el
estado del proceso, incluyendo la adquisición de datos para un posterior estudio.
Exteriormente nos encontraremos con cajas que contienen una de estas estructuras, las cuales poseen
indicadores y conectores en función del modelo y fabricante.
Para el caso de una estructura modular se dispone de la posibilidad de fijar los distintos módulos en
raíles normalizados, para que el conjunto sea compacto y resistente.
Los micro-autómatas suelen venir sin caja, en formato kit, ya que su empleo no es determinado y se
suele incluir dentro de un conjunto más grande de control o dentro de la misma maquinaria que se debe
controlar.
• Sección de entradas: se trata de líneas de entrada, las cuales pueden ser de tipo digital o
analógico. En ambos casos tenemos unos rangos de tensión característicos, los cuales se
encuentran en las hojas de características del fabricante. A estas líneas conectaremos los
sensores.
• Sección de salidas: son una serie de líneas de salida, que también pueden ser de carácter digital
o analógico. A estas líneas conectaremos los actuadores.
Tanto las entradas como las salidas están aisladas de la CPU según el tipo de autómata que utilicemos.
Normalmente se suelen emplear optoacopladores en las entradas y relés/optoacopladores en las
salidas. Aparte de estos elementos podemos disponer de los siguientes:
➢ Interfaces: facilitan la comunicación del autómata mediante enlace serie con otros dispositivos
(como un PC).
MEMORIA
Dentro de la CPU vamos a disponer de un área de memoria, la cual emplearemos para diversas
funciones:
Cada autómata divide su memoria de esta forma genérica, haciendo subdivisiones específicas según el
modelo y fabricante.
Para dar respuesta a las distintas demandas, la CPU utiliza distintos tipos de memoria, según sea su
capacidad de almacenamiento, su velocidad de lectura escritura, su volatilidad, etc.
CPU
• Vigilar que el tiempo de ejecución del programa de usuario no excede un determinado tiempo
máximo (tiempo de ciclo máximo). A esta función se le suele denominar Watchdog (perro
guardián). Si se sobrepasó el tiempo máximo de ciclo, se activara la señal de error
correspondiente.
• Ejecutar el programa de usuario.
• Crear una imagen de las entradas, ya que el programa de usuario no debe acceder
directamente a dichas entradas.
• Renovar el estado de las salidas en función de la imagen de las mismas obtenida al final del
ciclo de ejecución del programa de usuario.
• Chequeo del sistema.
Para ello el autómata va a poseer un ciclo de trabajo (SCAN), que ejecutará de forma continua:
IMAGEN DE LAS
ENTRADAS ENTRADAS
EJECUCIÓN DEL
PROGRAMA DE
USUARIO
IMAGEN DE LAS
SALIDAS
SALIDAS
WATCHDOG
El Tiempo de Respuesta, es el tiempo necesario para llevar a cabo las distintas operaciones de control.
En particular, el tiempo de respuesta de un sistema (activación de una señal de salida en relación a una
entrada) viene determinado principalmente por:
UNIDADES DE E/S
Las E/S son leídas y escritas dependiendo del modelo y del fabricante, es decir pueden estar incluidas
sus imágenes dentro del área de memoria o ser manejadas a través de instrucciones específicas de E/S.
las veremos más detenidamente en el punto siguiente.
INTERFACES
Todo autómata, salvo casos excepcionales, posee la virtud de poder comunicarse con otros dispositivos
(como un PC). Lo normal es que posea una E/S serie del tipo RS-232 / RS-422, USB ó RJ45. A través de
esta línea se pueden manejar todas las características internas del autómata, incluido la programación
del mismo, y suele emplearse para monitorización del proceso en otro lugar separado.
ENTRADAS
SALIDAS
Son las encargadas de transmitir las órdenes dadas por la CPU del autómata en función de la
programación al sistema automatizado. Nuevamente distinguimos dos tipos de salidas:
Analógicas: Admiten valores dentro de un rango continuo de valores posibles. Son salidas
analógicas variadores de velocidad, válvulas de control de flujo, actuadores lineales,
resistencias variables, ... La resolución y el tiempo de respuesta son los parámetros que
determinan la calidad de la unidad analógica.
Las entradas y salidas digitales pueden estar integradas en el propio PLC (modelos compactos CPM2A,
CP1L…), o en unidades específicas de E/S que se acoplan a la CPU (modelos modulares CJ1M, CJ2M…).
Por el contrario, para las analógicas deberemos disponer de un módulo de expansión adicional, (como el
MAD11 para la serie CP que dispone de 2 entradas y 1 salida digitales, de 12 bits de resolución o el
MAD42 de la serie CJ que integra 4E/2S de 13 bits de resolución) y se conectan a través de una bahía de
expansión de periféricos.
Existen además entradas y salidas especiales para determinadas aplicaciones, como pueden ser tareas
de interrupción, contaje rápido, entradas y salidas de pulsos, medida de frecuencia… Algunas de ellas
van integradas en la propia CPU de los modelos compactos, mientras que otras es preciso disponer de
unidades de expansión específicas para la función a realizar.
Tomamos como referencia para el cableado un dispositivo compacto, como puede ser la serie CPM2 o
CP1L. Consultar siempre el manual de instalación del autómata antes de realizar ninguna operación.
Alimentación
Conectar la toma de tierra a una puesta a tierra de menos de 100 para proteger al PLC de descargas
eléctricas y operaciones incorrectas.
Entradas
Aunque los contactos de las entradas soportan valores de tensión elevados, como la mayoría de
sensores funcionan a 24 V en corriente continua, es recomendable utilizar esta tensión para alimentar
las entradas, bien utilizando una fuente externa o la que viene integrada en el propio autómata (sólo si
la carga de los dispositivos a conectar no es muy elevada).
En la imagen anterior vemos la conexión de las entradas utilizando una fuente de alimentación externa
con negativo (-) común (en línea discontinua veríamos la conexión con positivo (+) común).
En la siguiente imagen tenemos la forma de conectar la fuente auxiliar de tensión que incorporan los
autómatas de corriente alterna. La conexión es a negativo común, pero puede hacerse con positivo
común de igual forma. Es importante respetar la intensidad máxima que suministra la fuente (300 mA).
Uno de los inconvenientes mayores de este tipo de autómatas es que el COMÚN (terminal COM de la
imagen), es compartido por todas las entradas. Esto implica que todos los sensores han de tener las
mismas características, es decir todos han de ser PNP (salida positiva) o todos NPN (salida negativa),
no pudiendo mezclar sensores de distintos tipos (salvo que los hagamos pasar por un relé u otro
dispositivo y cambiemos la polaridad).
Si utilizamos sensores PNP deberemos conectar el terminal negativo (-) de la alimentación al COM. Si
estos son NPN, conectaremos el terminal positivo (+) al conector COM del autómata. Lógicamente, los
pulsadores, finales de carrera y demás dispositivos de entrada mecánicos, se alimentarán de acuerdo a
este esquema (si los sensores son PNP, los pulsadores se alimentan con el terminal +, si son NPN se
alimentarán con el terminal -).
Salidas
Existen modelos con salida a transistor (PNP ó NPN) y con salida a relé. En este último caso, la
intensidad máxima para cada salida es de 2A y de 4A para el común de cada grupo de salidas,
independientemente del valor de tensión y de que sea en alterna o en continua. En los modelos con
salida a transistor, la carga máxima de la salida será de 300 mA y un máximo de 900 mA por común (sólo
en corriente continua).
En el caso de las salidas, tendremos varios comunes (COM), algunos para salidas especiales (la X.00 y la
X.01) que tienen un COM exclusivo, porque normalmente esas salidas son especiales, permitiendo
salidas de pulsos, y otros que son compartidos por varias salidas.
Esto permite conectar distintos tipos de actuadores de características diferentes, agrupando los de
características similares a un mismo común. Esto es, puedo tener salidas a 24 V en continua con positivo
o negativo común y, a la vez, otros grupos de salidas a 24, 50 ó 230 V en corriente alterna, dependiendo
de la fuente con la que alimente ese común.
Especificación
Salida Relé
Salida 2 A (24 V cc ó 250 V ca)
Común 4 A / común
Especificación
Salida transistor
Salida 300 mA (4,5 a 30 VDC)
Común 0,9 A / común
Si todos los dispositivos de salida son de características eléctricas similares, puentearé los distintos
comunes, tal y como aparece en la figura anterior.
En el CJ1M (CPU2x) tendremos además 10 entradas PNP integradas de 24 Vcc (2 entradas de alta
velocidad) y 6 salidas a transistor (2 de pulsos)
con una carga máxima de 0,3 A (1,8 A total por
unidad). Para la conexión de estas
entradas/salidas es necesario un adaptador
especial que permita el cableado convencional
ya que vienen integradas en la propia CPU.
La conmutación rápida de cargas inductivas conectadas a las salidas de relé del PLC pueden provocar
perturbaciones y sobrecorrientes que es preciso controlar, tanto por la durabilidad de los dispositivos de
conmutación como para evitar perturbaciones en el sistema. De acuerdo con la EN61131-2, será
necesario tomar alguna medida si se producen más de 5 conmutaciones por minuto en el conjunto de
las salidas. Las medidas más habituales son:
En caso de receptores que provoquen una alta intensidad de corriente, como podría ser una lámpara
incandescente, se pueden limitar estas corrientes conectando una resistencia en serie o en paralelo
según se muestra en las imágenes siguientes:
5. Áreas de memoria
La memoria del autómata se encuentra dividida en dos áreas fundamentales, cada una con funciones y
características distintas:
Área de Datos: Se utiliza para almacenar valores o para obtener información sobre el
estado en que se encuentra el autómata.
Esta área se encuentra dividida en varias zonas según las funciones que realizan: CIO, IR, W, SR, AR, HR,
LR, DM (D en la serie CP/CJ), TR, T/C.
Denominación Valor
Bit 0ó1
Byte 8 bits
Palabra ó Canal 2 bytes ó 16 bits
Doble palabra 4 bytes ó 32 bits
Los autómatas de OMRON trabajan normalmente en canales, esto es, en unidades de 16 bits, aunque
para determinadas operaciones puede utilizar más de un canal.
DIRECCIONAMIENTO
El formato de las direcciones de memoria del autómata comprende dos dígitos separados por un punto,
indicando el número de canal y el bit (XXX.YY) En caso de necesidad, se indicará el área de memoria a
que pertenece:
El área CIO comprende los canales asociados a las entradas y salidas físicas del autómata (las
incorporadas y las posibles mediante unidades de expansión) y los relés internos, que no se
corresponden con E/S físicas, pero que son gestionadas de igual forma y se utilizan normalmente para
almacenar estados u operaciones intermedias. En la serie CS/CJ/CP además de los relés internos aparece
además un área de trabajo (W) que amplía el área de trabajo interna.
El acceso a estas áreas de memoria puede hacerse bit a bit o con todo el canal. Aunque se puede hacer,
no es preciso indicar que se trabaja con esta área, por ejemplo 20.01. En el caso de los CJ/CP sí que es
necesario indicar el área de trabajo W, por ejemplo W20.01.
Es un área de memoria volátil, esto es, en caso de falta de alimentación o cambio de modo de
operación, no retiene el estado en que se encuentran.
Los distintos modelos compactos como CPM2A/CP1L se definen por el número de puntos de E/S que
llevan incorporados (Hay modelos entre 10 y 60 puntos de E/S integradas en la misma carcasa).
Tomando como referencia un modelo intermedio, con 30 puntos de E/S, de las que 18 son entradas y 12
salidas. Las direcciones físicas vienen indicadas en la carcasa, junto a unos leds que indican su estado.
En los autómatas modulares actuales como las series CS/CJ, el número de canal de E/S se establece en
función de la posición que ocupa la tarjeta correspondiente en el bastidor. Así si tenemos por ejemplo
un CJ1M con un módulo de 16 E y otro módulo de 16 S, conectados a la CPU, el primer módulo ocupará
el canal 0 (entradas) y el siguiente el canal 1 (salidas). Estas direcciones se pueden modificar desde la
tabla de E/S del PLC.
(Para el CPM2A, son bits que ocupan un área concreta, que dependen del modelo. En la serie CS/CJ/CP
no están en las mismas direcciones, si no que ya utilizan un área de configuración CF y también el área
auxiliar AR)
Contiene bits de control e información del autómata y los periféricos, como pueden ser los puertos de
comunicaciones, puerto de periféricos, memorias externas… Se trata de un área de memoria de
retención, esto es, ante un corte eléctrico o cambio de estado, mantiene el valor ON/OFF que tenían al
volver a ser puestos en servicio. Se divide en dos bloques:
Se utiliza para el almacenamiento e intercambio de datos entre dos o más autómatas en la serie C
(CPM2A, CQM1H…). En el caso del CPM2A, no tiene capacidad de red sin una tarjeta de comunicación
adicional, sólo se puede utilizar conectando dos autómatas en forma PC Link (1:1) directamente por el
puerto serie. El tamaño de esta área en esta serie de PLC depende del modelo, pudiendo intercambiar
hasta 64 canales en los CQM1H y un máximo de 16 en los CPM2A.
Es un tipo de memoria volátil, pierde su estado ante un corte de alimentación o cambio de estado del
autómata. Los bits de esta área que no se utilizan pueden ser empleados como bits de trabajo.
Se utiliza para almacenamiento y manipulación de datos internos. Se gestiona igual que el área IR y su
principal característica es que se trata de una memoria retentiva, esto es, mantiene su estado ON/OFF
ante fallos de alimentación o cambios de estado del PLC.
Es necesario especificar que direccionamos un relé de esta área indicándolo delante mediante HR (por
ejemplo: H2.01).
Es el área reservada para el uso de temporizadores (TIM, TIMH…) y contadores (CNT, CNTR…) y es
compartida por ambos en la serie C, es decir, no puede haber un temporizador y un contador con la
misma dirección (si tenemos un temporizador TIM01, no podemos tener un contador CNT01). En el caso
del CPM2A, tendremos hasta 256 temporizadores/contadores.
Aparte del numero de temporizador / contador, deberemos indicar el valor de preselección hasta el que
queremos que alcance, normalmente será un valor numérico, que introduciremos precedido de una
almohadilla (# para indicar que es un valor decimal). También puede direccionarse a un canal o un DM.
En los modelos CS/CJ/CP ya no comparten la misma área de memoria temporizadores y contadores, por
lo que pueden tener el mismo número identificativo y el número de temporizadores y contadores que
se pueden utilizar es muy superior (hasta 4096 temporizadores y 4096 contadores en un CJ1M ó un
CP1L con CPU M).
Se trata de memorias de 16 bits que se direccionan como un canal (no puede seleccionarse sólo un bit de
esta área). Nos permiten gestionar valores numéricos en operaciones o utilizables para operaciones con
E/S analógicas.
Se almacena aquí el registro de errores y los datos de configuración del autómata (modo de
conexión, estado en el arranque, puerto de comunicaciones…).
448 puntos
Bits auxiliares especiales (SR) SR 228 a SR 255 SR 22800 a SR 25515 Estos bits son para funciones específicas.
(28 canales)
Estos bits almacenan temporalmente el
Bits de memoria temporal (TR) 8 puntos --- TR 0 a TR 7 estado ON/OFF de los puntos de
bifurcación del circuito.
Estos bits se pueden utilizar para
cualquier cometido en el programa, e
320 puntos
Bits de retención (HR) HR 00 a HR 19 HR 0000 a HR 1915 incluso se pueden utilizar para
(20 canales) almacenar estados ON/OFF en caso de
corte de alimentación.
Estos bits tienen funciones específicas, e
384 puntos incluso se pueden utilizar para
Bits auxiliares (AR) AR 00 a AR 23 AR 0000 a AR 2315
(24 canales) almacenar estados ON/OFF en caso de
corte de alimentación.
Estos bits se utilizan para E/S de datos de
256 puntos
Bits de enlace (LR) LR 00 a LR 15 LR 0000 a LR 1515 enlace 1:1. También se pueden utilizar
(16 canales) como bits de trabajo.
Bits para temporizadores y contadores.
Temporizador/Contador
256 puntos TIM/CNT 000 a TIM/CNT 255 No utilizar el mismo número para
(TIM/CNT) temporizador y contador.
Bits de E/S
Estos bits están asignados a terminales de entrada y salida y reflejan el estado ON/OFF de puntos de entrada y salida. Para el
CPM1, los bits de entrada comienzan en 00000 y los de salida en 01000.
Estos bits se pueden utilizar para cualquier función en programas, pero no se pueden utilizar para entrada o salida a terminales
de E/S.
Estos bits se utilizan para almacenar selecciones y valores actuales para todas las funciones, así como para indicadores
asociados con la operación del CPM2A.
Estos bits almacenan temporalmente el estado ON/OFF de puntos de bifurcación del circuito, si no se pueden escribir, sin
alteración, diagramas de relés complejos. El bit sólo se utiliza cuando se programa en nemónico. No es necesario tener en
cuenta los bits TR cuando se programa con diagramas de relés, dado que todo el proceso se efectúa interna y
automáticamente.
Los mismos bits TR en el mismo bloque de instrucción no se pueden utilizar más de una vez, pero sí en diferentes bloques.
Los bits TR no se pueden utilizar para monitorizar el estado ON/OFF mediante las funciones de monitorización de dispositivos
periféricos.
Estos bits retienen el estado ON/OFF incluso cuando la fuente de alimentación del CPM1 está desconectada o cuando se
arranca y para la operación. Estos bits se utilizan exactamente igual que bits de trabajo.
Estos bits retienen las funciones primarias, tales como indicadores, asociadas con la operación del CPM2A. El bit retiene el
estado ON/OFF cuando se desconecta la alimentación del CPM2A o cuando se para y arranca la operación.
Estos bits se pueden utilizar para intercambiar datos con PLCs remotos en conexiones 1:1 entre CPM1s así como entre un
CPM2A y un CQM1 o un C200HS.
Temporizador/Contador (TIM/CNT)
Este es un temporizador/contador utilizado con instrucciones TIM, TIMH(15), CNT y CNTR(12). Dado que el número es el mismo
para ambas instrucciones, no utilizar el mismo número dos veces, incluso para diferentes instrucciones.
El número de temporizador/contador se designa como dato de canal, cuando se utiliza el valor de temporizador/contador,
mientras que se designa como dato de bit, cuando el temporizador/contador se utiliza como un Indicador de tiempo/contaje
Alcanzado.
Se accede a los datos en unidades de canal. Los contenidos de la memoria de datos se retienen si se desconecta la fuente de
alimentación del CPM2A o si la operación se arranca y se para. De DM 0000 a DM 1999 y de DM 2022 a DM 2047 se pueden
utilizar para cualquier función, pero el resto de canales están asignados a funciones específicas. Sin embargo, de DM 1000 a DM
1021 están disponibles para programas mientras no se hayan designado para almacenar el histórico de errores por los bits 00 a
03 de DM 6654.
Los bits SR se utilizan para almacenar las selecciones y valores actuales para todas las funciones, incluyendo indicadores de
estado de operación de CPM2A, indicadores de inicio de operación, destinos de salida de pulso de reloj, selección analógica,
contadores de alta velocidad e interrupciones de modo de contador.
En los PLC modulares es posible (y necesario) configurar la tabla de E/S del PLC. Podemos considerar tres
tablas de E/S que deben ser idénticas para un funcionamiento correcto del sistema (la actual en CX
Programmer, la registrada en el PLC y la configuración conocida en CX Server).
Por defecto el PLC tiene registrada una configuración que le permite comunicarse con las tarjetas de
expansión conectadas al bastidor principal o de expansión. Si no se realizan modificaciones, el PLC
funciona con dicha tabla registrada, mandando los bits a las direcciones programadas, sin importar la
unidad a la que se corresponden (0.00 y 1.00).
En ese caso tendremos que editar la tabla de forma manual, agregar las distintas tarjetas de expansión y
cargar la configuración en el PLC. Haremos ‘doble clic’ sobre cada hueco y seleccionaremos el tipo de
tarjeta que tiene el PLC conectada en esa posición, haciendo nuevamente ‘doble clic’ se agregará en la
posición que estemos editando. Una vez completada la transferiremos al autómata.
Con la nueva tabla cargada, si se corresponde con la configuración real del PLC, desaparecerá el error.
Estas direcciones pueden modificarse desde CX Programmer, desde el área CIO estándar (canales 0000
hasta 0079) hasta el área CIO ampliada para unidades E/S (canales 0080 hasta 0999). Esto es, podremos
asignar a cada tarjeta de este tipo cualquier canal desde el 0 al 999.
MONITOR: Es igual al modo RUN, pero con comunicaciones a través del cable de programación,
normalmente se utilizará para probar y monitorizar un nuevo programa.
El estado y comportamiento del PLC, según cada uno de los modos de funcionamiento se resume en la
siguiente tabla:
Podemos conocer el modo en que se encuentra el PLC mediante cuatro indicadores luminosos tipo LED,
visibles sobre la carcasa frontal, en el CPM2A hay 4 led.
PWR: Led verde que nos indica si el autómata tiene alimentación eléctrica.
RUN: Led verde que nos indicará si el autómata se encuentra en los modos de funcionamiento o
monitorización.
COMM: Indicador ámbar que parpadeará de modo rápido cuando existe comunicación con el
software de programación.
En los CP1L tendremos 6 LED de estado, la conexión será por cable USB o RJ45 y tendremos uno o dos
módulos de ampliación en los que podremos conectar distintos interfaces de comunicación (RS232,
RS485, RJ45 o panel de operación).
Serie CJ1
La serie CJ es modular, a la CPU se le han de añadir la fuente de alimentación y las distintas unidades de
E/S o de comunicaciones.
Esta gama incorpora un puerto de comunicaciones estándar RS232 y un puerto de periféricos con
conector propietario, también basado en RS232. Además tendremos una ranura para una tarjeta de
memoria. Los indicadores del frontal están divididos en dos grupos, uno del funcionamiento normal y el
otro relativo a la tarjeta de memoria, junto con su significado:
Junto con los indicadores estándar de la serie CJ, tendremos un indicador para la dirección de nodo (la
última cifra en hexadecimal de la dirección IP) y el estado de las comunicaciones del puerto Ethernet/IP.
Tradicionalmente los PLC de Omron se han comunicado por RS232 utilizando protocolos específicos. En
los últimos modelos se impone la comunicación por USB y por RJ45.
Otros protocolos de comunicación que aparecen requieren una tarjeta dedicada en el PC para
establecer la comunicación, como en el caso de Controller Link.
Es una utilidad muy práctica que permite a CX Programmer conectarse de forma automática a un PLC sin
necesidad de conocer las características del puerto de comunicación del mismo, ya que va probando los
diferentes protocolos y configuraciones posibles hasta establecer la comunicación.
En función del modelo y el puerto de comunicación utilizado hay varias formas de utilizar este sistema,
desde el menú ‘PLC’ o desde la barra de herramientas:
(1) Para todos los autómatas con comunicación por puerto serie DB9
(2) Para el CP1L-E hay una utilidad exclusiva para localizarlo a través de Ethernet (requiere CX
Programmer 9.3 o superior)
(3) Para los autómatas con comunicación por puerto Ethernet/IP
Usando estas opciones, se buscará al PLC conectado y se descargará el programa que tenga cargado y
sus configuraciones en CX Programmer.
También es posible establecer la comunicación de forma directa utilizando un cable RJ45 conectado de
forma directa entre la tarjeta de red del PC y el puerto de comunicación del PLC. Sin embargo, en
algunos equipos y con algunas configuraciones del sistema Windows, la tarjeta Ethernet del PC no
adopta la dirección IP por defecto (rango 169.x.x.x) cuando no está conectado a nada, por lo que es
necesario hacer la configuración manual del rango IP en el PC.
En función de nuestra configuración nos conectaremos al PLC bien de forma directa o mediante un
switch, indicando en ese caso la dirección por defecto o, si ya tenía una dirección, podemos usar el
botón de examinar para que muestre los equipos en el rango de IP en el que estemos.
Una vez hayamos configurado la conexión al PLC, ya podremos cambiarle la IP entrando en la ventana
de configuración y seleccionando la pestaña de ‘Ethernet integrado’.
El cambio en la dirección IP no será efectivo hasta que se reinicie el PLC (apagar y encender) o se use la
opción de resetear el puerto Ethernet (requiere estar conectado al PLC).
Después del reinicio o el reseteo del puerto Ethernet, es posible que tengamos que cambiar el rango IP
de nuestro PC, si se lo hemos cambiado al PLC.
Para especificar otro rango de red deberemos hacerlo desde CX Programmer, entrando en la
configuración del puerto. Si acedemos por Ethernet, tendremos que ajustar previamente la IP del PC en
el rango del PLC, esto es el 192.168.250.xxx ya que si no, no encontrará el dispositivo.
Si accedemos al PLC por USB no será necesario este ajuste en el PC y la configuración será más sencilla.
En todo caso, tendremos que ajustar la IP desde la tabla de E/S del PLC en el apartado de la tarjeta
interna de la unidad.
Una vez ajustada la dirección deseada, nos conectamos y le cargamos la configuración al PLC, al menos
la de la tabla de E/S para que cambie la IP del puerto integrado.
(LD NOT) Leer bit negado: Determina el estado inverso del bit (B)
como una condición de ejecución para posteriores operaciones del
programa. Si el bit (B) está activo no nos dará continuidad esa línea
de programa, deteniendo la ejecución en ese punto, si no lo está, dará continuidad.
(OUT NOT) salida negada: Pone a OFF el bit designado para una condición de
ejecución ON y lo pone a ON para una condición de ejecución OFF. Esto es, la salida
se activará sólo si los contactos previos no tienen continuidad.
Programas de ejemplo:
Los ejemplos utilizando entrada y salidas negadas no tienen equivalente eléctrico. En los casos anteriores,
negando la entrada o la salida, el circuito se comportará de forma contraria, salvo que neguemos ambas de forma
simultánea (doble negación = afirmación).
DUPLICACIÓN DE SALIDAS
Con las mismas condiciones de ejecución pueden ponerse múltiples salidas en paralelo, esto es, una
misma condición del programa puede activar varias salidas de forma simultánea. (Nota: una misma
condición puede activarme más de una salida, lo que no está permitido es utilizar la misma salida en dos
puntos distintos del programa).
Las funciones AND y OR, así como las salidas en paralelo pueden combinarse.
Programas de ejemplo:
En este caso bastará que sólo una de las entradas, 01 ó 02 esté activa para
que se active la salida 1001.
Por último, para que se active la salida, será necesario que estén activas la
entrada 03 y además o bien la 01 ó la 02 ó ambas a la vez.
El programa será una traducción casi literal de un circuito eléctrico, utilizando una marca de la propia
salida en paralelo (función OR) con el pulsador de marcha, y los pulsadores de de marcha y paro
conectados en serie (función AND).
Esta función realiza el enclavamiento de un bit, activado por una entrada de set (S) y desactivado
por una entrada de reset (R). Es equivalente al ejemplo anterior, pero resumido en una única función. En
caso de recibir señales simultáneas por ambas entradas, siempre predomina el reset sobre el set.
Función RSET: Pone el bit operando a OFF cuando la condición de ejecución es ON.
Circuito eléctrico
S1 Paro (NC) 01
S2 Marcha (NA) 02
K1 Contactor 10.01
Pulsando en S2 (entrada 02), cerramos el
circuito que alimenta la bobina del contactor
K1 (salida 10.01), realimentándose mediante
un contacto auxiliar (10.01).
Al pulsar el paro S1 (entrada 01) cortamos la
alimentación, desactivándose la bobina del
contactor.
En el esquema anterior tenemos que el pulsador de paro (S1) es un cerrado físico, esto es, en
condiciones normales de funcionamiento dará continuidad y cuando se pulse, interrumpirá el circuito.
Como vemos, este contacto se programa utilizando instrucciones lógicas como ABIERTO, del mismo
modo que el pulsador de marcha (S2), que es, sin embargo, un contacto normalmente abierto. Esta sería
la programación correcta para que funcionamiento del circuito sea el que queremos.
Sin embargo, cuando utilizamos las funciones KEEP o SET y RSET, utilizamos la entrada negada de S1, ya
que si no, al tratarse de un cerrado físico, nos activaría la entrada de reset, impidiendo activar el
circuito.
Lo que no podemos cambiar en ningún caso es el tipo de entrada que tenemos conectada al PLC,
dependiendo de nuestra estrategia de programación pondremos un contacto de forma normal o de
forma negada, depende de las funciones usadas o de la funcionalidad que queramos en el sistema.
No debemos confundir los contactos normalmente cerrados con entradas de programa negadas,
dependerá de cada caso. Como orientación, si sólo usamos un Ladder con instrucciones lógicas, los
contactos cerrados se programarán sin negar, mientras que si usamos funciones (KEEP, SET/RSET), los
contactos cerrados deberán negarse.
Es un temporizador a la conexión que se activa cuando su condición de ejecución es ON, y se resetea (al
valor seleccionado) cuando la condición de ejecución se pone en OFF. Una vez activado, TIM mide en
unidades de 0,1 segundo desde el valor.
El TIMH es un temporizador rápido, igual que el anterior y trabaja con unidades de 0,01s.
Si la condición de ejecución permanece en ON lo suficiente para que transcurra el tiempo fijado en TIM,
se pondrá a ON el indicador de finalización del número de TC utilizado y permanecerá en dicho estado
hasta que se resetee TIM (es decir, hasta que su condición de ejecución se ponga en OFF). El valor que
se muestra en el temporizador es el que resta hasta alcanzar el valor de consigna, con lo que este tipo
de temporizador realmente está descontando el tiempo.
A diferencia del temporizador normal, que se resetea cada vez que deja de cumplirse la condición de
ejecución, el TTIM mantiene el valor de contaje, acumulando el tiempo total que la entrada ha estado
activa, hasta que sea reseteado mediante la entrada de la función.
Además hay que tener en cuenta que el valor que se muestra será el acumulado, esto es, no
decrementa como los temporizadores normales, sino que incrementa y acumula el valor.
La llamada a los bits asociados a los temporizadores se ha de hacer con T más el número de
temporizador (ejemplo correcto T0051, en vez del incorrecto TIM0051).
Contador CNT
CNT se utiliza para descontar a partir del valor fijado (SV) cuando la condición de ejecución en el impulso
de entrada pase de OFF a ON, el valor del temporizador será reducido en uno, siempre que CNT se
ejecute con una condición de ejecución ON. Si la condición de ejecución no ha cambiado, o lo ha hecho
de ON a OFF, el valor del CNT no cambiará. El indicador de finalización para un contador se pone a ON
cuando alcanza cero y permanecerá en ON hasta que el contador se resetee. El contador se resetea
(puesta a cero) con una entrada de reset, R. Cuando R pasa de OFF a ON, se resetea al valor fijado.
Se trata de un contador reversible y circular, disponiendo de dos condiciones de ejecución una que
incrementa, otra que resta, y la entrada de reset. Se activará al alcanzar el valor prefijado (SV) y el
cero. Si el contador recibe simultáneamente impulsos por el incremento y el decremento, no modificará
su valor.
La llamada a los bits asociados a los contadores se ha de hacer con C más el número de contador normal
o reversible (ejemplo correcto C0051, en vez del incorrecto CNT0051).
Al trabajar en BCD el valor de temporizadores y contadores está limitado a un rango de #0000 a #9999,
sin embargo es posible usarlos en modo binario, con lo que el rango llegará hasta &65535 en decimal (o
#FFFF en headecimal). Este funcionamiento se puede ajustar en las propiedades del PLC, pero ambos
modos de funcionamiento son incompatibles, o trabajan en binario o en BCD. De hecho las
instrucciones son diferentes, TIMX, TIMHX, TTIMX, CNTX y CNTRX, son las instrucciones equivalentes a
las anteriores en modo binario.
Si cambiamos el modo de
funcionamiento, tendremos que
cambiar las instrucciones ya que
daría error.
DIFU(013) pone en ON el bit designado (B) durante un ciclo de scan cuando la señal de entrada pasa a
ON.
DIFD(014) pone en ON el bit designado (B) durante un ciclo de scan cuando la señal de entrada pasa a
OFF.
En los autómatas de las series CP1 y CJ1/CJ2, se pueden usar las funciones DIFU y DIFD, además también
es posible utilizar flancos sin necesidad de definirlos como función y además se pueden seleccionar
directamente al introducir los contactos. Cuando se utilicen esos contactos aparecerán con una flecha
que indica si se trata de un flanco ascendente () o descendente ().
IL(02) se utiliza siempre junto con ILC(03) para crear enclavamientos. Si la condición de ejecución de
IL(02) es ON, el programa se ejecutará como está escrito, con una condición de ejecución ON utilizada
para iniciar cada línea de instrucción desde el punto en que se encuentra IL(02) hasta la siguiente
ILC(03). Si la condición de ejecución para IL(02) es OFF, la sección enclavada entre IL(02) y ILC(03) se
tratará como se indica en la siguiente tabla:
Elemento Comportamiento
Salidas Puesta a OFF
Temporizadores Reseteo
Contadores Se mantiene el valor, pero no reciben impulsos
KEEP Se mantiene el estado del bit
Resto de instrucciones No se ejecutan las instrucciones y todos los bits y
canales de IR, AR, LR, HR y SR escritos como operandos
en las instrucciones se ponen a OFF.
IL(02) y ILC(03) no han de usarse exactamente por parejas. IL(02) se puede utilizar varias veces en una
columna, con cada IL(02) creando una sección enclavada hasta la siguiente ILC(03). ILC(03) no se puede
utilizar a no ser que haya al menos una IL(02) entre ella y cualquier ILC(03) anterior.
Ejemplo de Aplicación
Comparaciones (CMP)
Función Comparar: CMP (20) (Todos los modelos de PLC)
Cp1: 1er canal a comparar IO, AR, DM, HR, TC, LR, #
Bits de comparación:
En las series CS/CJ/CP pueden usarse las comparaciones como un contacto más (igual que un LD, OR o
AND) e incluirse dentro del esquema de forma que crearán una condición de ejecución ON cuando el
valor sea cierto.
Ejemplo de aplicación:
Vamos a activar diferentes salidas en función del valor que tenga un contador. Definimos un contador
CNT 001 y le damos el valor BCD #010
Realizamos una comparación al valor decimal #05 de modo que dependiendo del valor en el contador,
se nos activen distintas salidas:
Para que me realice lo comparación en todo momento, utilizo el bit de Siempre ON (P_on) que esta
siempre activo. También podríamos haber utilizado una entrada o una marca cualquiera, de forma que
sólo compare en función de que esté o no activa esa entrada o marca. Así mismo, en vez de comparar
valores numéricos, podríamos haber comparado dos canales completos, un canal con un valor
numérico, etc.
Los comparadores en este caso se introducen como una instrucción y la sintaxis será:
En el ejemplo de la imagen: la comparación será cierta cuando el valor del contador sea mayor o igual
que 5, ya que debe interpretarse la instrucción como (#05 ≤ C1)
Función:
Dependiendo de la aplicación se utilizará en su variante diferencial @MOV, para que sólo se ejecute una
vez en el cambio de la condición de OFF a ON. Si no es diferencial se ejecutará cada vez que se escanea
(varias veces en un segundo, dependiendo del programa).
Con MOVL se transfiere una doble palabra (32 bits) en cada operación de movimiento.
Ejemplo de aplicación:
Dispongo de dos entradas con las que selecciono dos tiempos diferentes para el temporizador
En función de la entrada que se active, la 01 o la 02, se desplazará el valor de cada una de ellas a un DM,
que será el que deberá leer el temporizador TIM01. No es necesario que las entradas de selección de
tiempos permanezcan activas, bastará un pulso para que desplacen el valor deseado al DM, de todos
modos se hace el movimiento con la instrucción diferencial (@MOV).
Con la entrada 00 iniciamos el temporizador que, en función del tiempo registrado en el DM tardará
más o menos tiempo en activar una salida (10.01).
Nota: el programa mostrado es para un PLC de la serie C, si se usa un CJ/CP se deberán escribir las áreas
de datos como D en vez de DM.
Cuando la entrada de alimentación está activa, incrementará el canal destino (Wd). Si no se utiliza en
forma diferencial (@INC), el valor del canal Wd aumentará a cada ciclo de scan (varias veces en un
segundo, dependiendo del programa), por lo que habrá que combinarla con DIFU (flanco ascendente) o
DIFD (flanco descendente) para aumentar el valor una sola vez.
Cuando la entrada de alimentación está activa, reducirá el valor del canal destino (Wd). Funciona
igual que la función anterior (INC), pero disminuyendo el valor del canal de destino.
En las series CJ/CS y los nuevos CP1 la instrucción se escribe de otra forma (++/- -) en binario y (++B/- -
B) en BCD, junto con las variantes diferenciales (@++/@- -) que sólo incrementan/decrementan cuando
cambia el valor del bit que activa la función. También existe la posibilidad de usar doble palabra para los
datos (++L/--L y ++BL/--BL), incrementando el valor de contaje.
Ejemplo de Aplicación
Una vez que hemos alcanzado el valor consignado, hemos de poner a 0 el DM, utilizando la orden MOV
y moviendo el valor 0 al DM10, lo que hacemos en el ejemplo con una comparación llevada a un KEEP,
para después resetearlo con una entrada.
Para un programa con sólo dos detectores (podrían incluirse más con más funciones @INC), tendríamos:
El mismo programa anterior utilizando los flancos ascendentes (DIFU) de las entradas de los detectores.
Como vemos, al tener que definir los flancos, se incrementan las líneas de programa.
El mismo programa para los autómatas serie CP1L / CJ1M, utilizando las funciones @++B y las
comparaciones de la serie CS/CJ/CP.
Observaciones:
Si no se usa la función ++B en su variante diferencial @++B, mientras esté activo el detector mandará un
pulso y por tanto un incremento en cada ciclo de scan (varias decenas por segundo).
La 'Salida' activa el MOV del valor #00 al canal D10, por lo que hasta que no reseteemos esta, seguirá
mandando el valor #00, por lo que aunque se detecten nuevas piezas no se incrementará el valor en el
D10 (realmente se incrementará, pero será sobreescrito con el #00 inmediatamente).
La comparación puede hacerse con la función CMP, tal y como figura en el ejemplo anterior.
Función:
SFT(10) se controla por tres condiciones de ejecución, I (estado a desplazar ON =1 u OFF = 0), P (pulso de
condición de desplazamiento) y R (Reset o puesta a OFF = 0).
Cada vez que recibimos un pulso por la entrada P, se va a desplazar el estado del bit de la entrada I una
posición a la izquierda. Es decir, si la entrada I está en (ON = 1), a cada pulso (flanco de subida de la
entrada P), este valor se irá desplazando a la izquierda. Si la entrada I se mantiene activa se irán
poniendo a 1 todos los bits del canal. Si la entrada I está en (OFF = 0), a cada pulso de la entrada P, se
irán poniendo a 0 todos los bits del canal. La última posición de la izquierda se pierde con cada pulso
recibido.
Bit más significativo Canal Final Bit menos significativo Bit más significativo Canal Inicial Bit menos significativo
Cuando se activa la entrada de reset R (se pone a ON = 1), todos los bits en el registro de
desplazamiento se pondrán a (OFF = 0) y el registro no operará hasta que R se ponga en OFF de nuevo.
Programa de ejemplo:
Registro de desplazamiento que a intervalos de 1 segundo (255.02 = P_1s. Bit de pulsos de 1 segundo)
activa alternativamente las salidas del canal 10.
Al activar la entrada 01, comienza una secuencia que va activando alternativamente las salidas del canal
10, desde la 10.00 hasta la 10.07, a intervalos de 1 segundo.
En cualquier momento del proceso podemos “resetear” el sistema activando la entrada 02, lo que
detiene la secuencia, desactivando todas las salidas.
Función:
SFTR(84) se utiliza para crear un registro de desplazamiento de uno o varios canales que puede
desplazar datos a derecha o izquierda. Para crear un registro de un canal, designar el mismo canal para
St y E. El canal de control indica la dirección de desplazamiento, el estado a escribir en el registro, el
impulso de desplazamiento y la entrada de reset. El canal de control se desglosa como sigue:
Los datos en el registro de desplazamiento serán desplazados un bit en la dirección indicada por el bit
12, desplazando un bit a CY y el estado del bit 13 en el otro extremo siempre que SFTR(84) se ejecute
con una condición de ejecución ON, el bit de reset esté en OFF y el bit 14 en ON. No se ejecuta nada si la
condición de ejecución es OFF o si el bit 14 está en OFF. Si SFTR(84) se ejecuta con la condición de
ejecución ON y el bit de reset (bit 15) en ON,el registro de desplazamiento completo incluido CY se pone
a cero.
Ejemplo de aplicación:
En este ejemplo utilizamos como canal de control el 30, del que sólo necesitamos los bits 12, 13,14 y 15,
controlados por las entradas:
En el ejemplo utilizamos la función en modo diferencial @SFTR, de modo que sólo realiza un pulso por
cada ciclo de Scan, si no, nos actuaría sobre todos los canales a la vez.
Avance del desplazamiento (LSB a MSB, esto es de 10.00 hacia 10.15): Entrada 00 activada, entrada 01
activada si quiero que me active la salida, desactivada si no, entrada 02 activada. Ahora a cada pulso que
demos a la entrada 04 avanzará un bit el registro de desplazamiento.
Retroceso del desplazamiento (MSB a LSB, esto es de 10.15 hacia 10.00): Igual que el anterior, pero
con la entrada 00 desactivada.
Reset: Con las entradas 02 y 03 activadas (independientemente del estado de 00 y 01), mandar un pulso
con la entrada 04.
Número de Salto
# (00 hasta 99) en BCD Serie C
# (00 hasta FF) ó &(00 hasta 255) Serie CJ/CP
JMP(04) se utiliza siempre junto con JME(05) para crear saltos, es decir para saltar de un punto a otro
del diagrama de relés. JMP(04) define el punto desde el que se salta; JME(05) define el punto destino
del salto.
Cuando la condición de ejecución para JMP(04) es ON, no se ejecuta ningún salto y el programa se
ejecuta como está escrito. Cuando la condición de ejecución para JMP(04) es OFF, se realiza un salto a
JME(05) con el mismo número de salto, no ejecutándose las instrucciones entre los puntos de salto y se
ejecuta la instrucción que haya después de JME(05).
En la serie C tendremos un máximo de 100 saltos, del #00 al #99 anotados en BCD, mientras que los
CJ/CP dispondremos de hasta 255 saltos, anotados en hexadecimal (del #00 al #FF) o en decimal (del &0
al &255).
El estado de temporizadores, contadores y demás bits utilizados entre las instrucciones de salto, no
cambiarán si la condición de salto no está activa.
Las instrucciones de salto afectan a los flancos DIFU y DIFD, pudiendo permanecer más de un ciclo de
scan activas en función de las condiciones de ejecución del salto.
Salto número 00
Este salto puede utilizarse tantas veces como se quiera e incluso utilizar varios JMP con un único JME.
Sin embargo, la utilización del salto 00 aumentará el ciclo de scan del programa.
Ejemplo de Aplicación
En esta serie el registro de errores almacena un máximo de 20 avisos, a partir de este número se irán
sobrescribiendo, con su código de error. Los registros de error se pueden consultar directamente en la
pestaña de error del PLC y también acceder al área de memoria correspondiente (canales A100 hasta
A199, cada error ocupa 5 canales).
Áreas de memoria:
Los errores FAL(06) son no fatales y permiten que el PLC siga en funcionamiento, pueden borrarse
mediante la misma instrucción FAL con el número 0 o apagando y encendiendo el PLC.
Para borrar un determinado error FAL es necesario mandar la función FAL con el número N = 0 indicando el nº de error a borrar
(#0001 a #01FF) o con (#FFFF) para borrarlos todos.
Los errores FAL ponen a 1 el bit correspondiente de A360.01 a A390.15 (los 511 posibles códigos de error definibles por el
usuario)
Los errores no fatales de sistema leen se almacenan en el A529, según la taba de errores del PLC.
Los errores FALS(07) detienen el funcionamiento del PLC y no podrá volver a iniciarse la ejecución del
programa hasta que desaparezca la causa del error.
Para borrar un determinado error FALS es necesario mandar la función FALS con el número N = 0 indicando el nº de error a
borrar (#0001 a #01FF) o con (#FFFF) para borrarlos todos.
Los errores fatales de sistema leen se almacenan en el A529, según la taba de errores del PLC.
En las serie CJ/CP se puede forzar la puesta a 0 de las salidas, por ejemplo como respuesta a una parada
de emergencia o a un error programado. Para ello basta con activar el bit A500.15. Además al hacerlo un
indicador del PLC INH se activará para señalizar el disparo de este bit. Hay que adoptar las debidas
precauciones ya no se interrumpe la ejecución del programa y al desactivarlo las salidas recuperan su
estado normal, de acuerdo con el programa ejecutado.
Ejemplo de Aplicación:
• Tares cíclicas: Se ejecutan una vez en cada ciclo de scan, siempre que estén habilitadas.
En los PLC Omron de la serie CP/CS/CJ (no está disponible para la los autómatas antiguos de la serie C),
se pueden cargar varios programas que se ejecutarán de forma cíclica, por tareas de interrupción o
pueden ser llamados desde otro programa o tarea. Esta organización permite una mejor estructura y
más claridad en desarrollo y seguimiento de los programas.
Por defecto las tareas cíclicas están siempre activas, a partir de la Tarea cíclica 00 el resto de programas
se irán ejecutando desde la tarea de menor número a la de mayor de forma secuencial.
El control de tareas cíclicas sólo puede hacerse desde otras tareas (programas) cíclicos, NO puede
hacerse desde tareas de interrupción ya que daría un error.
El número de tares admitidas depende del modelo de PLC, en el CJ1M y CP1L dispone de 32 tareas
cíclicas y 255 de interrupción, mientras que en el CJ2M tendremos hasta 128 tareas cíclicas.
Nota: Las instrucciones de tareas que se encuentran en standby NO se ejecutarán, pero se mantendrá
su estado de E/S. Cuando una tarea se devuelve a su estado ejecutable, las instrucciones se ejecutarán
con el estado de E/S mantenido.
Si el número de a tarea especificada (n) es menor que el Si el número de a tarea especificada (n) es menor que el
de la tarea desde la que se llama (m), (m<n) la tarea se de la tarea desde la que se llama (m), (m<n) la tarea
ejecutará en el mismo ciclo de scan. quedará deshabilitada en el mismo ciclo de scan.
En caso contrario (m>n), la tarea será habilitada, pero En caso contrario (m>n), la tarea será deshabilitada en
no se ejecutará hasta el siguiente ciclo de scan. el siguiente ciclo de scan.
El estado de una tarea cíclica concreta, esto es si se está ejecutando o no, puede saberse
consultando el ‘flag’ de estado de la misma consultando el área de memoria TK00 a TK31
(siendo el número de tarea de la 00 a31, para los CJ/CP1, que se está evaluando).
Ejemplo de aplicación
En el programa principal (tarea cíclica 00) insertamos las instrucciones de control de programa de esa
tarea (03) y comprobamos su funcionamiento.
Al activar el programa comprobamos que inicialmente NO se producen incrementos en D10, hasta que
la habilitemos mediante el bit 0.00. A partir de entonces comenzará a contar a la vez que el bit 10.01
parpadea. Si ponemos el bit 0.00 a OFF, el programa seguirá funcionando de la misma forma hasta que
con el bit 0.01 deshabilitemos la ejecución del programa.
Realizar la secuencia anterior varias veces, comprobando que en ocasiones el bit 10.01 puede quedar
activo, incluso cuando la tarea está deshabilitada.
Habilitando y deshabilitando el programa puede quedar el bit 10.01 activo incluso con el control de
programa deshabilitado.
Para su utilización, además deberemos habilitarlas en nuestro programa con la instrucción MSKS(690)
(Set Interrupt Mask) y su ejecución será 1 ciclo de scan, cada vez que se active o desactive la entrada,
según la programación siguiente (si se usa el flanco ascendente de la entrada puede usarse sólo con la
segunda instrucción).
En la serie CJ1M existen las CPU de la serie 2x que integran 6 entradas de las que 4 pueden configurarse
como tareas de interrupción, tanto en modo entrada normal como de contador de alta velocidad.
Además, en la serie CJ se pueden configurar hasta 32 entradas de interrupción (de la 100 a la 131),
configurando la unidad de entradas. En el CJ1M las entradas de interrupción deben estar situadas en los
bancos 0 a 2 junto al bastidor de la CPU.
Tarea 1 Alimentación OFF. Se ejecuta cuando la CPU detecta un fallo de alimentación, pudiendo
ejecutar una tarea de emergencia justo antes de desconectarse.
Tareas 2 y 3 Interrupciones programadas por intervalos fijos que se establecen en la configuración del
PLC. Pueden utilizarse por ejemplo para establecer tiempos de muestreo o de lectura de
señales o unidades externas.
Funciones lógicas
Vamos a hacer un repaso de las principales instrucciones lógicas de los PLC (existen más, consultar el
manual de programación del dispositivo para más instrucciones). Las siguientes instrucciones tienen
también una equivalente para doble palabra (para 32 bits: ANDL, ORL, XORL, XNRL, COML).
Transferencia de datos
Repasamos las principales instrucciones. En la mayoría de los casos hay un equivalente de longitud
doble, que no se muestran aquí. Hay más instrucciones dependiendo del modelo de PLC, consultar el
manual de programación del dispositivo.
En una comunicación PLC Link se propone que los 8 primero bits de entradas del esclavo 1 se muestren
e los 8 primero bits de las salidas del maestro y que los 8 primero bits de entradas del segundo esclavo
se muestren en los 8 bits siguientes de las salidas físicas del maestro, de forma que con los dos esclavos
se complete la palabra de salidas físicas del maestro.
Función XFRB(062)
C: Palabra de control
S Primera palabra de origen
D Primera palabra de destino
Ejemplo:
Para mover 8 bits desde el primer bit del canal fuente hasta el
bit 8 del canal de destino, usaremos #0880
Para mover 8 bits desde el primer bit del canal fuente hasta el
primer bit del canal de destino, usaremos #0800
Función ORW(035)
I1 Canal Palabra 1
I2 Canal Palabra 2
R Canal de resultado
Programa completo:
Se sugiere:
Comparaciones especiales
Vamos a comparar el valor de una entrada analógica, de forma que en función del valor del canal de la
analógica se active un determinado bit en el canal de control. Podremos utilizar hasta 16 rangos de
comparación de forma simultánea.
En este ejemplo, en función del valor de la analógica (configurada en 4000 puntos de resolución), se
activarán los bits del canal de resultado en W0 y las salidas asociadas en el canal 1. Si está en el primer
rango (entre 0 y 1000) se activa W0.00, si está en el segundo (entre 1001 y 2000) se activará W0.01 y si
está en el tercero (entre 2001 y 4000) se activará W0.02.
Los rangos se pueden escribir mediante funciones MOV a los DM correspondientes, pero es más
adecuado acceder directamente al área de memoria del PLC, escribirlos allí y transferirlos.
Podemos comprobar que en función del valor que tengamos en el canal 2005 (y por tanto en D10), se
activará el bit de comparación del rango correspondiente (en la imagen, con un valor decimal 3000,
tendremos activo el bit W0.02 y por tanto la salida 1.02).
Comparan dos valores de tiempo en BCD y crean una comparación de ejecución ON cuando se cumple la
condición. Pueden usarse de forma directa, en serie (AND) o en paralelo (OR).
La fecha en los PLC de la serie CS/CJ/CP que disponen de reloj en tiempo real se almacena en el área de
memoria A351 a A353, que es la que debe especificarse en S1 como fecha actual.
Como vemos, el día de la semana se almacena en un cuarto canal A354, que queda fuera del área de
comparación de las instrucciones DT, por lo que si queremos tener en cuenta también el día de la
semana, tendremos que poner una comparación en BCD previa, de forma que sólo sea cierta cuando el
día de la semana coincida con el deseado.
Para visualizar la fecha y hora que hay en el PLC deberemos estar conectados al mismo, aparecerá
entonces en el bloque de navegación la opción ‘Reloj del PLC’ (si el modelo utilizado dispone de reloj),
haciendo doble clic sobre el mismo podremos visualizar, modificar y sincronizar la hora del mismo.
También podemos acceder al área de memoria específica (A351 a A354), pinchar en monitorizar y
visualizar los datos en BCD. También visualizar la palabra cuádruple A351 desde la ventana de vigilancia.
A354=0006 Sábado
A353=1605 año 2016, mes 05 (mayo)
A352=0720 día 07, hora 20
A351=2548 minuto 25, segundo 48
Ejemplo de aplicación
Queremos controlar un riego automático que se ejecute de lunes a viernes: de 17:30 a 20:30 y sábados y
domingos: de 10:00 a 21:15.
Como no tenemos en cuenta ni el día del mes, ni el mes ni el año, sólo el día de la semana (va en otro
registro A354), a unas horas determinadas, tendremos que enmascarar esos datos, por tanto en la
palabra de control C escribiremos el valor #38 en hexadecimal. Recordemos que para enmascarar los
datos utilizamos los bits 00 a 05. Por tanto:
Bit 05 Años 07 06 05 04 03 02 01 00
Bit 04 Meses Palabra de control
Bit 03 Días 0 0 1 1 1 0 0 0
Bit 02 Horas
Bit 01 Minutos
Valor a introducir 3 8
Bit 00 Segundos Los bits 06 y 07 no se utilizan, por lo que los dejaremos 0
Para escribir las horas de inicio y final utilizaré varios canales con los valores siguientes:
La forma más simple de introducir estos valores será accediendo directamente en el área DM de la
memoria del PLC y escribiéndolos allí en formato BCD o en hexadecimal y transferirlos al PLC (debe estar
en modo STOP/PROG).
También podrían introducirse con varias instrucciones MOVE hacia los canales de datos necesarios. Si
utilizamos una doble palabra (hay que moverla con MOVL) bastará en este caso con mover el dato
completo #00173000 ó #00203000.
Después haremos un programa como el siguiente, con una comparación previa hacia A354 para que se
active en función del día de la semana.
En los PLC Omron de las series CJ /CP1 son remanentes (esto es, mantienen su valor cuando el PLC pasa
de RUN a STOP o se desconecta de la red) las siguientes áreas de memoria:
• El área H (holding relay), que tiene 512 canales accesibles al usuario y puede direccionarse bit a
bit (del bit H0.00 al H511.15).
• El área de datos D, los valores aquí escritos mantienen su valor con un cambio de estado del PLC
o una falta de alimentación. El direccionamiento de esta área es por canal, esto es no podemos
referirnos a un bit concreto, sino a todo el canal (salvo en el CJ2 que sí que permite
direccionamiento bit a bit en el área de datos).
• El área auxiliar A donde está la configuración y algunos bits especiales del PLC es remanente en
algunas áreas.
Los temporizadores T (T0000 a T4095) no son remanentes en general, al cambiar el estado del PLC son
automáticamente reiniciados. Sin embargo, hay una diferencia de comportamiento, según el número de
temporizador, en cuanto a las funciones de salto (JMP/JME) y la ejecución de tareas (programas)
(TKON/TKOF):
• Los temporizadores T0000 a T2047 una vez iniciados seguirán contando incluso dentro de una
operación de salto (JMP/JME) o si están en una tarea detenida (TKON/TKOF).
• Mientras que en los temporizadores con números T2048 a T4095 mantendrán su valor
congelado dentro de la función de salto o en una tarea que no esté en ejecución.
Nota: Puede que haya algunos problemas a la hora de usar esta configuración con un CP1L-EM, no comportándose
como se describe aquí. Es posible que haya algún tipo de ‘bug’ y que tenga comportamientos imprevistos.
También es posible configurar en los bloques de función (FB) que determinadas variables sean
remanentes.
Resumiendo, si activamos el IOM Hold Bit, el estado de los bits no remanentes se mantendrá al cambiar
de STOP a RUN, incluidos temporizadores, área CIO, área de trabajo W…. Además, si en la configuración
del PLC habilitamos que se mantenga su estado, si el bit está a ON, ante un apagado del equipo
mantendría su estado y en el siguiente reinicio se conservarían los valores.
Para habilitarlo, deberemos entrar en la configuración del PLC, habilitarlo y cargar dicha configuración al
equipo.
El uso de este bit y la configuración del PLC debe hacerse con precaución ya que implica que toda la
memoria pase a ser remanente, lo que podría no ser adecuado en determinadas circunstancias. Un uso
habitual sería sólo activar dicho bit en determinadas condiciones, como podría ser un paro de
emergencia o una maniobra de mantenimiento que requiriese conservar el estado de la memoria.
En el programa siguiente podemos ver un par de ejemplos con un reloj de pulsos de 1 segundo (podría
seleccionarse otra base tiempos más precisa), uno usando un contador (trabajamos en BCD) y otro con
la función incremento en binario (en decimal).
En ambos casos hay que comentar que NO se trata de una temporización precisa, ya que podremos
tener un error de hasta una unidad de la base te tiempos usada (1 segundo en estos ejemplos) cada vez
que se active la temporización. Usando un reloj más rápido podemos minimizar este problema, pero
siempre teniendo en cuenta que tendremos un error apreciable en la temporización.
http://automatizacioncavanilles.blogspot.com.es/2016/05/omron-cj-cp1-remanencia.html
https://youtu.be/NrDQb3PjBfs
Hasta ahora hemos visto que, para direccionar un área de memoria o un valor podemos hacerlo de
forma directa o de forma indirecta. En el primer caso indicamos una dirección concreta o un valor,
mientras que en el segundo caso direccionamos hacia a un área de memoria, para después escribir o
mover el valor allí.
En el siguiente ejemplo, el primer temporizador tiene un valor fijo de temporización de 5s, mientras que
en el segundo contador el valor depende del valor que esté almacenado en el área D10. Al tratarse de
un temporizador BCD, el valor que está almacenado en D10 se interpretará con ese formato.
Si el valor del índice se encuentra en BCD lo indicaremos precedido de (*), mientras que si está en
decimal o hexadecimal lo indicaremos con (@).
Lo que indicamos con el ejemplo es que el valor de temporización (en este caso en BCD), se encuentra
en el área D con el número (hexadecimal) que tengamos en *D20.
Por ejemplo, si en *D20 tenemos un #100, el valor de temporización será el que se encuentre en D100,
mientras que, si tuviéramos allí un valor #52, el valor de temporización que leeríamos sería el que hay
en D52.
Crearemos un índice en D33, en el que haremos que lleve el valor de temperatura al registro que
situaremos entre D200 y D209. Una vez completados los datos reiniciaremos el registro y seguiremos
almacenando datos de forma indefinida ya que los datos se sobrescriben de forma continuada, una vez
alcanzado el último valor volvemos a escribir en el primero.
En este ejemplo utilizamos el valor de la entrada analógica de un CP1L, que se encuentra en el área
A642 (valores entre 0 y 1000). Para el registro de los datos y el incremento del registro usaremos un
reloj de pulsos de 1 minuto.
Registro de índices
Los registros de índice funcionan como punteros a determinadas áreas de memoria del PLC. En los
CJ/CP1 tendremos disponibles 16 registros de este tipo (del IR0 al IR15). Una vez definidos con las
instrucciones MOVR(560) y/o MOVRW(561), puedes usarse como direccionamiento indirecto.
La particularidad de estos registros es que los podemos usar en todos los programas. Esto es, los
registros son independientes para cada tarea/programa y podemos usar IR0 en todos ellos, por ejemplo
(tenemos los 16 IR/DR disponibles en todas las tareas). No obstante podemos configurar en las
propiedades del PLC que sean compartidos en todos (desmarcar la opción), pero entonces sólo
podremos usar 16 registros (en vez de 16 por tarea).
Vamos a hacer un ejemplo en el que almacenamos 10 datos a una tabla (a partir de D10 hasta D19). Una
vez que la tabla se llena, la reiniciamos volviendo a escribir los datos sobre los anteriores de forma
continuada. Para que los datos vayan cambiando, usamos un canal D100 al que le vamos sumando una
cantidad en cada toma de datos, que haremos cada 1s con un reloj de pulsos (en un entorno real los
datos cambiarían en función del sistema).
Matrices
Podemos definir una variable en modo matriz de forma que tengamos una tabla de n elementos de un
determinado tipo de datos. Para ello definiremos una nueva variable en la tabla de símbolos, le daremos
un nombre, en este caso ‘Matriz’, seleccionaremos el tipo de dato ‘INT’, el valor inicial del área de
memoria, en este caso ‘D200’, seleccionaremos el botón de ‘Configuración avanzada’ y en la pantalla
emergente marcaremos ‘Símbolo de matriz’ y el número de elementos ‘10’.
En este ejemplo crearemos una estructura de datos ‘Motor’ al que posteriormente le agregaremos los
componentes que incluye.
Tendremos por tanto una estructura con 5 miembros con distintos tipos de datos (en este ejemplo
tendremos datos UINT y BOOL).
Crearemos ahora un símbolo en la tabla de símbolos del programa que llamaremos ‘Maquina_1’ y
seleccionaremos como tipo de datos el tipo ‘Motor’ que acabamos de crear, direccionado a partir del
área W50.
Comentar que también se puede usar estructuras y crear matrices a partir de ellas, en el caso que
tuviéramos más máquinas con la misma estructura.
Anexos
Mediante una utilidad de hoja de cálculo como puede ser Microsoft Excel, podemos hacerlo de una
forma mucho más cómoda. Para ello crearemos una tabla con 4 columnas con los datos Nombre, tipo,
dirección y comentario (el comentario no es obligatorio, pero sí muy recomendable ya que se usa en la
utilidad SwitchBox). Sería como lo siguiente:
Tras pulsar en ‘Aceptar’ quedarán incorporados a la tabla de símbolos y los podremos seleccionar
directamente en el editor de programas del proyecto:
Siempre que lo hagamos desde CX-Programmer, lo que se va a importar como etiqueta en SwitchBox es
el comentario que hayamos metido en el símbolo o en el programa. Si no hemos introducido
comentarios, no se importarán.
En este caso deberás estar conectado al simulador y se importan sólo los comentarios del programa (no
los símbolos), estén o no en la tabla de símbolos. En la Utilidad SwitchBox seleccionamos (si no estamos
conectados al PLC no nos aparecerá dicha opción.
De esta forma los comentarios de los contactos se incorporan al SwitchBox, lo que facilita mucho el
seguimiento y simulación del programa.
Se importarán sólo las direcciones y los comentarios que haya en la tabla de símbolos. No es necesario
que esté conectado el simulador al programa.
Es el procedimiento más cómodo ya que en los casos anteriores se necesita que previamente se hayan
introducido los comentarios asociados a los contactos en el programa o en la tabla de símbolos (cosa
que por otro lado es muy recomendable).
Bastará con crear un archivo de textos con el bloc de notas o programa similar introduciendo los datos
de la siguiente forma:
Ejemplo de archivo válido (a la derecha la imagen que muestra los símbolos de formato):
Una vez dado el formato al archivo se guarda en formato TXT. Desde SwitchBox seleccionamos:
File > Comments > Import >>> Import From Comment File
Introducción
Los modelos más básicos de autómatas, como los CPM2A, tienen una memoria de instrucciones
relativamente limitada y no incluyen por defecto todas las instrucciones que pueden ejecutar, ya que
solo incorporan aquellas de uso más común. Por ejemplo, la instrucción PID(-) puede ser ejecutada por
los autómatas aunque por defecto no venga instalada en él, por la tanto es necesario “cargarla”
previamente.
A estas instrucciones que se pueden ejecutar pero que hay que cargar se las denomina Instrucciones de
Expansión. Los pasos que hay que seguir para cargarlas se detallan a continuación:
El primer paso es seleccionar que instrucciones de expansión hay que cargar. Para ello se hace doble clic
sobre “Instrucciones de Expansión” dentro del desplegable del proyecto de la izquierda. Se abre una
ventana y en ella seleccionamos qué “Instrucción” queremos cargar y en qué “Hueco de Expansión”.
Esto se consigue haciendo clic en “Añadir” o “Eliminar”.