Diseño de un control distribuido para una...

236
- 1 - Diseño de un control distribuido para una planta. TITULACIÓN: Ingeniería Técnica en Telecomunicaciones Especialidad en Telemática AUTOR: Oscar López Risquez DIRECTOR: Ramón Villarino Villarino FECHA: Mayo del 2011

Transcript of Diseño de un control distribuido para una...

Page 1: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

- 1 -

Diseño de un control distribuido para una planta.

TITULACIÓN: Ingeniería Técnica en Telecomunicaciones Especialidad en Telemática

AUTOR: Oscar López Risquez

DIRECTOR: Ramón Villarino Villarino FECHA: Mayo del 2011

Page 2: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Índice

2

1. Índice 1 Índice 2 2 Estudio Situación Actual en la Industria. 5 2.1 Introducción 5 2.2. Evolución de la automatización industrial. 5 2.2.1. Estructuras generales de los sistemas de control industriales. 7 2.2.2. Control Centralizado. 8 2.2.3. Control Centralizado Multicapa. 8 2.2.3.1. Prestaciones. 9 2.2.3.2. Requisitos. 9 2.2.3.3. Módulos de un SCADA. 10 2.2.4. Control Distribuido. 10 2.3. Características específicas de las redes locales Industriales. 12 2.3.1. Características. 12 2.3.1.1. Entorno de funcionamiento hostil. 12 2.3.1.2. Restricciones Temporales. 12 2.3.1.3. Arquitecturas Adecuadas. 12 2.3.2. Jerarquía entre los niveles de comunicación. 12 2.3.2.1. Red de Factoría. 17 2.3.2.2. Red de Planta. 17 2.3.2.3. Red de Célula. 17 2.3.2.4. Bus de Campo (field bus). 18 2.4. Ejemplos de estudio. 22 2.4.1. Redes Map y Top. 22 2.4.1.1. Características de las redes MAP destacables. 24 2.4.2. Redes MINIMAP. 24 2.4.3. Ethernet Industrial. 26 2.4.4. PROFIBUS. 29 2.4.4.1. Estructura. 30 2.4.4.2.. Configuración física de Bus. 31 2.4.4.3. Versiones Compatibles. 32 2.4.4.4.. Estructura de la red. 35 2.4.4.5. Tecnología de transmisión. 37 2.4.5.. AS-I AKTUATOR SENSOR INTERFACE. 39 2.4.6.. INTERBUS. 41 2.4.7. CAN: CONTROLLER AREA NETWORKING. 44 2.4.8.. Comparación de los casos estudiados. 47 3. Estudio y desarrollo de un control distribuido para una planta. 48 3.1. Introducción. 48 3.2.. Estación de trabajo. 50 3.2.1. Software. 50 3.2.2. Funcionamiento. 51 3.2.2.1. Pantalla Inicio. 51

Page 3: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Índice

3

3.2.2.2. Pantalla Reacción. 53 3.3. Puerto Paralelo. 71 3.3.1. Introducción 71 3.3.1.1. Características físicas del puerto paralelo. 72 3.3.1.2. Registros del puerto paralelo (SPP). 74 3.4. Circuito Interface (Bus paralelo). 77 3.4.1. Introducción. 77 3.4.2. Descripción. 78 3.5. Circuito Estación Remota. 83 3.5.1. Introducción. 83 3.5.2. Descripción. 84 3.6. Circuito Contador. 87 3.6.1. Introducción. 87 3.6.2. Descripción. 87 3.7. PLC. 90 3.7.1. Definición de PLC. 90 3.7.2. Introducción. 91 3.7.3. Software. 91 3.7.3.1. Pantalla principal. 92 3.7.3.2. Pantalla Datos. 94 4. Conclusiones y líneas futuras. 99 4.1. Conclusiones. 99 4.2. Líneas futuras. 100 5. Bibliografía 101 5.1. Software Empleado 101 6. Links Datasheets. 102 ÍNDICE ANEXOS 103 7. Anexo1: Rutinas Programadas. 104 7.1. Pantallas Estación de Trabajo. 104 7.1.1. Código Página Inicio: 104 7.1.2. Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112 7.1.4. Código Pantalla Válvula amoníaco. 114 7.1.5. Código Pantalla Inicio. 116 7.1.6. Código Pantalla Entrada Manual. 119 7.1.7. Código Pantalla Gráficas. 124 7.1.8. Código Pantalla Entradas/Salidas. 132 7.1.9. Código Pantalla Máximos y Mínimos. 148 7.1.10. Código Pantalla NAcceso. 150 7.1.11. Código Pantalla NPASSWORD. 151 7.1.12. Código Pantalla PPRINAPOYO. 152 7.1.13. Código Pantalla Principal. 155 7.1.14. Código Pantalla REFRIG. 200 7.1.15. Código Pantalla RegAlarm. 203

Page 4: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Índice

4

7.2. Código PLC. 203 7.2.1. Código Pantalla Principal. 203 7.2.2. Código Pantalla Datos. 215 8. Anexo2: Planos 228 8.1. Planos Circuito Interface. 228 8.1.1. Esquema Eléctrico. 228 8.1.2. Fotolito Circuito Interface. 229 8.1.3. Esquema Componentes. 229 8.2. Planos Estación Remota. 231 8.2.1. Esquema eléctrico. 231 8.2.2. Fotolito Circuito Estación Remota. 232 8.2.3. Esquema componentes. 233 8.3. Planos Circuito Contador. 234 8.3.1. Esquema eléctrico. 234 8.3.2. Fotolito Circuito Contador. 235 8.3.3. Esquema Componentes. 236

Page 5: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

- 5 -

2. Estudio Situación Actual en la Industria.

2.1. Introducción. El desarrollo del control distribuido en la industria va paralelo al de las comunicaciones. Cada vez es más necesario disponer de dispositivos inteligentes para realizar el control o la supervisión remota, tanto de procesos de fabricación, como de almacenamiento o distribución. Los sistemas o redes de comunicación empleados en entornos industriales se encuentran sometidos a una problemática específica que condiciona enormemente su diseño y los diferencia de las redes de datos o redes de oficina. El desarrollo de los microprocesadores, microcontroladores y los controladores lógicos programables (PLCs) dio lugar a la aparición del control distribuido. En este tipo de esquema, un PLC o un microprocesador controla una o más variables del sistema realizando un control directo de las mismas. Estos equipos de control local se comunican con otros elementos de su nivel y con el nivel superior de supervisión.

2.2. Evolución de la automatización industrial.

Los conceptos de automatización tienen sus orígenes con la revolución industrial. Los elementos mediante los cuales se llevaban a cabo las decisiones de control eran elementos mecánicos y electromagnéticos con el advenimiento de la electricidad (motores, relés, temporizadores, contadores). Esto tenía el problema que los tableros de control (armarios eléctricos) llegan a tomar grandes tamaños según se hacían automatizaciones más complejas. En los años 50 con la aparición de la electrónica comienzan a utilizarse los semiconductores con lo que se reduce el tamaño de los armarios eléctricos y se reduce el número de averías por desgaste de componentes. Aunque esto resultaba mucho más amigable que los grandes tableros eléctricos del principio presentaba un problema de falta de flexibilidad: ya que un sistema de control sólo sirve para una aplicación específica, y no es reutilizable. Debido a esto y a la creciente demanda industrial del momento en el año 1968 Ford y General Motors plantean las especificaciones que debe cumplir un controlador electrónico programable para ser realmente útil en la industria. Es así que Bedford associates desarrolla un prototipo de controlador industrial, que puede ser considerado el primer PLC de la historia (programmable logic controller o autómata programable industrial). Este presentaba las características que reclamaba la industria: • Reutilizable. • Adaptado a entornos agresivos (industria) • Fácilmente programable por técnicos eléctricos. • Implementado con electrónica de estado sólido (semiconductores) Los primeros PLCs se usaron para controlar procesos secuenciales (cadenas de montaje, transporte, etc.). El problema que presentaba era que su memoria era cableada, por lo que la reutilización es posible pero costosa. Se empezaron implementar memorias con semiconductores eliminando las memorias cableadas mayor flexibilidad por la facilidad de programación. Pero por entonces todavía la tecnología de los microprocesadores no era

Page 6: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

6

utilizable en la industria por falta de robustez, dificultad de conexión a equipos mecánicos y dificultad de programación.

A mediados de los 70 los autómatas incorporan el microprocesador y las memorias semiconductoras lo que permiten programar sin recablear (aumenta flexibilidad). Además permiten realizar cálculos matemáticos y comunicar con un ordenador central (ordenador encargado de controlar la planta enviando órdenes a los autómatas que gobiernan cada proceso). Junto a esto aparecen los primeros DCS (sistemas de control distribuido) que eran controladores lógicos al igual que los PLC's solo que estos en el principio dominaban el reino del control de variables analógicas. De esta manera sistemas DCS trabajaban a la par de sistemas separados de PLC para control discreto de variables on/off.

Hacia los finales de los 70 aparecen mejoras en los autómatas dándole a estos:

• Mayor memoria. • Capacidad de gobernar bucles de control. • Más tipos de E/S (conexión más flexible de sensores/actuadores). • Lenguajes de programación más potentes. • Comunicaciones más potentes. En los años 80 se continúa con las mejoras siendo

algunas de estas: • Mayor velocidad de proceso. • Dimensiones más reducidas. • Técnicas de control más complejas (PID, inteligente, fuzzy). • Múltiples lenguajes (contactos, lista instrucciones, GRAFCET, etc.).

En los años "90 cuando los sistemas de control basado en PC hicieron su aparición en la escena de la automatización industrial, los partidarios de estos sistemas más poderosos y abiertos afirmaban que dichos sistemas podrían llegar a suplantar a los controladores lógicos programables (PLC's) y hasta los sistemas de control distribuidos (DCS's) en numerosas aplicaciones. El PC tenía mucho que ofrecer, pero no suplantaría las plataformas ya probadas de control industrial, no por lo menos en la forma de un PC de escritorio. El PC era la mejor opción a la hora de integrar funcionalidad avanzada, como puede ser conectividad de base de datos, integración, control analógico y simulación basados en Web y comunicación de datos con terceros. El problema con el control basado en PC ha sido siempre este. Los PC's que corren en sistemas operativos estándares con hardware común resultan demasiado frágiles y temperamentales como para brindar un control industrial confiable.

El resultado de todas estas innovaciones fue la aparición de controladores híbridos que permiten manejo de variables analógicas y digitales, en conjunto con características como procesador de punto flotante para cálculos personales, servidor Web interactivo embebido que facilita las tareas de control y monitoreo, flash compacto removible para la recolección y registro de datos, puertos seriales múltiples y conexionado mediante buses de campo para la comunicación con terceros.

Page 7: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

7

En la actualidad tenemos disponibles gran variedad de autómatas híbridos compactos, sencillos y modulares para aplicaciones incluso domésticas. Presentan grandes posibilidades de ampliación. Y con una tendencia hacia una evolución continua de los sistemas de comunicación, constituyendo redes de autómatas que permitan implementaciones más complejas y seguras. Las nuevas características de los sistemas de automatización apuntan a incorporar características de los sistemas distribuidos como:

• Escalabilidad • Apertura • Concurrencia • Tolerancia a fallas • Transparencia

2.2.1. Estructuras generales de los sistemas de control industriales. La Ilustración I muestra en forma esquemática la estructura de Control implementadas normalmente en la industria.

Ilustración 1 Estructura de Control.

En la misma pueden verse dos áreas bien definidas: Una la parte operativa y otra la parte de control. En la parte operativa tenemos los dispositivos de hardware y software que brindan la información necesaria para llevar a cabo las operaciones de planta necesarias, con una interfaz amigable y entendible para el operador.

En la parte de control encontramos a los dispositivos de control (PLC's, DCP'S y PC’s industriales) que permiten llevar a cabo las acciones de control en conjunto con los actuadores. Entre todos estos dispositivos hay comunicación vertical (desde la parte de control hacia la operativa y viceversa) y comunicaciones horizontales (entre distintos dispositivos de control).

Las dos arquitecturas más conocidas de control industrial, aunque cabe aclarar que no son las únicas y muchas soluciones de automatizaciones son una mezcla de estas que se adapta a las necesidades específicas de cada situación.

Page 8: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

8

2.2.2. Control Centralizado. En la Ilustración 2 puede verse la estructura general del control centralizado.

Ilustración 2 Estructura general del control centralizado

Está constituido por un computador, un interfaz de proceso y una estación de trabajo (interfaz de operación).

La principal ventaja es que su arquitectura facilita el flujo de información y se hace posible que los objetivos de optimización global del proceso puedan ser alcanzados, pero tiene la desventaja que depende de la habilidad del computador. Para solucionar esto se aplica redundancia de servicios críticos.

Una variante del control centralizado puede verse en la figura siguiente y quizás la más aplicable, por la probada robustez de los controladores industriales.

2.2.3. Control Centralizado Multicapa. A partir de esta arquitectura de control aparece el concepto de SCADA que viene de las siglas de Supervisor Control And Data Adquisition, es decir: adquisición de datos y control de supervisión.

Ilustración 3 Esquema Arquitectura SCADA

Se trata de una aplicación software especialmente diseñada para funcionar sobre ordenadores en el control de producción, proporcionando comunicación con los dispositivos de campo (controladores autónomos, autómatas programables, etc.) y controlando el proceso de forma automática desde la pantalla del ordenador. Además, provee de toda la información 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, supervisión, mantenimiento, etc.

Page 9: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

9

En este tipo de sistemas usualmente existe un ordenador, que efectúa tareas de supervisión y gestión de alarmas, así como tratamiento de datos y control de procesos. La comunicación se realiza mediante redes LAN o buses especiales, los cuales serán abordados más adelante para su estudio específico. Todo esto se ejecuta normalmente en tiempo real, y están diseñados para dar al operador de planta la posibilidad de supervisar y controlar dichos procesos. Los elementos de proceso del sistema de control pueden utilizar una implementación estándar en tiempo real de CORBA (Common Object Request Broker Architecture) para la comunicación entre objetos a través de redes. Además, la especificación de interfaces será muy importante para el mantenimiento y conservación de la inversión teniendo en cuenta los rápidos cambios tecnológicos. Por ello serán usados estándares abiertos como RT POSIX o ATM, y también CORBA.

Los programas necesarios, y en su caso el hardware adicional que se necesite, se denomina en general sistema SCADA.

2.2.3.1. Prestaciones: Un paquete SCADA debe estar en disposición de ofrecer las siguientes prestaciones:

• Posibilidad de crear paneles de alarmas, que exigen la presencia del operador para reconocer una parada o situación de alarma, con registro de incidencias.

• Generación de históricos de señal de planta, que pueden ser volcados para su proceso sobre una hoja de cálculo.

• Ejecución de programas, que modifican la ley de control, o incluso anular o modificar las tareas asociadas al autómata, bajo ciertas condiciones.

• Posibilidad de programación numérica, que permite realizar cálculos aritméticos de elevada resolución sobre la CPU del ordenador.

Con ellas, se pueden desarrollar aplicaciones para ordenadores (tipo PC, por ejemplo), con captura de datos, análisis de señales, presentaciones en pantalla, envió de resultados a disco e impresora, etc.

Además, todas estas acciones se llevan a cabo mediante un paquete de funciones que incluye zonas de programación en un lenguaje de uso general (como C, Pascal, o Basic), lo cual confiere una potencia muy elevada y una gran versatilidad. Algunos SCADA ofrecen librerías de funciones para lenguajes de uso general que permiten personalizar de manera muy amplia la aplicación que desee realizarse con dicho SCADA.

2.2.3.2. Requisitos: Un SCADA debe cumplir varios objetivos para que su instalación sea perfectamente aprovechada:

• Deben ser sistemas de arquitectura abierta, capaces de crecer o adaptarse según las necesidades cambiantes de la empresa.

Page 10: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

10

• Deben comunicarse con total facilidad y de forma transparente al usuario con el equipo de planta y con el resto de la empresa (redes locales y de gestión). • Deben ser programas sencillos de instalar, sin excesivas exigencias de hardware, y fáciles de utilizar, con interfaces amigables con el usuario.

2.2.3.3. Módulos de un SCADA: Los módulos o bloques software que permiten las actividades de adquisición, supervisión y control son los siguientes:

• Configuración: permite al usuario definir el entorno de trabajo de su SCADA. adaptándolo a la aplicación particular que se desea desarrollar.

• Interfaz gráfico del operador: proporciona al operador las funciones de control y supervisión de la planta. El proceso se representa mediante sinópticos gráficos almacenados en el ordenador de proceso y generados desde el editor incorporado en el SCADA o importados desde otra aplicación durante la configuración del paquete.

• Módulo de proceso: ejecuta las acciones de mando preprogramadas a partir de los valores actuales de variables leídas.

• Gestión y archivo de datos: se encarga del almacenamiento y procesado ordenado de los datos, de forma que otra aplicación o dispositivo pueda tener acceso a ellos.

• Comunicaciones: se encarga de la transferencia de información entre la planta y la arquitectura hardware que soporta el SCADA, y entre ésta y el resto de elementos informáticos de gestión.

2.2.4. Control Distribuido.

La figura muestra un esquema de control distribuido, donde puede observarse es que es muy similar al control centralizado multicapa solo que aquí se comunicación entre cada Controlador de proceso.

Ilustración 4 Estructura Control Distribuido.

Existencia de varias unidades de control que llevan a cabo las tareas. En caso de avería o sobrecarga de trabajo, será posible transferir todo o parte de las tareas a otras unidades.

Page 11: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

11

La idea de poder hacer bypass a las unidades con problemas permite evitar los bloqueos necesarios del sistema, (paradas de planta) pero por otra parte exige que los diferentes controladores tengan una asignación dinámica de las tareas y por tanto se les va a exigir gran capacidad de acceso a la comunicación y de tratamiento de la información.

La desventaja de esto es la disminución de la velocidad de comunicación debido a los retardos, posibles desbordamientos en el procesamiento de datos en cada nivel y falta de flujo de información directa entre controladores. Pero esto está siendo solucionado por la aparición de nuevas tecnología de comunicación de datos cada vez más potentes

Aquí vemos que también tenemos una unidad de control y supervisión (SCADA) que cumple con las características antes mencionadas para el control centralizado multicapa.

A continuación se muestra una tabla comparativa sobre los aspectos principales de las dos arquitecturas antes mencionadas.

TIPO DE ARQUITECTURA

CENTRALIZADA DISTRIBUIDA

TIPO DE CONTROL PREDOMINANTE

SUPERVISORIO: Lazos de control cerrados por el operador. Adicional mente: control secuencia] y regulatorio.

RLGt." LATO RIO: Lazos de control cerrados automáticamente por elsistema. Adicionalmente: control secuencia, batch, algoritmos avanzados, etc.

TIPOS DE VARIABLES DESACOPLADAS ACOPLADAS

ÁREA DE ACCIÓN Arcas geográficamente distribuidas. Arca de la planta.

UNIDADES DE ADQUISICIÓN DE DATOS Y CONTROL

Remotas, PLC's. Controladores de lazo, PLC's, DCS's

MEDIOS DE COMUNICACIÓN

Radio, satélite, líneas telefónicas, conexión directa. I.AN. WAN.

Redes de área local, conexióndirecta.

BASE DE DATOS CENTRALIZADA DISTRIBUIDA

A partir de lo expuesto hasta aquí se puede observar que la comunicación entre controladores es un aspecto fundamental para el funcionamiento de un sistema de control distribuido. A continuación se detallaran las características que deben tener estas redes de controladores para operar en el ambiente de planta.

Page 12: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

12

2.3. Características específicas de las redes locales Industriales.

2.3.1. Características:

2.3.1.1. Entorno de funcionamiento hostil. Las redes industriales deben ser lo suficientemente robustas como para soportar golpes, atmósfera agresiva, radiaciones electromagnéticas, ruido eléctrico y otras perturbaciones típicas de la operación en planta.

2.3.1.2. Restricciones Temporales. Las redes que comunican elementos de control con requisitos como tiempo máximo de entrega de mensajes, esquemas de prioridades e índices elevados de disponibilidad.

2.3.1.3. Arquitecturas Adecuadas. Deben ser arquitecturas abiertas que permitan la interconexión de elementos de distintos proveedores sin problemas.

2.3.2. Jerarquía entre los niveles de comunicación: Clasificación jerárquica de las redes locales industriales.

Ilustración 5 Pirámide Jerárquica.

Según el entorno donde van a ser instaladas, el gráfico de la ilustración 5 muestra un esquema de esto. En el esquema piramidal presentado, existen diferentes niveles de comunicación, cada uno de ellos con diferentes necesidades.

Se puede hablar en realidad de dos tipos de redes: redes de control y redes de datos.

Las redes de control están ligadas a la parte baja de la pirámide, mientras que las redes de datos (o de oficina) están más ligadas a las partes altas de la jerarquía.

Page 13: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

13

En general, las redes de datos están orientadas al transporte de grandes paquetes de datos, que aparecen de forma esporádica (baja carga), y con un gran ancho de banda para permitir el envío rápido de una gran cantidad de datos. En contraste, las redes de control se enfrentan a un tráfico formado por un gran número de pequeños paquetes.

En principio, las redes de datos convencionales podrían emplearse para su uso como redes de control, sin embargo, es evidente que no resultan adecuadas para las necesidades de este tipo de aplicaciones. Por ejemplo, es sabido que la red Ethernet tiene una gran eficiencia, hasta el 90-95% de la capacidad del canal cuando los mensajes son largos y suficientemente espaciados. Sin embargo, la cantidad de información que una red Ethernet es capaz de transportar cae bruscamente cuando se utiliza por encima del 35% de la capacidad del canal, si el tamaño de los mensajes es pequeño, como puede verse en la figura 6. En las redes de control es habitual encontrar este tipo de carga, porque el tráfico de la red depende directamente de eventos estemos que están siendo controlados (o monitorizados) por los diferentes nodos que la componen. A menudo, varios nodos necesitan enviar información simultáneamente en función de uno o más eventos estemos. Este hecho, junto con el gran número de nodos que suelen estar presentes, implica la existencia de frecuentes periodos en los que muchas estaciones envían pequeños paquetes de información.

Ilustración 6 Comparación de la Red Ethernet ante variaciones del tamaño de los paquetes.

Por todas estas razones, es necesario diseñar una arquitectura de red acorde a las características particulares de este tipo de tráfico. En el diseño se deberán tener en cuenta aspectos como los tipos de protocolos utilizados, la interoperabilidad, la topología y la facilidad de administración. Deben usarse protocolos abiertos, disponibles por toda la

Page 14: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

14

comunidad de fabricantes y usuarios. Este aspecto es básico para conseguir que equipos de diferentes fabricantes puedan trabajar en conjunto en una misma red. También juega un papel fundamental determinar el tipo de información que viajará por la red. En las redes de oficina, esta información consiste básicamente en datos de usuario y en algunas ocasiones información para la administración y el mantenimiento de la propia red.

En una red de control, esta elección es menos clara ya que el correcto funcionamiento de la red es vital.

Pueden distinguirse dos tipos de redes según la información que transporten: redes basadas en comandos y redes basadas en estado. En las redes basadas en comandos, la información consiste en una orden con la que un nodo controla el funcionamiento de otro. El principal problema radica en que si se dispone de un amplio conjunto de tipos de nodos, habrá un aumento exponencial del número de posibles comandos y de la sobrecarga que supone su procesamiento.

Ilustración 7 Comparación entre redes de Datos y redes de Control

En las redes orientadas a estado las cosas son más sencillas. En este caso, la funcionalidad de un nodo no depende de ningún otro. Cada nodo enviará mensajes en los que indicará a los demás el estado en que se encuentra. Los nodos que reciban estos mensajes modificarán su estado en función de la nueva información. Existen implementaciones que combinan ambos métodos.

Page 15: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

15

Por lo que se refiere al tipo de topología que deben adoptar las redes de control, cabe destacar que cualquiera de las topologías clásicas de las redes de datos es válida. Cada una de ellas con sus propias ventajas y limitaciones. Cualquiera puede satisfacer las necesidades de cableado, prestaciones y coste de algún tipo de aplicación. La elección está determinada fundamentalmente por el control de acceso al medio y el tipo de medio que se emplea. El conjunto formado por el medio, el control de acceso y la topología, afecta prácticamente a cualquier otro aspecto de la red de control: coste, facilidad de instalación. Habilidad, prestaciones, facilidad de mantenimiento y expansión.

La selección de la topología suele hacerse basándose en los requisitos específicos de cada sistema en cuanto a coste de instalación y tolerancia a fallos. Muchas redes de control permiten el uso de distintas topologías.

El control de acceso al medio es vital. Elegida una topología, hay que definir como accederá cada nodo a la red. El objetivo es reducir las colisiones (idealmente eliminarlas) entre los paquetes de datos y reducir el tiempo que tarda un nodo en ganar el acceso al medio y comenzar a transmitir el paquete. En otras palabras, maximizar la eficiencia de la red y reducir el retardo de acceso al medio. Este último parámetro es el factor principal a la hora de determinar si una red sirve para aplicaciones en tiempo real o no.

El direccionamiento de los nodos es otro de los aspectos claves. En una red de control, la información puede ser originada y/o recibida por cualquier nodo. La forma en que las direcciones los paquetes de información afectarán de forma importante a la eficiencia y la viabilidad global de la red. Se pueden distinguir tres tipos de direccionamiento:

a. Unicast: El paquete es enviado a un único nodo destino. b. Multicast: El paquete es enviado a un grupo de nodos simultáneamente. c. Broadcast: El paquete es enviado a todos los nodos de la red simultáneamente. El direccionamiento broadcast presenta la ventaja de su sencillez. Es adecuado para redes basadas en información de estado. Cada nodo informa a todos los demás de cuál es estado actual. El principal inconveniente es que los nodos pueden tener que procesar paquetes que no les afecten directamente. Los esquemas de direccionamiento unicast y multicast son más eficientes, y facilitan operaciones como el acuse de recibo y el reenvió, características que aumentan la Habilidad del sistema. En redes de control, es muy habitual encontrar esquemas de direccionamiento del tipo maestro-esclavo. Este tipo de esquemas permite plasmar ciertos aspectos jerárquicos del control de forma sencilla- a la vez que simplifica el funcionamiento de la red y por tanto abarata los costes de la interfaz física. La elección del medio físico afecta a aspectos tales como la velocidad de transmisión, distancia entre nodos y fiabilidad. En muchas redes de control se recurre a una mezcla de distintos medios físicos para cumplir con los requisitos de diferentes secciones al menor coste posible. Se incorporarán los routers, puentes o repetidores necesarios para asegurar el objetivo de una comunicación extremo a extremo transparente, al menor coste posible, y sin que la integración conlleve una disminución de las prestaciones. El control en tiempo real demanda de las redes de control buenos tiempos de respuesta (baja latencia). Por ejemplo, el retardo entre la detección de un objeto en una línea de montaje de alta velocidad y el arranque de una máquina de pintado puede ser del orden de decenas de milisegundos. En general, las redes de datos no necesitan una respuesta en

Page 16: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

16

tiempo real cuando envían grandes conjuntos de datos a través de la red. El control de acceso al medio y el número de capas implementadas en la arquitectura de red resultan determinantes a la hora de fijar la velocidad de respuesta de la red. La implementación de las siete capas del modelo OSI implica una mayor potencia de proceso por la sobrecarga que conlleva con respecto a un sistema más sencillo que por ejemplo sólo implementase las dos primeras capas. En ocasiones, los beneficios que aportan las capas adicionales compensan la sobrecarga adicional (que implica un mayor costo), sobre todo a medida que aumenta la funcionalidad demandada de la red y mejora la tecnología disponible. Cuando la velocidad es el factor esencial, como ocurre con muchos buses de campo, el modelo puede aligerarse ya que en la mayor parte de este tipo de aplicaciones las capas de red, transporte, sesión y presentación no son necesarias, como muestra el esquema de la ilustración 8.

Ilustración 8: Capas de modelo OSI/ISO y su relación con las redes de control.

Otra forma de favorecer un tiempo de respuesta pequeño es la capacidad para establecer mensajes con diferentes prioridades, de forma que mensajes de alta prioridad (como por ejemplo una alarma) tengan más facilidad para acceder al medio.

Por último, hay que destacar el papel que juega la seguridad de la red. Podemos destacar dos niveles diferentes de seguridad. Por una parte la protección frente a accesos no autorizados a la red, y por otra parte la protección frente a fallos del sistema y averías.

El primer problema es el menos grave, ya que la mayor parte de las redes de control no están conectadas a redes externas a la fábrica. Además, en la práctica, la mayor parte de las veces, las redes pertenecientes a los escalones más bajos de la pirámide no están conectados siquiera con las redes de nivel superior dentro de la propia fábrica. En cualquier caso, los mecanismos de protección son similares a los empleados en las redes de datos: claves de usuario y autentificación de los nodos de la red.

La protección frente a fallos juega un papel mucho más importante, debido a que se debe evitar a toda costa, que este hecho afecte negativamente a la planta. Por ejemplo, los

Page 17: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

17

sistemas de refrigeración de una central nuclear no pueden bloquearse porque la interfaz de comunicaciones de un nodo de la red se averíe. Para ello es fundamental que los nodos puedan detectar si la red está funcionando correctamente o no, y en caso de avería puedan pasar a un algoritmo de control que mantenga la planta en un punto seguro. Si el sistema es crítico, se deben incluir equipos redundantes, que reemplacen al averiado de forma automática en caso de avería. La monitorización de la red y la capacidad de diagnóstico representan por tanto dos puntos básicos de cualquier red de control.

La necesidad de buenas herramientas de mantenimiento y administración de la red son vitales. No sólo por lo dicho anteriormente sino que también porque en las redes de control las operaciones de reconfiguración y actualización de la red son frecuentes.

2.3.2.1. Red de Factoría: La constituyen redes de oficina que comunican departamentos contabilidad- administración, ventas, gestión de pedidos, almacén. Red de Planta. Generalmente están basadas en tecnología Ethernet y conectadas a Internet a través de un firewall para proteger la red interna de un ataque exterior. Brindan Servicios de comunicación como transferencia de ficheros y proceso de transacciones teniendo un gran volumen de información intercambiada y los tiempos de respuesta no son tan críticos.

2.3.2.2. Red de Planta. La función de esta capa es interconectar módulos y células de fabricación entre sí, y con departamentos como diseño o planificación. La información vinculada de esta capa es administrada y controlada por aplicaciones SCADA, ya sea en forma centralizada o distribuida según la arquitectura implementada. En estas redes el tráfico de datos es muy variable desde mensajes cortos de órdenes de ejecución hasta mensajes interactivos de terminales de operarios. Al protocolo usado en estas redes se lo denomina MAP (Manufacturing Automation Protocol). En la práctica se emplean soluciones clásicas Ethernet o Token Ring, con características especiales ya presentan menor costo y más experiencia en su implantación frente a soluciones a medida.

I. Requisitos de estas redes: • Manejar mensajes de cualquier tamaño. • Gestión de errores de transmisión eficaces (detectar y corregir). • Cubrir áreas extensas (puede llegar a varios kilómetros). • Poder gestionar mensajes con prioridades. • Amplio ancho de banda disponible

2.3.2.3. Red de Célula:

Interconectar dispositivos de control que operan en modo secuencial como por ejemplo PLC’s.

Page 18: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

18

I. Características deseables de estas redes: • Gestionar mensajes cortos eficientemente. • Capacidad de manejar tráfico de eventos discretos. • Mecanismos de control de error (El protocolo de comunicaciones debe detectar y

corregir errores). • Posibilidad de transmitir mensaje prioritario. • Bajo coste de instalación y de conexión por nodo. • Recuperación rápida ante eventos anormales en la red. • Alta disponibilidad (el tiempo medio entre fallos mayores que 100.000 horas, para

poder mejorar la disponibilidad se implementa redundancia de servicios críticos). En la práctica son redes son de Tamaño pequeño (5 a 50 dispositivos.) trabajando con Redes propietarias que resultan generalmente difíciles de ampliar a un cuando se dispone de dispositivos de control de proveedores distintos. Se emplean protocolos asíncronos (orientados al carácter) si los paquetes transferidos son del orden de Kbps o síncrono si son de mayor tamaño (Mbps). Con un tráfico de mensajes cortos para control y sincronización entre los dispositivos y ocasional transferencia de archivos. Sí bien falta de una norma de aceptación general para estas redes se las suelen encuadrar en las siguientes categorías:

II. Categorías: • Redes de autómatas (generalmente dependen del fabricante): por ejemplo Jnct.

Jbus, Modbus, Uni-Telway. • Redes locales heterogéneas: LAC-1, LAC-2. • Redes normalizadas: Mini-MAP que resulta de una simplificación de MAP para

poder utilizar en entornos de tiempo real, en donde, el nivel de aplicación acceda directamente al nivel de enlace del modelo OSI y PROWAY (Process Data Highway) que consiste en una topología en bus y mecanismo de acceso por paso de testigo, cuyos aspectos funcionales están orientados a su aplicación en control de procesos.

• Redes de propósito general: Ethernet. Los controladores actuales disponen de dispositivos configurables de manera que puedan comunicarse en alguna o varias de las categorías antes mencionadas. También existen dispositivos que permiten pasar de un protocolo a otro sin problemas, son como los Gateway de las redes de computadoras convencionales. (En la sección 5 se abarcaran ejemplos concretos de estas redes).

2.3.2.4. Bus de Campo (field bus): Un bus de campo es un término genérico que describe un conjunto de redes de comunicación para uso industrial, cuyo objetivo es sustituir las conexiones punto a punto entre los elementos de campo y el equipo de control a través del tradicional bucle de corriente de 4-20mA. Típicamente son redes digitales, bidireccionales, multipunto, montadas sobre un bus serie, que conectan dispositivos de campo como PLC’s, transductores, actuadores y sensores. Cada dispositivo de campo incorpora cierta capacidad de proceso, que lo convierte en un dispositivo inteligente, manteniendo siempre un costo

Page 19: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

19

bajo. Cada uno de estos elementos será capaz de ejecutar funciones simples de autodiagnóstico, control o mantenimiento, así como de comunicarse bidireccionalmente a través del bus. El objetivo es reemplazar los sistemas de control centralizados por redes para control distribuido con las que mejorar la calidad del producto, reducir costes y mejorar la eficiencia. Para ello se basa en que la información que envían y/o reciben los dispositivos de campo es digital, lo que resulta mucho más preciso que si se recurre a métodos analógicos. Además, cada dispositivo de campo es un dispositivo inteligente y puede llevar a cabo funciones propias de control, mantenimiento y diagnóstico. De esta forma, cada nodo de la red puede informar en caso de fallo del dispositivo asociado, y en general sobre cualquier anomalía asociada al dispositivo. Esta monitorización permite aumentar la eficiencia del sistema y reducir la cantidad de horas de mantenimiento necesarias. La principal ventaja que ofrecen los buses de campo, y la que los hace más atractivos a los usuarios finales, es la reducción de costes. El ahorro proviene fundamentalmente de tres fuentes: ahorro en coste de instalación, ahorro en el coste de mantenimiento y ahorros derivados de la mejora del funcionamiento del sistema. Una de las principales características de los buses de campo es una significativa reducción en el cableado necesario para el control de una instalación. Cada célula de proceso sólo requiere un cable para la conexión de los diversos nodos. Se estima que puede ofrecer una reducción de 5 a 1 en los costes de cableado. En comparación con otros tipos de redes, dispone de herramientas de administración del bus que permiten la reducción del número de horas necesarias para la instalación y puesta en marcha. El hecho de que los buses de campo sean más sencillos que otras redes de uso industrial como por ejemplo MAP, hace que las necesidades de mantenimiento de la red sean menores, de modo que la confiabilidad del sistema a largo plazo aumenta. Además, los buses de campo permiten a los operadores monitorizar todos los dispositivos que integran el sistema e interpretar fácilmente las interacciones entre ellos. De esta forma, la detección de las fuentes de problemas en la planta y su corrección resulta mucho más sencilla, reduciendo los costes de mantenimiento y el tiempo de parada de la planta. Los buses de campo ofrecen mayor flexibilidad al usuario en el diseño del sistema. Algunos algoritmos y procedimientos de control que con sistemas de comunicación tradicionales debían incluirse en los propios algoritmos de control, radican ahora en los propios dispositivos de campo, simplificando el sistema de control y sus posibles ampliaciones. También hay que tener en cuenta que las prestaciones del sistema mejoran con el uso de la tecnología de los buses de campo debido a la simplificación en la forma de obtener información de la planta desde los distintos sensores. Las mediciones de los distintos elementos de la red están disponibles para todos los demás dispositivos. La simplificación en la obtención de datos permitirá el diseño de sistemas de control más eficientes. Con la tecnología de los buses de campo, se permite la comunicación bidireccional entre los dispositivos de campo y los sistemas de control, pero también entre los propios dispositivos de campo. Otra ventaja de los buses de campo es que sólo incluyen 4 capas (Física. Enlace. Aplicación y Usuario), y un conjunto de servicios de administración. El usuario no tiene que preocuparse de las capas de enlace o de aplicación. Sólo necesita saber cual es funcionalidad. Al usuario sólo se le exige tener un conocimiento mínimo de los servicios de administración de la red, ya que parte de la

Page 20: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

20

información generada por dichos servicios puede ser necesaria para la reparación de averías en el sistema. De hecho, prácticamente, el usuario sólo debe preocuparse de la capa física y la capa de usuario.

I. Comunicación en el Bus: Los métodos utilizados en los buses de campo para actualizar los datos de proceso o entrada/salida son:

a. Strohe: Petición de información por parte del maestro (dispositivo de control) y envío desde los dispositivos esclavos (sensores - actuadores). Este método es muy eficiente para sensores.

b. Polling: El maestro envía información de salida al dispositivo y éste le responde con la información de entradas.

c. Cambio de estado: El dispositivo no transmite información hasta que se modifica el estado de las variables. Muy eficiente en sistemas discretos.

d. Cíclico: El dispositivo envía la información a la red en un intervalo de tiempo prefijado. Además el bus de campo debe incorporar los servicios de comunicación necesarios para los procesos de configuración, programación y test del bus.

II. Buses de Campo existentes: Debido a la falta de estándares, diferentes empresas han desarrollado diferentes soluciones, cada una de ellas con diferentes prestaciones y campos de aplicación. En una primera clasificación podríamos dividirlos en los siguientes grupos:

i. Buses de alta velocidad y baja funcionalidad.

Diseñados para integrar dispositivos simples como finales de carrera, fotocélulas, relés y actuadores simples, funcionando en aplicaciones de tiempo real, y agrupados en una pequeña zona de la planta, típicamente una máquina. Suelen especificar las capas física y de enlace del modelo OS1, es decir, señales físicas y patrones de bits de las tramas. Algunos ejemplos son:

• CAN: Diseñado originalmente para su aplicación en vehículos. • SDS: Bus para la integración de sensores y actuadores, basado en CAN • ASI: Bus serie diseñado por Siemens para la integración de sensores y actuadores.

Page 21: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

21

ii. Buses de alta velocidad y funcionalidad media Se basan en el diseño de una capa de enlace para el envío eficiente de bloques de datos de tamaño medio. Estos mensajes permiten que el dispositivo tenga mayor funcionalidad de modo que permite incluir aspectos como la configuración, calibración o programación del dispositivo. Son buses capaces de controlar dispositivos de campo complejos, de forma eficiente y a bajo coste. Normalmente incluyen la especificación completa de la capa de aplicación, lo que significa que se dispone de funciones utilizables desde programas basados en PC’s para acceder, cambiar y controlar los diversos dispositivos que constituyen el sistema. Algunos incluyen funciones estándar para distintos tipos de dispositivos (perfiles) que facilitan la interoperabilidad de dispositivos de distintos fabricantes. Algunos ejemplos son: • DeviceNet: Desarrollado por Alien-Bradley, utiliza como base el bus CAN, e

incorpora una capa de aplicación orientada a objetos. • LONWorks Red desarrollada por Echelon. • BitBus: Red desarrollada por INTEL. • DIN MessBus: Estándar alemán de bus de instrumentación, basado en

comunicación RS-232. • IntcrBus-S: Bus de campo alemán de uso común en aplicaciones medias.

iii. Buses de altas prestaciones

Son capaces de soportar comunicaciones a nivel de toda la factoría, en muy diversos tipos de aplicaciones. Aunque se basan en buses de alta velocidad, algunos presentan problemas debido a la sobrecarga necesaria para alcanzar las características funcionales y de seguridad que se les exigen. La capa de aplicación oferta un gran número de servicios a la capa de usuario- habitualmente un subconjunto del estándar MMS. Entre sus características incluyen: • Redes multi-maestro con redundancia. • Comunicación maestro-esclavo según el esquema pregunta-respuesta. • Recuperación de datos desde el esclavo con un límite máximo de tiempo • Capacidad de direccionamiento unicast, multicast y broadcast. • Petición de servicios a los esclavos basada en eventos. • Comunicación de variables y bloques de datos orientada a objetos. • Descarga y ejecución remota de programas. • Altos niveles de seguridad de la red, opcionalmente con procedimientos de

autentificación. • Conjunto completo de funciones de administración de la red. Algunos ejemplos son: • Profibus • FIP • Fieldbus Foundation

Page 22: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

22

iv. Buses para áreas de seguridad intrínseca.

Incluyen modificaciones en la capa física para cumplir con los requisitos específicos de seguridad intrínseca en ambientes con atmósferas explosivas. La seguridad intrínseca es un tipo de protección por la que el aparato en cuestión no tienen posibilidad de provoca una explosión en la atmósfera circundante. Un circuito eléctrico o una parte de un circuito tienen seguridad intrínseca, cuando alguna chispa o efecto térmico en este circuito producidos en las condiciones de prueba establecidas por un estándar (dentro del cual figuran las condiciones de operación normal y de fallo específicas) no puede ocasionar una ignición. Algunos ejemplos son HART, Profibus PA o FIP.

2.4. Ejemplos de estudio.

2.4.1. Redes Map y Top

Para competir con las compañías japonesas fabricantes de automóviles, la General Motors quería establecer una red que cubriera todas sus oficinas, fábricas, distribuidores y proveedores. La idea central era que, cuando un cliente, localizado en cualquier parte del mundo, ordenara un coche al distribuidor, éste le enviara inmediatamente su orden mediante su ordenador conectado a la General Motors. A continuación la compañía notificaría sus necesidades a sus proveedores. Una parte importante de la red de General Motors fue la automatización de la fábrica, en la que todos los robots utilizados en las líneas de ensamblado se conectarían por medio de una LAN. Dado que los coches montados sobre la línea de ensamblado se mueven a una velocidad constante, independientemente de si los robots están listos o no, se determinó que era fundamental tener un límite superior del tiempo de transmisión en el peor caso. Ethernet no dispone de dicha característica, es más un mensaje podría no llegar a enviarse nunca. Se optó por un mecanismo de paso de testigo en bus (IEEE 802.4) en el que las máquinas van pasándose el turno, produciendo así un comportamiento determinista. General Motors y otras compañías con interés en la automatización de fábricas, vieron claramente la necesidad de adoptar protocolos específicos en cada una de las capas OS1 para evitar incompatibilidades posteriores. Este trabajo dio origen al Protocolo de Fabricación Automatizada (MAP), el cual fue inicialmente adoptado con rapidez por varias compañías. Aproximadamente por la misma época, la compañía Boeing se interesó en el establecimiento de normas para la automatización de oficinas. Prefirió usar como base la red local Ethernet ya que no le preocupaba un funcionamiento determinista de la misma (los aviones no se fabrican en cadenas de montaje), y Ethernet estaba muy extendida. Sobre esta red local, Boeing desarrolló un conjunto de protocolos orientados a la automatización de oficinas llamado TOP (Protocolo Técnico y de Oficina), que varias compañías también adoptaron para la automatización de sus propias oficinas. Los protocolos son TOP son muy similares a los de redes de oficinas convencionales. Aunque MAP y TOP presentan diferencias en sus capas inferiores, sus impulsores decidieron colaborar para asegurar que las capas de nivel medio

Page 23: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

23

y superior fueran totalmente compatibles. Las torres de protocolos de las redes MAP y TOP siguen capa a capa el modelo OSI. La principal diferencia entre ambas redes está en el medio físico y en el control de acceso al medio. Mientras las redes MAP sólo contemplan el uso de paso de testigo en bus de acuerdo con el estándar IEEE 802.4, paso de testigo en bus (Token Bus), la red TOP permite tanto el uso de Ethernet (o IEEE 802.3), como de paso de testigo en anillo, Token Ring (IEEE 802.5). El resto de protocolos son coincidentes. Para la capa de enlace, ambas redes se basan en el protocolo 802.2 (LLC) de control lógico de enlace, operando en el modo sin conexión como un servicio ofrecido a la capa de red. La capa de red utiliza el protocolo ISO 8473, que es muy parecido al protocolo IP. La razón de esta elección es porque con el conocimiento que se tenía sobre la interconexión de redes en ARPA (el origen de Internet), se demostró que el planteamiento data grama es más flexible y robusto cuando se conectan redes heterogéneas múltiples, que es un aspecto importante para las redes MAP y TOP. La capa de transporte se basa en el protocolo ISO 8073. Se supone que la capa de red no es del todo fiable y gestiona el control de error y de flujo. De esta forma MAP y TOP han podido conectarse a casi cualquier tipo de red sin importar las deficiencias de éstas. El precio que se paga es la necesidad de tener una capa de transporte complicada para ocuparse del servicio no fiable de la red. Las capas de sesión y presentación utilizan los protocolos ISO 8327 e ISO 8823 respectivamente. Las normas OSI también se utilizan en la capa de aplicación, particularmente el protocolo de transferencia de archivos y el de terminal virtual.

Ilustración 9: Protocolo MMPS

El protocolo MMPS, especialmente diseñado para aplicaciones industriales, establece un servicio de mensajes entre controladores industriales para realizar las siguientes funciones:

• Acceso a variables • Manejo de eventos • Control de ejecución de los programas • Comunicación con el operario • Paso de ficheros • Manejo de recursos comunes • Acceso al estado de aparatos remotos • Carga de programas • Grabación histórica de eventos

Page 24: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

24

En una red MAP, en teoría, todos los nodos llevan implantadas las 7 capas del modelo de referencia OSI. El grado de complejidad que esto supone y el tiempo necesario para el intercambio de unidades de protocolo de cada capa, ha provocado la aparición de una opción más sencilla, que será estudiada en la sección 5.2. MAP no cubre el nivel de bus de campo (estación y proceso), lo considera un nivel inferior que se integra en la red mediante dispositivos inteligentes (PLC’s, PCs,...).Estos dispositivos dispondrán de una conexión de enlace con MAP directamente o a través de otro dispositivo. El MAP es un protocolo pensado para redes de tipo WAN incluye los niveles de red, transporte, sesión y presentación. Esto le permite el fraccionamiento de paquetes y el encaminamiento de los mismos a través de redes públicas o privadas. Lo que resulta excesivamente costoso y complejo para pequeñas y medianas aplicaciones, sobre todo para la interconexión de pequeños controladores a nivel industrial. Basada en un bus con transmisión de banda ancha multicanal, que permite interconectar los sistemas de control de planta con las aplicaciones de gestión, oficina, CAD. Ordenadores de planta, canales de datos, voz, imágenes- ya sean estos locales o remotos.

2.4.1.1. Características de las redes MAP destacables: • Todas las señales se transmiten moduladas en frecuencia • Ancho de banda de 6 MHZ • Número de nodos 10000 y distancia entre ellos 10 Km.

2.4.2. Redes MINIMAP.

Es el caso de MINI-MAP, que para agilizar las comunicaciones prescinde de las capas 3 a la 6, como puede verse en la figura 10.

Ilustración 10: Capas MINIMAP

También se modificaron las capas física y de enlace. En la capa física se prescinde del sistema de transmisión en banda ancha sobre cable coaxial y se pasa a una transmisión en banda portadora, también sobre coaxial, que abarata enormemente el sistema de cableado y sobre todo el interfaz de red que precisa cada dispositivo. Esto permite que pueda ser

Page 25: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

25

empleado con elementos de control en tiempo real de bajo coste. En la capa de enlace, en el LLC (control lógico de enlace) se sustituye la norma IEEE 802.2 de tipo 1 por la IEEE 802.2 de tipo 3. Esta última proporciona los servicios de Envió de datos con acuse de recibo y de Petición de datos con respuesta. Esto obliga a una interoperabilidad entre el LLC y el MAC (mecanismo de detección y corrección de colisiones), teniendo este último que incorporar la opción de prioridad de respuesta inmediata. Es decir, la estación que transmite cede (junto con el mensaje que envía) el testigo a la receptora para que esta acuse recibo o responda a la petición de datos de forma inmediata. Esto lógicamente permite minimizar los tiempos de respuesta con el fin de ofrecer un buen servicio en tiempo real.

La capa de aplicación incorpora los mismos servicios MMS que MAP, lo que permite que esta capa se pueda comunicar con una homologa en una red MAP a través de una pasarela que incorpore las capas que le faltan a MINI-MAP.

La falta de la capa de red impide que haya comunicación extremo a extremo entre nodos que se encuentran en segmentos separados por encaminadores (routers). Esto no plantea ningún inconveniente puesto que elementos que han de trabajar en tiempo real deben conectarse al mismo bus, para evitar las demoras que introducirían los elementos intermedios. Por otro lado, las funciones de la desaparecida capa de transporte son asumidas por el LLC tipo 3 y el mapeado de las funciones entre el LLC y el MMS. Topología y estructura lógica MINIMAP dispone de una topología de bus con un máximo de 64 nodos, pero desde el punto de vista lógico funciona como un anillo. La codificación se realiza por modulación de frecuencia en banda base y la transmisión de tipo síncrono. Cada estación tiene asignada una dirección única e independiente de su situación física, formada por un número de red (0 a 127) más un número de estación (0 a 62). El número de red 0 es para arquitecturas mono segmento y de I a 127 para multisegmento (varias MINIMAP integradas en una red MAP).

Al inicializar la red, el testigo se le asigna a la dirección de la estación más alta y el paso de testigo se realiza por orden decreciente de direcciones. Cuando un nodo recibe testigo transmite y pasa el testigo, si no tiene mensajes que transmitir pasa el testigo. El tiempo de posesión del testigo limitado a 800μs.

I. Protocolo:

Ilustración 11: Estructura de una trama MINIMAP

Page 26: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

26

Partes Constitutivas:

• Preámbulo 2 bytes: 55 hex. secuencia de 0 y I que se utiliza para la sincronización y permite localizar el primer BIT útil.

• Inicio trama: carácter especial que depende de la codificación empleada • Tipo de Trama 1 byte: MAC (Control de acceso al medio) y LLC (control lógico

de enlace) • Direcciones destino/origen MAC: 6 bytes indican tipo de mensaje (punto a punto

o difundido), los nodos de destino u origen, el número de red y el tipo de servicio (palabras comunes, memoria compartida,….)

• Datos/Control LLC: Contiene la códigos de registros o áreas de memoria de origen y destino, así como el código de control LLC, que son ya propios de los equipos de origen y destino del mensaje.

• CRC: 4 bytes para control de errores • Fin de trama: al menos un BIT de error y un BIT que marca si es el final de

mensaje o se ha interrumpido por límite de tiempo en la posesión del testigo. Como el acceso a la red es por paso de testigo y este se ejecuta por orden de mayor dirección a menor, en caso de pérdida de testigo o arranque de la red una estación no conoce la dirección de la estación que le precede o le sigue. Para esto existen procedimientos de inicialización y reinicialización los que permiten crear una tabla con esta información en cada estación.

Los procedimientos de inicialización y reinicialización se ejecutarán en los siguientes casos:

• Arranque del sistema • Eliminación de estaciones en la red • Pérdida del testigo por error • Periódicamente para detectar la inserción de nuevas estaciones

El formato de la pila de protocolos de la capa de aplicación es muy similar al del MAP solo que aquí al MMPS se lo denomina MMS y desempeña las mismas tareas que el anterior.

2.4.3. Ethernet Industrial. El protocolo Industrial Ethernet, es una solución abierta estándar para la interconexión de redes industriales que aprovecha los medios físicos y los chips de comunicaciones Ethernet comerciales. Si se tiene en cuenta que la tecnología Ethernet se utiliza desde mediados de los años setenta y su gran aceptación en el mundo, no es de extrañar que Ethernet brinde la mayor comunidad de proveedores del mundo. Al utilizar Ethernet, no solo se sigue con una

Page 27: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

27

tendencia tecnológica actual, sino que, además, se posibilita obtener acceso a datos en el nivel de los dispositivos de control mediante Internet.

• Ethernet Industrial es una red abierta que utiliza: • El estándar de comunicación física y de datos IEEE 802.3 • El conjunto de protocolos TCP/IP • El protocolo de control e información (CIP)

TCP/IP es el protozoo de nivel de transporte y red de Internet y suele estar vinculado con las instalaciones Ethernet y el mundo de los negocios. TCP/IP proporciona una serie de servicios que puede utilizar cualquier pareja de dispositivos para compartir datos. Dado que la tecnología Ethernet y los conjuntos de protocolos estándar como TCP/IP han sido proporcionados para uso público, se han producido en forma masiva y pueden conseguirse fácilmente medios físicos y herramientas de software estandarizadas, con lo que puede tenerse las ventajas de una tecnología conocida y una gran facilidad de acceso.

El UDP/IP protocolo de data grama de usuario) también se utiliza junto con la red Ethernet. Este protocolo proporciona un transporte de datos rápido y eficiente, características necesarias para el intercambio de información en tiempo real.

Para que Ethernet industrial tenga éxito se ha agregado el protocolo CIP al conjunto TCP/UDP/1P con el fin de proporcionar un nivel de aplicaciones común.

Con la introducción de la tecnología de conmutación de Ethernet (switch) y la transmisión de datos fuIl-Duplex, se minimizan las colisiones de dalos y el rendimiento en la red aumenta drásticamente.

Por lo general, una red Ethernet utiliza una topología estrella activa en la que los grupos de dispositivos están conectados punto a punto con un conmutador. La ventaja de una topología tipo estrella radica en la compatibilidad con los productos de 10 y 100 Mbps

Puede combinar dispositivos de 10 y 100 Mbps Y el conmutador Ethernet negociará la velocidad. Asimismo, la topología estrella le ofrece conexiones fáciles de cablear o de depurar, o en las que resulta fácil delectar fallos o llevar a cabo tareas de mantenimiento.

Ethernet Industrial permite cubrir grandes distancias, la sea a nivel de una LAN: con tecnología de Switching hasta 200 Km. O bien extendiéndose a una WAN, en todo el mundo, mediante protocolo TCP/IP.

La ilustración 12 muestra un resumen de las características técnicas de Ethernet Industrial.

Page 28: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

28

Ilustración 12: Características técnicas de la Ethernet Industrial.

Los dos protocolos más usados son ISO, según normas ISO 8073, y este está optimizado para la transferencia de variables para servicios y observación en tiempo real. Bajo este protocolo resulta difícil de realizar encaminamiento (routing) a través de distintas redes por este motivo se utiliza solo en el ámbito de LAN's.

El otro protocolo utilizado ese muy conocido TCP/IP , optimizado para la transferencia de grandes cantidades de datos, y este caso si es más fácil y económico el ruteo entre distintas redes, se utilizan en redes LAN estructuradas y en WAN. Esto permite el uso de tecnológicas de información IT, como SNMP (protocolo de administración de redes), http (protocolo de transferencia hipertexto), servicios WEB, etc.

Ethernet Industrial ha sido diseñada para gestionar grandes cantidades de datos de transmisión de mensajes, hasta 1500 bytes por paquete. Permite la gestión de grandes volúmenes de datos en modo previsible. Gracias a la gran aceptación de la tecnología Ethernet en los últimos años, el costo por nodo de dispositivos Ethernet está disminuyendo rápidamente.

Page 29: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

29

2.4.4. PROFIBUS:

Ilustración 13: Distribución PROFIBUS.

En el año 1987, las firmas alemanas Bosch, Klóckner Móeller y Siemens iniciaron un proyecto de desarrollo de una arquitectura de comunicaciones industriales que permitiera la interconexión de equipos de distintos fabricantes. Esta fue la base de un grupo de trabajo al que se integraron otras grandes empresas tales como ABB, AEG, Landis&Gír. etc., algunas universidades y organizaciones técnicas estatales, entre ellas la propia VDE y el Ministerio Federal de Investigación Alemán. Se formaron varios grupos de trabajo en distintas áreas, cuya tarea esencial fue la de desarrollar un sistema abierto de comunicaciones apto para integrar desde los sencillos transductores y elementos de campo, pasando por los autómatas y controles numéricos hasta llegar al nivel de los miniordenadores para diseño y gestión de la producción. El primer objetivo fue sólo el diseño de un bus de campo con una estructura abierta y un protocolo compatible que permitiera enlazar con una red adoptada como base en los niveles superiores (MAP).

A partir del año 1990 se abrió la posibilidad para cualquier usuario o empresa de integrarse en un consorcio denominado PROFIBUS Nutzerorganisation, que a través de diversos comités sigue desarrollando y dando soporte al nivel de aplicación y certificación de productos. PROFIBUS es actualmente el líder de los sistemas basados en buses de campo en Europa y goza de una aceptación mundial. Sus áreas de aplicación incluyen manufacturación, automatización y generación de procesos.

Profibus especifica las características técnicas y funcionales de un sistema basado en un bus de campo serie en el que controladores digitales descentralizados pueden ser conectados entre sí desde el nivel de campo al nivel de control. Se distinguen dos tipos de dispositivos, dispositivos maestros, que determinan la comunicación de datos sobre el bus. Un maestro puede enviar mensajes sin una petición externa cuando posee el control de

Page 30: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

30

acceso al bus (el testigo). Los maestros también se denominan estaciones activas en el protocolo Profibus. Como segundo tipo están los dispositivos esclavos, que son dispositivos periféricos. Los esclavos son normalmente dispositivos de E/S, válvulas, actuadores y transmisores de señal. No tienen el control de acceso al bus y sólo pueden recibir mensajes o enviar mensajes al maestro cuando son autorizados para ello. Los esclavos también son denominados estaciones pasivas, por lo que sólo necesitan una parte del protocolo del bus.

PROFIBUS es un bus de campo normalizado internacional que fue estandarizado bajo la norma EN 50 170. Esto asegura una protección óptima tanto a los clientes como a los vendedores y asegura la independencia de estos últimos. Hoy en día, todos los fabricantes líderes de tecnología de automatización ofrecen interfaces PROFIBUS para sus dispositivos.

2.4.4.1. Estructura La tecnología de transmisión más usada es la RS 485, conocida habitualmente como H2. Su área de aplicación comprende aquellas aplicaciones donde prima su simplicidad, la velocidad de transmisión y lo barato de la instalación. Se usa un par diferencial con cable trenzado, previsto para comunicación semi-duplex, aunque también puede implementarse con fibra óptica y enlaces con estaciones remotas vía módem o vía radio. La velocidad de transmisión varía entre 9.6Kbits/s y 12Mbits/s, dependiendo del medio físico, como se indica en la siguiente tabla: Al conectar varias estaciones, hay que comprobar que el cable de las líneas de datos no sea trenzado. El uso de líneas apantalladas es absolutamente esencial para el logro de una alta inmunidad del sistema en ambientes con emisiones altas de electromagnetismo (como en la fabricación de automóviles). El apantallamiento se usa para mejorar la compatibilidad electromagnética (CEM).

Ilustración 14: Estructura PROFIBUS

Page 31: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

31

2.4.4.2. Configuración física del Bus. Básicamente se dispone de dos tipos de estaciones: MAESTRAS (activas): que pueden controlar el bus y transferir mensajes sin una petición remota, si está en posesión del "testigo". (CJ1W-PRM21) ESCLAVAS (pasivas): sólo pueden reconocer mensajes recibidos o transferir datos después de una petición remota. (CJ1W-PRT21, variadores, controladores de cualquier tipo, E/S descentralizadas, etc.) La configuración mínima constará de dos estaciones, siempre una de ellas como unidad MAESTRA. El número máximo de estaciones es de 32 y si usamos repetidores, podemos llegar a 127. La distancia máxima y la velocidad de comunicación están ligadas de forma inversa. Además de los dos tipos de estaciones anteriores, en una red PROFIBUS, pueden encontrarse otros dos tipos:

• Expansiones E/S: este tipo de bloques constituyen la interfaz con las señales de proceso y pueden estar integrados tanto en un nodo activo como en un nodo pasivo.

• Repetidores: los repetidores ejecutan el papel de simples transceptores bidireccionables para regenerar la señal. Están especialmente pensados para largas distancias de bus.

El cableado a realizar en la instalación puede ser de tipo ANILLO ó ABIERTO. En ambos casos habrá que respetar la entrada y salida de señal al conectar el cable en los conectores y si la instalación es de tipo abierto, se conectarán las resistencias de INICIO y FINAL de línea en los conectores de los extremos

Ilustración 15: Ejemplo de módulo preparado para funcionar con PROFIBUS.

2.4.4.3. Versiones Compatibles.

Page 32: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

32

PROFIBUS es un bus de campo estándar que soporta un amplio rango de aplicaciones en fabricación, procesado y automatización. Con PROFIBUS los componentes de distintos fabricantes pueden comunicarse sin necesidad de ajustes especiales de interfaces. Puede ser usado para transmisión crítica en el tiempo de datos a alta velocidad y para tareas de comunicación extensas y complejas. Esta versatilidad viene dada por las tres versiones compatibles que componen la familia PROFIBUS:

Ilustración 16: Arquitectura del Protocolo.

I. PROFIBUS PA: Es un protocolo derivado PA, derivado de Process Automation, es un subconjunto de este estándar, orientado a las comunicaciones de instrumentos de proceso. Es decir, equipos que transmiten señales análogas como presión, temperatura, y otros. Está diseñada especialmente para la automatización de procesos. Permite la conexión de sensores y actuadores en una línea de bus común, incluso en zonas intrínsecamente seguras. Profibus PA permite disponer de comunicación de datos y potencia en un mismo bus utilizando una tecnología de dos hilos según el estándar internacional IEC 1158-2.

• Diseñado para automatización de procesos. • Permite la conexión de sensores y actuadores a una línea de bus común incluso en

áreas especialmente protegidas. • Permite la comunicación de datos y energía en el bus mediante el uso de 2

tecnologías (norma IEC 1158-2).

Page 33: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

33

Ilustración 17: PROFIBUS PA.

II. PROFIBUS DP:

Esta versión de Profibus, optimizada para una conexión económica y de alta velocidad, está diseñada especialmente para la comunicación entre los sistemas de control de la automatización y la E/S distribuidas a nivel del dispositivo. Profibus Dp puede utilizarse para sustituir las transmisiones de señales paralelas de 24V a 20 mA.

• Optimizado para alta velocidad. • Conexiones sencillas y baratas. • Diseñada especialmente para la comunicación entre los sistemas de control de

automatismos y las entradas/salidas distribuidas.

Ilustración 18: PROFIBUS DP.

Page 34: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

34

III. PROFIBUS FMS: Profibus FMS es la solución de aplicación general para las tareas de comunicación de la célula. Los eficaces servicios FMS aportan una amplia gama de aplicaciones y proporcionan una gran flexibilidad, también se puede utilizar para tareas de comunicación complejas de gran alcance. Especifica las características técnicas y funcionales de un sistema de bus de campo serie con el que se pueden conectar en red controladores digitales descentralizados desde el nivel del campo hasta el nivel de la célula. Distingue entre dispositivos maestros y dispositivos esclavos. Los dispositivos maestros determinan la comunicación de datos en el bus. Un maestro puede enviar mensajes sin una solicitud externa cuando posee los derechos de acceso al bus (el testigo). Los maestros también se denominan 'estaciones activas' en el protocolo Profibus. Los dispositivos esclavos son dispositivos periféricos. Los dispositivos esclavos comunes incluyen dispositivos de entrada/salida, válvulas, accionamientos y transmisores de medición. No tienen derechos de acceso al bus y sólo pueden reconocer mensajes recibidos o enviar mensajes al maestro cuando se solicita que lo hagan. Los esclavos también se denominan 'estaciones pasivas'.

Ilustración 19: PROFIBUS FMS.

Puede decirse sin lugar a dudas que PROFIBUS ha conseguido definir toda una red de comunicación industrial, desde el nivel físico hasta el de aplicación, superando ampliamente los límites de un bus de campo, integrando al máximo las técnicas de comunicación previamente definidas y consolidadas En la actualidad la estructura es tal que los grupos de los 20 países más industrializados ofrecen un soporte en su idioma para el resto del mundo. Todos los grupos de usuarios se unen bajo la Organización PROFIBUS International (Pl), que con más de 750 miembros es la organización de buses de campo más grande del mundo.

Page 35: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

35

2.4.4.4. Estructura de la red. La tecnología de transmisión más usada es la RS 485, conocida habitualmente como H2. Su área de aplicación comprende aquellas aplicaciones donde prima su simplicidad, la velocidad de transmisión y lo barato de la instalación. Se usa un par diferencial con cable trenzado, previsto para comunicación semi-duplex, aunque también puede implementarse con fibra óptica y enlaces con estaciones remotas vía módem o vía radio. La velocidad de transmisión varía entre 9.6Kbíts/s y 2Mbits/s, dependiendo del medio físico, como se indica en la tabla siguiente. Al conectar varias estaciones, hay que comprobar que el cable de las líneas de datos no sea trenzado. El uso de líneas apantalladas es absolutamente esencial para el logro de una alta inmunidad del sistema en ambientes con emisiones altas de electromagnetismo. El apantallamiento se usa para mejorar la compatibilidad electromagnética (CEM).

I. Elementos de Bus.

El elemento esencial del bus es el nodo. PROFIBUS prevé la existencia de dos tipos de nodos:

• Activos: son nodos que pueden actuar como maestro del bus, tomando enteramente el control del bus.

• Pasivos: son nodos que únicamente pueden actuar como esclavos y, por tanto, no tienen capacidad para controlar el bus. Estos nodos pueden dialogar con los nodos activos mediante un simple mecanismo de pregunta-respuesta, pero no pueden dialogar directamente entre sí. Aparte de estos dos tipos de nodos, existen otros dos bloques esenciales en la arquitectura del bus:

• Expansiones E/S: este tipo de bloques constituyen la interfaz con las señales de proceso y pueden estar integrados tanto en un nodo activo como en un nodo pasivo.

• Repetidores: los repetidores ejecutan el papel de simples transceptores bidireccionables para regenerar la señal.

II. Topología.

La topología puede ser simplemente en forma de bus lineal o en forma de árbol, en el que los repetidores constituyen el nudo de partida de una expansión del bus (ilustración 20). Este caso, la estructura en árbol es puramente una impresión de dibujo, ya que el PROFIBUS admite una estructura lógica de maestro flotante y una estación activa, ejerciendo el papel de maestro, que puede estar físicamente conectada a lo que se pudiera considerar una expansión del bus. Por tanto, incluso en caso de ramificaciones debe considerarse como un bus único. El número máximo de nodos conectables a cada tramo del bus, sin necesidad de repetidores es de 32.

Page 36: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

36

Ilustración 20: Topología.

A efectos de esta limitación los propios repetidores cuentan como un nodo. El número máximo de nodos del bus es de 127, de los cuales un máximo de 32 pueden ser nodos activos. No existe ninguna limitación en cuanto a poder configurar una estructura con buses anidados (un esclavo puede ser, a su vez, maestro de otro bus de nivel inferior), aunque deben considerarse como buses independientes, dado que el protocolo no permite direccionar desde arriba las estaciones de niveles inferiores.

III. Estructura lógica. La estructura lógica es de tipo híbrido: las estaciones activas comparten una estructura de maestro flotante, relevándose en el papel de maestro mediante paso de testigo. Las estaciones pasivas sólo pueden ejercer el papel de esclavos, sea cual sea el maestro activo en cada momento. La ilustración 21 ilustra esta estructura.

Ilustración 21: Estructura lógica.

Naturalmente esta estructura admite la posibilidad de que exista un solo nodo activo en el bus, con lo que se convertiría en un bus con una estructura del tipo maestro-esclavo. Cabe señalar que cuando una estación activa posee el testigo, considera a todas las demás como

Page 37: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

37

esclavos, incluyendo también al resto de estaciones activas que no poseen el testigo en aquel momento.

2.4.4.5. Tecnología de transmisión.

El área de aplicación de un sistema de buses de campo está claramente determinada por la elección de la tecnología de transmisión. Aparte de los requerimientos generales (seguridad de transmisión, distancia de la misma, velocidad) cobran particular importancia los factores electromecánicos. Cuando se mezclan aplicaciones para automatización de procesos, los datos y la energía deben ser transmitidos en un cable común. Como es imposible satisfacer todos los requerimientos con una tecnología de transmisión sencilla. PROFIBUS aprovecha 3 variaciones:

I. RS 485 (Transmisión para DP/FMS).

Es la transmisión más frecuentemente utilizada por PROFIBUS. Esta tecnología de transmisión es conocida como H2. Su área de aplicación incluye todas las áreas en las que se requieren alta velocidad de transmisión y una instalación sencilla. Tiene la ventaja de que posibles ampliaciones no influyen en las estaciones que se encuentran ya en operación.

Algunas de sus características son:

• Velocidad de transmisión de 9.6 Kbit/seg. a 12 Mbit/seg. Se seleccionará una para todos los dispositivos.

• La estructura de la red es linear, con par trenzado. • Conexión máxima de 32 estaciones sin repetidor (127 con repetidor). • Longitud máxima del cable dependiente de la velocidad de transmisión.

Ilustración 22: Distancias basadas en la velocidad de transmisión.

En la conexión, es conveniente tener en cuenta algunas precauciones, de las que son destacables:

• Se recomienda el uso de líneas de datos escudadas para mejorar la compatibilidad electromagnética (EMC).

Page 38: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

38

• Se recomienda mantener las líneas de datos separadas de los cables de alto voltaje.

II. IEC 1158-2 (Transmisión PA). La tecnología de transmisión IEC 1158-2 cumple los requerimientos de las industrias químicas y petroquímicas.

Posee una seguridad intrínseca y permite a los dispositivos de campo ser conectados al bus. Es una tecnología principalmente usada por PROFIBUS PA y suele conocerse como HI.

• La transmisión se basa en los siguientes principios: • Cada segmento tiene sólo una fuente de energía. • No se produce ningún tipo de alimentación cuando una estación está enviando

datos. • Los dispositivos actúan como sumideros pasivos de corriente. • Se permiten redes con estructura linear, en árbol y estrella. • Para incrementar la Habilidad, se pueden diseñar segmentos de bus redundantes.

Las características más importantes de este tipo de transmisión son:

• Transmisión de datos digital, asíncrona, codificación Manchester. • Velocidad de transmisión 31.25 Kbit/seg. • Seguridad de los datos: prueba de error al principio y al final. • Cable de dos líneas trenzadas. • Opción de alimentación a distancia. • Conexión de 32 estaciones por segmento (máximo de 126 con repetidor). • Posibilidad de expansión hasta a 4 repetidores. • La estructura de la red es linear, en árbol o una combinación de ambas.

Ilustración 23: IEC 1158-2.

Page 39: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

39

III. Fibra óptica. Los conductores por fibra óptica pueden ser usados para aplicaciones PROFIBUS en ambientes con interferencias electromagnéticas muy altas y para incrementar la distancia máxima con velocidades elevados. Hay disponibles dos tipos de conductores. Los conductores por fibra óptica (plástico) para distancias de 50m. o los conductores por fibra óptica (cuarzo) para distancias de I Km. Son muy baratos. Muchos fabricantes ofrecen conexiones especiales que posibilitan una conversión integrada de señales RS 485 para trabajar con conductores de fibra óptica y viceversa. Esto proporciona un método muy sencillo de intercambio entre transmisión RS 485 y transmisión por fibra óptica en un mismo sistema.

Ilustración 24: Estructura con fibra óptica.

2.4.5. AS-I AKTUATOR SENSOR INTERFACE. AS-i es un bus de campo desarrollado inicialmente por Siemens, para la interconexión de actuadores y sensores binarios. Actualmente está recogido por el estándar IEC TG 17B.

A nivel físico, la red puede adoptar cualquier tipo de topología: estructura en bus, en árbol, en estrella o en anillo, como muestra la ilustración 25.

Ilustración 25: Topologías.

Page 40: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

40

Permite la interconexión de un máximo de 31 esclavos. La longitud máxima de cada segmento es de 100 metros. Dispone de repetidores que permiten la unión de hasta tres segmentos, y de puentes hacia redes Profibus. Como medio físico de transmisión, emplea un único cable que permite tanto la transmisión de datos como la alimentación de los dispositivos conectados a la red. Su diseño evita errores de polaridad al conectar nuevos dispositivos a la red. La incorporación o eliminación de elementos de la red no requiere la modificación del cable.

El cable consta de dos hilos sin apantallamiento. Para lograr inmunidad al ruido, la transmisión se hace basándose en una codificación Manchester. La señal con la codificación Manchester se traduce en pulsos de corriente, que producen pulsos positivos y negativos en la tensión de alimentación, que indican las transiciones en la señal. A partir de la detección de dichas transiciones se reconstruye la secuencia de bits transmitida, como muestra la figura 16.

Ilustración 26: Codificación de la información en el Bus AS-i.

Cada esclavo dispone de hasta 4 entradas/salidas, lo que hace que la red pueda controlar hasta 124 E>'S digitales. La comunicación sigue un esquema maestro -esclavo, en la cual el maestro interroga a las estaciones enviándoles mensajes (llamados telegramas) de 14 bits y el esclavo responde con un mensaje de 7 bits. La duración de cada ciclo pregunta- respuesta es de 150 us. En cada ciclo de comunicación se deben consultar todos los esclavos, añadiendo dos ciclos extras para operaciones de administración del bus (detección de fallos). El resultado es un tiempo de ciclo máximo de 5ms. Como muestra la Ilustración 27.

Page 41: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

41

Ilustración 27: Tiempos de ciclo.

2.4.6. INTERBUS.

INTERBUS es un bus de campo para la interconexión de sensores y actuadores. Las partes claves de INTERBUS han sido estandarizadas en Alemania por la DKE (Deutsche Elektrotechnische Kommission para DIN y VDE). INTERBUS se basa en un esquema maestro-esclavo. El maestro del bus actúa simultáneamente como interfaz con los niveles superiores de la jerarquía de comunicaciones. La topología es de anillo, es decir, todos los dispositivos están conectados formando un camino cerrado. El anillo principal es el que parte del maestro, aunque pueden formarse otros anillos para adaptarse a la estructura particular de cada sistema. Este tipo de conexiones se lleva a cabo mediante unos equipos denominados módulos terminadores de bus. Un rasgo distintivo de INTERBUS es que las líneas de envío y recepción de datos están contenidas dentro de un mismo cable que une todos los dispositivos. De esta forma, el sistema tiene el aspecto físico de un bus o un árbol. Típicamente, la capa física se basa en el estándar RS-485. Debido a la estructura de anillo y a que es necesario transportar la masa de las señales lógicas, INTERBUS requiere un cable de cinco hilos para interconectar dos estaciones. Con velocidades de transmisión de 500 Kbits, pueden alcanzarse distancias de hasta 400 m entre dispositivos. Cada dispositivo incorpora una función de repetidor que permite extender el sistema hasta una longitud total de 13 Km. Para facilitar el funcionamiento de INTERBUS, el número máximo de estaciones está limitado a 512. La estructura punto a punto de INTERBUS y su división en anillo principal y sub-anillos es ideal para la incorporación de distintos medios de transmisión en distintas zonas de la

Page 42: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

42

planta si esto fuese necesario. La estructura de anillo ofrece dos ventajas. La primera es que permite el envío y recepción simultánea de datos (full dúplex).

Ilustración 28: Estructura INTERBUS.

En segundo lugar, la capacidad de autodiagnóstico del sistema se ve mejorada, ya que la conexión de cada nodo a la red es activa. INTERBUS permite la detección preventiva de errores por medio de una evaluación estadística de la calidad de las transmisiones. La determinación de la frecuencia de los errores de transmisión permite prever la aparición de fallo en un componente de la red.

Para facilitar la detección de errores y la puesta en marcha del sistema, INTERBUS permite la desconexión transparente de los sub-anillos conectados al anillo principal. El direccionamiento se basa en la posición física de cada sistema dentro del anillo, aunque opcionalmente se dispone de la posibilidad del empleo de direcciones lógicas para acceder a dispositivos individuales independientemente de su posición.

El protocolo de transmisión de INTERBUS se estructura en tres capas que se corresponden con capas del modelo OSI. La capa 1 es la capa física. Especifica aspectos como la velocidad, modos de codificación de la señal física, etc. La capa 2 se corresponde con la capa de enlace. Garantiza la integridad de los datos y permite el soporte de dos tipos de

Page 43: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

43

datos, por una parte los datos correspondientes a procesos cíclicos, y por otra parte datos que aparecen asincrónicamente. La capa de enlace es determinista, es decir, garantiza un tiempo máximo para el transporte de datos entre dispositivos. El control de acceso al medio se encuadra dentro de los mecanismos TDMA (Time División Múltiple Access), eliminando así la posibilidad de colisiones. Cada dispositivo tiene reservado un slot de tiempo adecuado para su función dentro del sistema. El tiempo de ciclo es la suma de los tiempos asignados a cada dispositivo. Pueden definirse slots adicionales para la transmisión de bloques de datos en modo conexión. De esta forma pueden enviarse grandes bloques de datos a través de INTERBUS, sin alterar el tiempo de ciclo para los datos de proceso. Otra ventaja importante que incorpora este tipo de control de acceso al medio, es que Iodos los elementos insertan sus datos en el bus simultáneamente, lo que garantiza que las mediciones en las que se basan los bucles de control, fueron realizadas simultáneamente.

Este mecanismo también reduce la sobrecarga con información correspondiente al protocolo, con lo que la eficiencia que se alcanza es alta.

La trama se forma por concatenación de los datos de cada estación. De forma física se realiza mediante un registro. Cada dispositivo se une al anillo mediante un registro cuya longitud depende de la cantidad de información que debe transmitir. Los datos provenientes de las distintas estaciones van llegando al master en función de su posición dentro del anillo. Cada ciclo de transmisión comienza con una secuencia de datos que contiene la palabra de loopback seguida de los datos de salida de los distintos dispositivos, en la línea de salida. Durante el envío de dalos, el flujo de retomo entra el maestro como flujo de entrada. Tras el envío de la trama completa, se envía un CRC de 32 bits. Debido a la estructura de conexiones punto a punto, el cálculo siempre se hace entre cada dos nodos, por lo que no es necesario dar una vuelta completa al anillo. Por último se envía una palabra de control para indicar el estado de cada dispositivo (detección de errores de transmisión, etc.). Si no hubo errores comienza un nuevo ciclo, como se ve en el esquema de la figura 18.

Además de los ciclos de datos, también hay ciclos de identificación. Este ciclo permite la administración del bus. Cada dispositivo tiene un código de identificación que indica el tipo de dispositivo de que se trata, y el tamaño de su bloque de datos. La configuración del bus se lleva a cabo por una secuencia de ciclos de identificación en los que el maestro comienza a leer en orden, la identificación de los dispositivos conectados. En función de estas lecturas se configura la trama que circulara en el ciclo de datos. Desde el punto de vista físico INTERBUS funciona según un procedimiento asíncrono de arranque y parada. Se envía una cabecera que contiene información adicional como por ejemplo los delimitadores de trama, código de función y tipo de mensaje, junto con ocho bits de datos adicionales. Los momentos de inactividad se ocupan con mensajes de estado. No contienen datos de la capa de enlace y sólo sirven para garantizar una actividad permanente en el medio de transmisión. Si dicha actividad se interrumpe durante más de 20 ms., se interpreta por todos los dispositivos como una caída del sistema. En respuesta a esta situación, los dispositivos se desconectan de la red y van a un punto seguro definido con antelación.

Page 44: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

44

La tercera de las capas de INTERBUS corresponde la capa de aplicación.

En el maestro se ejecuta de forma cíclica un programa que actualiza continuamente los datos correspondientes a los distintos procesos conectados a la red, y los deja accesibles para el sistema de control, de modo que por ejemplo un PLC puede acceder a ellos de forma sencilla mediante instrucciones de entrada/salida. El uso de técnicas de acceso directo a memoria evita el uso de servicios que necesitan grandes bloques de datos, lo que facilita la consecución del tiempo real. El acceso desde ordenadores se realiza mediante drivers.

INTERBUS implementa en la capa de aplicación un subconjunto de servicios basados en MMS que se denomina PMS (Peripherals Message Specífication). Incluye unos 25 servicios que permiten la comunicación con dispositivos de proceso inteligentes. Estos servicios permiten por ejemplo el establecimiento y monitorización de conexiones, lectura y escritura de parámetros o la ejecución remota de programas

2.4.7. CAN: COTROLLER AREA NETWORKING. CAN es un bus de comunicaciones serie estandarizado por [SO, que fue desarrollado inicialmente a finales de los 80 para la industria del automóvil. En su especificación básica, se exigía alta velocidad, alta inmunidad al ruido y capacidad para la detección de cualquier tipo de error. Con el tiempo, CAN ha pasado de la industria automovilística a la fabricación y a la industria aeronáutica. Los protocolos definidos por CAN se ajustan a la especificación OSI. CAN define sólo las dos capas más bajas: física y de enlace. Otras redes como SDS o DeviceNet proporcionan especificaciones de la capa de aplicación sobre la base de CAN. El medio físico consiste en un cable de par trenzado con los terminadores adecuados. En la especificación básica de CAN, la velocidad máxima de transmisión es de 250 Kbps, mientras que en la versión ampliada alcanza velocidades de I Mbps La implementación básica de CAN presenta un fuerte acoplamiento entre la CPU y el controlador CAN (que implementa los protocolos de capa física y de enlace). Los mensajes son difundidos por toda la red y son comprobados por la CPU de cada una de las estaciones que la forman. Este tipo de funcionamiento disminuye el aprovechamiento de la velocidad de transmisión de la red. En la versión conocida como "Full CAN", el controlador de red incorpora un filtro de selección de mensajes en base a un campo de identificación. De esa forma la CPU sólo recibirá aquellos mensajes que le interesen. Philips es el principal líder de la versión básica de CAN, mientras que Intel y Siemens lideran la versión completa. Full CAN permite dos tamaños distintos de identificadores de mensajes: la versión A permite identificadores de 11 bits (2032 identificadores) figura 19, mientras que la versión extendida (B) tiene identificadores de 29 bits, figura 20. La capa de enlace define el formato y la temporización usada para la transmisión de los mensajes. Las tramas CAN tienen dos bytes descriptores y hasta 8 bytes de datos. Los descriptores definen la prioridad de los mensajes y su tipo. El primer campo, o campo de arbitraje está formado por los 11 bits del identificador (en tramas tipo A) y el bit RTR. Si

Page 45: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

45

RTR vale 0, indica que se trata de una trama de datos, mientras que si vale 1 indica que se trata de una petición de datos. En ese caso, el campo de datos indicará los bytes que formarán la respuesta.

Ilustración 29: Trama tipo A.

El campo de control está formado por 6 bits. Los bits rl y r0 están reservados para futuras ampliaciones del protocolo. Los cuatro bits que forman el DLC indican el número de bytes que forman la trama de datos y que van a continuación.

El campo de datos contiene de cero a ocho bytes. El bit más significativo de cada byte es el primero que se transmite. A continuación hay un campo de CRC, que contiene un código de redundancia cíclica de 15 bits y un bit delimitador que siempre vale 1. El campo de acuse de recibo consiste en dos bits. El primer bit se envía a I y es puesto a cero por las estaciones que reciben correctamente el mensaje. El segundo es un bit delimitado que vale I. El delimitador de final de trama consiste en 7 bits a 1. Tras cada trama hay un periodo de tres bits (deben estar a 1), destinado a dar un tiempo mínimo a las estaciones a prepararse para la recepción o envío de otro mensaje.

Las tramas de tipo B se diferencian en el campo de arbitraje. En este caso hay un primer grupo de 11 bits similar al de las tramas de tipo A, y que actúa como valor base del identificador. La segunda parte de los identificadores (18 bits) es la extensión del identificador. Para distinguir ambos formatos, la trama tipo B incorpora dos bits que separan los dos trozos del identificador. El primero es el bit SRR (Substitute Remote Request). Se envía siempre a 1 para dar prioridad a las tramas de datos estándar de tipo A con el mismo identificador base. El bit IDE que sigue al bit SRR se envía siempre a 1, y permite distinguir tramas tipo A y tipo B.

Page 46: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

46

Ilustración 30: Mecanismo de acceso al medio.

Una característica fundamental de CAN es que cuanto menor sea el identificador del mensaje mayor es su prioridad Si dos nodos intentan transmitir simultáneamente, el primero que envíe un cero cuando el otro intente enviar un I obtendrá el acceso al medio, ya que el valor cero es dominante frente al valor I. Como cada estación es capaz de monitorizar el medio físico, podrá detectar si su trama ha sido sobrescrita por otra de mayor prioridad (que permanece inalterada). La estación que no ha podido enviar el mensaje, reintentará el envío en cuanto detecte un periodo de inactividad, como puede verse en la figura 21. Las ventajas de este mecanismo de acceso son la minimización del retardo en el acceso al no tener que esperar por el tumo como sucede en un sistema de paso de testigo, y la mejora de la eficiencia al evitar las colisiones destructivas. Los mensajes son enviados por orden de prioridad.

Un bus CAN puede tener un máximo de 32 nodos. El número de mensajes por segundo varía entre 2000 y 5000 en un bus de 250 Kbps, según el número de bytes por mensaje. Aunque se ha dicho que CAN se basa en un medio físico de par trenzado, también existen interfaces para la conexión mediante fibra óptica. El método más común es el par trenzado, de modo que las señales se envían mediante una diferencia de tensión entre los dos hilos. Los hilos reciben los nombres de CAN_H y CAN_L, y en estado inactivo la diferencia de tensión entre ambos es de 2.5 V. Un 'I' se envía colocando CAN_H a más tensión que CAN_L, mientras que un cero se envía colocando CAN_L a más tensión que CAN_H. El uso de tensiones diferenciales permite el uso de CAN incluso si una de las líneas está dañada, o en ambientes muy ruidosos.

Page 47: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio Situación Actual en la Industria.

47

2.4.8. Comparación de los casos estudiados. Para finalizar la sección se presenta la siguiente tabla donde se muestra en forma resumida los parámetros más importantes de las distintas redes de comunicación de sistemas de control estudiadas.

Tabla 1: Comparación de todos los casos estudiados.

Page 48: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

- 48 -

3. Estudio y desarrollo de un control distribuido para una planta.

3.1. Introducción:

Para hacer la demostración del funcionamiento del control de un lazo industrial, se ha diseñado un sistema de automatización industrial, o control distribuido. Para ello se ha creado una situación ficticia en una planta química, con un proceso indeterminado.

Llegados a este punto es muy importante remarcar, para evitar confusiones e interpretaciones erróneas no deseadas, que el proceso diseñado y que se presenta a continuación es totalmente aleatorio. No se ha copiado, ni plagiado en totalidad o parte ningún proceso industrial real, ya que se vulneraría la posible confidencialidad de éstos. Todos los elementos que se representan tanto en entornos gráficos, como en la propia memoria, son totalmente inventados y sin una coherencia real, a nivel de diseño industrial. El Proceso no muestra productos reales, las presiones, caudales, intensidades, etc. no han sido calculados para un proceso concreto. Tanto los reactores, intercambiadores, bombas, etc., no tienen porqué funcionar, ya que no han sido calculados ni probados para este fin. Todo ello es tan solo un entorno gráfico necesario para el planteamiento y posterior explicación del lazo de control aquí expuesto. Tras todo esto solo queda decir, que cualquier semejanza, parecido o similitud a un proceso real es una total coincidencia, hecho propio de la aleatoriedad y la casualidad. Se ha elegido para la demostración un proceso químico industrial. Dicho proceso consta de algunos elementos típicos de las plantas químicas, como pueden ser reactores, intercambiadores de calor, bombas, depósitos, así como elementos de medida estándares, medidores de presión de intensidad, de caudal, etc.

Como explicábamos anteriormente, los valores que se mostrarán e incluso podremos modificar, no serán reales, e incluso podría darse la posibilidad de que fueran valores incoherentes. Pero en nuestro caso la implicación o coherencia de estos valores no tiene una relevancia de peso, ya que la parte que nos pertoca, no es la reacción, espesor de estructuras, kv de válvulas, diámetro de tuberías, ni todo el conjunto de cálculos y diseños de procesos industriales. Nuestro fin y único destino es el de control, así como de proporcionar las herramientas y mecanismos necesarios para que el sistema sea seguro, controlable, ajustable a las necesidades de cada momento y de un fácil manejo e intuitivo.

Estas herramientas están divididas en cinco partes muy diferenciadas y fácilmente identificables. Pero antes de empezar con la descripción de cada una de ellas, debemos aclara un aspecto importante de esta parte práctica. El sistema se ha desarrollado usando como pilar central de comunicaciones el puerto paralelo de los PC’s. Este sistema ciertamente ya no es muy utilizado en la actualidad, casi en desuso. Se ha tomado esta determinación ya que poner en práctica un bus tal como el Profibus o similar, requiere de una dificultad un tanto mayor así como de una inversión en tiempo y capital muy superior. He creído que para hacer patente el funcionamiento del sistema, era más que suficiente generar una arquitectura similar obviando este detalle, pero realizando el sistema lo más parecido a lo existente en la actualidad. Como decíamos anteriormente, la simulación consta de 5 partes, de las cuales solo daremos una pincelada, ya que más adelante serán

Page 49: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

49

debida y ampliamente desarrolladas. En primer lugar encontramos la Estación de Trabajo, (E.T.). La Estación de Trabajo, es simplemente un PC con un entorno gráfico diseñado, ajustándose a las necesidades particulares del proceso y desde donde se pueden controlar todos los elementos que conforman el mismo. Es solo un elemento de visualización y control, no tiene capacidad de mando. Con él, el operador puede saber el estado de todo lo que está sucediendo en cada momento en la planta y actuar en consecuencia o dejar que el propio sistema responda con el parámetro que previamente se le ha preprogramado. Es un control virtual, ya que este ordenador no es el cerebro del sistema. Podríamos incluso referirnos a él como una interface entre el usuario y el proceso industrial.

Tras él y como segundo elemento, nos encontramos el bus o líneas de comunicación del sistema. Este elemento es el que se encarga de trasportar la información que se maneja en todo el conjunto. Los elementos dejan su información en este bus, y ésta solo la recoge el elemento para el que está diseñado. Cierto es que Profibus funciona mediante testigos para pedir tanda de comunicación, pero nosotros para solucionar esto hemos intercalado un circuito electrónico encargado de repartir los datos. Igualmente que en Profibus, nuestro bus de comunicación es bidireccional, por lo que en principio todos los elementos se pueden comunicar entre sí. Nuestro sistema no desarrolla todo este potencial, ya que teniendo los elementos necesarios para esta bidireccionalidad, hay elementos que al diseñar el hardware no se les ha dotado de esta funcionalidad. Más adelante en el apartado de posibles mejoras implementaremos esta idea.

Tras el bus, y como cerebro del sistema nos topamos con el PLC. El PLC no es más que un ordenador al cual se le provee de capacidad decisiva y ejecutiva. En nuestro caso es un ordenador normal y corriente, y ciertamente este caso práctico en la realidad sería factible en algunos supuestos. En la industria es menester equipos más robustos y ante todo dedicados. Un PC tiene multitud de aplicaciones que no son necesarias para un PLC y en algunos casos podrían incluso ser una desventaja. Es por ello que en el campo que nos movemos, no es factible utilizarlos con estos fines. Los fabricantes tienen un gran abanico de PLC’s con infinitas variedades para que sean adaptables a todo tipo de procesos industriales. Nuestro PLC es un Ordenador Portátil al cual se le ha dotado de un software cuya finalidad es la de decidir qué hacer con la información que recibe del bus. Tiene la capacidad de informar de sucesos o de ejecutar acciones concretas.

Como cuarto elemento y dependiente también de una conexión al bus de datos, nos encontramos con la Estación Remota, (E.R.). Este elemento no es más que un circuito electrónico similar a un PLC, pero de inferior potencia y capacidad de decisión. Se encarga de ejecutar las órdenes que recibe del bus, que por lo general y en su totalidad en nuestro caso, son enviadas por el PLC. De él pueden depender diversos dispositivos tales como bombas, variadores de frecuencia, reguladoras, actuadores, elementos de medida, etc. Tiene la capacidad de recoger información, como averías o valores medidos y reportárselos mediante el bus al PLC. Dichos elementos suelen estar ubicados en campo, normalmente en cajas de conexiones en medio de la planta, así como también en cuartos eléctricos más centralizados.

El quinto y último de nuestro ejemplo son los elementos finales, que al fin y al cabo son los dan sentido a todo este dispositivo. Estos elementos son las bombas, agitadores,

Page 50: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

50

ventiladores, válvulas, etc. En nuestro caso simularemos esto con tres ventiladores, y un circuito electrónico que mediante tres displays simulará el % de apertura de una válvula reguladora ubicada remotamente en campo.

3.2. Estación de trabajo. La Estación de Trabajo está compuesta por un PC de sobremesa, funcionando bajo Windows XP.

Como explicamos en la introducción, este PC trabajará como una interface entre el hombre y las máquinas. Para ello se ha diseñado un software en Visual Basic 6.0 que es el que se encargará de traducir la información mostrada de forma gráfica en las ventanas, a códigos BCD que se transmitirán mediante el puerto paralelo del PC. El software diseñado al igual que el proceso, es de creación y diseños propios, no ha sido plagiado ni copiado en su totalidad ni en parte de ella. Esto hace que no sea necesario ningún tipo de derechos de autor ya que no vulnera licencia alguna.

3.2.1. Software El software está dividido en diferentes ventanas, algunas de ellas son funcionales y otras de apoyo al funcionamiento. Las ventanas funcionales, son aquellas que permiten al usuario acceder y manipular valores o dispositivos. Las de apoyo sólo sirven para realizar funciones preprogramadas a las cuales el operario no tiene acceso.

El entorno gráfico está inspirado en el sistema CITECT, pero el lenguaje de programación es diferente ya que este sistema no está basado en Visual Basic 6.0. Para hacerlo más verídico se ha simulado éste. En este entorno gráfico virtualizamos un proceso químico indeterminado, en el cual como pieza central encontramos un reactor químico. Este está compuesto por un agitador que funciona propulsado por un motor eléctrico. También posee una bomba de vaciado que es la que extrae el producto ya terminado del reactor, así como una bomba que recircula el producto del interior del mismo. Para mantener en todo momento controlado todo el sistema, dicho reactor está dotado de unos indicadores de presión, temperatura y nivel que miden a tiempo real lo sucedido en su interior. Estos valores tienen unos mínimos y unos máximos. Cuando cualquiera de estos valores iguala o supera estos límites, automáticamente se dispara una alarma tanto visual como acústica. Pero para hacer que el sistema sea más elástico estos valores extremos se pueden modificar. Es importante remarcarlo ya que si deseamos realizar diferentes productos dentro del mismo reactor, es muy posible que éstos reaccionen generando valores de temperatura y presión diferentes. Dichas modificaciones podrían generar conflictos de seguridad. Por este motivo contamos con un sistema de seguridad que evitar accesos no autorizados. Determinados valores no se pueden modificar sin un password. Algo imprescindible para que solo los responsables de la planta o del proceso puedan alterar parámetros que son importantes o de seguridad.

También disponemos de unas series de válvulas. En este diseño las hay de dos tipos: de todo o nada y reguladoras. Las válvulas todo o nada, tienen el único fin de permitir o no el paso del producto, en cambio las reguladoras como su nombre indican, nos permitirán

Page 51: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

51

manipular el caudal que deseamos circule en cada momento. En algunos casos podremos ponerlo en función automático, de manera que basándose en unos datos preprogramados ella se auto regulará sola.

Hemos incluido un depósito cuya finalidad desde el punto industrial quizá no sea muy coherente, pero con ello demostramos un pequeño ciclo de funcionamiento automatizado, basado en unos parámetros prefijados. Este depósito se va llenando hasta llegar a un nivel máximo, cuando lo alcanza, automáticamente se pone en marcha una bomba que lo vacía hasta un nivel mínimo determinado. Tras esto se repite el ciclo nuevamente.

Existen algunos elementos más, los cuales ya expondremos de forma más amplia.

3.2.2. Funcionamiento. 3.2.2.1. Pantalla Inicio.

En primer lugar nos encontramos con la pantalla de acceso. Esta pantalla está diseñada para arrancar el programa, no la simulación. Es un sistema de seguridad, tan solo debería poder arrancarlo personal autorizado, por lo que el acceso se hace mediante un password.

Ilustración 31. Pantalla Acceso.

Page 52: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

52

En esta pantalla podemos actuar de varias maneras diferentes:

Al inicio tenemos un cuadro de texto en el centro. Este cuadro está diseñado para que introduzcamos un password. Para ello existen diferentes opciones. Podemos introducirlo desde teclado. En las salas de control, el teclado es un elemento que en la mayoría de los casos no es usual, por lo que precisamos de alternativas para cubrir todos los frentes posibles. Una solución adoptada es la de crear un pequeño teclado manejable desde el ratón. En esta pantalla si clicamos en el cuadro de control, nos aparecerá dicho teclado que nos permitirá introducir valores alfanuméricos con el ratón.

Ilustración 32: Entrada sin teclado.

Una vez hemos elegido el tipo de teclado, podemos decidir si queremos o no ver lo que escribimos, ya que es muy probable que no nos interese que las personas presentes sepan cual es el código. Para ello disponemos de un botón que permite codificar los caracteres en asteriscos.

En la parte superior de la pantalla inicio, encontramos un pequeño menú con dos opciones. La primera sirve para cambiar el password de acceso, hacerlo periódicamente es algo recomendable, y la segunda para cerrar el programa, algo que podemos hacer igualmente

Page 53: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

53

Ilustración 33: Modificar password.

desde el botón “Cerrar”. Una vez introducido el password podemos clicar el botón “Acceder” o pulsar “Return” en el teclado. Si el password es incorrecto recibiremos un mensaje:

Ilustración 34: Password Incorrecto.

Y si es correcto pasaremos a la siguiente pantalla. Pero el acceso a la siguiente pantalla se demorará unos segundos dependiendo de la potencia de la máquina, ya que en este instante de forma subliminal el programa cargará en memoria una serie de parámetros que tiene en una base de datos “Excel”. Todo ello se ve reflejado en una barra de progreso.

3.2.2.2. Pantalla Reacción. Esta pantalla es el núcleo del sistema. Desde ella podemos controlar todos los dispositivos que conforman la simulación. Es cierto que existen más pantallas auxiliares, pero todas nacen de aquí. Una vez nos encontramos ante esta pantalla podemos realizar diversas operaciones sin tener que activar el programa principal. Podemos observar en la imagen siguiente que en la cabecera de la pantalla existen diversos botones con funcionalidades diversas.

Page 54: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

54

Ilustración 35: Pantalla Reactor.

• Empezaremos por la parte superior izquierda. En ella podemos ver un menú desplegable que consta de diversas opciones.

Ilustración 36: Menú desplegable 1.

La funciones a las que nos da acceso son: activar la simulación, desactivarla y salir del programa.

En el siguiente sub-menú llamado “Funciones” encontramos dos opciones más. La primera nos permite visualizar una pantalla hibrida. La llamamos así por un simple motivo. Anteriormente explicamos que existían dos tipos de pantallas: las que eran funcionales y las que funcionan en un segundo plano. Pues ésta cumple en parte las dos opciones, ya que

Page 55: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

55

se encarga de traducir las órdenes que le enviaremos mediante un clic de ratón sobre un elemento, convirtiéndolas en códigos BCD que viajarán a través del

Ilustración 37: Menú desplegable 2.

puerto paralelo al exterior. Pero también podemos acceder a ella y verificar el estado de los puertos de salida del PC para comprobar que no existan errores en los mismos.

Ilustración 38: Entradas y Salidas.

La ilustración 38 nos muestra la pantalla a la que hacíamos referencia y que explicaremos más adelante. Tras la opción de Entradas/Salidas nos encontramos otra opción llamada Fallos y Dispositivos. Esta opción expande un desplegable por el lado derecho de la pantalla de Reacción como podemos observar en la ilustración 39 presentada abajo. En este

Page 56: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

56

desplegable tenemos dos secciones: la sección del recuadro superior, y la del recuadro inferior. La superior está compuesta por 11 indicadores luminosos.

Ilustración 39: Fallos y dispositivos.

Estos indicadores pueden adoptar tres colores. Cuando están en verde quiere decir que el dispositivo está activado y funcionando correctamente. Cuando están en negro el dispositivo está parado de forma correcta. Sin embargo si se encuentra en negro y a su derecha aparece un indicador morado, quiere decir que el dispositivo se ha parado por un fallo. Este fallo nos informa de una avería en un dispositivo final. El cuál estará indicado por una señal acústica y un mensaje de texto que informará de forma escueta de que se trata., Además el dispositivo supuestamente averiado se pondrá en rojo.

En el recuadro inferior encontramos otro indicador, el cual tan solo nos informa del estado del PLC. Si está en verde quiere decir que el PLC está activo y funcionando y si por el contrario está en negro nos informa de que no lo está.

Más abajo encontramos un botón con el nombre de Rearme. Este botón como su nombre indica, sólo sirve para desenclavar el dispositivo de seguridad, que impide que un dispositivo no se pueda arrancar sin verificar que ha sido reparado. Cuando un dispositivo falle, enviará una señal desde el PLC la cual nos para el dispositivo y muestra el indicador

Page 57: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

57

morado que hemos comentado anteriormente, además de poner dicho elemento en rojo. Para poder poner nuevamente en funcionamiento este elemento, se debe dar la orden desde el PLC de que está activo nuevamente. Una vez el indicador morado ha desaparecido, pulsando rearme, el dispositivo retorna a la posición de paro correcto, permitiendo arrancarlo nuevamente.

• Una vez terminado de explicar el funcionamiento del menú haremos hincapié en la pantalla de Entradas y Salidas que habíamos presentado hace un momento.

Esta pantalla, como bien explicamos en su momento, tiene la función principal de traducir las órdenes, de marcha y paro, en códigos BCD. En este modo de funcionamiento, el operador no tiene capacidad de manipulación de la información, pero sin embargo puede acceder a ésta. Este acceso se limita simplemente a un uso informativo o de verificación, ya que podemos ver el estado en todo momento de las entradas del puerto para cerciorarnos si estamos recibiendo correctamente la información, o también para ver si existe algún fallo en el bus de comunicación. Otra opción es el forzado de las salidas con lo que creamos códigos BCD de forma manual, que permite hacer verificaciones de funcionamiento.

Continuando por la parte superior izquierda de la pantalla de Reacción, nos topamos con dos botones que si bien son diferentes tiene un roll común. Anteriormente nos referimos a la seguridad, diciendo que hay parámetros que tan solo debería poder manipular personal con un cierto nivel de acceso.

Ilustración 40: Loggin.

Precisamente estos botones tienen esa finalidad exacta. El botón de la izquierda nos permite autentificarnos verificando el nivel de acceso que tenemos en el sistema. Como se trata de una simple simulación, sólo hemos creado dos niveles de acceso: el de “Operador” que es el que existe por definición y el de “Administrador”.

Ilustración 41: Nivel de Acceso.

Lógicamente el nivel de “Operador”, como es el más básico no requiere de clave, tan solo lo precisa el de Administrador.

Page 58: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

58

Existe un cuadro de texto en la parte inferior derecha de la pantalla de Reacción donde se puede ver en todo momento que nivel de acceso tenemos introducido.

Ilustración 42: Indicador de estado.

De todas maneras como esto es un sistema de seguridad, si el mecanismo detecta que el password de “Administrador” está introducido y lleva un tiempo determinado sin usarse, lo desactiva automáticamente. De esta forma no se puede dejar activado por error con el consecuente peligro que ello conllevaría.

El acceso a esta pantalla es posible desde diversos puntos del programa no solo desde aquí.

El segundo botón realiza la misma función que el temporizador pero de forma manual, pudiendo desactivar el estatus de Administrador en cualquier momento.

• Continuando hacia la derecha tenemos un nuevo pulsador llamado “R.Alarma”.

Desde el momento en que empieza la simulación van teniendo lugar una serie de sucesos. Unos los provocaremos manualmente y otros esta programados para que surjan de forma aleatoria. Todos ellos generarán alarmas tanto acústicas como visuales, así como una pequeña línea de texto informando a que se debe el fallo.

Este sistema de mensajes que muestran la alarma tienen una gran ventaja, pero a su vez un inconveniente. El problema surge cuando dos alarmas se producen muy seguidas. Ello conlleva a que las líneas de texto queden solapadas por la alarma que la ha sucedido en último lugar. Esto crea la posibilidad de que la primera no hayamos podido verse. Para ello se ha creado un pequeño registro de alarmas, que es capaz de almacenar las 1000 últimas recibidas, en el orden en que han sucedido. Este botón no hace más que mostrarnos este registro para así poderlas visualizar todas.

Page 59: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

59

Ilustración 43: Registro de Alarmas.

• El siguiente botón que explicaremos, tiene una forma un tanto peculiar. Como hemos comentado ya en diversas ocasiones, en el momento en que se genera un error, se lanza una alarma tanto acústica como visual.

Ilustración 44. Apercibimiento Alarma.

En la ilustración 44 podemos ver las dos formas que toma el mismo botón. Cuando está activo, la zona roja exterior parpadea para indicarnos que una alarma ha sido lanzada. La única manera de dar conocimiento al sistema de que nos damos por enterados para que pare de sonar la sirena, es pulsando el contacto. Pero no nos confundamos, esto no soluciona el fallo, si el fallo persiste tras ser pulsado, a los pocos segundos la alarma se reactivará.

• El cuadro de texto que sigue a continuación es el encargado de indicar el tag, que nos informa de qué tipo de alarma estamos hablando para poder tener una idea y saber donde hay que actuar. Se puede comportar de dos maneras: cuando no existe ninguna alarma activa nos muestra el tiempo que hace que se está ejecutando el programa

Ilustración 45: Cuadro Alarmas no activo.

Page 60: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

60

y cuando se activa alguna alarma, nos muestra el tag de ésta y al mismo tiempo parpadea entre rojo y negro.

Ilustración 46: Cuadro Alarmas activo.

• Concluyendo con los botones que encabezan esta pantalla, llegamos al que es probablemente el más importante de todos, el contacto que pone en funcionamiento todo el sistema. Sin activarlo, la comunicación entre los distintos elementos que conforman este proyecto no es posible. Cuando activamos este interruptor lo primero que vemos es que el indicador luminoso de la derecha cambia de estado de “Parado” a “Activo”.

Ilustración 47: Interruptor de Inicio.

Al cambiar al estado de “Activo” en este preciso momento, se desbloquean todos los elementos gráficos representados en el dibujo, de manera que podremos empezar a poner en marcha bombas, a abrir válvulas, etc. teniendo en cuenta que algunos de ellos tienen una secuencia determinada es decir, que para poner en marcha según qué elementos se necesita previamente de la puesta en marcha de otros.

Si intentamos realizar esta operación sin cumplir la regla previa, nos aparecerá un mensaje informándonos del error que estamos cometiendo. Dicho mensaje no genera alarma, solo es informativo.

Al activar el interruptor, se inicia la cuenta en el cuadro de alarmas, del tiempo transcurrido desde que se inicia. La estación de trabajo cuando detecta que esta activa, una de las primeras operaciones que ejecuta es comprobar si se encuentra en línea con el PLC. Si es así lo pone en funcionamiento, lanzando un mensaje informativo de que el PLC está activo y encendiendo el indicador luminoso de la ventana desplegable. Si de lo contrario detecta que el sistema no está en línea, se activa, pero nos muestra un mensaje informándonos de que algo ocurre con el PLC.

Igual que sucede al conectar, si una vez el sistema está en marcha y pulsamos nuevamente el interruptor, nos aparecerá un mensaje en pantalla preguntándonos si estamos seguros de que queremos interrumpir el programa.

Page 61: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

61

Ilustración 48: Interrumpir programa.

Si pulsamos “no”, el contador de tiempo continuará contando y a su vez el programa seguirá su camino. Si por lo contrario pulsamos “si”, se interrumpirán todos los procesos que se estén ejecutando, deteniéndose el contador de tiempo.

Ya hemos terminado con los elementos que conformarían el menú de funcionamiento auxiliar, que son todos los botones y sub-menús de la parte superior de la pantalla de Reacción. Ahora empezaremos a explicar el funcionamiento del entorno grafico propiamente dicho. Haremos una explicación detallada de cada uno de sus elementos, así como de las pantallas auxiliares de apoyo a los mismos.

• En primer lugar podemos observar que si pasamos el ratón por encima de la pantalla, al situarse encima de los indicadores, así como de los dispositivos, bombas, motores, válvulas, etc., aparece una etiqueta identificativa que desaparece al posicionarse encima de otra, con la consecuente aparición de la nueva correspondiente. Esta es una herramienta interesante ya que facilita la identificación de un elemento cuando hay muchos similares. Observamos que para facilitar la posición del ratón en el sistema, no solo nos podemos basar en la etiqueta que esté activa en cada momento, sino que el elemento sobre el que se ha posicionado por última vez el rato queda enmarcado con un recuadro rojo.

Ilustración 49: Etiqueta y recuadro de selección.

• Los indicadores de valores medidos, que son los recuadros negros que podemos ver repartidos a lo largo y ancho de toda la pantalla, tienen la utilizad de informarnos en cada

Ilustración 50: Indicador Valor Medido.

momento del valor que se está midiendo. Cada uno de ellos está tarado a un máximo y a u mínimo. Estos valores limítrofes tienen la capacidad de lanzar alarmas en cuanto detecten que el valor promedio ha llegado o superado este umbral. Si esto sucede, automáticamente

Page 62: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

62

se pondrán en color rojo, indicándonos que algo no está bien. Por lo que el operario podrá actuar de alguna para corregir esta incidencia.

Ilustración 51: Indicador Valor Medido alarmado.

Pero como comentábamos anteriormente, estos valores se pueden modificar, haciendo el sistema más elástico.

Ilustración 52: Modificar Valores Máximos y Mínimos.

Para modificarlos iremos a esta sub-pantalla de apoyo. Llegaremos a ella pulsando con el botón izquierdo del ratón sobre el recuadro de medida que queramos modificar o simplemente visualizar. Al hacerlo aparecerá este cuadro. Al ser un elemento de seguridad necesita de un nivel de acceso superior al de “Operario” para entrar a modificar los datos. Es por ello que en la parte superior derecha existe un botón, que es exactamente el mismo que hay en la parte superior izquierda de la pantalla reacción.

Al pulsarlo ocurrirá exactamente lo mismo que antes, nos parecerá el recuadro para identificarnos. Al hacerlo ya podremos modificar los valores inferior y superior.

Para modificar los valores una vez estemos correctamente identificados, pulsamos directamente con el botón izquierdo del ratón sobre el recuadro donde está el valor a corregir. Automáticamente nos aparecerá el cuadro de teclado en pantalla que ya hemos visto y a su vez a la derecha del cuadro que nos indica el valor que vamos a prefijar, aparecerá un botón cuya finalidad es verificar el valor que colocaremos.

Page 63: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

63

Ilustración 53: Visual botones de verificación.

Esto nos evitará que podamos equivocarnos y colocar un valor máximo inferior al mínimo o un mínimo superior al máximo.. Cuando tengamos los valores deseados introducidos pulsaremos el botón “Salir”. Los límites nuevos ya son operativos, pero para que el programa sea más liviano y funcione más ágil, estos valores quedan en memoria. Esto quiere decir que si ahora tenemos un fallo de energía, al arrancar nuevamente el programa tendríamos que modificarlos de nuevo. La operación que hace al cargar las bases de datos al principio en la pantalla de “Inicio”, tiene su homólogo cuando cerramos el programa, ya que nos preguntará antes de cerrarlo si queremos guardar las modificaciones. En caso afirmativo, reescribirá todas las bases de datos con los nuevos valores.

• Continuando a través de esta pantalla para seguir un orden más o menos coherente, nos desplazaremos de izquierda a derecha y de arriba abajo.

Lo primero que tenemos que explicar es que no todos los indicadores son iguales. Los hay de medida y de valor prefijado. El recuadro IT7 superior es un indicador prefijado. En éste colocamos la temperatura promedio que queramos que tenga el reactor, de forma que el sistema dirigirá la reacción para que recoja ese parámetro. Podremos modificarlo tan solo pulsando encima del mismo recuadro, para que nos salga el teclado en pantalla. Le indicamos el valor deseado y aceptamos. Actuaremos de forma coherente, ya que no podemos decirle al sistema que baje o suba en la reacción una cantidad absurda de grados, ya que esto desestabilizaría la reacción. Por esta razón existe una limitación en cuanto a los grados que se pueden subir y bajar a la vez.

Ilustración 54: Recuadro de valor prefijado.

• El siguiente dispositivo sobre el que podemos actuar es el agitador. Virtualmente, se trataría de un motor conectado a un sistema reductor, que haría girar unas palas, cuya función es la de homogenizar los elementos que están reaccionando dentro del reactor.

Page 64: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

64

Nosotros no podemos actuar sobre la velocidad de giro de éstas ni sobre ningún otro parámetro que no sea su marcha o paro.

Ilustración 55: Marcha agitador.

Una vez pulsemos sobre el motor del agitador nos saldrá una ventana como la de la ilustración 55, donde nos preguntará si estamos seguros de que queremos conectar el dispositivo. Pulsando “No”, se cerrará la ventana y nada habrá sucedido. Si de lo contrario pulsando en “Si”, automáticamente veremos como el motor toma el color verde. Los indicadores de intensidad del agitador empiezan a marca un valor y el reactor alcanza un nivel haciendo que todos sus indicadores de temperatura, presión y nivel empiecen a oscilar. Ningún otro elemento del reactor puede ponerse en marcha sin que el agitador esté en funcionamiento. Esto es un enclavamiento de seguridad, ya que no podemos vaciar el contenido del reactor si este no se ha homogenizado correctamente. Para ello primero se ha de hacer un estudio a nivel de calidad o seguridad, para ver qué tipo de sub-reacción se ha podido generar al fallar este dispositivo. Este motor será uno de los tres elementos finales que servirán como ejemplo real de funcionamiento del proyecto. Es decir, que cuando lo conectemos o paremos, realmente se pondrá en marcha un elemento físico; en nuestro caso un ventilador. Cuando generemos un error desde el PLC, algo que ya explicaremos cuando tratemos el software del PLC, este motor se detendrá y se pondrá de color rojo, haciendo necesario el botón de rearme que explicamos anteriormente en la pestaña desplegable.

• A continuación encontramos una bomba que realiza una recirculación y a su vez puede ejecutar un vaciado de emergencia del reactor mediante una válvula de 3 vías. Esta bomba puede darnos información de funcionamiento con tres parámetros: intensidad, revoluciones y presión. Igual que en el caso del agitador, cuando pulsamos para poner en marcha la bomba, nos aparece un cuadro que nos pregunta si estamos seguros de realiza la acción. Si afirmamos, pero no cumplimos la condición que antes explicábamos de que el agitador esté en marcha, obtendremos el siguiente cartel informativo.

Page 65: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

65

Ilustración 56: Mensaje fallo enclavamiento marcha.

Sin embargo a modo representativo, en esta bomba hemos introducido otro tipo de enclavamiento muy común en estos sistemas. Es un tipo de enclavamiento diseñado para que el elemento se auto proteja de acciones dañinas. Muchos de los motores que se instalan en la industria están acoplados a elementos reductores o a una infinidad de mecanismos los cuales son sensibles a cambios bruscos de velocidad. Es por ello que a éste lo hemos protegido para que en el caso de que lo paremos o se detenga por cualquier motivo, hasta que la intensidad no baje de un valor, no permite ponerlo nuevamente en marcha. Todo ello a su vez está directamente relacionado con las revoluciones a las que gira. Si intentamos tal acción el sistema nos contestara con el siguiente mensaje.

Ilustración 57: Mensaje informativo que protege a la bomba contra cambios bruscos de velocidad.

En cuanto la intensidad baje del valor preestablecido nos permitirá ponerlo en marcha. Para aumentar el realismo, ya que lo común en este tipo de dispositivos es que estén acoplados a variadores de frecuencia, por lo que el arranque es progresivo, se ha hecho que los valores medidos de intensidad, revoluciones y presión aumenten su valor paulatinamente, hasta llegar al rendimiento de trabajo correcto, con lo que se estabilizan con las pequeñas fluctuaciones típicas del proceso normal.

• En la parte inferior derecha del reactor, tenemos una bomba que se encarga de extraer el producto acabado del reactor en condiciones normales de funcionamiento. La tarea que realiza es prácticamente idéntica a la de la otra bomba. Sólo existe unas pequeñas diferencias. La puesta en marcha no cambia. Al igual que en el caso anterior depende de que el agitador del reactor se encuentre en marcha para ejecutar la orden de arranque, con el mismo mensaje de error si se incumple este requisito. Sin embargo la prohibición de re arrancar dependiendo de la intensidad, no está activa. Pero hemos incluido otra restricción. Cuando observamos el diagrama, tras la bomba que estamos tratando existe una válvula automática. Sería una incoherencia que nos permitiera poner en marcha dicha bomba sin previamente abrir esta válvula, ya que el trabajo que realizaría esta bomba podría llevar a

Page 66: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

66

una avería. Entonces es lógico que este acto se tenga que realiza previamente, por lo que si no lo hacemos nos generará un mensaje de error.

Ilustración 58: Mensaje de error que informa de que la válvula de salida esta cerrada.

Si cumplimos estos dos únicos enclavamientos la bomba se pondrá en marcha, y de igual manera que en el caso anterior, tenemos tres indicadores para marcarnos la presión, la intensidad y las revoluciones en cada momento de la bomba. De igual forma, tanto el paro como la puesta en marcha son progresivas. Pero hemos incluido una nueva función muy interesante en uno de estos cuadros de medida. Algo muy utilizado en estos sistemas de control industrial, es poder saber la progresión en el tiempo de la variable, pues ello nos informa de la tendencia que tiene, y nos permite actuar con antelación a cualquier exceso o defecto en una variable. En definitiva nos está dibujando una función en el tiempo. En este caso nos representará estos tres valores pertenecientes a la situación online de la bomba. Estas gráficas las podemos extraer al hacer doble Chick en el medidor de revoluciones, pero teniendo en cuenta que está enclavado a que haya algún valor medido, en el caso de que no exista valor, no se ejecuta. Es lógico ya que representar nada es una estulticia.

Una vez hemos hecho doble Chick sobre el cuadro de medida de revoluciones de la bomba de vaciado del reactor, nos aparecerá una pantalla como la siguiente.

Page 67: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

67

Ilustración 59: Pantalla Gráficas de Tendencias.

La pantalla “Gráficas” se ha diseñado de forma básicamente informativa, permite un mínimo de manipulación, pero muy limitado. De este apartado tan solo, se podría hacer un software dedicado, ya que las posibilidades que brinda un buen historial de gráficas de tendencias son muy amplias, y la ayuda que presta al control y prevención de riesgos en un proceso, es importantísimo. Tan solo por ello no podemos dejar nuestro sistema sin introducir este elemento.

No se ha trabajado este punto en profundidad, ya que implicaría prácticamente un proyecto solo para este fin. Pero con la implementación que hemos realizado, será suficiente para plantearlo y ejemplificarlo.

En un proceso real dispondríamos de un registro histórico de días, meses o incluso años. En nuestro caso la medida es online, no está dotada de memoria, es decir una vez se cierra las gráficas se borran. Los gráficos reales no tienen tiempo límite, el nuestro tiene una duración determinada, pasada la cual empezaría de nuevo.

Una vez introducido un poco este tema, podemos exponer el funcionamiento de esta ventana.

Page 68: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

68

Está dividida en dos partes: el recuadro de la izquierda, dedicado al ajuste de las gráficas, y el recuadro de la derecha que nos permite una mínima manipulación de las funciones.

En el recuadro de la izquierda encontramos tres barras de ajuste (POS), la primera se encarga del ajuste vertical de la variable. El valor de este ajuste se ve representado en todo momento en un cuadro informativo a la derecha de dicha barra.

La segunda barra que incluye este apartado, tiene la función de jugar con la amplitud de la gráfica, para poder exagerar los quiebros que esta hace, con el fin de poder observar mejor estos cambios.

Por último tenemos la barra de “Span”, que realiza una multiplicación sobre la primera, de modo que cada aumento de ésta supone el doble de rango en la primera.

Por último nos encontramos con dos botones, el primero tal y como su nombre indica (PAUSA | |), detiene la gráfica y la reanuda al pulsarlo de nuevo. El segundo hace un auto ajuste de posicionamiento vertical, cuando alguna variable se sale del dominio de la ventana. Para ello actúa sobre la barra de ajuste vertical y sobre el span que de forma automática ajusta la variable en el centro de la pantalla, pudiendo después colocarla donde deseemos. Si empleamos este modo, cuando el sistema haya ajustado el canal deseado, nos mostrará un mensaje informándonos de este hecho.

Ya hemos explicado cómo se ajustan las variables, pero no como se selecciona la que deseamos. Para ello entra en juego el recuadro de la derecha. En este recuadro podemos identificar varios canales. Cada canal está referenciado a una variable, que para identificarlos de forma más clara, se ha dotado a cada uno de un color diferente. Para activar o desactivar el canal, se pulsa sobre el botón que tiene el propio nombre. Con ello lo activamos o desactivamos, pero aun no lo seleccionamos para un previo ajuste. Al activar el canal aparecerá a la derecha del mismo un círculo azul que nos indica esto, además de que empezará a dibujarse la función. Para seleccionar un canal cuando lo queramos ajustar, clicaremos con el ratón en el cuadro de color donde pone el tag. Automáticamente un recuadro rojo aparecerá, envolviéndolo, de esta manera queda seleccionado este canal.

• Lo siguiente que encontramos avanzando hacia la derecha es una válvula reguladora. La válvula funciona de forma diferente a los dispositivos explicados hasta el momento. Para su activación no tenemos ningún enclavamiento, ya que es autosuficiente. Pero como su función es regular la refrigeración del intercambiador, si no ponemos en marcha las bombas de agua, que son con las que ha de intercambiar temperatura, no tiene mucho sentido actuarla. Cuando hacemos “click” sobre la válvula nos aparece una nueva ventana.

Page 69: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

69

Ilustración 60: Reguladora intercambiador.

En esta ventana podemos regular la temperatura del intercambiador de dos maneras: de forma manual o automática.

En el intercambiador se ha creado un generador de temperatura aleatorio, para simular un proceso en funcionamiento. De esta manera se pueden hacer maniobras simuladas de regulación de temperatura.

El regulador contiene dos barras de progreso: la primera nos indica la reacción que tiene la temperatura, es decir, si la temperatura se incrementa, la barra crece, y si se decrementa la barra encoge. En la segunda, la apertura de válvula que tenemos en cada momento. Estos datos podemos verlos también de forma numérica en los dos cuadros de medida inferiores. De los dos cuadros, en el superior tenemos la temperatura que queremos controlar, y en el recuadro interior nos dice en % la abertura de la válvula.

Ésta se puede regular de forma manual mediante la barra de desplazamiento que hay bajo los cuadros de medida. Podemos realizar aperturas de 1% mediante las flechas o mas grandes desplazando el cursor. Finalmente podemos hacer que todo ello actúe de forma automática regulando a una temperatura prefijada, pulsando el botón con las flechas en círculo. Cuando funciona en modo automático las flechas giran de forma circular, cuando está en forma manual estas detenidas.

Page 70: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

70

• Todos los demás elementos exceptuando una reguladora VA2, funcionan exactamente igual, al pulsarlas nos pregunta si queremos o no ejecutarlas, si decimos que sí se ponen en verde, de lo contrario permanecen inmutables.

Ilustración 61: Dispositivos.

La mayoría al ponerlos en marcha inducen a que los cuadros de medidas que dependen de ellos tanto sean por el propio dispositivo, como si es por la línea que lo precede, empiecen a reflejar valores.

• El último dispositivo de funcionamiento diferente a los demás es la válvula reguladora VA2. Esta válvula funciona prácticamente igual que la reguladora de agua que hemos explicado anteriormente, con algunas diferencias.

Ilustración 62. Reguladora VA2

Visualmente podemos ver que son muy parecidas, pero existen algunas diferencias importantes de funcionamiento. Veamos la ilustración 62. Podemos observar que en la parte superior izquierda existe un pequeño menú llamado “Ajuste”. Para explicar este

Page 71: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

71

comando, debemos aclarar un aspecto sobre esta válvula. Al final del proyecto veremos que se controlan cuatro dispositivos reales, tres de los cuales son unos ventiladores que simulan ser motores del proceso y el cuarto elemento es una válvula reguladora, que está físicamente ejemplificada mediante los tres displays de 7 segmentos de un circuito contadora. Además este último está también reflejado en el software del PLC mediante tres displays digitales, pero implementados por software. Existe la posibilidad de que el valor que tenemos en el PLC y el que tenemos en esta reguladora no coincidan, esto es muy posible cuando ponemos en marcha el sistema. Con este botón sincronizamos a cero los dos elementos tanto de la estación de trabajo como el del PLC.

Las dos barras de progreso tienen la misma finalidad que en el caso anterior, la única diferencia es que anteriormente medían temperatura en la primera de ellas y ahora miden caudal. La segunda sigue refiriéndose a la apertura de 0 a 100.

Los dos marcadores siguen la misma línea, el primero nos indica el caudal en m3 y el segundo la apertura en %.

Una de las mayores diferencias reside en el control. Sólo podemos aumentar o disminuir la apertura de 1 en 1%, y no existe el control automático.

Otra de las mayores diferencias es que esta reguladora posee gráfica de tendencias, con lo que podemos medir en todo momento el caudal y la apertura que necesitamos.

3.3. Puerto Paralelo. Para continuar con la exposición del proyecto explicaremos brevemente el funcionamiento del puerto paralelo, de manera que podamos entender el funcionamiento del bus que hemos creado, para la comunicación del sistema.

3.3.1. Introducción. Un puerto paralelo es una interfaz entre una computadora y un periférico, cuya principal característica es que los bits de datos viajan juntos, enviando un paquete de byte a la vez. Es decir, se implementa un cable o una vía física para cada bit de datos formando un bus. Mediante el puerto paralelo podemos controlar también periféricos como focos, motores entre otros dispositivos, adecuados para automatización. El puerto paralelo más conocido es el puerto de impresora (que cumplen la norma IEEE 1284, también denominados tipo Centronics) que destaca por su sencillez y que transmite 98 bits. El puerto paralelo de las computadoras, de acuerdo a la norma Centronics, está compuesto por un bus de comunicación bidireccional de 8 bits de datos, además de un conjunto de líneas de protocolo. Las líneas de comunicación cuentan con un retenedor que mantiene el último valor que les fue escrito hasta que se escribe un nuevo dato, las características eléctricas son:

• Tensión de nivel alto: 3,3 o 5 V. • Tensión de nivel bajo: 0 V.

Page 72: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

72

• Intensidad de salida máxima: 2,6 mA. • Intensidad de entrada máxima: 24 mA.

La estructura consta de tres registros: de control, de estado y de datos.

• El registro de control es un bidireccional de 4 bits, con un bit de configuración que no tiene conexión al exterior, su dirección en el LPT1 es 0x37A.

• El registro de estado, se trata de un registro de entrada de información de 5 bits, su dirección en el LPT1 es 0x379.

• El registro de datos, se compone de 8 bits, es bidireccional. Su dirección en el LPT1 es 0x378.

3.3.1.1. Características físicas del puerto paralelo. La característica más relevante del puerto paralelo es que es capaz de transmitir 8 bits de datos simultáneamente a través de 8 líneas en paralelo. La distancia máxima del cable es de 2 a 4 metros, lo que reduce mucho su ámbito de aplicación. A cambio la velocidad de transferencia puede ser mayor que la de un puerto serie. Las señales eléctricas que utilizan TTL en lógica positiva: 0 voltios para el 0 lógico y 5 voltios para el 1 lógico. En la tabla siguiente se muestra un resumen de las señales del puerto paralelo y la asignación de los contactos en los tres tipos de conectores.

PUERTO PARALELO. A B C NOMBRE 1 1 15 /C0 /STR S STROBE

2 2 6 D0 D0 S

3 3 7 D1 D1 S

4 4 8 D2 D2 S

5 5 9 D3 D3 S

6 6 10 D4 D4 S

7 7 11 D5 D5 S

8 8 12 D6 D6 S

9 9 13 D7 D7 S

BUS DE DATOS

10 10 3 S6 /ACK E ACKONELEDGE

11 11 1 /S7 BSY E BUSY

12 12 5 S5 PAP E PAPER OUT

13 13 2 S4 OFON E OFF-ON

14 14 17 /CT /ALF E AUTO LINE FEED

Page 73: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

73

15 32 4 S3 /FEC E ERROR

16 31 14 C2 /INI S INICIALIZAR

17 36 16 /C3 /DSL S SELECT

18 HLH

36 PLH

Resto de líneas a masa.

MASA

Tabla 2: asignación de los contactos en los tres tipos de conectores.

Ilustración 63: Conector DB 25.

Si deseamos utilizar el puerto paralelo para otros usos distintos de la conexión a una impresora sabemos que disponemos de las siguientes señales genéricas en función del tipo de puerto.

El puerto paralelo en los PC’s se presenta siempre como un conector DB-25 hembra al que se suele conectar un cable CENTRONIC de la impresora por el extremo DB-25 macho.

Los nombres y funciones de las señales se relacionan con la conexión de una impresora paralelo, pero desde el punto de vista más general, podemos ver el puerto paralelo como un conjunto de E/S digitales a las que nombraremos según el tipo de registro. De este modo, las salidas son las líneas D0-D7 del registro de datos y las líneas /C0, /C1, C2 y /C3 del registro de control. Las entradas son S3, S4, S5, S6 y /S7.

Las señales de / indican lógica negativa: si el bit /S7 está a uno en la línea 11 hay cero voltios.

La norma IEE 1284 define 3 tipos de conectores:

• Tipo A: Se corresponde con el clásico conector DB25 macho que se suele conectar al ordenador, posee 25 conectores.

• Tipo B: Se corresponde con el conector CENTRONIC que se suele conectar a la impresora, posee 36 conectores.

• Tipo C: Es un conector relativamente nuevo que se puede ver en algunos dispositivos periféricos, posee 36 conectores.

Page 74: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

74

3.3.1.2. Registros del puerto paralelo (SPP). En el PC original se montó un puerto CENTRONIC o SPP (Standard Paralell Port) cuyo uso original fue el de conectar una impresora paralelo. Este puerto tiene el nombre reservado de LPT1 o PRN bajo MS-DOS. En la actualidad este tipo de puertos, si bien es cierto que aun se montan en los PC’s, están siendo reemplazados por los puertos USB. El número de puertos paralelo y serie instalados en el PC pueden ser leído del área de datos de la BIOS en las siguientes direcciones.

Detección del número de puertos Dir. Bits Contenido Valor típico

0040:0011 D0-D1 Número total de puertos paralelo 0x01

0040:0011 Número total de puertos serie 0x02 Tabla 3: Detección del número de puertos.

Cada uno de los puertos instalados dispone de 3 direcciones de E/S para el acceso a 3 registros de 8 bits cada uno. La dirección base de cada uno de estos puertos se puede obtener en el área de la BIOS.

Direcciones base de los puertos paralelos Dir. De memoria Contenido Valor típico

0040:0008 Dir. Base para LPT1 0x03F8

0040:000A Dir. Base para LPT2 0x0278

0040:000C Dir. Base para LPT3

0040:000E Dir. Base para LPT4 Tabla 4: Direcciones base de los puertos paralelos.

A partir de la dirección base, cada puerto ocupa 3 direcciones de E/S.

Registros del puerto paralelo. Dir. De E/S Acceso Contenido E/S LPT1

DIR_ES_BASE ESCRITURA Registro de datos (D0….D7) 0x3F8

DIR_ES_BASE+1 LECTURA Registro de estado (S0..S7) 0x3F9

Page 75: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

75

DIR_ES_BASE+2 LEC/ESC Registro de control (C0..C7) 0x03FA Tabla 5: Registro del puerto paralelo..

Ilustración 64: Propiedades del Puerto paralelo.

A continuación mostraremos los tres registros del puerto paralelo SPP.

Page 76: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

76

Ilustración 65: Registros SPP.

La primera columna indica la dirección de E/S donde se encuentra el registro. La segunda columna indica el tipo de acceso: lectura o escritura. Obsérvese como el registro de estado es de sólo lectura mientras que el de control es de lectura/escritura. El registro de datos es de lectura y escritura: al escribir en él cambiamos la tensión en las líneas 2 a 9 del conector DB25, si leemos de él sabremos la tensión actual de esas líneas. Si se encuentra activado el modo bidireccional (bit C5 del registro de control) el registro de datos es de sólo lectura y es un reflejo de las tensiones aplicadas en las líneas 2 a 9 del conector.

La columna INV indica si se produce una inversión hardware por parte de la interface CENTRONICS, por ejemplo, cuando el bit /S7 está a uno, en la línea 11 del conector se tiene cero voltios.

La columna L indica si la señal correspondiente del protocolo CENTRONICS va con lógica positiva o con lógica negativa, por ejemplo, la línea /ACK (reconocimiento de

Page 77: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

77

datos) informa al PC de que se ha recibido un nuevo dato poniéndose a nivel bajo. Sin embargo, puesto que /ACK se corresponde con el bit S6 y éste no tiene inversión hardware cuando en la línea existan cero voltios en S6 habrá un 0 lógico.

Para evitar confusiones, se utilizan únicamente las nomenclaturas de las líneas a partir del bit que ocupan. Las que trabajan en lógica negativa son: /S7, /C0’, /C1 y /C3. Como resumen se muestra a continuación el mapa de entradas / salidas para el puerto paralelo.

El bit C$ se utiliza para activar las interrupciones en la interfaz, normalmente las rutinas de la ROM-BIOS que manejan el puerto no utilizan interrupciones para comunicarse con la impresora ya que se trata de un dispositivo de salida; sin embargo, se puede conseguir que el puerto lance una interrupción (IRQ5 o IRQ7 típicamente) cuando se produce una transición en el bit S6 (/ACK) correspondiente a la línea 10 del conector DB25.

Ilustración 66: Mapa de E/S.

3.4. Circuito Interface (Bus paralelo). Una vez hemos descrito el funcionamiento de la estación de trabajo y del puerto paralelo, continuaremos explicando cómo hemos hecho para hacer efectiva la comunicación. Es decir en definitiva la arquitectura de nuestro bus.

3.4.1. Introducción Este circuito será el primero de otros tres, que son junto al PC que hace de Estación de trabajo y el que realiza la función de PLC conforman el hardware del proyecto. En este primer circuito realizaremos la función de comunicación Estación de Trabajo al PLC. Análogamente sería la red por la que viajarán los datos, bajo el protocolo de comunicación adecuado, ya sea un bus “Profibus”, o cualquier otro. En nuestro caso será

Page 78: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

78

simplemente un lenguaje binario o BCD. Esta comunicación se realizará mediante el puerto paralelo de los dos PC’s. Es un método fuera de uso hoy en día, pero para realizar una demostración comprensible es más que suficiente, El diálogo se realizará a través de la interpretación y el procesado de códigos binarios. Cada uno de ellos corresponderá a la orden de activación o desactivación de un dispositivo, así como códigos de generación de alarmas de funcionamiento incorrecto de dispositivos, que ya explicaremos en el apartado correspondiente al circuito Estación Remota.

Ilustración 67. Vista Circuito interface.

3.4.2. Descripción. Como ya hemos explicado anteriormente, el puerto paralelo del PC, está compuesto por un conector DB25 hembra, estas 25 patillas están dispuestas en tres grupos. Salidas de control, salidas de datos y entradas.

Page 79: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

79

Ilustración 68: Patillaje DB25.

Para las salidas de datos contamos con 8 líneas numeradas de la D0 a la D7 en tecnología TTL, es decir ± 5V, las cuales como su nombre indica (puerto paralelo), da señal a los 8 bits simultáneamente. Esto nos posibilita combinar esta salida desde el 0 (00000000), hasta el 255 (11111111). Así mismo contamos con otra salida, la salida de Control, la cual posee cuatro líneas desde la C0 a la C3, nos permite codificar desde el 0 al 16, pero con una peculiaridad, que tres de las líneas funcionan negadas, es decir la única salida directa es la C2, por lo que a la hora de usarla es un aspecto importante a tener en cuenta, sobre todo en la implementación por software. Finalmente las entradas, están numeradas desde la S3 a la S7, las tres primeras no son accesibles por lo que esto nos limita a la hora de recibir datos, ya que pudiendo codificar hasta 255 nos hemos de conformar con 32. Tendremos en cuenta sin embargo, que la última entrada la S7 es negada y funciona con lógica negativa. Un aspecto importante para el diseño del circuito es conocer el comportamiento de las entradas y salidas, ya que sin este conocimiento previo, el planteamiento del mismo sería imposible. En cuanto a las salidas se refiere no existe problema alguno, ya que se trata simplemente de dar orden de puesta a nivel alto o bajo, mediante unos comandos, que explicaremos en el apartado de software. La dificultad, recae en las salidas. Las salidas al igual que el resto, están basadas en TTL, pero a diferencia de las entradas, su estado inicial es fácilmente conocido, se encuentran siempre a nivel lógico alto (1), Este nivel permanece invariante hasta que se le fuerza a 0 mediante la puesta a nivel bajo de la línea de forma física. Es decir, de alguna manera hay que llevar esta línea a potencial 0. Esto solo se puede hacer mediante el control de algún tipo de dispositivo. El sistema ha sido diseñado para que la comunicación entre la estación de trabajo y el PLC sea bidireccional. Con este fin se han creado dos carriles, uno de tráfico de datos ET PLC y otra PLC ET. Los datos que correrán desde la ET compartirán carril con otra corriente proveniente de la Estación Remota (ER). Empezaré la explicación de este circuito de la misma forma en que lo he concebido y en idéntico orden. Nos situamos en la pantalla de un PC, que ficticiamente está ubicado en la sala de control de una fábrica, la cual fabrica el producto X. El operario que controla el

Page 80: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

80

proceso desde esta interface decide actuar sobre un elemento, ya sea válvula, motor, o simplemente modificando una consigna de temperatura, etc. Cuando éste realiza tal acción se produce una cascada de bits que fluye desde el puerto paralelo de dicha estación de trabajo en dirección a la red de comunicación. Puesto que todos los elementos de dicho sistema no utilizan el mismo idioma, hay que traducirlo para que se puedan entender. Esta es la función principal del circuito en cuestión, por el cual recibe este nombre. Los bits entran por uno de los puertos DB25, éste es bidireccional, por lo que puede transmitir datos en ambos sentidos. Pero de momento trataremos solo la afluencia de bits de entrada. Igual que este puerto, el dispositivo cuenta con tres puertos más de idénticas características, pero finalidades muy diferentes. Una vez han atravesado el portal de acceso, la orden del operario en forma de bits, entra en un circuito electrónico el cual se encargará de dirigirlos adecuadamente y con un orden correcto. El sistema tiene dos carriles de opuestas direcciones, el carril actual dirección PLC tiene una peculiaridad respecto al de regreso. Este puede albergar datos de entrada de dos fuentes diferentes: ET y de la Estación Remota (ET). Es por ello que para separar los unos de los otros se ha decidido usar una puerta lógica suma (OR) 74LS32, que evita el trafico inadecuado de bits en sentido peligroso.

Ilustración 69: 74LS32

Al mismo tiempo hará funciones de driver, para impedir que el puerto paralelo pueda sufrir por un consumo elevado de corriente al alimentar algún dispositivo. Ahora tendremos que actuar de alguna manera sobre un dispositivo que nos pueda llevar físicamente a cero las entradas del puerto paralelo del PLC. Como es lógico nos hemos decantado por un transistor, ya que son de fácil manejo y muy sencillo funcionamiento. De toda la amplia gama de transistores del mercado se ha elegido el BD137. Podemos pensar que para el uso que le daremos es un transistor de mucha potencia, y estará sobredimensionado quizás en demasía. Esta afirmación es cierta en su totalidad. Pero la razón es que para la implementación de otros circuitos del proyecto sí que se necesita algo más de potencia. Por lo que para unificar criterios usando el mismo en todos los circuitos, decidí su empleo.

Page 81: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

81

Ilustración 70: BD137

¿Cómo logramos con un transistor poner las entradas del PLC físicamente a un nivel lógico cero? En la patilla 2 del transistor o colector conectamos una línea de potencial fijo cero, más comúnmente conocido como a masa. En la patilla 1 o emisor conectamos la entrada que deseamos que cambie su potencial a nuestra voluntad, y finalmente la patilla 3 o base, se le excita con la señal de salida de la puerta suma. Cuando esta última nos proporciona un 1, el transistor se pone en conducción ya que superamos el umbral EB de 0.6 voltios, por lo que la resistencia CE se encuentra en su valor mínimo produciéndose un cierre del circuito, haciendo de esta manera que la entrada seleccionada encuentre al otro lado del transistor un derivación a masa, por lo que cambia su potencial. Este cambio de potencial se traduce en un cambio de estado que el PLC es capaz de detectar y actuará en consecuencia. Sin embargo esto tiene un pequeño inconveniente: el transistor invierte la señal que recibe, es decir, cuando recibe un 1 en la base, el transistor conduce y pone a cero la entrada. Este pequeño conflicto es un concepto a tener en cuenta a la hora de la implementación con software, del programa, ya que si lo obviamos tendremos serios problemas de comunicación. Una vez recorrido un carril, nos encontramos en el PLC. Realicemos el camino inverso, pero por el sendero opuesto. Lo primero que observamos desde esta perspectiva, es que también tenemos una peculiaridad diferente al ya recorrido. Esta característica diferenciadora es que usamos dos tipos diferentes de salidas, cosa que en la ET no. Esto se debe a que en los procesos industriales reales la ET no tiene capacidad de ejecución y el PLC si. En nuestro caso no podría ser diferente, ya que de lo contrario nos alejaríamos de la realidad. De ahí que tengamos dos tipos diferentes de salidas: unas se encargan de activar y desactivar los dispositivos físicos tales como motores, bombas, actuadores, niveles, etc. y la otra sirve para informar a la ET que la petición se ha realizado con o sin éxito. Es decir es tan solo un camino de información, no de ejecución. Sigamos con los bits que el operario había lanzado a nuestra red de control industrial. El PLC ha recibido la información y decide en consecuencia. Él sabe lo que ha de hacer con

Page 82: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

82

esos datos, ya que posee una base de datos donde buscar y traducir la información, de tal forma que opere la información adecuadamente. Una vez traducido, decide porque línea ha de mandarlos, si es una orden de ejecución usará un camino, que son las salidas de control del puerto paralelo y si es solo información utilizara las salidas de datos. Supongamos que lo que deseaba el operador era poner en funcionamiento un dispositivo. Esto llevara al PLC a tomar la decisión de usar las salidas de control para poder ejecutar la orden. En cuanto el código sale del puerto del PLC, entra por el 2º puerto de entrada salida del circuito interface. Este puerto es un conector DB25 idéntico al primero. Atravesado el mismo llegamos nuevamente a la placa de circuito impreso, a ella accederán los datos mediante un driver 74LS07. El driver es una puerta lógica muy simple, ya que su salida tiene siempre el mismo valor que a su entrada. Su función es la de alimentar a los dispositivos conectados en sus salidas, de tal manera que el elemento que da la señal, no cargue con el peso del consumo del dispositivo final. De esta manera se protege el puerto paralelo del ordenador de cualquier sobrecarga. Tiene una peculiaridad, necesita una resistencia de pull-up. Una resistencia de pull-up es una resistencia de polarización positiva. Es decir las salidas han de estar alimentadas a cinco voltios a través de una resistencia de polarización, de lo contrario no funciona.

Ilustración 71: 74LS07.

La información atraviesa el driver, cuyo camino le conduce directamente al tercer puerto DB25 del dispositivo interface. Este puerto tiene la finalidad de comunicar el PLC con los dispositivos que controlan los elementos finales. Hablamos de PLC’s remotos, variadores de frecuencia, actuadores, etc. Esta comunicación en nuestro sistema le conducirá a un segundo circuito, el cual lo conoceremos por el nombre de Estación Remota (ER). Este circuito emulará estos dispositivos de control. El funcionamiento del mismo lo expondremos más adelante.

Page 83: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

83

3.5. Circuito Estación Remota.

3.5.1. Introducción. La Estación Remota es el elemento del sistema de control distribuido encargado de controlar localmente las instalaciones y procesos que se le asignan, en los proyectos de automatización y control. Es la parte que controla localmente y de la forma más autónoma posible la sección del proceso que se le encomienda. Consta de dos partes: • Controlador de procesos y comunicaciones. • Electrónica de adquisición y telemando (entradas / salidas).

Ilustración 72. Montaje estación remota.

Page 84: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

84

Estos dispositivos pueden estar dotados de inteligencia y de una limitada capacidad de decisión, siempre muy por debajo de la del PLC. Su función es la de recibir las órdenes del PLC y decidir su ejecución local entre un número pequeño y limitado de dispositivos. Ésta quizás sería la mayor diferencia entre estos y un PLC, ya que este último toma decisiones sobre todo un sistema, o sobre un gran parte del mismo. El circuito que ahora analizaremos tiene la función de determinar qué dispositivos acciona o para, según interpreta las órdenes que el PLC le indica. Puesto que es sólo una simulación de un sistema pequeño, tan solo dispondremos de una estación remota, pero un proceso puede tener un gran número de ellas. Esto implicará que todos los dispositivos serán activados y desactivados por la misma estación remota, algo que podría llevar al equívoco de pensar que está al mismo nivel que un PLC. El circuito constará de dos partes claramente diferenciadas por su funcionalidad y relevancia. En primer lugar tendrá un módulo de entradas, procedentes del circuito Interface. Este módulo se encargará de recibir las señales que prodecedentes de la ET y que tras ser procesadas por el PLC se retornan al circuito Interface (IT) y a su vez este los remite a la ER. Estas señales son códigos binarios que corresponden a las órdenes de activación o desactivación de los dispositivos finales, así como, del control de un tercer y último circuito, que simulará visualmente mediante tres displays de 7 segmentos, el porcentaje de apertura y cerrado de una válvula ficticiamente ubicada en campo. Y finalmente el módulo de control de los dispositivos finales, que en este caso se tratará de 3 pequeños ventiladores, que simularan los motores que funcionarían en un proceso real, y que están gráficamente representados en el software.

3.5.2. Descripción. El circuito en cuestión, recogerá 8 órdenes codificadas de forma BCD. Este número se ha decidido, no por limitaciones de sistema ni por protocolos, más bien por la creencia de que con la simulación de cuatro elementos finales era suficiente para exponer el funcionamiento del lazo de control y hacer comprensible su funcionamiento. Situémonos en el contexto expuesto en el circuito Interface. Esto nos lleva a ubicarnos en el puerto de entrada salida 3 del dispositivo. Cuando el PLC ha determinado que la respuesta que ha de tomar es del tipo ejecutiva, no informativa, dijimos que utilizaba para tal fin las salidas de control que posee. Estas salidas constan de 4 líneas, donde podemos codificar hasta 16 códigos BCD. De estos 16 tan sólo necesitamos 8, tres activarán los tres ventiladores, otros tres los desactivarán y el resto se usan para incrementar o decrementar el contador del circuito número 3. Siguiendo con la orden que ejecutó el operador en la ET, nos encontramos un código BCD de 4 bits que viaja en dirección a la ER. Una vez llegue al puerto de entrada de la ER, el cual es un DB25 como todos los que conforman el sistema, nos encontramos con el primer problema de diseño que hemos tenido que salvar para conseguir un funcionamiento adecuado. Ha consistido en localizar un dispositivo que nos traduzca el BCD y decida sobre que elemento se actúa si entrar en la complejidad de un sistema con

Page 85: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

85

microprocesador. Para ello se ha optado por el empleo de un decodificador BCD a decimal de 10 salidas. Es decir es capaz de decodificar del 0 hasta el 9.

Ilustración 73. Decoder 74LS42.

Este chip tiene un comportamiento peculiar, ya que las 10 líneas de salida se encuentran permanentemente a nivel alto hasta que una es seleccionada, la cual cambia su estado a bajo. Es decir funciona con lógica negada. El comportamiento del chip es ideal, si no tenemos en cuenta que la conexión de las salidas del puerto paralelo se hará de modo secuencial. Esto quiere decir, que al poner las líneas de salida del puerto paralelo al nivel lógico correcto, no todas lo harán a la vez, hay un tiempo de lapso. Este tiempo de lapsus puede generar diferentes combinaciones BCD, al tiempo que se intenta generar la deseada, con los posibles errores que todo ello conlleva. Para solucionar esto se ha empleado un quinta línea, a la que llamaremos línea de activación. Esta línea da permiso para que los datos accedan al 74LS42, de tal manera que lo hagan todos al unísono.

Ilustración 74. Línea de activación.

Para ello necesitan algo más que una simple línea. Necesitan un dispositivo donde actuar y que haga su vez de puerta que tan solo se pueda abrir cuando la línea de acceso de paso. Este elemento es una puerta AND. Podemos ver la disposición adoptada a tal efecto en la ilustración 72 y como sólo es posible pasar los datos de las 4 líneas de entrada a la salida, conectando la línea de activación. Así garantizamos que todos los bits son entregados a la vez, por lo que el decodificador sólo podrá interpretar la orden adecuada.

Ahora el decodificador ya tiene su orden correcta y pone la salida correspondiente a cero durante un margen de tiempo reducido. Necesitamos que un dispositivo sea capaz de leer

Page 86: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

86

este cambio de flanco y a su vez memorizar el estado, para que no desaparezca tan pronto como el decodificador cambie el mismo. La solución a este trabajo lo hace perfectamente un flip-flop J/K. Trabajando directamente en sus entradas de set y reset obtenemos los resultados deseados. Para nuestra simulación hemos escogido el integrado 74LS74.

Ilustración 75. Flip - flop 74LS74.

De esta manera cuando queramos conectar un dispositivo, codificaremos la orden de conexión con una combinación de 4 bits del 0 al 9 de tal manera que cuando se produzca, ásta pondrá a nivel bajo la salida del decodificador, y como el flip-flop funciona por flanco descendente, activará su entrada de set poniendo la salida Q a 1. Análogamente cuando queramos su desconexión, ejecutaremos el código para este fin, produciendo el nivel bajo en la salida adecuada del decodificador, y dando un flanco de bajada al reset, con lo que la salida Q adoptara un nivel lógico cero. Ahora tenemos las órdenes de marcha y paro estables e inmutables. Sólo nos quedaría hacer que estas cumplan su misión actuando sobre algún dispositivo real.

Ilustración 76. Relé.

Para ello se excita la base de un transistor mediante la salida Q del flip-flop. Ello hará que cuando se encuentre a nivel alto, el transistor entre en saturación y cuando esté a nivel bajo en corte. Esto unido a un relé conectará y desconectara los ventiladores que actuarán como elementos finales.

Page 87: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

87

3.6. Circuito Contador. 3.6.1. Introducción.

Este circuito será junto a los ventiladores que hacen la función de dispositivos finales del proceso industrial, una válvula virtual, ya que representará el controlador o iniciador que llevan estos elementos para ajustar la apertura de la misma en %. Constará de tres displays digitales de 7 segmentos, los cuales contarán de 0 a 100. Cada pulsación de apertura o cerrado que el operador realice en la estación de trabajo, se traducirá en un incremento o decremento numérico visible mediante estos displays. Como para llevar esto a cabo tan solo disponíamos de dos líneas hemos tenido que hacer un montaje un tanto particular que pasaremos a presentar de forma mucho más amplia seguidamente.

Ilustración77. Circuito Contador.

3.6.2. Descripción. Como comentábamos en el apartado anterior, este dispositivo simula la apertura de una válvula reguladora en %. Para hacer esto disponíamos tan solo de dos líneas, una con la

Page 88: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

88

finalidad de incrementar y otra de decrementar. Para poder disponer de estas dos líneas, hemos aprovechado el decodificador del circuito anterior. Como esta funcionalidad no tenía un peso importante en el circuito ER no lo hemos expuesto, algo que haremos a continuación. Del mismo modo que en la ER dependiendo del código BCD activaba o desactivaba los elementos finales de este lazo de control. Existen dos códigos binarios asignados exclusivamente para las operaciones de incrementar y decrementar el contador. Cuando el decodificador recibe cualquiera de estas dos señales, activa la línea de salida correspondiente, con la única diferencia de que en este caso no existe flip-flop a la salida, ya que ahora lo que nos interesa son valores pulsantes, no estacionarios, puesto que el circuito lo que cuenta son pulsos, o cambios de flanco. Las dos líneas que nacen a la salida del decodificador son directamente las entradas que utilizará para su cuenteo el circuito contador. Supongamos que tenemos el circuito en reposo, por lo que deberían verse tres ceros, uno en cada uno de los display de 7 segmentos. En esta posición inicial pulsamos el botón de incrementar un 1% la apertura de la reguladora. Tras recibir el decodificador la debida orden da un el flanco descendente en la línea de salida correspondiente, esta llega al circuito Contador. Este circuito consta de tres partes. La primera está compuesta por tres circuitos integrados 74LS192, que son sendos contadores. Estos chips poseen entradas de incremento (up) y de decremento (down) lo que nos permite el conteo en los dos sentidos.

Ilustración 78. 74LS192.

Poseen también las salidas de acarreo (carry) y (borrow) muy importante a la hora de ordenar el paso de un display a otro. Cada contador es capaz de contar desde 0 hasta 9, cuando alcanza a los valores extremos 0 y 9 utiliza las salidas de carry o borrow para incrementar o decrementar el siguiente contador. Es decir cuando pasamos de un 9 a un 10 como un display de 7 segmentos sólo es capaz de representar hasta 9, para lograr el 10, cuando contabiliza los 9 pulsos al llegar al décimo, automáticamente se pone a cero y da un pulso de acarreo a la entrada up del siguiente contador. Análogamente cuando bajamos de un 10 a un 9 el contador da una señal de borrow haciendo que el contador que marca el uno decremento y posicionando al contador que marca un 0 en un 9. Una vez ha hecho el conteo, este C.I. nos da esta información codificada en BCD a través de sus 4 salidas. Pero

Page 89: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

89

para poderlas representar en el display no es suficiente con esto, necesitamos un paso intermedio. Este paso es un conversor de BCD a 7 segmentos (74LS47).

Ilustración 79. 74LS47

Como su nombre indica este chip tiene la única función de traducir la información BCD que reciben sus cuatro entradas en siete salidas capaces de gobernar los 7 diodos led que componen el display.

Ilustración 80. Display 7 Segmentos Ánodo común.

Existen dos tipos de displays los de ánodo común y los de cátodo común, la diferencia es bien sencilla. Un display no es más que 7 leds juntos dentro de un mismo encapsulado. Para ahorrar tamaño no es necesario colocar las 14 patillas necesarias para todos los leds, ya que sería absurdo. Para ello se utiliza como común o todos los positivos, que sería ánodo común, o se utilizan todos los negativos, cátodo común. Nosotros nos hemos decantado por la de ánodo común. El funcionamiento en principio es el mismo, no presentauna complejidad mayor, pero hemos decidido así por disponibilidad de material.

Page 90: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

90

3.7. PLC

3.7.1. Definición de PLC. Puede definirse como un equipo electrónico programable en lenguaje no informático y diseñado para controlar, en tiempo real y en ambiente industrial, procesos secuenciales.

Los autómatas son equipos electrónicos de cableado interno independiente del proceso a controlar (hardware). Un autómata se integra en la máquina o instalación a controlar mediante un programa que define la solución de las operaciones que se desea (Software) y de un cableado directo a los elementos de entrada y de salida del autómata. El autómata programable realiza funciones de control de tipo lógico y secuencial dentro de las fábricas, es decir, en la proximidad de las máquinas en un entorno industrial. El funcionamiento puede adaptarse plenamente a la formación y hábitos del personal de fabricación y mantenimiento.

El número de instrucciones procesadas difiere de un autómata a otro. El programa es directamente concebido por un automatista, electricista o mecánico. Este trabajo se facilita aún más mediante el empleo de consolas de programación. Se convierte en un equipo específico una vez dotado de un programa y acoplado con los elementos de entrada y salida. El programa debe esta alojado en una memoria interna. Según el tipo de memoria interna de programa, se distingue entre autómatas de programación libre y autómatas de programación intercambiable.

Los autómatas de programación libre van equipados con una memoria de lectura / escritura (RAM o memorias vivas) en donde puede introducirse el programa sin más dispositivos adicionales que la consola de programación. Ello permite también leer un programa ya introducido. La memoria RAM pierde su contenido en caso de caída de tensión, pero ello puede evitarse mediante una batería tampón.

Los autómatas de programación intercambiable van equipados con una memoria de solo lectura (PROM o EPROM), también denominada memoria muerta que debe cambiarse en caso de modificación del programa. Las memorias EPROM pueden borrarse mediante una radiación ultravioleta y posteriormente reprogramadas, mientras que las PROM no pueden modificarse una vez ya se hayan programado. Si se desea realizar modificaciones será preciso programar una nueva memoria PROM que sustituirá a la antigua.

Un autómata se presenta bajo la forma de un conjunto de tarjetas o circuitos impresos en los que se han montado componentes electrónicos integrados. Estos se alojan en paneles o RAC´s que las protegen mecánicamente. Las conexiones entre las diferentes tarjetas se realizan por medio de un circuito impreso denominado BUS en la parte posterior de los paneles.

El bloque de entradas / salidas sirve de órgano de enlace con la periferia. Memoriza los valores presentes en las líneas de entrada en el momento de la toma en consideración de los datos; así mismo sitúa los valores calculados sobre las líneas de salida.

El procesador es la unidad de tratamiento lógico que ejecuta los cálculos booleanos en función de las instrucciones del programa. La CPU lleva igualmente consigo un conjunto

Page 91: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

91

de variables internas utilizables para las memorizaciones intermedias, registros de tiempo y de conteo, registros de índice, etc.

Una vez hemos introducido de forma muy general que es y como funciona un PLC o Autómata programable podemos empezar la explicación de como hemos diseñado el nuestro.

3.7.2. Introducción.

Igual que en el caso de la estación remota, el PLC que hemos usado para implementar este proyecto ha sido un PC, pero en este caso portátil. Este hecho hace que el proyecto sea más transportable, ya que si implementáramos todo con dos PC’s de sobremesa sería difícil y costoso el transporte. También es cierto que encontrar un portátil que incorporara un DB25 no ha sido tarea fácil, ya que si bien en los de sobre mesa aun es corriente en las placas base modernas, en los portátiles por sus requerimientos de tamaño y austeridad, hace años que fue eliminado. Para ello nos hemos decantado, por falta de opciones, de un portátil algo longevo pero funcional. El dispositivo en sí, funciona bajo Windows 98, ya que por capacidad de disco duro y memoria no es capaz de albergar un sistema de mayor potencia. Pero ello no conlleva mayor problema ya que el lenguaje en Visual 6.0 funciona de igual manera y los requerimientos de potencia que son necesarios para el funcionamiento de la simulación, los cubre con creces. De forma similar para este PC se ha desarrollado un software, también implementado en Visual Basic 6.0, Este software es completamente diferente al de la Estación de Trabajo. Esta requería de un diseño gráfico importante para su manipulación, algo que en un PLC no es necesario. Hace años que en la industria han empezado a aparecer PLC’s con pantallas que soportan un pequeño entorno gráfico. Podría decirse que estos autómatas están en un sub-segmento entre estos dos dispositivos, pero siguen haciendo más la función de PLC, ya que están lejos de poderse incorporar como elemento híbrido funcional. Nosotros lo hemos equipado con una pequeña interface gráfica, a modo demostrativo, para poder ejemplificar mejor el funcionamiento del sistema, pero podría obviarse en prácticamente su totalidad y el global funcionaría de igual forma. En nuestro caso el PLC estará compuesto del propio ordenador portátil más un cable CENTRONIC .

3.7.3. Software. El software que se ha diseñado para este sistema se puede dividir en dos pantallas, cada una de las cuales tiene una función específica, pero que para funcionar necesitan del trabajo combinado de ambas.

• Pantalla principal • Pantalla de datos.

Page 92: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

92

3.7.3.1. Pantalla principal

Ilustración 81. Pantalla Principal PLC.

Como comentábamos en la introducción de esta sección, vemos que el entorno gráfico presente en esta ventana, no es demasiado funcional, ya que los parámetros a manipular no son demasiados. Un PLC una vez se le ha programado ha de ser autónomo, por lo que hacer un interface gráfica elaborada constituye una pérdida de recursos.

De todas maneras podemos observar una serie de botones y un pequeño menú, el cual nos da la posibilidad de realizar algunas maniobras, pero muy limitadas. De igual manera que con el software de la Estación de Trabajo, empezaremos a introducirnos en el software por el menú desplegable de la parte superior.

Ilustración 82. Menú..

Si pinchamos en la primera opción llamada “Menú” tan solo encontraremos la posibilidad de salir del programa. Es la única utilidad que tiene este botón.

Page 93: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

93

Ilustración 83. Datos.

Al desplegar el sub-menú “Datos” se despliega una única opción que es la de “ver datos”. Ésta opción lo que hace es activar la segunda venta que conforma este software, que explicaremos en profundidad más adelante.

Hasta aquí llega el menú, ahora tan solo nos queda explicar una seri de botones que hay distribuidos por la pantalla.

Ilustración 84. On OFF.

Como sus nombres indican estos botones tienen la función de arrancar y parar el programa que corre por el PLC. Estos botones son para interrumpir la comunicación momentáneamente por algún motivo, ya que el PLC se pone en marcha automáticamente al conectar el sistema desde la Estación de Trabajo.

En el momento en que el programa se carga, automáticamente lee una serie de bancos de datos que tiene almacenados y los carga en memoria. Estas bases de datos son traducciones que utilizará el sistema para interpretar en cada momento que es cada código que recibe.

El sistema, aunque esté cargado el programa, no tiene capacidad de leer las entradas si no se pulsa el botón de “ON” o se le da la orden desde la Estación de Trabajo. Una vez ponemos en marcha el sistema, va leyendo ininterrumpidamente la entrada del puerto paralelo, cada vez que le llega una información, la memoriza, se queda una copia en memoria y otra copia corre todo el programa. La primera es memorizada, porque como ya explicamos en el apartado en que exponíamos el funcionamiento del puerto paralelo, cuando se genera un código en el puerto, éste se mantiene en este estado hasta que se manda otro. Para evitar que esté leyendo durante mucho tiempo el mismo código, haciendo trabajar inútilmente a todo el software con la misma información, se almacena la primera vez que lo lee, y la segunda y sucesivas lecturas compara lo que lee con lo que tiene almacenado, si es lo mismo, no lo deja pasar, de lo contrario tiene vía libre para circular por el software.

El código que pasa este filtro, es comparado con la base de datos de entradas, y queda identificado, en el caso de que se tratara de una de las combinaciones no asignadas quedaría descartada. Una vez la información es identificada se manda a la siguiente ventana donde se tratará para su posterior salida.

Page 94: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

94

Hemos podido ver que la manipulación en esta ventana es muy limitada, apenas podemos hacer nada, ya que no es necesario.

3.7.3.2. Pantalla Datos

Ilustración 85. Pantalla Datos.

Visualmente podemos ver que esta ventana es algo más completa, pero como comentábamos anteriormente, es todo ilustrativo, para hacer más comprensible el sistema, y también nos sirve como ayuda la información que nos da esta pantalla.

No existen botones que nos permitan manipular información, sucede como en la ventana anterior, porque el hecho de que sea más completa, no implica que sea mucho mas manipulable, aunque es cierto que se pueden realizar más operaciones y que tiene una opción, que luego explicaremos, que si es capaz de ejecutar acciones importantes, pero es solo una excepción.

• Para seguir con la línea marcada hasta ahora, empezaremos introduciéndonos en el programa, por el menú superior, que como en el caso anterior es muy básico y sencillo. En el caso de la opción “Menú” vemos que como en el caso anterior solo nos permite cerrar esta ventana, no tiene ningún uso más.

Page 95: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

95

Ilustración 86. Menú.

• En el caso de la segunda opción “Datos“ veremos que se despliegan dos opciones.

Ilustración 87. Datos.

Antes de continuar, haremos un inciso necesario para poder explicar debidamente como funciona este apartado. Si nos fijamos bien en la ilustración 88, podemos ver que se ha dividido la ventana en 4 recuadros numerados del 1 al 4. Esto en la ventana original lógicamente no se ve, sólo se ha hecho sobre la imagen de la misma para facilitar la explicación. Hay que decir que cuando cargamos la pantalla correspondiente a dicha ilustración, los recuadros 1 y 2 no son visibles. Para que lo sean hay que accionar sendos comandos que ahora explicaremos. Pero por el contrario los recuadros 3 y 4 están activos y visibles siempre.

Una vez dicho esto podemos proseguir con el sub-menú que habíamos preintroducido. Cuando seleccionamos la primera opción “Mostrar Registros IO”, aparecerá en pantalla el recuadro 1.

Ilustración 88. Mostrar Registros IO.

Esta pantalla es muy útil para comprobar a que tag equivale un código binario. Quizás faltaría explicar un punto que no ha quedado del todo claro anteriormente. Las bases de datos están compuestas por 5 registros. Tres de los cuales son los bits de entradas, los bits de salidas y los bits de ejecución, así como dos registro de tags de entrada y tags de salida. Los bits de entrada están directamente relacionados con los tags de entrada. Esto se ha

Page 96: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

96

hecho para comprobar en todo momento que el código correcto activa la opción deseada. Así al enviar un código desde la estación de trabajo ha de coincidir con su tag de entrada. Una vez tenemos el código relacionado con su tag de entrada, se le asigna un código de salida y un tag de salida. El último registro es únicamente para los dispositivos reales que se pondrán en marcha a través de los circuitos electrónicos. Si pulsamos en la parte superior el botón de in, nos saldrá a la izquierda los bits de entrada y los tags que le corresponde a cada código. De igual manera si pulsamos out ocurrirá lo mismo con la salida. Pero si lo que queremos es comprobar un código o un tag únicamente seleccionamos de los recuadros superiores el tag, o el código que queramos, este al ser seleccionado se colocará en la casilla inferior que le pertoque y automáticamente en el otro recuadro aparecerá su información homóloga. No tiene un efecto sobre el sistema, pero es una gran herramienta que nos sirve para verificar si algún código no esta siendo interpretado adecuadamente.

La segunda opción de este sub-menú, “Registro de entradas”, completa la pantalla anterior, si recordamos la ilustración 88, veremos que corresponde al cuadro marcado con un 2.

Ilustración 89. Registro de entradas.

Vemos que al ejecutar este comando, el recuadro de la ilustración 91 se ha completado con otro recuadro. Éste tiene dos funcionalidades: la primera va registrando todos los tags que pasan el filtrado que recorren todo el software hasta el final. Es decir, todas aquellas órdenes de marcha, paro, etc. que el PLC reciba y acepte su tag aparecerán en pantalla quedando registrado. Es muy interesante porque es una manera de saber si se está ejecutando lo mismo que se está ordenando desde la Estación de Trabajo. Otra función es la de información. Cuando seleccionamos un tag del recuadro llamado con este nombre, que se encuentra a su izquierda, automáticamente hace una pequeña descripción de este. Así si tenemos alguna duda de que es exactamente ese tag, esto nos lo puede aclarar.

Si ocurriera que se nos llenara la pantalla de datos y queremos borrarla, tan solo tenemos que clicar con el ratón en el recuadro destinado a los Registros de Entrada , y la limpia dejándola vacía.

Ya hemos terminado con el menú y con los dos primeros recuadros.

• En el recuadro número 3 de la ilustración 88 encontramos diferentes elementos. Lo primero que salta a la vista son los 11 tags con sus correspondientes indicadores luminosos.

Page 97: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

97

Ilustración 90. Estado Dispositivos.

Cada vez que uno de estos dispositivos se activa desde la estación de trabajo, el indicador luminoso de la izquierda se pone en verde, cuando se desactiva se pone en negro. El indicador de la derecha permanece apagado, sólo se ilumina si ocurre algún error en cualquiera de los dispositivos, en este caso se iluminará de rojo. A la vez este error se transmitirá a la Estación de trabajo, donde el elemento en cuestión se detendrá y se apostará en rojo. Este error como es generado desde el PLC solo se puede corregir si este detecta que está solventado, para ello utilizaremos los controles que se encuentran remarcados en rojo dentro del recuadro con el nombre de “Generar fallo”. Este recuadro contiene los únicos mandos capaces de introducir modificaciones. Estos botones han sido ideados únicamente para generar fallos en el sistema ejemplificando las posibles averías que se puedan dar.

Ilustración 91. Selección de tag para generar averías.

Si pulsamos el desplegable, vemos que en él se encuentran todos los dispositivos que hay implementados en el proyecto exceptuando la válvula de refrigeración. Cuando queramos generar un error sólo tenemos que desplegar la lista, seleccionar el dispositivo y pulsar el botón de aceptar. Automáticamente el indicador rojo del dispositivo seleccionado se

Page 98: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Estudio y desarrollo de un control distribuido para una planta.

98

iluminara, apagándose el verde, siempre y cuando éste estuviera en marcha. Esto dará la orden de paro a la estación de trabajo del propio elemento, colocándolo en rojo. Cuando el elemento ha quedado reparado, lo seleccionaremos nuevamente en el desplegable y cuando pulsemos el botón de reset dicho componente restaurara el Led de avería apagándose éste. Aquí es donde entra en juego el botón que teníamos en el cuadro desplegable de la pantalla principal de la Estación de Trabajo. Ahora que la avería ha sido restaurada en el PLC, para que el operado pueda disponer de la unidad, ha de pulsar este botón que resetea la avería en la Estación de Trabajo.

• Por último tenemos el recuadro número 4, este recuadro es únicamente informativo, solo da información útil para el observador.

Ilustración 92. Reguladora y datos E/S.

En primer caso lo que más llama la atención es el gran display digital. Éste marcará en todo momento los incrementos y decrementos que desde la Estación de Trabajo le ordene el operador. A su vez la barra de progreso irá avanzando o retrocediendo del mismo modo. En el lado derecho tenemos cuatro recuadros informativos, los cuales nos dan lectura de código de entrada y su tag, así como el código correspondiente de salida y su tag.

Page 99: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Conclusiones y Líneas futuras

- 99 -

4. Conclusiones y líneas futuras. 4.1. Conclusiones

Sería una ardua tarea el resumir toda esta temática en unas pocas líneas, ya que el mundo que envuelve los sistemas de control industrial son tan amplios y adaptativos, que es imposible el hacer generalizaciones. Es bien cierto, que gracias a las nuevas tecnologías entorno a líneas de conexión como Ethernet, los buses de control tales como Profibus, así como los potentes sistemas electrónicos que conforman los cerebros de los PLC, estaciones Remotas, estaciones de trabajo etc. En definitiva unas nuevas tecnologías en desarrollo que envuelven la industria de hoy y la futura, garantizan unos sistemas de producción, de una efectividad jamás vista y lo más importante, garantizando unos niveles de seguridad muy grandes. Todo ello unido a algo que prima sobre casi todos los demás factores mesurables, a la hora del diseño de cualquier entorno industrial, que son los costes. En definitiva la automatización industrial, es la definición de un mayor control sobre todos los procesos que se realizan en la industria. No estamos aun cerca de decir que estos sistemas pretendan sustituir al hombre para dicho cometido, pero bien es cierto, que su presencia en las fábricas actuales se ha reducido gracias a estas tecnologías. Esto a costa nuestro, implica una reducción de costes, axial como la reducción de el factor humanaos a la hora de cierta toma de decisiones de cáliz peligroso para la seguridad. Pero no tenemos que mirarlo con ojos desdeñosos, ya que esta gran afluencia de información ayuda a los que formamos parte de estos procesos, a poseer un mayor conocimiento en tiempo real de lo que estamos realizando, podemos tomar mejores y más acertadas decisiones, porque el factor improvisador o de aleatoriedad se ha de reducir cada día más. Un tema muy importante al controlar todos estos datos, es mejorar la efectividad de los equipos industriales, de forma que las reacciones, o productos que se generan en dichos procedimientos, han mejorado su eficiencia, ayudando todo esto a que las emisiones de productos nocivos y contaminantes se estén reduciendo día a día. En lo que se refiere propiamente dicho al proyecto práctico realizado, debo decir que ya conocía en parte el funcionamiento de dichos métodos, desde el punto de vista de usuario, ya que llevo mucho años en este campo. Con ello he podido conocer la otra parte del sistema, la parte más técnica y en definitiva la más importante. Hacer mi propio control diseñándolo desde cero, me ha permitido ver hasta qué punto la complejidad que existe en todo ello. Estudiarlo te introduce en el mundo, pero crearlo de cero hace que cosas que realizas diariamente, dándole una banal importancia, resultan ser mucho más de lo que parece. La implementación del software ha sido especialmente compleja, hasta llegar a convertirse en reto en algunos puntos. El hardware no se ha quedado atrás, en complejidad, pero quizás ha sido la parte más agradable de trabajar, ya que con ello nos hemos movido en hechos reales. Pero al finalizar esta creo que ha quedado una simulación muy práctica, de fácil compresión y muy cercana a la realidad que en definitiva era lo que se pretendía.

Page 100: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Conclusiones y Líneas futuras.

- 100 -

4.2. Líneas futuras. El sistema que se ha desarrollado podría sufrir innumerables mejoras y perfeccionamiento, en el caso de que quisiéramos un sistema más potente, y que requiriera controlar más elementos, o realizar otras funciones. Si empezamos por el software, utilizar Visual Basic para hacer el programa no es el sistema mas apropiado. Fabricantes como CITECT, que es uno de los mas importantes creadores de interfaces de control industrial tipo SCADA, utilizan un lenguaje de programación similar llamado Cicode.

• Cicode es un lenguaje de programación. La estructura y la sintaxis del Cicode es muy similar a la del lenguaje de programación Pascal, cuya principal diferencia es que no incluye indicadores y conceptos asociados. Citect ofrece una rica programación de la API de programación que incluye sofisticadas construcciones tales como tareas concurrentes y los semáforos.

• Ejemplo programación en Cicode. FUNCTION I0_Trace(STRING sPrompt) INT hDev; INT hTime; STRING sText; IF hTraceOn THEN IF (StrLeft(sPrompt, StrLength(sMask)) = sMask) THEN TraceMsg(sPrompt); hTime = TimeCurrent(); sText = TimeToStr(hTime, 2)+" "+TimeToStr(hTime, 1)+" "+sPrompt; SemWait(hDebugSem, 10); FileWriteLn(hDebugFile, sText); SemSignal(hDebugSem); END END END

En el tema hardware, empezaríamos por sustituir un bus paralelo, que si bien es más potente que el serie, está limitado en cuanto a distancia y a número de datos a transmitir. Por lo que sería otro punto mejorable dentro de nuestro sistema. Como estudiamos en la primera parte del proyecto, la mayoría de los buses existentes hoy en DIA para entornos industriales, se implementan sobre bus serie. Al sustituir esto cambiaremos también el protocolo de comunicación por un más efectivo TCP IP por ejemplo. Nos permite un mayor control del bus axial como detección de errores y un flujo de información mas ordenado. También podríamos introducir mejoras en los dispositivos electrónicos diseñados, sobre todo en el circuito Estación Remota. Donde se le podría dotar de inteligencia utilizando un microprocesador. A diferencia de ahora que la repartición de funciones la realiza un decodificador

Page 101: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Bibliografía y Software empleado.

- 101 -

5. Bibliografía. " I he Measurement and Automation" calalog 2004 National Instrumentéis

Revista "Instrumentación y Control Automático" n° 122

"EtberNet/IP" Rockwell automation Noviembre 2000

"NetLínx" Rockwell automation Noviembre 2002

"Latinoamericana Advance" Siemens 2004

"Sistemas De Control "Carmen D'Sousa www.monografias.com

"Tecnologías y actividades de estandarización para la interconexión de Industrial Networks" Alcatel para Fundación AUNA

"Comunicaciones Industriales" Autores: V.Sempere, J. Silvestre, J.A. Martínez Editorial: SPUPV (SPUPV-2002.213) Año:2002

Departamento de Ingeniería de Sistemas y Automática Universidad de Vigo

Universidad Miguel Hernández Dpto. Ingeniería.

http://en.wikipedia.org/wiki/Citect

http://es.wikipedia.org/wiki/Profibus_PA

http://formacion.plcmadrid.es/descargas/docs/omron/ProfibusOmron.pdf

Electrónica digital moderna. Teoría y Práctica . J.M.Angulo. Editorial Paraninfo.

http://www.datasheetcatalog.net/es/datasheets_pdf/7/4/L/S/74LS74.shtml

http://es.rs-online.com/web/

http://www.alldatasheet.com/datasheet-pdf/pdf/27999/TI/74LS266.html

Visual Basic Curso de programación Fco. Javier Ceballos Editorial ra-ma.

5.1. Software Empleado.

Software de programación: Visual Basic 6.0 Software de diseño y prueba : Multisim Power Pro Edition 10.0.144. Software de diseño: Rimu PCB 1.08. Software diseño gráfico. Microsoft Pain 5.1. Sistema Operativo Estación de trabajo: Windows XP SP3. Sistema Operativo PLC: Windows 98 SE. SimuladorDigital_095

Page 102: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Links datasheets

- 102 -

6. Link Datasheets. http://www.datasheetcatalog.org/datasheets/50/375549_DS.pdf

(74LS266) http://www.datasheetcatalog.org/datasheets/70/375318_DS.pdf

(74LS04) http://www.datasheetcatalog.org/datasheets/70/375337_DS.pdf

(74LS08) http://www.datasheetcatalog.org/datasheets/70/375334_DS.pdf

(74LS07) http://www.datasheetcatalog.org/datasheets/70/375703_DS.pdf

(74LS74) http://www.datasheetcatalog.org/datasheets/70/375646_DS.pdf

(74LS47) http://www.datasheetcatalog.org/datasheet/motorola/SN74LS148D.p

df (74LS147) http://www.datasheetcatalog.org/datasheets/105/361053_DS.pdf

(74LS192) http://www.datasheetcatalog.org/datasheet/fairchild/BD137.pdf

(BD137).

Page 103: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Índice de Anexos

- 103 -

ANEXOS

7. Anexo1: Rutinas Programadas. 104 7.1. Pantallas Estación de Trabajo. 104 7.1.1. Código Página Inicio: 104 7.1.2. Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112 7.1.4. Código Pantalla Válvula amoníaco. 114 7.1.5. Código Pantalla Inicio. 116 7.1.6. Código Pantalla Entrada Manual. 119 7.1.7. Código Pantalla Gráficas. 124 7.1.8. Código Pantalla Entradas/Salidas. 132 7.1.9. Código Pantalla Máximos y Mínimos. 148 7.1.10. Código Pantalla NAcceso. 150 7.1.11. Código Pantalla NPASSWORD. 151 7.1.12. Código Pantalla PPRINAPOYO. 152 7.1.13. Código Pantalla Principal. 155 7.1.14. Código Pantalla REFRIG. 200 7.1.15. Código Pantalla RegAlarm. 203 7.2. Código PLC. 203 7.2.1. Código Pantalla Principal. 203 7.2.2. Código Pantalla Datos. 215 8. Anexo2: Planos 228 8.1. Planos Circuito Interface. 228 8.1.1. Esquema Eléctrico. 228 8.1.2. Fotolito Circuito Interface. 229 8.1.3. Esquema Componentes. 229 8.2. Planos Estación Remota. 231 8.2.1. Esquema eléctrico. 231 8.2.2. Fotolito Circuito Estación Remota. 232 8.2.3. Esquema componentes. 233 8.3. Planos Circuito Contador. 234 8.3.1. Esquema eléctrico. 234 8.3.2. Fotolito Circuito Contador. 235 8.3.3. Esquema Componentes. 236

Page 104: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

- 104 -

7. Anexo1: Rutinas Programadas. 7.1. Pantallas Estación de trabajo.

7.1.1. Código Página Inicio:

Option Explicit Dim opcion1 As Variant 'variable de elección de abrir o cerrar el programa Dim direccion, s As String 'variable dirección archivo de password Dim psw As Variant ' variable que almacena es password Dim msg As Variant Dim ENCRIPT As Variant 'VARIABLE DE ENCRIPTADO Dim act As Variant Dim i As Integer Private Sub Botonacceso_Click() On Error GoTo B direccion = App.Path & "\password.txt" 'entra en el archivo de password y lo recupera para poderlo comparar con el introducido Open direccion For Input As #1 On Error GoTo A 'en caso de que no haya nada en el archivo nos lo indica. Input #1, psw 'guarda lo que hay en el archivo en eta variable. A: If psw = "" Then MsgBox "NO HAY PASSWORD GUARDADO", vbExclamation, "¡Atención!" Load NPASSWORD NPASSWORD.Visible = True Close #1 Exit Sub End If Close #1 If Acceso1.Text = psw Then ProgressBar1.Visible = True Call CARGARPROGRAMA Load PPrincipal PPrincipal.Visible = True Unload Form1 Else MsgBox "¡PASSWORD INCORRECTO!", vbCritical, "¡ERROR!" Acceso1 = "" Acceso1.SetFocus Exit Sub End If GoTo C B: MsgBox "¡Error acceso Password!", vbCritical, "¡ERROR!" C: End Sub Private Sub ButtonMac1_Click() act = MsgBox("¿ Salvar los cambios ?" & Chr(13), 324, "ATENCION")

Page 105: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

105

If act = 7 Then Else ProgressBar1.Visible = True Dim EXL As Excel.Application Set EXL = New Excel.Application Dim w As Excel.Workbook Set w = EXL.Workbooks.Open(App.Path + "\MAXMIN.xls") Dim s As Excel.Worksheet Set s = w.Sheets("Hoja1") For i = 2 To 23 ProgressBar1.Value = i s.Range("C" & i).Value = MAX(i) s.Range("D" & i).Value = MIN(i) Next Set s = Nothing w.Save w.Close Set w = Nothing Set EXL = Nothing End If Timer1.Enabled = True End Sub Private Sub CPassword_Click() Load NPASSWORD NPASSWORD.Visible = True End Sub Private Sub Form_Load() Fecha.Caption = Date 'carga la fecha Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA If App.PrevInstance Then 'Rutina para detectar que el proyecto ya está en ejecución y no lo repita msg = App.EXEName & "Proyecto final de carrera.EXE" & " ya está en ejecución" MsgBox msg, 16, "Aplicación." End End If End Sub Private Sub Option1_Click() Acceso1.PasswordChar = "" End Sub Private Sub Option2_Click() Acceso1.PasswordChar = "*" End Sub Private Sub ACCESO1_CLICK() Load Form2

Page 106: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

106

Form2.Visible = True NUM = 1 Form2.Frame2.Enabled = True End Sub Private Sub ACCESO1_KeyPress(KeyAscii As Integer) 'Realiza la misma función que el botón acceder pero pulsando el botón Return del teclado. If KeyAscii = vbKeyReturn Then KeyAscii = 0 Call Botonacceso_Click End If End Sub Private Sub Salir_Click() End End Sub Private Sub Timer1_Timer() End End Sub Private Sub CARGARPROGRAMA() ' carga los datos desde la hoja de Excel hasta las 4 matrices Dim EXL As Excel.Application Set EXL = New Excel.Application Dim w As Excel.Workbook Set w = EXL.Workbooks.Open(App.Path + "\MAXMIN.xls") Dim s As Excel.Worksheet Set s = w.Sheets("Hoja1") For i = 2 To 23 ProgressBar1.Value = i MAX(i) = s.Range("C" & i).Value MIN(i) = s.Range("D" & i).Value UNI(i) = s.Range("E" & i).Value referen(i) = s.Range("f" & i).Value Next Set s = Nothing w.Save w.Close Set w = Nothing Set EXL = Nothing End Sub

7.1.2. Código Pantalla Entrada Manual: Option Explicit Dim mem(30) As Variant Dim i, i2 As Integer Private Sub ButtonMac1_Click() Dim lR As Long lR = SetTopMostWindow(Form2.hWnd, False)

Page 107: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

107

Frame2.Enabled = False Unload Form2 End Sub Private Sub Command1_Click() Text1 = Text1 & 1 i = i + 1 mem(i) = 1 End Sub Private Sub Command10_Click() Text1 = Text1 & 0 i = i + 1 mem(i) = 0 End Sub Private Sub Command11_Click() If Text1 = "" Then Text1 = "-"

End If i = i + 1 mem(i) = "-" End Sub Private Sub Command12_Click() Text1 = Text1 & "," i = i + 1 mem(i) = "," End Sub Private Sub Command13_Click() If Text1 = "" Then

MsgBox "No se han introducido valores", vbExclamation, "¡Atención!"

Exit Sub End If Select Case NUM Case 1 Form1.Acceso1 = Form2.Text1 Case 2 NAcceso.Text1 = Form2.Text1 Case 3 NAcceso.Text2 = Form2.Text1 Case 4 MAXMIN.Text1 = Form2.Text1 Case 5 PPrincipal.Text18 = Form2.Text1 Case 6 MAXMIN.Text2 = Form2.Text1

Page 108: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

108

End Select Call Command42_Click Frame2.Enabled = False Unload Form2 End Sub Private Sub Command14_Click() Text1 = Text1 & "A" i = i + 1 mem(i) = "A" End Sub Private Sub Command15_Click() Text1 = Text1 & "B" i = i + 1 mem(i) = "B" End Sub Private Sub Command16_Click() Text1 = Text1 & "C" i = i + 1 mem(i) = "C" End Sub Private Sub Command17_Click() Text1 = Text1 & "D" i = i + 1 mem(i) = "D" End Sub Private Sub Command18_Click() Text1 = Text1 & "E" i = i + 1 mem(i) = "E" End Sub Private Sub Command19_Click() Text1 = Text1 & "F" i = i + 1 mem(i) = "F" End Sub Private Sub Command2_Click() Text1 = Text1 & 2 i = i + 1 mem(i) = 2 End Sub Private Sub Command20_Click() Text1 = Text1 & "G" i = i + 1 mem(i) = "G" End Sub

Page 109: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

109

Private Sub Command21_Click() Text1 = Text1 & "H" i = i + 1 mem(i) = "H" End Sub Private Sub Command22_Click() Text1 = Text1 & "I" i = i + 1 mem(i) = "I" End Sub Private Sub Command23_Click() Text1 = Text1 & "J" i = i + 1 mem(i) = "J" End Sub Private Sub Command24_Click() Text1 = Text1 & "K" i = i + 1 mem(i) = "K" End Sub Private Sub Command25_Click() Text1 = Text1 & "L" i = i + 1 mem(i) = "L" End Sub Private Sub Command26_Click() Text1 = Text1 & "M" i = i + 1 mem(i) = "M" End Sub Private Sub Command27_Click() Text1 = Text1 & "N" i = i + 1 mem(i) = "N" End Sub Private Sub Command28_Click() Text1 = Text1 & "Ñ" i = i + 1 mem(i) = "Ñ" End Sub Private Sub Command29_Click() Text1 = Text1 & "O" i = i + 1 mem(i) = "O" End Sub

Page 110: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

110

Private Sub Command3_Click() Text1 = Text1 & 3 i = i + 1 mem(i) = 3 End Sub Private Sub Command30_Click() Text1 = Text1 & "P" i = i + 1 mem(i) = "P" End Sub Private Sub Command31_Click() Text1 = Text1 & "Q" i = i + 1 mem(i) = "Q" End Sub Private Sub Command32_Click() Text1 = Text1 & "R" i = i + 1 mem(i) = "R" End Sub Private Sub Command33_Click() Text1 = Text1 & "S" i = i + 1 mem(i) = "S" End Sub Private Sub Command34_Click() Text1 = Text1 & "T" i = i + 1 mem(i) = "T" End Sub Private Sub Command35_Click() Text1 = Text1 & "U" i = i + 1 mem(i) = "U" End Sub Private Sub Command36_Click() Text1 = Text1 & "V" i = i + 1 mem(i) = "V" End Sub Private Sub Command37_Click() Text1 = Text1 & "W" i = i + 1 mem(i) = "W" End Sub

Page 111: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

111

Private Sub Command38_Click() Text1 = Text1 & "X" i = i + 1 mem(i) = "X" End Sub Private Sub Command39_Click() Text1 = Text1 & "Y" i = i + 1 mem(i) = "Y" End Sub Private Sub Command4_Click() Text1 = Text1 & 5 i = i + 1 mem(i) = 5 End Sub Private Sub Command40_Click() Text1 = Text1 & "Z" i = i + 1 mem(i) = "Z" End Sub Private Sub Command41_Click() For i2 = 1 To 30 If i2 = i Then

mem(i2) = "" i = i - 1

End If If mem(i2) = "" Then

GoTo A End If

Next A: Text1 = "" For i2 = 1 To 30 Text1 = Text1 & mem(i2) If mem(i2) = "" Then

Exit Sub End If

Next End Sub Private Sub Command42_Click() Text1 = "" For i2 = 1 To 30 mem(i2) = ""

Next i = 0 End Sub

Page 112: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

112

Private Sub Command43_Click() Text1 = Text1 & " " End Sub Private Sub Command5_Click() Text1 = Text1 & 6 i = i + 1 mem(i) = 6 End Sub Private Sub Command6_Click() Text1 = Text1 & 7 i = i + 1 mem(i) = 7 End Sub Private Sub Command7_Click() Text1 = Text1 & 4 i = i + 1 mem(i) = 4 End Sub Private Sub Command8_Click() Text1 = Text1 & 8 i = i + 1 mem(i) = 8 End Sub Private Sub Command9_Click() Text1 = Text1 & 9 i = i + 1 mem(i) = 9 End Sub Private Sub Form_Load() Dim lR As Long lR = SetTopMostWindow(Form2.hWnd, True) End Sub Private Sub TEXT1_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 Call Command13_Click End If End Sub

7.1.3. Código Pantalla Modificar Password. Option Explicit Dim A As Integer 'VARIABLE PARA IDENTIFICAR TIPO DE ERROR Dim direccion As String 'variable direccion archivo de password Dim psw, psw2 As Variant ' variable que almacena es password Dim ENCRIPT As Variant 'VARIABLE DE ENCRIPTADO Private Sub ButtonMac1_Click() If Text1 = "" Then

Page 113: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

113

A = 1 Call error Exit Sub End If If Text2 = "" Then A = 2 Call error Exit Sub End If If Text1 = Text2 Then Else A = 3 Call error Exit Sub End If psw = Text2.Text 'ENCRIPT = Encriptado(psw) direccion = App.Path & "\password.txt" Open direccion For Output As #1 Print #1, psw Close #1 Form1.Acceso1.SetFocus Unload NPASSWORD End Sub Private Sub ButtonMac2_Click() Dim lR As Long lR = SetTopMostWindow(NAcceso.hWnd, False) Unload NPASSWORD End Sub Private Sub Form_Load() Dim lR As Long lR = SetTopMostWindow(NPASSWORD.hWnd, True) Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA End Sub Private Sub error() Select Case A Case 1 MsgBox "¡No ha introducido ningún password!", vbInformation, "¡ATENCIÓN!" Text1.SetFocus Case 2 MsgBox "¡No ha verificado el password!", vbInformation, "¡ATENCIÓN!" Text2.SetFocus Case 3 MsgBox "¡Los Passwords no coinciden!", vbInformation, "¡ATENCIÓN!" End Select End Sub Private Sub TEXT2_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then

Page 114: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

114

KeyAscii = 0 Call Command1_Click End If End Sub

7.1.4. Código Válvula Amoniaco. Option Explicit Dim MAX As Integer Private Sub ButtonMac1_Click() AMONIAC.Hide End Sub

Private Sub Form_Load() Dim lR As Long lR = SetTopMostWindow(AMONIAC.hWnd, True) 'ENCLAVA LA PANTALLA AL FRENTE AMONIAC.Width = 2640 AMONIAC.Height = 8370 Text4 = PPrincipal.Text21 Text2 = Text4 & " ºC" PROGRESO.Value = 0 End Sub Private Sub HScroll1_Change() Text3 = HScroll1.Value / 10 Text1 = Text3 & " %" APERTURA.Value = HScroll1.Value / 10 If PPrincipal.Picture38.Visible = True Then If HScroll1.Value > 0 Then Timer1.Enabled = True Else Timer1.Enabled = False End If ElseIf PPrincipal.Picture37.Visible = True Then If HScroll1.Value > 0 Then Timer1.Enabled = True Else Timer1.Enabled = False End If End If Text4 = PPrincipal.Text21 Text2 = Text4 & " º" SALMU = Text3 PROGRESO.Value = HScroll1.Value / 10 End Sub Private Sub Picture2_Click() If Timer2.Enabled = True Then Timer2.Enabled = False Else Timer2.Enabled = True End If If Timer3.Enabled = True Then Timer3.Enabled = False

Page 115: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

115

Else Timer3.Enabled = True End If End Sub Private Sub Picture3_Click() If Timer2.Enabled = True Then Timer2.Enabled = False Else Timer2.Enabled = True End If If Timer3.Enabled = True Then Timer3.Enabled = False Else Timer3.Enabled = True End If End Sub Private Sub Timer1_Timer() Text4 = PPrincipal.Text21 CAUDAL.Value = Text4 + 50 If Text4 > 0 Then PPrincipal.Picture37.Visible = False PPrincipal.Picture38.Visible = True Else PPrincipal.Picture38.Visible = False PPrincipal.Picture37.Visible = True End If Text2 = Text4 & " ºC" End Sub Private Sub TEXT2_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT1_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Function Aleatorio(Minimo As Long, Maximo As Long) As Long Randomize ' inicializar la semilla Aleatorio = CLng((Minimo - Maximo) * Rnd + Maximo) End Function Private Sub Timer2_Timer() If Picture2.Visible = True Then Picture2.Visible = False Picture3.Visible = True

Page 116: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

116

Else Picture3.Visible = False Picture2.Visible = True End If End Sub Private Sub Timer3_Timer() If PPrincipal.Text21 > 15 Then If HScroll1.Value = HScroll1.MAX Then Else HScroll1.Value = HScroll1.Value + 1 End If ElseIf PPrincipal.Text21 < 15 Then If HScroll1.Value = HScroll1.MIN Then Else HScroll1.Value = HScroll1.Value - 1 End If End If Text4 = PPrincipal.Text21 Text2 = Text4 & " º" End Sub

7.1.5. Código Pantalla Inicio. Option Explicit Dim opcion1 As Variant 'variable de elección de abrir o cerrar el programa Dim direccion, s As String 'variable direccion archivo de password Dim psw As Variant ' variable que almacena es password Dim msg As Variant Dim ENCRIPT As Variant 'VARIABLE DE ENCRIPTADO Dim act As Variant Dim i As Integer

Private Sub Botonacceso_Click() On Error GoTo B direccion = App.Path & "\password.txt" 'entra en el archivo de password y lo recupera para poderlo comparar con el introducido Open direccion For Input As #1 On Error GoTo A 'en caso de que no haya nada en el archivo nos lo indica. Input #1, psw 'guarda lo que hay en el archivo en eta variable. A: If psw = "" Then MsgBox "NO HAY PASSWORD GUARDADO", vbExclamation, "¡Atención!" Load NPASSWORD NPASSWORD.Visible = True Close #1 Exit Sub End If Close #1 If Acceso1.Text = psw Then ProgressBar1.Visible = True Call CARGARPROGRAMA

Page 117: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

117

Load PPrincipal PPrincipal.Visible = True Unload Form1 Else MsgBox "¡PASSWORD INCORRECTO!", vbCritical, "¡ERROR!" Acceso1 = "" Acceso1.SetFocus Exit Sub End If GoTo C B: MsgBox "¡Error acceso Password!", vbCritical, "¡ERROR!" C: End Sub Private Sub ButtonMac1_Click() act = MsgBox("¿ Salvar los cambios ?" & Chr(13), 324, "ATENCION") If act = 7 Then Else ProgressBar1.Visible = True Dim EXL As Excel.Application Set EXL = New Excel.Application Dim w As Excel.Workbook Set w = EXL.Workbooks.Open(App.Path + "\MAXMIN.xls") Dim s As Excel.Worksheet Set s = w.Sheets("Hoja1") For i = 2 To 23 ProgressBar1.Value = i s.Range("C" & i).Value = MAX(i) s.Range("D" & i).Value = MIN(i) Next Set s = Nothing w.Save w.Close Set w = Nothing Set EXL = Nothing End If Timer1.Enabled = True End Sub Private Sub CPassword_Click() Load NPASSWORD NPASSWORD.Visible = True End Sub

Private Sub Form_Load() Fecha.Caption = Date 'carga la fecha Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA If App.PrevInstance Then 'Rutina para detectar que el proyecto ya está en ejecución y no lo repita msg = App.EXEName & "Proyecto final de carrera.EXE" & " ya está en ejecución" MsgBox msg, 16, "Aplicación."

Page 118: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

118

End End If End Sub Private Sub Option1_Click() Acceso1.PasswordChar = "" End Sub Private Sub Option2_Click() Acceso1.PasswordChar = "*" End Sub Private Sub ACCESO1_CLICK() Load Form2 Form2.Visible = True NUM = 1 Form2.Frame2.Enabled = True End Sub Private Sub ACCESO1_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 Call Botonacceso_Click End If End Sub Private Sub Salir_Click() End End Sub Private Sub Timer1_Timer() End End Sub Private Sub CARGARPROGRAMA() Dim EXL As Excel.Application Set EXL = New Excel.Application Dim w As Excel.Workbook Set w = EXL.Workbooks.Open(App.Path + "\MAXMIN.xls") Dim s As Excel.Worksheet Set s = w.Sheets("Hoja1") For i = 2 To 23 ProgressBar1.Value = i MAX(i) = s.Range("C" & i).Value MIN(i) = s.Range("D" & i).Value UNI(i) = s.Range("E" & i).Value referen(i) = s.Range("f" & i).Value Next Set s = Nothing w.Save w.Close Set w = Nothing Set EXL = Nothing End Sub

Page 119: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

119

7.1.6. Código Pantalla Entrada Manual. Option Explicit Dim mem(30) As Variant Dim i, i2 As Integer Private Sub ButtonMac1_Click() Dim lR As Long lR = SetTopMostWindow(Form2.hWnd, False) Frame2.Enabled = False Unload Form2 End Sub Private Sub Command1_Click() text1 = text1 & 1 i = i + 1 mem(i) = 1 End Sub Private Sub Command10_Click() text1 = text1 & 0 i = i + 1 mem(i) = 0 End Sub Private Sub Command11_Click() If text1 = "" Then text1 = "-" End If i = i + 1 mem(i) = "-" End Sub Private Sub Command12_Click() text1 = text1 & "," i = i + 1 mem(i) = "," End Sub Private Sub Command13_Click() If text1 = "" Then MsgBox "No se han introducido valores", vbExclamation, "¡Atención!" Exit Sub End If Select Case NUM Case 1 Form1.Acceso1 = Form2.text1 Case 2 NAcceso.text1 = Form2.text1 Case 3 NAcceso.Text2 = Form2.text1 Case 4 MAXMIN.text1 = Form2.text1 Case 5

Page 120: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

120

PPrincipal.Text18 = Form2.text1 Case 6 MAXMIN.Text2 = Form2.text1 End Select Call Command42_Click Frame2.Enabled = False Unload Form2 End Sub Private Sub Command14_Click() text1 = text1 & "A" i = i + 1 mem(i) = "A" End Sub Private Sub Command15_Click() text1 = text1 & "B" i = i + 1 mem(i) = "B" End Sub Private Sub Command16_Click() text1 = text1 & "C" i = i + 1 mem(i) = "C" End Sub Private Sub Command17_Click() text1 = text1 & "D" i = i + 1 mem(i) = "D" End Sub Private Sub Command18_Click() text1 = text1 & "E" i = i + 1 mem(i) = "E" End Sub Private Sub Command19_Click() text1 = text1 & "F" i = i + 1 mem(i) = "F" End Sub Private Sub Command2_Click() text1 = text1 & 2 i = i + 1 mem(i) = 2 End Sub Private Sub Command20_Click() text1 = text1 & "G" i = i + 1

Page 121: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

121

mem(i) = "G" End Sub Private Sub Command21_Click() text1 = text1 & "H" i = i + 1 mem(i) = "H" End Sub Private Sub Command22_Click() text1 = text1 & "I" i = i + 1 mem(i) = "I" End Sub Private Sub Command23_Click() text1 = text1 & "J" i = i + 1 mem(i) = "J" End Sub Private Sub Command24_Click() text1 = text1 & "K" i = i + 1 mem(i) = "K" End Sub Private Sub Command25_Click() text1 = text1 & "L" i = i + 1 mem(i) = "L" End Sub Private Sub Command26_Click() text1 = text1 & "M" i = i + 1 mem(i) = "M" End Sub Private Sub Command27_Click() text1 = text1 & "N" i = i + 1 mem(i) = "N" End Sub Private Sub Command28_Click() text1 = text1 & "Ñ" i = i + 1 mem(i) = "Ñ" End Sub Private Sub Command29_Click() text1 = text1 & "O" i = i + 1

Page 122: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

122

mem(i) = "O" End Sub Private Sub Command3_Click() text1 = text1 & 3 i = i + 1 mem(i) = 3 End Sub Private Sub Command30_Click() text1 = text1 & "P" i = i + 1 mem(i) = "P" End Sub Private Sub Command31_Click() text1 = text1 & "Q" i = i + 1 mem(i) = "Q" End Sub Private Sub Command32_Click() text1 = text1 & "R" i = i + 1 mem(i) = "R" End Sub Private Sub Command33_Click() text1 = text1 & "S" i = i + 1 mem(i) = "S" End Sub Private Sub Command34_Click() text1 = text1 & "T" i = i + 1 mem(i) = "T" End Sub Private Sub Command35_Click() text1 = text1 & "U" i = i + 1 mem(i) = "U" End Sub Private Sub Command36_Click() text1 = text1 & "V" i = i + 1 mem(i) = "V" End Sub Private Sub Command37_Click() text1 = text1 & "W" i = i + 1

Page 123: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

123

mem(i) = "W" End Sub Private Sub Command38_Click() text1 = text1 & "X" i = i + 1 mem(i) = "X" End Sub Private Sub Command39_Click() text1 = text1 & "Y" i = i + 1 mem(i) = "Y" End Sub Private Sub Command4_Click() text1 = text1 & 5 i = i + 1 mem(i) = 5 End Sub Private Sub Command40_Click() text1 = text1 & "Z" i = i + 1 mem(i) = "Z" End Sub Private Sub Command41_Click() For i2 = 1 To 30 If i2 = i Then mem(i2) = "" i = i - 1 End If If mem(i2) = "" Then GoTo A End If Next A: text1 = "" For i2 = 1 To 30 text1 = text1 & mem(i2) If mem(i2) = "" Then Exit Sub End If Next End Sub Private Sub Command42_Click() text1 = "" For i2 = 1 To 30 mem(i2) = "" Next i = 0

Page 124: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

124

End Sub Private Sub Command43_Click() text1 = text1 & " " End Sub Private Sub Command5_Click() text1 = text1 & 6 i = i + 1 mem(i) = 6 End Sub Private Sub Command6_Click() text1 = text1 & 7 i = i + 1 mem(i) = 7 End Sub Private Sub Command7_Click() text1 = text1 & 4 i = i + 1 mem(i) = 4 End Sub Private Sub Command8_Click() text1 = text1 & 8 i = i + 1 mem(i) = 8 End Sub Private Sub Command9_Click() text1 = text1 & 9 i = i + 1 mem(i) = 9 End Sub Private Sub Form_Load() Dim lR As Long lR = SetTopMostWindow(Form2.hWnd, True) End Sub Private Sub TEXT1_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 Call Command13_Click End If End Sub

7.1.7. Código Pantalla Gráficas. Dim Start_Pos Dim End_Pos Dim X Dim A, B, C, D, E, F Dim ampl1, ampl2, AMPL3, AMPL4, AMPL5, AMPL6, X2, POS, var1, var2, var3 As Integer

Page 125: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

125

Dim CANAL1, CANAL2, CANAL3 As Boolean Dim REG(17000) As Integer Dim REG2(17000) As Integer Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function ReleaseCapture Lib "user32" () As Long Dim xx As Integer Private Sub ButtonMac1_Click() Dim lR As Long lR = SetTopMostWindow(GRAFICAS.hWnd, False) 'DESACTIVA EL ENCLAVAMIENTO DE PANTALLA AL FRENTE Timer1.Enabled = False Timer2.Enabled = False PPrincipal.Timer12.Enabled = False ampl1 = 0 ampl2 = 0 AMPL3 = 0 AMPL4 = 0 AMPL5 = 0 AMPL6 = 0 X2 = 0 POS = 0 var1 = 0 var2 = 0 var3 = 0 X = 0 A = 0 B = 0 C = 0 D = 0 E = 0 F = 0 C1A = 0 C1B = 0 C1C = 0 CANAL1 = False CANAL2 = False CANAL3 = False Unload Me End Sub Private Sub ButtonMac2_Click() If Timer1.Enabled = True Then Timer1.Enabled = False Timer2.Enabled = False Else Timer1.Enabled = True Timer2.Enabled = True End If If ButtonMac2.Caption = "Pausa ||" Then ButtonMac2.Caption = "Reanudar" Else

Page 126: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

126

ButtonMac2.Caption = "Pausa ||" End If End Sub Private Sub ButtonMac3_Click() HScroll2.Value = 2 HScroll2.Value = 1 If Timer3.Enabled = True Then Timer3.Enabled = False Else Timer3.Enabled = True End If End Sub Private Sub Check1_Click() Frame2.Visible = True Shape7.Visible = True End Sub Private Sub Check2_Click() Frame2.Visible = False Shape7.Visible = False End Sub Private Sub Command1_Click() If CANAL1 = False Then CANAL1 = True Label1.Caption = "CANAL1" Shape4.Visible = True Else CANAL1 = False Shape4.Visible = False End If Shape1.Visible = True Shape2.Visible = False Shape3.Visible = False Text6 = 12 End Sub Private Sub Command2_Click() If CANAL2 = False Then CANAL2 = True Label1.Caption = "CANAL2" Shape5.Visible = True Else CANAL2 = False Shape5.Visible = False End If Shape1.Visible = False Shape2.Visible = True Shape3.Visible = False End Sub Private Sub Command3_Click()

Page 127: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

127

If CANAL3 = False Then CANAL3 = True Label1.Caption = "CANAL3" Shape6.Visible = True Else CANAL3 = False Shape6.Visible = False End If Shape1.Visible = False Shape2.Visible = False Shape3.Visible = True End Sub Private Sub Command4_Click() PPrincipal.Timer3.Enabled = False PPrincipal.Text1.BackColor = &H80000005 PPrincipal.Text1.ForeColor = &H80000008 PPrincipal.INTAGITADOR.BackColor = &HFFFFFF PPrincipal.Text6.BackColor = &HFFFFFF PPrincipal.Text8.BackColor = &HFFFFFF MSGALRM = 0 PPrincipal.Shape5.Visible = False End Sub Private Sub FlatScrollBar1_Change() HScroll1.MAX = (500 * FlatScrollBar1.Value) Text1 = FlatScrollBar1.Value End Sub Private Sub Form_Load() Dim lR As Long lR = SetTopMostWindow(GRAFICAS.hWnd, True) 'ENCLAVA LA PANTALLA AL FRENTE Timer1.Enabled = False Timer2.Enabled = False Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA Start_Pos = 0 End_Pos = 0 Randomize ampl1 = 300 ampl2 = 2 AMPL3 = 400 AMPL4 = 2 AMPL5 = 300 AMPL6 = 2 Timer1.Enabled = True Timer2.Enabled = True Select Case GRAF Case 1 Label8.Caption = "Int.Bomba vaciado Reactor" Label9.Caption = "Rev.Bomba vaciado Reactor" Label10.Caption = "Caudal Bomba vaciado Reactor" Case 2 Label8.Caption = "Apertura Válvula en %"

Page 128: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

128

Label9.Caption = "Caudal refrigeración" Label10.Caption = "Temperatura líquido" End Select Frame2.Visible = False Shape7.Visible = False Picture1.Left = 0 FlatScrollBar1.Value = 0 HScroll2.Value = 1 End Sub Private Sub HScroll1_Change() If Shape1.Visible = True Then ampl1 = HScroll1.Value End If If Shape2.Visible = True Then AMPL3 = HScroll1.Value End If If Shape3.Visible = True Then AMPL5 = HScroll1.Value End If Text4 = HScroll1.Value End Sub Private Sub HScroll2_Change() If Shape1.Visible = True Then ampl2 = HScroll2.Value End If If Shape2.Visible = True Then AMPL4 = HScroll2.Value End If If Shape3.Visible = True Then AMPL6 = HScroll2.Value End If Text3 = HScroll2.Value End Sub Private Sub Timer1_Timer() X = X + 1 'incrementa la variable If X < 300 Then Else Picture1.Left = Picture1.Left - 38 End If If Picture1.Left < -17000 Then Picture1.Cls Picture1.Left = 0 X = 0 X2 = 0 Start_Pos = xx End_Pos = 0 B = 0 A = 0 C = 0 D = 0 E = 0

Page 129: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

129

F = 0 Else Picture1.ScaleMode = 3 If CANAL1 = True Then Picture1.ForeColor = &HFF00& Picture1.Line (Start_Pos, B)-(End_Pos, A) VAL1 = Aleatorio(CLng(4), CLng(12)) Text11 = C1B End If If CANAL2 = True Then Picture1.ForeColor = &HFF& Picture1.Line (Start_Pos, D)-(End_Pos, C) val2 = Aleatorio(CLng(10), CLng(17)) Text12 = C1A End If If CANAL3 = True Then Picture1.ForeColor = &HFFFF& Picture1.Line (Start_Pos, F)-(End_Pos, E) val3 = Aleatorio(CLng(1), CLng(10)) Text13 = C1C End If B = A D = C F = E Start_Pos = End_Pos End_Pos = End_Pos + 2.5 End If End Sub Private Sub Timer2_Timer() On Error GoTo z A = ((C1B * ampl2 * -1) + ampl1) On Error GoTo z C = Int((C1A * AMPL4 * -1) + AMPL3) On Error GoTo z E = Int((C1C * AMPL6 * -1) + AMPL5) z: End Sub Private Function Aleatorio(Minimo As Long, Maximo As Long) As Long Randomize ' inicializar la semilla Aleatorio = CLng((Minimo - Maximo) * Rnd + Maximo) End Function Private Sub Picture2_Click() Shape1.Visible = True Shape2.Visible = False Shape3.Visible = False HScroll1.Value = 0 FlatScrollBar1.Value = 1 Label1.Caption = "CANAL1" End Sub Private Sub Picture3_Click()

Page 130: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

130

Shape1.Visible = False Shape2.Visible = True Shape3.Visible = False HScroll1.Value = 0 FlatScrollBar1.Value = 1 Label1.Caption = "CANAL2" End Sub Private Sub PICTURE4_CLICK() Shape1.Visible = False Shape2.Visible = False Shape3.Visible = True HScroll1.Value = 0 FlatScrollBar1.Value = 1 Label1.Caption = "CANAL3" End Sub Private Sub Timer3_Timer() If Shape1.Visible = True Then On Error GoTo G ProgressBar1.MAX = Text11 + 300 ProgressBar = Text4 G: If HScroll1.Value - Text11 < 201 Then If HScroll1.Value = HScroll1.MAX Then If FlatScrollBar1.Value = FlatScrollBar1.MAX Then Timer3.Enabled = False MsgBox "Span fuera de rango", vbExclamation, "¡Atención!" Else FlatScrollBar1.Value = FlatScrollBar1.Value + 1 End If Else HScroll1.Value = HScroll1.Value + 1 End If ElseIf HScroll1.Value - Text11 > 201 Then If HScroll1.Value = HScroll1.MIN Then If FlatScrollBar1.Value = FlatScrollBar1.MIN Then Timer3.Enabled = False MsgBox "Span fuera de rango", vbExclamation, "¡Atención!" Else FlatScrollBar1.Value = FlatScrollBar1.Value - 1 HScroll1.Value = HScroll1.MAX End If Else On Error GoTo ZZZ HScroll1.Value = HScroll1.Value + 1 ZZZ: End If End If If HScroll1.Value - Text11 = 201 Then Timer3.Enabled = False MsgBox "CANAL1 Ajustado", vbInformation, "¡Atención!"

Page 131: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

131

ProgressBar1.Value = 0 End If End If If Shape2.Visible = True Then On Error GoTo D ProgressBar1.MAX = Text12 + 300 ProgressBar1.Value = Text4 D: If HScroll1.Value - Text12 < 201 Then If HScroll1.Value = HScroll1.MAX Then If FlatScrollBar1.Value = FlatScrollBar1.MAX Then Timer3.Enabled = False MsgBox "Span fuera de rango", vbExclamation, "¡Atención!" Else FlatScrollBar1.Value = FlatScrollBar1.Value + 1 End If Else HScroll1.Value = HScroll1.Value + 1 End If ElseIf HScroll1.Value - Text12 > 201 Then If HScroll1.Value = HScroll1.MIN Then If FlatScrollBar1.Value = FlatScrollBar1.MIN Then Timer3.Enabled = False MsgBox "Span fuera de rango", vbExclamation, "¡Atención!" Else FlatScrollBar1.Value = FlatScrollBar1.Value - 1 HScroll1.Value = HScroll1.MAX End If Else On Error GoTo ZZ HScroll1.Value = HScroll1.Value + 1 ZZ: End If End If If HScroll1.Value - Text12 = 201 Then Timer3.Enabled = False MsgBox "CANAL2 Ajustado", vbInformation, "¡Atención!" ProgressBar1.Value = 0 End If End If If Shape3.Visible = True Then On Error GoTo J ProgressBar1.Value = Text13 + 300 ProgressBar1.Value = Text4 J: If HScroll1.Value - Text13 < 201 Then If HScroll1.Value = HScroll1.MAX Then If FlatScrollBar1.Value = FlatScrollBar1.MAX Then Timer3.Enabled = False MsgBox "Span fuera de rango", vbExclamation, "¡Atención!"

Page 132: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

132

Else FlatScrollBar1.Value = FlatScrollBar1.Value + 1 End If Else HScroll1.Value = HScroll1.Value + 1 End If ElseIf HScroll1.Value - Text13 > 201 Then If HScroll1.Value = HScroll1.MIN Then If FlatScrollBar1.Value = FlatScrollBar1.MIN Then Timer3.Enabled = False MsgBox "Span fuera de rango", vbExclamation, "¡Atención!" Else FlatScrollBar1.Value = FlatScrollBar1.Value - 1 HScroll1.Value = HScroll1.MAX End If Else HScroll1.Value = HScroll1.Value + 1 End If End If If HScroll1.Value - Text13 = 201 Then Timer3.Enabled = False MsgBox "CANAL3 Ajustado", vbInformation, "¡Atención!" ProgressBar1.Value = 0 End If End If End Sub

7.1.8. Código Pantalla Entradas/Salidas. Option Explicit Dim i, J, J0, J1, J2, J3, J4, MEMENTRADA As Integer Dim led As Byte Dim Control As Boolean Dim bRetVal As Boolean, bit As Byte Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte) Private Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer) Private Declare Sub PortDWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Long) Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte Private Declare Function PortWordIn Lib "IO.DLL" (ByVal Port As Integer) As Integer Private Declare Function PortDWordIn Lib "IO.DLL" (ByVal Port As Integer) As Long Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte)

Page 133: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

133

Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) As Boolean Private Declare Function RightPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean Private Declare Function LeftPortShift Lib "IO.DLL" (ByVal Port As Integer, ByVal Val As Boolean) As Boolean Private Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean Private Sub cmdActiva_Click() If Control = False Then Timer2.Enabled = True Control = True Frame1.Enabled = True cmdActiva.Caption = "Desactivar Forzado Salida" Else Timer2.Enabled = False Control = False Frame1.Enabled = False cmdActiva.Caption = "Activar Forzado Salida" End If End Sub Private Sub Command1_Click() If Timer3.Enabled = True Then Timer3.Enabled = False Else Timer3.Enabled = True End If End Sub Private Sub Form_Load() Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA Dim lR As Long If INOUT.Visible = True Then lR = SetTopMostWindow(INOUT.hWnd, True) 'ENCLAVA LA PANTALLA AL FRENTE End If Frame1.Enabled = False Text1.Text = 0 PortOut &H378, 0 NotPortBit &H379, 3 NotPortBit &H379, 4 NotPortBit &H379, 5 NotPortBit &H379, 6 SetPortBit &H379, 7 For led = 0 To 7 led1(led).Visible = False LedE1(led).Visible = False Next led Control = False If ENTSAL > 0 Then Call COMUNICACION

Page 134: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

134

End If End Sub Private Sub Form_Unload(Cancel As Integer) PortOut &H378, 0 End Sub Private Sub reset_Click() Text1.Text = 0 PortOut &H378, 0 For led = 0 To 7 led1(led).Visible = False led0(led).Visible = True Next led End Sub Private Sub Salir_Click() Unload INOUT End Sub Private Sub Spin10_Click() bRetVal = GetPortBit(&H378, 7) Select Case bRetVal Case Is = False SetPortBit &H378, 7 Text1.Text = Val(Text1.Text) + 128 led1(7).Visible = True led0(7).Visible = False Case Is = True NotPortBit &H378, 7 Text1.Text = Val(Text1.Text) - 128 led1(7).Visible = False led0(7).Visible = True End Select End Sub Private Sub Spin3_Click() bRetVal = GetPortBit(&H378, 0) Select Case bRetVal Case Is = False SetPortBit &H378, 0 Text1.Text = Val(Text1.Text) + 1 led1(0).Visible = True led0(0).Visible = False Case Is = True NotPortBit &H378, 0 Text1.Text = Val(Text1.Text) - 1 led1(0).Visible = False led0(0).Visible = True End Select End Sub Private Sub Spin4_Click() ' verifica el estado del bit 1 , pin 4

Page 135: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

135

bRetVal = GetPortBit(&H378, 1) Select Case bRetVal Case Is = False ' pone el bit 1 q corresponde al pin 4 a nivel 1 SetPortBit &H378, 1 Text1.Text = Val(Text1.Text) + 2 led1(1).Visible = True led0(1).Visible = False Case Is = True ' pone el bit 1 q corresponde al pin 4 a nivel 0 NotPortBit &H378, 1 Text1.Text = Val(Text1.Text) - 2 led1(1).Visible = False led0(1).Visible = True End Select End Sub Private Sub Spin5_Click() ' verifica el estado del bit 2 , pin 5 bRetVal = GetPortBit(&H378, 2) Select Case bRetVal Case Is = False ' pone el bit 2 q corresponde al pin 5 a nivel 1 SetPortBit &H378, 2 Text1.Text = Val(Text1.Text) + 4 led1(2).Visible = True led0(2).Visible = False Case Is = True ' pone el bit 2 q corresponde al pin 4 a nivel 0 NotPortBit &H378, 2 Text1.Text = Val(Text1.Text) - 4 led1(2).Visible = False led0(2).Visible = True End Select End Sub Private Sub Spin6_Click() ' verifica el estado del bit 3 , pin 6 bRetVal = GetPortBit(&H378, 3) Select Case bRetVal Case Is = False ' pone el bit 3 q corresponde al pin 5 a nivel 1 SetPortBit &H378, 3 Text1.Text = Val(Text1.Text) + 8 led1(3).Visible = True led0(3).Visible = False Case Is = True ' pone el bit 3 q corresponde al pin 4 a nivel 0 NotPortBit &H378, 3 Text1.Text = Val(Text1.Text) - 8 led1(3).Visible = False led0(3).Visible = True End Select End Sub

Page 136: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

136

Private Sub Spin7_Click() ' verifica el estado del bit 4 , pin 7 bRetVal = GetPortBit(&H378, 4) Select Case bRetVal Case Is = False ' pone el bit 4 q corresponde al pin 5 a nivel 1 SetPortBit &H378, 4 Text1.Text = Val(Text1.Text) + 16 led1(4).Visible = True led0(4).Visible = False Case Is = True ' pone el bit 4 q corresponde al pin 4 a nivel 0 NotPortBit &H378, 4 Text1.Text = Val(Text1.Text) - 16 led1(4).Visible = False led0(4).Visible = True End Select End Sub Private Sub Spin8_Click() ' verifica el estado del bit 5 , pin 8 bRetVal = GetPortBit(&H378, 5) Select Case bRetVal Case Is = False ' pone el bit 5 q corresponde al pin 5 a nivel 1 SetPortBit &H378, 5 Text1.Text = Val(Text1.Text) + 32 led1(5).Visible = True led0(5).Visible = False Case Is = True ' pone el bit 5 q corresponde al pin 4 a nivel 0 NotPortBit &H378, 5 Text1.Text = Val(Text1.Text) - 32 led1(5).Visible = False led0(5).Visible = True End Select End Sub Private Sub Spin9_Click() ' verifica el estado del bit 6 , pin 9 bRetVal = GetPortBit(&H378, 6) Select Case bRetVal Case Is = False ' pone el bit 6 q corresponde al pin 5 a nivel 1 SetPortBit &H378, 6 Text1.Text = Val(Text1.Text) + 64 led1(6).Visible = True led0(6).Visible = False Case Is = True ' pone el bit 6 q corresponde al pin 4 a nivel 0 NotPortBit &H378, 6 Text1.Text = Val(Text1.Text) - 64 led1(6).Visible = False

Page 137: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

137

led0(6).Visible = True End Select End Sub Private Sub Timer1_Timer() If Timer1.Interval = 1 Then bRetVal = PortIn(&H378) LEntrada = PortIn(&H378) If GetPortBit(&H378, 0) = True Then Le1 = "1" LedE1(0).Visible = True LedE0(0).Visible = False Else Le1 = "0" LedE1(0).Visible = False LedE0(0).Visible = True End If If GetPortBit(&H378, 1) = True Then Le2 = "1" LedE1(1).Visible = True LedE0(1).Visible = False Else Le2 = "0" LedE1(1).Visible = False LedE0(1).Visible = True End If If GetPortBit(&H378, 2) = True Then Le3 = "1" LedE1(2).Visible = True LedE0(2).Visible = False Else Le3 = "0" LedE1(2).Visible = False LedE0(2).Visible = True End If If GetPortBit(&H378, 3) = True Then Le4 = "1" LedE1(3).Visible = True LedE0(3).Visible = False Else Le4 = "0" LedE1(3).Visible = False LedE0(3).Visible = True End If If GetPortBit(&H378, 4) = True Then Le5 = "1" LedE1(4).Visible = True LedE0(4).Visible = False Else Le5 = "0" LedE1(4).Visible = False LedE0(4).Visible = True End If If GetPortBit(&H378, 5) = True Then

Page 138: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

138

Le6 = "1" LedE1(5).Visible = True LedE0(5).Visible = False Else Le6 = "0" LedE1(5).Visible = False LedE0(5).Visible = True End If If GetPortBit(&H378, 6) = True Then Le7 = "1" LedE1(6).Visible = True LedE0(6).Visible = False Else Le7 = "0" LedE1(6).Visible = False LedE0(6).Visible = True End If If GetPortBit(&H378, 7) = True Then Le8 = "1" LedE1(7).Visible = True LedE0(7).Visible = False Else Le8 = "0" LedE1(7).Visible = False LedE0(7).Visible = True End If End If End Sub Private Sub Timer2_Timer() If Picture10.Visible = False Then Picture10.Visible = True Else Picture10.Visible = False End If End Sub Private Sub Timer3_Timer() For i = 3 To 7 If GetPortBit(&H379, i) = True Then LedE2(i - 2).Visible = True LedE0(i + 5).Visible = False Label5(i - 2).Caption = 1 Else LedE2(i - 2).Visible = False LedE0(i + 5).Visible = True Label5(i - 2).Caption = 0 End If Next If Label5(1).Caption = 1 Then Label2 = 1 Else Label2 = 0 End If

Page 139: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

139

If Label5(2).Caption = 1 Then Label2 = Label2 + 2 Else Label2 = Label2 End If If Label5(3).Caption = 1 Then Label2 = Label2 + 4 Else Label2 = Label2 End If If Label5(4).Caption = 1 Then Label2 = Label2 + 8 Else Label2 = Label2 End If If Label5(5).Caption = 1 Then Label2 = Label2 + 16 Else Label2 = Label2 End If End Sub Private Sub COMUNICACION() Select Case ENTSAL Case 1 'ACTIVAR EL AGITADOR DEL REACTOR If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 2 'DESACTIVAR EL AGITADOR DEL REACTOR If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then

Page 140: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

140

NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 3 ' BOMBA CIRCUITO REACTOR MARCHA If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 4 ' BOMBA CIRCUITO REACTOR PARO If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 5 'REGULADORA INCREMENTO If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then

Page 141: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

141

SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 6 'REGULADORA DECREMENTO If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 7 'BOMBA VACIADO MARCHA If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 8 'BOMBA VACIADO PARO If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then

Page 142: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

142

NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 9 'BOMBA REFRIGERACION1 MARCHA If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 10 'BOMBA REFRIGERACION1 PARO If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 11 'BOMBA REFRIGERACION2 MARCHA If GetPortBit(&H378, 0) = False Then

Page 143: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

143

SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 12 'bomba refrigeracion 2 parada If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 13 'valvula salida abierta If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True

Page 144: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

144

'************************************************************************ Case 14 'valvula salida cerrada If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 15 'comprobacion plc marcha If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 16 'válvula frío cerrada '************************************************************************ Case 17 ' motor 1 agua marcha If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then

Page 145: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

145

NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 18 'motor 1 agua paro If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 19 ' motor 2 agua marcha If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 23 'VLVULA AIREACION ABIERTA If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then

Page 146: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

146

SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 24 'VALVULA AIREACION CERRADA If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 25 ' motor 2 agua paro If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 26 'MARCHA SOPLANTE If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then

Page 147: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

147

SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ Case 27 If GetPortBit(&H378, 0) = False Then SetPortBit &H378, 0 End If If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If Timer4.Enabled = True '************************************************************************ End Select End Sub Private Sub Timer4_Timer() If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If ENTSAL = 0 Timer4.Enabled = False Unload INOUT

Page 148: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

148

End Sub

7.1.9. Código Pantalla Máximos y Mínimos. Option Explicit Dim REG1, REG2 As Variant Private Sub ButtonMac1_Click() Dim lR As Long lR = SetTopMostWindow(RegAlarm.hWnd, False) ButtonMac2.Visible = False ButtonMac3.Visible = False MAXMIN.Frame1.Enabled = False MAXMIN.Frame2.Enabled = False Unload MAXMIN End Sub Private Sub ButtonMac2_Click() If Text2 > Text1 Then MsgBox "Valor máximo inferior al mínimo", vbCritical, "¡ERROR!" Text1 = REG1 Exit Sub End If For i = 2 To 23 On Error GoTo B If mxmn = i Then MAX(i) = Text1 GoTo B End If Next B: ButtonMac2.Visible = False PPrincipal.Timer24.Enabled = False PPrincipal.Timer24.Enabled = True End Sub Private Sub ButtonMac3_Click() If Text2 > Text1 Then MsgBox "Valor máximo inferior al mínimo", vbCritical, "¡ERROR!" Text2 = REG2 Exit Sub End If For i = 2 To 23 On Error GoTo N If mxmn = i Then MIN(i) = Text2 GoTo N End If Next N: ButtonMac3.Visible = False PPrincipal.Timer24.Enabled = False PPrincipal.Timer24.Enabled = True End Sub

Page 149: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

149

Private Sub Command1_Click() Load NAcceso NAcceso.Visible = True End Sub Private Sub Form_Load() Dim lR As Long lR = SetTopMostWindow(MAXMIN.hWnd, True) If PPrincipal.Text2 = "ADMINISTRADOR" Then MAXMIN.Text1.Enabled = True MAXMIN.Text2.Enabled = True MAXMIN.Frame1.Enabled = True MAXMIN.Frame2.Enabled = True End If Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA For i = 2 To 23 If mxmn = i Then Label1.Caption = referen(i) Text1 = MAX(i) & " " & UNI(i) Text2 = MIN(i) & " " & UNI(i) GoTo z End If Next z: REG1 = Text1 REG2 = Text2 End Sub Private Sub TEXT1_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT1_CLICK() Load Form2 Form2.Show NUM = 4 ButtonMac2.Visible = True End Sub Private Sub TEXT2_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT2_CLICK() Load Form2 Form2.Show

Page 150: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

150

NUM = 6 ButtonMac3.Visible = True End Sub

7.1.10. Código Pantalla NAcceso. Option Explicit Dim A As Integer 'VARIABLE PARA DEFINIR TIPO DE ACCESOS SEGUN LOGIN Private Sub ButtonMac1_Click() If TEXT1.Text = "ADMINISTRADOR" Then If TEXT2.Text = "ADMIN" Then A = 1 Call NIVACCESO Else MsgBox "Password Incorrecto", vbCritical, "¡ERROR!" TEXT2 = "" TEXT2.SetFocus Exit Sub End If Else MsgBox "Usuario Incorrecto", vbCritical, "¡ERROR!" TEXT1 = "" TEXT1.SetFocus Exit Sub End If Unload NAcceso End Sub Private Sub ButtonMac2_Click() Dim lR As Long lR = SetTopMostWindow(NAcceso.hWnd, False) Unload NAcceso End Sub Private Sub Form_Load() Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA Dim lR As Long lR = SetTopMostWindow(NAcceso.hWnd, True) End Sub Private Sub NIVACCESO() Select Case A Case 1 PPrincipal.TEXT2.Text = "ADMINISTRADOR" PPrincipal.Salir.Enabled = True MAXMIN.TEXT1.Enabled = True MAXMIN.TEXT2.Enabled = True MAXMIN.Frame1.Enabled = True MAXMIN.Frame2.Enabled = True PPrincipal.Timer24.Enabled = True End Select End Sub

Page 151: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

151

Private Sub TEXT1_CLICK() Load Form2 Form2.Visible = True NUM = 2 Form2.Frame2.Enabled = True End Sub Private Sub TEXT2_CLICK() Load Form2 Form2.Visible = True NUM = 3 Form2.Frame2.Enabled = True End Sub Private Sub TEXT2_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 Call ButtonMac1_Click End If End Sub

7.1.11. Código Pantalla NPASSWORD. Option Explicit Dim A As Integer 'VARIABLE PARA IDENTIFICAR TIPO DE ERROR Dim direccion As String 'variable direccion archivo de password Dim psw, psw2 As Variant ' variable que almacena es password Dim ENCRIPT As Variant 'VARIABLE DE ENCRIPTADO Private Sub ButtonMac1_Click() If text1 = "" Then A = 1 Call error Exit Sub End If If TEXT2 = "" Then A = 2 Call error Exit Sub End If If text1 = TEXT2 Then Else A = 3 Call error Exit Sub End If psw = TEXT2.Text direccion = App.Path & "\password.txt" Open direccion For Output As #1 Print #1, psw Close #1 Form1.Acceso1.SetFocus Unload NPASSWORD End Sub

Page 152: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

152

Private Sub ButtonMac2_Click() Dim lR As Long lR = SetTopMostWindow(NAcceso.hWnd, False) Unload NPASSWORD End Sub Private Sub Form_Load() Dim lR As Long lR = SetTopMostWindow(NPASSWORD.hWnd, True) Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA End Sub Private Sub error() Select Case A Case 1 MsgBox "¡No ha introducido ningun password!", vbInformation, "¡ATENCIÓN!" text1.SetFocus Case 2 MsgBox "¡No ha verificado el password!", vbInformation, "¡ATENCIÓN!" TEXT2.SetFocus Case 3 MsgBox "¡Los Passwords no coinciden!", vbInformation, "¡ATENCIÓN!" End Select End Sub Private Sub TEXT2_KeyPress(KeyAscii As Integer) If KeyAscii = vbKeyReturn Then KeyAscii = 0 Call ButtonMac1_Click End If End Sub

7.1.12. Código Pantalla PPRINAPOYO. Private Sub Timer1_Timer() 'Marcadores PPrincipal.Shape1.Visible = False PPrincipal.Shape2.Visible = False PPrincipal.Shape3.Visible = False PPrincipal.Shape4.Visible = False PPrincipal.Shape6.Visible = False PPrincipal.Shape7.Visible = False PPrincipal.Shape8.Visible = False PPrincipal.Shape9.Visible = False PPrincipal.Shape10.Visible = False PPrincipal.Shape11.Visible = False PPrincipal.Shape12.Visible = False PPrincipal.Shape13.Visible = False PPrincipal.Shape14.Visible = False PPrincipal.Shape15.Visible = False PPrincipal.Shape16.Visible = False PPrincipal.Shape17.Visible = False PPrincipal.Shape18.Visible = False PPrincipal.Shape19.Visible = False PPrincipal.Shape20.Visible = False

Page 153: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

153

PPrincipal.Shape21.Visible = False PPrincipal.Shape22.Visible = False PPrincipal.Shape25.Visible = False PPrincipal.Shape26.Visible = False PPrincipal.Shape27.Visible = False PPrincipal.Shape28.Visible = False PPrincipal.Shape29.Visible = False PPrincipal.Shape30.Visible = False PPrincipal.Shape31.Visible = False PPrincipal.Shape32.Visible = False PPrincipal.Shape33.Visible = False PPrincipal.Shape35.Visible = False PPrincipal.Label2.Visible = False PPrincipal.Label3.Visible = False PPrincipal.Label4.Visible = False PPrincipal.Label5.Visible = False PPrincipal.Label6.Visible = False PPrincipal.Label7.Visible = False PPrincipal.Label8.Visible = False PPrincipal.Label11.Visible = False PPrincipal.Label12.Visible = False PPrincipal.Label13.Visible = False PPrincipal.Label15.Visible = False PPrincipal.Label16.Visible = False PPrincipal.Label17.Visible = False PPrincipal.Label18.Visible = False PPrincipal.Label19.Visible = False PPrincipal.Label20.Visible = False PPrincipal.Label21.Visible = False PPrincipal.Label22.Visible = False PPrincipal.Label23.Visible = False PPrincipal.Label24.Visible = False PPrincipal.Label25.Visible = False PPrincipal.Label26.Visible = False PPrincipal.Label27.Visible = False PPrincipal.Label28.Visible = False PPrincipal.Label29.Visible = False PPrincipal.Label30.Visible = False PPrincipal.Label31.Visible = False PPrincipal.Label32.Visible = False PPrincipal.Label33.Visible = False PPrincipal.Label34.Visible = False PPrincipal.Label35.Visible = False PPrincipal.Label37.Visible = False Select Case MARCO Case 1 PPrincipal.Shape14.Visible = True PPrincipal.Label22.Visible = True Case 2 PPrincipal.Shape28.Visible = True PPrincipal.Label21.Visible = True Case 3 PPrincipal.Shape28.Visible = True PPrincipal.Label21.Visible = True

Page 154: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

154

Case 4 PPrincipal.Shape13.Visible = True PPrincipal.Label20.Visible = True Case 5 PPrincipal.Shape12.Visible = True PPrincipal.Label19.Visible = True Case 6 PPrincipal.Shape27.Visible = True PPrincipal.Label18.Visible = True Case 7 PPrincipal.Shape27.Visible = True PPrincipal.Label18.Visible = True Case 8 PPrincipal.Shape26.Visible = True PPrincipal.Label17.Visible = True Case 9 PPrincipal.Shape26.Visible = True PPrincipal.Label17.Visible = True Case 10 PPrincipal.Shape11.Visible = True PPrincipal.Label16.Visible = True Case 11 PPrincipal.Shape10.Visible = True PPrincipal.Label15.Visible = True Case 12 PPrincipal.Shape9.Visible = True PPrincipal.Label13.Visible = True Case 13 PPrincipal.Shape25.Visible = True PPrincipal.Label12.Visible = True Case 14 PPrincipal.Shape22.Visible = True PPrincipal.Label11.Visible = True Case 15 PPrincipal.Shape8.Visible = True PPrincipal.Label5.Visible = True Case 16 PPrincipal.Shape6.Visible = True PPrincipal.Label7.Visible = True Case 17 PPrincipal.Shape1.Visible = True PPrincipal.Label3.Visible = True Case 18 PPrincipal.Shape2.Visible = True PPrincipal.Label2.Visible = True Case 19 PPrincipal.Shape3.Visible = True PPrincipal.Label4.Visible = True Case 20 PPrincipal.Shape4.Visible = True PPrincipal.Label8.Visible = True Case 21 PPrincipal.Shape7.Visible = True PPrincipal.Label6.Visible = True

Page 155: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

155

Case 22 PPrincipal.Shape29.Visible = True PPrincipal.Label23.Visible = True Case 23 PPrincipal.Shape30.Visible = True PPrincipal.Label24.Visible = True Case 24 PPrincipal.Shape15.Visible = True PPrincipal.Label25.Visible = True Case 25 PPrincipal.Shape18.Visible = True PPrincipal.Label26.Visible = True Case 26 PPrincipal.Shape31.Visible = True PPrincipal.Label27.Visible = True Case 27 PPrincipal.Shape32.Visible = True PPrincipal.Label28.Visible = True Case 28 PPrincipal.Shape19.Visible = True PPrincipal.Label29.Visible = True Case 29 PPrincipal.Shape20.Visible = True PPrincipal.Label30.Visible = True Case 30 PPrincipal.Shape17.Visible = True PPrincipal.Label31.Visible = True Case 31 PPrincipal.Shape21.Visible = True PPrincipal.Label32.Visible = True Case 32 PPrincipal.Shape16.Visible = True PPrincipal.Label34.Visible = True PPrincipal.Label33.Visible = True Case 33 PPrincipal.Shape33.Visible = True PPrincipal.Label35.Visible = True Case 34 Case 35 PPrincipal.Shape35.Visible = True PPrincipal.Label37.Visible = True End Select Timer1.Enabled = False Unload PPRINAPOYO End Sub

7.1.13. Código Pantalla Principal. Option Explicit Dim CRONO As Long Dim Tiempo As String Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) As Boolean

Page 156: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

156

Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte) Private Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean Dim act, ACTB, FORZAR2 As Variant Dim TEMP, TEMP2, TEMP3, PRES, CAU, i, i2, I3, I4, I5, IM3 As Integer Dim s, S2 As Integer Dim SALMU2 As Integer ' VARIABLE PARA COMPROBAR SI MODIFICAMOS EL VALOR DE LA REGULADORA Y ASI EJECUTAR LA RESTA O NO Dim REST As Integer 'CONTADOR QUE LEE LAS ENTRADAS Dim N0, N1, N2, N3, N4, CONTADOR As Integer Dim AGITADORM As Boolean Dim fallodisp, fallo As Variant 'variable que recoge el codigo del dispositivo que ha fallado en el PLC Private Sub ACTIVARPROGRAMA_Click() If Picture9.Visible = True Then Exit Sub End If ACTV = True Picture9.Visible = True Picture27.Visible = False Picture10(0).Visible = False Picture8.Visible = True Timer6.Enabled = True End Sub Private Sub Botonacceso_Click() Text1 = "MODO TEST" PortOut &H378, 0 Timer24.Enabled = True CONTADOR = 1 End Sub Private Sub ButtonMac1_Click() Load RegAlarm RegAlarm.Visible = True For i = 0 To 50 If REALARM(i) = "" Then Exit Sub End If If RegAlarm.Text1.Text = "" Then RegAlarm.Text1 = REALARM(i) & Chr(13) & Chr(10) Else RegAlarm.Text1 = RegAlarm.Text1 & REALARM(i) & Chr(13) & Chr(10) End If Next End Sub

Page 157: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

157

Private Sub ButtonMac2_Click() If ACTV = False Then Exit Sub End If Picture21.Visible = False Timer13.Enabled = True End Sub Private Sub Command1_Click() Load NAcceso NAcceso.Visible = True End Sub Private Sub Command2_Click() 'Restaura los niveles de acceso al nivel básico de operación Text2.Text = "OPERADOR" PPrincipal.Salir.Enabled = False MAXMIN.Text1.Enabled = False MAXMIN.Text2.Enabled = False End Sub Private Sub Command3_Click() Timer3.Enabled = False Text1.BackColor = &H80000005 Text1.ForeColor = &H80000008 INTAGITADOR.BackColor = &H80000007 Text6.BackColor = &H80000007 Text8.BackColor = &H80000007 INTAGITADOR.BackColor = &H80000007 MSGALRM = 0 Shape5.Visible = False Text21.BackColor = &H80000007 Text5.BackColor = &H80000007 Text6.BackColor = &H80000007 Text7.BackColor = &H80000007 Text9.BackColor = &H80000007 Text10.BackColor = &H80000007 Text11.BackColor = &H80000007 Text27.BackColor = &H80000007 Text12.BackColor = &H80000007 Text1 = "Tiempo de funcionamiento simulación " & Tiempo Timer26.Enabled = True End Sub Private Sub Command4_Click() For i = 0 To 5 If Picture44(i).Visible = True Then If LED3(i).Visible = True Then Else Picture44(i).Visible = False Exit Sub End If End If Next

Page 158: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

158

End Sub Private Sub Command5_Click() mxmn = 9 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub DETENERPROGRAMA_Click() If Picture10(0).Visible = True Then Exit Sub End If If fallodisp = 29 Then GoTo ZZ Volumen &HAD, 0, 1, 0 activar = MsgBox("¿Esta seguro que desea parar la simulación?", 324, "¡ATENCION!") 'elegimos si queremos parar o no del programa Volumen &HAD, 0, 1, 0 ZZ: If activar = 7 Then Exit Sub Else ACTV = False Picture9.Visible = False Picture27.Visible = True Picture10(0).Visible = True Picture8.Visible = False Timer7.Enabled = True End If End If End Sub Private Sub ensal_Click() INOUT.Show End Sub Private Sub Form_Load() Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA PPrincipal.Height = 11820 PPrincipal.Width = 15405 Text4.Text = Date Text3.Text = Time Text2.Text = "OPERADOR" Picture2.Visible = True Picture3.Visible = False Nivel.Value = 0 SALMU2 = 0 SALMU = 0 CONTADOR = 0 End Sub Private Sub FUNCIONAMIENTO_Timer() If ACTV = False Then Else

Page 159: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

159

Call EntradasLeidas End If End Sub Private Sub FyD_Click() Timer22.Enabled = True End Sub Private Sub Info_Click() Informacion.Show End Sub Private Sub IR1_REV_Click() mxmn = 11 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub Picture12_Click() If ACTV = False Then Exit Sub End If Text18 = 215 Volumen &HAD, 0, 1, 0 'QUITA EL SONIDO act = MsgBox("¿ MARCHA AGITADOR?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 'DEVUELVE EL SONIDO If act = 7 Then Picture2.Visible = True Picture3.Visible = False Picture4.Visible = False Timer2.Enabled = False INTAGITADOR.Text = 0 & " A" Else If LED3(0).Visible = True Then MsgBox "Imposible poner en marcha, Fallo en Agitador", vbCritical, "¡Atención!" Exit Sub End If Timer2.Enabled = True Picture13.Visible = True Picture12.Visible = False ENTSAL = 1 Load INOUT End If End Sub Private Sub PICTURE13_CLICK() Volumen &HAD, 0, 1, 0 'QUITA EL SONIDO act = MsgBox("¿ PARAR AGITADOR?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 'DEVUELVE EL SONIDO If act = 7 Then Else Picture2.Visible = True Picture3.Visible = False

Page 160: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

160

Picture4.Visible = False Picture13.Visible = False Picture12.Visible = True Timer2.Enabled = False ENTSAL = 2 Load INOUT End If End Sub Private Sub Picture14_Click() If ACTV = False Then Exit Sub End If On Error GoTo B If Text11 > 10 Then MsgBox "No se puede poner en marcha la bomba hasta que baje la intensidad", vbCritical, "¡ATENCION!" Exit Sub End If B: If Picture2.Visible = True Then MsgBox "No se puede poner la recirculación sin nivel en el reactor", vbCritical, "¡ATENCIÓN!" Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ MARCHA BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else If LED3(1).Visible = True Then MsgBox "Imposible poner en marcha, Fallo en bomba", vbCritical, "¡Atención!" Exit Sub End If Picture14.Visible = False Picture15.Visible = True Timer11.Enabled = True Text11.BackColor = &H0& i2 = 0 ENTSAL = 3 Load INOUT End If End Sub Private Sub Picture15_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ PARO BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else

Page 161: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

161

If Picture2.Visible = False Then MSGALRM = 3 Call ALARMAS Text11.BackColor = &HFF& End If Timer9.Enabled = False Picture15.Visible = False Picture14.Visible = True Timer11.Enabled = True i2 = 0 ENTSAL = 4 Load INOUT End If End Sub Private Sub Picture16_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ PARO BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else If Picture2.Visible = True Then Else MSGALRM = 4 Call ALARMAS Text12.BackColor = &H80000008 Text13.BackColor = &H80000008 Text14.BackColor = &H80000008 End If Picture16.Visible = False Picture17.Visible = True Timer8.Enabled = False Timer10.Enabled = True i2 = 0 ENTSAL = 8 Load INOUT End If End Sub Private Sub Picture17_Click() If ACTV = False Then Exit Sub End If If Picture2.Visible = True Then MsgBox "No se puede realizar sin nivel en el reactor", vbCritical, "¡ATENCIÓN!" Exit Sub ElseIf Picture19.Visible = True Then MsgBox "No se puede realizar sin abrir la válvula de salida reactor", vbCritical, "¡ATENCIÓN!" Exit Sub

Page 162: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

162

End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ MARCHA BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else If LED3(3).Visible = True Then MsgBox "Imposible poner en marcha, Fallo en bomba", vbCritical, "¡Atención!" Exit Sub End If Picture17.Visible = False Picture16.Visible = True Timer10.Enabled = True Text12.BackColor = &H80000008 Text13.BackColor = &H80000008 Text14.BackColor = &H80000008 i2 = 0 ENTSAL = 7 Load INOUT End If End Sub Private Sub Picture18_Click() If Picture16.Visible = True Then MsgBox "No se puede cerrar la válvula con la bomba en marcha", vbCritical, "¡ATENCIÓN!" Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ CERRAR VÁLVULA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Picture18.Visible = False Picture19.Visible = True ENTSAL = 14 Load INOUT End If End Sub Private Sub Picture19_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ ABRIR VÁLVULA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else ENTSAL = 13 Load INOUT If MSGALRM = 7 Then Else

Page 163: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

163

Picture19.Visible = False Picture18.Visible = True End If SNIFERIN.Enabled = True End If End Sub Private Sub Picture22_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ MARCHA BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else If LED3(4).Visible = True Then MsgBox "Imposible poner en marcha, Fallo en bomba", vbCritical, "¡Atención!" Exit Sub End If Picture23.Visible = True Picture22.Visible = False ENTSAL = 9 Load INOUT End If End Sub Private Sub Picture23_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ ESTA SEGURO DE PARAR LA BOMBA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Picture22.Visible = True Picture23.Visible = False ENTSAL = 10 Load INOUT End If End Sub Private Sub Picture24_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ ESTA SEGURO DE PARAR LA BOMBA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then

Page 164: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

164

Else Picture25.Visible = True Picture24.Visible = False ENTSAL = 12 Load INOUT End If End Sub Private Sub Picture25_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ MARCHA BOMBA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else If LED3(5).Visible = True Then MsgBox "Imposible poner en marcha , Fallo en bomba", vbCritical, "¡Atención!" Exit Sub End If Picture24.Visible = True Picture25.Visible = False ENTSAL = 11 Load INOUT End If End Sub Private Sub Picture29_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ ABRIR VÁLVULA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Picture29.Visible = False Picture30.Visible = True ENTSAL = 23 Load INOUT End If End Sub Private Sub Picture30_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ CERRAR VÁLVULA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else

Page 165: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

165

Picture30.Visible = False Picture29.Visible = True ENTSAL = 24 Load INOUT End If End Sub Private Sub Picture31_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ PARO BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Picture32.Visible = True Picture31.Visible = False Timer17.Enabled = False Timer16.Enabled = False Timer18.Enabled = False Timer19.Enabled = True ENTSAL = 18 Load INOUT End If End Sub Private Sub Picture32_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ MARCHA BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Text23 = 0 Text16 = 0 Picture32.Visible = False Picture31.Visible = True Timer18.Enabled = True Timer16.Enabled = True Timer21.Enabled = True Text21 = 15 ENTSAL = 17 Load INOUT End If End Sub Private Sub Picture33_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0

Page 166: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

166

ACTB = MsgBox("¿ MARCHA BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Text23 = 0 Text16 = 0 Picture33.Visible = False Picture34.Visible = True Timer18.Enabled = True Timer16.Enabled = True Timer21.Enabled = True Text21 = 15 ENTSAL = 19 Load INOUT End If End Sub Private Sub Picture34_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ PARO BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Picture33.Visible = True Picture34.Visible = False Timer17.Enabled = False Timer16.Enabled = False Timer18.Enabled = False Timer19.Enabled = True ENTSAL = 25 Load INOUT End If End Sub Private Sub Picture36_Click() Picture36.Visible = False Picture40.Visible = True Call DETENERPROGRAMA_Click End Sub Private Sub Picture37_Click() If ACTV = False Then Exit Sub End If Load AMONIAC AMONIAC.Show End Sub Private Sub Picture38_Click() Load AMONIAC

Page 167: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

167

AMONIAC.Show End Sub Private Sub Picture39_Click() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ MARCHA BOMBA?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else If Text16 = "" Then Else Timer20.Enabled = True End If End If End Sub Private Sub Picture40_Click() Picture40.Visible = False Picture36.Visible = True Call ACTIVARPROGRAMA_Click If Picture9.Visible = False Then Else Call comprobacionmarchaPLC End If End Sub Private Sub comprobacionmarchaPLC() ENTSAL = 15 Load INOUT PLCstatus.Enabled = True End Sub Private Sub Picture5_Click() Call Picture6_Click End Sub Private Sub Picture6_Click() Volumen &HAD, 0, 1, 0 act = MsgBox("¿ PARO VENTILADOR?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If act = 7 Then Else Timer15.Enabled = False Picture7.Visible = True Picture6.Visible = False Picture5.Visible = False ENTSAL = 27 Load INOUT End If End Sub Private Sub Picture7_Click()

Page 168: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

168

If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 act = MsgBox("¿ MARCHA VENTILADOR?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If act <> 7 Then Timer15.Enabled = True ENTSAL = 26 Load INOUT Else Timer15.Enabled = False Picture7.Visible = True Picture6.Visible = False Picture5.Visible = False End If End Sub Private Sub PLCstatus_Timer() CONTADOR = CONTADOR + 1 If fallodisp = 30 Then MsgBox "PLC activado", vbInformation, "¡Atención!" PLCstatus.Enabled = False CONTADOR = 0 Exit Sub End If If CONTADOR = 5 Then MsgBox "El PLC no esta activado o falla la comunicación", vbExclamation, "¡Atención!" Picture45.Visible = True Label69 = "PLC Error" PLCstatus.Enabled = False CONTADOR = 0 End If End Sub Private Sub Salir_Click() If Picture9.Visible = True Then MsgBox "No se puede cerrar el programa, primero se ha de detener la simulación", vbCritical, "¡Atención!" Exit Sub End If Unload PPrincipal Load Form1 Form1.Visible = True Unload AMONIAC Unload REFRIG Unload GRAFICAS End Sub Private Sub SNIFERIN_Timer() 'MÉTODO PARA LEER LAS ENTRADAS If GetPortBit(&H379, 3) = True Then N0 = 0

Page 169: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

169

Else N0 = 1 s = 1 End If If GetPortBit(&H379, 4) = True Then N1 = 0 Else N1 = 1 s = s + 2 End If If GetPortBit(&H379, 5) = True Then N2 = 0 Else N2 = 1 s = s + 4 End If If GetPortBit(&H379, 6) = True Then N3 = 0 Else N3 = 1 s = s + 8 End If If GetPortBit(&H379, 7) = True Then N4 = 1 s = s + 16 Else N4 = 0 End If FORZAR = N4 & N3 & N2 & N1 & N0 If s = 0 Then GoTo FIN Else fallodisp = s s = 0 End If Call EntradasLeidas FORZAR = "" s = 0 FIN: End Sub Private Sub EntradasLeidas() Select Case fallodisp Case 1 'PARO AGITADOR REACOR If MSGALRM = 6 Then Else MSGALRM = 6 Call ALARMAS End If Timer2.Enabled = False Picture12.Visible = True Picture13.Visible = False ENTSAL = 2 Load INOUT Case 2 ' Bomba vaciado parada

Page 170: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

170

If MSGALRM = 9 Then Else MSGALRM = 9 Call ALARMAS End If Picture16.Visible = False Picture17.Visible = True ENTSAL = 8 Load INOUT Timer10.Enabled = False If Text13 < 10 Then Else Timer10.Enabled = True End If Case 3 ' PARO BOMBA CIRCUITO REACTOR If MSGALRM = 8 Then Else MSGALRM = 8 Call ALARMAS End If Picture14.Visible = True Picture15.Visible = False ENTSAL = 4 Load INOUT Timer11.Enabled = False On Error GoTo A2 If Text11 < 10 Then 'Esta condición es para que en caso de que coincida que hay un fallo con la bomba casi parada, no ponga el timer en marcha el cual subiría la intensidad de la bomba de forma irreal Else Timer11.Enabled = True End If A2: Case 4 'PARO BOMBA REFRIGERACION 1 If MSGALRM = 10 Then Else MSGALRM = 10 Call ALARMAS End If ENTSAL = 10 Load INOUT Picture22.Visible = True Picture23.Visible = False Case 5 ' PARO BOMBA REFRIGERACIÓN 2 If MSGALRM = 11 Then Else MSGALRM = 11 End If Call ALARMAS ENTSAL = 12 Load INOUT Picture25.Visible = True Picture24.Visible = False

Page 171: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

171

Case 13 If MSGALRM = 7 Then Else MSGALRM = 7 Picture18.Visible = False Picture19.Visible = True Call ALARMAS End If Case 29 ' plc DESACTIVADO Picture10(12).Visible = False Picture42(11).Visible = True MsgBox "PLC desactivado", vbExclamation, "¡Atención!" Label69 = "PLC OFF" Call Picture36_Click Case 30 ' plc ACTIVADO Picture10(12).Visible = True Picture42(11).Visible = False Picture45.Visible = False Label69 = "PLC ON" End Select End Sub Private Sub Text17_CLICK() mxmn = 15 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub Timer1_Timer() Text3.Text = "" Text3.Text = Time End Sub Private Sub PICTURE5_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Load PPRINAPOYO MARCO = 27 End Sub Private Sub PICTURE6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Load PPRINAPOYO MARCO = 27 End Sub Private Sub PICTURE7_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Load PPRINAPOYO MARCO = 27 End Sub Private Sub PICTURE28_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Load PPRINAPOYO MARCO = 35 End Sub

Page 172: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

172

Private Sub PICTURE26_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Load PPRINAPOYO MARCO = 35 End Sub Private Sub text15_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Caudal circuito refrigeración) Load PPRINAPOYO MARCO = 1 End Sub Private Sub text20_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Caudal circuito refrigeración) Load PPRINAPOYO MARCO = 30 End Sub Private Sub text18_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Caudal circuito refrigeración) Load PPRINAPOYO MARCO = 32 End Sub Private Sub text19_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Caudal circuito refrigeración) Load PPRINAPOYO MARCO = 32 End Sub Private Sub text22_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Caudal circuito refrigeración) Load PPRINAPOYO MARCO = 28 End Sub Private Sub text24_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Caudal circuito refrigeración) Load PPRINAPOYO MARCO = 29 End Sub

Page 173: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

173

Private Sub text25_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Caudal circuito refrigeración) Load PPRINAPOYO MARCO = 31 End Sub Private Sub PICTURE22_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Bombas refrigeración) Load PPRINAPOYO MARCO = 33 End Sub Private Sub PICTURE25_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Bombas refrigeración) Load PPRINAPOYO MARCO = 33 End Sub Private Sub PICTURE23_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Bombas refrigeración) Load PPRINAPOYO MARCO = 33 End Sub Private Sub PICTURE24_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Bombas refrigeración) Load PPRINAPOYO MARCO = 33 End Sub Private Sub PICTURE29_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Válvula amoníaco) Load PPRINAPOYO MARCO = 26 End Sub Private Sub PICTURE30_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Válvula amoníaco) Load PPRINAPOYO MARCO = 26 End Sub Private Sub PICTURE37_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Válvula amoníaco) Load PPRINAPOYO

Page 174: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

174

MARCO = 2 End Sub Private Sub PICTURE38_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Load PPRINAPOYO MARCO = 3 End Sub Private Sub text14_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (presión bomba vaciado reactor) Load PPRINAPOYO MARCO = 4 End Sub Private Sub text12_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES ( bomba vaciado reactor revoluciones e intensidad) Load PPRINAPOYO MARCO = 5 End Sub Private Sub text13_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES ( bomba vaciado reactor revoluciones e intensidad) Load PPRINAPOYO MARCO = 5 End Sub Private Sub text16_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES ( bomba vaciado reactor revoluciones e intensidad) Load PPRINAPOYO MARCO = 24 End Sub Private Sub PICTURE16_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES ( bomba vaciado reactor) Load PPRINAPOYO MARCO = 7 End Sub Private Sub PICTURE17_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES ( bomba vaciado reactor) Load PPRINAPOYO MARCO = 7 End Sub

Page 175: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

175

Private Sub PICTURE14_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES ( bomba circuito reactor) Load PPRINAPOYO MARCO = 8 End Sub Private Sub PICTURE15_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES ( bomba circuito reactor) Load PPRINAPOYO MARCO = 9 End Sub Private Sub text11_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (Intensidad motor reactor) Load PPRINAPOYO MARCO = 10 End Sub Private Sub text10_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (temperatura circuito reactor) Load PPRINAPOYO MARCO = 11 End Sub Private Sub text9_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (temperatura circuito reactor) Load PPRINAPOYO MARCO = 12 End Sub Private Sub PICTURE34_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (bombas refrigeración intercambiador) Load PPRINAPOYO MARCO = 13 End Sub Private Sub PICTURE32_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (bombas refrigeración intercambiador) Load PPRINAPOYO MARCO = 13 End Sub

Page 176: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

176

Private Sub PICTURE33_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (bombas refrigeración intercambiador) Load PPRINAPOYO MARCO = 13 End Sub Private Sub PICTURE31_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (bombas refrigeración intercambiador) Load PPRINAPOYO MARCO = 13 End Sub Private Sub TEXT26_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES (NIVEL D1) Load PPRINAPOYO MARCO = 14 End Sub Private Sub PICTURE4_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 15 End Sub Private Sub PICTURE3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 15 End Sub Private Sub PICTURE2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 15 End Sub Private Sub TEXT8_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 21 End Sub Private Sub TEXT7_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES

Page 177: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

177

Load PPRINAPOYO MARCO = 16 End Sub Private Sub ButtonMac2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 34 End Sub Private Sub TEXT5_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 17 End Sub Private Sub TEXT6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 18 End Sub Private Sub TEXT21_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 25 End Sub Private Sub INTAGITADOR_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 19 End Sub Private Sub PICTURE12_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 20 End Sub Private Sub PICTURE13_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 20 End Sub

Page 178: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

178

Private Sub PICTURE20_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 22 End Sub Private Sub PICTURE20_CLICK() REFRIG.Show End Sub Private Sub PICTURE21_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 22 End Sub Private Sub PICTURE19_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 23 End Sub Private Sub PICTURE18_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'MARCO DE SELECCION DE LOS INDICADORES Load PPRINAPOYO MARCO = 23 End Sub Private Sub Timer10_Timer() i2 = i2 + 1 If Picture16.Visible = True Then If i2 < 2 Then I3 = 0 + 7 I4 = 0 + 1 I5 = 0 + 2 Else I3 = I3 + 7 I4 = I4 + 1 I5 = I5 + 2 Text13 = (I3 + 7) '& " RPM" Text14 = (I4 + 1) '& " Kg/cm2)" Text12 = (I5 + 2) '& " A" End If Else If i2 < 2 Then I3 = 230 - 7 I4 = 31 - 1 I5 = 60 - 2 Else I3 = I3 - 7 I4 = I4 - 1

Page 179: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

179

I5 = I5 - 2 If Text13 < 0 Then Else Text13 = (I3 - 7) '& " RPM" End If If Text14 < 0 Then Else Text14 = (I4 - 1) '& " Kg/cm2)" End If If Text12 < 0 Then Else Text12 = (I5 - 2) '& " A" End If End If End If If i2 > 30 Then Timer10.Enabled = False If Picture16.Visible = True Then Timer8.Enabled = True Else Text13 = "0 RPM" End If End If End Sub Private Sub Timer11_Timer() i2 = i2 + 1 TEMP3 = Aleatorio(CLng(2100), CLng(2112)) Text9 = (TEMP3 - 1.5) / 10 If MSGALRM = 21 Then 'temperatura inferior reactor alta Else If Text9 > MAX(7) Then MSGALRM = 21 Call ALARMAS Text9.BackColor = &HFF& End If End If If MSGALRM = 22 Then 'temperatura inferior reactor alta Else If Text9 < MIN(7) Then MSGALRM = 22 Call ALARMAS Text9.BackColor = &HFF& End If End If If Picture15.Visible = True Then If i2 < 2 Then I3 = 0 + 7 I4 = 0 + 1 I5 = 0 + 2 Else I3 = I3 + 4 I4 = I4 + 1 I5 = I5 + 2

Page 180: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

180

Text27 = I3 Text10 = I4 Text11 = I5 End If Else If i2 < 2 Then I3 = I3 - 7 I4 = I4 - 1 I5 = I5 - 2 Else I3 = I3 - 4 I4 = I4 - 1 I5 = I5 - 2 If Text27 < 0 Then Else Text27 = I3 End If If Text10 < 0 Then Else Text10 = I4 End If If Text11 < 0 Then Else Text11 = I5 End If End If End If If i2 > 30 Then Timer11.Enabled = False If Picture15.Visible = True Then Timer9.Enabled = True End If End If End Sub Private Sub Timer12_Timer() Select Case GRAF Case 1 On Error GoTo A C1B = Text12 C1A = Text13 C1C = Text14 A: Case 2 On Error GoTo AA C1B = REFRIG.Text3 C1A = Text15 C1C = Text25 AA: End Select End Sub Private Sub Timer13_Timer() Timer13.Enabled = False

Page 181: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

181

Timer14.Enabled = True End Sub Private Sub Timer14_Timer() Timer14.Enabled = False End Sub Private Sub Timer15_Timer() Picture5.Visible = True Picture7.Visible = False If Picture6.Visible = True Then Picture5.Visible = True Picture6.Visible = False Else Picture5.Visible = False Picture6.Visible = True End If End Sub Private Sub Timer16_Timer() If ACTV = False Then Exit Sub End If If Text23 > 90 Then Timer16.Enabled = False Timer17.Enabled = True Picture35.Visible = True Picture39.Visible = False Else Text23 = Text23 + 0.01 ProgressBar1.Value = Text23 Text17 = Text23 & "%" End If End Sub Private Sub Timer17_Timer() If ACTV = False Then Exit Sub End If If Text23 < 15 Then Timer17.Enabled = False Timer16.Enabled = True Picture39.Visible = True Picture35.Visible = False Else Text23 = Text23 - 0.01 ProgressBar1.Value = Text23 Text17 = Text23 & "%" End If End Sub Private Sub Timer18_Timer() If ACTV = False Then Exit Sub

Page 182: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

182

End If Timer18.Interval = 100 If Text16 < 1350 Then Text16 = Text16 + 5.3 Else CAU = Aleatorio(CLng(1327), CLng(1350)) Text16 = CAU Timer18.Interval = 1000 End If End Sub Private Sub Timer19_Timer() If Text16 > 6 Then Timer18.Interval = 100 Text16 = Text16 - 3.2 Else Text16 = 0 Timer19.Enabled = False End If End Sub Private Sub Timer2_Timer() If ACTV = False Then GoTo B: End If If Picture3.Visible = False Then Picture3.Visible = True Picture4.Visible = False ElseIf Picture4.Visible = False Then Picture4.Visible = True Picture3.Visible = False End If Picture2.Visible = False PRES = Aleatorio(CLng(350), CLng(560)) 'REALIZA EL VALOR ALEATORIO DE INTENSIDAD DEL AGITADOR INTAGITADOR = (PRES - 1) / 10 Text7 = Aleatorio(CLng(80), CLng(82)) 'REALIZA LA INDICACIÓN ALEATORIA DEL NIVEL DEL REACTOR Nivel.Value = Text7 PRES = Aleatorio(CLng((Text18 + 1) * 10), CLng((Text18 - 2) * 10)) 'REALIZA EL VALOR ALEATORIO DE TEMPERATURA DEL REACTOR Text19 = (PRES - 1) / 10 PRES = Aleatorio(CLng(50), CLng(53)) Text22 = Format(CDbl((PRES - 0.11) / 10) + (Text21 / 1000), "0.00") ' CON EL COMANDO FORMAT DECIDIMOS CUANTOS DECIMALES QUEREMOS QUE SALGAN EN EL DISPLAY PRES = Aleatorio(CLng(48), CLng(55)) Text5 = (PRES - 0.11) / 10 TEMP = Aleatorio(CLng(2100), CLng(2112)) 'REALIZAMOS UN PEQUEÑO CALCULO PARA QUE OSCILE LA TEMPERATURA HASTA DECIMAS DE GRADO Text6 = (TEMP - 1) / 10 TEMP2 = Aleatorio(CLng(2150), CLng(2200)) 'REALIZAMOS UN PEQUEÑO CALCULO PARA QUE OSCILE LA TEMPERATURA HASTA DECIMAS DE GRADO Text8 = (TEMP2 - 2) / 10

Page 183: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

183

If ((TEMP2 - 2) / 10) - ((TEMP - 1) / 10) > 9.6 Then 'realizamos UNA RESTA PARA QUE DE UNA ALARMA CUANDO LA TEMPERATURA SUPERIOR E INFERIOR DISTEN MAS DE 9.5 GRADOS Text6.BackColor = &HFF& Text8.BackColor = &HFF& MSGALRM = 2 Call ALARMAS 'LLAMADA AL METODO ALARMAS End If If INTAGITADOR > 55.9 Then INTAGITADOR.BackColor = &HFF& MSGALRM = 1 Call ALARMAS End If Text28 = MAX(2) If MSGALRM = 1 Then 'DETECTA SI LOS MAXIMOS Y LOS MINIMOS SE HAN MODIFICADO Y LANZAN ALARMA EN CASO NECESARIO Else If INTAGITADOR > MAX(2) Then MSGALRM = 1 Call ALARMAS INTAGITADOR.BackColor = &HFF& End If End If If MSGALRM = 12 Then 'INTENSIDAD MINIMA REACTOR Else If INTAGITADOR < MIN(2) Then MSGALRM = 12 Call ALARMAS INTAGITADOR.BackColor = &HFF& End If End If If MSGALRM = 13 Then 'PRESION MAXIMA REACTOR Else If Text5 > MAX(3) Then MSGALRM = 13 Call ALARMAS Text5.BackColor = &HFF& End If End If If MSGALRM = 14 Then 'PRESION MAXIMA REACTOR Else If Text5 < MIN(3) Then MSGALRM = 14 Call ALARMAS Text5.BackColor = &HFF& End If End If If MSGALRM = 15 Then 'temperatura inferior reactor alta Else If Text6 > MAX(4) Then MSGALRM = 15 Call ALARMAS Text6.BackColor = &HFF& End If

Page 184: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

184

End If If MSGALRM = 16 Then 'temperatura inferior reactor baja Else If Text6 < MIN(4) Then MSGALRM = 16 Call ALARMAS Text6.BackColor = &HFF& End If End If If MSGALRM = 17 Then 'temperatura inferior reactor alta Else If Text8 > MAX(5) Then MSGALRM = 17 Call ALARMAS Text6.BackColor = &HFF& End If End If If MSGALRM = 18 Then 'temperatura inferior reactor baja Else If Text8 < MIN(5) Then MSGALRM = 18 Call ALARMAS Text6.BackColor = &HFF& End If End If If MSGALRM = 19 Then 'temperatura inferior reactor alta Else If Text7 > MAX(6) Then MSGALRM = 19 Call ALARMAS Text7.BackColor = &HFF& End If End If If MSGALRM = 20 Then 'temperatura inferior reactor alta Else If Text7 < MIN(6) Then MSGALRM = 20 Call ALARMAS Text7.BackColor = &HFF& End If End If B: End Sub Private Function Aleatorio(Minimo As Long, Maximo As Long) As Long Randomize Aleatorio = CLng((Minimo - Maximo) * Rnd + Maximo) End Function Private Sub INTAGITADOR_click() 'APERTURA DE PANTALLA DE DATOS PARA LAS ETIQUETAS mxmn = 2 Load MAXMIN MAXMIN.Visible = True

Page 185: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

185

End Sub Private Sub TEXT11_CLICK() mxmn = 10 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT8_click() mxmn = 5 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT5_click() mxmn = 3 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT6_click() mxmn = 4 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT7_click() mxmn = 6 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT9_click() mxmn = 7 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT10_click() mxmn = 8 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT13_CLICK() mxmn = 13 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT14_CLICK() mxmn = 14 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub INTAGITADOR_KeyPress(KeyAscii As Integer) 'INHIVIDORES DE ESCRITURA PARA LAS ETIQUETAS If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If

Page 186: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

186

End Sub Private Sub TEXT5_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT6_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT2_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT8_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT7_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT9_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT10_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0

Page 187: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

187

End If End Sub Private Sub TEXT11_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT27_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT13_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT12_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT14_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT15_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT15_CLICK() mxmn = 16 Load MAXMIN

Page 188: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

188

MAXMIN.Visible = True End Sub Private Sub TEXT16_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT16_CLICK() mxmn = 22 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT20_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT20_CLICK() mxmn = 18 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT18_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT18_CLICK() Load Form2 Form2.Visible = True NUM = 5 End Sub Private Sub TEXT19_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT19_CLICK() mxmn = 12

Page 189: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

189

Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT21_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT21_CLICK() mxmn = 21 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT22_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT22_CLICK() mxmn = 20 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT23_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT24_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT24_CLICK() mxmn = 19 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT25_KeyPress(KeyAscii As Integer)

Page 190: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

190

If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT25_CLICK() mxmn = 17 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub TEXT26_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT26_CLICK() mxmn = 23 Load MAXMIN MAXMIN.Visible = True End Sub Private Sub ALARMAS() 'CON ESTE SUBPROGRAMA DECIDIMOS LA ALARMA QUE SE PRESENTARÁ EN LA LINEA DE ALARMAS Select Case MSGALRM Case 1 Text1 = "IN1 Intensidad Alta agitador reactor " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 2 Text1 = "IT1 Dif Temp Inferior Superior Alta Reactor" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 3 Text1 = "B4 Bomba circuito reactor parada " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 4 Text1 = "B3 Bomba vaciado reactor parada con nivel en reactor" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 5 Text1 = "IT2 Temperatura refrigeración refrigerante muy alta" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 6 Text1 = "Fallo marcha agitador reactor" Timer3.Enabled = True Call REGISTRO_ALARMAS

Page 191: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

191

Case 7 ' FALLO APERTUR A VÁLVULA SALIDA Text1 = "Fallo apertura válvula salida reactor" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 8 'ALARMA PARO BOMBA CIRUCITO REACTOR Text1 = "Fallo en bomba circuito reactor" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 9 Text1 = "Fallo en bomba vaciado reactor" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 10 Text1 = "Fallo en bomba refrigeración 1" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 11 Text1 = "Fallo en bomba refrigeración 2" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 12 ' INTENSIDAD BAJA AGITADOR REACTOR Text1 = "IN1 Intensidad Baja Agitador reactor” Timer3.Enabled = True Call REGISTRO_ALARMAS Case 13 ' ALTA PRESION EN REACTOR Text1 = "IP1 Presión alta reactor” Timer3.Enabled = True Call REGISTRO_ALARMAS Case 14 'BAJA PRESIÓN REACTOR Text1 = "IP1 Presión baja reactor” Timer3.Enabled = True Call REGISTRO_ALARMAS Case 15 Text1 = "IT4 Temperatura inferior reactor, alta " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 16 Text1 = "IT4 Temperatura inferior reactor, baja " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 17 Text1 = "IT6 Temperatura superior reactor, alta " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 18 Text1 = "IT6 Temperatura superior reactor, baja " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 19 Text1 = "IL3 Nivel alto reactor " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 20 Text1 = "IL3 Nivel bajo reactor”

Page 192: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

192

Timer3.Enabled = True Call REGISTRO_ALARMAS Case 21 Text1 = "IT5 Temperatura circuito reactor alta " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 22 Text1 = "IT5 Temperatura circuito reactor baja " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 23 Text1 = "IP3 Presión circuito reactor alta " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 24 Text1 = "IP3 Presión circuito reactor baja " Timer3.Enabled = True Call REGISTRO_ALARMAS Case 25 Text1 = "II3 Intensidad bomba circuito reactor alta" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 26 Text1 = "II3 Intensidad bomba circuito reactor baja" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 27 Text1 = "IR2 Revoluciones bomba circuito reactor altas" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 28 Text1 = "IR2 Revoluciones bomba circuito reactor bajas" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 29 Text1 = "IR1 Revoluciones bomba vaciado reactor altas" Timer3.Enabled = True Call REGISTRO_ALARMAS Case 30 Text1 = "IR1 Revoluciones bomba vaciado reactor bajas" Timer3.Enabled = True Call REGISTRO_ALARMAS End Select End Sub Private Sub Timer20_Timer() If Text17 > 1 Then Text17 = Text17 - 0.01 Picture35.Visible = True Picture39.Visible = False ProgressBar1.Value = Text17 Else Text17 = 0 Timer20.Enabled = False

Page 193: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

193

Picture39.Visible = True Picture35.Visible = False End If End Sub Private Sub Timer21_Timer() If SALMU2 = 0 Then SALMU2 = SALMU End If If Text21 < 99 Then If Text21 > 0 Then If SALMU2 = SALMU Then Text21 = Format(CDbl(Text21 + 0.005), "0.00") Text24 = Format(CDbl(27 + (Text21 / 1000)), "0.00") Text20 = Format(CDbl(2 + (Text21 / 800)), "0.00") Text25 = Format(CDbl(15 + (Text21 / 800)), "0.00") Else Text21 = (Text21 + 0.35) - (SALMU / 5) If REFRIG.Text3 < 25 Then Timer21.Interval = 2000 ElseIf REFRIG.Text3 > 25 Then Timer21.Interval = 2600 ElseIf REFRIG.Text3 > 50 Then Timer21.Interval = 4200 ElseIf REFRIG.Text3 > 75 Then Timer21.Interval = 7400 ElseIf REFRIG.Text3 > 98 Then Timer21.Interval = 20000 End If SALMU2 = SALMU End If Else If Text21 > -5 Then Text21 = (Text21 + 0.35) - (SALMU / 5) Else Text21 = -4.5 End If End If Else If SALMU2 = SALMU Then Else CAU = Aleatorio(CLng(95.01), CLng(99.99)) Text21 = CAU - SALMU Timer21.Interval = 1000 MSGALRM = 5 Call ALARMAS Text21.BackColor = &HFF& End If End If End Sub Private Sub Timer22_Timer() If PPrincipal.Width = 15405 Then For i = 0 To 1740

Page 194: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

194

PPrincipal.Width = 15405 + i If PPrincipal.Width = 17145 Then Timer22.Enabled = False End If Next ElseIf PPrincipal.Width = 17145 Then For i = 0 To 1740 PPrincipal.Width = 17145 - i If PPrincipal.Width = 15405 Then Timer22.Enabled = False End If Next End If End Sub Private Sub Timer23_Timer() Select Case ENTSAL Case 1 Picture10(1).Visible = True Picture42(0).Visible = False Case 2 Picture10(1).Visible = False Picture42(0).Visible = True Case 3 Picture10(2).Visible = True Picture42(1).Visible = False Case 4 Picture10(2).Visible = False Picture42(1).Visible = True Case 5 Picture10(3).Visible = True Picture42(2).Visible = False Case 6 Picture10(3).Visible = False Picture42(2).Visible = True Case 7 Picture10(4).Visible = True Picture42(3).Visible = False Case 8 Picture10(4).Visible = False Picture42(3).Visible = True Case 9 Picture10(5).Visible = True Picture42(4).Visible = False Case 10 Picture10(5).Visible = False Picture42(4).Visible = True Case 11 Picture10(6).Visible = True Picture42(5).Visible = False Case 12 Picture10(6).Visible = False Picture42(5).Visible = True Case 13

Page 195: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

195

Picture10(7).Visible = True Picture42(6).Visible = False Case 14 Picture10(7).Visible = False Picture42(6).Visible = True Case 17 Picture10(8).Visible = True Picture42(7).Visible = False Case 18 Picture10(8).Visible = False Picture42(7).Visible = True Case 19 Picture10(9).Visible = True Picture42(8).Visible = False Case 23 Picture10(10).Visible = True Picture42(9).Visible = False Case 24 Picture10(10).Visible = False Picture42(9).Visible = True Case 25 Picture10(9).Visible = False Picture42(8).Visible = True Case 26 Picture10(11).Visible = True Picture42(10).Visible = False Case 27 Picture10(11).Visible = False Picture42(10).Visible = True End Select Select Case fallodisp Case 1 ' AGITADOR REACTOR For i = 0 To 10 LED3(i).Visible = False Next LED3(0).Visible = True Case 2 'BOMBA VACIADO REACTOR LED3(3).Visible = True Picture44(3).Visible = True Case 3 ' BOMBA CIRCUITO REACTOR LED3(1).Visible = True Picture44(1).Visible = True Case 4 ' bomba refrigeración 1 LED3(4).Visible = True Picture44(4).Visible = True Case 5 ' bomba refrigeración 2 LED3(5).Visible = True Picture44(5).Visible = True Case 30 Case 31 For i = 0 To 10 LED3(i).Visible = False Next End Select

Page 196: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

196

End Sub Private Sub Timer24_Timer() Text2 = "Operador" MsgBox "Tiempo desconexión alcanzado", vbInformation, "¡Atención!" Timer24.Enabled = False End Sub Private Sub Timer25_Timer() If ACTV = False Then Else CRONO = CRONO + 1 Tiempo = Format(Int(CRONO / 36000) Mod 24, "00") & ":" & _ Format(Int(CRONO / 600) Mod 60, "00") & ":" & _ Format(Int(CRONO / 10) Mod 60, "00") & ":" & _ Format(CRONO Mod 10, "00") If MSGALRM > 0 Then Else Text1 = "Tiempo de funcionamiento simulación " & Tiempo End If End If End Sub Private Sub Timer26_Timer() Timer26.Enabled = False End Sub Private Sub Timer3_Timer() If ACTV = False Then GoTo B End If If Shape5.Visible = False Then Shape5.Visible = True Text1.BackColor = &HFF& Text1.ForeColor = &H80000008 Else Shape5.Visible = False Text1.ForeColor = &HFF& Text1.BackColor = &H80000008 End If If Timer26.Enabled = False Then PlaySound App.Path & "\SIRENA.wav" End If B: End Sub Private Sub Timer5_Timer() Text26 = Aleatorio(CLng(40), CLng(45)) & "%" End Sub Private Sub Timer6_Timer() 'TEMPORIZADOR QUE DARÁ LA ORDEN DE ARRANQUE A TODOS LOS ELEMENTOS SIMULADOS Timer5.Enabled = True Timer6.Enabled = False

Page 197: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

197

End Sub Private Sub Timer7_Timer() 'TEMPORIZADOR QUE SE ENCARGA DE DETENER TODOS LOS ELEMENTOS ACTIVOS Timer5.Enabled = False Timer7.Enabled = False End Sub Private Sub REGISTRO_ALARMAS() For i = 0 To 50 If REALARM(i) = "" Then REALARM(i) = " Hora " & Text3.Text & " " & "Fecha " & Text4.Text & " " & "Alarma " & Text1.Text Exit Sub Else End If Next End Sub Private Sub Timer8_Timer() If Picture19.Visible = True Then Call Picture16_Click End If Text14 = Aleatorio(CLng(30), CLng(32)) '& " Kg/cm2" Text13 = Aleatorio(CLng(56), CLng(66)) '& " A" Text12 = Aleatorio(CLng(200), CLng(230)) '& " RPM" If MSGALRM = 29 Then 'Revoluciones bomba vaciado reactor If Text12 > MAX(11) Then MSGALRM = 29 Call ALARMAS Text12.BackColor = &HFF& End If End If If MSGALRM = 30 Then 'Revoluciones bomba vaciado reactor If Text12 < MIN(11) Then MSGALRM = 30 Call ALARMAS Text12.BackColor = &HFF& End If End If End Sub Private Sub Timer9_Timer() If Picture15.Visible = False Then Timer11.Enabled = True Timer9.Enabled = False i2 = 0 End If Text10 = Aleatorio(CLng(20), CLng(22)) TEMP3 = Aleatorio(CLng(2100), CLng(2112)) Text9 = (TEMP3 - 1.5) / 10 IM3 = Aleatorio(CLng(55), CLng(60)) Text11 = IM3 Text27 = Aleatorio(CLng(200), CLng(230))

Page 198: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

198

If MSGALRM = 21 Then 'temperatura circuito reactor alta Else If Text9 > MAX(7) Then MSGALRM = 21 Call ALARMAS Text9.BackColor = &HFF& End If End If If MSGALRM = 22 Then 'temperatura circuito reactor alta Else If Text9 < MIN(7) Then MSGALRM = 22 Call ALARMAS Text9.BackColor = &HFF& End If End If If MSGALRM = 23 Then 'presion circuito reactor alta Else If Text10 > MAX(8) Then MSGALRM = 23 Call ALARMAS Text10.BackColor = &HFF& End If End If If MSGALRM = 24 Then 'presion circuito reactor baja Else If Text10 < MIN(8) Then MSGALRM = 24 Call ALARMAS Text10.BackColor = &HFF& End If End If If MSGALRM = 25 Then 'Intensidad bomba circuito reactor If Text11 > MAX(10) Then MSGALRM = 25 Call ALARMAS Text11.BackColor = &HFF& End If End If If MSGALRM = 26 Then 'Intensidad bomba circuito reactor If Text11 < MIN(10) Then MSGALRM = 26 Call ALARMAS Text11.BackColor = &HFF& End If End If If MSGALRM = 27 Then 'Intensidad bomba circuito reactor If Text27 > MAX(9) Then MSGALRM = 27 Call ALARMAS Text27.BackColor = &HFF& End If End If If MSGALRM = 28 Then 'Intensidad bomba circuito reactor

Page 199: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

199

If Text27 < MIN(9) Then MSGALRM = 28 Call ALARMAS Text27.BackColor = &HFF& End If End If End Sub Private Sub TEXT12_DblClick() If Text12 = "" Then Exit Sub End If GRAF = 1 Timer12.Enabled = True Load GRAFICAS GRAFICAS.Visible = True End Sub Private Sub PICTURE21_CLICK() If ACTV = False Then Exit Sub End If Load REFRIG REFRIG.Show End Sub Private Sub PICTURE26_CLICK() If ACTV = False Then Exit Sub End If Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ ABRIR VÁLVULA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Picture26.Visible = False Picture28.Visible = True End If End Sub Private Sub PICTURE28_CLICK() Volumen &HAD, 0, 1, 0 ACTB = MsgBox("¿ CERRAR VÁLVULA ?" & Chr(13), 324, "ATENCION") Volumen &HAD, 0, 1, 0 If ACTB = 7 Then Else Picture28.Visible = False Picture26.Visible = True End If End Sub

Page 200: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

200

7.1.14. Código Pantalla REFRIG. Option Explicit Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) As Boolean Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean Dim MAX As Integer Dim CL As Boolean Private Sub ButtonMac1_Click() REFRIG.Hide End Sub Private Function Aleatorio(Minimo As Long, Maximo As Long) As Long Randomize Aleatorio = CLng((Minimo - Maximo) * Rnd + Maximo) End Function

Private Sub Command1_Click() If Text1 = "" Then Exit Sub ElseIf Text2 = "" Then Exit Sub End If GRAF = 2 PPrincipal.Timer12.Enabled = True Load GRAFICAS GRAFICAS.Visible = True End Sub Private Sub Command2_Click() If HScroll1.Value > 0 Then If CL = False Then HScroll1.Value = HScroll1.Value - 1 End If ENTSAL = 6 Load INOUT End If If Text3 = 0 Then Else ProgressBar1.Value = Text3 End If End Sub Private Sub Command3_Click() If PPrincipal.Picture23.Visible = True Or PPrincipal.Picture24.Visible = True Then Else Exit Sub End If If HScroll1.Value < 100 Then

Page 201: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

201

If CL = False Then HScroll1.Value = HScroll1.Value + 1 End If ENTSAL = 5 Load INOUT End If If Text3 < 1 Then Else ProgressBar1.Value = Text3 End If End Sub Private Sub Form_Load() Dim lR As Long lR = SetTopMostWindow(REFRIG.hWnd, True) CL = False End Sub Private Sub HScroll1_Change() Text3 = HScroll1.Value Text1 = Text3 & "%" CAUDAL.MAX = 9000 APERTURA.Value = Text3 If PPrincipal.Picture23.Visible = True Then If HScroll1.Value > 1 Then Timer1.Enabled = True Else Timer1.Enabled = False End If ElseIf PPrincipal.Picture24.Visible = True Then If HScroll1.Value > 1 Then Timer1.Enabled = True Else Timer1.Enabled = False End If Else Text4 = 0 Text2 = Text4 & " º" End If End Sub Private Sub Picture1_Click() If CL = False Then CL = True Line1.Visible = True Else CL = False Line1.Visible = False End If End Sub Private Sub reset_Click() If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0

Page 202: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

202

End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If APERTURA.Value = 0 Text3 = 0 ProgressBar1.Value = 0 HScroll1.Value = 0 End Sub Private Sub Timer1_Timer() If PPrincipal.Picture23.Visible = True Or PPrincipal.Picture24.Visible = True Then Else Text3 = 0 Text4 = 0 HScroll1.Value = 0 ProgressBar1.Value = 0 End If Text4 = Aleatorio(CLng((Text3 * 9000) / 96), CLng((Text3 * 9000) / 100)) CAUDAL.Value = Text4 PPrincipal.Text15 = Text4 If Text4 > 1 Then PPrincipal.Picture21.Visible = False PPrincipal.Picture20.Visible = True Else PPrincipal.Picture20.Visible = False PPrincipal.Picture21.Visible = True End If Text2 = Text4 & " m3" If Text3 < 1 Then Call reset_Click End If End Sub Private Sub TEXT1_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT2_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0

Page 203: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

203

Else KeyAscii = 0 End If End Sub

7.1.15. Código Pantalla RegAlarm.

Private Sub ButtonMac1_Click() Dim lR As Long lR = SetTopMostWindow(RegAlarm.hWnd, True) Unload RegAlarm End Sub Private Sub Form_Load() Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA Dim lR As Long lR = SetTopMostWindow(RegAlarm.hWnd, True) End Sub

7.2. Código PLC.

7.2.1. Código Pantalla Principal. option Explicit Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte) Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) As Boolean Private Declare Function IsDriverInstalled Lib "IO.DLL" () As Boolean Dim CRONO As Long 'Contador. Dim Tiempo As String 'Tiempo total transcurrido. Dim rest, s2 As Integer 'variable que se utilizara para contar las entradas mientras se lee el dato de cada una Dim forzar, forzar2, s, REPET, repet2, abrirv, cerrarv As Variant 'variable que contendra el numero binario resultante de juntar los 5 bits de las entradas Dim AA, FG As Variant 'VARIABLE PROVISIONAL SOLO PARA PRUEVAS+++++++++++++++++++++++++++++++++++++++++++++ Dim ALARM As Integer ' s es una variable que se usa para desglosar el numero binario en bits separados Dim contenedor2 As Variant Dim B1, B2, B3, B4, B5, C1, C2, C3, C4, C5 As Byte

Page 204: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

204

Dim valorm As Variant Dim para As Boolean Dim contenedor As Variant Dim d1, d2 As Integer 'variable que se queda con la posición del dato encontrado en la matriz Dim CountExit As Integer 'variable que lleva la cuenta para el timer que hace ejecuta las salidas Private Sub Command1_Click() End End Sub Private Sub Form_Load() Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 'CENTRA EL FORMULARIO EN MEDIO DE LA VENTANA CountExit = 0 Form2.Height = 8500 Form2.Width = 12000 abrirv = "00101" cerrarv = "00110" Form2.Caption = "PLC " PortOut &H378, 0 'ponemos los puertos de salida acero PortOut &H37A, 0 'ponemos los puertos de salida acero '************************************************************************************************************** ' LECTURA DATOS MATRIZ TAGS ENTRADAS direccion = App.Path & "\TAGS.txt" 'PATH DONDE SE ENCUNTRA EL ARCHIVO DE REGISTRO Open direccion For Input As #1 Do While Not EOF(1) 'EOF: End Of File (Final del archivo) Input #1, DATOSTAGS If DATOSTAGS = "" Then GoTo BB End If For i = 1 To 32 If MATRIZTAGS(i) = "" Then MATRIZTAGS(i) = DATOSTAGS GoTo b End If Next b: Loop BB: Close #1 '************************************************************************************************************** ' LECTURA DATOS MATRIZ BITS ENTRADAS direccion = App.Path & "\bitsbinarios.txt" 'PATH DONDE SE ENCUNTRA EL ARCHIVO DE REGISTRO Open direccion For Input As #1 Do While Not EOF(1) 'EOF: End Of File (Final del archivo) Input #1, DATOSBITS If DATOSBITS = "" Then GoTo BB1 End If

Page 205: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

205

For i = 1 To 32 If MATRIZBITS(i) = "" Then MATRIZBITS(i) = DATOSBITS GoTo B1 End If Next B1: Loop BB1: Close #1 '************************************************************************************************************** ' LECTURA DATOS MATRIZ BITS SALIDAS direccion = App.Path & "\bitssalidas.txt" 'PATH DONDE SE ENCUNTRA EL ARCHIVO DE REGISTRO Open direccion For Input As #1 Do While Not EOF(1) 'EOF: End Of File (Final del archivo) Input #1, DATOSBITSSALIDAS If DATOSBITSSALIDAS = "" Then GoTo BB2 End If For i = 1 To 32 If MATRIZBITSSALIDAS(i) = "" Then MATRIZBITSSALIDAS(i) = DATOSBITSSALIDAS GoTo B2 End If Next B2: Loop BB2: Close #1 '************************************************************************************************************** ' LECTURA DATOS MATRIZ TAGS SALIDAS direccion = App.Path & "\TAGSALIDAS.txt" 'PATH DONDE SE ENCUNTRA EL ARCHIVO DE REGISTRO Open direccion For Input As #1 Do While Not EOF(1) 'EOF: End Of File (Final del archivo) Input #1, DATOSTAGSSALIDAS If DATOSTAGSSALIDAS = "" Then GoTo BB3 End If For i = 1 To 32 If MATRIZTAGSSALIDAS(i) = "" Then MATRIZTAGSSALIDAS(i) = DATOSTAGSSALIDAS GoTo B3 End If Next B3: Loop BB3: Close #1 '***************************************************************************************************************

Page 206: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

206

' LECTURA DATOS MATRIZ TAGS SALIDAS ACTIVAS direccion = App.Path & "\bitsactivos.txt" 'PATH DONDE SE ENCUNTRA EL ARCHIVO DE REGISTRO Open direccion For Input As #1 Do While Not EOF(1) 'EOF: End Of File (Final del archivo) Input #1, DATOSBITSACTIVOS If DATOSBITSACTIVOS = "" Then GoTo BB4 End If For i = 1 To 32 If salidasactivas(i) = "" Then salidasactivas(i) = DATOSBITSACTIVOS GoTo B4 End If Next B4: Loop BB4: Close #1 End Sub Private Sub OFF_Click() Timer6.Enabled = True Timer2.Enabled = False LED4.Visible = False LED2.Visible = True LED1.Visible = False LED3.Visible = True Timer1.Enabled = False 'PARAMOS EL CONTADOR DE TIEMPO DE FUNCIONAMIENTO LectorDatos.Enabled = False 'para la lectura de datos Timer4.Enabled = False If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If If GetPortBit(&H378, 5) = False Then SetPortBit &H378, 5 End If Timer5.Enabled = True End Sub Private Sub ON_Click() Timer6.Enabled = False

Page 207: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

207

If LED4.Visible = True Then 'ESTA OPCIÓN EVITA QUE SE PULSE POR ERROR EL BOTON DE ON CUNDO EL SISTEMA YA ESTÁ EN MARCHA Else LED4.Visible = True LED3.Visible = False LED1.Visible = True Timer1.Enabled = True 'PONEMOS EN MARCHA EL CONTADOR DE TIEMPO DE FUNCIONAMIENTO Timer4.Enabled = True Timer2.Enabled = True Call RESET End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If If GetPortBit(&H378, 5) = False Then SetPortBit &H378, 5 End If Timer5.Enabled = True End Sub Private Sub SALIDA_Timer() CountExit = CountExit + 1 If CountExit = 1 Then If s > 0.9 Then Text2 = Text2 & 0 AA = AA & 0 If GetPortBit(&H37A, 3) = True Then NotPortBit &H37A, 3 End If s = s - 1 s = s * 10 Else AA = AA & 1 If GetPortBit(&H37A, 3) = False Then SetPortBit &H37A, 3 End If s = s * 10 End If If s > 0.9 Then Text2 = Text2 & 0 AA = AA & 0 If GetPortBit(&H37A, 2) = False Then SetPortBit &H37A, 2

Page 208: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

208

End If s = s - 1 s = s * 10 Else AA = AA & 1 If GetPortBit(&H37A, 2) = True Then NotPortBit &H37A, 2 End If s = s * 10 End If If s > 0.9 Then AA = AA & 1 If GetPortBit(&H37A, 1) = True Then NotPortBit &H37A, 1 End If s = s - 1 s = s * 10 Else Text2 = Text2 & 0 AA = AA & 0 If GetPortBit(&H37A, 1) = False Then SetPortBit &H37A, 1 End If s = s * 10 End If If s > 0.9 Then Text2 = Text2 & 0 AA = AA & 0 If GetPortBit(&H37A, 0) = True Then NotPortBit &H37A, 0 End If s = s - 1 s = s * 10 Else AA = AA & 1 If GetPortBit(&H37A, 0) = False Then SetPortBit &H37A, 0 End If s = s * 10 End If End If If CountExit = 2 Then If GetPortBit(&H378, 6) = False Then SetPortBit &H378, 6 End If End If If CountExit = 3 Then CountExit = 0 NotPortBit &H378, 6 SALIDA.Enabled = False End If End Sub Private Sub salir_Click()

Page 209: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

209

End End Sub Private Sub Text1_click() Text1.Visible = False Timer3.Enabled = False LED6.Visible = False End Sub Private Sub Timer1_Timer() CRONO = CRONO + 1 Tiempo = Format(Int(CRONO / 36000) Mod 24, "00") & ":" & _ Format(Int(CRONO / 600) Mod 60, "00") & ":" & _ Format(Int(CRONO / 10) Mod 60, "00") & ":" & _ Format(CRONO Mod 10, "00") Form2.Caption = "PLC " & Tiempo End Sub Private Sub COMPARABITS() DatosIO.Text5 = forzar2 Dim d1, d2 As Integer 'variable que se queda con la posición del dato encontrado en la matriz For i = 1 To 32 If forzar2 = MATRIZBITS(i) Then d1 = i GoTo B2 Else If i = 32 Then ALARM = 2 Call Alarma End If End If Next B2: DatosIO.Text1 = MATRIZTAGS(d1) contenedor = MATRIZTAGS(d1) For i = 1 To 32 If contenedor = MATRIZTAGSSALIDAS(i) Then d2 = i GoTo B3 End If Next B3: DatosIO.Text6 = MATRIZBITSSALIDAS(d2) contenedor2 = MATRIZBITSSALIDAS(d2) 'con estos datos trabajaremos para asignar las salidas s = contenedor2 / 10000 If s > 0.9 Then ALARM = 1 Call Alarma DatosIO.Text6 = "SIN SALIDA" DatosIO.Text2 = "SIN SALIDA"

Page 210: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

210

Else DatosIO.Text6 = MATRIZBITSSALIDAS(d2) DatosIO.Text2 = MATRIZTAGSSALIDAS(i) s = s * 10 s2 = 4 For i = 0 To 3 s2 = s2 - 1 If s > 0.9 Then Text2 = Text2 & 1 AA = AA & 1 If GetPortBit(&H37A, s2) = False Then SetPortBit &H37A, s2 End If s = s - 1 s = s * 10 Else Text2 = Text2 & 0 AA = AA & 0 If GetPortBit(&H37A, s2) = True Then NotPortBit &H37A, s2 End If s = s * 10 End If Next End If FG = "1110" If AA = FG Then DatosIO.REPARTIDOR.Enabled = True End If FG = "1101" If AA = FG Then DatosIO.REPARTIDOR.Enabled = True End If AA = "" End Sub Private Sub Timer2_Timer() If LED4.Visible = True Then LED4.Visible = False Else LED4.Visible = True End If End Sub Private Sub RESET() forzar = "" CRONO = 0 Form2.Caption = "PLC " & "00:00:00:00" End Sub Private Sub Timer3_Timer() If LED6.Visible = True Then LED6.Visible = False

Page 211: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

211

DatosIO.LED4.Visible = False Else LED6.Visible = True DatosIO.LED4.Visible = True End If End Sub Private Sub Timer4_Timer() If GetPortBit(&H379, 3) = True Then B1 = 0 Else B1 = 1 End If If GetPortBit(&H379, 4) = True Then B2 = 0 Else B2 = 1 End If If GetPortBit(&H379, 5) = True Then B3 = 0 Else B3 = 1 End If If GetPortBit(&H379, 6) = True Then B4 = 0 Else B4 = 1 End If If GetPortBit(&H379, 7) = True Then B5 = 1 Else B5 = 0 End If forzar = B5 & B4 & B3 & B2 & B1 REPET = "00000" If forzar = REPET Then forzar2 = "" forzar = REPET If DatosIO.LECTOR.Enabled = True Then DatosIO.LECTOR.Enabled = False End If GoTo b End If If forzar2 = "" Then ' si la variable de comparación esta vacía que la llene forzar2 = forzar Call NUEVOMÉTODO DatosIO.Text5 = forzar DatosIO.LECTOR.Enabled = True Else If forzar2 = forzar Then Else Call NUEVOMÉTODO forzar2 = forzar

Page 212: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

212

DatosIO.Text5 = forzar DatosIO.LECTOR.Enabled = True End If End If Text7 = forzar b: forzar = "" End Sub Private Sub Timer5_Timer() If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If If GetPortBit(&H378, 5) = True Then NotPortBit &H378, 5 End If Timer5.Enabled = False End Sub Private Sub Timer6_Timer() If GetPortBit(&H379, 3) = False Then If GetPortBit(&H379, 4) = False Then If GetPortBit(&H379, 5) = False Then If GetPortBit(&H379, 6) = False Then If GetPortBit(&H379, 4) = False Then Call ON_Click End If End If End If End If End If End Sub Private Sub verdatos_Click() Load DatosIO DatosIO.Show End Sub Private Sub Alarma() Select Case ALARM Case 1 Timer3.Enabled = True Text1 = Text1 & "La entrada no esta codificada como salida " & Chr(13) + Chr(10) Case 2 Timer3.Enabled = True

Page 213: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

213

Text1 = Text1 & "Error en base de datos de BITS entrada no registrada" + Chr(13) + Chr(10) End Select End Sub Private Sub VisAlarm_Click() Text1.Visible = True End Sub Private Sub NUEVOMÉTODO() For i = 1 To 32 valorm = MATRIZBITS(i) contenedor = MATRIZBITSSALIDAS(i) s = valorm / 10000 If s > 0.9 Then C5 = 1 s = s - 1 s = s * 10 Else C5 = 0 s = s * 10 End If If s > 0.9 Then C4 = 1 s = s - 1 s = s * 10 Else C4 = 0 s = s * 10 End If If s > 0.9 Then C3 = 1 s = s - 1 s = s * 10 Else C3 = 0 s = s * 10 End If If s > 0.9 Then C2 = 1 s = s - 1 s = s * 10 Else C2 = 0 s = s * 10 End If If s > 0.9 Then C1 = 1 s = s - 1 s = s * 10 Else C1 = 0 s = s * 10 End If If B1 = C1 And B2 = C2 And B3 = C3 And B4 = C4 And B5 = C5 Then

Page 214: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

214

contenedor2 = MATRIZBITS(i) DatosIO.Text6 = MATRIZBITSSALIDAS(i) DatosIO.Text5 = MATRIZBITS(i) DatosIO.Text2 = MATRIZTAGSSALIDAS(i) DatosIO.Text1 = MATRIZTAGS(i) Text5 = contenedor2 & " " & contenedor If contenedor = "00000" Then GoTo FIN End If If contenedor = "10001" Then Call controlsalidas GoTo FIN ElseIf contenedor = "10010" Then Call controlsalidas GoTo FIN ElseIf contenedor = "10011" Then Call controlsalidas GoTo FIN End If s = contenedor / 10000 If s > 0.9 Then ALARM = 1 Call Alarma DatosIO.Text6 = "SIN SALIDA" DatosIO.Text2 = "SIN SALIDA" Else DatosIO.Text6 = MATRIZBITSSALIDAS(i) DatosIO.Text2 = MATRIZTAGSSALIDAS(i) s = s * 10 s2 = 4 SALIDA.Enabled = True End If GoTo veri Else End If Next FIN: veri: End Sub Private Sub controlsalidas() If contenedor = "10001" Then If GetPortBit(&H378, 1) = False Then SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If

Page 215: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

215

If GetPortBit(&H378, 5) = False Then SetPortBit &H378, 5 End If ElseIf contenedor = "10010" Then SetPortBit &H378, 1 NotPortBit &H378, 2 NotPortBit &H378, 3 SetPortBit &H378, 4 NotPortBit &H378, 5 ElseIf contenedor = "10011" Then SetPortBit &H378, 1 NotPortBit &H378, 2 NotPortBit &H378, 3 SetPortBit &H378, 4 SetPortBit &H378, 5 End If End Sub

7.2.2. Código Pantalla Datos. Option Explicit Private Declare Sub SetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Sub ClrPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Sub NotPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) Private Declare Function GetPortBit Lib "IO.DLL" (ByVal Port As Integer, ByVal bit As Byte) As Boolean Dim IO, busc As Boolean Dim DISP, SD, SD1, SD2, I2, i4 As Integer Dim buscar, buscar2 As Variant Dim MLEDS(7) As Integer Dim Entradas As Variant Private Sub Command1_Click() 'resetea los leds de alarma For i = 0 To 10 LED3(i).Visible = False LED4(i).Visible = True Next If GetPortBit(&H378, 1) = False Then '1 SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then '0 SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then '1 SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then '1 SetPortBit &H378, 4 End If If GetPortBit(&H378, 5) = False Then '0 SetPortBit &H378, 5 End If

Page 216: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

216

PUESTAACERO.Enabled = True End Sub Private Sub Command2_Click() If Frame4.Visible = True Then Frame4.Visible = False End If Frame1.Visible = False End Sub Private Sub Command3_Click() If Combo1.Text = "Fallo" Then Else If Combo1.Text = "Agitador del Reactor" Then I2 = 0 If LED2(0).Visible = True Then If GetPortBit(&H378, 1) = False Then '1 SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then '0 NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then '0 NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then '0 NotPortBit &H378, 4 End If If GetPortBit(&H378, 5) = True Then '0 NotPortBit &H378, 5 End If PUESTAACERO.Enabled = True End If ElseIf Combo1.Text = "Bomba Circuito Reactor" Then I2 = 1 If LED2(1).Visible = True Then If GetPortBit(&H378, 1) = False Then '1 SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then '1 SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then '0 NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then '0 NotPortBit &H378, 4 End If If GetPortBit(&H378, 5) = True Then '0 NotPortBit &H378, 5 End If PUESTAACERO.Enabled = True End If ElseIf Combo1.Text = "Válvula Reguladora Refrigeración" Then

Page 217: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

217

I2 = 2 ElseIf Combo1.Text = "Bomba Vaciado Reactor" Then I2 = 3 If LED2(3).Visible = True Then If GetPortBit(&H378, 1) = True Then '0 NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = False Then '1 SetPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then '0 NotPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then '0 NotPortBit &H378, 4 End If If GetPortBit(&H378, 5) = True Then '0 NotPortBit &H378, 5 End If PUESTAACERO.Enabled = True End If ElseIf Combo1.Text = "Bomba Refrigeración Reactor 1" Then I2 = 4 If LED2(4).Visible = True Then If GetPortBit(&H378, 1) = True Then '0 NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then '0 NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then '1 SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then '0 NotPortBit &H378, 4 End If If GetPortBit(&H378, 5) = True Then '0 NotPortBit &H378, 5 End If PUESTAACERO.Enabled = True End If ElseIf Combo1.Text = "Bomba Refrigeración Reactor 2" Then I2 = 5 If LED2(5).Visible = True Then If GetPortBit(&H378, 1) = False Then '1 SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then '0 NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then '1 SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = True Then '0

Page 218: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

218

NotPortBit &H378, 4 End If If GetPortBit(&H378, 5) = True Then '0 NotPortBit &H378, 5 End If PUESTAACERO.Enabled = True End If ElseIf Combo1.Text = "Válvula Salida Reactor" Then I2 = 6 If LED2(6).Visible = True Then If GetPortBit(&H378, 1) = False Then '1 SetPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then '0 NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = False Then '1 SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then '1 SetPortBit &H378, 4 End If If GetPortBit(&H378, 5) = True Then '0 NotPortBit &H378, 5 End If PUESTAACERO.Enabled = True End If ElseIf Combo1.Text = "Bomba Agua 1" Then I2 = 7 ElseIf Combo1.Text = "Bomba Agua 2" Then I2 = 8 ElseIf Combo1.Text = "Válvula Aireación" Then I2 = 9 ElseIf Combo1.Text = "Soplante" Then I2 = 10 End If End If For i = 0 To 10 If I2 = i Then LED3(i).Visible = True LED4(i).Visible = False GoTo H End If LED3(i).Visible = False LED4(i).Visible = True H: Next End Sub Private Sub ComponentesActivos_Timer() If Text4 = 0 Then Label18 = "Válvula cerrada" LED2(2).Visible = False LED1(2).Visible = True

Page 219: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

219

Else LED1(2).Visible = False LED2(2).Visible = True End If ComponentesActivos.Enabled = False End Sub Private Sub Form_Load() Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2 SD2 = Text4 DatosIO.Width = 11715 DatosIO.Height = 8490 End Sub Private Sub LECTOR_Timer() Entradas = Text5 If Entradas = "00001" Then 'Agitador reactor marcha LED2(0).Visible = True LED1(0).Visible = False If LED3(0).Visible = True Then Combo1.Text = "Agitador del Reactor" Call Command3_Click End If ElseIf Entradas = "00010" Then 'Agitador reactor paro LED2(0).Visible = False LED1(0).Visible = True ElseIf Entradas = "00011" Then LED2(1).Visible = True LED1(1).Visible = False If LED3(1).Visible = True Then Combo1.Text = "Bomba Circuito Reactor" Call Command3_Click End If ElseIf Entradas = "00100" Then LED2(1).Visible = False LED1(1).Visible = True ElseIf Entradas = "00101" Then REPARTIDOR.Enabled = True ElseIf Entradas = "00110" Then REPARTIDOR.Enabled = True ElseIf Entradas = "00111" Then LED2(3).Visible = True LED1(3).Visible = False ElseIf Entradas = "01000" Then LED2(3).Visible = False LED1(3).Visible = True ElseIf Entradas = "01001" Then LED2(4).Visible = True LED1(4).Visible = False ElseIf Entradas = "01010" Then LED2(4).Visible = False LED1(4).Visible = True ElseIf Entradas = "01011" Then

Page 220: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

220

LED2(5).Visible = True LED1(5).Visible = False ElseIf Entradas = "01100" Then LED2(5).Visible = False LED1(5).Visible = True ElseIf Entradas = "01101" Then LED2(6).Visible = True LED1(6).Visible = False ElseIf Entradas = "01110" Then LED2(6).Visible = False LED1(6).Visible = True ElseIf Entradas = "01111" Then Form2.ON = True ElseIf Entradas = "10001" Then LED2(7).Visible = True LED1(7).Visible = False ElseIf Entradas = "10010" Then LED2(7).Visible = False LED1(7).Visible = True ElseIf Entradas = "10011" Then LED2(8).Visible = True LED1(8).Visible = False ElseIf Entradas = "11001" Then LED2(8).Visible = False LED1(8).Visible = True ElseIf Entradas = "10111" Then LED2(9).Visible = True LED1(9).Visible = False ElseIf Entradas = "11000" Then LED2(9).Visible = False LED1(9).Visible = True ElseIf Entradas = "11010" Then LED2(10).Visible = True LED1(10).Visible = False ElseIf Entradas = "11011" Then LED2(10).Visible = False LED1(10).Visible = True ElseIf Entradas = "11100" Then If Text4 > 50 Then SD2 = 100 Else SD2 = 0 End If End If LECTOR.Enabled = False End Sub Private Sub FALLO() If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If

Page 221: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

221

If GetPortBit(&H378, 3) = False Then SetPortBit &H378, 3 End If If GetPortBit(&H378, 4) = False Then SetPortBit &H378, 4 End If If GetPortBit(&H378, 5) = False Then SetPortBit &H378, 5 End If Form2.Timer5.Enabled = True End Sub Private Sub MRegIO_Click() Frame1.Visible = True End Sub Private Sub Option1_Click() IO = True Text7 = "" Text8 = "" VISUALBITS = "" VISUALTAGS = "" For i = 1 To 32 VISUALBITS = VISUALBITS & MATRIZBITS(i) + Chr(13) + Chr(10) VISUALTAGS = VISUALTAGS & MATRIZTAGS(i) + Chr(13) + Chr(10) Next End Sub Private Sub Option2_Click() IO = False Text7 = "" Text8 = "" VISUALBITS = "" VISUALTAGS = "" For i = 1 To 16 VISUALBITS = VISUALBITS & MATRIZBITSSALIDAS(i) + Chr(13) + Chr(10) VISUALTAGS = VISUALTAGS & MATRIZTAGSSALIDAS(i) + Chr(13) + Chr(10) Next End Sub Private Sub PUESTAACERO_Timer() If GetPortBit(&H378, 0) = True Then NotPortBit &H378, 0 End If If GetPortBit(&H378, 1) = True Then NotPortBit &H378, 1 End If If GetPortBit(&H378, 2) = True Then NotPortBit &H378, 2 End If If GetPortBit(&H378, 3) = True Then NotPortBit &H378, 3 End If

Page 222: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

222

If GetPortBit(&H378, 4) = True Then NotPortBit &H378, 4 End If PUESTAACERO.Enabled = False End Sub Private Sub RegIN_Click() Frame1.Visible = True Frame4.Visible = True End Sub Private Sub REPARTIDOR_Timer() If Text5 = "00101" Then Call sumardisplay ElseIf Text5 = "00110" Then Call restardisplay End If REPARTIDOR.Enabled = False End Sub Private Sub salir_Click() DatosIO.Hide End Sub Private Sub text1_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub text1_change() Text3 = Text3 & Text1 + Chr(13) + Chr(10) End Sub Private Sub text2_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub Text4_Change() If Text4 > 1 Then LED2(2).Visible = True LED1(2).Visible = False Else LED2(2).Visible = False LED1(2).Visible = True End If End Sub Private Sub text5_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then

Page 223: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

223

KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub text6_KeyPress(KeyAscii As Integer) If Not IsNumeric(Chr(KeyAscii)) And KeyAscii <> 8 Then KeyAscii = 0 Else KeyAscii = 0 End If End Sub Private Sub TEXT6_CHANGE() ComponentesActivos.Enabled = True End Sub Private Sub Text7_Change() If Text7 = "AGITADORM" Then Text3 = "Marcha motor agitador del reactor" ElseIf Text7 = "AGITADORP" Then Text3 = "Paro motor agitador del reactor" ElseIf Text7 = "CIRCUITOM" Then Text3 = "Marcha motor circuito del reactor" ElseIf Text7 = "CIRCUITOP" Then Text3 = "Paro motor circuito del reactor" ElseIf Text7 = "REGULADORA1" Then Text3 = "1% de apertura válvula reguladora refrigeración" ElseIf Text7 = "REGULADORA2" Then Text3 = "1% de cierre válvula reguladora refrigeración" ElseIf Text7 = "VACIADOM" Then Text3 = "Marcha motor vaciado reactor" End If End Sub Private Sub Timer1_Timer() If SD2 = 100 Then Exit Sub End If If SevenSegment2.DisplayNumber = 9 Then If SevenSegment3.DisplayNumber = 9 Then SevenSegment3.DisplayNumber = 0 SevenSegment2.DisplayNumber = 0 SevenSegment4.DisplayNumber = 1 End If End If SD = SD + 1 If SD < 10 Then Else SD = 0 SD1 = SD1 + 1 End If SD2 = SD2 + 1 SevenSegment3.DisplayNumber = SD If SD1 > 9 Then

Page 224: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

224

SD1 = 9 Else SevenSegment2.DisplayNumber = SD1 End If Text4 = SD2 ProgressBar2.Value = SD2 End Sub Private Sub Timer2_Timer() If IO = True Then If busc = False Then buscar = VISUALBITS.SelText Text8 = buscar For i = 1 To 32 If buscar = MATRIZBITS(i) Then Text7 = MATRIZTAGS(i) GoTo B1 End If Next B1: Else buscar2 = VISUALTAGS.SelText Text7 = buscar2 For i = 1 To 32 If buscar2 = MATRIZTAGS(i) Then Text8 = MATRIZBITS(i) GoTo B2 End If Next B2: End If Else If busc = False Then buscar = VISUALBITS.SelText Text8 = buscar For i = 1 To 32 If buscar = MATRIZBITSSALIDAS(i) Then Text7 = MATRIZTAGSSALIDAS(i) GoTo B3 End If Next B3: Else buscar2 = VISUALTAGS.SelText Text7 = buscar2 For i = 1 To 32 If buscar2 = MATRIZTAGSSALIDAS(i) Then Text8 = MATRIZBITSSALIDAS(i) GoTo B4 End If Next B4: End If End If Timer2.Enabled = False

Page 225: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

225

End Sub Private Sub Timer4_Timer() If GetPortBit(&H379, 3) = False Then MsgBox "Entrada S3 correcta" End If End Sub Private Sub VISUALBITS_click() Timer2.Enabled = True busc = False End Sub Private Sub VISUALTAGS_click() Timer2.Enabled = True busc = True End Sub Private Sub sumardisplay() Dim x, y, z As Integer If SD2 = 100 Then Exit Sub End If SD2 = SD2 + 1 If SD2 > 0 Then If SD2 < 100 Then Text4 = SD2 Picture3(0).Visible = True z = SD2 Mod 10 For i = 0 To 9 If i = z Then Picture1(i).Visible = True Else Picture1(i).Visible = False End If Next y = (SD2 / 10) - z / 10 Text9 = y For i = 0 To 9 If i = Text9 Then Picture2(i).Visible = True Else Picture2(i).Visible = False If i = y Then Picture2(y).Visible = True End If End If Next ElseIf SD2 > 99 Then For i = 1 To 9 Picture1(i).Visible = False Picture2(i).Visible = False Next Picture3(1).Visible = True Picture3(0).Visible = False Picture1(0).Visible = True Picture2(0).Visible = True Text4 = 100

Page 226: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

226

SD2 = 100 End If Else Picture3(0).Visible = True Picture1(0).Visible = True Picture2(0).Visible = True Text4 = SD2 End If ProgressBar2.Value = SD2 Label18 = " Abriendo válvula %" End Sub Private Sub restardisplay() Dim x, y, z As Integer If SD2 = 0 Then Exit Sub End If If SD2 > 0 Then SD2 = SD2 - 1 If SD2 < 100 Then Text4 = SD2 Picture3(0).Visible = True z = SD2 Mod 10 For i = 0 To 9 If i = z Then Picture1(i).Visible = True Else Picture1(i).Visible = False End If Next y = (SD2 / 10) - z / 10 Text9 = y For i = 0 To 9 If i = Text9 Then Picture2(i).Visible = True Else Picture2(i).Visible = False If i = y Then Picture2(y).Visible = True End If End If Next Else For i = 1 To 9 Picture1(i).Visible = False Picture2(i).Visible = False Next Picture3(1).Visible = True Picture3(0).Visible = False Picture1(0).Visible = True Picture2(0).Visible = True End If Else For i = 1 To 9 Picture1(i).Visible = False

Page 227: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexos1 Rutinas Programadas

227

Picture2(i).Visible = False Next Picture3(0).Visible = True Picture3(1).Visible = False Picture1(0).Visible = True Picture2(0).Visible = True Text4 = SD2 End If ProgressBar2.Value = SD2 Label18 = " Cerrando válvula %" End Sub Private Sub TEXT3_DblClick() Text3 = "" EndSub

Page 228: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexo 2: Planos

- 228 -

8. Anexo2: Planos 8.1. Planos Circuito Interface.

8.1.1. Esquema Eléctrico.

Page 229: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexo 2: Planos

- 229 -

8.1.2. Fotolito Circuito Interface.

Page 230: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexo 2: Planos

- 230 -

8.1.3. Esquema componentes.

Page 231: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexo 2: Planos

- 231 -

8.2. Planos Estación Remota.

8.2.1. Esquema Eléctrico.

Page 232: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexo 2: Planos

- 232 -

8.2.2. Fotolito Circuito Estación Remota.

Page 233: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexo 2: Planos

- 233 -

8.2.3. Esquema componentes

Page 234: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexo 2: Planos

- 234 -

8.3. Planos Circuito Contador.

8.3.1. Esquema eléctrico.

Page 235: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Anexo 2: Planos

- 235 -

8.3.2. Fotolito Circuito Contador.

Page 236: Diseño de un control distribuido para una planta.deeea.urv.cat/public/PROPOSTES/pub/pdf/1724pub.pdf · Código Pantalla Entrada Manual. 106 7.1.3. Código Pantalla Password. 112

Links Datasheets.

- 236 -

8.3.3. Esquema Componentes.