Você está na página 1de 130

DESARROLLO DE PROGRAMAS DE SUPERVISIN Y CONTROL APLICADOS A LA AUTOMATIZACIN DE LIMPIEZA DE TANQUES INDUSTRIALES

Autor: Jorge Guardia Guilln

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

DESARROLLO DE PROGRAMAS DE SUPERVISIN Y CONTROL APLICADOS A LA AUTOMATIZACIN DE LIMPIEZA DE TANQUES INDUSTRIALES

CSIF ENSEANZA SEVILLA

EDITA:

Autor: Jorge Guardia Guilln


Pgina 2 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Jorge Guardia Guilln email: j.guardia.guillen@gmail.com Diseo de portada e imgenes: Jorge Guardia Guilln. Todas las imgenes que aparecen en esta obra han sido elaboradas por el autor o son de dominio pblico. EDITA: CSIF Enseanza Sevilla. Impreso en Espaa Printed in Spain ISBN: 978-84-692-9663-9 Depsito Legal: SE 2798-2010
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorizacin escrita del autor, la reproduccin total o parcial de esta obra por cualquier medio o procedimiento, bajo las sanciones establecidas en las leyes, incluidos la reprografa y el tratamiento informtico.
Pgina 3 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

1 OBJETIVOS ______________________________________________________________________ 5 2 TECNOLOGAS INTEGRADAS______________________________________________________ 6 2.1 Sistema de Control _____________________________________________________________ 2.1.1 CPU ______________________________________________________________________ 2.1.2 Sistema de Entradas y Salidas __________________________________________________ 2.1.3 Interfaz de Comunicacin - Programacin ________________________________________ 2.1.4 Lenguajes de programacin y la norma IEC 1131-3_________________________________ 6 6 7 8 8

2.2 Sistema SCADA ______________________________________________________________ 11 2.2.1 Programas secuenciales, interactivos y orientados a eventos _________________________ 13 3 DESCRIPCIN DE LA INSTALACIN Y MODOS DE FUNCIONAMIENTO_______________ 14 4 ELECCIN DE SOLUCIONES _____________________________________________________ 15 4.1 Sistema de Control ____________________________________________________________ 4.1.1 Autmata _________________________________________________________________ 4.1.2 Lenguaje de Programacin. Software utilizado____________________________________ 4.1.3 Configuracin Hardware _____________________________________________________ 4.2 Sistema SCADA ______________________________________________________________ 4.2.1 Software de programacin ___________________________________________________ 4.2.2 Comunicacin SCADA Sistema de control ____________________________________ 4.2.3 Estructura del programa SCADA ______________________________________________ 15 15 19 20 20 20 22 24

5 PROGRAMAS DE CONTROL_______________________________________________________ 26 6 PROGRAMA DE PLC _____________________________________________________________ 27 6.1 Estructura de Bloques del Programa de PLC ______________________________________ 27 6.2 Funcionamiento de los Distintos Mdulos._________________________________________ 6.2.1 FC104 Activacin Bits Forzados. ______________________________________________ 6.2.2 FC101 Bits de Configuracin _________________________________________________ 6.2.3 FC3 Organizacin del Programa _______________________________________________ 6.2.4 FC12 Reset Valores Receta y Variables Programa _________________________________ 6.2.5 FC5 Tipo de Paso Actual ____________________________________________________ 6.2.6 FC2 Seguridades Inicio Receta ________________________________________________ 6.2.7 FC6 Clculo de Cambio de Paso_______________________________________________ 6.2.8 FC1 Preparacin Solucin Limpieza____________________________________________ 6.2.9 FC7 Envo Solucin Limpieza ________________________________________________ 6.2.9 FC8 Recirculacin__________________________________________________________ 6.2.10 FC9 Vaciado _____________________________________________________________ 6.2.11 FC10 Activacin Salidas ____________________________________________________ 6.2.12 FC50 Clculo de Defectos___________________________________________________ 6.2.13 FC4 Datos Cabecera DB100 _________________________________________________ 6.2.14 FC11 Datos Entradas Salidas PLC SCADA __________________________________ 28 28 28 28 29 30 30 31 32 33 34 34 34 34 35 35

6.3 Tabla de Entradas, Salidas, Marcas y Temporizadores ______________________________ 36 7 Cdigo Programa PLC _____________________________________________________________ 42 8 Cdigo Programa SCADA __________________________________________________________ 85 9 Formularios Desarrollados_________________________________________________________ 128 Bibliografa ______________________________________________________________________ 130

Pgina 4 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

1 OBJETIVOS
Los objetivos que se persiguen en el presente documento son: Automatizar el proceso de limpieza de una instalacin industrial de productos alimentarios. Para ello, se parte de un cuaderno de especificaciones del cliente. Resolver la aplicacin con productos existentes en el mercado de la automatizacin. Dichos equipos debern cumplir las especificaciones de la instalacin, ser robustos y ampliables. Disponer de un servicio tcnico de asistencia y post-venta, sin olvidar el apartado de precios y repuestos. Programar los distintos equipos seleccionados. La arquitectura consiste en un PC en el cual se ejecuta un programa SCADA que supervisa, controla y modifica las recetas del sistema de control. El sistema de control se encarga de controlar y gestionar los distintos elementos de campo como bombas, electrovlvulas, sensores,...

PC con SCADA

Sistema de control PLC Elementos de campo

PC programacin Figura 1

Pgina 5 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

2 TECNOLOGAS INTEGRADAS 2.1 Sistema de Control


Actualmente en la industria, el sistema de control ms empleado es el autmata programable o PLC, siglas de Program Logic Control (Controlador lgico programable). Puede definirse como un equipo electrnico programable diseado para controlar, en tiempo real y en ambiente industrial, procesos secuenciales. Un autmata programable se puede considerar como un sistema basado en un microprocesador, siendo sus partes fundamentales la Unidad Central de Proceso (CPU), la Memoria y el Sistema de Entradas y Salidas (E/S).

Memoria:
- Sistema operativo - Memoria de E/S - Programa de usuario - Pilas - Variables internas

Microprocesador

Reloj

Fuente de alimentacin

Registros y unidades de E/S

Expansin E/S - E/S adicionales - E/S especiales

Expansin BUS - Red industrial

Acopladores E/S
- Sensores - Actuadores

E/S serie
- RS485 - RS232

Figura 2

2.1.1 CPU
La CPU realiza el control interno y externo del autmata y la interpretacin de las instrucciones del programa. A partir de las instrucciones almacenadas en la memoria y de los datos que recibe de las entradas, genera las seales de las salidas. La memoria puede estar estructurada de la siguiente forma:

Memoria del programa de usuario: aqu introduciremos el programa que el autmata va a ejecutar cclicamente.

Memoria de la tabla de datos: se suele subdividir en zonas segn el tipo de datos (como marcas de memoria, temporizadores, contadores, etc.).

Pgina 6 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Memoria del sistema: aqu se encuentra el programa en cdigo mquina que monitoriza el sistema (programa del sistema o firmware). Este programa es ejecutado directamente por el microprocesador / microcontrolador que posea el autmata.

Memoria de almacenamiento: se trata de memoria externa que empleamos para almacenar el programa de usuario, y en ciertos casos parte de la memoria de la tabla de datos. Suele ser de uno de los siguientes tipos: EPROM, EEPROM, o FLASH1.

Sus funciones son:

Vigilar que el tiempo de ejecucin del programa de usuario no excede un determinado tiempo mximo (tiempo de ciclo mximo). A esta funcin se le suele denominar Watchdog (perro guardin).

Ejecutar el programa de usuario. Crear una imagen de las entradas, ya que el programa de usuario no debe acceder directamente a dichas entradas (para reducir el tiempo scan).

Renovar el estado de las salidas en funcin de la imagen de las mismas obtenida al final del ciclo de ejecucin del programa de usuario (por el mismo motivo anterior).

Chequeo del sistema.

2.1.2 Sistema de Entradas y Salidas


El sistema de Entradas y Salidas recoge la informacin del proceso controlado (entradas) y enva las acciones de control del mismo (salidas). Los dispositivos de entrada pueden ser pulsadores, interruptores, finales de carrera, termostatos, presostatos, detectores de nivel, detectores de proximidad, contactos auxiliares de rels y contactores, etc. Por su parte, los dispositivos de salida son tambin muy variados: Pilotos indicadores, rels, contactores, arrancadores de motores, vlvulas, etc. En general, las entradas y salidas (E/S) de un autmata pueden ser discretas, analgicas, numricas o especiales. Las E/S discretas se caracterizan por presentar dos estados diferenciados: presencia o ausencia de tensin, rel abierto o cerrado, etc. Su estado se puede visualizar mediante indicadores tipo LED que se iluminan cuando hay seal en la entrada o cuando se activa la salida. Los niveles de tensin de las entradas ms comunes son 24 V cc/ca, 48 V cc/ca y 220 V ca. Los dispositivos de salida ms frecuentes son rels, transistores y triacs. Pueden ser a 24 Vcc/ca, 120 Vac y 220 Vac.
1

