Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB 3. Programación del autómata 3.1 Especificaciones del PLC .........................................................Pag. 15 3.2 Configuración en Unity ............................................................Pag. 15 3.3 Vista general del programa.......................................................Pag. 21 3.4 Escalado....................................................................................Pag. 22 3.5 Selección de salida....................................................................Pag. 27 3.6 Estados y transiciones...............................................................Pag. 31 3.7 Procedimientos en caso de emergencia ....................................Pag. 36 3.8 Algoritmos propios ...................................................................Pag. 43 Pag.14 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB 3.1 Especificaciones del PLC Para el control de la planta se utiliza un PLC M340 de Modicom. El autómata está formado por módulos o tarjetas con diversas funciones: entradas, salidas, comunicación, CPU… Estos módulos se distribuyen a lo largo del bastidor, que cuenta con su fuente de alimentación. Es posible (aunque no es necesario para este proyecto) utilizar más de un bastidor, conectándolos través de sus módulos de ampliación. Cada bastidor incluye su propia fuente de alimentación, pero sólo el principal necesitará el módulo de la CPU. Esta estructura de bastidor y tarjetas (tipo armario) hace del autómata un elemento compacto y fácil de alojar en el cuadro de mandos. Para la presente aplicación se requieren como mínimo los siguientes módulos en el bastidor: ¾ ¾ ¾ ¾ ¾ ¾ CPU con conexión a red Módulo para, al menos, 9 entradas digitales Módulo para, al menos, 4 salidas digitales a relés Módulo para, al menos, 5 entradas analógicas de termopares tipo J Módulo para, al menos, 6 entradas analógicas de propósito general Módulo para, al menos, 3 salidas analógicas de propósito general. El autómata del que se dispone en el laboratorio cuenta con un bastidor BMX XBP de 12 ranuras con las siguientes tarjetas (por orden numérico): 0. BMX P34 2020 que alberga la CPU, y permite comunicaciones vía Modbus, o por conexión Ethernet TCPIP. 1. BMX DDI 3202 K para 32 entradas digitales a 24V de tensión continua con positivo común. 2. BMX DDO 3202 K para 32 salidas digitales a transistor con negativo común. 3. BMX ART 0414 para 4 entradas TC/RTD con separación de potencial compatible con termopares tipo J. 4. BMX ART 0414 igual al módulo número 3. 5. BMX AMI 0410 para 4 entradas analógicas U/I con separación de potencial de alta velocidad. 6. BMX AMI 0410 igual al módulo número 5. 7. BMX AMO 0210 para 2 salidas analógicas U/I con separación de potencial. 8. BMX AMO 0210 igual al módulo número 7. 9. Libre 10. Libre 11. Libre La fuente de alimentación del bastidor es de la gama BMX CPS 3500, diseñada para alimentar todos los módulos del bastidor. 3.2 Configuración de Unity Para la programación del autómata se utiliza Unity Pro XL, un software de programación diseñado por Schneider Electric compatible con varios tipos de PLCs. Pag.15 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Unity Pro permite usar hasta 5 lenguajes de programación: lista de instrucciones (IL), lenguaje estructurado (ST), grafcet (SFC), lenguaje de contactos (LD) y flujo de datos (FBD). Antes de poder usar ninguno de ellos, es necesario establecer la configuración de Unity, indicándole qué tipo de PLC estamos usando, cómo nos conectamos a él, etc. En primer lugar se debe crear un nuevo proyecto para lo cual se debe hacer clic en el menú Fichero -> Nuevo. Aparecerá la siguiente ventana, en la que se pide escoger el PLC que se programará. Fig. 3.1: Configuración del PLC. En este caso, el PLC es el Modicom M340, con CPU BMX P34 2020. Una vez seleccionado aparecerá en la parte izquierda de la pantalla el explorador de proyectos. Como se puede observar, el proyecto de Unity se estructura en: 9 9 9 9 9 9 Configuración Variables y tipos de datos Movimiento Comunicación El propio programa Tablas de animación y pantallas de operación 9 Documentación El siguiente paso es indicarle al programa qué módulos de entrada y salida tiene instalado el PLC. Para ello se debe desplegar toda la carpeta de configuración, y hacer doble clic en “0: Bus PLC”. La ventana que aparece muestra un esquema del PLC y de sus ranuras. Fig. 3.2: Explorador de proyectos. Por defecto se considera que el PLC sólo dispone de 8 ranuras. Para cambiar este valor, se hace doble clic en el bastidor del PLC, y se selecciona “BASTIDOR PRINCIPAL DE 12 SLOTS”. Pag.16 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fuente de alimentación Bastidor del PLC Fig. 3.3: Configuración del bastidor del PLC. También es necesario cambiar el tipo de fuente de alimentación. Esto se consigue haciendo clic con el botón derecho sobre la fuente y seleccionando “Eliminar módulo”. A continuación, se hace doble clic sobre el espacio libre que queda y se selecciona “BMX CPS 3500”. Por último, se debe hacer clic sobre cada uno de los módulos en las ranuras de la 1 a la 8 para indicar el módulo que está instalado en cada una. En la ventana que aparecerá en cada caso, se escoge según la siguiente tabla: Módulo 1 Tipo Binario Referencia BMX DDI 3202K 2 Binario BMX DDO 3202K 3-4 Analógico BMX ART 0414 5-6 Analógico BMX AMI 0410 7-8 Analógico BMX AMO 0210 Comentario 32 entradas digitales de 24 VCC común negativo 32 salidas digitales transistor común negativo 4 entradas TC/RTD con separación de potencial 4 entradas analógicas U/I con separación de potencial de alta velocidad 2 salidas analógicas U/I con separación de potencial En el caso de los módulos 3 y 4, además es necesario indicar el tipo de termopar utilizado. Esto se hace seleccionando los módulos (doble clic sobre ellos) y seleccionando “Termo J” en el rango. Pag.17 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fig. 3.4: Selección de módulos o tarjegas. Fig. 3.5: Tipos de termopares. Una vez configurado el PLC, se debe configurar la red. Para esto se despliega la carpeta de comunicaciones (en el explorador de proyectos), se hace clic con el botón derecho sobre redes y se selecciona la opción “nueva red”. En la lista de redes disponibles se escoge (para este PLC) “Ethernet”, y se elije un nombre para la red. Luego, haciendo doble clic sobre el icono de la nueva red, se hacen los cambios Pag.18 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB pertinentes. En el caso de la red del laboratorio, sólo hay que cambiar la IP y la máscara de subred. La dirección IP asociada al autómata es 843-54-82. La máscara de subred que debe emplearse es 255-255-255-0. Para terminar con la configuración del autómata, aún deben que asociarse las direcciones de lectura y escritura con las variables correspondientes a sensores y actuadores. Por ejemplo, si un termopar del módulo 3 mide la temperatura del agua caliente y su dirección Fig. 3.6: Configuración de la red. es %IW0.3.0, se deberá añadir una variable conla dirección %IW0.3.0 llamada “Temperatura_agua_caliente” o con un nombre similar y en cualquier caso fácil de reconocer. Esto se hace abriendo la ventana de variables (doble clic en “variables elementales”) y escribiendo los nombres, direcciones y tipos de datos en la tabla que aparece. Fig. 3.7: Ventana de variables. El campo nombre sirve para dar un nombre a cada variable (no puede haber dos variables con nombres iguales), el campo tipo, indica el tipo de variable (entera, binaria, real…) y en el dirección se asigna una dirección de lectura, escritura o marca a la variable (si no se indica nada, se trata como una marca interna). En la columna “valor” se puede añadir un valor inicial para esa variable, y la columna “comentario”, cualquier comentario de interés. Las variables de entrada y salida para este proyecto son: Pag.19 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Nombre Tipo Dirección RESISTENCIA_DISPARO EBOOL %I0.1.0 TERMO_DISP EBOOL %I0.1.1 GRUPO_FRIO_DISP EBOOL %I0.1.2 BOMBA_RECIR_DISP EBOOL %I0.1.3 BOMBA_RECIR_CONF EBOOL %I0.1.4 BOMBA_ALIM_DISP EBOOL %I0.1.5 BOMBA_ALIM_CONFM EBOOL %I0.1.6 TERMO_TERMOS EBOOL %I0.1.8 BOMBA_RECIR_MARCHA EBOOL %Q0.2.0 BOMBA_ALIM_MARCHA EBOOL %Q0.2.1 RESISTENCIA_MARCHA EBOOL %Q0.2.14 TERMO_MARCHA EBOOL %Q0.2.15 TEM_CIRCUITO_AGUA_CALIENTE INT %IW0.3.0 TEM_CIRCUITO_AGUA_FRIA INT %IW0.3.1 TEM_CIRCUITO_SALIDA_DEPOSITO INT %IW0.3.2 TEM_RECIRCULACION INT %IW0.3.3 TEM_INTERIOR_DEPOSITO INT %IW0.4.0 CAUDAL_CIRCUITO_AGUA_CALIENTE INT %IW0.5.0 CAUDAL_CIRCUITO_AGUA_FRIA INT %IW0.5.1 CAUDAL_CIRCUITO_SALIDA_DEPOSITO INT %IW0.5.2 Comentario Disparo de las protecciones de la resistencia Disparo de las protecciones del grupo caliente Disparo de las protecciones del grupo frío Disparo de las protecciones de la bomba de recirculación Confirmación de marcha de la bomba de recirculación Disparo de las protecciones de la bomba de alimentación Confirmación de marcha de la bomba de alimentación Termostato del grupo caliente Orden de marcha de la bomba de recirculación Orden de marcha de la bomba de alimentación Orden de marcha de la resistencia del depósito Orden de marcha del grupo caliente Temperatura del agua del circuito caliente Temperatura del agua del circuito frío Temperatura del agua del circuito de salida Temperatura del agua del circuito de recirculación Temperatura del agua del depósito Caudal de agua caliente de entrada Caudal de agua fría de entrada Caudal de agua de salida Pag.20 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB NIVEL_AGUA_INTERIOR_DEPOSITO INT %IW0.5.3 PRESION_INTERIOR_DEPOSITO INT %IW0.6.0 CAUDAL_CIRCUITO_RECIRCULACION INT %IW0.6.3 VAL_AGUA_CALIENTE INT %Q0.7.0 VAL_AGUA_FRIA INT %Q0.7.1 VAL_CIRCUITO_RECIRCULACION INT %Q0.8.0 Nivel de agua del depósito Presión del interior del depósito Caudal de agua de recirculación Apertura de la válvula de agua caliente Apertura de la válvula de agua fría Apertura de la válvula de recirculación Esta configuración es propia de la planta, y será la misma sea cual sea el programa. Por lo tanto en caso de reprogramación del autómata, se puede copiar la configuración de esta aplicación o de cualquier otra que se haya usado en la misma planta. 3.3 Vista general del programa A continuación se describe la programación del autómata, detallando las tareas que éste llevará a cabo y la forma en que lo hará. En el anejo 1 se adjunta todo el código del programa. El programa del autómata se consta de una única tarea (la tarea maestra) que se estructura en 17 secciones. Una de estas secciones (la llamada “GuiaGemma”) está programada en Grafcet, mientras que todas las demás están en lenguaje de contactos (LD). La tarea maestra se repite periódicamente cada 10ms, aunque no todas las secciones se ejecutan en todos los ciclos. Las secciones se ejecutan en el orden que se ha considerado más lógico. Aunque es posible alterar este orden, hacerlo podría provocar comportamientos no deseados al cambiar el estado o la configuración de las variables2. Estas secciones son las siguientes: 1. Escalado_var_entrada 2. Simulacion 3. Transiciones 4. GuiaGemma 5. EMERGENCIA 6. LISTO 7. MANUAL 8. AUTO_P1 9. AUTO_P2 10. AUTO_M 11. Control_de_caudales 12. Control_de_nivel 13. Control_de_temperatura 2 Este comportamiento estará limitado a los 2 ó 3 ciclo inmediatamente posteriores al cambio de estado o de configuración. Pag.21 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB 14. Control_nivel_temperatura 15. Seleccion_de_salida 16. PWM_Resistencia 17. Escalado_var_salida A lo largo de la tarea maestra, el autómata lleva a cabo distintas acciones. La primera de estas acciones es escalar las variables de entrada y de salida, de modo que la lectura de los sensores y las órdenes de los actuadores se traduzcan a una medida del sistema internacional. Este es el objetivo de las secciones 1, 2 y 17, que establecen una relación lineal entre las magnitudes reales y las variables de entrada y salida. Estas secciones también permiten hacer una distinción entre las simulaciones y el funcionamiento real de la aplicación. La segunda de estas acciones consiste en identificar el modo de funcionamiento en el que se encuentra el proceso. Existen 5 modos de funcionamiento (o estados) en los que el proceso puede encontrarse: Listo, Manual, Automático en Parada, Automático en Marcha y Emergencia. El autómata se inicia siempre en el estado “Listo”, lo que lleva todas las bombas, válvulas y resistencias a un estado conocido. A lo largo de la ejecución del programa, el usuario podrá cambiar a los modos “Manual”, “Automático en Parada” y “Automático en Marcha”. En caso de emergencia, se pasará al estado “Emergencia”, y una vez resuelto el fallo, se volverá al estado “Listo”. Las secciones 3 y 4 controlan el paso de un estado a otro, mientras que las funciones 5 a 10, llevan a cabo las acciones específicas de cada modo de funcionamiento. Las secciones 11 a 14 ejecutan distintos algoritmos de control cuando se ha seleccionado el modo automático. Nunca se ejecuta más de una en el mismo ciclo de la tarea. En función de cómo se configuren las variables de salida, se pueden desconectar partes de estos algoritmos de control, o combinarlos con funciones de MATLAB programadas por el usuario. Por último, las secciones 15 y 16 permiten al usuario escoger la forma en que se controlan las bombas, válvulas y resistencias. El autómata registra 3 variables para cada actuador: una para MATLAB otra para la aplicación SCADA (en donde se configura manualmente) y otra con el valor real que se le da. Ésta última recibirá su valor de una de las anteriores o bien de los algoritmos de control. Para cada salida existen dos variables binarias (tres para la resistencia del depósito) que permiten escoger cuál de los tres métodos se utilizará. En el caso de la resistencia del depósito, se puede escoger también controlar con una modulación por ancho de pulsos (PWM). 3.4 Escalado Escalado de variables analógicas Las secciones de escalado se utilizan para interpretar las medidas de los transductores. Se han creado dos secciones para escalar variables (una para las variables de entrada y otra para las de salida) ambas en lenguaje de contactos LD. El motivo de esta división en dos secciones está en la primera ejecución de la tarea maestra: Si todo el escalado se hace al empezar el programa, estaremos dando una salida indeterminada Pag.22 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB durante la primera ejecución del programa (ya que no se ha escogido ninguna). Si por el contrario se escalan todas las variables al final de cada ciclo de la tarea maestra, los algoritmos no contarán con la información necesaria para ejecutarse durante el primer ciclo. Así pues las variables de entrada se interpretan en la primera sección (“Escalado_var_entrada”) y las de salida, en la última (“Escalado_var_salida”). El escalado de variables analógicas se hace mediante el bloque SCALING de Unity. Una vez colocado y habilitado este bloque en el programa, se le debe indicar qué variable se va a escalar (IN), dónde se va a guardar el resultado (OUT) y cuál es la relación entre ambas (PARA). Opcionalmente se puede guardar una palabra de estado (STATUS) que indicará si la conversión se está ejecutando de forma correcta y, en caso contrario, qué error se está produciendo. IN y OUT son variables reales, lo cuál no coincide con las variables de entrada y salida definidas para los sensores (que se interpretan como números enteros). Para solventar este problema, se usa un bloque de conversión de tipo. De esta forma el cálculo de todas las medidas de entrada (excepto las de temperatura) se hace así: Fig. 3.8: Escalado de variables de entrada (ejemplo con el caudal de agua caliente). En este ejemplo la variable entera CAUDAL_CIRCUITO_AGUA_CALIENTE se pasa a real, se escala siguiendo los parámetros indicados en ParaScCaudalCaliente, y el resultado (que es una variable real) se guarda en caudal_caliente. De forma similar, el cálculo de las actuaciones de salida se hace así: Fig. 3.9: Escalado variables de salida (ejemplo con la apertura de la válvula de agua caliente). En este segundo ejemplo la variable real val_caliente se escala según los parámetros de ParaScValvulas, y el resultado (real) se pasa a entero para guardarlo en VAL_AGUA_CALIENTE, que corresponde con el actuador de válvula del circuito de agua caliente. Pag.23 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Pag.24 Así pues, a cada variable entera de entrada y salida le corresponde una variable real interna, y una estructura de parámetros de acuerdo con la siguiente tabla. Las flechas indican las variables de origen y destino de cada conversión. Variable entera o salida (transductor o actuador) Variable real (interna) CAUDAL_CIRCUITO_AGUA_CALIENTE caudal_caliente CAUDAL_CIRCUITO_AGUA_FRIA caudal_frio CAUDAL_CIRCUITO_SALIDA_DEPOSITO caudal_salida CAUDAL_CIRCUITO_RECIRCULACION caudal_recirculacion NIVEL_AGUA_INTERIOR_DEPOSITO niv_deposito PRESION_INTERIOR_DEPOSITO presion_deposito VAL_AGUA_CALIENTE val_caliente VAL_AGUA_FRIA val_fria VAL_CIRCUITO_RECIRCULACION val_recirculacion Estructura de parámetros ParaScCaudalCaliente ParaScCaudalFrio ParaScCaudalSalida ParaScCaudalRecirculacion ParaScNivel ParaScPresion ParaScValvulas ParaScValvulas ParaScValvulas Cada estructura de parámetros PARA es del tipo Para_SCALING, que contiene 5 variables: in_min, in_max, out_min, out_max y clip. Las 4 primeras representan dos puntos de una función lineal: out_min es la salida más baja, in_min es la entrada asociada a esta salida y out_max e in_max son las correspondientes variables para la salida más alta. La última variable, clip, es del tipo BOOL, y cuando está a 1 evita que la variable de salida quede fuera de rango mediante una saturación. Los valores que se han tomado para estas variables son los de la siguiente tabla, en la que también se muestran las unidades de las variables internas (las reales). Estructura ParaScCaudalCaliente ParaScCaudalFrio ParaScCaudalSalida ParaScCaudalRecirculacion ParaScNivel ParaScPresion ParaScValvulas in_min in_max out_min out_max clip Unidades 0.0 0.0 0.0 0.0 0.0 0.0 0.0 10000.0 10000.0 10000.0 10000.0 10000.0 10000.0 100.0 0.0 0.0 0.0 0.0 10.0 0.0 0.0 20.0 16.5 19.8 10.6 90.0 5.0 10000.0 0 0 0 0 0 0 1 l/min l/min l/min l/min cm bar % Para el caso de la temperatura, los propios módulos ART realizan la conversión por sí solos (siempre que el termopar se haya configurado correctamente). Para los termopares tipo J, el valor de las variables de entrada es la temperatura en décimas de grado Celsius (1/10 ºC). Sabiendo esto, basta dividir las variables entre 10 para obtener el resultado en ºC. Fig. 3.10: Escalado de temperaturas. Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB En este caso, las variables intermedias que se corresponden con las originales son las siguientes: Variable entera (transductor) Variable real (interna) TEM_CIRCUITO_AGUA_CALIENTE TEM_CIRCUITO_AGUA_FRIA TEM_CIRCUITO_SALIDA_DEPOSITO TEM_CIRCUITO_RECIRCULACION TEM_INTERIOR_DEPOSITO tem_caliente tem_fria tem_salida tem_recirculacion tem_deposito Siguiendo este procedimiento se puede hacer todo el escalado de variables analógicas correspondiente a las secciones “Escalado_var_entrada” y “Escalado_var_salida”. Copia de variables digitales Además de escalar las variables de entrada, la sección “Escalado_var_entrada” y “Simulacion” copian el estado de las entradas binarias a variables intermedias que se puedan exportar a MATLAB: Fig. 3.11: Copia de variables digitales. Las variables intermedias que se corresponden con las entradas digitales son: Variable de entrada Variable interna RESISTENCIA_DISPARO TERMO_DISP GRUPO_FRIO_DISP BOMBA_RECIR_DISP BOMBA_RECIR_CONF BOMBA_ALIM_DISP BOMBA_ALIM_CONFM disp_resistencia disp_grupo_caliente disp_grupo_frio disp_bomba_R conf_bomba_A disp_bomba_A conf_bomba_R Simulación Existe una sección más (“Simulacion”) que da un valor a las variables de entrada cuando los sensores no están activados (es decir, cuando se está ejecutando una simulación del programa en lugar de usar el propio autómata). En el caso de que el autómata no esté conectado, pero aún así se deba realizar una simulación del programa, se deberá poner a 0 la variable “SimEstandar”, inhabilitando así la ejecución de Pag.25 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB “Escalado_var_entrada”. Al hacer esto, los valores de las variables intermedias no se actualizarán, y podrán ser forzadas desde una pantalla de operador. La sección “Simulación” y la pantalla de operador fueron creadas en un principio para la depuración del código. Sin embargo, más tarde se decidió dejarlas en el programa para permitir la ejecución de simulaciones del código. Durante una simulación, la pantalla “Entradas_simulador” podrá poner a uno o a cero las señales de alarma (disparo de las protecciones) y dar cualquier valor a las señales analógicas. La sección “Simulacion” simulará la señal de confirmación de las bombas cuando se les da la orden de marcha. Fig. 3.12: Pantalla de operador. Termostato y sensor de nivel Al comienzo de la programación del autómata, se consideró que el sensor de nivel se encontraba conectado al mismo. Sin embargo, algo más tarde, se supo que este sensor estaba desconectado (estando el escalado de su señal ya programada). Puesto que algunos algoritmos propios del autómata requieren el uso de este sensor, se ha añadido la opción de ignorar o no la lectura de este sensor en lugar de eliminarla por completo. La variable asociada puede manipularse desde la pantalla de operador. Fig. 3.13: Simulación de nivel del depósito. Por otro lado, en la documentación del proyecto anterior, el termostato del grupo caliente se consideraba una señal para desconectar la resistencia de dicho grupo. Sin Pag.26 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB embargo, aparentemente, la resistencia se conecta y desconecta automáticamente sin necesidad de intervención por parte del autómata. Ante la duda, se han dado las dos opciones añadiendo una casilla más a la pantalla de operador. Si se marca la casilla “Forzar TERMO”, se ignorará el comportamiento de esta señal y se bloqueará la salida a esta resistencia. 3.5 Selección de salida Uno de los cambios fundamentales de este proyecto frente a su predecesor es la posibilidad de controlar diferentes dispositivos por métodos distintos simultáneamente. En concreto, es posible controlar cada una de las bombas, válvulas y resistencias por separado bien de forma manual, bien mediante un algoritmo propio o bien desde MATLAB, sin influir en las otras. Así pues, es posible (por ejemplo) controlar la válvula de recirculación desde MATLAB, mientras las otras válvulas se regulan de forma automática para mantener un nivel determinado de agua en el depósito de trabajo. Con este motivo se ha añadido al programa la sección 15 (Seleccion_de_salida). La sección de selección de salida está pensada para ejecutarse después de que se escoja el valor de cada variable de salida, y por lo tanto debe estar cerca del final. Colocar esta sección antes de las secciones correspondientes a los algoritmos de control producirá retardos en la actuación de los mismos. Tampoco se debería emplazar esta sección después del escalado de variables de salida, ya que en este caso las órdenes de apertura de las válvulas se ejecutarían un ciclo más tarde que las de las bombas. Para cada bomba y para cada válvula se han creado dos variables de tipo BOOL en las que se indica qué aplicación tendrá el control sobre la variable: Bit 1 Bit 2 Abreviatura Origen del control MAT Salida controlada desde MATLAB. 1 1 MAN Salida controlada desde la aplicación SCADA. 1 0 AUTO Salida controlada mediante un lazo de control interno. 0 1 BLQD Dispositivo bloqueado. Generalmente debido a una 0 0 alarma o al estado de emergencia. Los nombres de estas variables binarias son: Salida Válvula de agua caliente Válvula de agua fría Válvula de recirculación Bomba de alimentación Bomba de recirculación Bit 1 Bit 2 VAL_CALIENTE_BIT1 VAL_FRIA_BIT1 VAL_RECIRCULACION_BIT1 BOMBA_A_BIT1 BOMBA_R_BIT1 VAL_CALIENTE_BIT2 VAL_FRIA_BIT2 VAL_RECIRCULACION_BIT2 BOMBA_A_BIT2 BOMBA_R_BIT2 El valor de estas variables puede modificarse desde la pantalla de la aplicación SCADA siempre que las salidas no se encuentren bloqueadas. En determinados estados, o ante la presencia o ausencia de alguna alarma, estos valores podrán ser modificados por el propio autómata. Por ejemplo, si el proceso se encuentra en el estado de emergencia, todas las salidas se codificarán como BLQD, si se pasa al estado manual, todas las variables pasarán a MAN, etc. Pag.27 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB En el caso de las variables analógicas (las válvulas), es necesario crear dos variables más, en las que se almacenen los valores dictados respectivamente por VIJEO y por MATLAB: Salida Válvula de agua caliente Válvula de agua fría Válvula de recirculación VIJEO MATLAB VAL_CALIENTE_VIJEO VAL_FRIA_VIJEO VAL_RECIRCULACION_VIJEO VAL_CALIENTE_MAT VAL_FRIA_MAT VAL_RECIRCULACION_MAT Cada una de estas dos aplicaciones podrá modificar el valor de su variable asociada, pero no la variable final de salida. El trabajo de la sección 15 es asociar a la variable de salida el valor de una de las anteriores (o ninguna) según su configuración. Así pues, si la válvula de agua caliente (por ejemplo) está configurada como MAN, en la sección 15, el valor de “VAL_CALIENTE_VIJEO” se copiará sobre “val_caliente”, que una vez escalada en la sección 17 se enviará a la válvula de agua caliente. De forma similar, cuando la válvula esté configurada como MAT, será VAL_CALIENTE_MAT la que se copie sobre “val_caliente”. Fig. 3.14: Selección de salida para la válvula de agua caliente. En caso de que la salida se configure como AUTO, será el mismo algoritmo seleccionado el que modifique la variable “val_caliente”. Por último, si la salida se encuentra bloqueada, será la sección que la bloqueó la que seleccione un valor para esta variable (por lo general 0). Lo mismo se repite con las otras dos válvulas. Para el control de las bombas, las variables intermedias serán de tipo EBOOL en lugar de analógicas, y los resultados se enviarán directamente a las bombas (ya que las variables binarias no se escalan), pero el procedimiento de selección de salida será el mismo: Salida Bomba de alimentación Bomba de recirculación VIJEO BOMBA_ALIM_VIJEO BOMBA_RECIR_VIJEO MATLAB BOMBA_ALIM_MAT BOMBA_RECIR_MAT En la siguiente figura se observa el caso de la bomba de alimentación. El de la bomba de recirculación es idéntico. Pag.28 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fig. 3.14: Selección de salida para la bomba de alimentación. El control de salida de las resistencias es similar al de las bombas, pero en este caso hay que tener en cuenta también factores como las alarmas de temperatura (por las que deben desconectarse las resistencias) y la posibilidad de modulación por ancho de pulsos (PWM). Al igual que con las bombas, existen variables binarias con las órdenes de VIJEO y de MATLAB: Salida Resistencia del depósito Resistencia del grupo caliente VIJEO RESISTENCIA_VIJEO TERMO_VIJEO MATLAB RESISTENCIA_MAT TERMO_MAT La resistencia del grupo caliente3 debe ser desconectada si se activa la señal de alarma del termostato (AA_alarma_termostato), pero mientras esta señal no esté activa, seguirá cumpliendo con su configuración de MAN, MAT, AUTO o BLQD. Fig. 3.15: Selección de salida para la resistencia del grupo caliente. Para la resistencia del depósito, ante la posibilidad de emplear una modulación PWM, se hacen necesarias más opciones de configuración, por lo que se añade un tercer bit: Bit 1 RESISTENCIA_BIT1 Bit 2 RESISTENCIA_BIT2 Bit 3 RESISTENCIA_BIT3 El tercer bit habilita o no la modulación PWM: 3 Como ya se mencionó en la sección de escalado, esta resistencia puede autorregularse en función del termostato. En caso de estar autorregulada, se configurará como BLQD y se inhabilitará la alarma. Para esto debe marcarse la casilla “Forzar TERMO” en la pantalla de operador. Pag.29 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Bit 1 Bit 2 Bit 3 Abreviatura Origen del control MAT PWM PWM con parámetros escogidos desde MATLAB 1 1 1 MAT Todo-Nada controlado desde MATLAB 1 1 0 MAN PWM PWM con parámetros escogidos desde VIJEO 1 0 1 MAN Todo-Nada controlado desde VIJEO 1 0 0 AUTO PWM Lazo de control interno con PWM 0 1 1 AUTO Control interno del tipo Todo-Nada 0 1 0 BLQD Bloqueado 0 0 0/1 Al igual que ocurría con la resistencia del grupo caliente, existe una alarma que prohíbe el uso de la resistencia del depósito (“AA_alarma_nivel_res”). En este caso la alarma se activa cuando el nivel de agua del depósito no cubre la resistencia. Si no hay modulación PWM, la selección de salida es similar a la de la resistencia del grupo caliente: Si, por el contrario, sí hay modulación por ancho de pulsos, se pondrá a 1 la variable “PWM_RES_Conf” (confirmación de PWM en la resistencia). Siempre que esta variable está a 1, se ejecuta la sección 16: “PWM_Resistencia”. Cuando la resistencia se encuentre en el modo AUTO PWM, será la sección del algoritmo correspondiente la que active o desactive la variable “PWM_RES_Conf”. Fig. 3.16: Selección de salida para la resistencia del depósito de trabajo. Una vez confirmado que se está modulando con la resistencia, el siguiente paso es obtener el tiempo de encendido. Al igual que ocurría con las válvulas, esta variable debe obtenerse de MATLAB, de VIJEO o de un algoritmo propio. Según el caso, se escogerá una u otra. Variable entera VIJEO MATLAB PWM_RESISTENCIA PWM_RESISTENCIA_VIJEO PWM_RESISTENCIA_MAT Es necesario recalcar que la variable entera “PWM_RESISTENCIA” representa el tiempo de encendido de la resistencia como una fracción del periodo. Esta variable almacena el valor de esta fracción en tanto por mil, mientras que las variables flotantes “PWM_RESISTENCIA_VIJEO” y “PWM_RESISTENCIA_MAT” lo hacen en tanto por ciento. Así pues será necesario multiplicar las variables flotantes por 10 y pasarlas a enteros. Pag.30 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fig. 3.17: Tiempo de encendido de la modulación PWM. Conocido el tiempo de encendido, sólo falta aplicar la modulación. Para ello se emplea el módulo PWM_INT. INP es una variable entera con la fracción de tiempo de encendido en tanto por mil (“PWM_RESISTENCIA”). PW_O es la salida binaria del módulo, que debe conectarse directamente a la variable del dispositivo (en este caso, a la resistencia). PARA es una tabla de 5 enteros en los que el primero contiene el periodo de modulación en centésimas de segundo. Este periodo debe ser un múltiplo entero de la tarea maestra. Se ha escogido un periodo de la tarea maestra de 10ms. El periodo de la modulación será de 1 segundo, con lo que la resolución máxima será del 1%. A pesar de ello, en VIJEO y en MATLAB se aceptará una precisión del uno por mil por si fuera posible bajar el periodo de la tarea maestra. Fig. 3.18: Uso del bloque PWM_INT. 3.6 Estados y transiciones Máquina de estados El funcionamiento del autómata se rige por una máquina de estado. Existen 5 estados posibles en los que puede encontrarse el autómata siempre que el programa esté Pag.31 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB en ejecución. Estos estados son: “Listo”, “Manual”, “Automático en Parada”, “Automático en Marcha” y “Emergencia”. A continuación se describe el comportamiento del autómata en cada estado. ¾ Listo: Éste es el estado de inicio, y también aquel al que se vuelve al cambiar entre manual y automático o al salir del estado de emergencia. Mientras el sistema está “Listo”, las bombas las resistencias permanecen paradas y las válvulas se mantienen cerradas. Desde el estado “Listo” se puede pasar a “Manual” o a “Automático en Parada”. ¾ Manual: En el estado manual todas las variables de salida (bombas, válvulas y resistencias) pueden ser modificadas desde la pantalla de Vijeo Citect. No se pueden iniciar ningún algoritmo de control propio del programa, ni tampoco modificar las variables desde MATLAB. Desde el estado manual sólo se puede volver al estado “Listo”. ¾ Automático en Parada: Este estado es parecido al “Manual” en lo que respecta a los algoritmos de control propios del autómata (que se mantienen parados). Una vez en este estado se puede escoger el programa que controla cada variable de salida. Cada válvula, bomba y resistencia puede controlarse desde la pantalla de Vijeo Citect, desde MATLAB o desde un lazo automático de control (ver 3.5 selección de salida). Además, se puede escoger cuál de los algoritmos de control se utilizará al pasar a marcha. Éste es el único estado desde el que se pueden configurar los PIDs para los algoritmos de control. De este estado se puede volver a “Listo” o se puede pasar a “Automático en Marcha”. Los algoritmos de control no se pondrán en marcha hasta que se pase a “Automático en Marcha”, pero las salidas configuradas como MAN o MAT pueden modificarse desde Vijeo o desde MATLAB4. ¾ Automático en Marcha: Al llegar a este estado se activan los PIDs y demás algoritmos de control de salida. Las variables que estén en configuradas para ello, se pueden seguir controlando desde MATLAB o desde la aplicación SCADA. Cuando el usuario lo considere oportuno, puede volver al estado “Automático en Parada”, pero no se puede volver directamente a “Listo” hasta detener el algoritmo de control. ¾ Emergencia: Este último estado se activa cuando se da cualquier condición de alarma que requiera parar la planta o ejecutar una rutina de emergencia. Cuando la condición de alarma deje de darse, se indicará en la pantalla de Vijeo Citect y el usuario podrá volver al modo “Listo”. Mientras haya alguna condición de alarma que active el estado de emergencia, el autómata ignorará la orden de volver al modo “Listo”. El usuario puede activar este estado poniendo a 1 la variable “Pulsador_Emergencia”. Una vez hecho esto, la variable debe ponerse a 0 antes de intentar volver al modo “Listo”. La variable “Pulsador_Emergencia” actúa como la seta o botón de pánico de otros dispositivos, forzando a que éste se pare inmediatamente. En el PLC no existe como tal un botón de emergencia, 4 Aunque la programación del autómata permite la modificación de una variable desde MATLAB en este estado, la interfaz gráfica programada en MATLAB no hará modificaciones en las bombas, válvulas y resistencias hasta que se pase a “Automático en Marcha”. Sí es posible modificar el estado de estos dispositivos de forma manual desde la pantalla de comando de MATLAB. Pag.32 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB pero en todas las pantallas de Vijeo Citect aparecerá el símbolo del pulsador con la misma función. Para controlar los cambios entre estos 5 estados se utilizan dos secciones consecutivas. La primera se denomina “Transiciones”, y está programada en lenguaje de contactos. La segunda recibe el nombre de “GuiaGemma”, y está programada en grafcet. En “GuiaGemma” se ha programado la red de Petri asociada a la Guía Gemma de la planta. Cada lugar corresponde con un estado y tiene asociada una variable, y de la misma forma cada transición tiene asociada una variable. Todas estas variables se exportan a Vijeo para que el usuario pueda conocer el estado actual y escoger el siguiente. El procedimiento para cambiar entre estados distintos del de emergencia es el siguiente: Primero la aplicación SCADA pone a 1 la variable asociada a la transición correspondiente (ver figura), una vez que el cambio se ha hecho efectivo la sección “Transiciones” pone a 0 la misma variable. De esta manera se evita que el usuario deje una transición a 1 por descuido. Fig. 3.19: Grafcet de la Guía Gemma.. Pag.33 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB La sección “Transiciones”, por lo tanto, debe poner a 0 el valor de cualquier transición que no parta del lugar asociado al estado actual. Por ejemplo: si estamos en el estado “Listo”, deben ponerse a 0 las variables “Cond_Emergencia_2”, “Boton_Modo” y “Boton_Auto_Marcha”, pero deben dejarse libres (para que el usuario las modifique) las variables “Cond_Manual” y “Cond_Auto”. En la siguiente tabla se muestran las variables que se deben modificar en cada estado: Emergencia Listo Manual Libre Libre 0 0 Libre 0 Libre 0 Libre Libre 0 0 Libre Libre 0 0 Libre 0 Cond_Emergencia Cond_Emergencia_2 Cond_Manual Cond_Auto Boton_Modo Boton_Auto_Marcha A. Parada Libre Libre 0 0 Libre Libre A. Marcha Libre Libre 0 0 0 Libre Fig. 3.20: Desactivación de las transiciones. La sección “Transiciones” también se usa para la detección de alarmas, por lo que debería ejecutarse antes de la sección “GuiaGemma” para así asegurar que se pasa al estado de emergencia en el mismo ciclo en que se detecta. Detección de alarmas La sección transiciones también debe identificar las situaciones de emergencias y gestionar la variable “Cond_Emergencia”. Para ello, además de las entradas asociadas al disparo de las protecciones y de la marca “Pulsador_Emergencia”, se comprueban diversas alarmas que requieren ejecutar alguna subrutina después de entrar en el estado “Emergencia”. Más información en 3.6 Procedimientos en caso de emergencia. Acciones asociadas a los estados Hay ciertas acciones que deben llevarse a cabo siempre que se está en determinados estados. En general estas acciones se limitan a restablecer los permisos de uso de las señales de salida, es decir, a permitir a Vijeo o a MATLAB usar estas Pag.34 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB variables. Sin embargo, las acciones propias del estado de emergencia son bastante más diversas, ya que en la sección “Transiciones” se definen varias formas de llegar a este estado. Cada estado tiene asociada una sección (salvo en el caso de “Automático en Parada, que tiene asociadas dos secciones), que lleva a cabo los cambios pertinentes. Las secciones asociadas a estos estados pueden colocarse en cualquier orden entre ellas (ya que nunca se ejecutan a la vez) pero se aconseja colocarlas después de la sección “GuiaGemma” para que sus acciones asociadas se ejecuten lo antes posible. Las acciones propias de cada estado son las siguientes: x Listo: Este estado representa la parada del sistema en el estado inicial, por lo que debe asegurarse que todos los dispositivos de salida (bombas, válvulas y resistencias) se encuentren en un estado conocido. Para ello, se configuran todas las salidas como BLQD y se les asigna un valor de 0. Para las bombas y resistencias esto significa que están desconectadas, mientras que para las válvulas indica que están cerradas a tope. x Manual: En este estado todas las salidas deben ser modificables desde la aplicación SCADA, por lo que lo único que debe hacerse es configurarlas como MAN. Hay dos excepciones que corresponden a las resistencias. Si el nivel de agua del depósito no cubre totalmente la resistencia del mismo, ésta se quedará bloqueada. De igual manera, si salta el termostato del grupo caliente (o si se ha marcado la casilla “Forzar TERMO”), la resistencia de éste grupo también se quedará bloqueada. x Automático en Parada: Las acciones de este estado son algo más complejas que las anteriores. En primer lugar, se paran las bombas que se hayan dejado en AUTO, ya que ningún algoritmo está en funcionamiento. Lo mismo ocurre con la resistencia del depósito, aunque no con la del grupo caliente. En segundo lugar se actualizan los parámetros de los PIDs. Esta operación consiste en recibir o enviar a Vijeo los parámetros actuales de estos módulos, para lo cual se usa una marca auxiliar: “PidConfig”. Si esta marca se encuentra a 1, los valores pasan de la pantalla del SCADA al PLC, mientras que si está a 0, se envían del PLC al SCADA. La misma operación se repite con cada parámetro de cada PID, transmitiendo un total de 31 variables. En tercer lugar, se configura como MAN cualquier salida que estuviera configurada como BLQD. Al igual que en el modo manual, las resistencias pueden dejarse bloqueadas si hay alarma. En este caso, una salida que se configure como AUTO o MAT se mantendrá como tal. Por último se comprueba si hay dos o más algoritmos seleccionados simultáneamente y, en caso de que los haya, se selecciona uno solo. Al haber tantas acciones previstas para este estado, se necesitan 2 secciones en lugar de una sola. x Automático en Marcha: Como en el estado anterior, cualquier salida configurada como BLQD (excepto las resistencias) se pasa a MAN. También hay que garantizar que no se activa más de un algoritmo. Si se detectan 2 ó más algoritmos activos, se desactivan todos menos uno, ya que no hacerlo causaría interferencias entre ellos. En este estado no se puede recibir la configuración de los PIDs (puesto que ya están en marcha) de modo que la variable “PidConfig” se pone a 0. Aún así, no se podrán recibir desde Vijeo los parámetros de los PIDs. Por último, si no hay activo ningún algoritmo, y aún así se han Pag.35 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB configurado las bombas o la resistencia del depósito como AUTO (o AUTO PWM), estos dispositivos se paran. x Emergencia: En el estado de emergencia todas las salidas se bloquean y todos los algoritmos se detienen. A continuación se trata la alarma correspondiente. Ver 3.6 Procedimientos en caso de emergencia para más detalle. 3.7 Procedimientos en caso de emergencia A lo largo de la ejecución del programa pueden darse diversos problemas o pueden alcanzarse situaciones peligrosas. Para todos los casos conocidos existe una rutina en dos etapas: Detectar el fallo (alarma) y Eliminarlo (procedimiento de emergencia). La detección se lleva a cabo en la sección 3, “Transiciones”, mientras que el procedimiento de emergencia se lleva a acabo en la sección 5, “EMERGENCIA”. Alarmas y prioridades En la planta se prevén las siguientes situaciones que se consideran motivo de alarma: 1º. Salto en las protecciones: En el cuadro de control existen varios dispositivos de protección. Si cualquiera de ellos corta la corriente, la planta debe pararse inmediatamente. A estos efectos el símbolo del pulsador de emergencia (en las pantallas de Vijeo Citect) se considera una protección más. 2º. Temperatura excesiva: La temperatura y la presión del depósito de trabajo no deben ser superiores a los valores máximos que los sensores pueden medir. Aún cuando el depósito aguantaría varios grados más, y aunque los sensores no se estropearan, trabajar con temperaturas o presiones desconocidas es un peligro que debe evitarse. Por este motivo, cuando se alcance el máximo valor de temperatura o de presión, se iniciará una rutina de refrigeración. 3º. Bombas y caudales: En ocasiones, por descuido, el operario podría poner en marcha una bomba sin abrir la válvula correspondiente. Para el caso de la bomba de recirculación, esta situación se puede detectar. En caso de que esto ocurra la bomba debe pararse. También deben pararse las bombas si los caudales sobrepasan los valores máximos que los caudalímetros pueden detectar. Esto último es poco probable si el caudalímetro se ha seleccionado bien, y se podrá considerar como un fallo en el propio caudalímetro o en el escalado. 4º. Nivel: El depósito de trabajo tiene una altura de 1 metro y puede almacenar hasta 30 litros5 de agua. Sin embargo sólo es posible medir la el nivel de agua cuando éste está a una altura de entre 10 y 90 centímetros desde la base. Si el nivel del depósito baja de 10 cm, se deberá activar una rutina de llenado, y si sube de 90 cm, se deberá parar la planta e indicar al operario que vacíe un poco el depósito. 5 Valor aproximado. Pag.36 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB 5º. Resistencias: La resistencia del depósito no debe ponerse en marcha si el nivel de agua del mismo no la cubre completamente. De forma similar, la resistencia del grupo caliente no debe encenderse mientras el termostato indique que la temperatura del tanque es muy alta6. Estas alarmas no requieren parar los ensayos que se estén realizando sobre la planta. Bastará con bloquear las variables. En el caso de que dos o más alarmas se dieran simultáneamente, se atenderá a la más prioritaria (ignorando las otras). Una vez que la alarma más prioritaria se haya neutralizado, se comprobará si persiste alguna otra alarma y se procederá de igual manera. El orden de prioridad es el expuesto anteriormente: Protecciones > Temperaturas > Bombas y caudales > Nivel > Resistencias. Protecciones La detección de un fallo en las protecciones se realiza a partir de las variables digitales de disparo: “disp_bomba_A”, “disp_bomba_R”, “disp_grupo_frio”, “disp_grupo_caliente” y “disp_resistencia”. El pulsador de emergencia realiza la misma acción que cualquiera de estas alarmas. Puesto que todas las variables de disparo son activas a nivel bajo, se considera que hay alarma cuando alguna de estas variables está a 0: Fig. 3.21: Situaciones que provocan el estado de emergencia. 6 Las alarmas del termostato y de la resistencia del grupo caliente no se tendrán en cuenta si el grupo se autorregula. En este caso, bastará con marcar la casilla “Forzar TERMO” en la pantalla de operador. Pag.37 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fig. 3.22: Procedimiento en caso de disparo de protecciones (primera parte). En caso de alarma debido a las protecciones, se pararán todas las bombas y resistencias, y se cerrarán las válvulas a tope. Además se activará la señal correspondiente al pulsador de emergencia (así se asegura la permanencia en el estado de emergencia cuando se rearmen las protecciones). Puesto que durante esta parada el usuario podría abrir la válvula de salida del depósito, también será necesario comprobar si el nivel del depósito baja lo bastante como para desactivar una alarma de nivel que se hubiera dado con anterioridad. No es necesario comprobar aquí si el nivel de agua baja del mínimo, ya que esto sigue detectándose en la sección de transiciones. Fig. 3.22: Procedimiento en caso de disparo de protecciones (segunda parte) . Una vez rearmadas las protecciones, se saldrá de este estado desactivando el pulsador de emergencia y activando la condición de vuelta al estado “Listo”. Temperaturas Pag.38 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB La detección de una temperatura excesiva se hace en la sección “Transiciones” comparando la temperatura del depósito con una temperatura máxima de 80 ºC. Por seguridad, también se comprueba si la presión llega a 5 bares. Fig. 3.23: Comprobación de temperatura y presión del depósito de trabajo. Una vez que se ha dado la alarma de temperatura, se procede a enfriar el tanque. En primer lugar se desconecta la resistencia del depósito. A continuación se cierran las válvulas de entrada de agua fría y caliente (para que no entre más agua en el tanque, que podría producir más vapor de agua) y se abre al máximo la válvula de agua de recirculación. Se compara la presión y la temperatura con unos niveles de seguridad a los que se pretende llegar (definidos como 4 bar y 50ºC) y se mantienen ambas bombas encendidas hasta que se alcance esa situación. Una vez que se llega a 50ºC (ó menos) y 4 bares (ó menos), se paran las bombas. Una vez comprobado que las bombas están paradas y que la presión y temperatura del depósito son aceptables, se desactiva la alarma. Fig. 3.24: Procedimiento en caso de temperatura o presión excesiva en el depósito. Cuando la alarma se haya desactivado, el usuario deberá dar la señal de pasar al modo “Listo” desde la pantalla de Vijeo Citect para salir del estado de emergencia. Si durante el enfriamiento del depósito se produjera un fallo en las protecciones (o si el usuario pulsara el botón de pánico) se suspendería esta secuencia de enfriamiento. Una vez que las protecciones se hubieran rearmado, se reanudaría el enfriamiento del depósito (incluso cuando éste ya no se encuentre a 80ºC ó 5 bares). Si Pag.39 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB por algún motivo fuera necesario abortar el algoritmo de enfriamiento (bajo la responsabilidad del usuario), se deberá hacer lo siguiente. 1º. Pulsar el botón de pánico en la aplicación SCADA. 2º. Entrar en la pantalla de operador de Unity Pro. 3º. Desmarcar la casilla “Modo estándar” (este paso no es necesario durante una simulación). 4º. Bajar los controles analógicos de “P Depósito” y “T Depósito” hasta unos valores inferiores a 4 bar y 50 ºC respectivamente. 5º. Volver a la aplicación SCADA y pulsar el botón de rearme de protecciones. 6º. Esperar aproximadamente 1 segundo hasta que aparezca el botón de pasar al estado “Listo”, pero no pasar a este estado todavía. 7º. Volver a la pantalla de operador de Unity Pro y marcar la casilla “Modo estándar” (este paso debe omitirse durante una simulación). 8º. Volver una vez más a la aplicación SCADA y pasar al estado “Listo”. Bombas y caudales La detección de caudales excesivos se hace comparando los caudales con los máximos valores posibles que los caudalímetros pueden medir. Si alguno de los 4 caudales (caliente, frío, de salida o de recirculación) llega al máximo, se da la alarma de caudales. Fig. 3.25: Detección de caudales excesivos. Para la bomba de recirculación, se considera que hay una alarma si la bomba permanece encendida durante 1 segundo mientras la apertura de la válvula de recirculación es menor del 1%. Fig. 3.26: Comprobación de bomba de recirculación. En ambos casos se pararán todas las bombas y resistencias, y se cerrarán las tres válvulas automáticas: Pag.40 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fig. 3.27: Procedimiento en caso de caudales excesivos o bomba bloqueada Las alarmas se desactivarán cuando todas las bombas y resistencias se hayan cerrado además se confirme que el caudal de agua de salida es menor que el máximo posible. No es necesario comprobar los otros tres caudales, ya que las válvulas se han cerrado. Si la alarma persistiera durante varios ciclos del programa, estando cerrada la válvula de salida de agua del depósito (o sabiendo que este caudal es normal) se podrá asumir que los caudalímetros no están bien configurados. IMPORTANTE: Con las señales que llegan al autómata no es posible saber si la bomba de alimentación está bloqueada o no. Por seguridad, se aconseja mantener las válvulas V1, V2 y V3 abiertas. Nivel El nivel de agua del depósito debe encontrarse entre 60 y 90cm para un funcionamiento normal. Si el nivel de agua baja de 60cm, la resistencia del depósito debe pararse (ya que el agua no la cubre completamente). Si el nivel se sale del rango medible (10 a 90cm) debe corregirse este nivel. Para comprobar en qué rango se encuentra el nivel se usan comparaciones en la sección de transiciones. Fig. 3.28: Comprobación del nivel del depósito. Pag.41 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB En caso de que el nivel sea mayor al máximo o menor al mínimo, se declarará el estado de emergencia, no así cuando el nivel no sea suficiente para cubrir la resistencia. Dependiendo de si el nivel es muy alto o muy bajo se llevarán a cabo unas acciones u otras. Fig. 3.29: Procedimiento en caso de nivel insuficiente (izquierda) o excesivo (derecha). En la (imagen) se observan las acciones tomadas ante un nivel demasiado bajo (a la izquierda) o demasiado alto (a la derecha). En el primer caso se abre la válvula de agua fría y se mantiene encendida la bomba de alimentación hasta que el nivel sube por encima de 30cm. En el segundo caso, se deja la válvula cerrada y se envía un mensaje al usuario para que la válvula V6 hasta que el nivel baje de 70cm. En ambos casos, se mantienen las otras bombas, válvulas y resistencias paradas o cerradas según corresponda. Una vez que el nivel es aceptable, se desactiva la alarma, y se espera a que el usuario de la señal de pasar al estado “Listo”. Si durante el llenado o vaciado del depósito se diera otra alarma más prioritaria (fallo en las protecciones, exceso de temperatura o bloqueo de la bomba de recirculación), se suspenderá el llenado o vaciado hasta que se haya atendido a esta otra alarma. Una vez hecho esto se continuará el llenado o vaciado del depósito incluso si el nivel de agua está entre 10 y 90cm. Si por algún motivo fuera necesario abortar el algoritmo de llenado o vaciado del depósito (bajo la responsabilidad del usuario), se deberá hacer lo siguiente. 1º. Pulsar el botón de pánico en la aplicación SCADA. 2º. Entrar en la pantalla de operador de Unity Pro. 3º. Desmarcar la casilla “Modo estándar” (este paso no es necesario durante una simulación). 4º. Ajustar el control analógico “L Depósito” a un valor entre 30 y 60 (valores superiores a 60 podrían permitir el uso de la resistencia del depósito sin que el agua la cubriera totalmente). 5º. Volver a la aplicación SCADA y pulsar el botón de rearme de protecciones. 6º. Esperar aproximadamente 1 segundo hasta que aparezca el botón de pasar al estado “Listo”, pero no pasar a este estado todavía. Pag.42 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB 7º. Volver a la pantalla de operador de Unity Pro y marcar la casilla “Modo estándar” (este paso debe omitirse durante una simulación). 8º. Volver una vez más a la aplicación SCADA y pasar al estado “Listo”. Resistencias Cuando se recibe la señal del termostato, se bloquea la resistencia del mismo grupo. Una vez que el termostato deja de enviar la señal, se esperan 5 minutos antes de volver desactivar la alarma. Las secciones correspondientes a los estados “Manual”, “Automático en Parada” y “Automático en Marcha” se encargan de desbloquear la resistencia cuando la alarma se desactiva. Esta alarma no fuerza al sistema a pasar al estado de “Emergencia”, ya que esta señal no es tanto una alarma como una manera de mantener la temperatura del agua en el grupo caliente. Fig. 3.30: Detección y procedimiento en caso de disparo del termostato. Cuando el nivel de agua es menor de 60cm, la sección transiciones activa la alarma “AA_alarma_nivel_res” y bloquea la resistencia del depósito y la desconecta. Las secciones correspondientes a los estados “Manual”, “Automático en Parada” y “Automático en Marcha” se encargan de desbloquearla igual que en el caso anterior. Tampoco aquí se pasa al estado de “Emergencia”, pues en muchos casos será posible seguir trabajando sin necesidad de usar la resistencia. 3.8 Algoritmos propios Uno de los cambios principales en la programación de la planta son los algoritmos propios del autómata. En ocasiones el usuario podría estar interesado sólo en parte de la planta (como el depósito o el intercambiador de calor), pero aún necesitar que otros dispositivos de la misma entren en funcionamiento. Por ejemplo: un determinado ensayo podría estar enfocado en el depósito de la planta, sin tener en cuenta las válvulas, pero el ensayo podría requerir un cierto caudal de agua de entrada o de salida neta. En este caso el usuario podrá aplicar uno de los algoritmos programados en el autómata para regular el caudal de entrada en el depósito. Para este propósito se han programado 4 algoritmos que controlan los caudales de agua fría, caliente y de recirculación, la temperatura del depósito, su nivel, o alguna combinación de los anteriores. Pag.43 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Cada algoritmo tiene asociada una sección que se ejecuta sólo cuando el algoritmo ha sido seleccionado. Se puede seleccionar el algoritmo desde el estado “Automático en Parada”, pero no se llevará a cabo ninguna acción hasta que se pase a “Automático en Marcha”. Las 4 secciones pueden ubicarse en cualquier posición entre el escalado de variables de entrada y el escalado de variables de salida. Se ha preferido colocarlas después de las secciones asociadas a los estados para asegurar que se dejan de ejecutar en el mismo ciclo en que se cambia de estado. Caudales Éste es el algoritmo básico, y su propósito es controlar el caudal de cada circuito de agua a partir de la válvula asociada. Adicionalmente, también se puede utilizar la resistencia del depósito (con o sin modulación PWM) para controlar la temperatura del depósito. Éste es algoritmo a emplear cuando se desee mantener un caudal constante durante un ensayo o cuando se pretenda usar el caudal (y no la apertura de una válvula) durante un ensayo. La posibilidad de mantener el depósito a una temperatura determinada (sin variar su nivel) permite también hacer ensayos que tengan como escenario el intercambiador de calor, ya que la temperatura de entrada de agua será constante. Variable en AUTO Válvula de agua caliente Válvula de agua fría Válvula de recirculación Resistencia del depósito Magnitud controlada Caudal de agua caliente Caudal de agua fría Caudal del circuito de recirculación Temperatura del depósito El control de caudales se realiza mediante un PID para cada caudal: Ref Caudal Válvula - PID Caudal Planta Fig. 3.31: Esquema del algoritmo utilizado para cada caudal. Se considera que los tres caudales son suficientemente independientes como para controlarse por separado, es decir, se ignoran los cambios de presión que el caudal de agua caliente pueda producir sobre el caudal de agua fría y viceversa. Pag.44 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fig. 3.31: Esquema del controlador. El bloque que se utiliza como PID es el siguiente: PV representa la medida del proceso (en este caso el caudal actual), SP es el valor de referencia, FF permite añadir una acción de Feed Foreward, OUT es la salida del PID (en este caso la apertura de la válvula) y PARA es una estructura de parámetros de configuración para el PID. El resto de las entradas y salidas permiten añadir funciones extra que no se necesita utilizar en este proyecto. Para desactivarlas es necesario conectar un 1 lógico en MAN_AUTO (para desactivar el modo manual) y un 0 en TR_S (para indicar que no copie los parámetros de inicialización). Pag.45 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fig. 3.32: Conexión del bloque PIDFF (ejemplo con la válvula de recirculación). Los valores para los parámetros de PARA que se han tomado han sido los siguientes: Parámetro id pv_inf pv_sup out_inf out_sup rev_dir mix_par aw_type en_rcpy kp ti td kd pv_dev bump dband gain_kp ovs_att outbias out_min Valor (Automático) 0 máximo valor que el caudalímetro puede medir 0 (1 para la válvula de recirculación) 100 0 0 0 0 (A determinar por el usuario) 0 ó 1 según el algoritmo 1 0 1 0 0 0 (1 para la válvula de recirculación) Significado del valor seleccionado Identificación de la estructura. Valores mínimo y máximo que el proceso puede tomar. Valores mínimo y máximo que la salida del PID puede tomar. Realimentación negativa. Estructura del PID. Filtro de contención deshabilitado. RCPY deshabilitado. Parámetros de sintonización: ganancia total, tiempo integral, tiempo derivativo y ganancia diferencial. Derivada de la salida o derivada del error respectivamente. Transición bumpless desactivada. Zona muerta desactivada. Ganancia en zona muerta. Sin reducción de desborde. Sin compensación manual. Valores límite mínimo y máximo que puede tomar la salida antes de compensación Pag.46 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB out_max outrate ff_inf ff_sup otff_inf otff_sup 100 100 0 1 0 1 manual. Máxima variación de la salida en un ciclo Valores máximo y mínimo que pueden tomar las entrada de feed foreward. Valores escalados máximo y mínimo asociados a la entrada de feed foreward. Para este algoritmo, puesto que las referencias en caudales son proporcionadas por el usuario, la acción derivativa se calculará a partir del valor del proceso (no a partir del error). Fig. 3.34: Calculo de la derivada para el algoritmo. En lo que respecta a la resistencia, existen dos maneras de utilizarla para regular la temperatura: mediante un control todo-o-nada con histéresis o con una estructura PID-PWM. Se escoge una o la otra dependiendo de si se ha habilitado la función PWM en la selección de salida (ver 3.5 selección de salida). En el caso de control todo o nada con histéresis, se actúa de una u otra manera según la temperatura T del depósito. a) T es mayor que la referencia más el margen de error: Se para la resistencia. b) T es menor que la referencia menos el margen de error: Se pone en marcha la resistencia. c) Ninguno de los casos anteriores es cierto: No se modifica la resistencia. Fig. 3.35: Control todo o nada con histéresis. Si por el contrario se habilita la modulación PWM, se utilizará un bloque de PID para regular el tiempo de encendido. El bloque PWM_INT utilizado en la selección de salida indica que está preparado para funcionar con un bloque PID_INT que tenga por tiempo de muestreo el periodo de modulación. Por este motivo se ha escogido el bloque Pag.47 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB PID_INT para la resistencia (en lugar del bloque de PID completo utilizado para las válvulas). TAG y UNIT son entradas opcionales para indicar las unidades y el nombre del PID. PV es la salida del proceso. A diferencia del bloque anterior, este bloque sólo utiliza valores enteros (por lo que será necesaria una conversión de tipo). AUTO debe recibir un 1 lógico en formato EBOOL para funcionar de forma automática (un 0 deja al bloque en manual). PARA es una matriz de 43 enteros (numerados de 0 a 42) con los parámetros del bloque y el espacio suficiente para que éste haga sus cálculos intermedios. Los primeros valores de estos parámetros son: # 0 1 2 3 4 5 Parámetro SP OUT_MAN KP TI TD TS Valor Valor de referencia 0 (A determinar por el usuario) 100 6 7 8 9 10 11 12 13 14 15 16 OUT_MAX OUT_MIN CONFIG PV_SUP PV_INF PV_MMI SP_MMI 1000 0 2#1111111100000000 Significado del valor seleccionado Valor de referencia (Set Point). Valor de salida en manual. Parámetros de sintonización: ganancia total (en tanto por ciento) y tiempos integral y derivativo (en décimas de segundo). Tiempo de muestreo en centésimas de segundo. Debe coincidir con el periodo de la modulación PWM. Salidas máxima y mínima del bloque PID. Otros parámetros (ver bajo la tabla). 0 0 0 Valores relacionados con la interfaz hombre máquina de este bloque. Estos parámetros no se usan en esta aplicación. 0 El registro “Config” es un número de 16 bits que establece la configuración de la derivada (bit 0), el modo bumpless (bit 4) y la interfaz hombre máquina (bit 8). La derivada se hace sobre la variable del proceso cuando el bit 0 está a 0, y sobre el error Pag.48 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB cuando está a 1. El modo bumpless se activa cuando el bit 4 está a 1 (y se desactiva en caso contrario). Por último, la interfaz hombre-máquina se activa poniendo el bit 8 a 0 o se inhibe poniendo este bit a 1. En caso de activarse, se debe configurar con los enteros 9 a 16. El resto de los enteros de la tabla no deben modificarse. Fig. 3.36: Control con PID. Para no perder precisión, las temperaturas se envían al PID en décimas de grado. Como puede observarse el PID recibe la temperatura del depósito y su referencia como enteros. Por último, las bombas se ponen en marcha cuando los caudales solicitados son mayores que 0, no reaccionando ante cambios de apertura de válvulas en modo manual. Fig. 3.37: Toma de decisiones para las bombas. Se recomienda dejar la bomba de alimentación en manual o controlada por MATALB a no ser que las dos válvulas de agua de entrada (fría y caliente) estén en AUTO. Nivel El algoritmo de control de nivel está pensado para ensayos que requieran mantener un determinado nivel de agua en el depósito de trabajo. Se incluye la posibilidad de renovación de agua del depósito, lo que permite ensayar controladores Pag.49 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB para mantener la temperatura de un sistema abierto (con renovación de agua). Esta es una situación común en un reactor de tipo tanque. Este algoritmo es una modificación del anterior en la que se asignan las referencias de caudal de entrada (frío y caliente) para mantener un nivel en el depósito. La estructura de control es, por lo tanto, en cascada: Fig. 3.38: Esquema de control de nivel en cascada. El usuario proporciona una referencia de nivel y la proporción de agua caliente en el caudal de entrada, el primer PID genera una referencia en caudal, a la que se añade como Feed Foreward el caudal de salida. Una vez hecho esto se divide el caudal de entrada entre las entradas de agua fría y caliente según la proporción dada por el usuario. Por último se controlan estos caudales mediante los PIDs utilizados en el algoritmo de control de caudales. Fig. 3.39: Esquema general del algoritmo. Los parámetros del PID de nivel son idénticos a los de caudales, excepto por los valores límites del valor del proceso, la salida del PID y la entrada de Feed Foreward, que corresponden a respectivamente a los límites del sensor de nivel, las sumas de los caudales máximos y mínimos de entrada, y los límites del caudal de salida. Pag.50 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Fig. 3.40: Conexión del bloque PID para el control de nivel. En caso de que una de las válvulas de agua de entrada esté en AUTO y la otra en MAN o MAT (o BLQUD), el reparto se reajustará el reparto del caudal. Por ejemplo, si la válvula caliente está en MAN, y el caudal de agua caliente Q1, el caudal frío que se tomará como referencia será el total menos Q1. En este caso se ignorará la referencia de proporción. Fig. 3.41: Proporción de caudales de entrada. Pag.51 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB Los bloques de PID de caudales de agua fría y caliente se mantienen sin cambios, sin embargo ahora la derivada se hace sobre el error, ya que la referencia no es fija. El control de la válvula de recirculación y de la resistencia del depósito se mantiene igual que en el primer algoritmo. Fig. 3.42: Calculo de la derivada. Nivel y Temperatura Ésta es una variante del algoritmo de control de nivel en la que la proporción de caudales frío y caliente se decide para mantener una consigna de temperatura. Este nuevo algoritmo está pensado para ensayos que requieran una entrada de agua a temperatura constante en el intercambiador de calor cuando (por algún motivo) no se pueda usar la resistencia del depósito. Fig. 3.43 y 3.44: Esquemas del algoritmo. Pag.52 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB En este caso el usuario proporciona la consigna de temperatura para el depósito y un PID ajusta la proporción de caudales frío y caliente. Puesto que el caudal de entrada es variable, la ganancia de este PID se autoajusta de acuerdo con la siguiente fórmula: K K0· Q L Donde K es la ganancia del controlador, Q es el caudal total de entrada, L es el nivel de agua del depósito (que al ser cilíndrico es proporcional a la masa de agua que éste contiene) y K0 es la ganancia base proporcionada por el usuario. Las unidades de litros por minuto, centímetro y grado kelvin. K0 son l min·cm·K A diferencia del algoritmo de nivel, éste sólo puede aplicarse cuando ambas válvulas están configuradas como AUTO. Además, para que el algoritmo funcione correctamente, la válvula de salida de agua (V6) debe estar abierta, de modo que el agua del depósito se renueve constantemente. La válvula de recirculación, la resistencia y las bombas se regulan igual que en el algoritmo de nivel. Temperatura Todos los algoritmos anteriores tienen la posibilidad de mantener la temperatura del agua del depósito usando la resistencia para calentarla. Sin embargo, ninguno de ellos es capaz de enfriar el agua del depósito sin vaciarlo. Puesto que es posible que varios ensayos consecutivos necesiten utilizar un mismo volumen de agua, y que ésta se encuentre a una temperatura más fría en la situación inicial que en la final. Si varios de estos ensayos se hacen consecutivamente, se precisará un algoritmo para enfriar el agua entre un ensayo y el siguiente. Éste es el motivo por el que existe este último algoritmo. Los caudales de agua fría y caliente se regulan igual que en el algoritmo de control de caudales. El caudal de agua de recirculación, por el contrario, se calcula para mantener una consigna de temperatura en el depósito. La resistencia del depósito también puede usarse para alcanzar la referencia de temperatura (cuando ésta es mayor que la actual). La resistencia y el circuito de recirculación no deben emplearse simultáneamente para mantener una determinada temperatura, ya que la acción de cada una cancelaría (en parte) la de la otra, lo que podría dar lugar a una saturación de una de las dos acciones de control. Para evitar que esto ocurra, se pone en marcha la bomba de recirculación o la resistencia en función de la desviación en temperatura: TRef - M Bomba en parada Resistencia encendida Sin cambios en la resistencia TRef TRef + M Sin cambios en la bomba Bomba en marcha Resistencia apagada Pag.53 Programación y Supervisión de Planta Piloto Utilizada como Plataforma de Ensayo de Controladores Diseñados en MATLAB TRef es la temperatura de referencia, y M es un margen de temperatura proporcionado por el usuario. De esta forma se mantiene la temperatura mediante un control con histéresis. Fig. 3.45: Esquema del algoritmo. Cuando se regula con la resistencia, ésta puede mantenerse encendida de forma fija, o con modulación PWM (igual que en los algoritmos anteriores). En cuanto al circuito de recirculación, la válvula puede dejarse con una apertura fija (configurada en MAN) o regular su apertura (en AUTO). En éste último caso, se utilizan dos PIDs en cascada: uno regula la temperatura devolviendo una consigna de caudal, mientras el otro regula el caudal abriendo más o menos la válvula. Este segundo PID es el mismo que se utiliza para el control de caudales. Fig. 3.46: Esquema del control de temperatura mediante el circuito de recirculación. Puesto que la consigna de caudal es ahora variable, en el PID de caudal se deberá hacer la derivada en el error, no en la variable del proceso. Fig. 3.47: Cálculo de las derivadas en el altorirmo. Pag.54