Implementacion GRafcet
Implementacion GRafcet
3.1. Introducción
El Grafcet es un modelo del controlador lógico que resuelve un problema de automatización. Para
implementar ese controlador es necesario construir o programar el controlador lógico de forma que
cumpla todas las reglas de evolución de ese Grafcet modelo. En particular hay que poner especial
atención en 2 situaciones especiales, que son la existencia de etapas inestables, y la existencia de
transiciones activas por flanco.
Se trata de desarrollar un programa que reproduzca la forma de evolucionar del Grafcet, con todas sus
reglas, teniendo en cuenta las etapas estables e inestables y sus acciones asociadas y las transiciones por
flanco si las hubiera.
Existen varios métodos más o menos sistemáticos para desarrollar el programa cumpliendo lo anterior.
En todos los casos se asocia una variable interna (1 bit) a cada etapa (el bit estará a 1 si la etapa está
activa y a cero en caso contrario). Las ecuaciones lógicas tratarán de ir modificando esos bits según
cambian las entradas de acuerdo a las reglas de evolución del grafcet.
El algoritmo se ejecutará en un bucle infinito, de forma que estará continuamente comprobando las
entradas para modificar las etapas y las salidas. Si el algoritmo se implementa mediante un autómata
programable hay que tener en cuenta que el bucle infinito lo realiza internamente el autómata, y
únicamente se deben escribir las instrucciones del algoritmo (sin el bucle).
Definición.
Un autómata programable industrial es un equipo electrónico, programable en lenguaje no informático,
diseñado para controlar en tiempo real y en ambiente de tipo industrial procesos secuenciales.
Arquitectura funcional.
Módulo de Memoria de
Sensores
entradas programa
Memoria Memoria
interna Procesador de datos
Ordenador
Consola de
Actuadores Módulo programación
Control de
de salidas
Periféricos Unidad HMI
Autómata
Zonas de memoria.
• Memoria de programa. Contiene el programa (instrucciones) que se ejecutan en el procesador. Se
puede dividir en dos partes:
- Una parte ROM que contiene el programa monitor (para comunicar el autómata con los módulos de
programación). Este programa monitor es fijo.
- Una parte RAM con batería (puede ser también FLASH EEPROM) en la que se almacena el
programa del usuario. Evidentemente, este programa se mantiene aunque se desconecte el autómata.
• Memoria interna. Almacena los valores de entradas y salidas, además de otras variables internas del
autómata. En ella se almacenan variables de 1 solo bit (se accede a ellas bit a bit).
1
Control de Procesos. Tema 3.
Constitución física.
Entradas Entradas Módulo E/S
digitales analógicas especial
Fuente CPU
de
alimentación
Salidas Salidas
digitales analógicas
• El módulo de CPU contiene el procesador, la memoria y algunos controladores de periféricos (puerto
serie, por ejemplo). En algunos modelos, el módulo de CPU contiene además algunas entradas y/o
salidas digitales.
• Los módulos adicionales se conectan al módulo de CPU por medio del bus.
Descripción funcional.
El API es un computador, y por lo tanto, su funcionamiento consiste en la ejecución de un determinado
programa situado en la memoria de programa. Se pueden distinguir dos modos de funcionamiento: modo
de programación, y modo de ejecución.
• Modo de ejecución (modo RUN). En este modo se ejecuta el programa de control del usuario, con
lo que el autómata controla el proceso. En este modo, cuando se inicializa el Autómata, el programa
monitor salta a la dirección donde está el programa de control, y se empieza a ejecutar éste. La
ejecución del programa de control se lleva a cabo de forma cíclica, ejecutando ciclos de scan de
forma indefinida
Se llama ciclo de trabajo (o de scan) al conjunto de tareas que el autómata lleva a cabo (instrucciones
que se ejecutan) de forma cíclica cuando está controlando un proceso. El ciclo de trabajo más habitual
tiene la siguiente estructura:
2
Control de Procesos. Tema 3.
Inicialización
Procesos comunes
Gestión de periféricos
Ciclo de
trabajo
Ejecución del
programa de usuario
Refresco de E/S
• La inicialización se lleva a cabo una sola vez cada vez que se pone en marcha el autómata.
• Los procesos comunes son funciones de autodiagnóstico y de programación del Watch Dog (perro
guardián). No dependen del proceso que se esté controlando.
• El refresco de E/S significa la actualización de la memoria de entradas con los valores actuales de las
entradas (de los sensores), y la actualización de las salidas (actuadores) con los valores almacenados
en la memoria de salidas.
• El bucle infinito lo realiza el autómata por su cuenta (no se tiene que programar).
El tiempo de scan es el tiempo que tarda el autómata en realizar un ciclo completo, y depende de la
velocidad de la CPU, que se puede medir mediante el tiempo de ejecución de una instrucción de la
CPU (que depende del tipo de instrucción) o con el tiempo que tarda en ejecutar 1024 instrucciones.
Valores típicos del tiempo de scan están en el orden de varios milisegundos.
El tiempo total de un ciclo de trabajo para un autómata determinado es variable, en función del tamaño
(número de instrucciones) del programa de usuario. Incluso para un mismo programa de usuario el tiempo
de scan puede variar en función de las instrucciones que se ejecuten, pues puede haber instrucciones de
salto o instrucciones condicionadas que no siempre se ejecutan.
Se define el tiempo de respuesta como el tiempo que tarda en cambiar una salida en relación al cambio
de una entrada. Este tiempo es importante, pues determina la rapidez con que el autómata reacciona ante
cambios del proceso. El tiempo de respuesta es variable y depende del tiempo de scan, del tiempo de
retraso de activación/desactivación de los dispositivos físicos de entradas y salidas, y del momento en que
se produce el cambio de la entrada. El peor caso es aquel en el que la entrada cambia justo después de que
se haya actualizado la memoria de entradas. En ese caso se ejecuta un ciclo de programa completo en el
que el nuevo valor de esa entrada no es tenido en cuenta. Después se actualiza la memoria de entradas,
con lo que se lee el valor de la entrada. Después se ejecuta otro ciclo de programa en el que el nuevo valor
de la entrada sí se tiene en cuenta, para después actualizar las salidas. El tiempo de respuesta máximo es,
pues
TRESP,MÁX= 2TCICLO +TOUT
3
Control de Procesos. Tema 3.
donde TOUT es el tiempo que tarda el dispositivo físico de salida en activar realmente la salida, y que
depende del tipo de salida (relé, transistor o triac).
Lenguajes de programación.
El lenguaje de programación más utilizado en los autómatas programables es el diagrama de contactos
(Ladder Diagram ó diagrama de escalera). Está basado en los automatismos cableados por medio de
contactores, que fueron los primeros en implementarse. Representa las ecuaciones lógicas por medio de
contactos. Hay 3 tipos de elementos fundamentales.
• Contacto normalmente abierto (NA) . Representa un contacto que está abierto si la variable
asociada vale 0, y que se cierra si la variable asociada vale 1.
• Contacto normalmente cerrado (NC) ⁄ . Representa un contacto que está cerrado si la variable
asociada vale 0, y que se abre si la variable asociada vale 1.
• Bobina. Representada por un círculo. Representa el valor de una variable. Cada salida tiene asociada
una bobina. Si esta bobina tiene corriente (el diagrama de contactos la activa), la salida está a 1, y si
no tiene corriente la salida está a cero. Además puede haber bobinas asociadas a variables internas
(por ejemplo las que representan cada etapa del proceso).
a y x
Cada línea ó red (que contiene una bobina o varias) representa una línea del programa. El autómata
ejecuta las líneas de arriba abajo. En este caso, calcularía y ⋅ b + a y lo asignaría a y (es decir, sería
equivalente a la instrucción de asignación en C ( y = ( y & (~ b)) | a ) ). Después calcularía a ⋅ y y lo
asignaría a x ( x = a & (~ y ) ). Esta sería la fase de ejecución del programa de usuario, que se repetiría
de forma cíclica según se ha visto.
4
Control de Procesos. Tema 3.
La función lógica implementada por los contactos de una red se suele denominar condición de
activación, ya que cuando esta condición es 1 la variable de salida (bobina) asociada se activa, mientras
que cuando vale 0 la variable de salida se desactiva..
Hay una serie de reglas que se deben seguir para dibujar correctamente un diagrama de
contactos. Algunas de ellas son:
• A la derecha de la bobina no puede haber contactos.
• En una red puede haber varias bobinas en paralelo.
• La conducción a través de los contactos solo se produce de izquierda a derecha.
El valor que toma la variable x es el que tendría con la bobina normal, pero negado ( x = a ⋅ y ).
• Bobina de enclavamiento. En algunos autómatas se representa mediante un círculo que en el interior
tiene una letra “L” (o “S”) o una letra “U” (o “R”). Si es una letra “L” (Latch) o “S” (Set) indica que
la variable correspondiente se activa, quedando activa aunque después se haga cero la condición de
activación. Para desactivar la variable tiene que utilizarse una bobina de desenclavamiento con la letra
“U” (Unlatch) o “R” (Reset).
a y x
S
Esos elementos básicos solo permiten programar relaciones lógicas simples. Evidentemente esto
no es suficiente para controlar un proceso complejo. Además de estos elementos hay otros que permiten
implementar funciones más elaboradas. Se colocan en lugar de las bobinas simples, según:
a b
Instrucción
c o función
El significado es que cuando el autómata llega a la línea correspondiente, ejecuta la instrucción o función
compleja en función de que los contactos den un valor 1 ó 0, es decir, en función de que la condición de
activación sea 1 ó 0. En algunos casos, si dan un valor 0 la función no se ejecuta, en otros la ejecución es
diferente en función de que se tenga un 1 ó un 0. Entre estas funciones se pueden destacar:
• Instrucción END. Indica el final del programa.
• Temporizadores.
• Contadores.
• Instrucciones de salto.
• Operaciones binarias (mover bytes, sumar, multiplicar, comparar, etc).
• Refresco de E/S. Permite refrescar las E/S cuando se desee, independientemente del refresco
automático que se produce cada ciclo de scan.
• Funciones matemáticas complejas (senos, cosenos, exponenciales).
• Control de interrupciones.
• Funciones especiales de comunicaciones (transmisión o recepción de datos).
Temporizadores y contadores.
Unas de esas funciones de importancia especial son los temporizadores y contadores. Un contador es un
número que se incrementa (o decrementa) cada vez que hay un pulso en una variable (que puede ser una
entrada o una variable interna). Un temporizador es un contador cuya entrada de cuenta es el reloj del
sistema (una señal cuadrada de frecuencia constante). Normalmente se utiliza escribiendo un valor inicial
en él. El valor del temporizador va disminuyendo conforme cuenta los pulsos del reloj hasta que llega a
5
Control de Procesos. Tema 3.
cero, momento en el cual activa una variable de fin de temporización. De esta forma se pueden medir
tiempos (se puede activar una salida durante un tiempo determinado, o esperar un tiempo determinado
hasta activar una salida, o medir el tiempo transcurrido entre las activaciones de dos entradas, etc.).
Un ejemplo de función de temporizador del autómata Omron es:
0001 0002
TIM
001
SV
TIM001 1000
6
Control de Procesos. Tema 3.
Existen varios métodos más o menos sistemáticos para desarrollar el programa cumpliendo lo anterior.
En todos los casos se asocia una variable interna (1 bit) a cada etapa (el bit estará a 1 si la etapa está
activa y a cero en caso contrario). Las ecuaciones lógicas tratarán de ir modificando esos bits según
cambian las entradas de acuerdo a las reglas de evolución del grafcet.
El algoritmo se ejecuta en un bucle infinito, de forma que estará continuamente comprobando las entradas
para modificar las etapas y las salidas.
Se describirán dos métodos, uno simplificado que únicamente es válido cuando no se dan las 2
situaciones especiales comentadas anteriormente (la existencia de etapas inestables, y la existencia de
transiciones activas por flanco), pero que resulta en un algoritmo muy sencillo.
El segundo método, más complejo, sirve para cualquier situación (etapas inestables, flancos, etc).
En los dos casos se describirá en primer lugar el algoritmo resultante suponiendo que la implementación
se realiza en un autómata programable. Posteriormente se comentarán las diferencias para implementarlo
en otra plataforma.
MÉTODO 1.
Este método es el más simple. Los bloques que contiene el programa son:
1. Inicialización de las etapas mediante el bit de inicio (este bloque solo se ejecuta una vez).
2. Detección de flancos (de las entradas que dan lugar a transiciones por flanco y de las etapas con
acciones impulsionales).
3. Desactivación/activación de las etapas anteriores/posteriores a las transiciones franqueables.
4. Activación de las salidas.
5. Definición de temporizadores y contadores.
En esencia el método simplificado 1 sirve para problemas sencillos que se resuelven normalmente con 1
solo grafcet. Ver el ejemplo 1 como muestra.
7
Control de Procesos. Tema 3.
En el bloque 3 debe haber una ecuación (red) para cada transición del grafcet. La ecuación
de activación/desactivación de una transición debe tener en cuenta todas las etapas anteriores y todas las
posteriores. Ejemplos:
E3 P
3 RSET E3
P SET E4
E1 P
1 RSET E1
P+B B SET E2
SET E3
2 3
3 1 E3 E1 P
RSET E1
P RSET E3
SET E2
2 4 SET E4
E1 P
1
RSET E1
P RSET E2
AP
E1 A P
2 3 RSET E1
SET E3
En el bloque 4 se introduce una red para cada salida. Cuando son acciones a nivel, la red debe incluir
todas las etapas en las que la salida está activa, incluyendo además las condiciones lógicas
correspondientes si la salida está condicionada. Por ejemplo, si la salida Y debe estar activa en la etapa 3
y en la etapa 2 condicionada a B, la ecuación de salida sería:
E2 B Y
E3
Si se trata de una acción impulsional (por ejemplo incrementar un contador), la condición de activación
debe ser el flanco de subida de la etapa, que se genera en el bloque 2 (con la instrucción DIFU o DIFD en
el autómata OMRON, o con un contacto de pulso en otros autómatas). Por ejemplo, para detectar un
flanco de subida en A se pondría en el bloque 2:
A A flanco_A
DIFU flanco_A P
ó
8
Control de Procesos. Tema 3.
Ejemplo 1.
Sea el cilindro de la figura.
I C D
A R
Inicialmente se supone que el cilindro está en la posición más a la izquierda. Al pulsar P se debe mover
hacia la derecha hasta que se active el detector C, para volver después a la izquierda. Si se pulsa Q debe
hacer lo mismo, pero esperando 1 segundo antes de empezar a moverse, y llegando a D en lugar de C.
Para mover el cilindro se actúa sobre las electroválvulas A y R.
Una posible solución es:
P Q⋅P t/3/1s
A 1 3 A
C D
R 2 4 R
I I
En las siguientes páginas se puede ver el programa que implementa el grafcet anterior siguiendo el
método 1. Se observa que la implementación es muy simple. En este caso no hay problemas por no darse
ninguno de los casos descritos anteriormente.
9
Diagrama Ladder - 1:1 EJ1M1.SWP 18/10/01 20:17:09 Página 1
Principal 1 - EJEMPLO 1
Red 1 - Inicialización
00000 253.15
SET
FIRST_SCAN
010.00
E-0
RSET
010.01
E-1
RSET
010.02
E-2
RSET
010.03
E-3
RSET
010.04
E-4
SET
010.01
E-1
SET
010.02
E-2
SET
010.03
E-3
SET
010.04
E-4
Diagrama Ladder - 1:6 EJ1M1.SWP 18/10/01 20:17:09 Página 2
SET
010.00
E-0
SET
010.00
E-0
Red 8 - Salidas
E-1 A
010.03 TIM000
E-3
E-2 R
010.04
E-4
Red 10 - Tempor./Contad.
00039 010.03
TIM
E-3
000
#0010
00041
END(01)
Control de Procesos. Tema 3.
MÉTODO 2.
Este método da lugar a un programa más largo, pero funciona bien aunque haya estados inestables o
transiciones por flanco. Los bloques que contiene el algoritmo son:
1. Inicialización de las etapas mediante el bit de inicio (este bloque solo se ejecuta una vez).
2. Copia de las variables etapas en las variables copia_de_etapas.
3. Detección de flancos en las receptividades.
4. Desactivación de las etapas anteriores a las transiciones franqueables, utilizando para las
validaciones las variables copia_de_etapas.
5. Activación de las etapas posteriores a las transiciones franqueables, utilizando para las validaciones
las variables copia_de_etapas. De esta forma solo se avanza una etapa. La activación va después de
la desactivación para garantizar que sea prioritaria.
6. Ejecución de las acciones impulsionales que correspondan. Aquí hay que incluir las acciones
impulso y las acciones memorizadas. Un ejemplo podría ser un contador que cuenta el número de
veces que se ha activado la etapa (es una acción impulsional asociada al paso de 0 a 1 de la etapa). La
condición de ejecución de las acciones impulsionales es etapa ⋅ copia _ de _ etapa .
7. Si ha habido cambios en alguna etapa (estado inestable) volver al bloque 2.
8. Activación de las acciones a nivel. En este caso el estado es estable.
9. Definición de los temporizadores y contadores. Puede ser necesario poner algunos de los
temporizadores o contadores junto con las acciones impulsionales en el bloque 6 (si se ven afectados
por eventos de flanco o por etapas inestables).
COPIA DE ETAPAS
DETECCIÓN DE FLANCOS
DESACTIVACIÓN DE ETAPAS
ACTIVACIÓN DE ETAPAS
ACC. IMPULSIONALES
NO
¿ETAPAS=COPIA_ETAPAS?
SI
ACC. DE NIVEL
TEMPORIZADORES
/CONTADORES
Con este método cada vez que se ejecutan los bloques 4 y 5 el sistema avanza como mucho una etapa. En
un mismo ciclo de scan el sistema va evolucionando (ejecutando el bloque 4 y 5) hasta que se alcanza un
estado estable. Si hay estados inestables intermedios, el programa activa la variable correspondiente
durante un instante, activando las acciones impulsionales y memorizadas. Las acciones de nivel se
ejecutan solo cuando el estado es estable. Ver Ejemplo 2 como muestra.
Si hay receptividades por flanco, su validez se comprueba cada vez que se ejecuta el bloque 3. De esta
forma un flanco solo es utilizado en un paso de evolución de etapas, pues en el siguiente paso se queda
inactivo. En los autómatas de Omron la detección de un flanco en una variable se implementa con la
función DIFU. Ver Ejemplo 3.
12
Control de Procesos. Tema 3.
Ejemplo 2.
Sea el disco de la figura:
D
I
M
Q
P
C
El disco tiene una placa metálica que es detectada por los detectores inductivos C y D. Inicialmente se
supone el disco en el punto C. Cuando se pulsa P el disco empieza a girar. Si el interruptor I está
desactivado, el disco debe girar hasta que llegue a C. Si el interruptor I está activado cuando la placa pasa
por D, el disco debe parar hasta que se desactive I. En cualquier caso, además se debe activar una salida
impulso Q de duración suficiente cada vez que se activa D.
Una posible solución es:
P
1 M
D
2 P Q
I
3 M
C
Si I no está activado, la etapa 2 es inestable, por lo que se pasa de la 1 a la 3. Eso significa que la variable
M (de nivel) debe permanecer activa (no se debe desactivar ni siquiera en un pequeño pulso). Por otra
parte, la acción impulsional Q debe activarse, pues se pasa por la etapa 2.
El programa con el método 1 (la parte de activaciones/desactivaciones) es:
E0 P
RSET E0
SET E1
E1 D
RSET E1
SET E2
E2 I
RSET E2
SET E3
E3 C
RSET E3
SET E0
y la parte de las salidas
13
Control de Procesos. Tema 3.
E1 M
E3
E2
DIFU Q
En este caso, si I no está activo, cuando se active D la etapa 2 (inestable) se activará en una red y se
desactivará en la siguiente, por lo que la acción impulsional no llegará a ejecutarse. Esto se podría
resolver colocando la acción impulsional inmediatamente después de la ecuación de activación de E2. El
inconveniente es que el procedimiento deja de ser sistemático. La salida impulsional (obtenida con la
instrucción DIFU) es un pulso de duración igual a 1 ciclo de scan.
Por otra parte, el comportamiento depende del orden en que se escriban las ecuaciones, que en principio
es arbitrario. En este caso puede suceder que el sistema esté un ciclo de scan completo en la etapa 2, lo
que provocaría el apagado de M durante ese ciclo. Esto sucedería si el programa se escribiera en el orden:
E2 I
RSET E2
SET E3
E3 C
RSET E3
SET E0
E0 P
RSET E0
SET E1
E1 D
RSET E1
SET E2
En este caso, si I=0 cuando se activa D, como la última ecuación es la que activa E2, esta etapa
permanecerá activa hasta el siguiente ciclo de scan. Cuando se ejecuten las ecuaciones de las salidas, el
motor se desactivará durante un ciclo. En este caso sí se ejecutaría la acción impulsional que daría una
señal de pulso de 1 ciclo de duración.
La implementación por el método 2 resuelve estos problemas (ver programa adjunto). Hay que poner
especial atención a la ejecución de la acción impulsional. Si simplemente se asociara la salida Q a la
etapa E-2, ésta estaría activa durante un pulso muy corto dentro del mismo ciclo de scan, desactivándose
antes de que acabe el programa y el autómata refresque las salidas. Para garantizar que ese pulso aparece
en la salida se ha utilizado un temporizador, que garantiza un pulso de una anchura determinada (en este
caso 100 ms).
14
Diagrama Ladder - 1:1 EJ2M2.SWP 19/10/01 11:31:46 Página 1
Red 1 - Inicialización
00000 253.15
MOV(21)
FIRST_SCAN
#0000
010
Etapas
SET
010.00
E-0
00003
JME(05)
00004 253.13
MOV(21)
ON
010
Etapas
020
CopiaEtapas
Aqui se ejecutan las acciones impulsionales. De esta forma, si hay etapas inestables, sus acciones impulsionales se ejecutan.
Cuando E-2 es inestable, el pulso de la variable E-2 dura muy poco. Para tener un pulso mayor hay que utilizar las
instrucciones adecuadas. En este caso se ha programado un pulso de 100 ms en la salida Q.
00033 100.01
TIMH(15)
Q
000
#0010
00035 TIM000
RSET
100.01
Q
Si ha cambiado alguna etapa se produce un salto para volver a ejecutar las activaciones/desactivaciones.
Si no cambiado ninguna etapa significa que el estado es estable, por lo que se sigue el programa.
00037 253.13
CMP(20)
ON
010
Etapas
020
CopiaEtapas
00039 255.06
JMP(04)
EQUALS
1
Se ha llegado a un estado estable. Aquí se ejecutan las acciones activas por nivel.
E-1 M
010.03
E-3
00044
END(01)
Control de Procesos. Tema 3.
Ejemplo 3.
Considérese el problema de poner en marcha y apagar un motor con el mismo pulsador. Cuando se pulsa
P (en el flanco de subida) el motor se pone en marcha. Cuando se vuelve a pulsar P (el siguiente flanco de
subida) el motor debe pararse.
Una posible solución (la más simple) sería:
P↑
1 M
P↑
El método 1 no sirve para implementar este grafcet, ya que sus ecuaciones (activación/desactivación más
salidas) serían:
P
DIFU Z
E0 Z
RSET E0
SET E1
E1 Z
RSET E1
SET E0
E1 M
17
Diagrama Ladder - 1:1 EJ3M2.SWP 19/10/01 11:32:17 Página 1
Principal 1 - EJEMPLO 3
Red 1 - Inicialización
00000 253.15
SET
FIRST_SCAN
010.00
E-0
RSET
010.01
E-1
00003
JME(05)
00004 253.13
MOV(21)
ON
010
Etapas
020
CopiaEtapas
00006 000.01
DIFU(13)
P
030.00
Z
Si ha cambiado alguna etapa se produce un salto para volver a ejecutar las activaciones/desactivaciones.
Si no cambiado ninguna etapa significa que el estado es estable, por lo que se sigue el programa.
00020 253.13
CMP(20)
ON
010
Etapas
020
CopiaEtapas
00022 255.06
JMP(04)
EQUALS
1
Se ha llegado a un estado estable. Aquí se ejecutan las acciones activas por nivel.
E-1 M
00026
END(01)
Control de Procesos. Tema 3.
Ejemplo 4.
Considérese el sistema:
A B
P
M
D
Por una cinta accionada por el motor M circulan palets espaciados regularmente de forma que cuando hay
un palet en A hay otro en B. Sobre estos palets puede o no haber un producto sobre el que hay que
realizar dos operaciones A y B (podrían ser de llenado, taponado, etiquetado, control, etc). El detector
inductivo D detecta el paso de los palets, mientras que la fotocélula P detecta la presencia de producto (si
hay producto se activa antes que D). Supondremos en este caso que las operaciones A y B están
temporizadas (duran 1 y 2 segundos respectivamente).
Una posible solución (solución a) al problema es:
E3
0 M
P⋅D↑
1 A
t/1/1s
D↑
3 B
t/3/2s
En este caso si vienen dos productos consecutivos se activan dos etapas de la secuencia, realizándose las
dos operaciones. El programa que implementa esta solución se realiza sin problemas con el método 1 o
con el método 2, tal y como se muestra a continuación.
20
Diagrama Ladder - 1:1 EJ4AM1.SWP 19/10/01 11:32:48 Página 1
Red 1 - Inicialización
00000 253.15
MOV(21)
FIRST_SCAN
#0000
010
Etapas
SET
010.00
E-0
00003 000.07
DIFU(13)
D
030.00
Pulso_D
SET
010.01
E-1
SET
010.00
E-0
SET
010.02
E-2
SET
010.03
E-3
E-0 E-3 M
Diagrama Ladder - 1:8 EJ4AM1.SWP 19/10/01 11:32:48 Página 2
E-1 A
E-3 B
Red 10 - Temporizadores
00029 010.01
TIM
E-1
000
#0010
00031 010.03
TIM
E-3
001
#0020
00033
END(01)
Diagrama Ladder - 1:1 EJ4AM2.SWP 19/10/01 11:33:08 Página 1
Red 1 - Inicialización
00000 253.15
MOV(21)
FIRST_SCAN
#0000
010
Etapas
SET
010.00
E-0
00003
JME(05)
00004 253.13
MOV(21)
ON
010
Etapas
020
CopiaEtapas
00006 000.07
DIFU(13)
D
030.00
Pulso_D
SET
010.00
E-0
Si ha cambiado alguna etapa se produce un salto para volver a ejecutar las activaciones/desactivaciones.
Si no cambiado ninguna etapa significa que el estado es estable, por lo que se sigue el programa.
00032 253.13
CMP(20)
ON
010
Etapas
020
CopiaEtapas
00034 255.06
JMP(04)
EQUALS
1
Se ha llegado a un estado estable. Aquí se ejecutan las acciones activas por nivel.
E-0 E-3 M
E-1 A
E-3 B
Red 17 - Temporizadores
00043 010.01
TIM
E-1
000
#0010
00045 010.03
TIM
E-3
001
#0020
Diagrama Ladder - 1:19 EJ4AM2.SWP 19/10/01 11:33:08 Página 3
00047
END(01)
Control de Procesos. Tema 3.
0 M
P⋅D↑ Temp
1 A
D↑
2 B
t/2/2s Temp= 1s / E1 ⋅ D ↑ / 0s
En este caso la etapa 0 está siempre activa. El temporizador se ha expresado según la norma IEC848. En
este caso no basta con poner la etapa 1, pues cuando pasan dos botes seguidos ésta no se desactiva, y por
lo tanto el temporizador no se resetearía.
El programa que implementa esta solución no se puede realizar con el método 1. En cambio sí se puede
realizar con el método 2 (ver anexo).
26
Diagrama Ladder - 1:1 EJ4BM2.SWP 19/10/01 11:33:30 Página 1
Red 1 - Inicialización
00000 253.15
MOV(21)
FIRST_SCAN
#0000
010
Etapas
SET
010.00
E-0
00003
JME(05)
00004 253.13
MOV(21)
ON
010
Etapas
020
CopiaEtapas
00006 000.07
DIFU(13)
D
030.00
Pulso_D
ON E-0
#0010
Si ha cambiado alguna etapa se produce un salto para volver a ejecutar las activaciones/desactivaciones.
Si no cambiado ninguna etapa significa que el estado es estable, por lo que se sigue el programa.
00030 253.13
CMP(20)
ON
010
Etapas
020
CopiaEtapas
00032 255.06
JMP(04)
EQUALS
1
Se ha llegado a un estado estable. Aquí se ejecutan las acciones activas por nivel.
E-0 A B M
E-1 A
E-2 B
Red 17 - Temporizadores
00043 010.02
TIM
E-2
001
#0020
00045
END(01)
Control de Procesos. Tema 3.
Cuando hay varios grafcets interrelacionados es conveniente utilizar el método 2, pues eso nos garantiza
el funcionamiento correcto. Las reglas del forzado se tienen en cuenta en la implementación en el
programa del autómata, sin más que introducir un pequeño cambio en el citado método 2. La
modificación consiste en que después del bloque 5 se deben ejecutar los forzados que correspondan a las
variables copia de etapas activas. Al situar los forzados después de las activaciones se garantiza que éstos
son prioritarios a aquellas. Si hay forzados por flanco, debe obtenerse el flanco de la copia de la etapa
donde está el forzado (esto se añade al punto 3).
1. Inicialización de las etapas mediante el bit de inicio (este bloque solo se ejecuta una vez).
2. Copia de las variables etapas en las variables copia_de_etapas.
3. Detección de flancos. Aquí se incluyen tanto los flancos de las receptividades que se requieran,
como de las variables copia_de_etapas (para los forzados por flanco).
4. Desactivación de las etapas anteriores a las transiciones franqueables, utilizando para las
validaciones las variables copia_de_etapas.
5. Activación de las etapas posteriores a las transiciones franqueables, utilizando para las validaciones
las variables copia_de_etapas. De esta forma solo se avanza una etapa. La activación va después de
la desactivación para garantizar que sea prioritaria.
6. Ejecución de forzados. Para ello se utiliza como validación las variables copia_de_etapas. Si el
forzado es por flanco la validación será el flanco en la variable copia_de_etapa correspondiente (no
de la etapa).
7. Ejecución de las acciones impulsionales que correspondan. Aquí hay que incluir las acciones
impulso y las acciones memorizadas. Un ejemplo podría ser un contador que cuenta el número de
veces que se ha activado la etapa. La condición de ejecución de estas acciones es simplemente
etapa ⋅ copia _ de _ etapa .
8. Si ha habido cambios en alguna etapa (estado inestable) volver al paso 2.
9. Activación de las acciones a nivel. En este caso el estado es estable.
10. Definición de los temporizadores y contadores. Puede ser necesario poner algunos de los
temporizadores o contadores junto con las acciones impulsionales en el bloque 7 (si se ven afectados
por eventos de flanco).
Ejemplo 5.
Considérese el ejemplo 4. Se desea añadir las siguientes funciones.
• Habrá un pulsador de MARCHA y otro de PARADA. Al iniciarse el sistema todo estará desactivado
hasta que se pulse el pulsador de marcha. Cuando se pulse el pulsador de parada el sistema acabará
de procesar los elementos que lleguen hasta que se active D sin que haya pieza (P=0) y sin que quede
producto en B que procesar. En ese momento se pasará a la situación de inicio.
• Además habrá un pulsador de EMERGENCIA (pulsador con enclavamiento). Este pulsador produce
un corte de la alimentación del motor de la cinta y de los procesos A y B, independientemente del
automatismo. Cuando se pulse el pulsador de emergencia hay que desactivar los procesos A y B y la
cinta (aunque ya estén de hecho apagados por falta de alimentación) y poner en marcha una sirena.
Esa sirena se desactivará cuando se pulse un pulsador de parada de sirena. Para rearrancar el sistema
(después de resolver manualmente el problema que hubiera) se deberá rearmar el pulsador de
emergencia (ponerlo a off) y después pulsar el pulsador de marcha.
29
Control de Procesos. Tema 3.
• Además habrá un pulsador de parada de cinta temporal, y un pulsador de reinicio de cinta, que se
utilizarán para parar la cinta en cualquier momento.
Una solución podría ser:
E3 ⋅ E 4
4
0 M
ParoCinta
P ⋅D ↑
5
1 A G2
MarchaCinta
t/1/1s
6
2
ParoSirena ⋅EMERGENCIA
D↑
G1
7
3 B
EMERGENCIA
t/3/2s
G3
8 F/G1:{}/G2:{}/G3:{}
MARCHA
9 F↑/G1:{0}/G2:{4}/G3:{6}
10 EMERGENCIA
E6
E 0 ⋅ E 2 ⋅ E 3 ⋅ D ↑ ⋅P
11 F/G1:{}/G2:{} SIRENA
EMERGENCIA
G0
El grafcet maestro (G0) es el que controla los modos de marcha y parada y la emergencia.
El programa que implementa los grafcets anteriores se muestra a continuación:
30
Diagrama Ladder - 1:1 EJ5M2.SWP 19/10/01 11:33:51 Página 1
Red 1 - Inicialización
00000 253.15
MOV(21)
FIRST_SCAN
#0000
010
Etapas
SET
010.08
E-8
00003
JME(05)
00004 253.13
MOV(21)
ON
010
Etapas
020
CopiaEtapas
00006 000.07
DIFU(13)
D
030.00
Pulso_D
00008 020.09
DIFU(13)
CE-9
030.01
PulsoE9
00051 030.02
RSET
Auxiliar
000.15 020.10 010.10
E-10
EMERGENCIA CE-10
SET
010.00
E-0
00089 030.02
SET
Auxiliar
020.11 000.15 010.08
E-8
CE-11 EMERGENCIA
CE-8
Red 30 - Forzados
00099 020.08
ANDW(34)
CE-8
010
Etapas
#FF00
010
Etapas
00101 030.01
ANDW(34)
PulsoE9
010
Etapas
#FF00
010
Etapas
ORW(35)
010
Etapas
#0051
010
Etapas
Diagrama Ladder - 1:32 EJ5M2.SWP 19/10/01 11:33:51 Página 4
00104 020.11
ANDW(34)
CE-11
010
Etapas
#FFC0
010
Etapas
Si ha cambiado alguna etapa se produce un salto para volver a ejecutar las activaciones/desactivaciones.
Si no cambiado ninguna etapa significa que el estado es estable, por lo que se sigue el programa.
00106 253.13
CMP(20)
ON
010
Etapas
020
CopiaEtapas
00108 255.06
JMP(04)
EQUALS
1
E-1 A
E-3 B
Red 39 - Temporizadores
00121 010.01
TIM
E-1
000
#0010
00123 010.03
TIM
E-3
001
#0020
00125
END(01)
Control de Procesos. Tema 3.
La diferencia fundamental reside en que el autómata realiza un ciclo de scan del que el usuario solo tiene
que programar una parten (según los algoritmos descritos), mientras que el bucle infinito, la actualización
de entradas y salidas, la gestión de comunicaciones, la gestión de temporizadores, etc, las realiza sin que
el usuario tenga que programarlas. Eso quiere decir que el algoritmo de control debe insertarse denrto de
un bucle infinito, de manera que cada ciclo de ese bucle se ejecute el algoritmo, se refresquen las señales
de entrada y de salida y se realicen las tareas necesarias de comunicación o de gestión de temporizadores.
a
Æ y = (( y & (~ b)) | a )
a y
SET x
Æ if (a & (~ y )) x =1
Con respecto a las señales de entrada y salida, es conveniente tener una copia de las mismas en memoria,
y trabajar con esas copias en las ecuaciones de activación, desactivación y salida, realizando una
actualización de las entradas y salidas físicas cada bucle (igual que hacen los autómatas). Esto garantiza
que se cumplen las reglas de evolución del grafcet.
La detección de flancos requiere crear una variable que sea una copia de aquella cuyo flanco se quiere
detectar. En C, el código equivalente a la instrucción DIFU podría ser:
Flanco_A=A&(~copia_A);
Copia_A=A;
Una mención especial merecen los temporizadores. En los autómatas programables existen instrucciones
que permiten contar un tiempo de retardo de forma muy sencilla. La implementación de estas
instrucciones depende mucho de la plataforma y de los temporizadores hardware de que disponga.
Supóngase por ejemplo que se tiene un temporizador hardware de 16 bits que se incrementa cada cierto
tiempo desde 0 hasta 65535, volviendo después a 0 y así indefinidamente. Este temporizador permite
contar un tiempo máximo de 65536*periodo segundos. Si no hay un temporizador hardware capaz de
contar un tiempo suficientemente largo habría que utilizar una interrupción periódica para implementar un
temporizador por software (un contador que se incrementa cada interrupción).
35
Control de Procesos. Tema 3.
if (E1&(~copia_E1)) tiempo_final=tiempo_actual+tiempo_a_contar;
copia_E1=E1;
if (E1&(tiempo_actual>tiempo_final)) bit_fin_tiempo=1;
else bit_fin_tiempo=0;
Donde se ha supuesto que se quiere contar un tiempo tiempo_a_contar desde que se activa la etapa E1
hasta que se activa el bit bit_fin_tiempo, que se desactiva una vez se desactiva la etapa E1. Ese bit se
utilizaría para la transición de salida de la etapa, por ejemplo. Se supone que tiempo_actual se incrementa
por hardware cada cierto periodo. La detección del flanco de la variable E1 es necesaria para que la
variable tiempo_final solo se defina una vez en el momento que se activa E1.
El código anterior podría servir para contar diversos retardos de tiempo de un grafcet utilizando
únicamente un temporizador hardware.
36
Control de Procesos. Tema 3.
Los módulos conectados en el autómata del laboratorio son: módulo de 16 salidas digitales a relé,
módulo de 4 entradas analógicas, módulo de 2 salidas analógicas, y módulo de fuente de alimentación
adicional (para los módulos analógicos).
37
Control de Procesos. Tema 3.
Instrucciones de programación.
Las fotocopias adjuntas recogen el conjunto completo de instrucciones (funciones) disponibles para
programar el CQM1. Cada instrucción tiene uno o varios operandos, que son las variables (posiciones de
memoria) sobre las que actúa. Estos operandos pueden ser bits individuales o canales de 16 bits. Algunos
operandos pueden no ser una posición de memoria, sino un valor numérico concreto. En ese caso se
escribe el signo # delante del número. Por ejemplo la función MOV actua sobre canales de 16 bits:
0001 0002 0001 0002
MOV MOV
001 #4034
DM0010 DM0010
Mueve el contenido de la dirección Mueve el valor 4034 a la
001 a la dirección DM0010 dirección DM0010
Algunas funciones pueden ser activas por nivel o por flanco de subida. Cuando son activas por flanco de
subida tienen una @ delante. Esas funciones solo se ejecutan una vez cuando la condición de ejecución
cambia de 0 a 1.
Las instrucciones más importantes del CQM1 son:
TIM. Temporizador de retardo a ON. La salida se activa al cabo de un tiempo desde que se ha puesto a 1
la condición de activación.
TIMH. Igual que TIM, pero permite contar intervalos de tiempo más cortos (temporizador de alta
velocidad).
CNT. Contador descendente. Cada vez que la condición de ejecución pasa de cero a 1 el contador se
decrementa.
CNTR. Contador reversible. Igual que el anterior, pero con dos entradas de contaje: una para incrementar
y la otra para decrementar.
38
Control de Procesos. Tema 3.
JMP. Salto. Cuando la condición de ejecución es 0 se produce el salto hasta intrucción JME con el
mismo número. Si la condición es 1, el programa continúa (no hay salto).
JME. Punto de llegada de un salto.
IL. Si la condición de ejecución es 0, todas las redes entre ésta y la siguiente instrucción ILC se fuerzan a
0, independientemente del valor que tengan. Si la condición es 1, no se hace nada.
ILC. Indica el final de la zona de actuación de la instrucción IL anterior.
CMP. Compara dos canales (variables de 16 bits). El resultado de la comparación afecta al bit EQ (se
pone a 1 si los valores son iguales), al bit LE (se pone a 1 si el primer valor es menor) y al bit GR (se
pone a 1 si el primer valor es mayor). Cualquiera de estos bits se puede utilizar en la instrucción
siguiente para hacer algo o no en función de la comparación.
ANDW. Realiza la función lógica AND entre dos canales, bit a bit.
Instrucciones especiales.
39