EPROM siglas de Erasable Programmable Read-Only Memory. Se borran mediante luz ultravioleta. EEPROM siglas de electrically-erasable programmable read-only memory. FLASH es una forma evolucionada de la memoria EEPROM. Funcionan a mayor velocidad. Pgina 7 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Las E/S analgicas tienen como funcin la conversin de una magnitud analgica (tensin o corriente) equivalente a una magnitud fsica (temperatura, presin, etc.) en una expresin binaria de 11, 12 o ms bits, dependiendo de la precisin deseada. Esto se realiza mediante conversores analgico - digitales (DAC's). Las E/S numricas permiten la adquisicin o generacin de informacin a nivel numrico, en cdigos BCD, Gray u otros. La informacin numrica puede ser entrada mediante dispositivos electrnicos digitales apropiados. Por su parte, las salidas numricas suministran informacin para ser utilizada en dispositivos visualizadores (de 7 segmentos) u otros equipos digitales. Por ltimo, las E/S especiales se utilizan en procesos en los que con las anteriores E/S vistas son poco efectivas, bien porque es necesario un gran nmero de elementos adicionales, bien porque el programa necesita de muchas instrucciones. Entre las ms importantes estn: Entradas para termopar y termoresistencia: Para el control de temperaturas. Entradas rpidas (contadores para encoder por ejemplo) Salidas de trenes de impulso: Para el control de motores paso a paso. Entradas y salidas de regulacin P+I+D (Proporcional + Integral + Derivativo): Para procesos de regulacin de alta precisin. Salidas ASCII: Para la comunicacin con perifricos inteligentes (equipo de programacin, impresora, PC, etc.).

2.1.3 Interfaz de Comunicacin - Programacin


Todo autmata, salvo casos excepcionales, posee la capacidad de poder comunicarse con otros dispositivos (como un PC, otros autmatas, pantallas de visualizacin, etc.). Lo normal es que posea una E/S serie del tipo RS-232 / RS-422. Hoy da este tipo de interfaz est evolucionado a Profibus2 o Ethernet. A travs de esta lnea se pueden manejar todas las caractersticas internas del autmata, incluida la programacin del mismo, y suele emplearse para monitorizacin del proceso y para diagnostico de averas.

2.1.4 Lenguajes de programacin y la norma IEC 1131-3


En la actualidad cada fabricante emplea su propio lenguaje de programacin, lo que significa, que existe una gran variedad comparable con la cantidad de PLCs que hay en el mercado.

Profibus (Process Field Bus) es un popular estndar de bus de campo. Se trata de una red abierta, estndar e independiente de cualquier fabricante
Pgina 8 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Las formas que adopta el lenguaje de programacin usado para realizar programas se denominan representacin del lenguaje de programacin. Hasta el momento existen tres tipos de representaciones como las ms difundidas en el mbito mundial, las cuales cada fabricante las emplea para su programacin, estas son: - Lista de instrucciones (AWL) - Plano de funciones y (FUP) - Diagrama contactos o plano de contactos (LADDER) Es obvio, que la gran diversidad de lenguajes de programacin da lugar a que cada fabricante tenga su propia representacin, originando cierta incomodidad al usuario cuando programa ms de un tipo de PLC. Con el objetivo de uniformizar estas representaciones, se ha establecido una norma internacional, IEC 1131-3, que se encarga de estandarizar los lenguajes de programacin. Esta norma contempla dos tipos de lenguajes de programacin: - Lenguajes Grficos - Lenguajes Textuales LENGUAJES GRFICOS Se denomina lenguaje grfico a la representacin basada en smbolos grficos, de tal forma que segn la disposicin en que se encuentran cada uno de estos smbolos Y en conformidad a su sintaxis que lo gobierna, expresa una lgica de mando y control. Dentro de ellos tenemos: Carta de Funciones Secunciales o Grafcet El Grafcet es una representacin de anlisis grfico donde se establecen las funciones de un sistema secuencial. Este lenguaje consiste en una secuencia de etapas y transiciones, asociadas respectivamente con acciones y condiciones. Las etapas representan las acciones a realizar y las transiciones las condiciones que deben cumplirse para ir desarrollando acciones. La Etapa - Transicin es un conjunto indisociable. Suele casar bien con procesos continuos.

Etapa

6 Transicin 7

Figura 3 Pgina 9 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Plano de Funciones Es una representacin grfica orientada a las puertas lgicas AND, OR y sus combinaciones. Las funciones individuales se representan con un smbolo, donde su lado izquierdo se ubica las entradas y en el derecho las salidas. Los smbolos usados son iguales o semejantes a los que se utilizan en los esquemas de bloques en electrnica digital.

Figura 4

Diagrama de Contactos o lenguaje LADDER El LADDER, tambin denominado lenguaje de contactos o en escalera, es un lenguaje de programacin grfico muy popular dentro de los autmatas programables debido a que est basado en los esquemas elctricos de control clsicos. De este modo, con los conocimientos que todo tcnico elctrico posee, es muy fcil adaptarse a la programacin en este tipo de lenguaje.

Figura 5

LENGUAJES TEXTUALES Este tipo de lenguaje se refiere bsicamente al conjunto de instrucciones compuesto de letras, cdigos y nmeros de acuerdo a una sintaxis establecida. Se considera un lenguaje de menor nivel que los grficos y por lo general se utilizan para programar pequeos PLCs cuyos programas no son muy complejos, o para programar instrucciones no programables en modo grfico (programacin avanzada a muy bajo nivel).

Pgina 10 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Existen dos lenguajes diferentes en nivel y tipo de aplicacin, ellos son Lista de Instrucciones Son instrucciones del tipo Booleanas, utilizando para su representacin letras y nmeros. Dado que se usan abreviaturas nemotcnicas, no se requiere gran memoria para tareas de automatizacin. En este tipo de representacin es donde puede sacarse el mximo partido a la programacin del PLC. Puesto que es la que tiene el mayor juego de instrucciones de programacin adems de permitir el acceso a todos los elementos del autmata. La desventaja radica la dificultad en su confeccin y sobre todo para la localizacin de errores y averas.

Figura 6

Texto Estructurado Es un lenguaje del tipo booleano de alto nivel y estructurado, incluye las tpicas sentencias de seleccin (IF-THEN-ELSE) y de interaccin (FOR, WHILE Y REPEAT), adems de otras funciones especficas para aplicaciones de control. Su uso es ideal para aplicaciones en las que se requiere realizar clculos matemticos, comparaciones, emular protocolos, etc.

2.2 Sistema SCADA


SCADA, acrnimo de Supervisory Control And Data Adquisition (en espaol, Control supervisor y adquisicin de datos). Se trata de una aplicacin software especialmente diseada para funcionar sobre ordenadores en el control de produccin, proporcionando comunicacin con los dispositivos de campo (controladores autnomos, autmatas programables, etc.) y controlando el proceso de forma automtica desde la pantalla del ordenador. Adems, provee de toda la informacin que se genera en el proceso productivo a diversos usuarios, tanto del mismo nivel como de otros supervisores dentro de la empresa: control de calidad, supervisin, mantenimiento, etc.

Pgina 11 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Comprende todas aquellas soluciones de aplicacin para referirse a la captura de informacin de un proceso o planta industrial, con esta informacin es posible realizar una serie de anlisis o estudios con los que se pueden obtener valiosos indicadores que permitan una retroalimentacin sobre un operador o sobre el propio proceso, tales como: Estado actual del proceso. Valores instantneos Desviacin o deriva del proceso. Evolucin histrica y acumulada Generacin de alarmas HMI Human Machine Interface (Interfaz hombre-mquina) Toma de decisiones: o Mediante accin humana o Automtica (mediante la utilizacin de sistemas basados en el conocimiento o sistemas expertos Ejecutar acciones de control iniciadas por el operador, tales como: abrir o cerrar vlvulas, arrancar o parar bombas, etc. Monitorizar procesos qumicos, fsicos o de transporte en sistemas de suministro de agua, para controlar la generacin y distribucin de energa elctrica y otros procesos de distribucin. Gestin de la produccin (facilita la programacin de la fabricacin) Mantenimiento (proporciona magnitudes de inters para evaluar y determinar modos de fallo, ndices de fiabilidad, entre otros) Control de Calidad (proporciona de manera automatizada los datos necesarios para calcular ndices de estabilidad de la produccin, tolerancias, etc. Administracin. Actualmente pueden enlazarse estos datos del SCADA con un servidor ERP (Enterprise Resource Planning o sistema de planificacin de recursos empresariales), e integrarse como un mdulo ms Tratamiento histrico de informacin (mediante su incorporacin en bases de datos) Existen en el mercado mltiples fabricantes que ofrecen software para la implementacin de sistemas SCADA. Por ejemplo, Siemens con Wincc, Allen Bradley con RSView32, OMRON con CX-Supervisor, etc. Dichos programas tienen un elevado precio (llevan asociada una licencia hardware o software) y requieren de un aprendizaje del entorno de programacin y desarrollo. No obstante, aportan muchas ventajas en cuanto a la generacin y configuracin de las pantallas (imgenes, botones, vlvulas, etc.), manejo, manipulacin y actualizacin de variables.

Pgina 12 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Son sistemas abiertos, es decir, el cliente final, normalmente, dispone del programa fuente con lo cual puede l mismo u otro integrador modificar la aplicacin. La aplicacin SCADA corre normalmente en un PC (preferiblemente de tipo industrial), el cual intercambia informacin con el sistema de control y muestra los datos a travs de diversas pantallas. El tipo de conexin fsica, as como la topologa y el protocolo de comunicacin dependern del PLC en cuestin (MPI, Profibus, Ethernet, ...). Segn la complejidad, tamao de la instalacin o requerimientos en el tratamiento y almacenamiento de la informacin puede ser necesario la conexin con otros PCs. Dichos equipos actan como clientes del PC servidor el cual les suministra los datos para la visualizacin y/o modificacin. Entre estos equipos lo habitual es que estn conectados a travs de una red Ethernet. En cuanto a los lenguajes de programacin, depender del paquete de software del fabricante. Est muy extendidos el uso de lenguaje C, C++, Visual Basic, o especficos de cada fabricante que normalmente siguen ciertas normas de los lenguajes mencionados anteriormente.

2.2.1 Programas secuenciales, interactivos y orientados a eventos


Existen distintos tipos de programas. En los primeros tiempos de los ordenadores los programas eran de tipo secuencial (tambin llamados tipo batch) Un programa secuencial es un programa que se arranca, lee los datos que necesita, realiza los clculos e imprime o guarda en el disco los resultados. Mientras un programa secuencial est ejecutndose no necesita ninguna intervencin del usuario. A este tipo de programas se les llama tambin programas basados u orientados a procedimientos o a algoritmos (procedural languages). Este tipo de programas siguen utilizndose en la actualidad, pero la difusin de los PCs ha puesto de actualidad otros tipos de programacin. Los programas interactivos exigen la intervencin del usuario en tiempo de ejecucin, bien para suministrar datos, bien para indicar al programa lo que debe hacer por medio de mens. Los programas interactivos limitan y orientan la accin del usuario. Un ejemplo de programa interactivo podra ser Matlab. Por su parte los programas orientados a eventos son los programas tpicos de Windows, tales como Word y PowerPoint. Cuando uno de estos programas ha arrancado, lo nico que hace es quedarse a la espera de las acciones del usuario, que en este caso son llamadas eventos. El usuario dice si quiere abrir y modificar un fichero existente, o bien comenzar a crear un fichero desde el principio. Estos programas pasan la mayor parte de su tiempo esperando las acciones del usuario (eventos) y respondiendo a ellas. Las acciones que el usuario puede realizar en un momento determinado son variadsimas, y exigen un tipo especial de programacin: la programacin orientada a eventos. Este tipo de programacin es sensiblemente ms complicada que la secuencial y la interactiva.

Pgina 13 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

3 DESCRIPCIN DE LA INSTALACIN Y MODOS DE FUNCIONAMIENTO


La instalacin consta de un total de seis depsitos en los cuales se realizan operaciones de fermentacin y guarda de una fbrica de cerveza. Tras cada cocimiento es necesario realizar una limpieza y desinfeccin de los tanques. Dicho proceso se realizaba de forma manual. Este procedimiento presentaba grandes inconvenientes: Falta de limpieza en paredes y fondo de los depsitos Los anlisis microbiolgicos indicaban presencia de organismos aerobios y anaerobios en fermentacin. Elevado consumo de agua Se trata de un proceso manual que requiere al menos dos operarios. Los objetivos de la automatizacin del proceso son: Asegurar la limpieza y desinfeccin. Conseguir una perfecta situacin microbiolgica Reducir el consumo de agua. Para ello usar la cantidad mnima necesaria de detergentes y desinfectantes Que el proceso sea totalmente autnomo El mtodo de limpieza se denomina CIP (Cleaning In Place Limpieza In Situ). Es el ms ecolgico y econmico, puesto que consume menos agua y menos detergentes. El esquema de la instalacin se indica en el siguiente grfico.

Figura 7

Pgina 14 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

La filosofa de trabajo es la siguiente: 1. Preparar las soluciones (agua, agua + cido, agua, agua + sosa,...) en el tanque de preparacin 2. Enviar al tanque destino 3. Recircular un tiempo determinado 4. Tirar la solucin Un ejemplo real de receta sera: 1. Enjuague con 2500 l de agua y 5 minuto de recirculacin 2. Enjuague con 2500 l de agua y 5 minuto de recirculacin 3. Disolucin de 2500 l de agua y 25 l de cido durante 35 minutos de recirculacin 4. Enjuague con 2500 l de agua y 5 minuto de recirculacin 5. Enjuague con 2500 l de agua y 5 minuto de recirculacin 6. Disolucin de 2500 l de agua y 140 ml de desinfectante durante 10 minutos de recirculacin La automatizacin de esta receta, conlleva no slo la exactitud en las cantidades sino la posibilidad de optimizar el proceso mediante pruebas y anlisis de los resultados obtenidos.

4 ELECCIN DE SOLUCIONES 4.1 Sistema de Control


4.1.1 Autmata
El PLC seleccionado es de la firma Siemens modelo SIMATIC S7-300. Las razones que han llevado a su eleccin son: Configuracin modular y rpida expansin posibles a travs de mdulos de interfaz con un bus plano integrado en la parte posterior. Amplitud modular a travs de mdulos digitales, analgicos, simulacin y mdulos de funcin que permiten la comunicacin con otros tipos de mdulos. Funciones integradas: contadores, posicionadores, control de lazo cerrado, y medicin de frecuencia en las CPUs 312/314 IFM.

Pgina 15 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Interfaz PROFIBUS integrado en las series 300 2-DP. La CPU puede utilizarse tambin como esclavo de la red. Procesamiento de grandes frmulas matemticas. Memoria de Programa de hasta 85 K en instrucciones Hasta 1.024 entradas /salidas Interfaz Multipunto para configurar pequeas redes con la ayuda de un PC/PG. Rpido tiempo de ejecucin que permite a la CPU ejecutar hasta 1024 instrucciones binarias en 0.1 ms. Configuracin / Programacin rpida y sencilla con ayuda del software STEP 7. Amplias posibilidades de diagnstico con ayuda de STEP 7. Buffer de mensajes de error con fecha y hora, adems de ayuda de diagnosis de mdulos en la bsqueda de errores por parte del usuario.

Dentro de la familia S7-300 hemos seleccionado el modelo S7-315-2DP cuyas caractersticas tcnicas indicamos a continuacin:
Tensin de alimentacin Consumo de corriente - Corriente de conexin, tipo - It - Potencia de prdida, tipo Memoria / Respaldo - Memoria de trabajo integrada ampliable - Memoria de carga enchufable (MMC) Respaldo CPU / Bloques DB (Bloques de datos globales) - Cantidad - Capacidad FB (Bloques de funcin) - Cantidad - Capacidad FC (Funciones) - Cantidad - Capacidad OB (Bloques de organizacin) - Capacidad Profundidad de anidamiento - Segn prioridad - Adicionales dentro de un OB de error Tiempos de ejecucin - Para operaciones de bits - Para operaciones de palabras 24 Vdc 2,5 A 0,5 As 2,5 W

128 Kbytes No 8 Mbytes Con batera o MMC

1.024 16 Kbytes 2.048 16 Kbytes 2.048 16 Kbytes 16 Kbytes 8 4 0,1 s 0,2 s Pgina 16 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

- Para aritmtica en coma fija - Para aritmtica en coma flotante rea de datos Contadores S7 - Cantidad de ellos, remanente sin batera -ajustable remanencia -ajustable Margen de computo -ajustable Contador IEC - Disponible - Tipo Temporizadores S7 - Cantidad Remanencia -ajustable -preajustado Margen de tiempo -Lmite inferior -Lmite superior Temporizador IEC - Disponible - Tipo rea de datos Marcas - Cantidad - Remanencia ajustable - Cantidad de marcas de ciclo Bloques de datos - Cantidad - Capacidad Datos locales - segn prioridad rea de direccionamiento Area de direccionamiento de periferia - Entradas - Salidas Imagen de proceso - Entradas - Salidas Canales digitales - Entradas - Salidas Canales analgicos - Entradas - Salidas Hardware - Bastidores - Mdulos por bastidor Cantidad de maestros DP - integrados -a travs de CP Reloj hardware (tiempo real) Respaldo / sincronizado Funciones de comunicacin - Funciones de comunicacin PG / OP - Routing

2 s 3 s

256 Si Si Si Si SFB 256 Si sin remanencia 10 ms 9.990 s Si SFB

2.048 bytes Si; MB0 a MB2047 8; 1 byte de marcas 1.023; de DB1 a DB1023 16 Kbytes 128 bytes

2 Kbytes 2 Kbytes 128 bytes 128 bytes 16.384 16.384 1.024 1.024 4 8 1 4 Si Si Si Si

Pgina 17 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Comunicacin de datos globales - admitida - capacidad del paquete GD Comunicacin bsica S7 Primera interfaz - Tipo - Fsica - Separacin galvnica - Alimentacin de la interfaz Funcionalidad - MPI - Maestro DP - Esclavo DP - Acoplamiento punto a punto MPI - Cantidad de enlaces - Servicios Funciones de comunicacin PG / OP Routing Comunicacin de datos globales Comunicacin bsica S7 Comunicacin S7 Velocidad de transmisin Segunda interfaz - Tipo - Fsica - Separacin galvnica - Alimentacin de la interfaz Funcionalidad - MPI - Maestro DP - Esclavo DP - Acoplamiento punto a punto Maestro DP - Cantidad de enlaces - Servicios Funciones de comunicacin PG / OP Routing Admisin de equidistancia SYNC / FREEZE DPV1 Velocidad de transmisin Cantidad de esclavos DP Campo de la direccin .- Entradas .- Salidas Esclavo DP - Cantidad de enlaces - Servicios Funciones de comunicacin PG / OP Routing Comunicacin directa DPV1 Velocidad de transmisin Memoria intermedia .- Entradas .- Salidas CPU / Programacin Lenguaje de programacin

Si 22 bytes Si Interfaz RS485 integrada RS485 No 200 mA Si No No No 16 Si Si Si Si Si 187,5 Kbits/s Integrada RS485 RS485 Si 200 mA No Si Si No 16 Si Si Si Si Si Si 12 Mbits/s 124 244 Kbytes 244 Kbytes 16 Si Si Si No 12 Mbits/s 244 bytes 244 bytes

Pgina 18 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

- STEP 7 - KOP - FUP - AWL - SCL - CFC - GRAPH - HiGraph Dimensiones y pesos - Peso - Anchura - Altura - Profundidad

Si Si Si Si Si No Si Si 290 g 40 mm 125 mm 130 mm

4.1.2 Lenguaje de Programacin. Software utilizado


Durante la mayor parte del programa, se ha seguido la programacin en lenguaje de contactos (LADDER), por la facilidad que presenta su interpretacin. No obstante, en algunos casos ha sido necesario recurrir a programacin en AWL, puesto que slo en este tipo es posible programar estructuras ms complejas. El software de programacin utilizado es STEP 7 de Siemens. Con dicho programa, es posible programar cualquier CPU de las series 300 y 400 de Siemens. El formato de representacin KOP sigue los principios del lenguaje Esquema de contactos (en ingls Ladder Logic) fijados en la norma DIN EN-61131-3 (int. IEC 1131-3). En STEP 7 se utiliza la programacin estructurada en bloques. As tenemos: OB: Bloque de organizacin FB: Bloque de funcin FC: Funcin DB: Mdulo de datos (se utiliza para almacenar datos)

El sistema operativo de la CPU del S7 ejecuta el OB 1 de forma cclica: Una vez finalizada la ejecucin del OB 1, el sistema operativo comienza a ejecutarlo de nuevo. La ejecucin cclica del OB 1 comienza una vez que el arranque ha finalizado. En el OB 1 es posible realizar la llamada a bloques de funcin (FBs, SFBs) o a funciones (FCs, SFCs). El OB 1 presenta la prioridad ms baja de todos los OBs sometidos a vigilancia en lo que respecta a su tiempo de ejecucin. Con excepcin del OB 90, todos los dems OBs pueden interrumpir la ejecucin del OB 1. Los eventos siguientes dan lugar a que el sistema operativo llame al OB 1:

Final de la ejecucin del arranque Final de la ejecucin del OB 1 (durante el ciclo anterior).

Pgina 19 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Una vez finalizada la ejecucin del OB 1, el sistema operativo enva datos globales. Antes de arrancar de nuevo el OB 1, el sistema operativo escribe la imagen de proceso de las salidas en los mdulos de salidas, actualiza la imagen de proceso de las entradas y recibe datos globales para la CPU. El software Step 7 ofrece una supervisin del tiempo de ciclo mximo garantizando el tiempo de reaccin mximo. El valor del tiempo de ciclo mximo est preajustado a 150 ms. Puede modificarse la parametrizacin de este valor en la configuracin hardware o con la funcin de sistema SFC 43 RE_TRIGR, activar de nuevo la supervisin temporal en cualquier punto del programa. Si el programa sobrepasa el tiempo de ciclo mximo para el OB 1, el sistema operativo llama al OB 80 (OB de error de tiempo). Si no est programado el OB 80, la CPU pasa al estado operativo STOP. Adems de la supervisin del tiempo de ciclo mximo, puede garantizarse el cumplimiento de un tiempo de ciclo mnimo. El sistema operativo retarda el comienzo de un nuevo ciclo (escritura de la imagen de proceso de las salidas en los mdulos de salidas) hasta que se haya alcanzado el tiempo de ciclo mnimo. La diferencia entre una funcin (FC) y un bloque de funcin (FB) consiste en que a la llamada a un FB est asociado un bloque de datos (el DB de instancia), el cual almacena las variables locales del bloque conforme a la tabla de declaracin de variables de ese bloque de funcin. En el caso de la funcin, los parmetros de llamada y las asignaciones de memoria local que se utilicen durante el procesamiento de la funcin utilizan memoria de la pila que se sobrescribir en cuanto se llame a otro bloque.

4.1.3 Configuracin Hardware


Descripcin Fuente de alimentacin CPU Tarjeta entradas digitales Tarjeta salidas digitales Tarjeta entradas / salidas analgicas Tarjeta PS 307 5A CPU 315-2DP DI16xDC24V DO16xDC24V/0,5 A AI4/AO2x8/8Bits Referencia 6ES7307-1EA00-0AA0 6ES7315-2AF03-0AB0 6ES7321-1BH02-0AA0 6ES7322-1BH01-0AA0 6ES7334-0CE01-0AA0

4.2 Sistema SCADA


4.2.1 Software de programacin
Como sistema de visualizacin y control se ha desarrollado una aplicacin en Visual Basic 6.0 que cumple los objetivos fijados en el cuaderno de especificaciones del cliente. Veamos alguna de las ventajas que aporta este lenguaje de programacin. Es un lenguaje de fcil aprendizaje pensado tanto para programadores principiantes como expertos, guiado por eventos, y centrado en un motor de formularios que facilita el rpido desarrollo de aplicaciones grficas.

Pgina 20 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

En el caso de programadores expertos por la facilidad con la que se desarrollan aplicaciones complejas en muy poco tiempo (comparado por ejemplo con Visual C++). En el caso de programadores novatos por el hecho de ver de lo que son capaces a los pocos minutos de empezar a trabajar con l. Su principal innovacin, que luego fue adoptada por otros lenguajes, fue el uso de un tipo de dll, llamado inicialmente vbx y posteriormente ocx, que permiten contener toda la funcionalidad de un control y facilitar su rpida incorporacin a los formularios.

Visual Basic es un lenguaje de programacin visual, tambin llamado de 4 generacin. Esto quiere decir, que un gran nmero de tareas se realizan sin escribir cdigo, simplemente con operaciones grficas realizadas con el ratn sobre la pantalla. Visual Basic es un programa basado en objetos, aunque no orientado a objetos como C++ o Java. La diferencia est en que Visual Basic utiliza objetos con propiedades y mtodos, pero carece de los mecanismos de herencia y polimorfismo propios de los verdaderos lenguajes orientados a objetos como Java y C++.

Ventajas

Visual Basic es un lenguaje simple y por tanto fcil de aprender. Su mayor facilidad radica en el diseo de formularios, mediante el arrastre de controles. Miles de Foros alrededor de la Web lo hacen el lenguaje con mayor cobertura que cualquier otro. La sintaxis es cercana al lenguaje humano. Es un lenguaje RAD, centrado en conseguir en el menor tiempo posible los resultados deseados Permite el tratamiento de mensajes de Windows. Gran parte del trabajo en el diseo de formularios est realizado, gracias a la gran gama de controles incorporados junto al lenguaje que ahorran costes de tiempo de desarrollo. Soporta el uso de componentes COM y ActiveX. Permite crear controles personalizados fcilmente del mismo modo que el diseo de formularios. Permite generar libreras dinmicas (DLL) ActiveX de forma nativa y Win32 (no ActiveX, sin interfaz COM) mediante una reconfiguracin de su enlazador en el proceso de compilacin.

Pgina 21 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Inconvenientes Slo existe un compilador e IDE, llamado igual que el lenguaje. Slo genera ejecutables para Windows. No existe forma alguna de exportar el cdigo a otras plataformas fuera de Windows (al contrario que con los lenguajes .NET gracias al Proyecto Mono3). Los ejecutables generados son relativamente lentos. NO permite programacin a bajo nivel ni incrustar secciones de cdigo en ASM. Slo permite el uso de funciones de libreras dinmicas (DLL) stdcall. Para que los ejecutables que genera funcionen necesita una DLL llamada MSVBVMxy.DLL: MicroSoft Visual Basic Virtual Machine x.y (versin). Provee todas las funciones y caractersticas implementadas en el lenguaje. NO soporta tratamiento de procesos como parte del lenguaje. El tratamiento de errores que tiene mediante la orden on error no sigue los patrones estructurados (que es mejorado en .NET con la orden try/catch). NO incluye operadores a nivel de bits. NO permite el manejo de memoria dinmica, punteros, etc. como parte del lenguaje. NO avisa de ciertos errores o advertencias (se puede configurar el compilador para generar ejecutables sin los controladores de desbordamiento de enteros o las comprobaciones de lmites en matrices entre otros, dejando as ms de la mano del programador la tarea de controlar dichos errores) El tratamiento de mensajes de Windows es bsico e indirecto. Los controles personalizados no mejoran la potencia de la API de Windows, y en determinados casos acudir a sta ser el nico modo de conseguir el control personalizado deseado.

4.2.2 Comunicacin SCADA Sistema de control


Para establecer la comunicacin entre el SCADA y el PLC, se ha optado por un paquete de software del fabricante Siemens, denominado PRODAVE S7 (Prozessdatenverkehr Intercambio de datos de proceso). El software consiste en unas libreras de enlace dinmico (DLL) que pueden ser integradas en el programa SCADA (funciones que se llamarn desde Visual Basic). El trfico de datos entre PC y PLC es establecido por PRODAVE S7 a travs de la interfaz MPI del PLC. La interfaz MPI (Multi Point Interface Interfaz Multi-Punto) consiste en un mtodo descentralizado determinstico. Un token o testigo sirve como derecho de emisin a travs de la red de comunicacin. Adems debe ser pasado en un tiempo establecido. As se garantiza un tiempo mximo de circulacin del token. Los datos caractersticos de dicho protocolo de comunicacin son:

Mono es el nombre de un proyecto de cdigo abierto impulsado por Novell para crear un grupo de herramientas libres, basadas en GNU / Linux y compatibles con .NET.

Pgina 22 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Velocidad: Nmero de estaciones: Longitud: Mtodo de acceso:

187,5 kbit/s 127 50 m (puede aumentarse utilizando repetidores) Bus Token

Soporte de transminsin: cable bifilar apantallado o fibra ptica Topologa: .- Elctrica: lnea .- ptica: arbol, estrella, anillo

PRODAVE S7 permite no solo evaluar y monitorizar sino que tambin puede influenciar en el proceso a travs de diferentes funciones integradas. PRODAVE consiste bsicamente en dos partes: o Driver para Windows 95/98/ME y windows NT/2000. o Adaptador para lenguaje de alto nivel. Permite operar con distintos PLCs de la familia Siemens: S7-200, S7-300, S7-400, M7 y C7. La conexin puede llevarse a cabo mediante las siguientes tarjetas proporcionadas por el fabricante: o CP 5611 PCI-CARD o CP 5511 PCMCIA-CARD o CP 5411 ISA-CARD o MPI-ISA-CARD o COM a traves de PC-ADAPTER En nuestro caso, hemos optado por la comunicacin a travs del PC-ADAPTER. Dicha eleccin queda justificada por el menor precio y por la facilidad de conexin puesto que slo requiere la existencia de un puerto serie en el PC.

Pgina 23 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

4.2.3 Estructura del programa SCADA


FUNCIONAMIENTO El programa tiene un comportamiento basado en eventos y unas tareas de ejecucin peridica de refresco y escritura de variables en el PLC. Funcionamiento orientado a eventos: Existe una barra de herramientas con botones y mens cuya estructura y funcionamiento se indica a continuacin: - Instalacin: Aparece una lista despleglable con acceso a: - Pupitre: Una interfase que permite activar una seta de parada de emergencia, el pulsador de marcha de la instalacin e indicar el tanque sobre el que se va a realizar la limpieza. - Defectos: se accede a una pantalla en la cual visualizamos el registro de defectos y avisos de la instalacin con estampacin de fecha y hora. Es posible, actualizar y resetear. - Usuarios: Algunas funciones del programa (p.ej. la creacin de recetas) estn restringidas mediante una lista de usuarios cuyo nivel de acceso permite distintas acciones. Desde este botn la lista de acciones posibles son: - Iniciar sesin - Cerrar sesin - Dar de alta a un nuevo usuario - Dar de baja a un usuario - Recetas: Esta pantalla es la encargada de disear un programa de limpieza de los tanques. No hay lmite en el nmero de recetas a almacenar y la navegacin entre ellas se consigue a travs de dos flechas de desplazamiento. Asimismo, se almacena la fecha y el usuario que la cre o la modific. Las acciones posibles son: - Editar - Nueva - Salvar - Eliminar - Cargar en PLC

Pgina 24 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

- Informes: Una vez terminada la ejecucin de la receta es posible generar un informe que ser exportado a un fichero excel con libre eleccin del nombre y la ubicacin donde guardarlo. Los datos a reportar son: - Nombre de la receta - N de tanque - N de pasos - Pasos de la receta con sus datos - Registro de inicio, fin y duracin de cada paso.

Funcionamiento de las tareas peridicas: Si se desea que una accin suceda con cierta periodicidad se puede utilizar un control Timer. Este control produce de modo automtico un evento cada cierto nmero de milisegundos. La propiedad ms importante de un objeto de este tipo es Interval, que determina, precisamente, el intervalo en milisegundos entre eventos consecutivos. La accin que se desea activar debe programarse en el evento Timer de ese mismo control. Si en algn momento se desea detener momentneamente la accin peridica es suficiente con hacer False la propiedad Enabled del control Timer y para arrancarla de nuevo volver a hacer True esa propiedad. Haciendo 0 la propiedad Interval tambin se consigue inhabilitar el Timer. Existen tres temporizadores cuyo cometido se detalla a continuacin: o TimAbrirPLC: Este control se inicia al arrancar el programa y se encarga de establecer la comunicacin con el PLC. Tiene un intervalo de ejecucin de 200 ms y se controla el nmero de veces que se ejecuta si no tiene xito la apertura de la comunicacin. o TimScanPLC: Este temporizador se encarga de leer (tarea de refresco) y de activar (escritura de salidas) las seales al PLC. Al no tratarse de una aplicacin crtica se ha fijado el intervalo en 200 ms.

o TimSleep: Si no se acta sobre el PC (ratn ni teclado) el programa detiene la comunicacin con el PLC. Para ello este control se activa cada 60 s e incrementa un contador. Si se llega a 30 minutos el programa se desconecta del PLC. Este accin, no implica que se detenga una receta en el caso en que estuviese activa. Se dispone de un botn de comando para volver a conectar en el formulario principal.

Pgina 25 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Almacenamiento de datos: Para guardar los datos se ha creado una base de datos en Access cuyos datos son modificados desde la aplicacin. Los datos que se almacenan son: - Lista de defectos: En esta tabla se encuentran los textos de las alarmas. Cada una lleva una clave que es la que activa el programa y busca el texto asociado. El orden indica tambin la prioridad de dicha alarma. - Defectos: Aqu se encuentran registrados los ltimos defectos que se han producido. Desde el programa esta tabla se refresca al actualizar o resetear. - Recetas: Esta tabla guarda los nombres de las recetas, el usuario que la cre, la ltima modificacin y la fecha de estos sucesos. - Pasos recetas: Esta tabla est vinculada con la anterior. Y se encuentran los datos propios de cada una (litros, tiempos, ...).

5 PROGRAMAS DE CONTROL
En este apartado, desarrollaremos y justificaremos como se han realizado los programas de PLC, PC y la interfaz de comunicacin entre ambos. El programa de PLC, se ha realizado con la herramienta de programacin Step7. Prcticamente, en la totalidad del programa se ha seguido la programacin en lenguaje de contactos (KOP) por su facilidad en la interpretacin y depuracin. El programa se encuentra estructurado, como veremos ms adelante, en una serie de mdulos que atienden una funcionalidad especfica y distinta de las dems. Se ha procurado, encapsular dichos mdulos creando para ello una interfaz de entrada y salida. De modo que un cambio en la programacin no implique reprogramar otro mdulo sino adaptar la interfaz a lo sumo. Para el SCADA, hemos utilizado el software Visual Basic 6.0. Como ya hemos descrito en los puntos anteriores, dicho lenguaje de programacin presenta mltiples ventajas. Fundamentalmente en lo que se refiere a la creacin y programacin de interfaz grfica (formularios). Tambin en este caso, se ha procurado que las funciones sean objetos cuya relacin con otra funciones se establezca a travs de su interfaz (parmetros de entrada y salida). Para salvar los datos se ha generado una base de datos en access cuya informacin es leda y modificada desde el programa de usuario. La interfaz de comunicacin entre PC y PLC se ha resuelto con bloques de datos (DBs). Se han creados dos bloques de datos, uno para las recetas de limpieza y otro para registrar entradas, salidas y variables de intercambio. Esta estrategia de agrupar los datos, tiene la ventaja de que la lectura y escritura de datos es mucho ms rpida que si accediramos a datos aislados.

Pgina 26 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

6 PROGRAMA DE PLC 6.1 Estructura de Bloques del Programa de PLC


El programa del PLC consiste en un bucle que se repite indefinidamente. Dicho bucle principal consiste en el mdulo OB1. Desde l se realizan las llamadas al resto de mdulos, si las condiciones de ejecucin as lo requieren. Existen otros mdulos que son llamados desde el sistema operativo del PLC (firmware 4) y responden a eventos peridicos, alarmas o a la inicializacin (re-arranque del programa).
La estructura de llamadas que sigue el programa de autmata es la siguiente: OB1
FC104. Activacin Bits Forzados FC101. Bits de Configuracin FC3. Organizacin del programa FC5. Tipo de paso actual FC2. Seguridades inicio receta FC1. Preparacin solucin limpieza FC6. Clculo de cambio de paso SFC40. Habilitar interrupcin FC100. Convertir entero a tiempo S5 SFC39. Deshabilitar interrupcin FC6. Cambio de paso FC7. Envo solucin limpieza FC8. Recirculacin FC6. Cambio de paso FC100. Convertir entero a tiempo S5 FC6. Cambio de paso FC9. Vaciado FC10. Activacin salidas FC50. Clculo de defectos FC4. Datos cabecera DB100 FC11. Datos Entradas Salidas PLC=>SCADA SFC1. Leer reloj CPU SFC1. Leer reloj CPU FC150. Extrae Fecha (FC6 de siemens) FC151. Extrae hora (FC8 de siemens) FC40. Convierte TIME a S5TIME FC6. Cambio de paso SFC1. Leer reloj CPU SFC1. Leer reloj CPU SFC1. Leer reloj CPU SFC1. Leer reloj CPU SFC1. Leer reloj CPU FC12. Reset valores receta y variables programa

4 Firmware o Programacin en Firme, es un bloque de instrucciones de programa para propsitos especficos, grabado en una memoria tipo ROM, que establece la lgica de ms bajo nivel que controla los circuitos electrnicos de un dispositivo. Al estar integrado en la electrnica del dispositivo es en parte hardware, pero tambin es software.

Pgina 27 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

FC105. Desactivar bits (simulacin funcionamiento) OB35 OB82 OB100 Interrupcin cclica 5 Defectos entradas / salidas OB Arranque

Los campos sombreados indican mdulos de Siemens cuyo cdigo se encuentra protegido (Know-how Protect)

6.2 Funcionamiento de los Distintos Mdulos.

6.2.1 FC104 Activacin Bits Forzados.


Este mdulo persigue dos objetivos. Por un lado, a nivel de simulacin, su programacin consiste en devolver la confirmacin en forma de entrada al activar una salida. Por ejemplo, al activarse la salida A3.6 E.V. Entrada de agua en tanque de preparacin ponemos a uno la entrada E6.0 Detector vlvula de agua tanque de preparacin abierta. Con ello, es posible refrescar la monitorizacin en pantalla del proceso. La otra razn, es para evitar la aparicin de alarmas. Ya que si tras un retardo no recibimos confirmacin de una maniobra se sealiza el defecto y dependiendo de su importancia se podra detener la ejecucin de la receta (vlvulas, contactores, ...).

6.2.2 FC101 Bits de Configuracin


Este mdulo sirve para configurar el valor de algunas constantes ya sean binarias, enteros, formato tiempo S5, etc. Por citar algunos, las marcas M1.0 Bit siempre a uno es muy til para puentear seales as como la marca M1.1 Bit siempre a cero para anular temporalmente un segmento.

6.2.3 FC3 Organizacin del Programa


Para que un programa funcione de forma estable y robusta es muy recomendable definir marcas que representen los distintos estados en que pueda encontrarse la instalacin. Cada estado permitir determinadas acciones bloqueando otras. Este bloque se encarga de definir los estados en que se puede encontrar la instalacin. Por tanto, este mdulo se ejecuta de forma incondicional todos los ciclos de scan. Las marcas programadas son: o Parada emergencia: Implica la parada del programa, as como desactivar cualquier salida activa (bombas, electrovlvulas, etc). Normalmente se activa con una seta de emergencia

Pgina 28 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

o desde algn bit del SCADA y su activacin se corresponde con una situacin de peligro para las personas o la instalacin. o Instalacin en servicio: Memoria que registra que el operario mediante un pulsador pone en servicio la instalacin. Es incompatible con la marca anterior. o Instalacin en automtico: Necesario para poder arrancar una receta de limpieza. o Autorizacin movimientos automticos: Estando en automtico es necesario tener activa esta marca para que se activen las salidas. o Autorizacin movimientos manuales: Incompatible con el anterior. Es el estado en que la instalacin permite manualmente desde el SCADA arrancar / parar bombas, electrovlvulas, etc. o Orden arrancar receta: Permite el inicio de una receta de limpieza, si las condiciones de la instalcin lo permiten. o Receta en ejecucin: Estado que registra que se ha iniciado una receta y se encuentra en ejecucin, aunque podra encontrarse detenida. o Parar receta: Bit que detiene la ejecucin de la receta en funcin de determinadas alarmas. o Memoria receta parada: Bit que registra que la receta se ha detenido. Con ello es posible reanudarla donde se qued parada y contine el tiempo que le faltase (llenado de un tanque, tiempo de recirculacin, etc). o Reset receta: Bit que devuelve la instalacin a estado inicial. Pone a cero los valores de tiempo as como de los pasos que tuviese ejecutado. o Fin receta: Bit que sealiza que se ha terminado el proceso de limpieza.

6.2.4 FC12 Reset Valores Receta y Variables Programa


En ocasiones, ser necesario poder parar una receta y comenzarla de nuevo sin volver a cargarla. Para esta funcionalidad se ha programado este mdulo que inicializa determinadas variables relacionadas con el estado de la receta que estaba en ejecucin. La datos de una receta de limpieza se encuentra en un mdulo de datos. La estructura es plana, por tanto para resetear los valores se ha programado un bucle y un puntero con un offset que se encarga de poner a cero los siguientes valores: Estado del paso. Hora de inicio. Hora de finalizacin.

Pgina 29 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Mediante un contador que comparamos con el nmero mximo de pasos sabremos si hay que ejecutarlo o salir del bucle. El sistema dispone de dos punteros denominados AR1 y AR2. Mediante la carga del valor inicial del primer paso en AR1 y aadindole el offset adecuado vamos recorriendo la tabla.

6.2.5 FC5 Tipo de Paso Actual


Cada paso de la receta est codificado con un valor entero segn: o 1: Paso de preparacin o 2: Paso de envo o 3: Paso de recirculcin o 4: Paso de vaciado Este mdulo se encarga de comprobar en todo momento el tipo de paso actual de la receta. Para ello, trabaja con un puntero el cual apunta al tipo de paso activo. La variable que almacena dicho valor se encuentra siempre a los mismos intervalos siendo: Puntero = (PasoActivo*42-14), la direccin de memoria dentro del DB100 a la que hay que apuntar. Tambin se comprueba: o Si es el primer paso de la receta se activa el bit seguridad inicio receta o El tipo de paso slo puede valer 1...4. En caso contrario se indica con una alarma. o El nmero de pasos debe estar comprendido entre 1 ... nmero mximo (parmetro que establece el mdulo de configuracin).

6.2.6 FC2 Seguridades Inicio Receta


Al comienzo de una receta es necesario verificar una serie de seguridades. Este bloque se encarga de ello, comprobando las siguientes condiciones iniciales: o Comprueba que el nmero de pasos se encuentra entre un mnimo y un mximo. Si esta condicin no se satisface se genera una alarma que lo indica. o Realiza una diferenciacin entre las dos posibles zonas objeto de la limpieza (tanques de fermentacin / tanques guarda). o Comprueba que el tanque seleccionado coincida con el que fsicamente est conectado (en el proyecto el tanque conectado lo simula el SCADA desde el formulario Pupitre). La disconformidad se sealiza con su alarma correspondiente. o El primer paso consiste siempre en comprobar que el tanque no est lleno. Para ello, se abre la vlvula de retorno y se vigila la seal del flujostato que indica si existe caudal circulando. De ser as se interrumpe la receta y se indica con una alarma.
Pgina 30 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

6.2.7 FC6 Clculo de Cambio de Paso


Este mdulo se llama cada vez que se produce un cambio de paso. Recibe como argumentos de entrada el nmero de pasos y el paso actual y busca el siguiente paso a realizar. Comprueba si se ha terminado la receta activando entonces una marca. Dentro de las variables de cada paso existe una que indica el estado. Se codifica como: o 0: No realizado o 1: En ejecucin o 2: Terminado De nuevo, para leer el estado se utiliza un puntero. En este caso se trabaja con el puntero del sistema, AR1 y un offset. Su clculo en este caso es (PasoActivo*42-12). Se encarga de asignar el estado terminado al paso activo desde el que se llama el mdulo y registra fecha y hora en la variable correspondiente. Para ello se utiliza la funcin del sistema SFC1 Read CLK. Para buscar el siguiente paso a ejecutar se ha programado un bucle cuyo funcionamiento es:

NO

Npasos<=PasoActivo? SI PasoActivo++

Error

SI Estado=2? Puntero++

NO EstadoPaso=1

Si encuentra un nuevo paso a ejecutar registra fecha y hora del inicio de dicho suceso. Asimimso realiza un reset del tiempo transcurrido en el que era paso actual.

Pgina 31 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

6.2.8 FC1 Preparacin Solucin Limpieza


Este mdulo se encarga de preparar las distintas soluciones de limpieza. Por tanto se encarga de vigilar el volumen de agua y los tiempos de funcionamiento de las distintas bombas. La instalacin dispone de un caudalimetro en la entrada de agua al depsito cuya magnitud es leida por el PLC como una entrada analgica. Por tanto, habr que integrar dicho caudal para conocer el volumen. Para integrar se ha seguido el mtodo de integracin numrica denominado regla del trapecio, cuyas caractersticas indicamos a continuacin. La regla del trapecio o regla trapezoidal es una de las frmulas cerradas de Newton-Cotes. Considrese la funcin f(X), cuya grfica entre los extremos X = a y X = b se muestra en la figura.

Una aproximacin suficiente al rea bajo la curva se obtiene dividindola en n fajas de ancho X y aproximndo el rea de cada faja mediante un trapecio, como se indica en la figura. Llamando a las ordenadas Y i (i = 1, 2, 3, ...., n+1), las reas de los trapecios son: Y +Y A1 = X 1 2 2 Y +Y A2 = X 2 3 2 .... Y + Yn +1 An = X n 2

El rea total comprendida entre X = a y X = b est dada por:


A = f ( x)dx A1 + A2 + ... + An
a b

Pgina 32 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Sustituyendo las ecuaciones en esta expresin se obtiene:


A = f ( x)dx
a b

X (Y 1+2Y2 + 2Y3 + ... + 2Yn + Yn +1 ) 2

Para implementarlo en el autmata, se ha utilizado el OB35. Este mdulo es arrancado por el sistema operativo del PLC a intervalos iguales. Con ello, resolvemos la divisin del eje de tiempos. En nuestro caso el intervalo se ha fijado en 20 ms (esto se realiza en la aplicacin Configuracin Hardware). Para no estar ejecutndo el OB35 continuamente, se activa al inicio del mdulo y se detiene al finalizar el llenado. Para ello, utilizamos las funciones del sistema:
o SFC40 EN_IRT (Enable New Interrupts and Asynchronous Errors) Permite activar la interrupcin o SFC39 DIS_IRT (Disable New Interrupts and Asynchronous Errors) Bloquea la interrupcin cclica

El algoritmo consiste en:


o Leer entrada analgica y escalarla o Calcular rea del intervalo y sumar al acumulado o Actualizar valores

Dentro del mdulo FC se vigila el valor del volumen y se interrumpe al alcanzar la consigna. Adems del agua y dependiendo del paso la receta requiere aadir sosa, tensoactivo, etc. Para ello, el mdulo lee los parmetros asociados del mdulo de datos DB100 auxiliandose del puntero del sistema AR1. Dichos valores son del tipo entero. Como se usarn en temporizadores, es necesario pasarlo al formato S5Time de Siemens. Para ello se ha programado el mdulo FC100 (CONV_INT_S5T) que se encarga de realizar dicha operacin. Si la receta es detenida, se almacena el tiempo restante de los temporiozadores que estuvieran activos. De modo que al continuar la receta no empiecen de nuevo sino el tiempo restante.

6.2.9 FC7 Envo Solucin Limpieza


Gestiona el trasvase de la solucin preparada en el paso anterior al tanque de destino. Para ello, activar la bomba del carro movil o de envo a guarda. El paso finaliza con la caida retardada de ls seal del fujostato correspondiente.

Pgina 33 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

6.2.9 FC8 Recirculacin


La solucin enviada requiere de un tiempo de recirculacin para asegurar su contacto con las paredes de los tanques y las tuberas. El mdulo FC8 lee mediante el puntero del sistema, AR1, el tiempo establecido por receta y lo almacena en un temporizador auxilindose del FC100, que como ya hemos indicado adapta el dato de entero a S5Time. Tambin almacena el tiempo residual en caso de que la receta sea detenida. Calcula asimismo que vlvulas ha de abrir y que bombas arrancar en funcin del tanque de destino.

6.2.10 FC9 Vaciado


Este paso asume el vaciado del tanque sobre el que estamos trabajando. Slo necesita conocer la zona del tanque destino para activar las vlvulas y bombas correspondientes. El proceso finaliza con la seal retardada del flujostato apropiado.

6.2.11 FC10 Activacin Salidas


Siguiendo con la filosofa de trabajo de encapsular objetos, este mdulo gobierna todas las salidas del PLC. Pilotos, vlvulas y bombas son activadas desde este bloque. La programacin general de una salida ser:
o En automtico: Depender de las condiciones propias del elemento y del tipo de paso activo. o En manual: El elemento es activado a peticin del operador a travs del SCADA.

6.2.12 FC50 Clculo de Defectos


Para el correcto funcionamiento de la instalacin es necesario el diagnstico de la misma y la respuesta apropiada ante defectos y averas. Adems, suponen una gran ayuda a las tareas de mantenimiento. Existe un mdulo de datos, DB110 COM_PLC_PC, donde intercambian datos el PLC y el SCADA. La estructura que hemos seguido es la siguiente:
o Copia de la imagen de entradas digitales.

Pgina 34 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

o Copia de la imagen de salidas digitales. o Zona de reserva (para futuras ampliaciones). o Bits de comunicacin PLC->PC. Slo el PLC puede modificar su estado y el PC consultarlo. o Bits de comunicacin PC->PLC. Su valor solo puede cambiarlo el SCADA. o Bits de activacin de salidas para funcionamiento manual de la instalacin. o Bits de defectos. Son activados por el PLC y visualizados en la pantalla del SCADA. o Datos adicionales para monitorizacin de variables varias.

En la programacin de defectos hemos seguido un criterio de prioridad, por el cual a menor valor mayor prioridad del defecto. Cuanto mayor prioridad del defecto implica mayor efecto sobre la instalacin. Por ejemplo, al pulsar una seta de emergencia (prioridad alta) el sistema responde con la parada incondicional de todas las salidas (vlvulas y bombas) y de la receta.

6.2.13 FC4 Datos Cabecera DB100


En este bloque se escriben determinadas variables de la cabecera del mdulo de datos DB100 DB_REC_FERM. Fundamentalmente, son datos para gestin de la receta e histricos. Los datos que registra son:
o Fecha y hora del inicio de la receta. o Fecha y hora de la finalizacin. o Calcula el tiempo transcurrido en el paso activo. o Compara el tiempo transcurrido con un mximo para sealizar una alarma.

6.2.14 FC11 Datos Entradas Salidas PLC SCADA


Como ya sabemos, resulta ms econmico en tiempo leer los datos todos juntos en forma de tabla que mltiples accesos individuales. Por este motivo, en el DB110 COM_PLC_PC se agrupan las variables que requiere el SCADA. Las tareas que realiza esta funcin son:
o Crea una copia de la imagen del proceso de entradas y salidas. o Refresca los datos de interconexin. o Confirma los siguientes datos:
Pgina 35 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

- N de la receta - N del tanque a limpiar - Estado - Paso actual - Tiempo paso actual - Volumen de agua en tanque de preparacin - Valor temporizadores sosa, cido, tensoactivo y desinfectante

6.3 Tabla de Entradas, Salidas, Marcas y Temporizadores


A continuacin se adjunta un listado con las entradas, salidas, marcas y temporizadores usados en el programa. Dicha tabla se genera en Step7 con la aplicacin Editor de simbolos. El uso de simbolos o etiquetas facilita recordar las variables, as como facilita la interpretacin y diagnstico.
Entradas

Direccin
E E E E E E E E E E E E E E E E E E E E E E E E E E E 0.0 0.1 0.2 0.3 0.5 0.6 0.7 1.0 1.1 1.2 1.3 2.0 2.1 2.2 2.3 2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3 3.4 4.0 4.1 4.3

Smbolo
EPEMERG FALIMOK QBENVIO QBAPOLLO QBSOSA QBACIDO QBTENSO QBDESIN EPES EAUTO PLS EVAA1 EVAA2 EVAI1 EVAI2 BQCMI1A KMBCM BQCMI2A NIVCARRO BIT4 BIT3 BIT2 BIT1 BIT0 EVAA1A EVAA2A EVAI1A

Tipo
BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL

Comentario
Control parada de emergencia / Puesta en servicio Fuente de alimentacion OK Magnetotrmico bomba envo CIP Magnetotrmico bomba APOLLOS Magnetotrmico bomba dosificadora sosa castica Magnetotrmico bomba dosificadora Acido Magnetotrmico bomba dosificadora tensoactivo Magnetotrmico bomba dosificadora NaCLO Puls. puesta en servicio / Reset paro emergencia Sel. AutomAtico / Manual PULSO LITRO POR SEGUNDO Detector valvula abierta (Aspiracion 1 carro movil) Detector valvula abierta (Aspiracion 2 carro movil) Detector valvula abierta (Impulsion 1 carro movil) Detector valvula abierta (Impulsion 2 carro movil) Detector valvula abierta (Impulsion 1 carro movil) Confirmacion activacion bomba carro movil Detector vAlvula abierta (Impulsion 2 carro movil) Flujostato aspiracion carro movil Contacto identificacion tanques. BIT 4 Contacto identificacion tanques. BIT 3 Contacto identificacion tanques. BIT 2 Contacto identificacion tanques. BIT 1 Contacto identificacion tanques. BIT 0 Detector valvula abierta (Aspiracion 1 tanques Apollo) Detector valvula abierta (Aspiracion 2 tanques Apollo) Detector valvula abierta (Impulsion 1 tanques Apollo)

Pgina 36 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

E E E E E E E E E E E E

4.5 4.7 5.0 5.1 5.2 5.3 5.4 6.0 6.1 6.2 6.3 7.0

EVAI2A BAMARCHA ENA BQCBA1 BQCSA1 BQCBA2 BQCSA2 BQVEAA BQVSTPC BQVSTPA NIVBENVIO CSC

BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL

Detector valvula abierta (Impulsion 2 tanques Apollo) Confirmacion activacion bomba tanques Apollo Flujostato aspiracion tanques Apollo Detector conexion bola CIP Apollo 1 Detector conexion salida Apollo 1 Detector conexion bola CIP Apollo 2 Detector conexion salida Apollo 2 Detector Valvula abierta (Entrada de agua tanque prep.) Detector vAlvula cerrada (Salida tanque preparacion) Detector vAlvula abierta (Salida tanque preparacion) Flujostato aspiracion bomba envo CONFIRMACION SALIDA CARBONICO

Salidas

Direccin
A A A A A A A A A A A A A A A A A A A A A A A A A A A A 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 2.0 2.1 2.2 2.3 2.4 2.7 3.0 3.1 3.2 3.3 3.6 3.7

Smbolo
PPES PVER PROJ BALIZA BECIP BAPOLO BSOSA BACIDO BTENSO BDESIN BCARRO SB0NTI SB1NTI SB2NTI SB3NTI SB4NTI SVA1 SVA2 SVI1 SVI2 SB5NTI SAVC SVA1A SVA2A SVI1A SVI2A YVEAPA YVSTPA

Tipo
BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL

Comentario
Piloto puesta en servicio / Reset paro emergencia (SBLPS) Seal luminosa baliza verde Seal luminosa baliza roja Seal sonora baliza Contactor bomba envo CIP Contactor bomba APOLLOS Contactor bomba dosificadora sosa castica Contactor bomba dosificadora Acido Contactor bomba dosificadora tensoactivo Contactor bomba dosificadora NaCLO Contactor bomba carro movil SALIDA BIT 0 N TANQUE INTERCAMBIO SALIDA BIT 1 N TANQUE INTERCAMBIO SALIDA BIT 2 N TANQUE INTERCAMBIO SALIDA BIT 3 N TANQUE INTERCAMBIO SALIDA BIT 4 N TANQUE INTERCAMBIO E.V. abrir vAlvula aspiracion 1 carro movil E.V. abrir vAlvula aspiracion 2 carro movil E.V. abrir vAlvula impulsion 1 carro movil E.V. abrir vAlvula impulsion 2 carro movil SALIDA BIT 5 N TANQUE INTERCAMBIO SALIDA ABRIR VALVULA DE CARBONICO E.V. abrir vAlvula aspiracion 1 tanques Apollo E.V. abrir vAlvula aspiracion 2 tanques Apollo E.V. abrir vAlvula impulsion 1 tanques Apollo E.V. abrir vAlvula impulsion 2 tanques Apollo E.V. abrir entrada agua preparacion E.V. abrir salida tanque preparacion

Marcas

Direccin
M M 0.0 0.1

Smbolo
BIT0.1S BIT0.2S

Tipo
BOOL BOOL BIT DE O.1 SEGUNDOS BIT DE O.2 SEGUNDOS

Comentario

Pgina 37 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M

0.2 0.3 0.4 0.5 0.6 0.7 1.0 1.1 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 6.0 6.1 6.2 6.3 6.4 6.5 6.6 6.7 7.0 7.1 7.2 7.3 7.4 12.0 13.3 13.4 13.5 13.6 13.7 15.0 20.0 20.1 20.2 20.3 20.4 20.5 20.6 20.7 21.0 21.1 21.2 21.3 21.4

BIT0.4S BIT0.5S BIT0.8S BIT1S BIT1.6S BIT2S ON OFF BSEGREC BTPASO1 BTPASO2 BTPASO3 BTPASO4 BTPASO5 BTPASO6 BTPASO7 FPArec FPRRec FPPLS FPCBACIDO FFHL BTPASO13 BTPASO14 BTPASO15 PACIDO AACIDO CONFBACID O BTPASO19 BTPASO20 AB5NTI AB0NTI AB1NTI AB2NTI AB3NTI AB4NTI M15.0 PEMERG IES AUTO AutMovMan ARec PRec ResetRec RecEjec FinRec AutMovAut MRecP BPrep BEnv

BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL

BIT DE O.4 SEGUNDOS BIT DE O.5 SEGUNDOS BIT DE O.8 SEGUNDOS BIT DE 1 SEGUNDOS BIT DE 1.6 SEGUNDOS BIT DE 2 SEGUNDOS SIEMPRE A UNO SIEMPRE A CERO BIT DE TRANSICCION SEGURIDAD RECETA BIT DE TRANSICCION PASO 1 BIT DE TRANSICCION PASO 2 BIT DE TRANSICCION PASO 3 BIT DE TRANSICCION PASO 4 BIT DE TRANSICCION PASO 5 BIT DE TRANSICCION PASO 6 BIT DE TRANSICCION PASO 7 FLANCO POSITIVO ARRANCAR RECETA FLANCO POSITIVO RESET RECETA FLANCO POSITIVO PULSO LITRO POR SEGUNDO FLANCO POSITIVO CONFIRMACION BOMBA ACIDO Flanco Positivo Fecha y Hora Leida BIT DE TRANSICCION PASO 13 BIT DE TRANSICCION PASO 14 BIT DE TRANSICCION PASO 15 PASO CON ACIDO ACTIVAR ALARMA ACIDO CONFIRMACION BOMBA ACIDO EN FUNCIONAMIENTO BIT DE TRANSICCION PASO 19 BIT DE TRANSICCION PASO 20 AUXILIAR BIT 5 N TANQUE INTERCAMBIO AUXILIAR BIT 0 N TANQUE INTERCAMBIO AUXILIAR BIT 1 N TANQUE INTERCAMBIO AUXILIAR BIT 2 N TANQUE INTERCAMBIO AUXILIAR BIT 3 N TANQUE INTERCAMBIO AUXILIAR BIT 4 N TANQUE INTERCAMBIO Auxiliar Agua Preparacion PARADA EMERGENCIA INSTALACION EN SERVICIO INSTALACION EN AUTOMATICO AUTORIZACION MOVIMIENTOS MANUALES ARRANCAR RECETA PARAR RECETA RESET RECETA RECETA EN EJECUCION FIN RECETA AUTORIZACION MOVIMIENTOS AUTOMATICOS MEMORIA RECETA PARADA BIT DE PREPARACION BIT DE ENVIO Pgina 38 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M

21.5 21.6 21.7 22.0 22.1 22.2 22.3 22.4 22.5 22.6 25.0 25.1 25.2 25.3 25.4 30.0 30.1 30.2 30.3 30.4 30.5 30.6 30.7 31.0 31.1 31.2 31.3 31.4 31.5 31.6 31.7 32.0 32.1 32.2 32.3 200.0 200.1 200.2 200.3 200.5 200.6 200.7 201.0 201.1

BRecirc BVac BPPaso SegInicRec BSegInic PRecXDefM BDEF PRECXDEFI LTF LTA B0 B1 B2 B3 B4 OAVSIFerm OAVA OABSOSA OABACIDO OABDESIN OABTENSO OAVPREP OAVA2E OAVI1E OABECIP OABCARRO E OAVA2R OAVI1R OABCARRO R OAVA2V OAVI2V OABCARRO V OABAPE OABAPR OABAPV MEPEMERG MFALIMOK MQBENVIO MQBAPOLL O MQBSOSA MQBACIDO MQBTENSO MQBDESIN MEPES

BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL BOOL

BIT DE RECIRCULACION BIT DE VACIADO BIT DE PRINCIPIO DE PASO SEGURIDAD INICIO RECETA BIT SEGURIDAD INICIO PARADA RECETA POR DEFECTO MANIOBRA BIT DE DEFECTO PARADA RECETA POR DEFECTO INSTALACION LIMPIAR TANQUES DE FERMENTACION LIMPIAR TANQUES APOLLO BIT 0 CODIFICACION BIT 1 CODIFICACION BIT 2 CODIFICACION BIT 3 CODIFICACION BIT 4 CODIFICACION ORDEN ABRIR VALVULA SEGURIDAD INICIO FERMENTACION ORDEN ABRIR VALVULA AGUA ORDEN ARRANCAR BOMBA DE SOSA ORDEN ARRANCAR BOMBA ACIDO ORDEN ARRANCAR BOMBA DESINFECTANTE ORDEN ARRANCAR BOMBA TENSOACTIVO ORDEN ABRIR VALVULA PREPARCION ORDEN ABRIR VALVULA ASPIRACION 2 PASO ENVIO ORDEN ABRIR VALVULA IMPULSION 1 PASO ENVIO ORDEN ARRANCAR BOMBA ENVIO CIP ORDEN ARRANCAR BOMBA CARRO MOVIL PASO ENVIO ORDEN ABRIR VALVULA ASPIRACION 2 PASO RECIRCULACION ORDEN ABRIR VALVULA IMPULSION 1 PASO RECIRCULACION ORDEN ARRANCAR BOMBA CARRO MOVIL PASO RECIRCULACION ORDEN ABRIR VALVULA ASPIRACION 2 PASO VACIADO ORDEN ABRIR VALVULA IMPULSION 2 PASO VACIADO ORDEN ARRANCAR BOMBA CARRO PASO VACIADO ORDEN ARRANCAR BOMBA APOLLO PASO ENVIO ORDEN ARRANCAR BOMBA APOLLO PASO RECIRCULACION ORDEN ARRANCAR BOMBA APOLLO PASO VACIADO Control parada de emergencia / Puesta en servicio Fuente de alimentaciOn OK Magnetotrmico bomba envo CIP Magnetotrmico bomba APOLLOS Magnetotrmico bomba dosificadora sosa castica Magnetotrmico bomba dosificadora Acido Magnetotrmico bomba dosificadora tensoactivo Magnetotrmico bomba dosificadora NaCLO Puls. puesta en servicio / Reset paro emergencia Pgina 39 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M

201.2 202.0 202.1 202.2 202.3 202.4 202.5 202.6 202.7 203.0 203.1 203.2 203.3 203.4 204.0 204.1 204.2 204.3 204.4 204.5 204.6 204.7 205.0 205.1 205.2 205.3 205.4 206.0 206.1 206.2 206.3 210.0 210.1 210.2 210.3 210.4 210.5 210.6 210.7 211.0 211.1 211.2 212.0 212.1 212.2 212.3 213.0 213.1 213.2

MEAUTO BOOL MEVCA1 BOOL MEVCA2 BOOL MEVCI1 BOOL MEVCI2 BOOL MBQCMI1A BOOL MKBCARRO BOOL MBQCMI2A BOOL MENC BOOL MBIT4 BOOL MBIT3 BOOL MBIT2 BOOL MBIT1 BOOL MBIT0 BOOL MEVCA1A BOOL MEVCA2A BOOL MBQTAA2A BOOL MEVCI1A BOOL MBQTAI1A BOOL MEVCI2A BOOL MBQTAI2A BOOL MKBAPOLLO BOOL MENA BOOL MBQCBA1 BOOL MBQCSA1 BOOL MBQCBA2 BOOL MBQCSA2 BOOL MEVCA BOOL MEVCPREP BOOL MBQVSTPA BOOL MENPREP BOOL MPPES BOOL MPVER BOOL MPROJ BOOL MBALIZA BOOL MBECIP BOOL MBAPOLLO BOOL MBSOSA BOOL MBACIDO BOOL MBTENSO BOOL MBDESIN BOOL MBCARRO BOOL MSVA1 BOOL MSVA2 BOOL MSVI1 BOOL MSVI2 BOOL MSVA1A BOOL MSVA2A BOOL MSVI1A BOOL

Sel. AutomAtico / Manual Detector vAlvula cerrada (AspiraciOn 1 carro movil) Detector vAlvula cerrada (Aspiracion 2 carro movil) Detector vAlvula cerrada (Impulsion 1 carro movil) Detector vAlvula cerrada (Impulsion 2 carro movil) Detector vAlvula abierta (Impulsion 1 carro movil) Confirmacion activacion bomba carro movil Detector vAlvula abierta (Impulsion 2 carro movil) Flujostato aspiracion carro movil Contacto identificacion tanques. BIT 4 Contacto identificacion tanques. BIT 3 Contacto identificacion tanques. BIT 2 Contacto identificacion tanques. BIT 1 Contacto identificacion tanques. BIT 0 Detector vAlvula cerrada (Aspiracion 1 tanques Apollo) Detector vAlvula cerrada (Aspiracion 2 tanques Apollo) Detector vAlvula abierta (Aspiracion 2 tanques Apollo) Detector vAlvula cerrada (Impulsion 1 tanques Apollo) Detector vAlvula abierta (Impulsion 1 tanques Apollo) Detector vAlvula cerrada (Impulsion 2 tanques Apollo) Detector vAlvula abierta (Impulsion 2 tanques Apollo) Confirmacion activacion bomba tanques Apollo Flujostato aspiracion tanques Apollo Detector conexion bola CIP Apollo 1 Detector conexion salida Apollo 1 Detector conexion bola CIP Apollo 2 Detector conexion salida Apollo 2 Detector vAlvula cerrada (Entrada de agua tanque prep.) Detector vAlvula cerrada (Salida tanque preparacion) Detector vAlvula abierta (Salida tanque preparacion) Flujostato aspiracion bomba envo Piloto puesta en servicio / Reset paro emergencia (SBLPS) Seal luminosa baliza verde Seal luminosa baliza roja Seal sonora baliza Contactor bomba envo CIP Contactor bomba APOLLOS Contactor bomba dosificadora sosa castica Contactor bomba dosificadora Acido Contactor bomba dosificadora tensoactivo Contactor bomba dosificadora NaCLO Contactor bomba carro movil E.V. abrir vAlvula aspiracion 1 carro movil E.V. abrir vAlvula aspiracion 2 carro movil E.V. abrir vAlvula impulsion 1 carro movil E.V. abrir vAlvula impulsion 2 carro movil E.V. abrir vAlvula aspiracion 1 tanques Apollo E.V. abrir vAlvula aspiracion 2 tanques Apollo E.V. abrir vAlvula impulsion 1 tanques Apollo

Pgina 40 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

M 213.3 M 213.6 M 213.7 MB 25 MD 2 MD MW MW 5 10 12

MSVI2A MYVEAPA MYVSTPA AUXCOD PTP PAL_TPASO S VAGUAPRE P PACNT

BOOL BOOL BOOL BYTE DWORD

E.V. abrir vAlvula impulsion 2 tanques Apollo E.V. abrir entrada agua preparacion E.V. abrir salida tanque preparacion AUXILIAR CODIFICACION TANQUE PUNTERO A TIPO DE PASO DB100

DWORD PALABRA DE TRANSICCION DE PASOS INT WORD VOLUMEN AGUA PREPARACION PALABRA AUXILIAR CODIFICACION N TANQUE PARA INTERCAMBIO

Temporizadores

Direccin
T T T T T T T T T T T T T T T T T T T T T T T T T T T 0 1 2 3 4 5 6 7 8 9 10 11 12 13 100 101 102 103 104 105 106 107 108 109 110 111 112

Smbolo
TSA TBSOSA TBACIDO TBDESIN TBTENSO TTCVAC TTA1VAC TRECIRC TTLVAC TDMVA2

Tipo
TIMER TIMER TIMER TIMER TIMER TIMER TIMER TIMER TIMER TIMER

Comentario
TEMPORIZADOR SEGURIDAD ARRANQUE TEMPORIZADOR BOMBA SOSA TEMPORIZADOR BOMBA ACIDO TEMPORIZADOR BOMBA DESINFECTANTE TEMPORIZADOR BOMBA TENSOACTIVO TEMPORIZADOR TANQUE CIP VACIO TEMPORIZADOR TUBERIA ASPIRACION 1 VACIA TEMPORIZADOR RECIRCULACION TEMPORIZADOR TANQUE LIMPIADO VACIO TEMPORIZADOR DEFECTO MANIOBRA VALVULA ASPIRACION 2 TEMPORIZADOR DEFECTO MANIOBRA VALVULA IMPULSION 1 TEMPORIZADOR DEFECTO COMUNICACION TEMPORIZADOR ESPERA CONFIRMACION N TANQUE TEMPORIZADOR BOMBA ENVIO CIP TEMPOTIZADOR DEFECTO VALVULA AGUA TEMPORIZADOR DEFECTO BOMBA SOSA TEMPORIZADOR DEFECTO MANIOBRA BOMBA ACIDO TEMPORIZADOR DEFECTO MANIOBRA BOMBA DESINFECTANTE TEMPORIZADOR DEFECTO BOMBA DE TENSOACTIVO TEMPORIZADOR DEFECTO MANIOBRA VALVULA SALIDA PREPARACION TEMPORIZADOR DEFECTO MANIOBRA VALVULA ASPIRACION 1 TEMPORIZADOR DEFECTO MANIOBRA VALVULA IMPULSION 2 TEMPORIZADOR DEFECTO MANIOBRA BOMBA ENVIO CIP TEMPORIZADOR DEFECTO MANIOBRA CARRO MOVIL TEMPORIZADOR DEFECTO MANIOBRA VALVULA ASPIRACION 1 APOLLO TEMPORIZADOR DEFECTO MANIOBRA VALVULA ASPIRACION 2 APOLLO TEMPORIZADOR DEFECTO MANIOBRA VALVULA IMPULSION 1 APOLLO

TDMVI1 TIMER TDCOM TIMER TECNT TIMER TBCIP TIMER TDVA TIMER TDBSOSA TIMER TDMBACIDO TIMER TDMBDESIN TIMER TDMBTENS TIMER O TDMVPREP TIMER TDMVA1 TIMER

TDMVI2 TIMER TDMBECIP TIMER TDMBCARR TIMER O TDMVA1A TDMVA2A TDMVI1A TIMER TIMER TIMER

Pgina 41 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

T T

113 114

TDMVI2A TIMER TDBAPOLLO TIMER

TEMPORIZADOR DEFECTO MANIOBRA VALVULA IMPULSION 2 APOLLO TEMPORIZADOR DEFECTO MANIOBRA BOMBA APOLLO

7 Cdigo Programa PLC


DATA_BLOCK DB 1
TITLE =FLANCOS, BITS AUXILIARES, CONSTANTES, ETC VERSION : 0.1

STRUCT AuxFpPes : BOOL ; //AUILIAR FLANCO 0->1 PUESTA EN SERVICIO AuxFpArec : BOOL ; //AUILIAR FLANCO 0->1 ARRANCAR RECETA AuxFpFinRec : BOOL ; //AUILIAR FLANCO 0->1 FIN RECETA AuxFpB1s : BOOL ; //AUILIAR FLANCO 0->1 BIT 1 SEGUNDO RESERVA1 : INT ; //RESERVA VAPAR2P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 2 TIEMPO PASO PREPARACIN VAPAR3P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 3 TIEMPO PASO PREPARACIN VAPAR4P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 4 TIEMPO PASO PREPARACIN VAPAR5P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 5 TIEMPO PASO PREPARACIN VAPAR6P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 6 TIEMPO PASO PREPARACIN VAPAR7P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 7 TIEMPO PASO PREPARACIN VAPAR8P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 8 TIEMPO PASO PREPARACIN VAPAR9P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 9 TIEMPO PASO PREPARACIN VAPAR10P : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 10 TIEMPO PASO PREPARACIN VAPAR1R : S5TIME ; //VARIABLE AUXILIAR PARAMETRO 1 TIEMPO PASO RECIRCULACIN CAUDALK : DINT ; //CAUDAL INSTANTE K CAUDALK1 : DINT ; //CAUDAL INSTANTE K-1 VOLUMEN : REAL ; //VOLUMEN TANQUE DE PREPARACIN TIEMPO_DEF : S5TIME ; //CONSTANTE TIEMPO PARA DEFECTO VAPAR1P : DINT ; //VARIABLE AUXILIAR PARAMETRO 1 LITROS DE AGUA PASO PREPARACION MAXNPASOS : INT ; //MAXIMO NUMERO DE PASOS EN RECETA FH : DATE_AND_TIME ; //Fecha y hora AuxFpBenv : BOOL ; //AUXILIAR FLANCO 0->1 BIT ENVIO AuxVAguaPrep : INT ; //AUXILIAR VOLUMEN AGUA TANQUE PREPARACION FPB1s : BOOL ; //FLANCO POSITIVO BIT 1 SEGUNDO END_STRUCT ; BEGIN AuxFpPes := FALSE; AuxFpArec := FALSE; AuxFpFinRec := FALSE; AuxFpB1s := FALSE; RESERVA1 := 0; VAPAR2P := S5T#0MS; VAPAR3P := S5T#0MS; VAPAR4P := S5T#0MS; VAPAR5P := S5T#0MS; VAPAR6P := S5T#0MS; VAPAR7P := S5T#0MS; VAPAR8P := S5T#0MS; VAPAR9P := S5T#0MS; VAPAR10P := S5T#0MS; VAPAR1R := S5T#0MS; CAUDALK := L#0; CAUDALK1 := L#0; VOLUMEN := 0.000000e+000; TIEMPO_DEF := S5T#0MS; VAPAR1P := L#0; MAXNPASOS := 0; FH := DT#90-1-1-0:0:0.000; AuxFpBenv := FALSE; AuxVAguaPrep := 0; FPB1s := FALSE; END_DATA_BLOCK

Pgina 42 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

DATA_BLOCK DB 100
TITLE = VERSION : 0.1 STRUCT CABECERA : STRUCT //CABECERA DE LA RECETA N_RECETA : INT ; //N DE LA RECETA N_PASOS : BYTE ; //N DE PASOS DE LA RECETA N_TANQUE : BYTE ; //N DEL TANQUE A LIMPIAR (1-16) INICIO : DATE_AND_TIME ; //FECHA Y HORA DE INICIO DE LA RECETA FIN : DATE_AND_TIME ; //FECHA Y HORA DE FINAL DE LA RECETA ESTADO : INT ; //ESTADO DE LA RECETA (0=INACTIVA; 1=EN EJECUCIN; 2=TERMINADA) PASO_ACT : INT ; //PASO ACTIVO DE LA RECETA TIEMPO : INT ; //TIEMPO (s) DE PASO ACTIVO END_STRUCT ; PASO1 : STRUCT //PASO 1 DE LA RECETA N_PASO : INT := 1; //N DEL PASO (1-20) TIPO_PASO : INT ; //TIPO DE PASO (1=PREPARACIN; 2=ENVO; 3=RECIRCULACIN; 4=VACIADO ESTADO : INT ; //(0=NO REALIZADO; 1=EN EJECUCIN; 2=TERMINADO) INICIO : DATE_AND_TIME ; //FECHA Y HORA DE INICIO DEL PASO FIN : DATE_AND_TIME ; //FECHA Y HORA DE FINAL DEL PASO PAR1 : INT ; //(TIPO_PASO=1: LITROS DE AGUA ; TIPO_PASO=2: T. RECIRCULACIN) PAR2 : INT ; //(TIPO_PASO=1: T. BOMBA SOSA) PAR3 : INT ; //(TIPO_PASO=1: T. BOMBA CIDO) PAR4 : INT ; //(TIPO_PASO=1: T. BOMBA DESINFECTANTE) PAR5 : INT ; //(TIPO_PASO=1: T. BOMBA TENSOACTIVO) PAR6 : INT ; //PARMETRO 6 (RESERVA) PAR7 : INT ; //PARMETRO 7 (RESERVA) PAR8 : INT ; //PARMETRO 8 (RESERVA) PAR9 : INT ; //PARMETRO 9 (RESERVA) PAR10 : INT ; //PARMETRO 10 (RESERVA) END_STRUCT ; PASO2 : STRUCT //PASO 2 DE LA RECETA N_PASO : INT := 1; //N DEL PASO (1-20) TIPO_PASO : INT ; //TIPO DE PASO (1=PREPARACIN; 2=ENVO; 3=RECIRCULACIN; 4=VACIADO ESTADO : INT ; //(0=NO REALIZADO; 1=EN EJECUCIN; 2=TERMINADO) INICIO : DATE_AND_TIME ; //FECHA Y HORA DE INICIO DEL PASO FIN : DATE_AND_TIME ; //FECHA Y HORA DE FINAL DEL PASO PAR1 : INT ; //(TIPO_PASO=1: LITROS DE AGUA ; TIPO_PASO=2: T. RECIRCULACIN) PAR2 : INT ; //(TIPO_PASO=1: T. BOMBA SOSA) PAR3 : INT ; //(TIPO_PASO=1: T. BOMBA CIDO) PAR4 : INT ; //(TIPO_PASO=1: T. BOMBA DESINFECTANTE) PAR5 : INT ; //(TIPO_PASO=1: T. BOMBA TENSOACTIVO) PAR6 : INT ; //PARMETRO 6 (RESERVA) PAR7 : INT ; //PARMETRO 7 (RESERVA) PAR8 : INT ; //PARMETRO 8 (RESERVA) PAR9 : INT ; //PARMETRO 9 (RESERVA) PAR10 : INT ; //PARMETRO 10 (RESERVA) END_STRUCT ; ... ... PAS0152 : STRUCT //PASO 152 DE LA RECETA N_PASO : INT := 1; //N DEL PASO (1-20) TIPO_PASO : INT ; //TIPO DE PASO (1=PREPARACIN; 2=ENVO; 3=RECIRCULACIN; 4=VACIADO ESTADO : INT ; //(0=NO REALIZADO; 1=EN EJECUCIN; 2=TERMINADO) INICIO : DATE_AND_TIME ; //FECHA Y HORA DE INICIO DEL PASO FIN : DATE_AND_TIME ; //FECHA Y HORA DE FINAL DEL PASO PAR1 : INT ; //(TIPO_PASO=1: LITROS DE AGUA ; TIPO_PASO=2: T. RECIRCULACIN) PAR2 : INT ; //(TIPO_PASO=1: T. BOMBA SOSA) PAR3 : INT ; //(TIPO_PASO=1: T. BOMBA CIDO) PAR4 : INT ; //(TIPO_PASO=1: T. BOMBA DESINFECTANTE) PAR5 : INT ; //(TIPO_PASO=1: T. BOMBA TENSOACTIVO) PAR6 : INT ; //PARMETRO 6 (RESERVA) PAR7 : INT ; //PARMETRO 7 (RESERVA) PAR8 : INT ; //PARMETRO 8 (RESERVA) PAR9 : INT ; //PARMETRO 9 (RESERVA) PAR10 : INT ; //PARMETRO 10 (RESERVA) END_STRUCT ;

Pgina 43 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales END_STRUCT ;

DATA_BLOCK DB 110
TITLE = VERSION : 0.1

STRUCT EW_0 : WORD ; //COPIA E0.0 a E1.7 EW_2 : WORD ; //COPIA E2.0 a E3.7 EW_4 : WORD ; //COPIA E4.0 a E5.7 EW_6 : WORD ; //COPIA E6.0 a E7.7 EW_8 : WORD ; //COPIA E8.0 a E9.7 AW_0 : WORD ; //COPIA A0.0 a A1.7 AW_2 : WORD ; //COPIA A2.0 a A3.7 AW_4 : WORD ; //COPIA A4.0 a A5.7 EA1 : INT ; //VALOR ENTRADA ANALOG. 1 EA2 : INT ; //VALOR ENTRADA ANALOG. 2 RESERVA_ES_1 : WORD ; //EMPLAZAMIENTO LIBRE 1 RESERVA_ES_2 : WORD ; //EMPLAZAMIENTO LIBRE 2 RESERVA_ES_3 : WORD ; //EMPLAZAMIENTO LIBRE 3 RESERVA_ES_4 : WORD ; //EMPLAZAMIENTO LIBRE 4 RESERVA_ES_5 : WORD ; //EMPLAZAMIENTO LIBRE 5 RESERVA_ES_6 : WORD ; //EMPLAZAMIENTO LIBRE 6 RESERVA_ES_7 : WORD ; //EMPLAZAMIENTO LIBRE 7 ZAMA : BOOL ; //AUTORIZACIN PLC MOV. AUTO. ZAMM : BOOL ; //AUTORIZACIN PLC MOV. MAN. ZRECEJ : BOOL ; //RECETA EN EJECUCIN ZRECSTOP : BOOL ; //RECETA PARADA POR EL PLC ZFINREC : BOOL ; //FIN RECETA ZIES : BOOL ; //INSTALACIN EN SERVICIO EnDef : BOOL ; //INSTALACION CON ALGUN DEFECTO MPLC_PC_347 : BOOL ; ZECNT : BOOL ; //EN ESPERA CONFIRMACION N DE TANQUE ZECBA : BOOL ; //EN ESPERA CONFIRMACION ACTIVACION BOMBA ACIDO MPLC_PC_352 : BOOL ; ZCRES : BOOL ; //CONFIRMACION RESET MPLC_PC_354 : BOOL ; MPLC_PC_355 : BOOL ; ... ... MPLC_PC_437 : BOOL ; XAUTMOVMAN : BOOL ; //BIT AUTORIZACIN MOVIMIENTOS MANUALES DESDE SCADA XAREC : BOOL ; //BIT ARRANCAR RECETA DESDE SCADA XPREC : BOOL ; //BIT PARAR RECETA DESDE SCADA XRESET_REC : BOOL ; //BIT RESET RECETA DESDE SCADA XRESET_DEF : BOOL ; //BIT RESET DEFECTOS DESDE SCADA XCOM_OK : BOOL ; //BIT COMUNICACION OK XPES : BOOL ; //BIT PUESTA EN SERVICIO XAUTO : BOOL ; //BIT PASAR A AUTOMATICO XPEMERG : BOOL ; //BIT PARADA EMERGENCIA MPC_PLC_451 : BOOL ; MPC_PLC_477 : BOOL ; XSAVA2 : BOOL ; //ABRIR VALVULA ASPIRACION 2 EN MANUAL XSAVA : BOOL ; //ABRIR VALVULA DE AGUA EN MANUAL XSABSOSA : BOOL ; //ARRANCAR BOMBA DE SOSA EN MANUAL XSABACIDO : BOOL ; //ARRANCAR BOMBA DE ACIDO EN MANUAL XSABDESIN : BOOL ; //ARRANCAR BOMBA DE DESINFECTANTE EN MANUAL XSABTENSO : BOOL ; //ARRANCAR BOMBA DE TENSOACTIVO EN MANUAL XSAVPREP : BOOL ; //ABRIR VALVULA PREPARACION EN MANUAL XSAVA1 : BOOL ; //ABRIR VALVULA ASPIRACION 1 EN MANUAL XSAVI2 : BOOL ; //ABRIR VALVULA IMPULSION 2 EN MANUAL XSABECIP : BOOL ; //ARRANCAR BOMBA ENVIO CIP EN MANUAL XSABCARRO : BOOL ; //ARRANCAR BOMBA CARRO MOVIL EN MANUAL XSAVI1 : BOOL ; //ABRIR VALVULA IMPULSION 1 EN MANUAL XSAVA2A : BOOL ; //ABRIR VALVULA ASPIRACION 2 APOLLO EN MANUAL XSAVA1A : BOOL ; //ABRIR VALVULA ASPIRACION 1 APOLLO EN MANUAL

Pgina 44 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales XSAVI1A : BOOL ; //ABRIR VALVULA IMPULSION 1 APOLLO EN MANUAL XSAVI2A : BOOL ; //ABRIR VALVULA IMPULSION 2 APOLLO EN MANUAL XSABAPOLLO : BOOL ; //ARRANCAR BOMBA APOLLO EN MANUAL MPC_PLC_501 : BOOL ; ... ... MPC_PLC_507 : BOOL ; XSCBACIDO : BOOL ; //CONFIRMACION BOMA ACIDO EN MARCHA MPC_PLC_511 : BOOL ; MPC_PLC_537 : BOOL ; XDSEMERG : BOOL ; //DEFECTO SETA EMERGENCIA PULSADA XDFALIM : BOOL ; //DEFECTO FUENTE DE ALIMENTACION XDQBENVIO : BOOL ; //DEFECTO MAGNETOTERMICO BOMBA DE ENVIO XDQBAPOLLO : BOOL ; //DEFECTO MAGNETOTERMICO BOMBA APOLLO XDQBACARRO : BOOL ; //DEFECTO MAGNETOTERMICO BOMBA CARRO MOVIL XDQBSOSA : BOOL ; //DEFECTO MAGNETOTERMICO BOMBA DE SOSA XDQBACIDO : BOOL ; //DEFECTO MAGNETOTERMICO BOMBA DE ACIDO XDQBTENSO : BOOL ; //DEFECTO MAGNETOTERMICO BOMBA DE TENSOACTIVO XDQBDESIN : BOOL ; //DEFECTO MAGNETOTERMICO BOMBA DE DESINFECTANTE DEF_551 : BOOL ; DEF_557 : BOOL ; XDMEA : BOOL ; //DEFECTO MODULO ENTRADA ANALOGICA DEF_561 : BOOL ; DEF_577 : BOOL ; XDMVA : BOOL ; //DEFECTO MANIOBRA VLVULA DE AGUA XDMBSOSA : BOOL ; //DEFECTO MANIOBRA BOMBA DE SOSA XDMBACIDO : BOOL ; //DEFECTO MANIOBRA BOMBA DE ACIDO XDMBDESIN : BOOL ; //DEFECTO MANIOBRA BOMBA DE DESINFECTANTE XDMBTENSO : BOOL ; //DEFECTO MANIOBRA BOMBA DE TENSOACTIVO XDMVPREP : BOOL ; //DEFECTO MANIOBRA VLVULA SALIDA PREPARACIN XDMVA1 : BOOL ; //DEFECTO MANIOBRA VLVULA ASPIRACIN 1 XDMVI2 : BOOL ; //DEFECTO MANIOBRA VLVULA IMPULSIN 2 XDMBECIP : BOOL ; //DEFECTO MANIOBRA BOMBA ENVO CIP XDMBCARRO : BOOL ; //DEFECTO MANIOBRA BOMBA CARRO MVIL XDMVA2 : BOOL ; //DEFECTO MANIOBRA VALVULA ASPIRACION 2 XDMVI1 : BOOL ; //DEFECTO MANIOBRA VALVULA IMPULSION 1 XDMVA1A : BOOL ; //DEFECTO MANIOBRA VALVULA ASPIRACION 1 APOLLO XDMVA2A : BOOL ; //DEFECTO MANIOBRA VALVULA ASPIRACION 2 APOLLO XDMVI1A : BOOL ; //DEFECTO MANIOBRA VALVULA IMPULSION 1 APOLLO XDMVI2A : BOOL ; //DEFECTO MANIOBRA VALVULA IMPULSION 2 APOLLO XDMBAPOLLO : BOOL ; //DEFECTO MANIOBRA BOMBA APOLLO DEF_601 : BOOL ; DEF_607 : BOOL ; XDPASO_ACT : BOOL ; //DEFECTP PASO ACTIVO (FUERA RANGO 1-20) XDTIP_PASO : BOOL ; //DEFECTO TIPO DE PASO (FUERA RANGO 1-4) XDTC : BOOL ; //DEFECTO TANQUE CONECTADO XDNPASOS : BOOL ; //DEFECTO NUMERO DE PASOS RECETA XDTNV : BOOL ; //DEFECTO TANQUE NO VACO XDCOM : BOOL ; //DEFECTO COMUNICACIN PLC <=> PC DEF_616 : BOOL ; DEF_637 : BOOL ; R1 : WORD ; R2 : WORD ; R3 : WORD ; R4 : WORD ; R5 : WORD ; R6 : WORD ; R7 : WORD ; R8 : WORD ; R9 : WORD ; R10 : WORD ; R11 : WORD ; R12 : WORD ; R13 : WORD ; NREC : WORD ; //NUMERO DE LA RECETA NTANQUE : WORD ; //NUMERO DEL TANQUE

Pgina 45 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales ESTADO_REC : WORD ; //ESTADO DE LA RECETA PASO_ACT : WORD ; //PASO ACTUAL TIEMPO_ACT : WORD ; //TIEMPO ACTUAL VOLAGUA : WORD ; //VOLUMEN AGUA TANQUE DE PREPARACION TSOSA : WORD ; //TIEMPO SOSA TACIDO : WORD ; //TIEMPO ACIDO TTENSO : WORD ; //TIEMPO TENSOACTIVO TDESIN : WORD ; //TIEMPO DESINFECTANTE TRECIRC : WORD ; //TIEMPO DE RECIRCULACION END_STRUCT ;

FUNCTION FC 6 : VOID
TITLE =FC PARA CALCULAR CAMBIOS DE PASOS VERSION : 0.1

VAR_INPUT NPasos : BYTE ; //NUMERO DE PASOS DE LA RECETA END_VAR VAR_IN_OUT PasoAct : INT ; //PASO ACTIVO DE LA RECETA END_VAR VAR_TEMP AuxCalcP : INT ; //AUXILIAR CALCULO PUNTERO ErrorHora1 : INT ; //ERROR HORA Y FECHA DE FIN PASO ACTIVO ErrorHora2 : INT ; //ERROR HORA Y FECHA DE INICIO SIGUIENTE PASO AuxFH : DATE_AND_TIME ; //AUXILIAR FECHA Y HORA ANPasos : INT ; //AUXILIAR N DE PASOS END_VAR BEGIN NETWORK TITLE =CONVERTIT DE BYTE A INT L #NPasos; T #ANPasos; NOP 0; NETWORK TITLE =VERIFICAR FIN RECETA FREC: L #ANPasos; L #PasoAct; <=I ; S M 21.0; NETWORK TITLE =SI FIN RECETA => FIN DE MDULO U M 21.0; SAVE ; BEB ; NETWORK TITLE =ABRIR DB_REC_FERM (DB100) AUF DB 100; NETWORK TITLE =ACTIVAR PRINCIPIO DE PASO U M 1.0; S M 21.7; NETWORK TITLE =COMPROBAR PRINCIPIO DE RECETA L #PasoAct; L 0; ==I ; //CALCULA RLO PARA SALTO L P#30.0; //CARGAR DIRECCIN BASE PALABRA "ESTADO" DB100 LAR1 ; SPB FP0; //SALTO A ETIQUETA FP0 NETWORK TITLE =CALCULO DIRECCIN PUNTERO A "ESTADO" U( L L *I ; #PasoAct; 42; ;

Pgina 46 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales T #AuxCalcP; UN OV; SAVE ; CLR ; U BIE; ) ; SPBNB _00b; L #AuxCalcP; L 12; -I ; T #AuxCalcP; _00b: NOP 0; NETWORK TITLE =PASO A FORMATO PUNTERO LA DIRECCIN "ESTADO" Y TRANSFIERE A AR1 L #AuxCalcP; SLW 3; LAR1 ; //CARGAR EN PUNTERO SISTEMA 1 (AR1) DIRECCIN "ESTADO" NETWORK TITLE =PASO ACTIVO = TERMINADO L 2; //"ESTADO" PASO = TERMINADO T DBW [AR1,P#0.0]; NETWORK TITLE =DETERMINAR FECHA Y HORA FIN DE PASO U M 1.0; SPBNB _010; CALL SFC 1 ( RET_VAL := #ErrorHora1, CDT := #AuxFH); _010: NOP 0; NETWORK TITLE =TRANSFERENCIA A PALABRA FIN PASO ACTIVO DEL DB_REC_FERM (DB100) L LD 6; //CARGA AO, MES, DA Y HORA (4 PRIMEROS BYTES DE AuxFH) T DBD [AR1,P#10.0]; //TRANFIERE A LOS 4 PRIMEROS BYTES DE FIN DEL PASO ACTIVO L LD 10; //CARGA MINUTO, SEGUNDO, MILISEGUNDO Y DIA SEMANA (4 SIGUIENTES) T DBD [AR1,P#14.0]; //TRANFIERE A LOS 4 LTIMOS BYTES DE FIN DEL PASO ACTIVO NETWORK TITLE =ACTUALIZA VALOR PUNTERO SIGUIENTE VALOR "ESTADO" TAR1 ; //CARGA EN ACU1 DIRECCIN DE "ESTADO" (AR1) L P#42.0; //AUMENTA PUNTERO HASTA SIGUIENTE PASO "ESTADO" +I ; LAR1 ; NETWORK TITLE =BUSCAR SIGUIENTE PASO SIN REALIZAR (ESTADO<>2) FP0: NOP 0; //META DE SALTO L #NPasos; //COMPROBAR QUE NPASOS RECETA ES <=20 L DB1.DBW 42; >I ; AUF DB 100; SPB EREC; //SALTO A ERROR-RECETA SI FUERA DE RANGO BUC1: L #NPasos; //COMPROBAR SI SE HA ALCANZADO FIN RECETA L #PasoAct; <=I ; SPB FREC; //SI ES ASI SALTA A FIN-RECETA L #PasoAct; //INCREMENTA PasoAct L 1; +I ; T #PasoAct; L DBW [AR1,P#0.0]; //CARGA VALOR DE "ESTADO" DEL SIGUIENTE PASO L 2; ==I ; SPBN FBUC; //SI PASO TERMINADO SIGUE; SI NO SALTA A FBUC TAR1 ; //CARGA EN ACU1 DIRECCIN DE "ESTADO" (AR1) L P#42.0; //OFFSET ENTRE "ESTADO" DISTINTOS PASOS +I ; LAR1 ; //AHORA EL PUNTERO AR1 APUNTA A "ESTADO" SIGUIENTE PASO SPA BUC1; FBUC: L 1; T DBW [AR1,P#0.0]; //"ESTADO" PASO ACTIVO = EN EJECUCIN

Pgina 47 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales NETWORK TITLE =DETERMINAR FECHA Y HORA INICIO DE PASO U M 1.0; SPBNB _011; CALL SFC 1 ( RET_VAL := #ErrorHora2, CDT := #AuxFH); _011: NOP 0; NETWORK TITLE =RESET TIEMPO PASO ACTIVO DEL DB_REC_FERM (DB100) L 0; T DB100.DBW 24; NOP 0; NETWORK TITLE =TRANSFERENCIA A "INICIO" PASO ACTIVO DEL DB_REC_FERM (DB100) L LD 6; //CARGA AO, MES, DA Y HORA (4 PRIMEROS BYTES DE AuxFH) T DBD [AR1,P#2.0]; //TRANFIERE A LOS 4 PRIMEROS BYTES DE INICIO DEL PASO ACTIVO L LD 10; //CARGA AO, MES, DA Y HORA (4 PRIMEROS BYTES DE AuxFH) T DBD [AR1,P#6.0]; //TRANFIERE A LOS 4 PRIMEROS BYTES DE INICIO DEL PASO ACTIVO NETWORK TITLE =ERROR RECETA; FUERA DE RANGO 1-20 EREC: NOP 0; //ERROR CALCULADO EN FC5 ETIQUETA RFP; ACTIVA DB110.DBX61.0

END_FUNCTION

FUNCTION FC 12 : VOID
TITLE =MODULO DE RESET VERSION : 0.1

VAR_TEMP TEMP0 : INT ; END_VAR BEGIN NETWORK TITLE =RESET SEGURIDAD INICIO AUF DB 100; U M 1.0; R M 22.0; NETWORK TITLE = L 0; T DBW 22; T MW 10; L 1; T #TEMP0; L P#30.0; //valor inicial puntero LAR1 ; //Carga en AR1 M001: L DB1.DBW 42; L #TEMP0; ==I ; AUF DB 100; SPB M002; //Salir del bucle tras ultimo paso L L#0; T DBD [AR1,P#0.0]; //reset T DBD [AR1,P#4.0]; T DBD [AR1,P#8.0]; T DBD [AR1,P#12.0]; T DBW [AR1,P#16.0]; TAR1 ; L P#42.0; //Offset siguiente paso +I ; LAR1 ; L #TEMP0; //Incrementa contador bucle L 1; +I ;

Pgina 48 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales T #TEMP0; SPA M001; M002: NOP 0; END_FUNCTION

FUNCTION FC 100 : VOID


TITLE =FC PARA CONVERSIN INT-S5T VERSION : 0.1

VAR_INPUT TENTRADA : INT ; //ENTRADA VALOR DE TIEMPO FORMATO INT END_VAR VAR_OUTPUT TSALIDA : S5TIME ; //SALIDA VALOR DE TIEMPO FORMATO S5T END_VAR VAR_TEMP VARAUXE : WORD ; //AUXILIAR ENTRADA WORD VARAUXS : WORD ; //AUXILIAR SALIDA WORD END_VAR BEGIN NETWORK TITLE =CONVERTIR VALOR DE ENTRADA A BCD L #TENTRADA; ITB ; T #VARAUXE; NOP 0; NETWORK TITLE =ASIGNAR BASE DE TIEMPO SEGUNDOS L #VARAUXE; L W#16#2000; OW ; T #VARAUXS; NOP 0; NETWORK TITLE =TRANSFERIR A LA SALIDA L #VARAUXS; T #TSALIDA; NOP 0; END_FUNCTION

FUNCTION FC 102 : VOID


TITLE = VERSION : 0.1 BEGIN NETWORK TITLE =

U M 0.0; = E 1.3; END_FUNCTION

FUNCTION FC 1 : VOID
TITLE =FC PARA PREPARACIN DE SOLUCIONES DE CIP VERSION : 0.1

VAR_TEMP AuxAgua : BOOL ; //AUXILIAR AGUA PREPARACIN AuxSosa : BOOL ; //AUXILIAR SOSA AuxAcido : BOOL ; //AUXILIAR ACIDO AuxDesin : BOOL ; //AUXILIAR DESINFECTANTE AuxTenso : BOOL ; //AUXILIAR TENSOACTIVO ERR_SFC40 : INT ; //ERROR LLAMADA SFC40 ERR_SFC39 : INT ; //ERROR LLAMADA SFC39 PREP_PAR1 : INT ; //LITROS DE AGUA PREP_PAR2 : INT ; //TIEMPO BOMBA DE SOSA PREP_PAR3 : INT ; //TIEMPO BOMBA ACIDO PREP_PAR4 : INT ; //TIEMPO BOMBA DESINFECTANTE

Pgina 49 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales PREP_PAR5 : INT ; //TIMEPO BOMBA TENSOACTIVO AuxCmpAgua : DINT ; //AUXILIAR COMPARACION LLENADO AGUA END_VAR BEGIN NETWORK TITLE =RESET VOLUMEN U M 21.1; U M 21.7; U M 21.3; SPBN M200; L 0; T DB1.DBD 32; T DB1.DBD 24; T DB1.DBD 28; T MW 10; M200: NOP 0; NETWORK TITLE =ARRANCAR INTERRUPCIN CCLICA (OB35) U M 1.1; U M 21.1; U M 21.3; U M 21.7; SPBNB _001; CALL SFC 40 ( MODE := B#16#2, OB_NR := 35, RET_VAL := #ERR_SFC40); _001: NOP 0; NETWORK TITLE =INICIALIZAR REGISTRO DE DIRECCIONES (AR1) Y TRANSFERIR PARMETRO AUF DB 100; //ABRIR DB100 COMO DB GLOBAL U M 21.1; U M 21.3; //CONDICIONES DE EJECUCIN U M 21.7; SPBN M100; L DBW [AR1,P#20.0]; //LEER Y TRANSFERIR PARMETRO 1 T DB1.DBD 38; AUF DB 100; L DBW [AR1,P#22.0]; //LEER Y TRANSFERIR PARMETRO 2 T #PREP_PAR2; L DBW [AR1,P#24.0]; //LEER Y TRANSFERIR PARMETRO 3 T #PREP_PAR3; L DBW [AR1,P#26.0]; //LEER Y TRANSFERIR PARMETRO 4 T #PREP_PAR4; L DBW [AR1,P#28.0]; //LEER Y TRANSFERIR PARMETRO 5 T #PREP_PAR5; M100: NOP 0; NETWORK TITLE =CONVERTIR VALORES INT => S5T U U U = M 21.1; M 21.3; M 21.7; L 20.0;

U L 20.0; SPBNB _002; CALL FC 100 ( TENTRADA TSALIDA _002: NOP 0; U L 20.0; SPBNB _003; CALL FC 100 ( TENTRADA TSALIDA _003: NOP 0; U L 20.0; SPBNB _004; CALL FC 100 ( TENTRADA

:= #PREP_PAR2, := DB1.DBW 4);

:= #PREP_PAR3, := DB1.DBW 6);

:= #PREP_PAR4,

Pgina 50 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales TSALIDA := DB1.DBW 8); _004: NOP 0; U L 20.0; SPBNB _005; CALL FC 100 ( TENTRADA := #PREP_PAR5, TSALIDA := DB1.DBW 10); _005: NOP 0; NETWORK TITLE =SI RECETA PARADA SE CARGA VALOR RESTANTE DEL TEMPORIZADOR U M 21.3; U M 20.5; = L 6.0; U L 6.0; SPBNB _007; L T 1; ITB ; L W#16#2000; OW ; T DB1.DBW 4; _007: NOP 0; U L 6.0; SPBNB _008; L T 2; ITB ; L W#16#2000; OW ; T DB1.DBW 6; _008: NOP 0; U L 6.0; SPBNB _009; L T 3; ITB ; L W#16#2000; OW ; T DB1.DBW 8; _009: NOP 0; U L 6.0; SPBNB _00a; L T 4; ITB ; L W#16#2000; OW ; T DB1.DBW 10; _00a: NOP 0; NETWORK TITLE =PASO DE NREAL A ENTERO 32 BITS U M 1.1; SPBNB _006; L DB1.DBD 32; TRUNC ; T #AuxCmpAgua; _006: NOP 0; NETWORK TITLE = U A 3.6; SPBNB _013; CALL FC 102 ; _013: NOP 0; NETWORK TITLE =CONTAR VOLUMEN DE AGUA TANQUE DE PREPARACION UN A 3.6; //SI VLVULA CERRADA SALTA A M300 SPB M300; U E 1.3; FP M 6.2; SPBNB _00b; L MW 10; L 1; +I ; T MW 10; _00b: NOP 0; M300: NOP 0;

Pgina 51 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales NETWORK TITLE =VIGILANCIA LLENADO AGUA

U M 21.1; U M 21.3; U( ; O( ; L MW 10; //COMPARA VOLUMEN CON CONSIGNA L DB1.DBD 38; >=D ; ) ; O M 15.0; //O SI RECETA SIN AGUA ) ; = M 15.0;

NETWORK TITLE =BLOQUEO INTERRUPCIN CCLICA (OB35) U M 1.1; U M 21.3; U M 15.0; SPBNB _017; CALL SFC 39 ( MODE := B#16#2, OB_NR := 35, RET_VAL := #ERR_SFC39); _017: NOP 0; NETWORK TITLE =ORDEN ABRIR VLVULA DE AGUA (V1) U M 21.1; U M 21.3; UN M 15.0; = M 30.1; NETWORK TITLE =CONTROL TIEMPO BOMBA SOSA (T1) U M 21.1; U M 21.3; L DB1.DBW 4; SE T 1; U M 20.6; R T 1; NOP 0; NOP 0; NOP 0; NETWORK TITLE =COMPROBACION PASO CON ACIDO Y ACTIVAR ALARMA

L L >I =

DB1.DBW 6; W#16#2000; ; M 7.0;

NETWORK TITLE =CONFIRMAR ACTIVACION BOMBA ACIDO U M 21.3; U( ; U DB110.DBX 51.0; FP M 6.3; O M 7.2; ) ; = M 7.2; NETWORK TITLE =ALARMA ACTIVAR BOMBA ACIDO

U M 21.3; U M 7.0; UN M 7.2;

Pgina 52 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales = M 7.1; = DB110.DBX 35.1; NETWORK TITLE =CONTROL TIEMPO BOMBA ACIDO (T2) U M 21.1; U M 21.3; U( ; O M 7.0; ON M 7.0; ) ; L DB1.DBW 6; SE T 2; U M 20.6; R T 2; NOP 0; NOP 0; NOP 0; NETWORK TITLE =CONTROL TIEMPO BOMBA DESINFECTANTE (T3) U M 21.1; U M 21.3; L DB1.DBW 8; SE T 3; U M 20.6; R T 3; NOP 0; NOP 0; NOP 0; NETWORK TITLE =CONTROL TIEMPO BOMBA TENSOACTIVO (T4) U M 21.1; U M 21.3; L DB1.DBW 10; SE T 4; U M 20.6; R T 4; NOP 0; NOP 0; NOP 0; NETWORK TITLE =ORDEN ARRANCAR BOMBA SOSA U M 21.1; U M 21.3; UN T 1; = M 30.2; NETWORK TITLE =ORDEN ARRANCAR BOMBA ACIDO U M 21.1; U M 21.3; UN T 2; = M 30.3; NETWORK TITLE =ORDEN ARRANCAR BOMBA DESINFECTANTE U M 21.1; U M 21.3; UN T 3; = M 30.4; NETWORK TITLE =ORDEN ARRANCAR BOMBA TENSOACTIVO U M 21.1; U M 21.3; UN T 4; = M 30.5; NETWORK TITLE =CANCELAR BIT PRINCIPIO DE PASO U U R M M M 21.1; 21.3; 21.7;

Pgina 53 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales NETWORK TITLE =SI FIN PREPARACIN => CAMBIO DE PASO U M 21.1; U M 21.3; U M 15.0; U T 1; U T 2; U T 3; U T 4; SPBNB _01b; CALL FC 6 ( NPasos PasoAct _01b: NOP 0; END_FUNCTION

:= DB100.DBB 2, := DB100.DBW 22);

FUNCTION FC 2 : VOID
TITLE =FC PARA CALCULAR SEGURIDADES DE INICIO RECETA VERSION : 0.1

VAR_INPUT NTanque : BYTE ; //NMERO DE TANQUE A LIMPIAR NPasos : BYTE ; //NMERO DE PASOS EN RECETA END_VAR VAR_TEMP AuxCNP : BOOL ; //AUXILIAR COMPROBACIN N DE PASOS AuxCTC : BOOL ; //AUXILIAR COMPROBACIN TANQUE CONECTADO AuxTC : INT ; //AUXILIAR TANQUE CONECTADO AuxNTanque : INT ; //AUXILIAR N DE TANQUE AuxNPasos : INT ; //AUXILIAR N DE PASOS ASNT : INT ; //AUXILIAR SALIDA N TANQUE END_VAR BEGIN NETWORK TITLE =CONVERTIR DE BYTE A INT L #NTanque; T #AuxNTanque; L #NPasos; T #AuxNPasos; NETWORK TITLE =COMPROBAR QUE EL N DE PASOS RECETA ES >0 Y <=20 U( ; L #AuxNPasos; L 0; >I ; ) ; U( ; L #AuxNPasos; L DB1.DBW 42; <=I ; ) ; = #AuxCNP; NETWORK TITLE =DEFECTO N PASOS U M 22.1; U M 21.1; UN #AuxCNP; O ; U DB110.DBX 61.3; UN M 20.6; = DB110.DBX 61.3; NETWORK TITLE =RECETA TANQUES DE FERMENTACION U( ; L #AuxNTanque; L 1; >=I ; ) ; U( ;

Pgina 54 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales L #AuxNTanque; L 4; <=I ; ) ; = M 22.5; NETWORK TITLE =RECETA TANQUES APOLLO U( ; L #AuxNTanque; L 5; >=I ; ) ; U( ; L #AuxNTanque; L 6; <=I ; ) ; = M 22.6; NETWORK TITLE =ENMASCARAR BITS ENTRADA CODIFICACIN TANQUE L T U = = U = = U = = U = = U = = L T 0; //BORRAR BYTE CODIFICACION TANQUE MB 25; DB110.DBX 46.0; E 3.4; M 25.0; DB110.DBX 46.1; //CAMBIAR BITS MAS SIGNIFICATIVOS E 3.3; M 25.1; DB110.DBX 46.2; E 3.2; M 25.2; DB110.DBX 46.3; E 3.1; M 25.3; DB110.DBX 46.4; E 3.0; M 25.4; MB 25; #AuxTC; //PASAR A INT EL VALOR OBTENIDO

NETWORK TITLE =COMPROBAR QUE NTANQUE A LIMPIAR COINCIDA CON TANQUE CONECTADO L #AuxNTanque; L #AuxTC; ==I ; = #AuxCTC; NETWORK TITLE =DEFECTO TANQUE CONECTADO U M 22.1; U M 21.1; UN #AuxCTC; O ; U DB110.DBX 61.2; UN M 20.6; = DB110.DBX 61.2; NETWORK TITLE =ORDEN ABRIR VLVULAS SEGURIDAD INICIO FERMENTACIN U M 22.1; U M 21.1; U #AuxCNP; U #AuxCTC; = M 30.0; NETWORK TITLE =TEMPORIZADOR SEGURIDAD ARRANQUE RECETA U U( U U O U M ; M E ; M 30.0; 22.5; 2.0; 22.6;

Pgina 55 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales U E 4.0; ) ; L S5T#2S; SE T 0; NOP 0; NOP 0; NOP 0; NOP 0; NETWORK TITLE =INICIALIZAR AUXILIAR SALIDA CODIFICADA N DE TANQUE L 0; T #ASNT; NOP 0; NETWORK TITLE =CALCULAR CODIFICACION N TANQUE (INTERFASE SALIDA)

U M 20.7; = L 10.0; U L 10.0; U( ; L #AuxNTanque; L 1; >=I ; ) ; U( ; L #AuxNTanque; L 8; <=I ; ) ; SPBNB _001; L #AuxNTanque; L 29; +I ; T #ASNT; _001: NOP 0; U L 10.0; U( ; L #AuxNTanque; L 9; >=I ; ) ; U( ; L #AuxNTanque; L 16; <=I ; ) ; SPBNB _002; L #AuxNTanque; L 31; +I ; T #ASNT; _002: NOP 0; U L 10.0; U( ; L #AuxNTanque; L 17; ==I ; ) ; SPBNB _003; L 38; T #ASNT; _003: NOP 0; U L 10.0; U( ; L #AuxNTanque; L 18; ==I ; ) ; SPBNB _004; L 48; T #ASNT; _004: NOP 0; NETWORK

Pgina 56 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales TITLE =CODIFICACION SALIDA BINARIA N TANQUE (BITS A12.4/A11.7--A11.3) L #ASNT; SLW 3; //DESPLAZAR BITS A POSICIONES 8-3 T MW 12; //TRANSFERIR A PALABRA AUXILIAR U M 13.3; = A 1.3; //BIT 0 CODIFICACION TANQUE U M 13.4; = A 1.4; //BIT 1 CODIFICACION TANQUE U M 13.5; = A 1.5; //BIT 2 CODIFICACION TANQUE U M 13.6; = A 1.6; //BIT 3 CODIFICACION TANQUE U M 13.7; = A 1.7; //BIT 4 CODIFICACION TANQUE U M 12.0; = A 2.4; //BIT 5 CODIFICACION TANQUE

NETWORK TITLE =TEMPORIZADOR ESPERA CONFIRMACION N TANQUE U M 21.1; U M 22.1; L S5T#2S; SE T 12; NOP 0; NOP 0; NOP 0; NOP 0; NETWORK TITLE =ESPERANDO CONFIRMACION N TANQUE U M 21.1; U M 22.1; U( ; UN E 7.0; U T 12; ON T 12; ) ; = DB110.DBX 35.0; NETWORK TITLE =SI NO DETECTA FLUJO EN TRAS 5s => CAMBIA DE PASO U T 0; U T 12; U( ; O E 7.0; O M 1.0; ) ; U( ; U M 22.5; UN E 2.7; O ; U M 22.6; UN E 5.0; ) ; UN DB110.DBX 61.4; SPBNB _005; CALL FC 6 ( NPasos := DB100.DBB 2, PasoAct := DB100.DBW 22); _005: U BIE; S M 22.0; NETWORK TITLE =DEFECTO TANQUE NO VACO U U U U( U U O U U M M T ; M E ; M E 22.1; 21.1; 0; 22.5; 2.7; 22.6; 5.0;

Pgina 57 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales ) ; O ; U DB110.DBX 61.4; UN M 20.6; = DB110.DBX 61.4; END_FUNCTION

FUNCTION FC 3 : VOID
TITLE =SEGURIDADES DE LA INSTALACIN VERSION : 0.1 BEGIN NETWORK TITLE =PARADA EMERGENCIA O DB110.DBX 54.0; O E 0.1; = M 20.0; NETWORK TITLE =INSTALACIN EN SERVICIO U( ; O E 1.1; O DB110.DBX 44.6; ) ; FP DB1.DBX 0.0; O ; U M 20.1; UN M 20.0; = M 20.1; NETWORK TITLE =INSTALACIN EN AUTOMTICO O E 1.2; O DB110.DBX 44.7; = M 20.2; NETWORK TITLE =AUTORIZACIN MOVIMIENTOS MANUALES U DB110.DBX 44.0; UN M 20.2; U M 20.1; = M 20.3; NETWORK TITLE =AUTORIZACIN MOVIMIENTOS AUTOMTICOS U M 20.2; U M 20.1; U M 20.7; UN M 20.5; = M 21.1; NETWORK TITLE =ORDEN ARRANCAR RECETA U DB110.DBX 44.1; U M 20.2; U M 20.1; = M 20.4; NETWORK TITLE =RECETA EN EJECUCIN U( ; O M 20.4; O ; U M 20.7; UN M 20.6; ) ; U M 20.2; = M 20.7; NETWORK TITLE =PARAR RECETA O DB110.DBX 44.2; O M 22.2; ON M 20.2;

Pgina 58 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales O M 22.4; = M 20.5; NETWORK TITLE =MEMORIA RECETA PARADA U M 20.7; U M 20.5; O ; U M 21.2; UN M 20.6; UN M 21.0; = M 21.2; NETWORK TITLE =RESET RECETA U FP U U O U DB110.DBX 44.1; M 6.0; M 20.2; M 21.0; ; DB110.DBX 44.3;

U M 20.5; = M 20.6; NETWORK TITLE =FIN RECETA (RESET) U M 20.6; FP M 6.1; = L 0.0; U L 0.0; BLD 102; R M 21.0; U L 0.0; SPBNB _001; CALL FC 12 ; _001: NOP 0; END_FUNCTION

FUNCTION FC 4 : VOID
TITLE =FC PARA CALCULAR PALABRAS DE LA CABECERA DEL DB100 VERSION : 0.1

VAR_TEMP ERROR_HORA_INICIO : INT ; //VALOR DE RETORNO EN CASO DE ERROR AL LEER LA FECHA Y HORA INICIO ERROR_HORA_FIN : INT ; //VALOR DE RETORNO EN CASO DE ERROR AL LEER LA FECHA Y HORA FIN END_VAR BEGIN NETWORK TITLE =REGISTRAR FECHA Y HORA DE INICIO DE LA RECETA U M 20.4; FP DB1.DBX 0.1; SPBNB _001; CALL SFC 1 ( RET_VAL := #ERROR_HORA_INICIO, CDT := DB100.CABECERA.INICIO); _001: NOP 0; NETWORK TITLE =REGISTRAR FECHA Y HORA DEL FIN DE LA RECETA U M 21.0; FP DB1.DBX 0.2; SPBNB _002; CALL SFC 1 ( RET_VAL := #ERROR_HORA_FIN, CDT := DB100.CABECERA.FIN); _002: NOP 0; NETWORK TITLE =ESTADO DE LA RECETA =>INACTIVO U( ; U M

20.7;

Pgina 59 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales U M 20.5; O ; UN M 20.7; U( ; ON M 21.0; O M 20.6; ) ; ) ; SPBNB _003; L 0; T DB100.DBW 20; _003: NOP 0; NETWORK TITLE =ESTADO DE LA RECETA =>EN EJECUCIN U M 20.7; UN M 20.5; SPBNB _004; L 1; T DB100.DBW 20; _004: NOP 0; NETWORK TITLE =ESTADO DE LA RECETA =>TERMINADA U M 20.7; U M 21.0; SPBNB _005; L 2; T DB100.DBW 20; _005: NOP 0; NETWORK TITLE =COMPARACIN TIEMPO PASO CON VALOR MXIMO INT POSITIVO L DB100.DBW 24; L 32767; ==I ; SPB TSUP; NETWORK TITLE =CALCULO DEL TIEMPO DEL PASO ACTIVO U M 20.7; UN DB110.DBX 44.2; U M 22.0; UN M 21.0; U M 0.5; U DB1.DBX 56.0; SPBNB _006; L DB100.DBW 24; L 1; +I ; T DB100.DBW 24; _006: NOP 0; NETWORK TITLE =SEGEMENTO META DEL SALTO TSUP TSUP: NOP 0; END_FUNCTION

FUNCTION FC 5 : VOID
TITLE =MDULO QUE CALCULA EL TIPO DE PASO ACTIVO VERSION : 0.1

VAR_TEMP AuxCalc : INT ; //AUXILIAR CALCULOS AuxDefTipPaso : BOOL ; //AUXILIAR DEFECTO TIPO DE PASO END_VAR BEGIN NETWORK TITLE =INICIALIZACIN PUNTERO TIPO DE PASO ACTIVO L P#0.0; T MD 2; NOP 0;

Pgina 60 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales NETWORK TITLE =INICIALIZACIN BITS DE TIPO DE PASO DE LA RECETA U M 1.1; = M 21.3; = M 21.4; = M 21.5; = M 21.6; = M 22.1; NETWORK TITLE =VERIFICAR SI PASO ACTIVO ES DE INCIO (=0) L DB100.DBW 22; //CARGA PASO ACTIVO RECETA DE FERMENTACIN L 0; ==I ; = M 22.1; SPB FMOD; //SALTA A FIN MODULO NETWORK TITLE =COMPARAR PASO ACTIVO DENTRO DE RANGO 1-20 U( ; L DB100.DBW 22; L 1; >=I ; ) ; U( ; L DB100.DBW 22; L DB1.DBW 42; <=I ; ) ; SPBN RFP; NETWORK TITLE =CALCULO DIRECCIN PUNTERO U( ; L DB100.DBW 22; L 42; *I ; T #AuxCalc; UN OV; SAVE ; CLR ; U BIE; ) ; SPBNB _001; L #AuxCalc; L 14; -I ; T #AuxCalc; _001: NOP 0; NETWORK TITLE =PASO A FORMATO PUNTERO LA DIRECCIN OBTENIDA L #AuxCalc; SLW 3; T MD 2; LAR1 ; NETWORK TITLE =CONSULTA TIPO DE PASO ACTIVO PREPARACIN (PASO 1) AUF DB 100; //ABRIR DB_REC_FERM (DB100) L DBW [MD 2]; //CARGA VALOR TIPO DE PASO (1,2,3 O 4) L 1; ==I ; = M 21.3; = #AuxDefTipPaso; SPB TPC; //SALTO A TIPO DE PASO CALCULADO NETWORK TITLE =CONSULTA TIPO DE PASO ACTIVO ENVO (PASO 2) L DBW [MD 2]; L 2; ==I ; = M 21.4; = #AuxDefTipPaso; SPB TPC; //SALTO A TIPO DE PASO CALCULADO

Pgina 61 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales NETWORK TITLE =CONSULTA TIPO DE PASO ACTIVO RECIRCULACIN (PASO 3) L DBW [MD 2]; L 3; ==I ; = M 21.5; = #AuxDefTipPaso; SPB TPC; //SALTO A TIPO DE PASO CALCULADO NETWORK TITLE =CONSULTA TIPO DE PASO ACTIVO VACIADO (PASO 4) L DBW [MD 2]; L 4; ==I ; = M 21.6; = #AuxDefTipPaso; NETWORK TITLE =DEFECTO EN TIPO DE PASO (1<=TIP_PASO<=4) TPC: UN #AuxDefTipPaso; = DB110.DBX 61.1; NETWORK TITLE =FIN DE MDULO FMOD: U M 1.0; SAVE ; BEB ; NETWORK TITLE =RECETA FUERA DE PASO (EL VALOR PASO ACTIVO NO ESTA ENTRE 1-20) RFP: U M 1.0; = DB110.DBX 61.0; END_FUNCTION

FUNCTION FC 7 : VOID
TITLE =FC PARA ENVO DE LA SOLUCIN CIP VERSION : 0.1 BEGIN NETWORK TITLE =ORDEN ABRIR VLVULA PREPARACIN (V2) U M 21.1; U M 21.4; UN T 5; = M 30.6; NETWORK TITLE = CALL FC 100 ( TENTRADA := MW 10, TSALIDA := MW 16); NOP 0; NETWORK TITLE =CONTROL TANQUE CIP VACO U M 21.1; U M 21.4; U( ; O E 6.3; O M 1.0; ) ; L MW 16; SE T 5; NOP 0; NOP 0; NOP 0; NOP 0; NETWORK TITLE =ORDEN ABRIR VLVULA ASPIRACIN 1 E IMPULSIN 2 U M U M UN T 21.1; 21.4; 5;

Pgina 62 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales = M 30.7; = M 31.0; NETWORK TITLE =CONTROL TUBERA ASPIRACIN 1 VACA U M 21.1; U M 21.4; U( ; U M 22.5; UN E 2.7; O ; U M 22.6; UN E 5.0; U T 13; U M 1.1; ) ; U M 1.1; L S5T#5S; SE T 6; NOP 0; NOP 0; NOP 0; NOP 0; NETWORK TITLE =ORDEN ARRANCAR BOMBA ENVO CIP (B4) U M 21.1; U M 21.4; U M 30.6; U M 30.7; U M 31.0; = M 31.1; NETWORK TITLE =TEMPORIZADOR BOMBA ENVIO CIP U M 31.1; L S5T#4S; SE T 13; NOP 0; NOP 0; NOP 0; NOP 0; NETWORK TITLE =ORDEN ARRANCAR BOMBA CARRO MVIL (B5) U M 21.1; U M 21.4; U M 22.5; U( ; U M 30.6; U M 31.1; O M 31.2; ) ; U M 30.7; U M 31.0; U T 13; = M 31.2; NETWORK TITLE =ORDEN ARRANCAR BOMBA APOLLO U M 21.1; U M 21.4; U M 22.6; U( ; U M 30.6; U M 31.1; O M 32.1; ) ; U M 30.7; U M 31.0; U T 13; = M 32.1; NETWORK TITLE =CANCELAR BIT PRINCIPIO DE PASO U M 21.1;

Pgina 63 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales U M 21.4; R M 21.7; NETWORK TITLE =SI FIN ENVO => CAMBIO DE PASO U M 21.1; U M 21.4; U T 5; U( ; O T 6; O M 1.0; ) ; UN M 31.1; UN M 31.2; UN M 32.1; SPBNB _001; CALL FC 6 ( NPasos PasoAct _001: NOP 0; END_FUNCTION

:= DB100.DBB 2, := DB100.DBW 22);

FUNCTION FC 8 : VOID
TITLE =FC QUE CONTROLA LA RECIRCULACIN DE LA SOLUCIN CIP VERSION : 0.1

VAR_TEMP REC_PAR1 : INT ; //VARIABLE AUXILIAR PARA ALMACENAR PARMETRO 1 END_VAR BEGIN NETWORK TITLE =INICIALIZAR REGISTRO DE DIRECCIONES (AR1) Y TRANSFERIR PARMETRO AUF DB 100; //ABRIR DB100 U M 21.1; U M 21.5; //CONDICIONES DE EJECUCIN U M 21.7; SPBN M110; L DBW [AR1,P#20.0]; //LEER Y TRANSFERIR PARMETRO 1 T #REC_PAR1; M110: NOP 0; NETWORK TITLE =CONVERTIR VALOR PAR1 DE INT => S5T U M 21.1; U M 21.5; U M 21.7; SPBNB _001; CALL FC 100 ( TENTRADA := #REC_PAR1, TSALIDA := DB1.DBW 22); _001: NOP 0; NETWORK TITLE =SI RECETA PARADA SE CARGA VALOR RESTANTE DEL TEMPORIZADOR U M 21.5; U M 20.5; SPBNB _002; L T 7; ITB ; L W#16#2000; OW ; T DB1.DBW 22; _002: NOP 0; NETWORK TITLE =CONTROL TIEMPO RECIRCULACIN (T7) U M 21.1; U M 21.5; L DB1.DBW 22; SE T 7; NOP 0; NOP 0;

Pgina 64 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales NOP 0; NOP 0; NETWORK TITLE =ORDEN ABRIR VLVULAS RECIRCULACIN U M 21.1; U M 21.5; UN T 7; = M 31.3; = M 31.4; NETWORK TITLE =ORDEN ARRANCAR BOMBA CARRO MVIL U M 21.1; U M 21.5; U M 22.5; UN T 7; U M 31.3; U M 31.4; = M 31.5; NETWORK TITLE =ORDEN ARRANCAR BOMBA APOLLO U M 21.1; U M 21.5; U M 22.6; UN T 7; U M 31.3; U M 31.4; = M 32.2; NETWORK TITLE =CANCELAR BIT PRINCIPIO DE PASO U M 21.1; U M 21.5; R M 21.7; NETWORK TITLE =SI FIN RECIRCULACIN => CAMBIO DE PASO U M 21.1; U M 21.5; U T 7; UN M 31.5; UN M 32.2; SPBNB _003; CALL FC 6 ( NPasos PasoAct _003: NOP 0; END_FUNCTION

:= DB100.DBB 2, := DB100.DBW 22);

FUNCTION FC 9 : VOID
TITLE =MODULO QUE GESTIONA EL VACIADO DE LOS TANQUES VERSION : 0.1 BEGIN NETWORK TITLE =ORDEN ABRIR VALVULAS DE VACIADO, ASPIRACION(V3,V6) U M 21.1; U M 21.6; UN T 8; = M 31.6; = M 31.7; NETWORK TITLE =CONTROL TIEMPO VACIADO (T8) U M U M U( ; U M U( ; ON E O M ) ; 21.1; 21.6; 22.5; 2.7; 1.0;

Pgina 65 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales O ; U M 22.6; U( ; ON E 5.0; O M 1.0; ) ; ) ; L S5T#3S; SE T 8; NOP 0; NOP 0; NOP 0; NOP 0; NETWORK TITLE =ORDEN ARRANCAR BOMBA CARRO MOVIL (B5) U M 21.1; U M 21.6; U M 22.5; U M 31.6; U M 31.7; = M 32.0; NETWORK TITLE =ORDEN ARRANCAR BOMBA APOLLO U M 21.1; U M 21.6; U M 22.6; U M 31.6; U M 31.7; = M 32.3; NETWORK TITLE =CANCELAR BIT PRINCIPIO DE PASO U M 21.1; U M 21.6; R M 21.7; NETWORK TITLE =SI FIN VACIADO => CAMBIO DE PASO U M 21.1; U M 21.6; U T 8; UN M 32.0; UN M 32.3; SPBNB _001; CALL FC 6 ( NPasos PasoAct _001: NOP 0; END_FUNCTION

:= DB100.DBB 2, := DB100.DBW 22);

FUNCTION FC 10 : VOID
TITLE =MODULO DE ACTIVACION DE SALIDAS VERSION : 0.1 BEGIN NETWORK TITLE =PILOTO PUESTA EN SERVICIO U M 20.1; = A 0.0; NETWORK TITLE =BALIZA VERDE U( ; O M O ; U M U M U M ) ; UN M = A NETWORK

21.1; 20.7; 20.5; 0.3; 22.3; 0.1;

Pgina 66 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales TITLE =BALIZA ROJA U M 20.7; U M 20.5; UN M 22.3; O ; U M 22.3; U M 0.3; = A 0.2; NETWORK TITLE =SEAL SONORA U M 22.4; U M 0.5; U M 1.1; O ; U M 7.1; U M 0.7; = A 0.3; NETWORK TITLE =ABRIR VALVULA DE AGUA (V1) U M 21.1; U M 21.3; U M 30.1; O ; U M 20.3; U DB110.DBX 48.1; UN DB110.DBX 61.5; O M 213.6; = A 3.6; NETWORK TITLE =ABRIR VALVULA SALIDA PREPARACION (V2) U M 21.1; U M 21.4; U M 30.6; O ; U M 20.3; U DB110.DBX 48.6; UN DB110.DBX 61.5; O M 213.7; = A 3.7; NETWORK TITLE =ABRIR VALVULA ASPIRACION 2 CARRO MOVIL (V2) U M 21.1; U M 22.5; U M 21.4; U M 30.7; O ; U M 20.3; U DB110.DBX 48.0; UN DB110.DBX 61.5; = A 2.1; NETWORK TITLE =ABRIR VALVULA ASPIRACION 1 CARRO MOVIL (V1) U M 21.1; U M 22.5; U( ; U M 22.1; U M 30.0; O ; U M 21.5; U M 31.3; O ; U M 21.6; U M 31.6; ) ; O ; U M 20.3; U DB110.DBX 48.7; UN DB110.DBX 61.5; = A 2.0; NETWORK

Pgina 67 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales TITLE =ABRIR VALVULA IMPULSION 2 CARRO MOVIL (V4) U M 21.1; U M 22.5; U M 21.6; U M 31.7; O ; U M 20.3; U DB110.DBX 49.0; UN DB110.DBX 61.5; = A 2.3; NETWORK TITLE =ABRIR VALVULA IMPULSION 1 CARRO MOVIL (V3) U M 21.1; U M 22.5; U( ; U M 21.4; U M 31.0; O ; U M 21.5; U M 31.4; ) ; O ; U M 20.3; U DB110.DBX 49.3; UN DB110.DBX 61.5; = A 2.2; NETWORK TITLE =ABRIR VALVULA ASPIRACION 1 APOLLO U M 21.1; U M 22.6; U M 21.4; U M 30.7; O ; U M 20.3; U DB110.DBX 49.4; UN DB110.DBX 61.5; O M 213.0; = A 3.1; NETWORK TITLE =ABRIR VALVULA ASPIRACION 2 APOLLO U M 21.1; U M 22.6; U( ; U M 22.1; U M 30.0; O ; U M 21.5; U M 31.3; O ; U M 21.6; U M 31.6; ) ; O ; U M 20.3; U DB110.DBX 49.5; UN DB110.DBX 61.5; O M 213.1; = A 3.0; NETWORK TITLE =ABRIR VALVULA IMPULSION 2 APOLLO U M 21.1; U M 22.6; U M 21.6; U M 31.7; O ; U M 20.3; U DB110.DBX 49.6; UN DB110.DBX 61.5; O M 213.2; = A 3.3; NETWORK

Pgina 68 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales TITLE =ABRIR VALVULA IMPULSION 1 APOLLO U M 21.1; U M 22.6; U( ; U M 21.4; U M 31.0; O ; U M 21.5; U M 31.3; ) ; O ; U M 20.3; U DB110.DBX 49.7; UN DB110.DBX 61.5; O M 213.3; = A 3.2; NETWORK TITLE =ARRANCAR BOMBA DE SOSA (B1) U M 21.1; U M 21.3; U M 30.2; O ; U M 20.3; U DB110.DBX 48.2; UN DB110.DBX 61.5; O M 210.6; = A 0.6; NETWORK TITLE =ARRANCAR BOMBA DE ACIDO (B2) U M 21.1; U M 21.3; U M 30.3; O ; U M 20.3; U DB110.DBX 48.3; UN DB110.DBX 61.5; O M 210.7; = A 0.7; NETWORK TITLE =ARRANCAR BOMBA DE DESINFECTANTE (B3) U M 21.1; U M 21.3; U M 30.4; O ; U M 20.3; U DB110.DBX 48.4; UN DB110.DBX 61.5; O M 211.1; = A 1.1; NETWORK TITLE =ARRANCAR BOMBA DE TENSOACTIVO (B6) U M 21.1; U M 21.3; U M 30.5; O ; U M 20.3; U DB110.DBX 48.5; UN DB110.DBX 61.5; O M 211.0; = A 1.0; NETWORK TITLE =ARRANCAR BOMBA ENVIO CIP (B4) U U U O U U UN O M 21.1; M 21.4; M 31.1; ; M 20.3; DB110.DBX 49.1; DB110.DBX 61.5; M 210.4;

Pgina 69 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales = A 0.4; NETWORK TITLE =ARRANCAR BOMBA CARRO MOVIL (B5) U M 21.1; U M 22.5; U( ; U M 21.4; U M 31.2; O ; U M 21.5; U M 31.5; O ; U M 21.6; U M 32.0; ) ; O ; U M 20.3; U DB110.DBX 49.2; UN DB110.DBX 61.5; = A 1.2; NETWORK TITLE =ARRANCAR BOMBA APOLLO U M 21.1; U M 22.6; U( ; U M 21.4; U M 32.1; O ; U M 21.5; U M 32.2; O ; U M 21.6; U M 32.3; ) ; O ; U M 20.3; U DB110.DBX 50.0; UN DB110.DBX 61.5; O M 210.5; = A 0.5; NETWORK TITLE =SOLICITUD ARRANCAR VALVULA DE CARBONICO U M 21.1; UN M 21.0; U M 22.0; = A 2.7; END_FUNCTION

FUNCTION FC 11 : VOID
TITLE =MODULO QUE COPIA EL VALOR DE E/S EN DB110 VERSION : 0.1

VAR_TEMP Error_Fecha_hora : INT ; Fecha_hora : DATE_AND_TIME ; Fecha : DATE ; Hora : TIME_OF_DAY ; END_VAR BEGIN NETWORK TITLE =ABRIR DB110 AUF DB 110; NETWORK TITLE =TRANSFERENCIA DE VALORES EB0,EB1,EB2 Y EB3 L ED 0; T DBD 0; NOP 0; NETWORK

Pgina 70 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales TITLE =TRANSFERENCIA DE VALORES EB4,EB5,EB6 Y EB7 L ED 4; T DBD 4; NOP 0; NETWORK TITLE =TRANSFERENCIA DE VALORES EB8 Y EB9 L EW 8; T DBW 8; NOP 0; NETWORK TITLE =TRANSFERENCIA DE VALORES AB10,AB11,AB12 Y AB13 L AD 0; T DBD 10; NOP 0; NETWORK TITLE =TRANSFERENCIA DE VALORES AB14 Y AB15 L AW 4; T DBW 14; NOP 0; NETWORK TITLE =TRANSFERENCIA DE VALORES EW256 Y EW258 // L PEW 256 // T DBW 16 // L PEW 258 // T DBW 18 // NOP 0 NETWORK TITLE =COMUNICACAION AUTORIZACION MOVIMIENTOS AUTOMATICOS U M 21.1; = DB110.DBX 34.0; NETWORK TITLE =COMUNICACAION AUTORIZACION MOVIMIENTOS MANUALES U M 20.3; = DB110.DBX 34.1; NETWORK TITLE =COMUNICACION RECETA EN EJECUCION U M 20.7; = DB110.DBX 34.2; NETWORK TITLE =COMUNICACION RECETA DETENIDA U M 20.5; = DB110.DBX 34.3; NETWORK TITLE =COMUNICACION FIN RECETA U M 21.0; = DB110.DBX 34.4; NETWORK TITLE =COMUNICACION INSTALACION EN SERVICIO U M 20.1; = DB110.DBX 34.5; NETWORK TITLE =TRANSFERIR NUMERO DE LA RECETA L DB100.DBW 0; T DB110.DBW 90; NOP 0; NETWORK TITLE =TRANFERIR NUMERO DE TANQUE L DB100.DBB 3; T DB110.DBW 92; NOP 0; NETWORK TITLE =TRANSFERIR ESTADO RECETA

Pgina 71 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

L DB100.DBW 20; T DB110.DBW 94; NOP 0; NETWORK TITLE =TRANSFERIR PASO ACTUAL L DB100.DBW 22; T DB110.DBW 96; NOP 0; NETWORK TITLE =TRANSFERIR TIEMPO PASO ACTUAL L DB100.DBW 24; T DB110.DBW 98; NOP 0; NETWORK TITLE =TRANSFERIR VOLUMEN AGUA TANQUE DE PREPARACION L MW 10; T DB110.DBW 100; NOP 0; NETWORK TITLE =TRANSFERIR TEMPORIZADOR SOSA L T 1; T DB110.DBW 102; NOP 0; NETWORK TITLE =TRANSFERIR TEMPORIZADOR ACIDO L T 2; T DB110.DBW 104; NOP 0; NETWORK TITLE =TRANSFERIR TEMPORIZADOR TENSOACTIVO L T 4; T DB110.DBW 106; NOP 0; NETWORK TITLE =TRANSFERIR TEMPORIZADOR DESINFECTANTE L T 3; T DB110.DBW 108; NOP 0; NETWORK TITLE =REGISTRAR FECHA Y HORA DE INICIO DE LA RECETA U DB110.DBX 35.7; SPBNB _001; CALL SFC 1 ( RET_VAL := #Error_Fecha_hora, CDT := #Fecha_hora); _001: NOP 0; NETWORK TITLE = CALL FC 150 ( IN RET_VAL NOP 0; NETWORK TITLE = L #Fecha; T MW 50; NOP 0; NETWORK TITLE = CALL FC 151 ( IN RET_VAL NOP 0; NETWORK

:= #Fecha_hora, := #Fecha);

:= #Fecha_hora, := #Hora);

Pgina 72 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales TITLE = L #Hora; T MD 52; NOP 0; NETWORK TITLE = CALL FC 40 ( IN RET_VAL NOP 0; NETWORK TITLE = END_FUNCTION

:= MD 52, := MW 56);

FUNCTION FC 50 : VOID
TITLE =FC PARA GESTION DE DEFECTOS VERSION : 0.1

VAR_TEMP AuxDefCarro : BOOL ; //AUXILIAR DEFECTOS CARRO MOVIL AuxDefApollo : BOOL ; //AUXLIAR DEFECTOS APOLLO END_VAR BEGIN NETWORK TITLE =SETA EMERGENCIA PULSADA O E 0.0; O DB110.DBX 45.0; = DB110.DBX 54.0; NETWORK TITLE =DEFECTO FUENTE DE ALIMENTACION U E 0.1; = DB110.DBX 54.1; NETWORK TITLE =DEFECTO MAGNETOTERMICO BOMBA DE ENVIO U E 0.2; = DB110.DBX 54.2; NETWORK TITLE =DEFECTO MAGNETOTERMICO BOMBA APOLLO U E 0.3; = DB110.DBX 54.3; NETWORK TITLE =DEFECTO MAGNETOTERMICO BOMBA SOSA U E 0.5; = DB110.DBX 54.5; NETWORK TITLE =DEFECTO MAGNETOTERMICO BOMBA ACIDO U E 0.6; = DB110.DBX 54.6; NETWORK TITLE =DEFECTO MAGNETOTERMICO BOMBA TENSOACTIVO U E 0.7; = DB110.DBX 54.7; NETWORK TITLE =DEFECTO MAGNETOTERMICO BOMBA DESINFECTANTE U E 1.0; = DB110.DBX 55.0; NETWORK TITLE =DEFECTO MANIOBRA VALVULA DE AGUA U( U UN O ; A E ;

3.6; 6.0;

Pgina 73 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales UN A 3.6; U E 6.0; ) ; L S5T#5S; SE T 100; NOP 0; NOP 0; NOP 0; U T 100; S DB110.DBX 58.0; NETWORK TITLE =CONTROL MANIOBRA VALVULA SALIDA TANQUE DE PREPARACION U( ; U A 3.7; UN E 6.2; O ; UN A 3.7; U E 6.2; ) ; L DB1.DBW 36; SE T 105; NOP 0; NOP 0; NOP 0; U T 105; S DB110.DBX 58.5; NETWORK TITLE =CONTROL MANIOBRA VALVULA ASPIRACION 1 CARRO MOVIL U( ; U A 2.0; UN E 2.0; O ; UN A 2.0; U E 2.0; ) ; L DB1.DBW 36; SE T 106; NOP 0; NOP 0; NOP 0; U T 106; S DB110.DBX 58.6; NETWORK TITLE =CONTROL MANIOBRA VALVULA ASPIRACION 2 CARRO MOVIL U( ; U A 2.1; UN E 2.1; O ; UN A 2.1; U E 2.1; ) ; L DB1.DBW 36; SE T 9; NOP 0; NOP 0; NOP 0; U T 9; S DB110.DBX 59.2; NETWORK TITLE =CONTROL MANIOBRA VALVULA IMPULSION 1 CARRO MOVIL U( ; U A 2.2; UN E 2.2; O ; UN A 2.2; U E 2.2; ) ; L DB1.DBW 36; SE T 10; NOP 0; NOP 0; NOP 0;

Pgina 74 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales U T 10; S DB110.DBX 59.3; NETWORK TITLE =CONTROL MANIOBRA VALVULA IMPULSION 2 CARRO MOVIL U( ; U A 2.3; UN E 2.3; O ; UN A 2.3; U E 2.3; ) ; L DB1.DBW 36; SE T 107; NOP 0; NOP 0; NOP 0; U T 107; S DB110.DBX 58.7; NETWORK TITLE =CONTROL MANIOBRA VALVULA ASPIRACION 1 APOLLO U( ; U A 3.0; UN E 4.0; O ; UN A 3.0; U E 4.0; ) ; L DB1.DBW 36; SE T 110; NOP 0; NOP 0; NOP 0; U T 110; S DB110.DBX 59.4; NETWORK TITLE =CONTROL MANIOBRA VALVULA ASPIRACION 2 APOLLO U( ; U A 3.1; UN E 4.1; O ; UN A 3.1; U E 4.1; ) ; L DB1.DBW 36; SE T 111; NOP 0; NOP 0; NOP 0; U T 111; S DB110.DBX 59.5; NETWORK TITLE =CONTROL MANIOBRA VALVULA IMPULSION 1 APOLLO U( ; U A 3.2; UN E 4.3; O ; UN A 3.2; U E 4.3; ) ; L DB1.DBW 36; SE T 112; NOP 0; NOP 0; NOP 0; U T 112; S DB110.DBX 59.6; NETWORK TITLE =CONTROL MANIOBRA VALVULA IMPULSION 2 APOLLO U( ; U A UN E

3.3; 4.5;

Pgina 75 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales O ; UN A 3.3; U E 4.5; ) ; L DB1.DBW 36; SE T 113; NOP 0; NOP 0; NOP 0; U T 113; S DB110.DBX 59.7; NETWORK TITLE =CONTROL MANIOBRA BOMBA DE SOSA U( ; U A 0.6; UN A 0.6; O ; UN A 0.6; U A 0.6; ) ; L DB1.DBW 36; SE T 101; NOP 0; NOP 0; NOP 0; U T 101; S DB110.DBX 58.1; NETWORK TITLE =CONTROL MANIOBRA BOMBA DE ACIDO U( ; U A 0.7; UN A 0.7; O ; UN A 0.7; U A 0.7; ) ; L DB1.DBW 36; SE T 102; NOP 0; NOP 0; NOP 0; U T 102; S DB110.DBX 58.2; NETWORK TITLE =CONTROL MANIOBRA BOMBA DE DESINFECTANTE U( ; U A 1.1; UN A 1.1; O ; UN A 1.1; U A 1.1; ) ; L DB1.DBW 36; SE T 103; NOP 0; NOP 0; NOP 0; U T 103; S DB110.DBX 58.3; NETWORK TITLE =CONTROL MANIOBRA BOMBA DE TENSOACTIVO U( ; U A 1.0; UN A 1.0; O ; UN A 1.0; U A 1.0; ) ; L DB1.DBW 36; SE T 104; NOP 0; NOP 0;

Pgina 76 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales NOP 0; U T 104; S DB110.DBX 58.4; NETWORK TITLE =CONTROL MANIOBRA BOMBA ENVO CIP U( ; U A 0.4; UN A 0.4; O ; UN A 0.4; U A 0.4; ) ; L DB1.DBW 36; SE T 108; NOP 0; NOP 0; NOP 0; U T 108; S DB110.DBX 59.0; NETWORK TITLE =CONTROL MANIOBRA BOMBA CARRO MOVIL U( ; U A 1.2; UN E 2.5; O ; UN A 1.2; U E 2.5; ) ; L DB1.DBW 36; SE T 109; NOP 0; NOP 0; NOP 0; U T 109; S DB110.DBX 59.1; NETWORK TITLE =CONTROL MANIOBRA BOMBA APOLLO U( ; U A 0.5; UN E 4.7; O ; UN A 0.5; U E 4.7; ) ; L DB1.DBW 36; SE T 114; NOP 0; NOP 0; NOP 0; U T 114; S DB110.DBX 60.0; NETWORK TITLE =DEFECTO COMUNICACION PLC <=> PC UN DB110.DBX 44.5; U M 1.1; L S5T#10S; SE T 11; NOP 0; NOP 0; NOP 0; U T 11; S DB110.DBX 61.5; NETWORK TITLE =PARADA RECETA POR DEFECTO INSTALACION O O O O O O O DB110.DBX DB110.DBX DB110.DBX DB110.DBX DB110.DBX DB110.DBX DB110.DBX 54.0; 54.1; 54.2; 54.3; 54.5; 54.6; 54.7;

Pgina 77 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales O DB110.DBX 55.0; O ; U M 22.4; UN DB110.DBX 44.4; UN E 1.1; = M 22.4; NETWORK TITLE =AUXILIAR DEFECTO MANIOBRA CARRO MOVIL O DB110.DBX 58.6; O DB110.DBX 59.2; O DB110.DBX 59.3; O DB110.DBX 58.7; O DB110.DBX 59.1; = #AuxDefCarro; NETWORK TITLE =AUXILIAR DEFECTO MANIOBRA APOLLO O DB110.DBX 59.4; O DB110.DBX 59.5; O DB110.DBX 59.6; O DB110.DBX 59.7; O DB110.DBX 60.0; = #AuxDefApollo; NETWORK TITLE =PARADA RECETA POR DEFECTO MANIOBRA O DB110.DBX 58.0; O DB110.DBX 58.1; O DB110.DBX 58.2; O DB110.DBX 58.3; O DB110.DBX 58.4; O DB110.DBX 58.5; O DB110.DBX 59.0; O #AuxDefCarro; O #AuxDefApollo; O DB110.DBX 56.0; O ; U M 22.2; UN DB110.DBX 44.4; UN E 1.1; = M 22.2; NETWORK TITLE =RESET DEFECTOS U M 20.5; U( ; O DB110.DBX 44.4; O E 1.1; ) ; = L 1.0; U L 1.0; SPBNB _001; L DW#16#0; T DB110.DBD 54; _001: NOP 0; U L 1.0; SPBNB _002; L DW#16#0; T DB110.DBD 58; _002: NOP 0; U L 1.0; SPBNB _003; L W#16#0; T DB110.DBW 62; _003: NOP 0; NETWORK TITLE =CONFIRMACION RESET U DB110.DBX 44.4; = DB110.DBX 35.3; NETWORK TITLE =ALGUN DEFECTO ACTIVO O( ; L DB110.DBD 54; //1DOBLE PALABRA DE DEFECTOS

Pgina 78 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales L DW#16#0; <>D ; ) ; O( ; L DB110.DBD 58; //2DOBLE PALABRA DE DEFECTOS L DW#16#0; <>D ; ) ; O( ; L DB110.DBW 62; //3 PALABRA DE DEFECTOS L W#16#0; <>I ; ) ; = M 22.3; = DB110.DBX 34.6;

END_FUNCTION

FUNCTION FC 101 : VOID


TITLE =FC para configuracin VERSION : 0.1 BEGIN NETWORK TITLE =BIT SIEMPRE A CERO U E 0.0; UN E 0.0; = M 1.1; NETWORK TITLE =BIT SIEMPRE A UNO O E 0.0; ON E 0.0; = M 1.0; NETWORK TITLE =CARGAR VALOR PARA CONSTANTE DE TIEMPO PARA DEFECTO L S5T#3S; T DB1.DBW 36; NOP 0; NETWORK TITLE =CARGAR VALOR PARA MAXIMO NUMERO DE PASOS L 152; T DB1.DBW 42; NOP 0; NETWORK TITLE =FLANCO POSITIVO BIT 1 SEGUNDO U M 0.5; FP DB1.DBX 0.3; = DB1.DBX 56.0; END_FUNCTION

FUNCTION FC 104 : VOID


TITLE = VERSION : 0.1 BEGIN NETWORK TITLE = U A 3.6; = E 6.0; NETWORK TITLE = U A 2.0; = E 2.0; NETWORK TITLE = U A 2.1;

Pgina 79 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales = E 2.1; NETWORK TITLE = U A 2.2; = E 2.2; NETWORK TITLE = U A 2.3; = E 2.3; NETWORK TITLE = U A 2.4; = E 2.4; NETWORK TITLE = U A 1.2; = E 2.5; NETWORK TITLE = U A 0.4; U A 3.7; = E 6.3; NETWORK TITLE = U A 0.5; = E 5.0; NETWORK TITLE = U A 1.2; = E 2.7; NETWORK TITLE =VALOR A RESTAR AL VOLUMEN DE AGUA TANQUE PREPARACION POR SEGUNDO U M 21.1; U M 21.4; FP DB1.DBX 52.0; SPBNB _001; L MW 10; L 20; /I ; T DB1.DBW 54; _001: NOP 0; NETWORK TITLE =ACTUALIZAR VALOR VOLUMEN DE AGUA TANQUE DE PREPARACION U M 1.1; U M 21.1; U M 21.4; = L 0.0; U L 0.0; UN T 5; U M 0.3; U( ; L MW 10; L DB1.DBW 54; >=I ; ) ; U DB1.DBX 56.0; SPBNB _002; L MW 10; L DB1.DBW 54; -I ; T MW 10; _002: NOP 0; U L 0.0; U T 5; SPBNB _003; L 0; T MW 10;

Pgina 80 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales _003: NOP 0; NETWORK TITLE = U A 3.0; = E 4.0; NETWORK TITLE = U A 3.1; = E 4.1; NETWORK TITLE = U A 3.2; = E 4.3; NETWORK TITLE = U A 3.3; = E 4.5; NETWORK TITLE = U A 0.5; = E 4.7; NETWORK TITLE = U A 3.7; = E 6.2; END_FUNCTION

FUNCTION FC 105 : VOID


TITLE = VERSION : 0.1 BEGIN NETWORK TITLE = U M 1.1; = E 6.0; END_FUNCTION

ORGANIZATION_BLOCK OB 1
TITLE =PROGRAMA CCLICO PRINCIPAL VERSION : 0.1

VAR_TEMP OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1) OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1) OB1_PRIORITY : BYTE ; //Priority of OB Execution OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1) OB1_RESERVED_1 : BYTE ; //Reserved for system OB1_RESERVED_2 : BYTE ; //Reserved for system OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds) OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds) OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds) OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started END_VAR BEGIN NETWORK TITLE = CALL FC 104 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE CONFIGURACION (FC101) CALL FC 101 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE ORGANIZACION DEL PROGRAMA (FC3)

Pgina 81 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

CALL FC 3 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE CALCULO DEL TIPO DE PASO ACTUAL (FC5) CALL FC 5 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO SEGURIDADES INICIO RECETA (FC2) CALL FC 2 ( NTanque := DB100.DBB 3, NPasos := DB100.DBB 2); NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE PREPARACION (FC1) CALL FC 1 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE ENVIO (FC7) CALL FC 7 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE RECIRCULACION (FC8) CALL FC 8 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE VACIADO (FC9) CALL FC 9 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE ACTIVACION DE SALIDAS (FC10) CALL FC 10 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE CALCULO DE DEFECTOS (FC50) CALL FC 50 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE ACTULIZACION DE VALORES DEL DB100 (FC4) CALL FC 4 ; NOP 0; NETWORK TITLE =LLAMADA AL MODULO DE ACTULIZACION DE E/S DEL DB110 (FC11) CALL FC 11 ; NOP 0; NETWORK TITLE = CALL FC 105 ; NOP 0; END_ORGANIZATION_BLOCK

ORGANIZATION_BLOCK OB 35
TITLE =INTERRUPCIN CCLICA VERSION : 0.1

VAR_TEMP OB35_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1) OB35_STRT_INF : BYTE ; //16#36 (OB 35 has started) OB35_PRIORITY : BYTE ; //Priority of OB Execution OB35_OB_NUMBR : BYTE ; //35 (Organization block 35, OB35) OB35_RESERVED_1 : BYTE ; //Reserved for system OB35_RESERVED_2 : BYTE ; //Reserved for system OB35_PHASE_OFFSET : WORD ; //Phase offset (msec)

Pgina 82 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales OB35_RESERVED_3 : INT ; //Reserved for system OB35_EXC_FREQ : INT ; //Frequency of execution (msec) OB35_DATE_TIME : DATE_AND_TIME ; //Date and time OB35 started END_VAR BEGIN NETWORK TITLE =TRANSFORMACIN VALOR ANALGICO => CAUDAL UN A 3.6; //SI VLVULA CERRADA SALTA A FIN SPB FIN; L 0; //SI ENTRADA ES CERO CARGA CERO L MW 254; // L PEW 256 //LEE ENTRADA ANALGICA ==I ; SPB M001; L MW 254; L 1; *I ; L 16384; /R ; T DB1.DBD 24; SPA M002; M001: L 0; T DB1.DBD 24; M002: NOP 0; //META DE SALTO NETWORK TITLE =CALCULO DEL VOLUMEN = T(OB35)*(CAUDALK+CAUDALK1)/2 L DB1.DBD 24; L DB1.DBD 28; +R ; L 2.000000e+000; //DIVIDE POR 2 /R ; L 2.000000e-002; //MULTIPLICA POR TIEMPO DE INTEGRACIN *R ; L DB1.DBD 32; //TRANSFIERE A VOLUMEN +R ; T DB1.DBD 32; NETWORK TITLE =ACTUALIZAR VALORES (CAUDALK1 = CAUDALK) L DB1.DBD 24; T DB1.DBD 28; NOP 0; NETWORK TITLE =FIN MDULO FIN: NOP 0; END_ORGANIZATION_BLOCK

ORGANIZATION_BLOCK OB 82
TITLE =DEFECTOS MODULOS DE E/S VERSION : 0.1

VAR_TEMP OB82_EV_CLASS : BYTE ; //16#39, Event class 3, Entering event state, Internal fault event OB82_FLT_ID : BYTE ; //16#XX, Fault identifcation code OB82_PRIORITY : BYTE ; //Priority of OB Execution OB82_OB_NUMBR : BYTE ; //82 (Organization block 82, OB82) OB82_RESERVED_1 : BYTE ; //Reserved for system OB82_IO_FLAG : BYTE ; //Input (01010100), Output (01010101) OB82_MDL_ADDR : INT ; //Base address of module with fault OB82_MDL_DEFECT : BOOL ; //Module defective OB82_INT_FAULT : BOOL ; //Internal fault OB82_EXT_FAULT : BOOL ; //External fault OB82_PNT_INFO : BOOL ; //Point information OB82_EXT_VOLTAGE : BOOL ; //External voltage low OB82_FLD_CONNCTR : BOOL ; //Field wiring connector missing OB82_NO_CONFIG : BOOL ; //Module has no configuration data OB82_CONFIG_ERR : BOOL ; //Module has configuration error OB82_MDL_TYPE : BYTE ; //Type of module OB82_SUB_NDL_ERR : BOOL ; //Sub-Module is missing or has error OB82_COMM_FAULT : BOOL ; //Communication fault

Pgina 83 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales OB82_MDL_STOP : BOOL ; //Module is stopped OB82_WTCH_DOG_FLT : BOOL ; //Watch dog timer stopped module OB82_INT_PS_FLT : BOOL ; //Internal power supply fault OB82_PRIM_BATT_FLT : BOOL ; //Primary battery is in fault OB82_BCKUP_BATT_FLT : BOOL ; //Backup battery is in fault OB82_RESERVED_2 : BOOL ; //Reserved for system OB82_RACK_FLT : BOOL ; //Rack fault, only for bus interface module OB82_PROC_FLT : BOOL ; //Processor fault OB82_EPROM_FLT : BOOL ; //EPROM fault OB82_RAM_FLT : BOOL ; //RAM fault OB82_ADU_FLT : BOOL ; //ADU fault OB82_FUSE_FLT : BOOL ; //Fuse fault OB82_HW_INTR_FLT : BOOL ; //Hardware interupt input in fault OB82_RESERVED_3 : BOOL ; //Reserved for system OB82_DATE_TIME : DATE_AND_TIME ; //Date and time OB82 started END_VAR BEGIN NETWORK TITLE =DEFECTO ENTRADA ANALOGICA L L ==I S #OB82_MDL_ADDR; 256; ; DB110.DBX 56.0;

END_ORGANIZATION_BLOCK

ORGANIZATION_BLOCK OB 100
TITLE = "Complete Restart" VERSION : 0.1

VAR_TEMP OB100_EV_CLASS : BYTE ; //16#13, Event class 1, Entering event state, Event logged in diagnostic buffer OB100_STRTUP : BYTE ; //16#81/82/83/84 Method of startup OB100_PRIORITY : BYTE ; //Priority of OB Execution OB100_OB_NUMBR : BYTE ; //100 (Organization block 100, OB100) OB100_RESERVED_1 : BYTE ; //Reserved for system OB100_RESERVED_2 : BYTE ; //Reserved for system OB100_STOP : WORD ; //Event that caused CPU to stop (16#4xxx) OB100_STRT_INFO : DWORD ; //Information on how system started OB100_DATE_TIME : DATE_AND_TIME ; //Date and time OB100 started END_VAR BEGIN NETWORK TITLE =BIT SIEMPRE A CERO CLR ; //Pone RLO a 0 = M 1.1; NETWORK TITLE =BIT SIEMPRE A UNO SET ; //Pone RLO a 1 = M 1.0; NETWORK TITLE =INICIALIZACIN PUNTERO TIPO DE PASO ACTIVO L P#0.0; T MD 2; NOP 0; NETWORK TITLE =CARGAR VALOR PARA CONSTANTE DE TIEMPO PARA DEFECTO L S5T#3S; T DB1.DBW 36; NOP 0; NETWORK TITLE =CARGAR VALOR PARA MAXIMO NUMERO DE PASOS L 152; T DB1.DBW 42; NOP 0; END_ORGANIZATION_BLOCK

Pgina 84 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

8 Cdigo Programa SCADA


Formulario PRINCIPAL
Private Sub CBAcido_Click() 'Bomba de Acido. Pulsa activa pulsa desactiva OBAcido = CBAcido.value If OBAcido Then CBAcido.BackColor = BOTON_ON Else CBAcido.BackColor = BOTON_OFF End If End Sub Private Sub CBArrRec_Click() Dim I As Integer If CBArrRec.value And Not OAutMM And CBAuto.value And Not OResRec Then I = MsgBox("CONFIRME ARRANCAR LA RECETA N " & TNRec.Text & _ " EN EL TANQUE N " & TNDep(0), vbOKCancel, "ARRANCAR RECETA") If I <> 1 Then CBArrRec.value = False Exit Sub End If OArrRec = True CBArrRec.ForeColor = ROJO OParRec = False RecEnPLC.INICIO = Date FFinReceta = False Else OArrRec = False CBArrRec.ForeColor = AZUL OParRec = True End If End Sub Private Sub CBAuto_Click() If CBAuto.value Then OAutMM = False 'Autorizacion Movimientos Manuales CBAuto.ForeColor = AZUL CBAuto.Caption = "AUTO" OAuto = True CRecAnt.Enabled = False 'Flecha receta anterior CRecSig.Enabled = False 'Flecha receta siguiente CBResRec.Enabled = False habilita (True) If Not Rec_Car Then ' Si no se ha cargado receta CBArrRec.Locked = True I = MsgBox("DEBE CARGAR PRIMERO UNA RECETA", vbOKOnly, "ERROR") Else CBArrRec.Locked = False CBArrRec.Enabled = True End If Else OAutMM = True CBAuto.ForeColor = ROJO CBAuto.Caption = "MAN" OAuto = False CRecAnt.Enabled = True CRecSig.Enabled = True CBResRec.Enabled = True CBArrRec.value = False CBArrRec.Enabled = False habilita (False) End If End Sub Private Sub CBBCF_Click() 'Bomba Apollos. Pulsa activa pulsa desactiva OBCF = CBBCF.value If OBCF Then CBBCF.BackColor = BOTON_ON Else

Pgina 85 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales CBBCF.BackColor = BOTON_OFF End If End Sub Private Sub CBBCM_Click() 'Bomba del Carro movil. Pulsa activa pulsa desactiva OBCM = CBBCM.value If OBCM Then CBBCM.BackColor = BOTON_ON Else CBBCM.BackColor = BOTON_OFF End If End Sub Private Sub CBBPrep_Click() 'Bomba de envio CIP. Pulsa activa pulsa desactiva OBDep = CBBPrep.value If OBDep Then CBBPrep.BackColor = BOTON_ON Else CBBPrep.BackColor = BOTON_OFF End If End Sub Private Sub CBConectar_Click() cnt = 0 TimAbrirPLC.Enabled = True TimSleep.Enabled = True End Sub Private Sub CBDes_Click() 'Bomba de Desinfectante. Pulsa activa pulsa desactiva OBDens = CBDes.value If OBDens Then CBDes.BackColor = BOTON_ON Else CBDes.BackColor = BOTON_OFF End If End Sub Private Sub CBMan_Click() ' Control borrado If CBMan.value Then OAutMM = True CBAuto.value = False Else OAutMM = False End If End Sub

Private Sub CBDesconectar_Click() res = unload_tool() TimScanPLC.Enabled = False TimAbrirPLC.Enabled = False CBConectar.Enabled = True Call Alarma("CONEXION TERMINADA POR USUARIO", VERDE) CBDesconectar.Enabled = False Call habilita(True) End Sub

Private Sub CBResDef_Click() OResDef = True End Sub Private Sub CBResRec_Click() If OAutMM Or OParRec Then OResRec = True PBRecirc.Min = 0 PBRecirc.value = 0 LRecirc.Caption = 0 End If End Sub

Pgina 86 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Private Sub CBSalir_Click() res = unload_tool() End End Sub Private Sub CBSosa_Click() 'Bomba de Sosa. Pulsa activa pulsa desactiva OBSosa = CBSosa.value If OBSosa Then CBSosa.BackColor = BOTON_ON Else CBSosa.BackColor = BOTON_OFF End If End Sub Private Sub CBTenso_Click() 'Bomba de Tensoactivo. Pulsa activa pulsa desactiva OBTenso = CBTenso.value If OBTenso Then CBTenso.BackColor = BOTON_ON Else CBTenso.BackColor = BOTON_OFF End If End Sub Private Sub CBVAgua_Click() ' Valvula de entrada de agua OVAgua = CBVAgua.value If OVAgua Then CBVAgua.BackColor = BOTON_ON Else CBVAgua.BackColor = BOTON_OFF End If End Sub Private Sub CBVCF5_Click() OVCF5 = CBVCF5.value If EVCM5 Then CBVCF5.BackColor = BOTON_ON Else CBVCF5.BackColor = BOTON_OFF End If End Sub Private Sub CBVCF6_Click() OVCF6 = CBVCF6.value If OVCF6 Then CBVCF6.BackColor = BOTON_ON Else CBVCF6.BackColor = BOTON_OFF End If End Sub Private Sub CBVCF7_Click() OVCF7 = CBVCF7.value If OVCF7 Then CBVCF7.BackColor = BOTON_ON Else CBVCF7.BackColor = BOTON_OFF End If End Sub Private Sub CBVCF8_Click() OVCF8 = CBVCF8.value If OVCF8 Then CBVCF8.BackColor = BOTON_ON Else CBVCF8.BackColor = BOTON_OFF End If End Sub Private Sub CBVCM1_Click() OVCM1 = CBVCM1.value If OVCM1 Then CBVCM1.BackColor = BOTON_ON Else

Pgina 87 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales CBVCM1.BackColor = BOTON_OFF End If End Sub Private Sub CBVCM2_Click() OVCM2 = CBVCM2.value If OVCM2 Then CBVCM2.BackColor = BOTON_ON Else CBVCM2.BackColor = BOTON_OFF End If End Sub Private Sub CBVCM3_Click() OVCM3 = CBVCM3.value If OVCM3 Then CBVCM3.BackColor = BOTON_ON Else CBVCM3.BackColor = BOTON_OFF End If End Sub Private Sub CBVCM4_Click() OVCM4 = CBVCM4.value If OVCM4 Then CBVCM4.BackColor = BOTON_ON Else CBVCM4.BackColor = BOTON_OFF End If End Sub Private Sub CBVPrep_Click() OVDep = CBVPrep.value If OVDep Then CBVPrep.BackColor = BOTON_ON Else CBVPrep.BackColor = BOTON_OFF End If End Sub Private Sub CRecAnt_Click() 'Control seleccin deposito atras Deposito = Deposito - 1 If Deposito < 1 Then Deposito = 1 TNDep(0).Text = Deposito If Rec_Car Then Rec_Car = False Call ConectaCarro(Deposito) End Sub Private Sub CRecSig_Click() 'Control seleccin deposito adelante Deposito = Deposito + 1 If Deposito > 6 Then Deposito = 6 If Rec_Car Then Rec_Car = False TNDep(0).Text = Deposito Call ConectaCarro(Deposito) End Sub Private Sub invisible() Dim I As Integer For I = 0 To 7 LDep2(I).Visible = False LDep3(I).Visible = False LDep4(I).Visible = False LDep5(I).Visible = False LDep6(I).Visible = False Next End Sub Public Sub habilita(si As Boolean) CBSosa.Locked = si CBAcido.Locked = si CBDes.Locked = si CBTenso.Locked = si CBVAgua.Locked = si CBVCF5.Locked = si CBVCF6.Locked = si CBVCF7.Locked = si

Pgina 88 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales CBVCF8.Locked = si CBBCF.Locked = si CBVPrep.Locked = si CBBPrep.Locked = si CBVCM1.Locked = si CBVCM2.Locked = si CBVCM3.Locked = si CBVCM4.Locked = si CBBCM.Locked = si End Sub Private Sub Form_Load() PLC_ON = False Call habilita(True) 'Inicialmente se establece el nivel de acceso como el ms bajo NivelAcceso = 0 Call GestionaAccesos(NivelAcceso, Me) 'Ajusta el tamao de las lneas de aviso inferiores al tamao de la pantalla If Me.WindowState <> vbMinimized Then TAlarmas.Top = Me.Height - 900 TAlarmas.Width = Me.Width - 3555 End If 'Carga los parmetros de comunicacin con el PLC plcadr.adr = 2 plcadr.SEGMENTID = 0 plcadr.RACKNO = 0 plcadr.SLOTNO = 2 TimScanPLC.Enabled = False TimAbrirPLC.Enabled = True TUBO_ON = AZUL Call Alarma("ESTABLECIENDO CONEXIN CON EL PLC... Espere", 2) Call MovMan(True) ContSleep = 0 OAutMM = True OAuto = False CBConectar.Enabled = False ' Deshabilita boton conectar Call invisible Deposito = 1 TNDep(0).Text = Deposito CBArrRec.Enabled = False Rec_Car = False End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single) ContSleep = 0 End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Call MovMan(False) Call Cerrar_PLC End Sub Private Sub Form_Resize() 'Ajusta el tamao de las lneas de aviso inferiores al tamao de la pantalla If Me.WindowState <> vbMinimized Then If Me.Height < 2500 Then Me.Height = 2500 If Me.Width < 5000 Then Me.Width = 5000 TAlarmas.Top = Me.Height - 900 TAlarmas.Width = Me.Width - 3555 End If End Sub Private Sub Form_Terminate() 'Termina la aplicacin cerrando todos los formularioas activos res = unload_tool() End End Sub Private Sub TBPpal_ButtonClick(ByVal Button As MSComctlLib.Button) 'Muestra las diferentes pantallas en funcin del botn activado Select Case Button Case "Recetas" If FRecetas.Visible Then Unload FRecetas Else FRecetas.Show , FPpal

Pgina 89 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales End If Case "Informes" If FInformes.Visible Then Unload FInformes Else FInformes.Show , FPpal End If End Select End Sub Private Sub TBPpal_ButtonMenuClick(ByVal ButtonMenu As MSComctlLib.ButtonMenu) 'dem para los botones con submens Select Case ButtonMenu Case "Iniciar sesin" frmLogin.Show vbModal ' carga de forma modal;no sigue ejecutando hasta que descarga el form Call GestionaAccesos(NivelAcceso, Me) Me.TAlarmas.Text = "INICIADA SESIN USUARIO " & Usuario & " " & Time Case "Cerrar sesin" NivelAcceso = 0 Usuario = "Invitado" Call GestionaAccesos(NivelAcceso, Me) Me.TAlarmas.Text = "CERRADA SESIN DE USUARIO " & Usuario & " " & Time Case "Dar de alta a un nuevo usuario" FNewUser.Show vbModal Case "Dar de baja a un usuario" FDelUser.Show vbModal Case "Pupitre" FPupitre.Show vbModal Case "Defectos" FDef.Show vbModal End Select End Sub Private Sub TimAbrirPLC_Timer() cnt = cnt + 1 If cnt <= 1 Then 'Dos intentos para establecer conexion PLC_ON = Abrir_PLC() Else TimAbrirPLC.Enabled = False CBConectar.Enabled = True End If End Sub Private Sub TimScanPLC_Timer() Dim I As Integer Static PasoAnt 'Paso anterior If PLC_ON Then '*************************** 'Leer bloque de datos DB110 '*************************** res = d_field_read(110, 0, 112, buffer(0)) If res <> 0 Then Call Fallo_Com_PLC GoTo fin End If '*********************** 'Lectura de las entradas '*********************** For I = 0 To UltimaE Call STEP5_2_BIN(buffer(I), e, I) Next I '****************** 'Lectura de salidas '****************** For I = 0 To UltimaS Call STEP5_2_BIN(buffer(I + UltimaE + 1), a, I) Next I

Pgina 90 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

'********************************** 'Lectura de los bits de intercambio '********************************** Call STEP5_2_BIN(buffer(PrimerCanalPLC_PC), DBB34, 0) Call STEP5_2_BIN(buffer(PrimerCanalPLC_PC + 1), DBB35, 0) If DBB35(0, 3) Then OResDef = False

'*********************** 'Lectura de los defectos '*********************** If DBB34(0, 6) Then For I = 0 To NumCanalDef - 1 Call STEP5_2_BIN(buffer(PrimerCanalDef + I), DEF, I) Next I ShDef.Visible = True Call Defectos Else Call SinDef End If VolAguaR = STEP5_2_DEC(100) If NPasoAc > 0 Then If ((RecEnPLC.PASOS(NPasoAc - 1).TIPO_PASO) = 3) Then TRecircR = (RecEnPLC.PASOS(NPasoAc - 1).PAR_1) - STEP5_2_DEC(110) ElseIf ((RecEnPLC.PASOS(NPasoAc - 1).TIPO_PASO) = 1) Then TBSosaR = (RecEnPLC.PASOS(NPasoAc - 1).PAR_2) - STEP5_2_DEC(102) TBAcidoR = (RecEnPLC.PASOS(NPasoAc - 1).PAR_3) - STEP5_2_DEC(104) TBTensoR = (RecEnPLC.PASOS(NPasoAc - 1).PAR_5) - STEP5_2_DEC(106) TBDesinR = (RecEnPLC.PASOS(NPasoAc - 1).PAR_4) - STEP5_2_DEC(108) End If Else TRecircR = 0 TBSosaR = 0 TBAcidoR = 0 TBTensoR = 0 TBDesinR = 0 End If '***************************** 'Lectura de valores de proceso '***************************** NRecPLC = STEP5_2_DEC(90) NTanquePLC = STEP5_2_DEC(92) EstadoPasoAc = STEP5_2_DEC(94) NPasoAc = STEP5_2_DEC(96) If PasoAnt <> NPasoAc Then 'Para estampar hora de inicio y fin de los pasos If (NPasoAc > 1) And (NPasoAc <= (RecEnPLC.N_PASOS * 4)) Then RecEnPLC.PASOS(NPasoAc - 2).FINAL = Time RecEnPLC.PASOS(NPasoAc - 1).INICIO = Time End If PasoAnt = NPasoAc If NPasoAc = 1 Then RecEnPLC.PASOS(NPasoAc - 1).INICIO = Time End If End If If (NPasoAc = RecEnPLC.N_PASOS * 4) And DBB34(0, 4) And Not FFinReceta Then RecEnPLC.PASOS(NPasoAc - 1).FINAL = Time FFinReceta = True End If TPasAct = STEP5_2_DEC(98) '*************************** 'ESCRITURA DE LAS SALIDAS '*************************** buffer(0) = -1 * (OAutMM * (2 ^ 0) + OArrRec * (2 ^ 1) + OParRec * (2 ^ 2) + OResRec * (2 ^ 3) + OResDef * (2 ^ 4) + OTestCom * (2 ^ 5) + OPES * (2 ^ 6) + OAuto * (2 ^ 7)) buffer(1) = -1 * (OPEmerg * (2 ^ 0) + OPES * (2 ^ 1)) If TAConectar >= 0 And TAConectar <= 6 Then buffer(2) = TAConectar Else

Pgina 91 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales buffer(2) = 0 End If buffer(3) = 0 buffer(4) = -1 * (OVAgua * (2 ^ 1) + OBTenso * (2 ^ 5) + OBDens * (2 ^ 4) + OBAcido * (2 ^ 3) + OBSosa * (2 ^ 2) + OVDep * (2 ^ 6) + OVCM1 * (2 ^ 7) + OVCM2 * (2 ^ 0)) buffer(5) = -1 * (OBDep * (2 ^ 1) + OVCF5 * (2 ^ 5) + OVCF6 * (2 ^ 4) + OVCF7 * (2 ^ 7) + OVCF8 * (2 ^ 6) + OVCM3 * (2 ^ 3) + OVCM4 * (2 ^ 0) + OBCM * (2 ^ 2)) buffer(6) = -1 * OBCF * (2 ^ 0) res = d_field_write(110, 44, 7, buffer(0)) If res <> 0 Then Call Fallo_Com_PLC GoTo fin End If OResRec = False OArrRec = False Call Sinoptico End If fin: End Sub

Public Sub ConectaCarro(Dep As Integer) Dim I As Integer If Dep = 1 Then For I = 0 To 7 LDep1(I).Visible = True LDep2(I).Visible = False LDep3(I).Visible = False LDep4(I).Visible = False LDep5(I).Visible = False LDep6(I).Visible = False Next End If If Dep = 2 Then For I = 0 To 7 LDep1(I).Visible = False LDep2(I).Visible = True LDep3(I).Visible = False LDep4(I).Visible = False LDep5(I).Visible = False LDep6(I).Visible = False Next End If If Dep = 3 Then For I = 0 To 7 LDep1(I).Visible = False LDep2(I).Visible = False LDep3(I).Visible = True LDep4(I).Visible = False LDep5(I).Visible = False LDep6(I).Visible = False Next End If If Dep = 4 Then For I = 0 To 7 LDep1(I).Visible = False LDep2(I).Visible = False LDep3(I).Visible = False LDep4(I).Visible = True LDep5(I).Visible = False LDep6(I).Visible = False Next End If If Dep = 5 Then For I = 0 To 7 LDep1(I).Visible = False LDep2(I).Visible = False LDep3(I).Visible = False LDep4(I).Visible = False LDep5(I).Visible = True LDep6(I).Visible = False Next End If If Dep = 6 Then

Pgina 92 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales For I = 0 To 7 LDep1(I).Visible = False LDep2(I).Visible = False LDep3(I).Visible = False LDep4(I).Visible = False LDep5(I).Visible = False LDep6(I).Visible = True Next End If End Sub Public Sub Sinoptico() Dim I, j As Integer Dim PAgua, PSosa, PAcido, PDesinf, PTenso, PRecirc As Integer Dim ANIMA As Boolean Dim db As Database Dim RST As Recordset Dim Dibujo As Integer Dim Color As Long Call ConectaCarro(Deposito) 'Animacin entrada agua ANIMA = e(6, 0) 'Mira si la valvula de entrada de agua esta abierta Dibujo = (-1) * (2 * ANIMA + 1 * ((Not ANIMA))) 'Si abierta objeto 2 sino objeto 1 If (CBVAgua.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVAgua.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If Color = (-1) * (ANIMA * TUBO_AGUA + ((Not ANIMA)) * TUBO_OFF) TAgua_1.BorderColor = Color PBDepPrep.value = VolAguaR 'Animacin entrada tensoactivo ANIMA = a(1, 0) Dibujo = (-1) * (4 * ANIMA + 3 * (Not ANIMA)) If (CBTenso.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBTenso.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If Color = (-1) * (ANIMA * TUBO_SOSA + ((Not ANIMA)) * TUBO_OFF) For I = 0 To 2 TTenso_4(I).BorderColor = Color Next 'Animacin entrada desinfectante ANIMA = a(1, 1) Dibujo = (-1) * (4 * ANIMA + 3 * ((Not ANIMA))) If (CBDes.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBDes.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If Color = (-1) * (ANIMA * TUBO_DESIN + ((Not ANIMA)) * TUBO_OFF) For I = 0 To 2 TDens_4(I).BorderColor = Color Next 'Animacin entrada cido ANIMA = a(0, 7) Dibujo = (-1) * (4 * ANIMA + 3 * (Not ANIMA)) If (CBAcido.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBAcido.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If Color = (-1) * (ANIMA * TUBO_ACIDO + ((Not ANIMA)) * TUBO_OFF) For I = 0 To 2 TAcido_4(I).BorderColor = Color Next 'Animacin entrada sosa ANIMA = a(0, 6) Dibujo = (-1) * (4 * ANIMA + 3 * (Not ANIMA)) If (CBSosa.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBSosa.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If Color = (-1) * (ANIMA * TUBO_SOSA + ((Not ANIMA)) * TUBO_OFF) For I = 0 To 2 TSosa_4(I).BorderColor = Color Next

Pgina 93 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales 'Animacin salida depsito de preparacin 'Flujostato ANIMA = e(6, 3) Dibujo = (-1) * (6 * ANIMA + 5 * (Not ANIMA)) If (FlujoPrep.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then FlujoPrep.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Vlvula salida deposito preparacion ANIMA = e(6, 2) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVPrep.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVPrep.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If If ANIMA Then Select Case Deposito Case 1 To 4 For I = 0 To 3 TPrep_1(I).BorderColor = AZUL Next Case 5 To 6 For I = 0 To 2 TPrep_1(I).BorderColor = AZUL If I < 2 Then TPrep_A(I).BorderColor = AZUL End If Next End Select Else Select Case Deposito Case 1 To 4 For I = 0 To 3 TPrep_1(I).BorderColor = GRIS Next Case 5 To 6 For I = 0 To 2 TPrep_1(I).BorderColor = GRIS If I < 2 Then TPrep_A(I).BorderColor = GRIS End If Next End Select End If

'Bomba salida deposito preparacion ANIMA = a(0, 4) If ANIMA Then TUBO_ON = TUBO_ON_SP Dibujo = (-1) * (4 * ANIMA + 3 * (Not ANIMA)) If (CBBPrep.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBBPrep.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Animacin de VCM1 ANIMA = e(2, 0) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVCM1.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVCM1.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Animacin de VCM2 ANIMA = e(2, 1) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVCM2.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVCM2.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Animacin de VCM3 ANIMA = e(2, 2) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVCM3.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVCM3.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Animacin de VCM4 ANIMA = e(2, 3) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVCM4.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVCM4.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture

Pgina 94 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales End If 'Animacin de la bomba del carro ANIMA = a(1, 2) Dibujo = (-1) * (4 * ANIMA + 3 * (Not ANIMA)) If (CBBCM.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBBCM.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If

'Zona Fermentacion If Deposito >= 1 And Deposito <= 4 Then 'Animacin flujostato carro mvil ANIMA = e(2, 7) Dibujo = (-1) * (6 * ANIMA + 5 * (Not ANIMA)) If (FlujoCM.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then FlujoCM.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If If e(2, 0) Then ' Si V1 activa TCM1.BorderColor = AZUL TCM2.BorderColor = AZUL Else TCM1.BorderColor = GRIS TCM2.BorderColor = GRIS End If If e(2, 1) Then ' Si V2 Activa TCM3.BorderColor = AZUL Else TCM3.BorderColor = GRIS End If If e(2, 2) Then ' Si V3 activa TCM4.BorderColor = AZUL Else TCM4.BorderColor = GRIS End If If e(2, 3) Then ' Si V4 activa For I = 4 To 7 Lvac(I).BorderColor = AZUL TCM5.BorderColor = AZUL TCM6.BorderColor = AZUL Next Else For I = 4 To 7 Lvac(I).BorderColor = GRIS Next TCM5.BorderColor = GRIS TCM6.BorderColor = GRIS End If 'Animacion tubos depositos de fermentacion Select Case Deposito Case 1 'Deposito 1 If e(2, 0) Then ' Si V1 activa For I = 4 To 7 LDep1(I).BorderColor = AZUL Next Else For I = 4 To 7 LDep1(I).BorderColor = GRIS Next End If If e(2, 2) Then ' Si V3 activa For I = 0 To 3 LDep1(I).BorderColor = AZUL Next Else For I = 0 To 3 LDep1(I).BorderColor = GRIS Next End If Case 2 'Deposito 2 If e(2, 0) Then ' Si V1 activa For I = 4 To 7 LDep2(I).BorderColor = AZUL Next

Pgina 95 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Else For I = 4 To 7 LDep2(I).BorderColor = GRIS Next End If If e(2, 2) Then ' Si V3 activa For I = 0 To 3 LDep2(I).BorderColor = AZUL Next Else For I = 0 To 3 LDep2(I).BorderColor = GRIS Next End If Case 3 'Deposito 3 If e(2, 0) Then ' Si V1 activa For I = 4 To 7 LDep3(I).BorderColor = AZUL Next Else For I = 4 To 7 LDep3(I).BorderColor = GRIS Next End If If e(2, 2) Then ' Si V3 activa For I = 0 To 3 LDep3(I).BorderColor = AZUL Next Else For I = 0 To 3 LDep3(I).BorderColor = GRIS Next End If Case 4 'Deposito 4 If e(2, 0) Then ' Si V1 activa For I = 4 To 7 LDep4(I).BorderColor = AZUL Next Else For I = 4 To 7 LDep4(I).BorderColor = GRIS Next End If If e(2, 2) Then ' Si V3 activa For I = 0 To 3 LDep4(I).BorderColor = AZUL Next Else For I = 0 To 3 LDep4(I).BorderColor = GRIS Next End If End Select End If 'Zona Apollos If Deposito >= 5 And Deposito <= 6 Then 'Animacion tuberias If e(4, 0) Then ' Si V5 activa TCF1.BorderColor = AZUL TCF2.BorderColor = AZUL Else TCF1.BorderColor = GRIS TCF2.BorderColor = GRIS End If If e(4, 1) Then ' Si V6 Activa TCF3.BorderColor = AZUL Else TCF3.BorderColor = GRIS End If If e(4, 3) Then ' Si V7 activa TCF4.BorderColor = AZUL Else TCF4.BorderColor = GRIS End If

Pgina 96 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales If e(4, 5) Then ' Si V8 activa For I = 4 To 7 LVac_A(I).BorderColor = AZUL TCF5.BorderColor = AZUL TCF6.BorderColor = AZUL Next Else For I = 4 To 7 LVac_A(I).BorderColor = GRIS Next TCF5.BorderColor = GRIS TCF6.BorderColor = GRIS End If Select Case Deposito Case 5 'Deposito 5 If e(4, 0) Then ' Si V5 activa For I = 4 To 7 LDep5(I).BorderColor = AZUL Next Else For I = 4 To 7 LDep5(I).BorderColor = GRIS Next End If If e(4, 3) Then ' Si V7 activa For I = 0 To 3 LDep5(I).BorderColor = AZUL Next Else For I = 0 To 3 LDep5(I).BorderColor = GRIS Next End If Case 6 'Deposito 6 If e(4, 0) Then ' Si V5 activa For I = 4 To 7 LDep6(I).BorderColor = AZUL Next Else For I = 4 To 7 LDep6(I).BorderColor = GRIS Next End If If e(4, 3) Then ' Si V7 activa For I = 0 To 3 LDep6(I).BorderColor = AZUL Next Else For I = 0 To 3 LDep6(I).BorderColor = GRIS Next End If

End Select

'Animacin tuberas carro apollos 'Animacin tuberas carro mvil 'Animacin flujostato carro APOLLOS ANIMA = e(5, 0) Dibujo = (-1) * (6 * ANIMA + 5 * (Not ANIMA)) If (FlujoCF.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then FlujoCF.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If

End If 'Animacin de VCF5 ANIMA = e(4, 0) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVCF5.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVCF5.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture

Pgina 97 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales End If 'Animacin de VCF6 ANIMA = e(4, 1) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVCF6.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVCF6.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Animacin de VCF7 ANIMA = e(4, 3) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVCF7.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVCF7.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Animacin de VCF8 ANIMA = e(4, 5) Dibujo = (-1) * (2 * ANIMA + 1 * (Not ANIMA)) If (CBVCF8.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBVCF8.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Animacin de la bomba APOLLOS ANIMA = a(0, 5) Dibujo = (-1) * (4 * ANIMA + 3 * (Not ANIMA)) If (CBBCF.Picture <> ILSinoptico.ListImages.Item(Dibujo).Picture) Then CBBCF.Picture = ILSinoptico.ListImages.Item(Dibujo).Picture End If 'Animacin del panel de mando TNRec = NRecPLC TComRec = RecEnPLC.COMRECETA On Error Resume Next If NPasoAc > 0 Then TNPas = RecEnPLC.PASOS(NPasoAc - 1).N_PASO_FOR TComPas = RecEnPLC.PASOS(NPasoAc - 1).COMPASO For I = 0 To 3 CBEtapa(I).value = ((RecEnPLC.PASOS(NPasoAc - 1).TIPO_PASO) >= I + 1) Next I Else TNPas = "" TComPas = "" For I = 0 To 3 CBEtapa(I).value = False Next I End If TNDep(1) = -1 * (2 ^ 4 * e(3, 0) + 2 ^ 3 * e(3, 1) + 2 ^ 2 * e(3, 2) + 2 ^ 1 * e(3, 3) + 2 ^ 0 * e(3, 4)) If DBB34(0, 4) Then TComPas = "FIN RECETA" OArrRec = False RecEnPLC.FINAL = Date End If Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset("SELECT * FROM CONFIGURACION") If RST.EOF Then I = MsgBox("SISTEMA DESCONFIGURADO. NO SE PUEDE CARGAR LA RECETA", vbCritical, "ERROR GRAVE") Call Cerrar_BD(db) Call Cerrar_RST(RST) GoTo fin End If Sosa = RST!CONF_BOMBASOSA Acido = RST!CONF_BOMBAACIDO Tensoac = RST!CONF_BOMBATENSOACTIVO Desinf = RST!CONF_BOMBADESINFECTANTE Call Cerrar_RST(RST) TAgua.Text = VolAguaR & " l" If Not RST.EOF Then RST.MoveLast RST.MoveFirst End If TSosa.Text = Format(Round(TBSosaR * Sosa), "000 l") TAcido.Text = Format(Round(TBAcidoR * Acido), "000 l") TTenso.Text = Format(Round(TBTensoR * Tensoac), "000 l") TDesin.Text = Format(Round(TBDesinR * Desinf), "000 ml") If DBB34(0, 2) Then

Pgina 98 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales j = (RecEnPLC.PASOS(NPasoAc - 1).N_PASO_FOR - 1) * 4 PAgua = RecEnPLC.PASOS(j).PAR_1 PSosa = Round(RecEnPLC.PASOS(j).PAR_2 * Sosa) PAcido = Round(RecEnPLC.PASOS(j).PAR_3 * Acido) PDesinf = Round(RecEnPLC.PASOS(j).PAR_4 * Desinf) PTenso = Round(RecEnPLC.PASOS(j).PAR_5 * Tensoac) PRecirc = RecEnPLC.PASOS(j + 2).PAR_1 If PAgua Then LEtapa(0).Caption = "Preparacin (Agua: " & PAgua & " l)" If PSosa Then LEtapa(0).Caption = LEtapa(0).Caption & " + (Sosa: " & PSosa & " l)" If PAcido Then LEtapa(0).Caption = LEtapa(0).Caption & " + (cido: " & PAcido & " l)" If PDesinf Then LEtapa(0).Caption = LEtapa(0).Caption & " + (Desinfectante: " & PDesinf & " ml)" If PTenso Then LEtapa(0).Caption = LEtapa(0).Caption & " + (Tensoactivo: " & PTenso & " l)" If PRecirc Then LEtapa(2).Caption = "Recirculacin (" & Format(PRecirc / 60, "00.0") & " min)" Else LEtapa(0).Caption = "Preparacin: " LEtapa(2).Caption = "Recirculacin: " End If If DBB34(0, 2) And Not DBB34(0, 3) Then 'Si receta en ejecucion y no parada If CBEtapa(2).value And Not CBEtapa(3) And Not DBB34(0, 3) Then LRecirc.Caption = HMS(TPasAct) PBRecirc.Min = 0 PBRecirc.Max = RecEnPLC.PASOS(NPasoAc - 1).PAR_1 PBRecirc.value = TPasAct Else PBRecirc.Min = 0 PBRecirc.Max = 0 PBRecirc.value = 0 LRecirc.Caption = 0 End If End If

Call Cerrar_BD(db) Call Cerrar_RST(RST) fin: End Sub

Public Function HMS(Segundos As Integer) As String Dim s, M As Integer M = Int(Segundos / 60) s = Segundos - (60 * M) HMS = Format(M, "00") & " : " & Format(s, "00") End Function Private Sub TimSleep_Timer() ContSleep = ContSleep + 1 If ContSleep > 30 Then res = unload_tool() TimSleep.Enabled = False End If End Sub Private Function Dev_Def_Num(I As Integer) As String Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim cadaux As String Dim Num As Integer 'Funcion que devuelve el texto asociado al indice del defecto que se le pasa como argumento Num = I cadSQL = "SELECT * FROM DEFECTOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST If Not .EOF Then .MoveLast .MoveFirst Do While (Not .EOF) And (Num - 1) .MoveNext Num = Num - 1 Loop End If Dev_Def_Num = !TEXTO End With Call Cerrar_RST(RST)

Pgina 99 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Call Cerrar_BD(db) End Function Private Function BUSCA_DEF(I As Integer, j As Integer) As String Dim Indice As Long Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim cadaux As String Indice = I * 8 + j + 1 ' Calcula el indice del defecto 'Abre la tabla lista_defectos donde estn los textos de los defectos cadSQL = "SELECT * FROM LISTA_DEFECTOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST If Not .EOF Then .MoveLast .MoveFirst .FindFirst "INDICE='" & CStr(Indice) & "'" If Not (.NoMatch) Then ' Si lo encuentra BUSCA_DEF = !TEXTO_DEF Exit Function Else ' Si no lo encuentra devuelve cadena vacia BUSCA_DEF = "" End If Else 'Si la tabla esta vacia BUSCA_DEF = "" End If End With Call Cerrar_RST(RST) Call Cerrar_BD(db) End Function

Private Sub RELLENA_TABLA_DEFECTOS(Cad As String) Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim Registra As Boolean Registra = False 'Abre la tabla defectos donde se registran cadSQL = "SELECT * FROM DEFECTOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST If Not .EOF Then .MoveLast .MoveFirst .FindFirst "TEXTO='" & Cad & "'" If Not (.NoMatch) Then ' Si ya existe Exit Sub Else 'Si es nuevo lo registra .MoveLast Registra = True End If Else 'Si la tabla esta vacia Registra = True End If If Registra Then .AddNew !TEXTO = Cad !FECHA = Date !HORA = Time .Update End If End With Call Cerrar_RST(RST) Call Cerrar_BD(db) End Sub

Private Sub Defectos() Dim CadAl As String

Pgina 100 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Dim I As Integer, j As Integer Static TIEMPO As Single Static cambio As Boolean Static DefAMostrar As Integer Dim numdef As Integer numdef = 0 ' Bucle anidado para buscar los textos de los defectos activos y registrarlos For I = 0 To NumCanalDef - 1 For j = 0 To 7 If DEF(I, j) = True Then Call RELLENA_TABLA_DEFECTOS(BUSCA_DEF(I, j)) numdef = numdef + 1 End If Next j Next I If (Timer - TIEMPO) > 2 Then TIEMPO = Timer cambio = Not cambio End If If cambio Then If DefAMostrar < numdef Then DefAMostrar = DefAMostrar + 1 Else DefAMostrar = 1 End If Else End If

If DEF(0, 0) Then If OAutMM Then MovMan (False) End If If DEF(0, 1) Then If OAutMM Then MovMan (False) End If If Not DBB34(0, 5) Then If OAutMM Then MovMan (False) End If If DEF(0, 2) Then If OBDep Then OBDep = False CBBPrep.value = False End If If Not (ShDefBCIP.Visible) Then ShDefBCIP.Visible = True Else ShDefBCIP.Visible = False End If If DEF(0, 3) Then If OBCF Then OBCF = False CBBCF.value = False End If If Not (ShDefBA.Visible) Then ShDefBA.Visible = True Else ShDefBA.Visible = False End If If DEF(0, 4) Then If OBCM Then OBCM = False CBBCM.value = False End If If Not (ShDefBC.Visible) Then ShDefBC.Visible = True Else ShDefBC.Visible = False End If If DEF(0, 5) Then If OBSosa Then OBSosa = False

Pgina 101 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales CBSosa.value = False End If If Not (ShDefBS.Visible) Then ShDefBS.Visible = True Else ShDefBS.Visible = False End If If DEF(0, 6) Then If OBAcido Then OBAcido = False CBAcido.value = False End If If Not (ShDefBAc.Visible) Then ShDefBAc.Visible = True Else ShDefBAc.Visible = False End If If DEF(0, 7) Then If OBTenso Then OBTenso = False CBTenso.value = False End If If Not (ShDefBT.Visible) Then ShDefBT.Visible = True Else ShDefBT.Visible = False End If If DEF(1, 0) Then If OBDens Then OBDens = False CBDes.value = False End If If Not (ShDefBD.Visible) Then ShDefBD.Visible = True Else ShDefBD.Visible = False End If If DEF(4, 0) Then If OVAgua Then OVAgua = False CBVAgua.value = False End If If Not (ShDefVA.Visible) Then ShDefVA.Visible = True Else ShDefVA.Visible = False End If If DEF(5, 1) Then If OBCM Then OBCM = False CBBCM.value = False End If If Not (ShDefBC.Visible) Then ShDefBC.Visible = True Else ShDefBC.Visible = False End If If DEF(4, 5) Then If OVDep Then OVDep = False CBVPrep.value = False End If If Not (ShDefVCIP.Visible) Then ShDefVCIP.Visible = True Else ShDefVCIP.Visible = False End If If DEF(4, 6) Then If OVCM1 Then OVCM1 = False CBVCM1.value = False End If If Not (ShDefV1.Visible) Then ShDefV1.Visible = True Else ShDefV1.Visible = False End If

Pgina 102 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

If DEF(4, 7) Then If OVCM4 Then OVCM4 = False CBVCM4.value = False End If If Not (ShDefV4.Visible) Then ShDefV4.Visible = True Else ShDefV4.Visible = False End If If DEF(5, 2) Then If OVCM2 Then OVCM2 = False CBVCM2.value = False End If If Not (ShDefV2.Visible) Then ShDefV2.Visible = True Else ShDefV2.Visible = False End If If DEF(5, 3) Then If OVCM3 Then OVCM3 = False CBVCM3.value = False End If If Not (ShDefV3.Visible) Then ShDefV3.Visible = True Else ShDefV3.Visible = False End If If DEF(5, 4) Then If OVCF5 Then OVCF5 = False CBVCF5.value = False End If If Not (ShDefV5.Visible) Then ShDefV5.Visible = True Else ShDefV5.Visible = False End If If DEF(5, 5) Then ShDefV6.Visible = True If OVCF6 Then OVCF6 = False CBVCF6.value = False End If End If If DEF(5, 6) Then ShDefV8.Visible = True If OVCF8 Then OVCF8 = False CBVCF8.value = False End If End If If DEF(5, 7) Then ShDefV7.Visible = True If OVCF7 Then OVCF7 = False CBVCF7.value = False End If End If If DEF(6, 0) Then ShDefBA.Visible = True If OBCF Then OBCF = False CBBCF.value = False End If End If If DEF(7, 4) Then I = MsgBox("NO SE DETECTA TANQUE VACO. COMPRUEBE LAS CONEXIONES. OK=CONTINUAR RECETA. CANCEL=PARAR RECETA", vbOKCancel, "TANQUE NO VACO") If I = 1 Then OAnSegTV = True Else OAnSegTV = False End If End If

Pgina 103 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales fin: CadAl = Dev_Def_Num(DefAMostrar) Call Alarma(CadAl, ROJO) End Sub Private Sub MENSAJES() Dim CadMens As String If DBB34(0, 3) Then CadMens = "RECETA PARADA. SELECCIONE DE NUEVO AUTOMTICO Y ARRANQUE LA RECETA" GoTo fin End If If DBB34(0, 2) Then CadMens = "RECETA EN EJECUCIN" GoTo fin End If fin: Call Alarma(CadMens, AZUL) End Sub

Private Sub SinDef() 'Quitar los marcos rojos de defecto de los elementos FPpal.TAlarmas.Text = "" ShDefBCIP.Visible = False ShDefVCIP.Visible = False ShDefV1.Visible = False ShDefV2.Visible = False ShDefV3.Visible = False ShDefV4.Visible = False ShDefBC.Visible = False ShDefV5.Visible = False ShDefV6.Visible = False ShDefV7.Visible = False ShDefV8.Visible = False ShDefBA.Visible = False ShDefVA.Visible = False ShDefBAc.Visible = False ShDefBS.Visible = False ShDefBD.Visible = False ShDefBT.Visible = False ShDef.Visible = False End Sub

Formulario RECETAS
Private Sub CRecAnt_Click() Dim db As Database Dim RST As Recordset Dim cadSQL As String 'Si existe RecAnt-1, la establece como activa y la carga Set db = OpenDatabase(DirDB) cadSQL = "SELECT * FROM RECETAS WHERE REC_NUM=" & RecAct - 1 Set RST = db.OpenRecordset(cadSQL) If Not RST.EOF Then RecAct = RecAct - 1 Call CargaReceta(RecAct) End If Call Cerrar_RST(RST) Call Cerrar_BD(db) End Sub Private Sub CRecSig_Click() Dim db As Database Dim RST As Recordset Dim cadSQL As String 'Si existe RecAnt+1, la establece como activa y la carga Set db = OpenDatabase(DirDB) cadSQL = "SELECT * FROM RECETAS WHERE REC_NUM=" & RecAct + 1

Pgina 104 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Set RST = db.OpenRecordset(cadSQL) If Not RST.EOF Then RecAct = RecAct + 1 Call CargaReceta(RecAct) End If Call Cerrar_RST(RST) Call Cerrar_BD(db) End Sub Private Sub Form_Load() 'Deshabilita los botones del men de la pantalla principal mientras est activa la 'pantalla de recetas FPpal.TBPpal.Buttons.Item(1).Enabled = False FPpal.TBPpal.Buttons.Item(3).Enabled = False FPpal.TBPpal.Buttons.Item(5).Enabled = False 'Establece las habilitaciones de los botones del men en funcin del Nivel de acceso Call GestionaAccesos(NivelAcceso, Me) 'Bloquea los datos de las recetas Call BlDatRec(True) 'Establece la receta activa a 1 y la carga RecAct = 1 Call CargaReceta(RecAct) End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 'Cambia el estado del botn Recetas del menu principal, por si ha cerrado el formulario 'recetas directamente FPpal.TBPpal.Buttons.Item(7).value = tbrUnpressed 'Establece las habilitaciones de los botones del men en funcin del Nivel de acceso Call GestionaAccesos(NivelAcceso, FPpal) End Sub

Private Sub TBRecetas_ButtonClick(ByVal Button As MSComctlLib.Button) Dim I As Integer Dim RecOK As Boolean 'Gestin de los botones del men del formulario recetas Select Case Button.Caption Case "Eliminar" 'Determina si se trata de una receta o de un paso. Pide confirmacin 'y llama a la subrutina correspondiente I = MsgBox("EST SEGURO DE DESEAR ELIMINAR LA RECETA F" & Format(RecAct, "00"), vbOKCancel, "ELIMINAR RECETA") If I = 1 Then Call Borrar_Receta(RecAct) Case "Nueva", "Editar" 'Diferencia los casos de activacin/desactivacin del botn 'Caso de activacin If Button.value = tbrPressed Then 'Bloquea los botones mientras se edita la nueva receta TBRecetas.Buttons.Item(1).Enabled = (Button.Caption = "Editar") TBRecetas.Buttons.Item(3).Enabled = (Button.Caption = "Nueva") TBRecetas.Buttons.Item(7).Enabled = False TBRecetas.Buttons.Item(9).Enabled = False 'Carga una receta en blanco If (Button.Caption = "Nueva") Then Call NuevaReceta 'Desbloquea los controles del formulario para editar la receta Call BlDatRec(False) 'Caso de desactivacin Else 'Avisa que no se guardar la receta y pide confirmacin I = MsgBox("LA RECETA F" & Format(RecAct, "00") & " NO SE GUARDAR", vbOKCancel, "EDITOR DE RECETAS") If I = 1 Then 'Si no se desea guardar la receta, la borra de la base de datos y restablece 'los botones del men TBRecetas.Buttons.Item(1).Enabled = True TBRecetas.Buttons.Item(1).value = tbrUnpressed TBRecetas.Buttons.Item(3).Enabled = True

Pgina 105 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales TBRecetas.Buttons.Item(3).value = tbrUnpressed TBRecetas.Buttons.Item(7).Enabled = True TBRecetas.Buttons.Item(9).Enabled = True NuevaRec = False Call BlDatRec(True) Else 'Si no confirma, seguimos Button.value = tbrPressed End If End If Case "Salvar" 'Comprueba la coherencia de la receta RecOK = CompruebaReceta() 'Si la receta es correcta... If RecOK Then 'Restablece los botones del men y salva la receta, mostrndola en el formulario TBRecetas.Buttons.Item(1).Enabled = True TBRecetas.Buttons.Item(1).value = tbrUnpressed TBRecetas.Buttons.Item(3).Enabled = True TBRecetas.Buttons.Item(3).value = tbrUnpressed TBRecetas.Buttons.Item(7).Enabled = True TBRecetas.Buttons.Item(9).Enabled = True NuevaRec = False Call SalvarReceta(RecAct) Call CargaReceta(RecAct) Call BlDatRec(True) End If Case "Cargar en PLC" If Deposito < 1 Then I = MsgBox("DEBE SELECCIONAR ANTES UN N DE TANQUE", vbCritical, "CARGAR RECETA CIP EN PLC") GoTo fin End If I = MsgBox("CONFIRME CARGAR RECETA N " & RecAct & " EN EL TANQUE N " & FPpal.TNDep(0).Text, vbOKCancel, "CARGAR RECETA EN EL PLC") If I = 1 Then Me.MousePointer = vbHourglass FPpal.MousePointer = vbHourglass Call CargaRecetaPLC(RecAct, True) Me.MousePointer = vbDefault FPpal.MousePointer = vbDefault End If End Select fin: End Sub Private Sub BlDatRec(Bloq As Boolean) Dim I As Integer 'Establece el atributo bloqueado para todos los controles de datos del 'formulario de recetas For I = 0 To 14 TPasCom(I).Locked = Bloq TPasAgua(I).Locked = Bloq TPasSosa(I).Locked = Bloq TPasAcido(I).Locked = Bloq TPasDesinf(I).Locked = Bloq TPasTensoac(I).Locked = Bloq TPasRecirc(I).Locked = Bloq Next I TRecFecCrea.Locked = Bloq TRecCrea.Locked = Bloq TRecFecMod.Locked = Bloq TRecModifica.Locked = Bloq TRecComRec.Locked = Bloq End Sub 'Para que se seleccione todo el campo escrito Private Sub TPasCom_GotFocus(Index As Integer) TPasCom(Index).SelStart = 0 TPasCom(Index).SelLength = Len(TPasCom(Index).Text) End Sub 'Para que se seleccione todo el campo escrito Private Sub TPasAgua_GotFocus(Index As Integer) TPasAgua(Index).SelStart = 0 TPasAgua(Index).SelLength = Len(TPasAgua(Index).Text)

Pgina 106 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales End Sub 'Para que se seleccione todo el campo escrito Private Sub TPasSosa_GotFocus(Index As Integer) TPasSosa(Index).SelStart = 0 TPasSosa(Index).SelLength = Len(TPasSosa(Index).Text) End Sub 'Para que se seleccione todo el campo escrito Private Sub TPasAcido_GotFocus(Index As Integer) TPasAcido(Index).SelStart = 0 TPasAcido(Index).SelLength = Len(TPasAcido(Index).Text) End Sub 'Para que se seleccione todo el campo escrito Private Sub TPasDesinf_GotFocus(Index As Integer) TPasDesinf(Index).SelStart = 0 TPasDesinf(Index).SelLength = Len(TPasDesinf(Index).Text) End Sub 'Para que se seleccione todo el campo escrito Private Sub TPasTensoac_GotFocus(Index As Integer) TPasTensoac(Index).SelStart = 0 TPasTensoac(Index).SelLength = Len(TPasTensoac(Index).Text) End Sub 'Para que se seleccione todo el campo escrito Private Sub TPasRecirc_GotFocus(Index As Integer) TPasRecirc(Index).SelStart = 0 TPasRecirc(Index).SelLength = Len(TPasRecirc(Index).Text) End Sub 'Para que se seleccione todo el campo escrito Private Sub TRecComRec_GotFocus() TRecComRec.SelStart = 0 TRecComRec.SelLength = Len(TRecComRec.Text) End Sub 'Pone la primera letra en mayscula y las dems en minsculas Private Sub TPasCom_Validate(Index As Integer, Cancel As Boolean) If Len(TPasCom(Index).Text) > 0 Then TPasCom(Index).Text = UCase(Left(TPasCom(Index).Text, 1)) & Right(TPasCom(Index).Text, Len(TPasCom(Index).Text) - 1) End If End Sub 'Pasa a mayusculas al validar Private Sub TRecComRec_Validate(Cancel As Boolean) TRecComRec.Text = UCase(TRecComRec.Text) End Sub Public Sub CargaReceta(NRec As Integer) Dim db As Database Dim rstRec As Recordset Dim rstPas As Recordset Dim cadSQL As String Dim I As Integer Call Receta_Vacia(NRec) Set db = OpenDatabase(DirDB) 'Abre la tabla RECETAS y carga los datos cadSQL = "SELECT * FROM RECETAS WHERE REC_NUM=" & NRec Set rstRec = db.OpenRecordset(cadSQL) With rstRec If Not .EOF Then TRecNRec.Caption = "RECETA N " & !REC_NUM TRecComRec.Text = !REC_COM TRecFecCrea.Text = !REC_FEC_CREA TRecCrea.Text = !REC_AUTOR If !REC_ULT_MODIF <> "" Then TRecFecMod.Text = !REC_ULT_MODIF End If If !REC_AUT_ULT_MODIF <> "" Then TRecModifica.Text = !REC_AUT_ULT_MODIF TRecFecMod.Visible = (!REC_AUT_ULT_MODIF <> "") TRecModifica.Visible = (!REC_AUT_ULT_MODIF <> "")

Pgina 107 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Label1.Visible = (!REC_AUT_ULT_MODIF) <> "" End If 'Abre la tabla PASOS_REC y carga los datos cadSQL = "SELECT * FROM PASOS_REC WHERE PAS_REC=" & NRec & " ORDER BY PAS_N_PASO" Set rstPas = db.OpenRecordset(cadSQL) With rstPas If Not .EOF Then .MoveLast .MoveFirst For I = 1 To .RecordCount TPasCom(I - 1).Text = !PAS_COM TPasAgua(I - 1).Text = !PAS_PAR1 TPasSosa(I - 1).Text = !PAS_PAR2 TPasAcido(I - 1).Text = !PAS_PAR3 TPasDesinf(I - 1).Text = !PAS_PAR4 TPasTensoac(I - 1).Text = !PAS_PAR5 TPasRecirc(I - 1).Text = !PAS_PAR6 .MoveNext Next I End If End With End If End With Call Cerrar_RST(rstRec) Call Cerrar_RST(rstPas) Call Cerrar_BD(db) End Sub Public Function CargaRecetaPLC(NRec As Integer, PLC As Boolean) Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim NPas, I, j As Integer Dim PasoVacio As Boolean Dim RecOK As Boolean Dim xx(10) As Integer Set db = OpenDatabase(DirDB) cadSQL = "SELECT * FROM PASOS_REC WHERE PAS_REC=" & NRec & " ORDER BY PAS_N_PASO" Set RST = db.OpenRecordset(cadSQL) With RST If .EOF Then I = MsgBox("LA RECETA N " & NRec & " NO EST REGISTRADA", vbCritical, "NO SE PUEDE CARGAR LA RECETA EN EL PLC!") GoTo fin Else RecOK = CompruebaReceta() If RecOK Then .MoveLast .MoveFirst NPas = 1 For I = 1 To .RecordCount - 1 PasoVacio = (Val(TPasAgua(I).Text) = 0) And (Val(TPasSosa(I).Text) = 0) PasoVacio = PasoVacio And (Val(TPasAcido(I).Text) = 0) And (Val(TPasDesinf(I).Text) = 0) PasoVacio = PasoVacio And (Val(TPasTensoac(I).Text) = 0) And (Val(TPasRecirc(I).Text) = 0) If Not PasoVacio Then NPas = NPas + 1 Else Exit For End If Next I RecEnPLC.COMRECETA = UCase(TRecComRec.Text) RecEnPLC.N_RECETA = NRec RecEnPLC.N_PASOS = NPas RecEnPLC.N_TANQUE = Deposito RecEnPLC.ESTADO = 0 RecEnPLC.PASO_ACTIVO = 0 RecEnPLC.TIEMPO = 0 For I = 1 To NPas RecEnPLC.PASOS(4 * I - 4).N_PASO_FOR = I RecEnPLC.PASOS(4 * I - 4).COMPASO = UCase(TPasCom(I - 1).Text) RecEnPLC.PASOS(4 * I - 4).N_PASO = 4 * I - 3 RecEnPLC.PASOS(4 * I - 4).TIPO_PASO = 1 RecEnPLC.PASOS(4 * I - 4).PAR_1 = !PAS_PAR1 RecEnPLC.PASOS(4 * I - 4).PAR_2 = Int(!PAS_PAR2 / Sosa) RecEnPLC.PASOS(4 * I - 4).PAR_3 = Int(!PAS_PAR3 / Acido)

Pgina 108 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales RecEnPLC.PASOS(4 * I - 4).PAR_4 = Int(!PAS_PAR4 / Desinf) RecEnPLC.PASOS(4 * I - 4).PAR_5 = Int(!PAS_PAR5 / Tensoac) RecEnPLC.PASOS(4 * I - 4).PAR_6 = 0 RecEnPLC.PASOS(4 * I - 4).PAR_7 = 0 RecEnPLC.PASOS(4 * I - 4).PAR_8 = 0 RecEnPLC.PASOS(4 * I - 4).PAR_9 = 0 RecEnPLC.PASOS(4 * I - 4).PAR_10 = 0 RecEnPLC.PASOS(4 * I - 3).N_PASO_FOR = I RecEnPLC.PASOS(4 * I - 3).COMPASO = UCase(TPasCom(I - 1).Text) RecEnPLC.PASOS(4 * I - 3).N_PASO = 4 * I - 2 RecEnPLC.PASOS(4 * I - 3).TIPO_PASO = 2 RecEnPLC.PASOS(4 * I - 3).ESTADO = 0 RecEnPLC.PASOS(4 * I - 3).PAR_1 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_2 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_3 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_4 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_5 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_6 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_7 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_8 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_9 = 0 RecEnPLC.PASOS(4 * I - 3).PAR_10 = 0 RecEnPLC.PASOS(4 * I - 2).N_PASO_FOR = I RecEnPLC.PASOS(4 * I - 2).COMPASO = UCase(TPasCom(I - 1).Text) RecEnPLC.PASOS(4 * I - 2).N_PASO = 4 * I - 1 RecEnPLC.PASOS(4 * I - 2).TIPO_PASO = 3 RecEnPLC.PASOS(4 * I - 2).ESTADO = 0 RecEnPLC.PASOS(4 * I - 2).PAR_1 = !PAS_PAR6 * 60 RecEnPLC.PASOS(4 * I - 2).PAR_2 = 0 RecEnPLC.PASOS(4 * I - 2).PAR_3 = 0 RecEnPLC.PASOS(4 * I - 2).PAR_4 = 0 RecEnPLC.PASOS(4 * I - 2).PAR_5 = 0 RecEnPLC.PASOS(4 * I - 2).PAR_6 = 0 RecEnPLC.PASOS(4 * I - 2).PAR_7 = 0 RecEnPLC.PASOS(4 * I - 2).PAR_8 = 0 RecEnPLC.PASOS(4 * I - 2).PAR_9 = 0 RecEnPLC.PASOS(4 * I - 2).PAR_10 = 0 RecEnPLC.PASOS(4 * I - 1).N_PASO_FOR = I RecEnPLC.PASOS(4 * I - 1).COMPASO = UCase(TPasCom(I - 1).Text) RecEnPLC.PASOS(4 * I - 1).N_PASO = 4 * I RecEnPLC.PASOS(4 * I - 1).TIPO_PASO = 4 RecEnPLC.PASOS(4 * I - 1).ESTADO = 0 RecEnPLC.PASOS(4 * I - 1).PAR_1 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_2 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_3 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_4 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_5 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_6 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_7 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_8 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_9 = 0 RecEnPLC.PASOS(4 * I - 1).PAR_10 = 0 .MoveNext Next I Call Cerrar_BD(db) Call Cerrar_RST(RST) If Not PLC Then GoTo fin: 'Pasamos la cabecera de la receta 'N de la receta Call Normal2STEP5(NRec, 0) 'N de pasos buffer(2) = (4 * NPas) 'N de tanques buffer(3) = Deposito 'Fechas de inicio y final For I = 4 To 25 buffer(I) = 0 Next I 'escribe cabecera del DB res = d_field_write(100, 0, 26, buffer(0)) If res <> 0 Then Call Fallo_Com_PLC GoTo fin End If For I = 1 To 4 * NPas Call Normal2STEP5(RecEnPLC.PASOS(I - 1).N_PASO, (42 * (I - 1)))

Pgina 109 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Call Normal2STEP5(RecEnPLC.PASOS(I - 1).TIPO_PASO, (42 * (I - 1) + 2)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).ESTADO, (42 * (I - 1) + 4)) For j = (42 * (I - 1) + 6) To (42 * (I - 1) + 21) buffer(j) = 0 Next j Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_1, (42 * (I - 1) + 22)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_2, (42 * (I - 1) + 24)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_3, (42 * (I - 1) + 26)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_4, (42 * (I - 1) + 28)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_5, (42 * (I - 1) + 30)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_6, (42 * (I - 1) + 32)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_7, (42 * (I - 1) + 34)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_8, (42 * (I - 1) + 36)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_9, (42 * (I - 1) + 38)) Call Normal2STEP5(RecEnPLC.PASOS(I - 1).PAR_10, (42 * (I - 1) + 40)) Next I res = d_field_write(100, 26, 168 * NPas, buffer(0)) If res <> 0 Then Call Fallo_Com_PLC GoTo fin End If Rec_Car = True End If End If End With fin: End Function Public Sub NuevaReceta() Dim db As Database Dim RST As Recordset Dim cadSQL As String Set db = OpenDatabase(DirDB) 'Abre la table RECETAS ordenada por n de receta cadSQL = "SELECT * FROM RECETAS ORDER BY REC_NUM" Set RST = db.OpenRecordset(cadSQL) With RST 'Calcula el n que le corresponde a la nueva receta y la establece como receta activa If Not .EOF Then .MoveLast .MoveFirst RecAct = .RecordCount + 1 Else RecAct = 1 End If End With Call Cerrar_RST(RST) Call Cerrar_BD(db) Call CargaReceta(RecAct)

End Sub Public Sub Receta_Vacia(NRec As Integer) Dim I As Integer 'Inicializa el formulario Recetas con una recta vaca TRecNRec.Caption = "RECETA N " & NRec TRecComRec.Text = "" TRecFecCrea.Text = "" TRecCrea.Text = "" TRecFecMod.Text = "" TRecModifica.Text = "" For I = 0 To 14 TPasCom(I).Text = "" TPasAgua(I).Text = 0 TPasSosa(I).Text = 0 TPasAcido(I).Text = 0 TPasDesinf(I).Text = 0 TPasTensoac(I).Text = 0 TPasRecirc(I).Text = 0 Next I End Sub

Pgina 110 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Public Function CompruebaReceta() As Boolean Dim I As Integer Dim PasoVacio As Boolean Dim CadMsg As String Dim db As Database Dim RST As Recordset CompruebaReceta = True Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset("SELECT * FROM CONFIGURACION") If RST.EOF Then CadMsg = "SISTEMA DESCONFIGURADO" CompruebaReceta = False GoTo MSG End If For I = 0 To 14 'Comprueba que no se trate de un paso vacio PasoVacio = (CDbl(TPasAgua(I).Text) = 0) And (CDbl(TPasSosa(I).Text) = 0) PasoVacio = PasoVacio And (CDbl(TPasAcido(I).Text) = 0) And (CDbl(TPasDesinf(I).Text) = 0) PasoVacio = PasoVacio And (CDbl(TPasTensoac(I).Text) = 0) And (CDbl(TPasRecirc(I).Text) = 0) If Not PasoVacio Then 'Reglas de coherencia de las recetas: '- Tiempo de recirculacin >0 '- Litros de agua>0 '- No mezclar sosa y cido '- Volmen total '- Volmenes de cada componente If CDbl(TPasAgua(I).Text) <= 0 Then CadMsg = "NO SE ADMITEN PASOS DE RECETA SIN AGUA (Paso" & I + 1 & ")" CompruebaReceta = False Exit For End If If CDbl(TPasSosa(I).Text) > 0 And CDbl(TPasAcido(I).Text) > 0 Then CadMsg = "NO SE PUEDE MEZCLAR SOSA Y CIDO EN EL MISMO PASO (Paso" & I + 1 & ")" CompruebaReceta = False Exit For End If If CDbl(TPasRecirc(I).Text) <= 0 Then CadMsg = "TODOS LOS PASOS DEBEN INCLUIR UN TIEMPO DE RECIRCULACIN (Paso" & I + 1 & ")" CompruebaReceta = False Exit For End If If CDbl(TPasAgua(I)) > RST!CONF_VOLMAXPREP Then CadMsg = "EL VOLUMEN DE AGUA EXCEDE DEL MXIMO ADMISIBLE (Paso" & I + 1 & ")" CompruebaReceta = False Exit For End If If CDbl(TPasSosa(I)) > RST!CONF_VOLMAXSOSA Then CadMsg = "EL VOLUMEN DE SOSA EXCEDE DEL MXIMO ADMISIBLE (Paso" & I + 1 & ")" CompruebaReceta = False Exit For End If If CDbl(TPasAcido(I)) > RST!CONF_VOLMAXACIDO Then CadMsg = "EL VOLUMEN DE ACIDO EXCEDE DEL MXIMO ADMISIBLE (Paso" & I + 1 & ")" CompruebaReceta = False Exit For End If If CDbl(TPasTensoac(I)) > RST!CONF_VOLMAXTENSOAC Then CadMsg = "EL VOLUMEN DE TENSOACTIVO EXCEDE DEL MXIMO ADMISIBLE (Paso" & I + 1 & ")" CompruebaReceta = False Exit For End If If CDbl(TPasDesinf(I)) > RST!CONF_VOLMAXDESINF Then CadMsg = "EL VOLUMEN DE DESINFECTANTE EXCEDE DEL MXIMO ADMISIBLE (Paso" & I + 1 & ")" CompruebaReceta = False Exit For End If End If Next I MSG: Call Cerrar_BD(db) Call Cerrar_RST(RST) If Not CompruebaReceta Then I = MsgBox(CadMsg, vbOKOnly, "RECETA INCORRECTA!") End If

Pgina 111 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales End Function Public Sub Borrar_Receta(NRec As Integer) Dim db As Database Dim cadSQL As String 'Borra la receta de la tabla RECETAS Set db = OpenDatabase(DirDB) cadSQL = "DELETE * FROM RECETAS WHERE REC_NUM=" & NRec db.Execute cadSQL 'Borra todos los pasos de la receta de la table PASOS_REC cadSQL = "DELETE * FROM PASOS_REC WHERE PAS_REC=" & NRec db.Execute cadSQL Call Cerrar_BD(db) Call Reordena_Recetas End Sub Public Sub Reordena_Recetas() Dim db As Database Dim rstRec As Recordset Dim rstPas As Recordset Dim cadSQL As String Dim I, j As Integer Dim NodX As Node Set db = OpenDatabase(DirDB) cadSQL = "SELECT * FROM RECETAS ORDER BY REC_NUM" Set rstRec = db.OpenRecordset(cadSQL) With rstRec If Not .EOF Then .MoveLast .MoveFirst For I = 1 To .RecordCount .Edit 'Reordena la tabla RECETAS j = !REC_NUM !REC_NUM = I 'Reordena la tabla PASOS_REC cadSQL = "SELECT * FROM PASOS_REC WHERE PAS_REC=" & j & " ORDER BY PAS_N_PASO" Set rstPas = db.OpenRecordset(cadSQL) With rstPas If Not .EOF Then .MoveLast .MoveFirst For j = 1 To .RecordCount .Edit !PAS_REC = I !PAS_N_PASO = j .Update .MoveNext Next j End If End With .MoveNext Next I End If End With Call Cerrar_RST(rstRec) Call Cerrar_RST(rstPas) Call Cerrar_BD(db) Call CargaReceta(RecAct) End Sub Public Sub SalvarReceta(NRec As Integer) Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim I, iPas As Integer Dim RecMod As Boolean Dim Autor As String Dim PasoVacio As Boolean Set db = OpenDatabase(DirDB) 'Toma los datos del usuario

Pgina 112 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales cadSQL = "SELECT USU_DATOS FROM USUARIOS WHERE USUARIO='" & Usuario & "'" Set RST = db.OpenRecordset(cadSQL) If Not RST.EOF Then Autor = RST!USU_DATOS Else Autor = "Desconocido" End If Call Cerrar_RST(RST) 'Abre la tabla RECETAS cadSQL = "SELECT * FROM RECETAS WHERE REC_NUM=" & NRec & " ORDER BY REC_NUM" Set RST = db.OpenRecordset(cadSQL) 'Si la receta ya existe, la edita para salvar las modificaciones 'Si la receta no existe, la crea nueva With RST If Not .EOF Then .Edit RecMod = True Else .AddNew RecMod = False End If !REC_NUM = NRec !REC_COM = TRecComRec.Text If Not RecMod Then !REC_FEC_CREA = Date & " " & Time() !REC_AUTOR = Autor Else !REC_ULT_MODIF = Date & " " & Time() !REC_AUT_ULT_MODIF = Autor End If .Update End With Call Cerrar_RST(RST) 'Borra todos los pasos de la receta en cuestin de la tabla PASOS_REC cadSQL = "DELETE * FROM PASOS_REC WHERE PAS_REC=" & NRec db.Execute cadSQL 'Abre la tabla PASOS_REC para guardar los datos nuevos/modificados cadSQL = "SELECT * FROM PASOS_REC ORDER BY PAS_REC, PAS_N_PASO" Set RST = db.OpenRecordset(cadSQL) iPas = 1 For I = 0 To 14 PasoVacio = (CDbl(TPasAgua(I).Text) = 0) And (CDbl(TPasSosa(I).Text) = 0) PasoVacio = PasoVacio And (CDbl(TPasAcido(I).Text) = 0) And (CDbl(TPasDesinf(I).Text) = 0) PasoVacio = PasoVacio And (CDbl(TPasTensoac(I).Text) = 0) And (CDbl(TPasRecirc(I).Text) = 0) If Not PasoVacio Then With RST .AddNew !PAS_REC = NRec !PAS_N_PASO = iPas !PAS_PAR1 = CDbl(TPasAgua(I).Text) !PAS_PAR2 = CDbl(TPasSosa(I).Text) !PAS_PAR3 = CDbl(TPasAcido(I).Text) !PAS_PAR4 = CDbl(TPasDesinf(I).Text) !PAS_PAR5 = CDbl(TPasTensoac(I).Text) !PAS_PAR6 = CDbl(TPasRecirc(I).Text) !PAS_COM = TPasCom(I).Text .Update iPas = iPas + 1 End With End If Next I Call Cerrar_RST(RST) Call Cerrar_BD(db) Call CargaReceta(NRec) End Sub

Formulario INFORMES
Private Sub bordes(rango As String) Set xlr = xls.Range(rango) xlr.Borders(xlDiagonalDown).LineStyle = xlNone

Pgina 113 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales xlr.Borders(xlDiagonalUp).LineStyle = xlNone With xlr.Borders(xlEdgeLeft) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With xlr.Borders(xlEdgeTop) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With xlr.Borders(xlEdgeBottom) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With xlr.Borders(xlEdgeRight) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With xlr.Borders(xlInsideVertical).LineStyle = xlNone xlr.Borders(xlInsideHorizontal).LineStyle = xlNone xlr.Borders(xlDiagonalDown).LineStyle = xlNone xlr.Borders(xlDiagonalUp).LineStyle = xlNone With xlr.Borders(xlEdgeLeft) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With xlr.Borders(xlEdgeTop) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With xlr.Borders(xlEdgeBottom) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With xlr.Borders(xlEdgeRight) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With xlr.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With xlr.Borders(xlInsideHorizontal) On Error Resume Next .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub Private Sub Command1_Click() Dim I, j, k As Integer Dim r, c As Integer Dim strMsg As String Dim strFilter As String Dim aux As String Dim Fallo As Boolean Screen.MousePointer = vbHourglass Set xlb = xla.Workbooks.Add 'Crea un libro nuevo Set xls = xlb.Worksheets.Add 'Crea una hoja de calculo nueva xls.Activate 'Convierte esta hoja en la hoja activa. 'Es como hacer clic en la etiqueta de la hoja xls.Cells(2, 2) = txtComReceta.Text Set xlr = xls.Cells(2, 2) xlr.Select xlr.Font.size = 12

Pgina 114 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales xlr.Font.Bold = True xls.Cells(2, 6) = "FECHA" xls.Cells(2, 7) = RecEnPLC.INICIO Set xlr = xls.Range("F2:G2") xlr.Select xlr.Font.size = 12 xlr.Font.Bold = True xlr.Font.Color = vbGreen xls.Cells(3, 2) = "N de Receta" xls.Cells(3, 3) = txtNReceta xls.Cells(4, 2) = "N de Tanque" xls.Cells(4, 3) = txtNTanque xls.Cells(5, 2) = "N de Pasos" xls.Cells(5, 3) = txtNPasos xls.Cells(7, 2) = "PASOS" xls.Cells(7, 3) = "Agua (l)" xls.Cells(7, 4) = "Sosa (l)" xls.Cells(7, 5) = "Acido(l)" xls.Cells(7, 6) = "Desinfectante (ml)" xls.Cells(7, 7) = "Tensoactivo(l)" xls.Cells(7, 8) = "Recirculacion (min)" xls.Cells(24, 3) = "INICIO" xls.Cells(24, 4) = "FINAL" xls.Cells(24, 5) = "DURACIN" Set xlr = xls.Range("C24:E24") xlr.Select xlr.Font.size = 12 xlr.Font.Bold = True Set xlr = xls.Range("B7:H7") xlr.Select xlr.Font.size = 12 xlr.Font.Bold = True bordes ("B2:C5") Fallo = False For I = 0 To (txtNPasos * 4 - 1) 'Comprueba que la receta se ha terminado If (RecEnPLC.PASOS(I).INICIO = Empty Or RecEnPLC.PASOS(I).FINAL = Empty) Then Fallo = True strMsg = "La receta se ha detenido en el paso " strMsg = strMsg & vbCrLf & vbCrLf strMsg = strMsg & vbCrLf & "Se genera el fichero con los pasos completados" dev = MsgBox(strMsg, , "Aviso:Receta no finalizada") Exit For End If Next I If Fallo Then limite = Round(I / 4) Else limite = txtNPasos End If For I = 0 To limite - 1 xls.Cells(I + 8, 2) = RecEnPLC.PASOS(4 * I).COMPASO xls.Cells(I + 8, 3) = RecEnPLC.PASOS(4 * I).PAR_1 xls.Cells(I + 8, 4) = Round(RecEnPLC.PASOS(4 * I).PAR_2 * Sosa) xls.Cells(I + 8, 5) = Round(RecEnPLC.PASOS(4 * I).PAR_3 * Acido) xls.Cells(I + 8, 6) = Round(RecEnPLC.PASOS(4 * I).PAR_4 * Desinf) xls.Cells(I + 8, 7) = Round(RecEnPLC.PASOS(4 * I).PAR_5 * Tensoac) xls.Cells(I + 8, 8) = RecEnPLC.PASOS(4 * I + 2).PAR_1 / 60 xls.Cells(5 * I + 25, 2) = RecEnPLC.PASOS(4 * I).COMPASO Set xlr = xls.Cells(5 * I + 25, 2) xlr.Select xlr.Font.size = 12 xlr.Font.Bold = True xls.Cells(5 * I + 26, 2) = " Preparacion" xls.Cells(5 * I + 27, 2) = " Envo" xls.Cells(5 * I + 28, 2) = " Recirculacin" xls.Cells(5 * I + 29, 2) = " Vaciado" Set xlr = xls.Range("B" & (5 * I + 26) & ":B" & (5 * I + 29)) xlr.Select xlr.Font.Color = vbBlue xls.Cells(5 * I + 26, 3) = RecEnPLC.PASOS(4 * I).INICIO xls.Cells(5 * I + 26, 4) = RecEnPLC.PASOS(4 * I).FINAL xls.Cells(5 * I + 26, 5) = CDate(RecEnPLC.PASOS(4 * I).FINAL - RecEnPLC.PASOS(4 * I).INICIO) xls.Cells(5 * I + 27, 3) = RecEnPLC.PASOS(4 * I + 1).INICIO xls.Cells(5 * I + 27, 4) = RecEnPLC.PASOS(4 * I + 1).FINAL xls.Cells(5 * I + 27, 5) = CDate(RecEnPLC.PASOS(4 * I + 1).FINAL - RecEnPLC.PASOS(4 * I + 1).INICIO) xls.Cells(5 * I + 28, 3) = RecEnPLC.PASOS(4 * I + 2).INICIO

Pgina 115 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales xls.Cells(5 * I + 28, 4) = RecEnPLC.PASOS(4 * I + 2).FINAL xls.Cells(5 * I + 28, 5) = CDate(RecEnPLC.PASOS(4 * I + 2).FINAL - RecEnPLC.PASOS(4 * I + 2).INICIO) xls.Cells(5 * I + 29, 3) = RecEnPLC.PASOS(4 * I + 3).INICIO xls.Cells(5 * I + 29, 4) = RecEnPLC.PASOS(4 * I + 3).FINAL On Error Resume Next xls.Cells(5 * I + 29, 5) = CDate(RecEnPLC.PASOS(4 * I + 3).FINAL - RecEnPLC.PASOS(4 * I + 3).INICIO) Set xlr = xls.Range("C" & (5 * I + 26) & ":E" & (5 * I + 29)) xlr.Select xlr.NumberFormat = "h:mm:ss" Next I bordes ("B7:H" & (txtNPasos + 7)) bordes ("B24:E" & ((txtNPasos * 5) + 24)) Set xlr = xls.Columns("B:H") 'Selecciona rango B-H xlr.Select xlr.EntireColumn.AutoFit 'Ajusta ancho columna al texto Screen.MousePointer = vbDefault strMsg = "Se han transportado los datos correctamente" strMsg = strMsg & vbCrLf & "a una hoja de calculo de Excel." strMsg = strMsg & vbCrLf & vbCrLf strMsg = strMsg & "Desea guardar la hoja de calculo de Excel?" If MsgBox(strMsg, vbQuestion + vbYesNo) = vbYes Then strFilter = "Archivos de excel(*.xls)|*.xls|Todos los archivos (*.*)|*.*" 'Filtro ficheros cdlgMain.Filter = strFilter aux = Left(Date, 2) & "_" & Mid(Date, 4, 2) & "_" & Right(Date, 4) cdlgMain.FileName = aux cdlgMain.ShowSave If cdlgMain.FileName <> "" Then ' Establecer CancelError a True cdlgMain.CancelError = True On Error GoTo CtrlError xls.SaveAs (cdlgMain.FileName) strMsg = "Los datos del reporte se han guardado en un archivo: " & vbCrLf & vbCrLf strMsg = strMsg & cdlgMain.FileName MsgBox strMsg, vbExclamation, "Hoja de calculo guardada" End If End If xlb.Saved = True xla.Quit Set xls = Nothing Set xlr = Nothing Set xlb = Nothing Set xla = Nothing Exit Sub CtrlError: ' El usuario ha hecho clic en el botn Cancelar If Err.Number = "1004" Then strMsg = "Error al guardar, compruebe que no este abierto el fichero" MsgBox strMsg, vbExclamation, "Error" End If xla.Quit Set xls = Nothing Set xlr = Nothing Set xlb = Nothing Set xla = Nothing Exit Sub End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Form_Load() txtComReceta.Text = RecEnPLC.COMRECETA txtNPasos.Text = RecEnPLC.N_PASOS txtNReceta.Text = RecEnPLC.N_RECETA txtNTanque.Text = RecEnPLC.N_TANQUE End Sub

Formulario LOGIN
Option Explicit

Pgina 116 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Public LoginSucceeded As Boolean Private Sub cmdCancel_Click() 'establecer la variable global a false 'para indicar un inicio de sesin fallido LoginSucceeded = False Unload Me End Sub Private Sub cmdOK_Click() Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim I As Integer 'Abre la tabla usuarios donde estn los usuarios reconocidos, 'sus contraseas y niveles de acceso cadSQL = "SELECT * FROM USUARIOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST If Not .EOF Then .MoveLast .MoveFirst .FindFirst "USUARIO='" & UCase(cmbUsuarios.Text) & "'" If .NoMatch Then I = MsgBox("USUARIO DESCONOCIDO. Intntelo de nuevo.", vbCritical, "LOGIN") Else If !Password = UCase(txtPassword.Text) Then NivelAcceso = !Nivel Usuario = !Usuario txtPassword.Text = "" Unload Me FPpal.TBPpal.Buttons.Item(3).ButtonMenus.Item(4).Enabled = True 'Habilita cerrar sesion Else I = MsgBox("CONTRASEA ERRNEA. Intntelo de nuevo.", vbCritical, "LOGIN") End If End If End If End With Call Cerrar_RST(RST) Call Cerrar_BD(db) End Sub Private Sub Form_Load() Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim I As Integer Dim cuenta As Integer 'Abre la tabla usuarios donde estn los usuarios reconocidos, 'sus contraseas y niveles de acceso cadSQL = "SELECT * FROM USUARIOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST .MoveLast .MoveFirst cuenta = .RecordCount ' cuenta los usuarios activos For I = cuenta To 1 Step -1 cmbUsuarios.AddItem RST.Fields(0).value ' Rellena valores del combo .MoveNext Next I End With Call Cerrar_RST(RST) Call Cerrar_BD(db) End Sub

Formulario NUEVO USUARIO


Option Explicit

Pgina 117 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Private Sub CmdAceptar_Click() Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim I As Integer Dim ValNiv As Integer 'Tratamiento de errores o datos incompletos ValNiv = Not (IsNumeric(TxtNivel.Text)) 'Si no es un numero If TxtUsuario.Text = "" Then I = MsgBox("Campo Usuario vacio", vbCritical, "LOGIN") Exit Sub ElseIf (TxtNivel.Text = "") Or (ValNiv) Or ((Val(TxtNivel.Text) < 0) Or (Val(TxtNivel.Text) > 10)) Then I = MsgBox("Campo Nivel vacio o no valido", vbCritical, "LOGIN") Exit Sub ElseIf TxtClave.Text = "" Then I = MsgBox("Campo clave vacio", vbCritical, "LOGIN") Exit Sub ElseIf TxtConfClave.Text = "" Then I = MsgBox("Campo confirmar clave vacio", vbCritical, "LOGIN") Exit Sub ElseIf TxtClave.Text <> TxtConfClave.Text Then I = MsgBox("La clave no ha sido confirmada correctamente", vbCritical, "LOGIN") Exit Sub End If 'Abre la tabla usuarios donde estn los usuarios reconocidos, 'sus contraseas y niveles de acceso cadSQL = "SELECT * FROM USUARIOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST If Not .EOF Then .MoveLast .MoveFirst .FindFirst "USUARIO='" & UCase(TxtUsuario.Text) & "'" If Not (.NoMatch) Then ' Si ya existe I = MsgBox("USUARIO REPETIDO. Intntelo de nuevo.", vbCritical, "LOGIN") Exit Sub Else 'Si es nuevo lo registra .MoveLast .AddNew !Usuario = UCase(TxtUsuario.Text) !Nivel = TxtNivel.Text !Password = UCase(TxtClave.Text) .Update End If End If End With Call Cerrar_RST(RST) Call Cerrar_BD(db) Unload Me End Sub Private Sub CmdCancelar_Click() Unload Me End Sub Private Sub Form_Load() End Sub

Formulario BORRAR USUARIO


Option Explicit Private Sub cmdCancel_Click() Unload Me End Sub Private Sub cmdOK_Click()

Pgina 118 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim cadSQL1 As String Dim I As Integer

'Abre la tabla usuarios donde estn los usuarios reconocidos, 'sus contraseas y niveles de acceso cadSQL = "SELECT * FROM USUARIOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST If Not .EOF Then .MoveLast .MoveFirst .FindFirst "USUARIO='" & UCase(cmbUsuarios.Text) & "'" If Not (.NoMatch) Then .Delete End If End If End With Call Cerrar_RST(RST) Call Cerrar_BD(db) Unload Me End Sub Private Sub Form_Load() Dim db As Database Dim RST As Recordset Dim cadSQL As String Dim I As Integer Dim cuenta As Integer 'Abre la tabla usuarios donde estn los usuarios reconocidos, 'sus contraseas y niveles de acceso cadSQL = "SELECT * FROM USUARIOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST .MoveLast .MoveFirst cuenta = .RecordCount ' cuenta los usuarios activos For I = cuenta To 1 Step -1 cmbUsuarios.AddItem RST.Fields(0).value ' Rellena valores del combo .MoveNext Next I End With Call Cerrar_RST(RST) Call Cerrar_BD(db) End Sub

Formulario PUPITRE
Private Sub CBCerrarPupitre_Click() Hide End Sub

Private Sub CBPET_Click() OPES = CBPET.value Call ANIMA End Sub Private Sub CBSeta_Click() OPEmerg = CBSeta.value Call ANIMA End Sub Private Sub CBValidar_Click()

Pgina 119 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales If TTAConectar = "" Then Exit Sub If TTAConectar >= 0 And TTAConectar <= 6 Then TAConectar = Val(TTAConectar) End If End Sub Private Sub Form_Load() Call ANIMA End Sub Private Sub ANIMA() If OPEmerg Then CBSeta.BackColor = BOTON_ON Else CBSeta.BackColor = BOTON_OFF End If If OPES Then CBPET.BackColor = BOTON_ON Else CBPET.BackColor = BOTON_OFF End If End Sub

Formulario DEFECTOS
Private Sub CBCerrarDef_Click() Unload Me End Sub Private Sub CBRefDef_Click() RELLENA_DEF End Sub Private Sub CBResetDefectos_Click() Dim db As Database Dim RST As Recordset Dim cadSQL As String ListDefectos.Clear 'Abre la tabla usuarios donde estn los usuarios reconocidos, 'sus contraseas y niveles de acceso cadSQL = "SELECT * FROM DEFECTOS" Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) With RST If Not .EOF Then .MoveLast .MoveFirst While Not .EOF .Delete .MoveNext Wend End If End With Call Cerrar_RST(RST) Call Cerrar_BD(db) End Sub Private Sub Form_Load() RELLENA_DEF End Sub Private Sub RELLENA_DEF() Dim I As Integer Dim db As Database Dim RST As Recordset Dim cadSQL As String 'Abre la tabla usuarios donde estn los usuarios reconocidos, 'sus contraseas y niveles de acceso cadSQL = "SELECT * FROM DEFECTOS"

Pgina 120 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Set db = OpenDatabase(DirDB) Set RST = db.OpenRecordset(cadSQL) ListDefectos.Clear With RST If Not .EOF Then .MoveFirst While Not .EOF ListDefectos.AddItem !FECHA & " " & !HORA & " " & !TEXTO .MoveNext Wend Else End If End With Call Cerrar_RST(RST) Call Cerrar_BD(db) End Sub

Mdulo GENERAL
Type PASO_RECETA N_PASO_FOR As Integer COMPASO As String N_PASO As Integer TIPO_PASO As Integer ESTADO As Integer INICIO As Variant FINAL As Variant PAR_1 As Integer PAR_2 As Integer PAR_3 As Integer PAR_4 As Integer PAR_5 As Integer PAR_6 As Integer PAR_7 As Integer PAR_8 As Integer PAR_9 As Integer PAR_10 As Integer End Type Type RECETA N_RECETA As Integer N_PASOS As Byte N_TANQUE As Byte INICIO As Date FINAL As Date ESTADO As Integer PASO_ACTIVO As Integer TIEMPO As Integer PASOS(255) As PASO_RECETA COMRECETA As String End Type

Global ContSleep As Long Global TanqueCon As Integer Global DepositoR As Integer Global TPasAct As Integer Global e(9, 7) As Boolean ' Matriz de entradas digitales Global a(5, 7) As Boolean ' Matriz de salidas digitales Global DBB34(0, 7) As Boolean Global DBB35(0, 7) As Boolean Global DBB44(0, 7) As Boolean Global DBB45(0, 7) As Boolean Global DBB58(0, 7) As Boolean Global DBB59(0, 7) As Boolean Global DBB61(0, 7) As Boolean Global PLC2PC(0, 7) As Boolean Global DEF(9, 7) As Boolean Global VolAguaR As Integer Global TBSosaR As Integer Global TBAcidoR As Integer Global TBTensoR As Integer Global TBDesinR As Integer Global TRecircR As Integer Global NRecPLC

Pgina 121 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Global NTanquePLC As Integer Global EstadoPasoAc As Integer Global NPasoAc As Integer Global PLC_ON As Boolean 'Entradas de estado de la instalacin Global EVAgua Global EBTenso As Boolean Global EBDens As Boolean Global EBAcido As Boolean Global EBSosa As Boolean Global EVDep As Boolean Global EFlujoDep As Boolean Global EBDep As Boolean Global EVCM1 As Boolean Global EVCM2 As Boolean Global EVCM3 As Boolean Global EVCM4 As Boolean Global EBCM As Boolean Global EFlujoCM As Boolean Global EVCF5 As Boolean Global EVCF6 As Boolean Global EVCF7 As Boolean Global EVCF8 As Boolean Global EBCF As Boolean Global EFlujoCF As Boolean Global ECParEm As Boolean Global ECFA As Boolean Global ETBDep As Boolean Global ETBC As Boolean Global ETBSosa As Boolean Global ETBAcido As Boolean Global ETBTenso As Boolean Global ETBDens As Boolean Global ESelMA As Boolean Global EITB0 As Boolean Global EITB1 As Boolean Global EITB2 As Boolean Global EITB3 As Boolean Global EITB4 As Boolean Global ECAA18 As Boolean Global ECIA18 As Boolean Global ECAA17 As Boolean Global ECIA17 As Boolean Global EInstSer As Boolean Global EFinRec As Boolean Global ERecPar As Boolean Global ERecEjec As Boolean Global EAutMovMan As Boolean Global EAutMovAut As Boolean Global EEspConfT As Boolean 'Entradas de defecto de la instalacin Global DMVAgua As Boolean Global DMBSosa As Boolean Global DMBAcido As Boolean Global DMBDens As Boolean Global DMBTenso As Boolean Global DMVDep As Boolean Global DMVCM1 As Boolean Global DMVCM2 As Boolean Global DMVCM3 As Boolean Global DMVCM4 As Boolean Global DMBCM As Boolean Global DMBDep As Boolean Global DMCF5 As Boolean Global DMCF6 As Boolean Global DMCF7 As Boolean Global DMCF8 As Boolean Global DMBCF As Boolean Global DTCon As Boolean Global OVAgua As Boolean Global OBTenso As Boolean Global OBDens As Boolean Global OBAcido As Boolean Global OBSosa As Boolean Global OVDep As Boolean Global OBDep As Boolean

Pgina 122 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales 'rdenes al PLC Global OS0 As Boolean Global OS1 As Boolean Global OS2 As Boolean Global OS3 As Boolean Global OS4 As Boolean Global OS5 As Boolean Global OS6 As Boolean Global OS7 As Boolean Global OVCM1 As Boolean Global OVCM2 As Boolean Global OVCM3 As Boolean Global OVCM4 As Boolean Global OBCM As Boolean Global OVCF5 As Boolean Global OVCF6 As Boolean Global OVCF7 As Boolean Global OVCF8 As Boolean Global OBCF As Boolean Global OResDef As Boolean Global OResRec As Boolean Global OParRec As Boolean Global OArrRec As Boolean Global OAutMM As Boolean Global OAnSegTV As Boolean Global OTestCom As Boolean Global AutMovMan As Boolean Global OPES As Boolean Global OAuto As Boolean Global OPEmerg As Boolean Global XTPrep5 As Variant Global X2TV2 As Variant Global X2TV1 As Variant Global X1TV3 As Variant Global X1TV4 As Variant Global buffer(2600) As Byte Global bufferaux(112) As Byte Global RecEnPLC As RECETA Global Deposito As Integer Global Usuario As String Global NivelAcceso As Integer Global NuevaRec As Boolean Global Const ROJO = &HFF& Global Const AZUL = &HFF0000 Global Const VERDE = &HFF00& Global Const GRIS = &HC0C0C0 Global RecAct As Integer Global PasoAct As Boolean Global PasoAnt As Integer Global TAConectar As Integer 'Tanque a conectar Global Rec_Car As Boolean 'Variable a True si receta ha sido cargada Global Const DirDB = "D:\PFC\CIP_FERM\Base de Datos\BD_CIP" Global Const EV_ON = "D:\PFC\CIP_FERM\Imagenes\ValvulaON.gif" Global Const EV_OFF = "D:\PFC\CIP_FERM\Imagenes\ValvulaOFF.gif" Global Const BOMBA_ON = "D:\PFC\CIP_FERM\Imagenes\BombaON.gif" Global Const BOMBA_OFF = "D:\PFC\CIP_FERM\Imagenes\BombaOFF.gif" Global Const FLUJOSTATO_ON = "D:\PFC\CIP_FERM\Imagenes\FlujostatoON.gif" Global Const FLUJOSTATO_OFF = "D:\PFC\CIP_FERM\Imagenes\FlujostatoOFF.gif" Global Const TUBO_SOSA = &H808000 Global Const TUBO_ACIDO = &HFF& Global Const TUBO_DESIN = &HFF00& Global Const BOTON_ON = &HC0FFC0 Global Const BOTON_OFF = &H8000000F Global Const TUBO_AGUA = &HFF0000 Global Const TUBO_OFF = &HC0C0C0 Global Const UltimaE = 9 Global Const UltimaS = 5 Global Const PrimerCanalPLC_PC = 34 Global Const PrimerCanalPC_PLC = 44 Global Const PrimerCanalDef = 54 Global Const NumCanalDef = 10 Global Automatico As Boolean Global Manual As Boolean Global ANIMA_SINOPOTICO As Boolean Global TUBO_ON As Long Global TUBO_ON_SP As Long

Pgina 123 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales Global cnt As Integer Global xla As New Excel.Application Global xlb As New Excel.Workbook Global xls As New Excel.Worksheet Global xlr As Excel.Range Global Sosa As Variant, Acido As Variant, Tensoac As Variant, Desinf As Variant Global FFinReceta As Boolean 'Flanco positivo fin receta

Public Sub GestionaAccesos(Nivel As Integer, F As Form) 'Autorizacin de movimientos manuales If Nivel <= 5 Then AutMovMan = False 'Determina la habilitacin de los botones de los mens en funcin del nivel de acceso 'y de la pantalla en que estemos Select Case F.Name 'Pantalla principal Case "FPpal" FPpal.TBPpal.Buttons.Item(1).Enabled = (Nivel >= 0) FPpal.TBPpal.Buttons.Item(3).Enabled = (Nivel >= 0) FPpal.TBPpal.Buttons.Item(3).ButtonMenus.Item(2).Enabled = (Nivel >= 1) 'Cerrar sesion FPpal.TBPpal.Buttons.Item(3).ButtonMenus.Item(3).Enabled = (Nivel = 10) 'Alta usuario FPpal.TBPpal.Buttons.Item(3).ButtonMenus.Item(4).Enabled = (Nivel = 10) 'Baja usuario FPpal.TBPpal.Buttons.Item(5).Enabled = (Nivel >= 0) FPpal.TBPpal.Buttons.Item(7).Enabled = (Nivel >= 0) 'Pantalla de recetas Case "FRecetas" FRecetas.TBRecetas.Buttons.Item(1).Enabled = (Nivel >= 10) FRecetas.TBRecetas.Buttons.Item(3).Enabled = (Nivel >= 10) FRecetas.TBRecetas.Buttons.Item(5).Enabled = (Nivel >= 10) FRecetas.TBRecetas.Buttons.Item(7).Enabled = (Nivel >= 10) FRecetas.TBRecetas.Buttons.Item(9).Enabled = (Nivel >= 5) End Select End Sub

Public Sub Cerrar_BD(db As Database) On Error Resume Next db.Close ' Cierra la base de datos Set db = Nothing ' libera la memoria End Sub Public Sub Cerrar_RST(RST As Recordset) On Error Resume Next RST.Close Set RST = Nothing End Sub

Public Function Abrir_PLC() As Boolean res = unload_tool() res = load_tool(1, "S7ONLINE", plcadr) If res = 0 Then Abrir_PLC = True FPpal.TimAbrirPLC.Enabled = False FPpal.TimScanPLC = True Call Alarma("CONEXIN ESTABLECIDA CON EL PLC", VERDE) FPpal.CBConectar.Enabled = False FPpal.CBDesconectar.Enabled = True Call FPpal.habilita(False) Else Abrir_PLC = False FPpal.CBDesconectar.Enabled = False Call Fallo_Com_PLC End If End Function Public Function Cerrar_PLC() As Boolean res = unload_tool() Cerrar_PLC = True Call Alarma("CERRADA LA CONEXIN CON EL PLC", ROJO) End Function

Pgina 124 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Public Sub Alarma(AlTxt As String, Color As Long) FPpal.TAlarmas.Text = AlTxt FPpal.TAlarmas.ForeColor = Color End Sub Public Sub Fallo_Com_PLC() PLC_ON = False FPpal.TimAbrirPLC.Enabled = True FPpal.TimScanPLC.Enabled = False Call Alarma("SIN CONEXIN CON EL PLC. Revise las conexiones entre el PC y el PLC. Avise a mantenimiento", ROJO) End Sub Public Function STEP5_2_BIN(Origen As Byte, Destino() As Boolean, Ind As Integer) Dim I As Integer Dim Num As Integer Num = Origen For I = 7 To 0 Step -1 If Num >= (2 ^ I) Then Destino(Ind, I) = True Num = Num - 2 ^ I Else Destino(Ind, I) = False End If Next I End Function Public Function STEP5_2_DEC(Ind As Integer) As Integer Dim CadHex As String Dim CadHexL As String Dim CadHexH As String CadHexL = Hex(buffer(Ind + 1)) CadHexH = Hex(buffer(Ind)) CadHex = "&H" & CadHexH & CadHexL STEP5_2_DEC = Val(CadHex)

End Function Public Sub Normal2STEP5(Num As Integer, Ind As Integer) Dim CadHex As String Dim I, j As Integer CadHex = Hex(Num) j = 4 - Len(CadHex) For I = 1 To j CadHex = "0" & CadHex Next I buffer(Ind + 1) = Hex2Dec(Right(CadHex, 2)) buffer(Ind) = Hex2Dec(Left(CadHex, 2)) End Sub Public Function Hex2Dec(Cad As String) As Long Dim I, j As Integer Hex2Dec = 0 For I = 1 To 2 j = Asc(Mid(Cad, I, 1)) If (j <= 57) And (j >= 48) Then j = j - 48 ElseIf (j <= 70) And (j >= 65) Then j = j - 55 End If Hex2Dec = Hex2Dec + j * 16 ^ (2 - I) Next I End Function Public Sub MovMan(Aut)

With FPpal 'Desautoriza los movimientos manuales OAutMM = OAutMM And Aut OVAgua = OVAgua And Aut

Pgina 125 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales OBTenso = OBTenso And Aut OBDens = OBDens And Aut OBAcido = OBAcido And Aut OBSosa = OBSosa And Aut OVDep = OVDep And Aut OBDep = OBDep And Aut OVCF5 = OVCF5 And Aut OVCF6 = OVCF6 And Aut OVCF7 = OVCF7 And Aut OVCF8 = OVCF8 And Aut OBCF = OBCF And Aut OBCM = OBCM And Aut OVCM1 = OVCM1 And Aut OVCM2 = OVCM2 And Aut OVCM4 = OVCM4 And Aut OResDef = OResDef And Aut OResRec = OResRec And Aut OParRec = OParRec And Aut OArrRec = OArrRec And Aut 'Inhabilita los botones de movimientos manuales .CBTenso.Enabled = Aut .CBDes.Enabled = Aut .CBAcido.Enabled = Aut .CBSosa.Enabled = Aut .CBVPrep.Enabled = Aut .CBBPrep.Enabled = Aut .CBVCM1.Enabled = Aut .CBVCM2.Enabled = Aut .CBVCM3.Enabled = Aut .CBVCM4.Enabled = Aut .CBBCM.Enabled = Aut .CBVCF5.Enabled = Aut .CBVCF6.Enabled = Aut .CBVCF7.Enabled = Aut .CBVCF8.Enabled = Aut .CBBCF.Enabled = Aut .CBTenso.value = .CBTenso.value And Aut .CBDes.value = Aut And .CBDes.value .CBAcido.value = Aut And .CBAcido.value .CBSosa.value = Aut And .CBSosa.value .CBVPrep.value = Aut And .CBVPrep.value .CBBPrep.value = Aut And .CBBPrep.value .CBVCM1.value = Aut And .CBVCM1.value .CBVCM2.value = Aut And .CBVCM2.value .CBVCM3.value = Aut And .CBVCM3.value .CBVCM4.value = Aut And .CBVCM4.value .CBBCM.value = Aut And .CBBCM.value .CBVCF5.value = Aut And .CBVCF5.value .CBVCF6.value = Aut And .CBVCF6.value .CBVCF7.value = Aut And .CBVCF7.value .CBVCF8.value = Aut And .CBVCF8.value .CBBCF.value = Aut And .CBBCF.value End With End Sub

Mdulo VBPRODAVE
' PRODAVE S7 declarations in Visual Basic ' for S7_300 ' '******************************************************************************************************************** ******** 'declarations for S7-200/300/400 '******************************************************************************************************************** ******** Type infotyp plcsw As Integer pgsw As Integer mlfb As String * 30 End Type Type mixdatatype

Pgina 126 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales type As Byte size As Byte bstno As Integer no As Integer End Type Type plcadrtype adr As Byte SEGMENTID As Byte SLOTNO As Byte RACKNO As Byte End Type Public Const BST_IN_RAM As Integer = 16 Public Const BST_IN_EPROM As Integer = 32

'******************************************************************************************************************** ******** 'declarations for S7-300/400 '******************************************************************************************************************** ******** Declare Function GetModuleFileNameA Lib "kernel32.dll" (ByVal hModule As Long, szPath As Byte, ByVal szPathLen As Long) As Long Declare Function load_tool Lib "w95_s7m.dll" (ByVal nr As Byte, ByVal dev As String, adr As plcadrtype) As Long Declare Function new_ss Lib "w95_s7m.dll" (ByVal nr As Byte) As Long Declare Function unload_tool Lib "w95_s7m.dll" () As Long Declare Function ag_info Lib "w95_s7m.dll" (value As infotyp) As Long ' blockno, no, amount, value Declare Function db_read Lib "w95_s7m.dll" (ByVal db As Long, ByVal dw As Long, anz As Long, value As Integer) As Long Declare Function db_write Lib "w95_s7m.dll" (ByVal db As Long, ByVal dw As Long, anz As Long, value As Integer) As Long Declare Function d_field_read Lib "w95_s7m.dll" (ByVal db As Long, ByVal nr As Long, ByVal anz As Long, value As Byte) As Long Declare Function d_field_write Lib "w95_s7m.dll" (ByVal db As Long, ByVal nr As Long, ByVal anz As Long, value As Byte) As Long '******************************************************************************************************************** ******** 'declarations for komfort.dll '******************************************************************************************************************** ******** 'errorno, errortext Declare Function error_message Lib "komfort.dll" (ByVal nr As Long, ByVal value$) As Long 'buffer, amount bytes Declare Sub swab_buffer Lib "komfort.dll" (value As Integer, ByVal anz As Integer) '******************************************************************************************************************** ******** 'variables para el programa CIP '******************************************************************************************************************** ******** Global DataTypeIdx As Integer Global OutputTypeIdx As Integer Global VerbIdx As Integer Global value_word(1024) As Integer Global value_byte(1024) As Byte Global plcadr As plcadrtype Global mixdata(17) As mixdatatype Global ErrorText As String Global res As Long Global AMOUNT As Long Global BLOCKNO As Long Global no As Long Global str As String

Pgina 127 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

9 Formularios Desarrollados
Formulario PRINCIPAL

Formulario PUPITRE

Pgina 128 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Formulario RECETAS

Formulario DEFECTOS

Pgina 129 de 130

Desarrollo de programas de supervisin y control aplicados a la automatizacin de limpieza de tanques industriales

Bibliografa
Web Wikipedia. La enciclopedia libre. Enlace: http://es.wikipedia.org/wiki/Firmware Enlace: http://es.wikipedia.org/wiki/SCADA Enlace: http://es.wikipedia.org/wiki/Aut%C3%B3mata_programable Enlace: http://es.wikipedia.org/wiki/Visual_Basic Web autmatas Enlace: http://www.automatas.org

Web Mixmail Enlace: http://www.mailxmail.com/curso/informatica/controladores/ Web Universidad Autnoma Metropolitana Enlace:http://luda.uam.mx/curso2/tema5/integral.html Aprenda Visual Basic 6.0 como si estuviera en primero Escuela Superior de Ingenieros Industriales de Navarra (vbasic60.pdf) "Autmatas Programables: fundamentos, manejo, instalacin y prcticas" A. Porras / A.P.Montanero Ed. Mc Graw Hill Coleccin de manuales electrnicos Siemens Comunicaciones (S7-300_IHBx_s.pdf)
Manual Prodave (Manual.pdf) Catlogo de automatizacin ST70 (st7001_s.pdf) Esquema de contactos (KOP) para S7-300 y S7-400 (s7kop_d.pdf)

Pgina 130 de 130

Você também pode gostar