Funciones de Interrupción con con autómatas FATEK
9.1- PRINCIPIOS Y ESTRUCTURA DE LAS FUNCIONES DE INTERRUPCIÓN
Son muchas las acciones que tiene que realizar un FB-PLC. Por ejemplo, hay programas de usuario de 20K palabras. Existen hasta 512 puntos de entradas / salidas que tienen que ser capturas y actualizadas. Hasta 5 puertos de comunicación pueden necesitar ser atendidos, etc. Sin embargo los trabajos se tienen que ejecutar de uno en uno, ya que solo existe una CPU disponible. Para ello el FB-PLC realiza todo este trabajo de forma secuencial hasta completar todas las tareas. A continuación se volverá a la primera, repitiendo el proceso cíclicamente de manera continua. El intervalo de tiempo de cada ejecución se denomina (Tiempo de ciclo ó ciclo de scan).
La velocidad de ejecución de la CPU, es extremadamente rápida en comparación con una respuesta humana. La sensación física que una persona tiene, es que el PLC completa todos los trabajos al mismo tiempo, aunque en realidad, el PLC tarda unas decenas de milisegundos en completar la enorme carga de trabajo a la que antes nos hemos referido; Tiempo que para aplicaciones ordinarias, es más que suficiente. Sin embargo, para algunas aplicaciones que requieren una respuesta de alta velocidad, como por ejemplo un control de posicionamiento, un retraso en el tiempo de exploración significaría sin duda un sustancial aumento del error. Bajo estas circunstancias, solo el uso de las funciones de interrupción nos permitirá alcanzar este grado de precisión.
El llamado (INTERRUP), consiste en una petición de interrupción a la CPU durante el ciclo de exploración normal, cuando una respuesta inmediata es requerida. Después de recibir esa solicitud, la CPU detendrá inmediatamente todo el trabajo de exploración para iniciar y completar el servicio solicitado antes de regresar al punto de interrupción y proseguir con el ciclo normal.
El trabajo a realizar cuando se produce una interrupción se llama (SUBRUTINA) y consiste en una serie de códigos en diagrama de escalera. Este código independiente, ha de colocarse en el área de subrutina y debe comenzar con la instrucción (LBL) y su nombre de etiqueta. Dado que esta parte del programa, queda alojado en el área de subrutina, no se ejecutará en un ciclo normal. El PLC solo analiza constantemente el área del programa principal, pero no la subrutina.
En un caso normal, la CPU puede tardar unos cientos de micro-segundos en ejecutar una interrupción. Cuando hay más de una interrupción que se producen al mismo tiempo, solamente la interrupción con prioridad más alta puede ser ejecutada. Todas las demás rutinas de interrupción, esperan hasta convertirse en la prioridad más alta de las pendientes. Por consiguiente, un retraso de cientos de micro-segundos ó incluso algunos milisegundos se pueden producir en los casos más desfavorables.
En una estructura de múltiples entradas de interrupción, habrá que asignar las distintas prioridades de acuerdo con la importancia de cada una. En el caso de que una nueva petición de interrupción aparezca durante la ejecución de otra, la CPU esperará a que concluya la interrupción en marcha, antes de dar paso a la siguiente. Sin embargo, si la prioridad de la nueva interrupción, es mayor que la que está siendo ejecutada, la CPU detendrá el funcionamiento de la rutina en servicio, para ejecutar la interrupción con prioridad más alta. Una vez finalizada esta, la CPU continuará con el proceso interrumpido anteriormente. Este tipo de interrupción en una ejecución de otra interrupción, se denomina (Interrupción anidada). FB-PLC, permite hasta cinco niveles de interrupción anidada.
9.2- ESTRUCTURA Y APLICACIÓN DE RUTINAS DE INTERRUPCION.
Tanto el comando (INTERUP), como (CALL), provocan un salto a subrutina, aunque los métodos de ejecución son diferentes. Cuando el comando CALL (FUN-67) es ejecutado en el programa principal, la CPU ejecuta la subrutina con el nombre de la etiqueta designada por el comando CALL. La CPU vuelve al programa principal después que la función RTS (Retorno de subrutina) es ejecutada.
Las llamadas (INTERUP) son activadas mediante señales directas desde el proceso de la CPU, en lugar de utilizar los comandos de software. La CPU identificará la fuente de interrupción y saltará automáticamente a la subrutina con el nombre de etiqueta ya previamente establecido. Volverá al programa principal una vez se haya ejecutado la función RTI (Retorno de interrupción). Por lo tanto no es necesario ningún código de escalera en el programa principal.
Como se mencionó anteriormente, el programa de subrutina debe ser editado en la zona de programación (Sub Program). La estructura se muestra en el siguiente diagrama, donde podemos apreciar la cabeza, la cola y el cuerpo del programa. La cabeza es una etiqueta (LBL) con el nombre de la interrupción. La cola es el comando RTI (FUN-69), para decirle a la CPU que la rutina de interrupción se terminó y debe saltar al lugar de donde partió. Entre la cabeza y la cola, debemos introducir todas las acciones que necesitemos ejecutar al producirse la interrupción.
En el ejemplo siguiente podemos observar como el flanco de subida de la entrada (X0) es el encargado de activar la llamada a subrutina con la etiqueta (STOP). Esta línea de código quedará ubicada en el programa principal (Main Unit).
Por otro lado, en el área de subrutina, editaremos las acciones que necesitamos ejecutar. En el ejemplo, se activa la salida (Y0) y movemos el valor 0 al registro (R100). Utilizamos (LBL) para identificar la subrutina y (RTS) para devolver la ejecución al programa principal.
9.3- ORIGENES DE INTERRUPCIÓN, ETIQUETAS Y PRIORIDADES.
Como se describe en la sección anterior, cada (Rutina de interrupción) tiene una (Etiqueta de interrupción) única. Existen 49 etiquetas disponibles que corresponden al conjunto de etiquetas predefinidas dedicadas a las rutinas de interrupción, por lo tanto no pueden ser utilizadas para las subrutinas normales ó saltos objetivos. El sello de estas interrupciones, se construye añadiendo el sufijo "I". Por ejemplo, para el contador de alta velocidad (HSC0) sería (HSC0I). Para (X0+) sería (X0+I). Las etiquetas de las 49 fuentes de interrupción disponibles para la serie FB-PLC, se muestran en la siguiente tabla.
9.4- COMO UTILIZAR LAS FUNCIONES DE INTERRUPCIÓN DE LA SERIE FB-PLC.
Los temporizadores internos, las entradas externas, los HSC / HST, ó los PSO (Salidas de pulso), son todas aplicaciones similares de interrupción. Todos ellos se describen en esta sección.
9.5- CONFIGURACIÓN DE INTERRUPCIONES.
De hecho, la configuración de una interrupción se utiliza simplemente para determinar si la aplicación de una determinada interrupción se va a utilizar o no.
La configuración de interrupciones se puede dividir en relevantes o irrelevantes. HSTA, HSC / HST, PSO, son interrupciones relevantes y han de ser configurados mediante la herramienta de programación. Estas disparan la alarma del dispositivo, una vez se hayan configurado.
Las interrupciones de bases de tiempo internas, (1MSI / 100MSI), son interrupciones irrelevantes y no necesitan configuración alguna, tan solo necesitamos establecer la etiqueta correspondiente encabezando el subprograma a realizar. Esto implicaría que la interrupción ha sido establecida. Si es necesario utilizar más de una de estas interrupciones, se pueden utilizar los bits bajos (B0 / B7) del registro especial (R4162) para habilitar la interrupción que queramos ejecutar.
9.5.1- CONFIGURACIÓN DE INTERRUPCIONES CON WINPROLADDER.
Para acceder a la ventana de configuración, click en (Project name), click en (Sistem configuration), click en (I/O Configuration). Aparecerá la siguiente ventana.
9.5.3- CONFIGURACION DE INTERRUPCIONES PERIODICAS MEDIANTE (R4162).
Cuando alguna etiqueta de las bases de tiempo internas, aparece en la zona de subprograma, (1MSI / 100MSI), significa que la interrupción ha sido planteada y puede ser enmascarada mediante el uso de los 8 bits bajos del registro (R4162) como se muestra a continuación.
Cuando el estado del bit = 0 habilita la interrupción correspondiente, en cambio, cuando el estado del bit = 1 la interrupción queda deshabilitada. Si existen varios de estos bits habilitados (=0), la CPU solo permitirá el funcionamiento de la base de tiempo más pequeña, deshabilitando el resto. Por ejemplo, si el contenido de (R4162) es (00H), en teoría todas las interrupciones periódicas quedarían habilitadas, sin embargo tan solo (1MS) será ejecutada. El siguiente ejemplo muestra como habilitar una interrupción periódica de 100mS (100MSI). (127 decimal = 01111111 binario).
El valor predeterminado de (R4162) es 0 y representa que ninguna de las bases de tiempo está siendo enmascarada. Por lo tanto, cualquier etiqueta que reflejemos en la zona de subprograma será ejecutada de forma periódica. Gracias a esta propiedad, el usuario puede cambiar de forma dinámica las bases de tiempo o hacer una pausa con tan solo modificar el valor de (R4162).
9.6- EJEMPLOS DE RUTINAS DE INTERRUPCIÓN.
EJEMPLO-1. Control de posicionamiento mediante sensor de posición.
(Configuración de X0 como entrada de interrupción positiva).
DISPOSITIVOS: (X0) Sensor de posición, (X1) Parada emergencia, (Y0) Motor.
PROGRAMA PRINCIPAL. Cuando (M0) pasa a ON, (Y1) también pasará a ON y el motor arrancará. La parada de emergencia (X1) anula esta acción en caso de emergencia.
SUBRUTINA. Cuando el sensor (X0) pasa a ON activado por el movimiento del proceso, se ejecuta automáticamente la subrutina correspondiente como podemos observar en la siguiente imagen.
En el cuerpo del programa, además de resetear (Y0) utilizamos la función (74.IMDIO), actualización inmediata de entradas y salidas, de esta forma suprimimos el retraso causado por el tiempo de exploración.
EJEMPLO-2. Interrupción periódica (1MS).
PROGRAMA PRINCIPAL. Utilizamos el bit (M0) para habilitar o deshabilitar esta interrupción, realizando un movimiento de datos al registro (R4162).
SUBRUTINA. Una vez habilitado, el sistema ejecuta automáticamente la subrutina cada milisegundo. Mediante las funciones (15.INC) ó (16.DEC) podemos realizar un contaje del número de ciclos.
9.7- FILTRO DIGITAL. CAPTURA DE ENTRADAS.
En muchas aplicaciones de alta velocidad, debemos configurar las entradas de interrupción con el propósito de evitar pérdidas de señal. Incluso podemos capturar señales con periodos transitorios inferiores al tiempo de exploración del PLC. Todo ello podemos realizarlo fácilmente en la ventana (I/O Configuration) del Winproladder.
La serie FB-PLC puede soportar hasta 36 puntos de captura de entradas (X0/X35) en función de la unidad principal que se utilice. Las entradas (X0/X15) se pueden configurar como entradas de interrupción por hardware, para aplicaciones de respuesta rápida. Estas entradas son utilizadas para señales de baja frecuencia pero de corta duración, incluso inferiores a un ciclo de scan.
Hay 6 grupos de entradas digitales en la ventana de configuración, como podemos observar en la siguiente imagen. (I/O Configuration) > (Input Setup).
Podemos utilizar dos métodos para el filtrado digital, por frecuencia ó tiempo, simplemente seleccionando la casilla correspondiente en cada grupo. Siempre que la señal de entrada tenga una duración superior al tiempo que hemos seleccionado, el PLC la reconocerá. Cuando trabajamos en modo frecuencia sería a la inversa, la frecuencia de la señal de entrada debe ser inferior a la preselección para ser reconocida por el autómata.
EJEMPLO-1. Cuando la entrada está configurada como entrada de captura y es utilizada en aplicaciones de recuento, es necesario que el periodo de esta señal sea mayor que dos veces el tiempo de exploración, para poder obtener un funcionamiento correcto. Por ejemplo, si la frecuencia de entrada es de 50Hz, entonces el tiempo de exploración del PLC, debe ser inferior a 10 milisegundos para obtener un recuento sin perdidas. (50Hz corresponde a un periodo de 20 milisegundos).
Autor: Manuel Rodriguez Perez