Sei sulla pagina 1di 236

Diseo de un control distribuido para una planta.

TITULACIN: Ingeniera Tcnica en Telecomunicaciones Especialidad en


Telemtica

AUTOR: Oscar Lpez Risquez


DIRECTOR: Ramn Villarino Villarino
FECHA: Mayo del 2011

-1-
ndice

1. ndice

1 ndice 2
2 Estudio Situacin Actual en la Industria. 5
2.1 Introduccin 5
2.2. Evolucin de la automatizacin 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. Mdulos de un SCADA. 10
2.2.4. Control Distribuido. 10
2.3. Caractersticas especficas de las redes locales Industriales. 12
2.3.1. Caractersticas. 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. Jerarqua entre los niveles de comunicacin. 12
2.3.2.1. Red de Factora. 17
2.3.2.2. Red de Planta. 17
2.3.2.3. Red de Clula. 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. Caractersticas 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.. Configuracin fsica de Bus. 31
2.4.4.3. Versiones Compatibles. 32
2.4.4.4.. Estructura de la red. 35
2.4.4.5. Tecnologa de transmisin. 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.. Comparacin de los casos estudiados. 47
3. Estudio y desarrollo de un control distribuido para una planta. 48
3.1. Introduccin. 48
3.2.. Estacin de trabajo. 50
3.2.1. Software. 50
3.2.2. Funcionamiento. 51
3.2.2.1. Pantalla Inicio. 51
2
ndice

3.2.2.2. Pantalla Reaccin. 53


3.3. Puerto Paralelo. 71
3.3.1. Introduccin 71
3.3.1.1. Caractersticas fsicas del puerto paralelo. 72
3.3.1.2. Registros del puerto paralelo (SPP). 74
3.4. Circuito Interface (Bus paralelo). 77
3.4.1. Introduccin. 77
3.4.2. Descripcin. 78
3.5. Circuito Estacin Remota. 83
3.5.1. Introduccin. 83
3.5.2. Descripcin. 84
3.6. Circuito Contador. 87
3.6.1. Introduccin. 87
3.6.2. Descripcin. 87
3.7. PLC. 90
3.7.1. Definicin de PLC. 90
3.7.2. Introduccin. 91
3.7.3. Software. 91
3.7.3.1. Pantalla principal. 92
3.7.3.2. Pantalla Datos. 94
4. Conclusiones y lneas futuras. 99
4.1. Conclusiones. 99
4.2. Lneas futuras. 100
5. Bibliografa 101
5.1. Software Empleado 101
6. Links Datasheets. 102
NDICE ANEXOS 103
7. Anexo1: Rutinas Programadas. 104
7.1. Pantallas Estacin de Trabajo. 104
7.1.1. Cdigo Pgina Inicio: 104
7.1.2. Cdigo Pantalla Entrada Manual. 106
7.1.3. Cdigo Pantalla Password. 112
7.1.4. Cdigo Pantalla Vlvula amonaco. 114
7.1.5. Cdigo Pantalla Inicio. 116
7.1.6. Cdigo Pantalla Entrada Manual. 119
7.1.7. Cdigo Pantalla Grficas. 124
7.1.8. Cdigo Pantalla Entradas/Salidas. 132
7.1.9. Cdigo Pantalla Mximos y Mnimos. 148
7.1.10. Cdigo Pantalla NAcceso. 150
7.1.11. Cdigo Pantalla NPASSWORD. 151
7.1.12. Cdigo Pantalla PPRINAPOYO. 152
7.1.13. Cdigo Pantalla Principal. 155
7.1.14. Cdigo Pantalla REFRIG. 200
7.1.15. Cdigo Pantalla RegAlarm. 203

3
ndice

7.2. Cdigo PLC. 203


7.2.1. Cdigo Pantalla Principal. 203
7.2.2. Cdigo Pantalla Datos. 215
8. Anexo2: Planos 228
8.1. Planos Circuito Interface. 228
8.1.1. Esquema Elctrico. 228
8.1.2. Fotolito Circuito Interface. 229
8.1.3. Esquema Componentes. 229
8.2. Planos Estacin Remota. 231
8.2.1. Esquema elctrico. 231
8.2.2. Fotolito Circuito Estacin Remota. 232
8.2.3. Esquema componentes. 233
8.3. Planos Circuito Contador. 234
8.3.1. Esquema elctrico. 234
8.3.2. Fotolito Circuito Contador. 235
8.3.3. Esquema Componentes. 236

4
Estudio Situacin Actual en la Industria.

2. Estudio Situacin Actual en la Industria.

2.1. Introduccin.
El desarrollo del control distribuido en la industria va paralelo al de las comunicaciones.
Cada vez es ms necesario disponer de dispositivos inteligentes para realizar el control o la
supervisin remota, tanto de procesos de fabricacin, como de almacenamiento o
distribucin.
Los sistemas o redes de comunicacin empleados en entornos industriales se encuentran
sometidos a una problemtica especfica que condiciona enormemente su diseo y los
diferencia de las redes de datos o redes de oficina. El desarrollo de los microprocesadores,
microcontroladores y los controladores lgicos programables (PLCs) dio lugar a la
aparicin del control distribuido. En este tipo de esquema, un PLC o un microprocesador
controla una o ms 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 supervisin.

2.2. Evolucin de la automatizacin industrial.


Los conceptos de automatizacin tienen sus orgenes con la revolucin industrial. Los
elementos mediante los cuales se llevaban a cabo las decisiones de control eran elementos
mecnicos y electromagnticos con el advenimiento de la electricidad (motores, rels,
temporizadores, contadores). Esto tena el problema que los tableros de control (armarios
elctricos) llegan a tomar grandes tamaos segn se hacan automatizaciones ms
complejas.
En los aos 50 con la aparicin de la electrnica comienzan a utilizarse los
semiconductores con lo que se reduce el tamao de los armarios elctricos y se reduce el
nmero de averas por desgaste de componentes. Aunque esto resultaba mucho ms
amigable que los grandes tableros elctricos del principio presentaba un problema de falta
de flexibilidad: ya que un sistema de control slo sirve para una aplicacin especfica, y no
es reutilizable.
Debido a esto y a la creciente demanda industrial del momento en el ao 1968 Ford y
General Motors plantean las especificaciones que debe cumplir un controlador electrnico
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 autmata
programable industrial). Este presentaba las caractersticas que reclamaba la industria:
Reutilizable.
Adaptado a entornos agresivos (industria)
Fcilmente programable por tcnicos elctricos.
Implementado con electrnica de estado slido (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 reutilizacin es posible pero costosa. Se empezaron implementar memorias con
semiconductores eliminando las memorias cableadas mayor flexibilidad por la facilidad de
programacin. Pero por entonces todava la tecnologa de los microprocesadores no era
-5-
Estudio Situacin Actual en la Industria.

utilizable en la industria por falta de robustez, dificultad de conexin a equipos mecnicos


y dificultad de programacin.
A mediados de los 70 los autmatas incorporan el microprocesador y las memorias
semiconductoras lo que permiten programar sin recablear (aumenta flexibilidad). Adems
permiten realizar clculos matemticos y comunicar con un ordenador central (ordenador
encargado de controlar la planta enviando rdenes a los autmatas que gobiernan cada
proceso). Junto a esto aparecen los primeros DCS (sistemas de control distribuido) que
eran controladores lgicos al igual que los PLC's solo que estos en el principio dominaban
el reino del control de variables analgicas. 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 autmatas dndole a estos:
Mayor memoria.
Capacidad de gobernar bucles de control.
Ms tipos de E/S (conexin ms flexible de sensores/actuadores).
Lenguajes de programacin ms potentes.
Comunicaciones ms potentes. En los aos 80 se contina con las mejoras siendo
algunas de estas:
Mayor velocidad de proceso.
Dimensiones ms reducidas.
Tcnicas de control ms complejas (PID, inteligente, fuzzy).
Mltiples lenguajes (contactos, lista instrucciones, GRAFCET, etc.).

En los aos "90 cuando los sistemas de control basado en PC hicieron su aparicin en la
escena de la automatizacin industrial, los partidarios de estos sistemas ms poderosos y
abiertos afirmaban que dichos sistemas podran llegar a suplantar a los controladores
lgicos programables (PLC's) y hasta los sistemas de control distribuidos (DCS's) en
numerosas aplicaciones. El PC tena mucho que ofrecer, pero no suplantara las
plataformas ya probadas de control industrial, no por lo menos en la forma de un PC de
escritorio. El PC era la mejor opcin a la hora de integrar funcionalidad avanzada, como
puede ser conectividad de base de datos, integracin, control analgico y simulacin
basados en Web y comunicacin de datos con terceros. El problema con el control basado
en PC ha sido siempre este. Los PC's que corren en sistemas operativos estndares con
hardware comn resultan demasiado frgiles y temperamentales como para brindar un
control industrial confiable.
El resultado de todas estas innovaciones fue la aparicin de controladores hbridos que
permiten manejo de variables analgicas y digitales, en conjunto con caractersticas como
procesador de punto flotante para clculos personales, servidor Web interactivo embebido
que facilita las tareas de control y monitoreo, flash compacto removible para la recoleccin
y registro de datos, puertos seriales mltiples y conexionado mediante buses de campo para
la comunicacin con terceros.

6
Estudio Situacin Actual en la Industria.

En la actualidad tenemos disponibles gran variedad de autmatas hbridos compactos,


sencillos y modulares para aplicaciones incluso domsticas. Presentan grandes
posibilidades de ampliacin. Y con una tendencia hacia una evolucin continua de los
sistemas de comunicacin, constituyendo redes de autmatas que permitan
implementaciones ms complejas y seguras. Las nuevas caractersticas de los sistemas de
automatizacin apuntan a incorporar caractersticas de los sistemas distribuidos como:
Escalabilidad
Apertura
Concurrencia
Tolerancia a fallas
Transparencia

2.2.1. Estructuras generales de los sistemas de control industriales.


La Ilustracin I muestra en forma esquemtica la estructura de Control implementadas
normalmente en la industria.

Ilustracin 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 informacin 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 PCs
industriales) que permiten llevar a cabo las acciones de control en conjunto con los
actuadores. Entre todos estos dispositivos hay comunicacin vertical (desde la parte de
control hacia la operativa y viceversa) y comunicaciones horizontales (entre distintos
dispositivos de control).
Las dos arquitecturas ms 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 especficas de cada situacin.

7
Estudio Situacin Actual en la Industria.

2.2.2. Control Centralizado.


En la Ilustracin 2 puede verse la estructura general del control centralizado.

Ilustracin 2 Estructura general del control centralizado

Est constituido por un computador, un interfaz de proceso y una estacin de trabajo


(interfaz de operacin).
La principal ventaja es que su arquitectura facilita el flujo de informacin y se hace posible
que los objetivos de optimizacin 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 crticos.
Una variante del control centralizado puede verse en la figura siguiente y quizs la ms
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: adquisicin de datos y control
de supervisin.

Ilustracin 3 Esquema Arquitectura SCADA

Se trata de una aplicacin software especialmente diseada para funcionar sobre


ordenadores en el control de produccin, proporcionando comunicacin con los
dispositivos de campo (controladores autnomos, autmatas programables, etc.) y
controlando el proceso de forma automtica desde la pantalla del ordenador. Adems,
provee de toda la informacin que se genera en el proceso productivo a diversos usuarios,
tanto del mismo nivel como de otros supervisores dentro de la empresa: control de calidad,
supervisin, mantenimiento, etc.

8
Estudio Situacin Actual en la Industria.

En este tipo de sistemas usualmente existe un ordenador, que efecta tareas de


supervisin y gestin de alarmas, as como tratamiento de datos y control de procesos. La
comunicacin se realiza mediante redes LAN o buses especiales, los cuales sern
abordados ms adelante para su estudio especfico. Todo esto se ejecuta normalmente en
tiempo real, y estn diseados 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 implementacin estndar en tiempo real de CORBA (Common Object Request Broker
Architecture) para la comunicacin entre objetos a travs de redes. Adems, la
especificacin de interfaces ser muy importante para el mantenimiento y conservacin de
la inversin teniendo en cuenta los rpidos cambios tecnolgicos. Por ello sern usados
estndares abiertos como RT POSIX o ATM, y tambin 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 disposicin de ofrecer las siguientes prestaciones:
Posibilidad de crear paneles de alarmas, que exigen la presencia del operador para
reconocer una parada o situacin de alarma, con registro de incidencias.
Generacin de histricos de seal de planta, que pueden ser volcados para su
proceso sobre una hoja de clculo.
Ejecucin de programas, que modifican la ley de control, o incluso anular o
modificar las tareas asociadas al autmata, bajo ciertas condiciones.
Posibilidad de programacin numrica, que permite realizar clculos aritmticos de
elevada resolucin sobre la CPU del ordenador.
Con ellas, se pueden desarrollar aplicaciones para ordenadores (tipo PC, por ejemplo), con
captura de datos, anlisis de seales, presentaciones en pantalla, envi de resultados a disco
e impresora, etc.
Adems, todas estas acciones se llevan a cabo mediante un paquete de funciones que
incluye zonas de programacin 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
libreras de funciones para lenguajes de uso general que permiten personalizar de manera
muy amplia la aplicacin que desee realizarse con dicho SCADA.

2.2.3.2. Requisitos:
Un SCADA debe cumplir varios objetivos para que su instalacin sea perfectamente
aprovechada:
Deben ser sistemas de arquitectura abierta, capaces de crecer o adaptarse segn
las necesidades cambiantes de la empresa.

9
Estudio Situacin Actual en la Industria.

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 gestin).
Deben ser programas sencillos de instalar, sin excesivas exigencias de hardware, y
fciles de utilizar, con interfaces amigables con el usuario.

2.2.3.3. Mdulos de un SCADA:


Los mdulos o bloques software que permiten las actividades de adquisicin,
supervisin y control son los siguientes:
Configuracin: permite al usuario definir el entorno de trabajo de su SCADA.
adaptndolo a la aplicacin particular que se desea desarrollar.
Interfaz grfico del operador: proporciona al operador las funciones de control y
supervisin de la planta. El proceso se representa mediante sinpticos grficos
almacenados en el ordenador de proceso y generados desde el editor incorporado en
el SCADA o importados desde otra aplicacin durante la configuracin del paquete.
Mdulo de proceso: ejecuta las acciones de mando preprogramadas a partir de los
valores actuales de variables ledas.
Gestin y archivo de datos: se encarga del almacenamiento y procesado ordenado
de los datos, de forma que otra aplicacin o dispositivo pueda tener acceso a ellos.
Comunicaciones: se encarga de la transferencia de informacin entre la planta y la
arquitectura hardware que soporta el SCADA, y entre sta y el resto de elementos
informticos de gestin.

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 comunicacin entre cada
Controlador de proceso.

Ilustracin 4 Estructura Control Distribuido.

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

10
Estudio Situacin Actual en la Industria.

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 asignacin dinmica de las tareas y por tanto se les va a exigir
gran capacidad de acceso a la comunicacin y de tratamiento de la informacin.
La desventaja de esto es la disminucin de la velocidad de comunicacin debido a los
retardos, posibles desbordamientos en el procesamiento de datos en cada nivel y falta de
flujo de informacin directa entre controladores. Pero esto est siendo solucionado por la
aparicin de nuevas tecnologa de comunicacin de datos cada vez ms potentes
Aqu vemos que tambin tenemos una unidad de control y supervisin (SCADA) que
cumple con las caractersticas antes mencionadas para el control centralizado multicapa.
A continuacin se muestra una tabla comparativa sobre los aspectos principales de las dos
arquitecturas antes mencionadas.
TIPO DE CENTRALIZADA DISTRIBUIDA
ARQUITECTURA
RLGt." LATO RIO:
SUPERVISORIO: Lazos
de control cerrados por el Lazos de control cerrados
TIPO DE CONTROL automticamente por el
operador. Adicional mente:
PREDOMINANTE sistema. Adicionalmente:
control secuencia] y
regulatorio. control secuencia, batch,
algoritmos avanzados, etc.
TIPOS DE VARIABLES DESACOPLADAS ACOPLADAS
Arcas geogrficamente
REA DE ACCIN Arca de la planta.
distribuidas.
UNIDADES DE
ADQUISICIN DE Controladores de lazo, PLC's,
Remotas, PLC's.
DATOS DCS's
Y CONTROL
Radio, satlite, lneas
MEDIOS DE telefnicas, conexin Redes de rea local, conexin
COMUNICACIN directa. directa.
I.AN. WAN.
BASE DE DATOS CENTRALIZADA DISTRIBUIDA
A partir de lo expuesto hasta aqu se puede observar que la comunicacin entre
controladores es un aspecto fundamental para el funcionamiento de un sistema de control
distribuido. A continuacin se detallaran las caractersticas que deben tener estas redes de
controladores para operar en el ambiente de planta.

11
Estudio Situacin Actual en la Industria.

2.3. Caractersticas especficas de las redes locales Industriales.

2.3.1. Caractersticas:

2.3.1.1. Entorno de funcionamiento hostil.


Las redes industriales deben ser lo suficientemente robustas como para soportar golpes,
atmsfera agresiva, radiaciones electromagnticas, ruido elctrico y otras perturbaciones
tpicas de la operacin en planta.

2.3.1.2. Restricciones Temporales.


Las redes que comunican elementos de control con requisitos como tiempo mximo 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 interconexin de elementos de distintos
proveedores sin problemas.

2.3.2. Jerarqua entre los niveles de comunicacin:


Clasificacin jerrquica de las redes locales industriales.

Ilustracin 5 Pirmide Jerrquica.

Segn el entorno donde van a ser instaladas, el grfico de la ilustracin 5 muestra un


esquema de esto. En el esquema piramidal presentado, existen diferentes niveles de
comunicacin, 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 estn ligadas a la parte baja de la pirmide, mientras que las redes de
datos (o de oficina) estn ms ligadas a las partes altas de la jerarqua.
12
Estudio Situacin Actual en la Industria.

En general, las redes de datos estn orientadas al transporte de grandes paquetes de datos,
que aparecen de forma espordica (baja carga), y con un gran ancho de banda para permitir
el envo rpido de una gran cantidad de datos. En contraste, las redes de control se
enfrentan a un trfico formado por un gran nmero de pequeos paquetes.
En principio, las redes de datos convencionales podran 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 informacin que una red Ethernet
es capaz de transportar cae bruscamente cuando se utiliza por encima del 35% de la
capacidad del canal, si el tamao de los mensajes es pequeo, como puede verse en la
figura 6. En las redes de control es habitual encontrar este tipo de carga, porque el trfico
de la red depende directamente de eventos estemos que estn siendo controlados (o
monitorizados) por los diferentes nodos que la componen. A menudo, varios nodos
necesitan enviar informacin simultneamente en funcin de uno o ms eventos estemos.
Este hecho, junto con el gran nmero de nodos que suelen estar presentes, implica la
existencia de frecuentes periodos en los que muchas estaciones envan pequeos paquetes
de informacin.

Ilustracin 6 Comparacin de la Red Ethernet ante variaciones del tamao de los paquetes.

Por todas estas razones, es necesario disear una arquitectura de red acorde a las
caractersticas particulares de este tipo de trfico. En el diseo se debern tener en cuenta
aspectos como los tipos de protocolos utilizados, la interoperabilidad, la topologa y la
facilidad de administracin. Deben usarse protocolos abiertos, disponibles por toda la
13
Estudio Situacin Actual en la Industria.

comunidad de fabricantes y usuarios. Este aspecto es bsico para conseguir que equipos de
diferentes fabricantes puedan trabajar en conjunto en una misma red. Tambin juega un
papel fundamental determinar el tipo de informacin que viajar por la red. En las redes de
oficina, esta informacin consiste bsicamente en datos de usuario y en algunas ocasiones
informacin para la administracin y el mantenimiento de la propia red.
En una red de control, esta eleccin es menos clara ya que el correcto funcionamiento de la
red es vital.
Pueden distinguirse dos tipos de redes segn la informacin que transporten: redes basadas
en comandos y redes basadas en estado. En las redes basadas en comandos, la informacin
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 nmero de posibles comandos y de la sobrecarga que supone su
procesamiento.

Ilustracin 7 Comparacin entre redes de Datos y redes de Control

En las redes orientadas a estado las cosas son ms sencillas. En este caso, la funcionalidad
de un nodo no depende de ningn otro. Cada nodo enviar mensajes en los que indicar a
los dems el estado en que se encuentra. Los nodos que reciban estos mensajes
modificarn su estado en funcin de la nueva informacin. Existen implementaciones que
combinan ambos mtodos.

14
Estudio Situacin Actual en la Industria.

Por lo que se refiere al tipo de topologa que deben adoptar las redes de control, cabe
destacar que cualquiera de las topologas clsicas de las redes de datos es vlida. Cada una
de ellas con sus propias ventajas y limitaciones. Cualquiera puede satisfacer las
necesidades de cableado, prestaciones y coste de algn tipo de aplicacin. La eleccin 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 topologa, afecta
prcticamente a cualquier otro aspecto de la red de control: coste, facilidad de instalacin.
Habilidad, prestaciones, facilidad de mantenimiento y expansin.
La seleccin de la topologa suele hacerse basndose en los requisitos especficos de cada
sistema en cuanto a coste de instalacin y tolerancia a fallos. Muchas redes de control
permiten el uso de distintas topologas.
El control de acceso al medio es vital. Elegida una topologa, 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 parmetro 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
informacin puede ser originada y/o recibida por cualquier nodo. La forma en que las
direcciones los paquetes de informacin afectarn 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 simultneamente.
c. Broadcast: El paquete es enviado a todos los nodos de la red simultneamente.
El direccionamiento broadcast presenta la ventaja de su sencillez. Es adecuado para redes
basadas en informacin de estado. Cada nodo informa a todos los dems de cul 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
ms eficientes, y facilitan operaciones como el acuse de recibo y el reenvi, caractersticas
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 jerrquicos del control de forma sencilla- a la vez que simplifica
el funcionamiento de la red y por tanto abarata los costes de la interfaz fsica.
La eleccin del medio fsico afecta a aspectos tales como la velocidad de transmisin,
distancia entre nodos y fiabilidad. En muchas redes de control se recurre a una mezcla de
distintos medios fsicos para cumplir con los requisitos de diferentes secciones al menor
coste posible. Se incorporarn los routers, puentes o repetidores necesarios para asegurar el
objetivo de una comunicacin extremo a extremo transparente, al menor coste posible, y
sin que la integracin conlleve una disminucin 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 deteccin de un objeto en una lnea de
montaje de alta velocidad y el arranque de una mquina de pintado puede ser del orden de
decenas de milisegundos. En general, las redes de datos no necesitan una respuesta en
15
Estudio Situacin Actual en la Industria.

tiempo real cuando envan grandes conjuntos de datos a travs de la red. El control de
acceso al medio y el nmero de capas implementadas en la arquitectura de red resultan
determinantes a la hora de fijar la velocidad de respuesta de la red. La implementacin de
las siete capas del modelo OSI implica una mayor potencia de proceso por la sobrecarga
que conlleva con respecto a un sistema ms sencillo que por ejemplo slo 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 tecnologa 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, sesin y presentacin no son necesarias, como muestra el esquema de la
ilustracin 8.

Ilustracin 8: Capas de modelo OSI/ISO y su relacin con las redes de control.

Otra forma de favorecer un tiempo de respuesta pequeo es la capacidad para establecer


mensajes con diferentes prioridades, de forma que mensajes de alta prioridad (como por
ejemplo una alarma) tengan ms 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 proteccin frente a accesos no
autorizados a la red, y por otra parte la proteccin frente a fallos del sistema y averas.
El primer problema es el menos grave, ya que la mayor parte de las redes de control no
estn conectadas a redes externas a la fbrica. Adems, en la prctica, la mayor parte de las
veces, las redes pertenecientes a los escalones ms bajos de la pirmide no estn
conectados siquiera con las redes de nivel superior dentro de la propia fbrica. En
cualquier caso, los mecanismos de proteccin son similares a los empleados en las redes de
datos: claves de usuario y autentificacin de los nodos de la red.
La proteccin frente a fallos juega un papel mucho ms importante, debido a que se debe
evitar a toda costa, que este hecho afecte negativamente a la planta. Por ejemplo, los

16
Estudio Situacin Actual en la Industria.

sistemas de refrigeracin de una central nuclear no pueden bloquearse porque la interfaz de


comunicaciones de un nodo de la red se avere. Para ello es fundamental que los nodos
puedan detectar si la red est funcionando correctamente o no, y en caso de avera puedan
pasar a un algoritmo de control que mantenga la planta en un punto seguro. Si el sistema es
crtico, se deben incluir equipos redundantes, que reemplacen al averiado de forma
automtica en caso de avera. La monitorizacin de la red y la capacidad de diagnstico
representan por tanto dos puntos bsicos de cualquier red de control.
La necesidad de buenas herramientas de mantenimiento y administracin de la red son
vitales. No slo por lo dicho anteriormente sino que tambin porque en las redes de control
las operaciones de reconfiguracin y actualizacin de la red son frecuentes.

2.3.2.1. Red de Factora:


La constituyen redes de oficina que comunican departamentos contabilidad-
administracin, ventas, gestin de pedidos, almacn. Red de Planta. Generalmente estn
basadas en tecnologa Ethernet y conectadas a Internet a travs de un firewall para proteger
la red interna de un ataque exterior. Brindan Servicios de comunicacin como transferencia
de ficheros y proceso de transacciones teniendo un gran volumen de informacin
intercambiada y los tiempos de respuesta no son tan crticos.

2.3.2.2. Red de Planta.


La funcin de esta capa es interconectar mdulos y clulas de fabricacin entre s, y con
departamentos como diseo o planificacin. La informacin vinculada de esta capa es
administrada y controlada por aplicaciones SCADA, ya sea en forma centralizada o
distribuida segn la arquitectura implementada. En estas redes el trfico de datos es muy
variable desde mensajes cortos de rdenes de ejecucin hasta mensajes interactivos de
terminales de operarios. Al protocolo usado en estas redes se lo denomina MAP
(Manufacturing Automation Protocol). En la prctica se emplean soluciones clsicas
Ethernet o Token Ring, con caractersticas especiales ya presentan menor costo y ms
experiencia en su implantacin frente a soluciones a medida.

I. Requisitos de estas redes:


Manejar mensajes de cualquier tamao.
Gestin de errores de transmisin eficaces (detectar y corregir).
Cubrir reas extensas (puede llegar a varios kilmetros).
Poder gestionar mensajes con prioridades.
Amplio ancho de banda disponible

2.3.2.3. Red de Clula:


Interconectar dispositivos de control que operan en modo secuencial como por ejemplo
PLCs.

17
Estudio Situacin Actual en la Industria.

I. Caractersticas deseables de estas redes:


Gestionar mensajes cortos eficientemente.
Capacidad de manejar trfico 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 instalacin y de conexin por nodo.
Recuperacin rpida 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 crticos).
En la prctica son redes son de Tamao pequeo (5 a 50 dispositivos.) trabajando con
Redes propietarias que resultan generalmente difciles de ampliar a un cuando se dispone
de dispositivos de control de proveedores distintos. Se emplean protocolos asncronos
(orientados al carcter) si los paquetes transferidos son del orden de Kbps o sncrono si son
de mayor tamao (Mbps). Con un trfico de mensajes cortos para control y sincronizacin
entre los dispositivos y ocasional transferencia de archivos.
S bien falta de una norma de aceptacin general para estas redes se las suelen encuadrar en
las siguientes categoras:

II. Categoras:
Redes de autmatas (generalmente dependen del fabricante): por ejemplo Jnct.
Jbus, Modbus, Uni-Telway.
Redes locales heterogneas: LAC-1, LAC-2.
Redes normalizadas: Mini-MAP que resulta de una simplificacin de MAP para
poder utilizar en entornos de tiempo real, en donde, el nivel de aplicacin acceda
directamente al nivel de enlace del modelo OSI y PROWAY (Process Data Highway)
que consiste en una topologa en bus y mecanismo de acceso por paso de testigo,
cuyos aspectos funcionales estn orientados a su aplicacin en control de procesos.
Redes de propsito general: Ethernet.
Los controladores actuales disponen de dispositivos configurables de manera que
puedan comunicarse en alguna o varias de las categoras antes mencionadas.
Tambin existen dispositivos que permiten pasar de un protocolo a otro sin
problemas, son como los Gateway de las redes de computadoras convencionales. (En
la seccin 5 se abarcaran ejemplos concretos de estas redes).
2.3.2.4. Bus de Campo (field bus):
Un bus de campo es un trmino genrico que describe un conjunto de redes de
comunicacin para uso industrial, cuyo objetivo es sustituir las conexiones punto a punto
entre los elementos de campo y el equipo de control a travs del tradicional bucle de
corriente de 4-20mA. Tpicamente son redes digitales, bidireccionales, multipunto,
montadas sobre un bus serie, que conectan dispositivos de campo como PLCs,
transductores, actuadores y sensores. Cada dispositivo de campo incorpora cierta capacidad
de proceso, que lo convierte en un dispositivo inteligente, manteniendo siempre un costo
18
Estudio Situacin Actual en la Industria.

bajo. Cada uno de estos elementos ser capaz de ejecutar funciones simples de
autodiagnstico, control o mantenimiento, as como de comunicarse bidireccionalmente a
travs 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 informacin que envan y/o reciben los dispositivos
de campo es digital, lo que resulta mucho ms preciso que si se recurre a mtodos
analgicos. Adems, cada dispositivo de campo es un dispositivo inteligente y puede llevar
a cabo funciones propias de control, mantenimiento y diagnstico. De esta forma, cada
nodo de la red puede informar en caso de fallo del dispositivo asociado, y en general sobre
cualquier anomala asociada al dispositivo. Esta monitorizacin 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 ms atractivos a los
usuarios finales, es la reduccin de costes. El ahorro proviene fundamentalmente de tres
fuentes: ahorro en coste de instalacin, ahorro en el coste de mantenimiento y ahorros
derivados de la mejora del funcionamiento del sistema. Una de las principales
caractersticas de los buses de campo es una significativa reduccin en el cableado
necesario para el control de una instalacin. Cada clula de proceso slo requiere un cable
para la conexin de los diversos nodos. Se estima que puede ofrecer una reduccin de 5 a 1
en los costes de cableado. En comparacin con otros tipos de redes, dispone de
herramientas de administracin del bus que permiten la reduccin del nmero de horas
necesarias para la instalacin y puesta en marcha. El hecho de que los buses de campo sean
ms 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. Adems, los buses de campo permiten a los operadores
monitorizar todos los dispositivos que integran el sistema e interpretar fcilmente las
interacciones entre ellos. De esta forma, la deteccin de las fuentes de problemas en la
planta y su correccin resulta mucho ms 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 diseo del sistema. Algunos algoritmos y procedimientos de control que con
sistemas de comunicacin tradicionales deban incluirse en los propios algoritmos de
control, radican ahora en los propios dispositivos de campo, simplificando el sistema de
control y sus posibles ampliaciones. Tambin hay que tener en cuenta que las prestaciones
del sistema mejoran con el uso de la tecnologa de los buses de campo debido a la
simplificacin en la forma de obtener informacin de la planta desde los distintos sensores.
Las mediciones de los distintos elementos de la red estn disponibles para todos los dems
dispositivos. La simplificacin en la obtencin de datos permitir el diseo de sistemas de
control ms eficientes. Con la tecnologa de los buses de campo, se permite la
comunicacin bidireccional entre los dispositivos de campo y los sistemas de control, pero
tambin entre los propios dispositivos de campo. Otra ventaja de los buses de campo es
que slo incluyen 4 capas (Fsica. Enlace. Aplicacin y Usuario), y un conjunto de
servicios de administracin. El usuario no tiene que preocuparse de las capas de enlace o
de aplicacin. Slo necesita saber cual es funcionalidad. Al usuario slo se le exige tener
un conocimiento mnimo de los servicios de administracin de la red, ya que parte de la

19
Estudio Situacin Actual en la Industria.

informacin generada por dichos servicios puede ser necesaria para la reparacin de
averas en el sistema. De hecho, prcticamente, el usuario slo debe preocuparse de la capa
fsica y la capa de usuario.

I. Comunicacin en el Bus:
Los mtodos utilizados en los buses de campo para actualizar los datos de proceso o
entrada/salida son:
a. Strohe:
Peticin de informacin por parte del maestro (dispositivo de control) y envo desde
los dispositivos esclavos (sensores - actuadores). Este mtodo es muy eficiente para
sensores.
b. Polling:
El maestro enva informacin de salida al dispositivo y ste le responde con la
informacin de entradas.
c. Cambio de estado:
El dispositivo no transmite informacin hasta que se modifica el estado de las
variables. Muy eficiente en sistemas discretos.
d. Cclico:
El dispositivo enva la informacin a la red en un intervalo de tiempo prefijado.
Adems el bus de campo debe incorporar los servicios de comunicacin necesarios
para los procesos de configuracin, programacin y test del bus.

II. Buses de Campo existentes:


Debido a la falta de estndares, diferentes empresas han desarrollado diferentes soluciones,
cada una de ellas con diferentes prestaciones y campos de aplicacin. En una primera
clasificacin podramos dividirlos en los siguientes grupos:

i. Buses de alta velocidad y baja funcionalidad.


Diseados para integrar dispositivos simples como finales de carrera, fotoclulas, rels y
actuadores simples, funcionando en aplicaciones de tiempo real, y agrupados en una
pequea zona de la planta, tpicamente una mquina. Suelen especificar las capas fsica y
de enlace del modelo OS1, es decir, seales fsicas y patrones de bits de las tramas.
Algunos ejemplos son:

CAN: Diseado originalmente para su aplicacin en vehculos.


SDS: Bus para la integracin de sensores y actuadores, basado en CAN
ASI: Bus serie diseado por Siemens para la integracin de sensores y actuadores.

20
Estudio Situacin Actual en la Industria.

ii. Buses de alta velocidad y funcionalidad media


Se basan en el diseo de una capa de enlace para el envo eficiente de bloques de datos de
tamao medio. Estos mensajes permiten que el dispositivo tenga mayor funcionalidad de
modo que permite incluir aspectos como la configuracin, calibracin o programacin del
dispositivo. Son buses capaces de controlar dispositivos de campo complejos, de forma
eficiente y a bajo coste. Normalmente incluyen la especificacin completa de la capa de
aplicacin, lo que significa que se dispone de funciones utilizables desde programas
basados en PCs para acceder, cambiar y controlar los diversos dispositivos que
constituyen el sistema. Algunos incluyen funciones estndar 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 aplicacin orientada a objetos.
LONWorks Red desarrollada por Echelon.
BitBus: Red desarrollada por INTEL.
DIN MessBus: Estndar alemn de bus de instrumentacin, basado en
comunicacin RS-232.
IntcrBus-S: Bus de campo alemn de uso comn en aplicaciones medias.

iii. Buses de altas prestaciones


Son capaces de soportar comunicaciones a nivel de toda la factora, 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 caractersticas funcionales y de
seguridad que se les exigen. La capa de aplicacin oferta un gran nmero de servicios a la
capa de usuario- habitualmente un subconjunto del estndar MMS. Entre sus caractersticas
incluyen:
Redes multi-maestro con redundancia.
Comunicacin maestro-esclavo segn el esquema pregunta-respuesta.
Recuperacin de datos desde el esclavo con un lmite mximo de tiempo
Capacidad de direccionamiento unicast, multicast y broadcast.
Peticin de servicios a los esclavos basada en eventos.
Comunicacin de variables y bloques de datos orientada a objetos.
Descarga y ejecucin remota de programas.
Altos niveles de seguridad de la red, opcionalmente con procedimientos de
autentificacin.
Conjunto completo de funciones de administracin de la red.

Algunos ejemplos son:

Profibus
FIP
Fieldbus Foundation
21
Estudio Situacin Actual en la Industria.

iv. Buses para reas de seguridad intrnseca.


Incluyen modificaciones en la capa fsica para cumplir con los requisitos especficos de
seguridad intrnseca en ambientes con atmsferas explosivas. La seguridad intrnseca es un
tipo de proteccin por la que el aparato en cuestin no tienen posibilidad de provoca una
explosin en la atmsfera circundante. Un circuito elctrico o una parte de un circuito
tienen seguridad intrnseca, cuando alguna chispa o efecto trmico en este circuito
producidos en las condiciones de prueba establecidas por un estndar (dentro del cual
figuran las condiciones de operacin normal y de fallo especficas) no puede ocasionar una
ignicin. Algunos ejemplos son HART, Profibus PA o FIP.

2.4. Ejemplos de estudio.

2.4.1. Redes Map y Top


Para competir con las compaas japonesas fabricantes de automviles, la General Motors
quera establecer una red que cubriera todas sus oficinas, fbricas, 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 continuacin la compaa
notificara sus necesidades a sus proveedores. Una parte importante de la red de General
Motors fue la automatizacin de la fbrica, en la que todos los robots utilizados en las
lneas de ensamblado se conectaran por medio de una LAN. Dado que los coches
montados sobre la lnea de ensamblado se mueven a una velocidad constante,
independientemente de si los robots estn listos o no, se determin que era fundamental
tener un lmite superior del tiempo de transmisin en el peor caso. Ethernet no dispone de
dicha caracterstica, es ms un mensaje podra no llegar a enviarse nunca. Se opt por un
mecanismo de paso de testigo en bus (IEEE 802.4) en el que las mquinas van pasndose
el turno, produciendo as un comportamiento determinista. General Motors y otras
compaas con inters en la automatizacin de fbricas, vieron claramente la necesidad de
adoptar protocolos especficos en cada una de las capas OS1 para evitar incompatibilidades
posteriores. Este trabajo dio origen al Protocolo de Fabricacin Automatizada (MAP), el
cual fue inicialmente adoptado con rapidez por varias compaas. Aproximadamente por la
misma poca, la compaa Boeing se interes en el establecimiento de normas para la
automatizacin 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 automatizacin de oficinas llamado
TOP (Protocolo Tcnico y de Oficina), que varias compaas tambin adoptaron para la
automatizacin 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
22
Estudio Situacin Actual en la Industria.

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 fsico y en el control de acceso al medio. Mientras las redes MAP slo
contemplan el uso de paso de testigo en bus de acuerdo con el estndar 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 lgico de enlace, operando en el modo sin conexin 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 razn de esta eleccin es porque con el conocimiento que se tena sobre la
interconexin de redes en ARPA (el origen de Internet), se demostr que el planteamiento
data grama es ms flexible y robusto cuando se conectan redes heterogneas mltiples, 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 sesin y presentacin utilizan los protocolos ISO 8327 e ISO 8823
respectivamente. Las normas OSI tambin se utilizan en la capa de aplicacin,
particularmente el protocolo de transferencia de archivos y el de terminal virtual.

Ilustracin 9: Protocolo MMPS

El protocolo MMPS, especialmente diseado para aplicaciones industriales, establece un


servicio de mensajes entre controladores industriales para realizar las siguientes funciones:

Acceso a variables
Manejo de eventos
Control de ejecucin de los programas
Comunicacin con el operario
Paso de ficheros
Manejo de recursos comunes
Acceso al estado de aparatos remotos
Carga de programas
Grabacin histrica de eventos

23
Estudio Situacin Actual en la Industria.

En una red MAP, en teora, 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 aparicin de una opcin ms sencilla,
que ser estudiada en la seccin 5.2.
MAP no cubre el nivel de bus de campo (estacin y proceso), lo considera un nivel inferior
que se integra en la red mediante dispositivos inteligentes (PLCs, PCs,...).Estos
dispositivos dispondrn de una conexin de enlace con MAP directamente o a travs de
otro dispositivo. El MAP es un protocolo pensado para redes de tipo WAN incluye los
niveles de red, transporte, sesin y presentacin. Esto le permite el fraccionamiento de
paquetes y el encaminamiento de los mismos a travs de redes pblicas o privadas. Lo que
resulta excesivamente costoso y complejo para pequeas y medianas aplicaciones, sobre
todo para la interconexin de pequeos controladores a nivel industrial.
Basada en un bus con transmisin de banda ancha multicanal, que permite interconectar
los sistemas de control de planta con las aplicaciones de gestin, oficina, CAD.
Ordenadores de planta, canales de datos, voz, imgenes- ya sean estos locales o remotos.

2.4.1.1. Caractersticas de las redes MAP destacables:


Todas las seales se transmiten moduladas en frecuencia
Ancho de banda de 6 MHZ
Nmero 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.

Ilustracin 10: Capas MINIMAP

Tambin se modificaron las capas fsica y de enlace. En la capa fsica se prescinde del
sistema de transmisin en banda ancha sobre cable coaxial y se pasa a una transmisin en
banda portadora, tambin 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
24
Estudio Situacin Actual en la Industria.

empleado con elementos de control en tiempo real de bajo coste. En la capa de enlace, en
el LLC (control lgico 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 Peticin de datos con respuesta. Esto obliga a una interoperabilidad entre el
LLC y el MAC (mecanismo de deteccin y correccin de colisiones), teniendo este ltimo
que incorporar la opcin de prioridad de respuesta inmediata. Es decir, la estacin que
transmite cede (junto con el mensaje que enva) el testigo a la receptora para que esta acuse
recibo o responda a la peticin de datos de forma inmediata. Esto lgicamente permite
minimizar los tiempos de respuesta con el fin de ofrecer un buen servicio en tiempo real.
La capa de aplicacin incorpora los mismos servicios MMS que MAP, lo que permite que
esta capa se pueda comunicar con una homologa en una red MAP a travs de una pasarela
que incorpore las capas que le faltan a MINI-MAP.
La falta de la capa de red impide que haya comunicacin extremo a extremo entre nodos
que se encuentran en segmentos separados por encaminadores (routers). Esto no plantea
ningn inconveniente puesto que elementos que han de trabajar en tiempo real deben
conectarse al mismo bus, para evitar las demoras que introduciran 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. Topologa y estructura
lgica MINIMAP dispone de una topologa de bus con un mximo de 64 nodos, pero
desde el punto de vista lgico funciona como un anillo. La codificacin se realiza por
modulacin de frecuencia en banda base y la transmisin de tipo sncrono. Cada estacin
tiene asignada una direccin nica e independiente de su situacin fsica, formada por un
nmero de red (0 a 127) ms un nmero de estacin (0 a 62). El nmero 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 direccin de la estacin ms 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
posesin del testigo limitado a 800s.

I. Protocolo:

Ilustracin 11: Estructura de una trama MINIMAP

25
Estudio Situacin Actual en la Industria.

Partes Constitutivas:
Prembulo 2 bytes: 55 hex. secuencia de 0 y I que se utiliza para la sincronizacin
y permite localizar el primer BIT til.
Inicio trama: carcter especial que depende de la codificacin empleada
Tipo de Trama 1 byte: MAC (Control de acceso al medio) y LLC (control lgico
de enlace)
Direcciones destino/origen MAC: 6 bytes indican tipo de mensaje (punto a punto
o difundido), los nodos de destino u origen, el nmero de red y el tipo de servicio
(palabras comunes, memoria compartida,.)
Datos/Control LLC: Contiene la cdigos de registros o reas de memoria de
origen y destino, as como el cdigo 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 lmite de tiempo en la posesin del testigo.
Como el acceso a la red es por paso de testigo y este se ejecuta por orden de mayor
direccin a menor, en caso de prdida de testigo o arranque de la red una estacin no
conoce la direccin de la estacin que le precede o le sigue. Para esto existen
procedimientos de inicializacin y reinicializacin los que permiten crear una tabla con
esta informacin en cada estacin.
Los procedimientos de inicializacin y reinicializacin se ejecutarn en los siguientes
casos:

Arranque del sistema


Eliminacin de estaciones en la red
Prdida del testigo por error
Peridicamente para detectar la insercin de nuevas estaciones

El formato de la pila de protocolos de la capa de aplicacin es muy similar al del MAP


solo que aqu al MMPS se lo denomina MMS y desempea las mismas tareas que el
anterior.

2.4.3. Ethernet Industrial.


El protocolo Industrial Ethernet, es una solucin abierta estndar para la interconexin de
redes industriales que aprovecha los medios fsicos y los chips de comunicaciones Ethernet
comerciales. Si se tiene en cuenta que la tecnologa Ethernet se utiliza desde mediados de
los aos setenta y su gran aceptacin en el mundo, no es de extraar que Ethernet brinde la
mayor comunidad de proveedores del mundo. Al utilizar Ethernet, no solo se sigue con una

26
Estudio Situacin Actual en la Industria.

tendencia tecnolgica actual, sino que, adems, 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 estndar de comunicacin fsica y de datos IEEE 802.3
El conjunto de protocolos TCP/IP
El protocolo de control e informacin (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 tecnologa Ethernet y los conjuntos de protocolos estndar como TCP/IP han sido
proporcionados para uso pblico, se han producido en forma masiva y pueden conseguirse
fcilmente medios fsicos y herramientas de software estandarizadas, con lo que puede
tenerse las ventajas de una tecnologa conocida y una gran facilidad de acceso.
El UDP/IP protocolo de data grama de usuario) tambin se utiliza junto con la red
Ethernet. Este protocolo proporciona un transporte de datos rpido y eficiente,
caractersticas necesarias para el intercambio de informacin 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 comn.
Con la introduccin de la tecnologa de conmutacin de Ethernet (switch) y la transmisin
de datos fuIl-Duplex, se minimizan las colisiones de dalos y el rendimiento en la red
aumenta drsticamente.
Por lo general, una red Ethernet utiliza una topologa estrella activa en la que los grupos
de dispositivos estn conectados punto a punto con un conmutador. La ventaja de una
topologa 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 topologa estrella le ofrece conexiones fciles de cablear o de
depurar, o en las que resulta fcil delectar fallos o llevar a cabo tareas de mantenimiento.
Ethernet Industrial permite cubrir grandes distancias, la sea a nivel de una LAN: con
tecnologa de Switching hasta 200 Km. O bien extendindose a una WAN, en todo el
mundo, mediante protocolo TCP/IP.
La ilustracin 12 muestra un resumen de las caractersticas tcnicas de Ethernet Industrial.

27
Estudio Situacin Actual en la Industria.

Ilustracin 12: Caractersticas tcnicas de la Ethernet Industrial.

Los dos protocolos ms usados son ISO, segn normas ISO 8073, y este est optimizado
para la transferencia de variables para servicios y observacin en tiempo real. Bajo este
protocolo resulta difcil de realizar encaminamiento (routing) a travs 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 ms fcil y econmico el ruteo entre distintas
redes, se utilizan en redes LAN estructuradas y en WAN. Esto permite el uso de
tecnolgicas de informacin IT, como SNMP (protocolo de administracin de redes), http
(protocolo de transferencia hipertexto), servicios WEB, etc.
Ethernet Industrial ha sido diseada para gestionar grandes cantidades de datos de
transmisin de mensajes, hasta 1500 bytes por paquete. Permite la gestin de grandes
volmenes de datos en modo previsible. Gracias a la gran aceptacin de la tecnologa
Ethernet en los ltimos aos, el costo por nodo de dispositivos Ethernet est disminuyendo
rpidamente.

28
Estudio Situacin Actual en la Industria.

2.4.4. PROFIBUS:

Ilustracin 13: Distribucin PROFIBUS.

En el ao 1987, las firmas alemanas Bosch, Klckner Meller y Siemens iniciaron un


proyecto de desarrollo de una arquitectura de comunicaciones industriales que permitiera
la interconexin 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&Gr. etc.,
algunas universidades y organizaciones tcnicas estatales, entre ellas la propia VDE y el
Ministerio Federal de Investigacin Alemn. 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 autmatas y controles numricos hasta llegar al nivel de los
miniordenadores para diseo y gestin de la produccin. El primer objetivo fue slo el
diseo 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 ao 1990 se abri la posibilidad para cualquier usuario o empresa de
integrarse en un consorcio denominado PROFIBUS Nutzerorganisation, que a travs de
diversos comits sigue desarrollando y dando soporte al nivel de aplicacin y certificacin
de productos. PROFIBUS es actualmente el lder de los sistemas basados en
buses de campo en Europa y goza de una aceptacin mundial. Sus reas de aplicacin
incluyen manufacturacin, automatizacin y generacin de procesos.
Profibus especifica las caractersticas tcnicas 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 comunicacin de datos sobre el bus.
Un maestro puede enviar mensajes sin una peticin externa cuando posee el control de
29
Estudio Situacin Actual en la Industria.

acceso al bus (el testigo). Los maestros tambin se denominan estaciones activas en el
protocolo Profibus. Como segundo tipo estn los dispositivos esclavos, que son
dispositivos perifricos. Los esclavos son normalmente dispositivos de E/S, vlvulas,
actuadores y transmisores de seal. No tienen el control de acceso al bus y slo pueden
recibir mensajes o enviar mensajes al maestro cuando son autorizados para ello. Los
esclavos tambin son denominados estaciones pasivas, por lo que slo 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 proteccin ptima tanto a los clientes como a los
vendedores y asegura la independencia de estos ltimos. Hoy en da, todos los fabricantes
lderes de tecnologa de automatizacin ofrecen interfaces PROFIBUS para sus
dispositivos.

2.4.4.1. Estructura
La tecnologa de transmisin ms usada es la RS 485, conocida habitualmente como H2.
Su rea de aplicacin comprende aquellas aplicaciones donde prima su
simplicidad, la velocidad de transmisin y lo barato de la instalacin. Se usa un par
diferencial con cable trenzado, previsto para comunicacin semi-duplex, aunque
tambin puede implementarse con fibra ptica y enlaces con estaciones remotas va
mdem o va radio. La velocidad de transmisin vara entre 9.6Kbits/s y 12Mbits/s,
dependiendo del medio fsico, como se indica en la siguiente tabla:
Al conectar varias estaciones, hay que comprobar que el cable de las lneas de datos no sea
trenzado. El uso de lneas apantalladas es absolutamente esencial para el logro de una alta
inmunidad del sistema en ambientes con emisiones altas de
electromagnetismo (como en la fabricacin de automviles). El apantallamiento se usa
para mejorar la compatibilidad electromagntica (CEM).

Ilustracin 14: Estructura PROFIBUS

30
Estudio Situacin Actual en la Industria.

2.4.4.2. Configuracin fsica del Bus.


Bsicamente se dispone de dos tipos de estaciones: MAESTRAS (activas): que pueden
controlar el bus y transferir mensajes sin una peticin remota, si est en posesin del
"testigo". (CJ1W-PRM21) ESCLAVAS (pasivas): slo pueden reconocer mensajes
recibidos o transferir datos despus de una peticin remota. (CJ1W-PRT21, variadores,
controladores de cualquier tipo, E/S descentralizadas, etc.)
La configuracin mnima constar de dos estaciones, siempre una de ellas como unidad
MAESTRA.
El nmero mximo de estaciones es de 32 y si usamos repetidores, podemos llegar a 127.
La distancia mxima y la velocidad de comunicacin estn ligadas de forma inversa.
Adems 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 seales 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 seal. Estn especialmente pensados para largas
distancias de bus.
El cableado a realizar en la instalacin puede ser de tipo ANILLO ABIERTO. En ambos
casos habr que respetar la entrada y salida de seal al conectar el cable en los conectores y
si la instalacin es de tipo abierto, se conectarn las resistencias de INICIO y FINAL de
lnea en los conectores de los extremos

Ilustracin 15: Ejemplo de mdulo preparado para funcionar con PROFIBUS.

2.4.4.3. Versiones Compatibles.


31
Estudio Situacin Actual en la Industria.

PROFIBUS es un bus de campo estndar que soporta un amplio rango de aplicaciones en


fabricacin, procesado y automatizacin. Con PROFIBUS los componentes de distintos
fabricantes pueden comunicarse sin necesidad de ajustes especiales de interfaces. Puede ser
usado para transmisin crtica en el tiempo de datos a alta velocidad y para tareas de
comunicacin extensas y complejas. Esta versatilidad viene dada por las tres versiones
compatibles que componen la familia PROFIBUS:

Ilustracin 16: Arquitectura del Protocolo.

I. PROFIBUS PA:
Es un protocolo derivado PA, derivado de Process Automation, es un subconjunto de este
estndar, orientado a las comunicaciones de instrumentos de proceso. Es decir, equipos que
transmiten seales anlogas como presin, temperatura, y otros. Est diseada
especialmente para la automatizacin de procesos. Permite la conexin de sensores y
actuadores en una lnea de bus comn, incluso en zonas intrnsecamente seguras. Profibus
PA permite disponer de comunicacin de datos y potencia en un mismo bus utilizando una
tecnologa de dos hilos segn el estndar internacional IEC 1158-2.
Diseado para automatizacin de procesos.
Permite la conexin de sensores y actuadores a una lnea de bus comn incluso en
reas especialmente protegidas.
Permite la comunicacin de datos y energa en el bus mediante el uso de 2
tecnologas (norma IEC 1158-2).

32
Estudio Situacin Actual en la Industria.

Ilustracin 17: PROFIBUS PA.

II. PROFIBUS DP:


Esta versin de Profibus, optimizada para una conexin econmica y de alta velocidad,
est diseada especialmente para la comunicacin entre los sistemas de control de la
automatizacin y la E/S distribuidas a nivel del dispositivo. Profibus Dp puede utilizarse
para sustituir las transmisiones de seales paralelas de 24V a 20 mA.
Optimizado para alta velocidad.
Conexiones sencillas y baratas.
Diseada especialmente para la comunicacin entre los sistemas de control de
automatismos y las entradas/salidas distribuidas.

Ilustracin 18: PROFIBUS DP.

33
Estudio Situacin Actual en la Industria.

III. PROFIBUS FMS:


Profibus FMS es la solucin de aplicacin general para las tareas de comunicacin de la
clula. Los eficaces servicios FMS aportan una amplia gama de aplicaciones y
proporcionan una gran flexibilidad, tambin se puede utilizar para tareas de comunicacin
complejas de gran alcance.
Especifica las caractersticas tcnicas 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 clula. Distingue entre dispositivos maestros y
dispositivos esclavos.
Los dispositivos maestros determinan la comunicacin 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 tambin se denominan 'estaciones activas' en el protocolo
Profibus.
Los dispositivos esclavos son dispositivos perifricos. Los dispositivos esclavos comunes
incluyen dispositivos de entrada/salida, vlvulas, accionamientos y transmisores de
medicin. No tienen derechos de acceso al bus y slo pueden reconocer mensajes recibidos
o enviar mensajes al maestro cuando se solicita que lo hagan. Los esclavos tambin se
denominan 'estaciones pasivas'.

Ilustracin 19: PROFIBUS FMS.

Puede decirse sin lugar a dudas que PROFIBUS ha conseguido definir toda una red de
comunicacin industrial, desde el nivel fsico hasta el de aplicacin, superando
ampliamente los lmites de un bus de campo, integrando al mximo las tcnicas de
comunicacin previamente definidas y consolidadas En la actualidad la estructura es tal
que los grupos de los 20 pases ms industrializados ofrecen un soporte en su idioma para
el resto del mundo. Todos los grupos de usuarios se unen bajo la Organizacin PROFIBUS
International (Pl), que con ms de 750 miembros es la organizacin de buses de campo
ms grande del mundo.

34
Estudio Situacin Actual en la Industria.

2.4.4.4. Estructura de la red.


La tecnologa de transmisin ms usada es la RS 485, conocida habitualmente como H2.
Su rea de aplicacin comprende aquellas aplicaciones donde prima su simplicidad, la
velocidad de transmisin y lo barato de la instalacin. Se usa un par diferencial con cable
trenzado, previsto para comunicacin semi-duplex, aunque tambin puede implementarse
con fibra ptica y enlaces con estaciones remotas va mdem o va radio. La velocidad de
transmisin vara entre 9.6Kbts/s y 2Mbits/s, dependiendo del medio fsico, como se
indica en la tabla siguiente.
Al conectar varias estaciones, hay que comprobar que el cable de las lneas de datos no sea
trenzado. El uso de lneas 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 electromagntica (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 seales 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 seal.

II. Topologa.
La topologa 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 expansin del bus (ilustracin 20).
Este caso, la estructura en rbol es puramente una impresin de dibujo, ya que el
PROFIBUS admite una estructura lgica de maestro flotante y una estacin activa,
ejerciendo el papel de maestro, que puede estar fsicamente conectada a lo que se pudiera
considerar una expansin del bus. Por tanto, incluso en caso de ramificaciones debe
considerarse como un bus nico. El nmero mximo de nodos conectables a cada tramo
del bus, sin necesidad de repetidores es de 32.

35
Estudio Situacin Actual en la Industria.

Ilustracin 20: Topologa.

A efectos de esta limitacin los propios repetidores cuentan como un


nodo. El nmero mximo de nodos del bus es de 127, de los cuales un mximo de 32
pueden ser nodos activos. No existe ninguna limitacin 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 lgica.


La estructura lgica es de tipo hbrido: las estaciones activas comparten una estructura de
maestro flotante, relevndose en el papel de maestro mediante paso de testigo. Las
estaciones pasivas slo pueden ejercer el papel de esclavos, sea cual sea el maestro activo
en cada momento. La ilustracin 21 ilustra esta estructura.

Ilustracin 21: Estructura lgica.

Naturalmente esta estructura admite la posibilidad de que exista un solo nodo activo en el
bus, con lo que se convertira en un bus con una estructura del tipo maestro-esclavo. Cabe
sealar que cuando una estacin activa posee el testigo, considera a todas las dems como

36
Estudio Situacin Actual en la Industria.

esclavos, incluyendo tambin al resto de estaciones activas que no poseen el testigo en


aquel momento.

2.4.4.5. Tecnologa de transmisin.


El rea de aplicacin de un sistema de buses de campo est claramente determinada por la
eleccin de la tecnologa de transmisin. Aparte de los requerimientos generales (seguridad
de transmisin, distancia de la misma, velocidad) cobran particular importancia los
factores electromecnicos. Cuando se mezclan aplicaciones para automatizacin de
procesos, los datos y la energa deben ser transmitidos en un cable comn. Como es
imposible satisfacer todos los requerimientos con una tecnologa de transmisin sencilla.
PROFIBUS aprovecha 3 variaciones:

I. RS 485 (Transmisin para DP/FMS).


Es la transmisin ms frecuentemente utilizada por PROFIBUS. Esta tecnologa de
transmisin es conocida como H2. Su rea de aplicacin incluye todas las reas en las que
se requieren alta velocidad de transmisin y una instalacin sencilla. Tiene la ventaja de
que posibles ampliaciones no influyen en las estaciones que se encuentran ya en operacin.
Algunas de sus caractersticas son:
Velocidad de transmisin 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.
Conexin mxima de 32 estaciones sin repetidor (127 con repetidor).
Longitud mxima del cable dependiente de la velocidad de transmisin.

Ilustracin 22: Distancias basadas en la velocidad de transmisin.

En la conexin, es conveniente tener en cuenta algunas precauciones, de las que son


destacables:
Se recomienda el uso de lneas de datos escudadas para mejorar la
compatibilidad electromagntica (EMC).

37
Estudio Situacin Actual en la Industria.

Se recomienda mantener las lneas de datos separadas de los cables de alto


voltaje.

II. IEC 1158-2 (Transmisin PA).


La tecnologa de transmisin IEC 1158-2 cumple los requerimientos de las industrias
qumicas y petroqumicas.
Posee una seguridad intrnseca y permite a los dispositivos de campo ser conectados al
bus. Es una tecnologa principalmente usada por PROFIBUS PA y suele conocerse como
HI.
La transmisin se basa en los siguientes principios:
Cada segmento tiene slo una fuente de energa.
No se produce ningn tipo de alimentacin cuando una estacin est enviando
datos.
Los dispositivos actan como sumideros pasivos de corriente.
Se permiten redes con estructura linear, en rbol y estrella.
Para incrementar la Habilidad, se pueden disear segmentos de bus redundantes.

Las caractersticas ms importantes de este tipo de transmisin son:


Transmisin de datos digital, asncrona, codificacin Manchester.
Velocidad de transmisin 31.25 Kbit/seg.
Seguridad de los datos: prueba de error al principio y al final.
Cable de dos lneas trenzadas.
Opcin de alimentacin a distancia.
Conexin de 32 estaciones por segmento (mximo de 126 con repetidor).
Posibilidad de expansin hasta a 4 repetidores.
La estructura de la red es linear, en rbol o una combinacin de ambas.

Ilustracin 23: IEC 1158-2.

38
Estudio Situacin Actual en la Industria.

III. Fibra ptica.


Los conductores por fibra ptica pueden ser usados para aplicaciones PROFIBUS en
ambientes con interferencias electromagnticas muy altas y para incrementar la distancia
mxima con velocidades elevados. Hay disponibles dos tipos de conductores. Los
conductores por fibra ptica (plstico) 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 conversin integrada de seales RS 485 para
trabajar con conductores de fibra ptica y viceversa. Esto proporciona un mtodo muy
sencillo de intercambio entre transmisin RS 485 y transmisin por fibra ptica en un
mismo sistema.

Ilustracin 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 interconexin de
actuadores y sensores binarios. Actualmente est recogido por el estndar IEC TG 17B.
A nivel fsico, la red puede adoptar cualquier tipo de topologa: estructura en bus, en rbol,
en estrella o en anillo, como muestra la ilustracin 25.

Ilustracin 25: Topologas.

39
Estudio Situacin Actual en la Industria.

Permite la interconexin de un mximo de 31 esclavos. La longitud mxima de cada


segmento es de 100 metros. Dispone de repetidores que permiten la unin de hasta tres
segmentos, y de puentes hacia redes Profibus. Como medio fsico de transmisin, emplea
un nico cable que permite tanto la transmisin de datos como la alimentacin de los
dispositivos conectados a la red. Su diseo evita errores de polaridad al conectar nuevos
dispositivos a la red. La incorporacin o eliminacin de elementos de la red no requiere la
modificacin del cable.
El cable consta de dos hilos sin apantallamiento. Para lograr inmunidad al ruido, la
transmisin se hace basndose en una codificacin Manchester. La seal con la
codificacin Manchester se traduce en pulsos de corriente, que producen pulsos positivos y
negativos en la tensin de alimentacin, que indican las transiciones en la seal. A partir de
la deteccin de dichas transiciones se reconstruye la secuencia de bits transmitida, como
muestra la figura 16.

Ilustracin 26: Codificacin de la informacin 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 comunicacin sigue un esquema maestro -esclavo, en la cual
el maestro interroga a las estaciones envindoles mensajes (llamados telegramas) de 14 bits
y el esclavo responde con un mensaje de 7 bits. La duracin de cada ciclo pregunta-
respuesta es de 150 us. En cada ciclo de comunicacin se deben consultar todos los
esclavos, aadiendo dos ciclos extras para operaciones de administracin del bus
(deteccin de fallos). El resultado es un tiempo de ciclo mximo de 5ms. Como muestra la
Ilustracin 27.

40
Estudio Situacin Actual en la Industria.

Ilustracin 27: Tiempos de ciclo.

2.4.6. INTERBUS.
INTERBUS es un bus de campo para la interconexin 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 acta
simultneamente como interfaz con los niveles superiores de la jerarqua de
comunicaciones.
La topologa es de anillo, es decir, todos los dispositivos estn 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 mdulos terminadores de
bus.
Un rasgo distintivo de INTERBUS es que las lneas de envo y recepcin de datos estn
contenidas dentro de un mismo cable que une todos los dispositivos. De esta forma, el
sistema tiene el aspecto fsico de un bus o un rbol. Tpicamente, la capa fsica se basa en
el estndar RS-485. Debido a la estructura de anillo y a que es necesario transportar la
masa de las seales lgicas, INTERBUS requiere un cable de cinco hilos para interconectar
dos estaciones. Con velocidades de transmisin de 500 Kbits, pueden alcanzarse distancias
de hasta 400 m entre dispositivos. Cada dispositivo incorpora una funcin de repetidor que
permite extender el sistema hasta una longitud total de 13 Km. Para facilitar el
funcionamiento de INTERBUS, el nmero mximo de estaciones est limitado a 512.
La estructura punto a punto de INTERBUS y su divisin en anillo principal y sub-anillos
es ideal para la incorporacin de distintos medios de transmisin en distintas zonas de la
41
Estudio Situacin Actual en la Industria.

planta si esto fuese necesario. La estructura de anillo ofrece dos ventajas. La primera es
que permite el envo y recepcin simultnea de datos (full dplex).

Ilustracin 28: Estructura INTERBUS.

En segundo lugar, la capacidad de autodiagnstico del sistema se ve mejorada, ya que la


conexin de cada nodo a la red es activa. INTERBUS permite la deteccin preventiva de
errores por medio de una evaluacin estadstica de la calidad de las transmisiones. La
determinacin de la frecuencia de los errores de transmisin permite prever la aparicin de
fallo en un componente de la red.
Para facilitar la deteccin de errores y la puesta en marcha del sistema, INTERBUS
permite la desconexin transparente de los sub-anillos conectados al anillo principal. El
direccionamiento se basa en la posicin fsica de cada sistema dentro del anillo, aunque
opcionalmente se dispone de la posibilidad del empleo de direcciones lgicas para acceder
a dispositivos individuales independientemente de su posicin.
El protocolo de transmisin de INTERBUS se estructura en tres capas que se corresponden
con capas del modelo OSI. La capa 1 es la capa fsica. Especifica aspectos como la
velocidad, modos de codificacin de la seal fsica, 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
42
Estudio Situacin Actual en la Industria.

datos, por una parte los datos correspondientes a procesos cclicos, y por otra parte datos
que aparecen asincrnicamente. La capa de enlace es determinista, es decir, garantiza un
tiempo mximo para el transporte de datos entre dispositivos. El control de acceso al
medio se encuadra dentro de los mecanismos TDMA (Time Divisin Mltiple Access),
eliminando as la posibilidad de colisiones. Cada dispositivo tiene reservado un slot de
tiempo adecuado para su funcin dentro del sistema. El tiempo de ciclo es la suma de los
tiempos asignados a cada dispositivo. Pueden definirse slots adicionales para la
transmisin de bloques de datos en modo conexin. De esta forma pueden enviarse grandes
bloques de datos a travs 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 simultneamente, lo que garantiza que
las mediciones en las que se basan los bucles de control, fueron realizadas
simultneamente.
Este mecanismo tambin reduce la sobrecarga con informacin correspondiente al
protocolo, con lo que la eficiencia que se alcanza es alta.
La trama se forma por concatenacin de los datos de cada estacin. De forma fsica se
realiza mediante un registro. Cada dispositivo se une al anillo mediante un registro cuya
longitud depende de la cantidad de informacin que debe transmitir. Los datos
provenientes de las distintas estaciones van llegando al master en funcin de su posicin
dentro del anillo. Cada ciclo de transmisin comienza con una secuencia de datos que
contiene la palabra de loopback seguida de los datos de salida de los distintos dispositivos,
en la lnea de salida. Durante el envo de dalos, el flujo de retomo entra el maestro como
flujo de entrada. Tras el envo de la trama completa, se enva un CRC de 32 bits. Debido a
la estructura de conexiones punto a punto, el clculo siempre se hace entre cada dos nodos,
por lo que no es necesario dar una vuelta completa al anillo. Por ltimo se enva una
palabra de control para indicar el estado de cada dispositivo (deteccin de errores de
transmisin, etc.). Si no hubo errores comienza un nuevo ciclo, como se ve en el esquema
de la figura 18.
Adems de los ciclos de datos, tambin hay ciclos de identificacin. Este ciclo permite la
administracin del bus. Cada dispositivo tiene un cdigo de identificacin que indica el
tipo de dispositivo de que se trata, y el tamao de su bloque de datos. La configuracin del
bus se lleva a cabo por una secuencia de ciclos de identificacin en los que el maestro
comienza a leer en orden, la identificacin de los dispositivos conectados. En funcin de
estas lecturas se configura la trama que circulara en el ciclo de datos. Desde el punto de
vista fsico INTERBUS funciona segn un procedimiento asncrono de arranque y parada.
Se enva una cabecera que contiene informacin adicional como por ejemplo los
delimitadores de trama, cdigo de funcin 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 slo sirven para garantizar una actividad permanente en el
medio de transmisin. Si dicha actividad se interrumpe durante ms de 20 ms., se
interpreta por todos los dispositivos como una cada del sistema. En respuesta a esta
situacin, los dispositivos se desconectan de la red y van a un punto seguro definido con
antelacin.
43
Estudio Situacin Actual en la Industria.

La tercera de las capas de INTERBUS corresponde la capa de aplicacin.


En el maestro se ejecuta de forma cclica 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 tcnicas de acceso
directo a memoria evita el uso de servicios que necesitan grandes bloques de datos, lo que
facilita la consecucin del tiempo real. El acceso desde ordenadores se realiza mediante
drivers.
INTERBUS implementa en la capa de aplicacin un subconjunto de servicios basados en
MMS que se denomina PMS (Peripherals Message Specfication). Incluye unos 25
servicios que permiten la comunicacin con dispositivos de proceso inteligentes. Estos
servicios permiten por ejemplo el establecimiento y monitorizacin de conexiones, lectura
y escritura de parmetros o la ejecucin 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 automvil. En su especificacin bsica,
se exiga alta velocidad, alta inmunidad al ruido y capacidad para la deteccin de cualquier
tipo de error. Con el tiempo, CAN ha pasado de la industria automovilstica a la
fabricacin y a la industria aeronutica.
Los protocolos definidos por CAN se ajustan a la especificacin OSI. CAN define slo las
dos capas ms bajas: fsica y de enlace. Otras redes como SDS o DeviceNet proporcionan
especificaciones de la capa de aplicacin sobre la base de CAN.
El medio fsico consiste en un cable de par trenzado con los terminadores adecuados. En la
especificacin bsica de CAN, la velocidad mxima de transmisin es de 250 Kbps,
mientras que en la versin ampliada alcanza velocidades de I Mbps
La implementacin bsica de CAN presenta un fuerte acoplamiento entre la CPU y el
controlador CAN (que implementa los protocolos de capa fsica 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 transmisin de la red. En la versin conocida como "Full CAN", el
controlador de red incorpora un filtro de seleccin de mensajes en base a un campo de
identificacin. De esa forma la CPU slo recibir aquellos mensajes que le interesen.
Philips es el principal lder de la versin bsica de CAN, mientras que Intel y Siemens
lideran la versin completa.
Full CAN permite dos tamaos distintos de identificadores de mensajes: la versin A
permite identificadores de 11 bits (2032 identificadores) figura 19, mientras que la versin
extendida (B) tiene identificadores de 29 bits, figura 20.
La capa de enlace define el formato y la temporizacin usada para la transmisin 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

44
Estudio Situacin Actual en la Industria.

RTR vale 0, indica que se trata de una trama de datos, mientras que si vale 1 indica que se
trata de una peticin de datos. En ese caso, el campo de datos indicar los bytes que
formarn la respuesta.

Ilustracin 29: Trama tipo A.

El campo de control est formado por 6 bits. Los bits rl y r0 estn reservados para futuras
ampliaciones del protocolo. Los cuatro bits que forman el DLC indican el nmero de bytes
que forman la trama de datos y que van a continuacin.
El campo de datos contiene de cero a ocho bytes. El bit ms significativo de cada byte es
el primero que se transmite. A continuacin hay un campo de CRC, que contiene un
cdigo de redundancia cclica 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 enva 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 mnimo a las estaciones a prepararse
para la recepcin o envo 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 acta como valor base del
identificador. La segunda parte de los identificadores (18 bits) es la extensin 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 enva
siempre a 1 para dar prioridad a las tramas de datos estndar de tipo A con el mismo
identificador base. El bit IDE que sigue al bit SRR se enva siempre a 1, y permite
distinguir tramas tipo A y tipo B.

45
Estudio Situacin Actual en la Industria.

Ilustracin 30: Mecanismo de acceso al medio.

Una caracterstica fundamental de CAN es que cuanto menor sea el identificador del
mensaje mayor es su prioridad Si dos nodos intentan transmitir simultneamente, el
primero que enve 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 estacin es capaz de
monitorizar el medio fsico, podr detectar si su trama ha sido sobrescrita por otra de
mayor prioridad (que permanece inalterada). La estacin que no ha podido enviar el
mensaje, reintentar el envo en cuanto detecte un periodo de inactividad, como puede
verse en la figura 21. Las ventajas de este mecanismo de acceso son la minimizacin 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 mximo de 32 nodos. El nmero de mensajes por segundo
vara entre 2000 y 5000 en un bus de 250 Kbps, segn el nmero de bytes por mensaje.
Aunque se ha dicho que CAN se basa en un medio fsico de par trenzado, tambin existen
interfaces para la conexin mediante fibra ptica. El mtodo ms comn es el par trenzado,
de modo que las seales se envan mediante una diferencia de tensin entre los dos hilos.
Los hilos reciben los nombres de CAN_H y CAN_L, y en estado inactivo la diferencia de
tensin entre ambos es de 2.5 V. Un 'I' se enva colocando CAN_H a ms tensin que
CAN_L, mientras que un cero se enva colocando CAN_L a ms tensin que CAN_H. El
uso de tensiones diferenciales permite el uso de CAN incluso si una de las lneas est
daada, o en ambientes muy ruidosos.

46
Estudio Situacin Actual en la Industria.

2.4.8. Comparacin de los casos estudiados.


Para finalizar la seccin se presenta la siguiente tabla donde se muestra en forma resumida
los parmetros ms importantes de las distintas redes de comunicacin de sistemas de
control estudiadas.
Tabla 1: Comparacin de todos los casos estudiados.

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

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

3.1. Introduccin:
Para hacer la demostracin del funcionamiento del control de un lazo industrial, se ha
diseado un sistema de automatizacin industrial, o control distribuido. Para ello se ha
creado una situacin ficticia en una planta qumica, con un proceso indeterminado.
Llegados a este punto es muy importante remarcar, para evitar confusiones e
interpretaciones errneas no deseadas, que el proceso diseado y que se presenta a
continuacin es totalmente aleatorio. No se ha copiado, ni plagiado en totalidad o parte
ningn proceso industrial real, ya que se vulnerara la posible confidencialidad de stos.
Todos los elementos que se representan tanto en entornos grficos, como en la propia
memoria, son totalmente inventados y sin una coherencia real, a nivel de diseo
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 grfico necesario
para el planteamiento y posterior explicacin 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 demostracin un proceso qumico industrial. Dicho proceso consta de
algunos elementos tpicos de las plantas qumicas, como pueden ser reactores,
intercambiadores de calor, bombas, depsitos, as como elementos de medida estndares,
medidores de presin de intensidad, de caudal, etc.
Como explicbamos anteriormente, los valores que se mostrarn e incluso podremos
modificar, no sern reales, e incluso podra darse la posibilidad de que fueran valores
incoherentes. Pero en nuestro caso la implicacin o coherencia de estos valores no tiene
una relevancia de peso, ya que la parte que nos pertoca, no es la reaccin, espesor de
estructuras, kv de vlvulas, dimetro de tuberas, ni todo el conjunto de clculos y diseos
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 fcil manejo e intuitivo.
Estas herramientas estn divididas en cinco partes muy diferenciadas y fcilmente
identificables. Pero antes de empezar con la descripcin de cada una de ellas, debemos
aclara un aspecto importante de esta parte prctica. El sistema se ha desarrollado usando
como pilar central de comunicaciones el puerto paralelo de los PCs. Este sistema
ciertamente ya no es muy utilizado en la actualidad, casi en desuso. Se ha tomado esta
determinacin ya que poner en prctica un bus tal como el Profibus o similar, requiere de
una dificultad un tanto mayor as como de una inversin en tiempo y capital muy superior.
He credo que para hacer patente el funcionamiento del sistema, era ms que suficiente
generar una arquitectura similar obviando este detalle, pero realizando el sistema lo ms
parecido a lo existente en la actualidad. Como decamos anteriormente, la simulacin
consta de 5 partes, de las cuales solo daremos una pincelada, ya que ms adelante sern
- 48 -
Estudio y desarrollo de un control distribuido para una planta.

debida y ampliamente desarrolladas. En primer lugar encontramos la Estacin de Trabajo,


(E.T.). La Estacin de Trabajo, es simplemente un PC con un entorno grfico diseado,
ajustndose a las necesidades particulares del proceso y desde donde se pueden controlar
todos los elementos que conforman el mismo. Es solo un elemento de visualizacin 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 parmetro que previamente se le ha preprogramado. Es un
control virtual, ya que este ordenador no es el cerebro del sistema. Podramos 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 lneas de comunicacin del
sistema. Este elemento es el que se encarga de trasportar la informacin que se maneja en
todo el conjunto. Los elementos dejan su informacin en este bus, y sta solo la recoge el
elemento para el que est diseado. Cierto es que Profibus funciona mediante testigos para
pedir tanda de comunicacin, pero nosotros para solucionar esto hemos intercalado un
circuito electrnico encargado de repartir los datos. Igualmente que en Profibus, nuestro
bus de comunicacin 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 disear
el hardware no se les ha dotado de esta funcionalidad. Ms 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 ms 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 prctico en la realidad sera factible
en algunos supuestos. En la industria es menester equipos ms robustos y ante todo
dedicados. Un PC tiene multitud de aplicaciones que no son necesarias para un PLC y en
algunos casos podran 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 PLCs con infinitas variedades para que sean adaptables a todo tipo de procesos
industriales. Nuestro PLC es un Ordenador Porttil al cual se le ha dotado de un software
cuya finalidad es la de decidir qu hacer con la informacin que recibe del bus. Tiene la
capacidad de informar de sucesos o de ejecutar acciones concretas.
Como cuarto elemento y dependiente tambin de una conexin al bus de datos, nos
encontramos con la Estacin Remota, (E.R.). Este elemento no es ms que un circuito
electrnico similar a un PLC, pero de inferior potencia y capacidad de decisin. 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 informacin, como averas o valores medidos y reportrselos
mediante el bus al PLC. Dichos elementos suelen estar ubicados en campo, normalmente
en cajas de conexiones en medio de la planta, as como tambin en cuartos elctricos ms
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,
49
Estudio y desarrollo de un control distribuido para una planta.

ventiladores, vlvulas, etc. En nuestro caso simularemos esto con tres ventiladores, y un
circuito electrnico que mediante tres displays simular el % de apertura de una vlvula
reguladora ubicada remotamente en campo.

3.2. Estacin de trabajo.


La Estacin de Trabajo est compuesta por un PC de sobremesa, funcionando bajo
Windows XP.
Como explicamos en la introduccin, este PC trabajar como una interface entre el hombre
y las mquinas. Para ello se ha diseado un software en Visual Basic 6.0 que es el que se
encargar de traducir la informacin mostrada de forma grfica en las ventanas, a cdigos
BCD que se transmitirn mediante el puerto paralelo del PC. El software diseado al igual
que el proceso, es de creacin y diseos propios, no ha sido plagiado ni copiado en su
totalidad ni en parte de ella. Esto hace que no sea necesario ningn 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 slo sirven para realizar
funciones preprogramadas a las cuales el operario no tiene acceso.
El entorno grfico est inspirado en el sistema CITECT, pero el lenguaje de programacin
es diferente ya que este sistema no est basado en Visual Basic 6.0. Para hacerlo ms
verdico se ha simulado ste. En este entorno grfico virtualizamos un proceso qumico
indeterminado, en el cual como pieza central encontramos un reactor qumico. Este est
compuesto por un agitador que funciona propulsado por un motor elctrico. Tambin 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
presin, temperatura y nivel que miden a tiempo real lo sucedido en su interior. Estos
valores tienen unos mnimos y unos mximos. Cuando cualquiera de estos valores iguala o
supera estos lmites, automticamente se dispara una alarma tanto visual como acstica.
Pero para hacer que el sistema sea ms elstico 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 presin diferentes. Dichas modificaciones podran 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
parmetros que son importantes o de seguridad.
Tambin disponemos de unas series de vlvulas. En este diseo las hay de dos tipos: de
todo o nada y reguladoras. Las vlvulas todo o nada, tienen el nico fin de permitir o no el
paso del producto, en cambio las reguladoras como su nombre indican, nos permitirn
50
Estudio y desarrollo de un control distribuido para una planta.

manipular el caudal que deseamos circule en cada momento. En algunos casos podremos
ponerlo en funcin automtico, de manera que basndose en unos datos preprogramados
ella se auto regular sola.
Hemos incluido un depsito cuya finalidad desde el punto industrial quiz no sea muy
coherente, pero con ello demostramos un pequeo ciclo de funcionamiento automatizado,
basado en unos parmetros prefijados. Este depsito se va llenando hasta llegar a un nivel
mximo, cuando lo alcanza, automticamente se pone en marcha una bomba que lo vaca
hasta un nivel mnimo determinado. Tras esto se repite el ciclo nuevamente.
Existen algunos elementos ms, los cuales ya expondremos de forma ms amplia.

3.2.2. Funcionamiento.

3.2.2.1. Pantalla Inicio.


En primer lugar nos encontramos con la pantalla de acceso. Esta pantalla est diseada
para arrancar el programa, no la simulacin. Es un sistema de seguridad, tan solo debera
poder arrancarlo personal autorizado, por lo que el acceso se hace mediante un password.

Ilustracin 31. Pantalla Acceso.

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

En esta pantalla podemos actuar de varias maneras diferentes:


Al inicio tenemos un cuadro de texto en el centro. Este cuadro est diseado 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 mayora de los
casos no es usual, por lo que precisamos de alternativas para cubrir todos los frentes
posibles. Una solucin adoptada es la de crear un pequeo teclado manejable desde el
ratn. En esta pantalla si clicamos en el cuadro de control, nos aparecer dicho teclado que
nos permitir introducir valores alfanumricos con el ratn.

Ilustracin 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 cdigo. Para ello disponemos de un botn que permite codificar los caracteres en
asteriscos.
En la parte superior de la pantalla inicio, encontramos un pequeo men con dos opciones.
La primera sirve para cambiar el password de acceso, hacerlo peridicamente es algo
recomendable, y la segunda para cerrar el programa, algo que podemos hacer igualmente
52
Estudio y desarrollo de un control distribuido para una planta.

Ilustracin 33: Modificar password.

desde el botn Cerrar. Una vez introducido el password podemos clicar el botn
Acceder o pulsar Return en el teclado. Si el password es incorrecto recibiremos un
mensaje:

Ilustracin 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 mquina, ya que en este instante
de forma subliminal el programa cargar en memoria una serie de parmetros que tiene en
una base de datos Excel. Todo ello se ve reflejado en una barra de progreso.

3.2.2.2. Pantalla Reaccin.


Esta pantalla es el ncleo del sistema. Desde ella podemos controlar todos los dispositivos
que conforman la simulacin. Es cierto que existen ms 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.

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

Ilustracin 35: Pantalla Reactor.

Empezaremos por la parte superior izquierda. En ella podemos ver un men


desplegable que consta de diversas opciones.

Ilustracin 36: Men desplegable 1.

La funciones a las que nos da acceso son: activar la simulacin, desactivarla y salir del
programa.
En el siguiente sub-men llamado Funciones encontramos dos opciones ms. La primera
nos permite visualizar una pantalla hibrida. La llamamos as por un simple motivo.
Anteriormente explicamos que existan 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

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

se encarga de traducir las rdenes que le enviaremos mediante un clic de ratn sobre un
elemento, convirtindolas en cdigos BCD que viajarn a travs del

Ilustracin 37: Men desplegable 2.

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

Ilustracin 38: Entradas y Salidas.

La ilustracin 38 nos muestra la pantalla a la que hacamos referencia y que explicaremos


ms adelante. Tras la opcin de Entradas/Salidas nos encontramos otra opcin llamada
Fallos y Dispositivos. Esta opcin expande un desplegable por el lado derecho de la
pantalla de Reaccin como podemos observar en la ilustracin 39 presentada abajo. En este

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

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

Ilustracin 39: Fallos y dispositivos.

Estos indicadores pueden adoptar tres colores. Cuando estn en verde quiere decir que el
dispositivo est activado y funcionando correctamente. Cuando estn 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 avera en un dispositivo final. El cul estar indicado
por una seal acstica y un mensaje de texto que informar de forma escueta de que se
trata., Adems 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.
Ms abajo encontramos un botn con el nombre de Rearme. Este botn como su nombre
indica, slo 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 seal desde el PLC la cual nos para el dispositivo y muestra el indicador

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

morado que hemos comentado anteriormente, adems 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 posicin 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 habamos presentado hace un momento.
Esta pantalla, como bien explicamos en su momento, tiene la funcin principal de traducir
las rdenes, de marcha y paro, en cdigos BCD. En este modo de funcionamiento, el
operador no tiene capacidad de manipulacin de la informacin, pero sin embargo puede
acceder a sta. Este acceso se limita simplemente a un uso informativo o de verificacin,
ya que podemos ver el estado en todo momento de las entradas del puerto para
cerciorarnos si estamos recibiendo correctamente la informacin, o tambin para ver si
existe algn fallo en el bus de comunicacin. Otra opcin es el forzado de las salidas con lo
que creamos cdigos BCD de forma manual, que permite hacer verificaciones de
funcionamiento.
Continuando por la parte superior izquierda de la pantalla de Reaccin, nos topamos con
dos botones que si bien son diferentes tiene un roll comn. Anteriormente nos referimos a
la seguridad, diciendo que hay parmetros que tan solo debera poder manipular personal
con un cierto nivel de acceso.

Ilustracin 40: Loggin.

Precisamente estos botones tienen esa finalidad exacta. El botn de la izquierda nos
permite autentificarnos verificando el nivel de acceso que tenemos en el sistema. Como se
trata de una simple simulacin, slo hemos creado dos niveles de acceso: el de Operador
que es el que existe por definicin y el de Administrador.

Ilustracin 41: Nivel de Acceso.

Lgicamente el nivel de Operador, como es el ms bsico no requiere de clave, tan solo


lo precisa el de Administrador.

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

Existe un cuadro de texto en la parte inferior derecha de la pantalla de Reaccin donde se


puede ver en todo momento que nivel de acceso tenemos introducido.

Ilustracin 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 automticamente. De esta forma no se puede dejar activado por error con el
consecuente peligro que ello conllevara.
El acceso a esta pantalla es posible desde diversos puntos del programa no solo desde aqu.
El segundo botn realiza la misma funcin 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 simulacin van teniendo lugar una serie de sucesos.
Unos los provocaremos manualmente y otros esta programados para que surjan de forma
aleatoria. Todos ellos generarn alarmas tanto acsticas como visuales, as como una
pequea lnea 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 lneas 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 pequeo registro de alarmas, que es capaz de almacenar las 1000 ltimas
recibidas, en el orden en que han sucedido. Este botn no hace ms que mostrarnos este
registro para as poderlas visualizar todas.

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

Ilustracin 43: Registro de Alarmas.

El siguiente botn 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 acstica como visual.

Ilustracin 44. Apercibimiento Alarma.

En la ilustracin 44 podemos ver las dos formas que toma el mismo botn. 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 continuacin 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

Ilustracin 45: Cuadro Alarmas no activo.

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

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

Ilustracin 46: Cuadro Alarmas activo.

Concluyendo con los botones que encabezan esta pantalla, llegamos al que es
probablemente el ms importante de todos, el contacto que pone en funcionamiento todo el
sistema. Sin activarlo, la comunicacin 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.

Ilustracin 47: Interruptor de Inicio.

Al cambiar al estado de Activo en este preciso momento, se desbloquean todos los


elementos grficos representados en el dibujo, de manera que podremos empezar a poner
en marcha bombas, a abrir vlvulas, etc. teniendo en cuenta que algunos de ellos tienen
una secuencia determinada es decir, que para poner en marcha segn qu elementos se
necesita previamente de la puesta en marcha de otros.
Si intentamos realizar esta operacin sin cumplir la regla previa, nos aparecer un mensaje
informndonos 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 estacin de trabajo cuando detecta que esta activa, una
de las primeras operaciones que ejecuta es comprobar si se encuentra en lnea 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 lnea, se activa, pero nos muestra un mensaje
informndonos 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 preguntndonos si estamos seguros de
que queremos interrumpir el programa.

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

Ilustracin 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 interrumpirn todos los procesos
que se estn ejecutando, detenindose el contador de tiempo.
Ya hemos terminado con los elementos que conformaran el men de funcionamiento
auxiliar, que son todos los botones y sub-mens de la parte superior de la pantalla de
Reaccin. Ahora empezaremos a explicar el funcionamiento del entorno grafico
propiamente dicho. Haremos una explicacin 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 ratn por encima de la
pantalla, al situarse encima de los indicadores, as como de los dispositivos, bombas,
motores, vlvulas, etc., aparece una etiqueta identificativa que desaparece al posicionarse
encima de otra, con la consecuente aparicin de la nueva correspondiente. Esta es una
herramienta interesante ya que facilita la identificacin de un elemento cuando hay muchos
similares. Observamos que para facilitar la posicin del ratn 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.

Ilustracin 49: Etiqueta y recuadro de seleccin.

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

Ilustracin 50: Indicador Valor Medido.

momento del valor que se est midiendo. Cada uno de ellos est tarado a un mximo y a u
mnimo. Estos valores limtrofes tienen la capacidad de lanzar alarmas en cuanto detecten
que el valor promedio ha llegado o superado este umbral. Si esto sucede, automticamente

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

se pondrn en color rojo, indicndonos que algo no est bien. Por lo que el operario podr
actuar de alguna para corregir esta incidencia.

Ilustracin 51: Indicador Valor Medido alarmado.

Pero como comentbamos anteriormente, estos valores se pueden modificar, haciendo el


sistema ms elstico.

Ilustracin 52: Modificar Valores Mximos y Mnimos.

Para modificarlos iremos a esta sub-pantalla de apoyo. Llegaremos a ella pulsando con el
botn izquierdo del ratn 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 botn, que es exactamente el mismo
que hay en la parte superior izquierda de la pantalla reaccin.
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 botn izquierdo del ratn sobre el recuadro donde est el valor a
corregir. Automticamente 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 botn cuya finalidad es verificar el valor que colocaremos.

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

Ilustracin 53: Visual botones de verificacin.

Esto nos evitar que podamos equivocarnos y colocar un valor mximo inferior al mnimo
o un mnimo superior al mximo.. Cuando tengamos los valores deseados introducidos
pulsaremos el botn Salir. Los lmites nuevos ya son operativos, pero para que el
programa sea ms liviano y funcione ms gil, estos valores quedan en memoria. Esto
quiere decir que si ahora tenemos un fallo de energa, al arrancar nuevamente el programa
tendramos que modificarlos de nuevo. La operacin que hace al cargar las bases de datos
al principio en la pantalla de Inicio, tiene su homlogo 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 travs de esta pantalla para seguir un orden ms 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 reaccin para que recoja ese parmetro. 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 reaccin una cantidad absurda de grados,
ya que esto desestabilizara la reaccin. Por esta razn existe una limitacin en cuanto a los
grados que se pueden subir y bajar a la vez.

Ilustracin 54: Recuadro de valor prefijado.

El siguiente dispositivo sobre el que podemos actuar es el agitador. Virtualmente,


se tratara de un motor conectado a un sistema reductor, que hara girar unas palas, cuya
funcin es la de homogenizar los elementos que estn reaccionando dentro del reactor.
63
Estudio y desarrollo de un control distribuido para una planta.

Nosotros no podemos actuar sobre la velocidad de giro de stas ni sobre ningn otro
parmetro que no sea su marcha o paro.

Ilustracin 55: Marcha agitador.

Una vez pulsemos sobre el motor del agitador nos saldr una ventana como la de la
ilustracin 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, automticamente 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, presin y nivel empiecen a
oscilar. Ningn 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-reaccin se ha
podido generar al fallar este dispositivo. Este motor ser uno de los tres elementos finales
que servirn como ejemplo real de funcionamiento del proyecto. Es decir, que cuando lo
conectemos o paremos, realmente se pondr en marcha un elemento fsico; 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 botn de rearme que explicamos anteriormente en la pestaa desplegable.
A continuacin encontramos una bomba que realiza una recirculacin y a su vez
puede ejecutar un vaciado de emergencia del reactor mediante una vlvula de 3 vas. Esta
bomba puede darnos informacin de funcionamiento con tres parmetros: intensidad,
revoluciones y presin. 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
accin. Si afirmamos, pero no cumplimos la condicin que antes explicbamos de que el
agitador est en marcha, obtendremos el siguiente cartel informativo.

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

Ilustracin 56: Mensaje fallo enclavamiento marcha.

Sin embargo a modo representativo, en esta bomba hemos introducido otro tipo de
enclavamiento muy comn en estos sistemas. Es un tipo de enclavamiento diseado para
que el elemento se auto proteja de acciones dainas. Muchos de los motores que se instalan
en la industria estn 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 accin el sistema nos contestara con el siguiente mensaje.

Ilustracin 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 comn en este tipo de dispositivos es que estn acoplados a
variadores de frecuencia, por lo que el arranque es progresivo, se ha hecho que los valores
medidos de intensidad, revoluciones y presin aumenten su valor paulatinamente, hasta
llegar al rendimiento de trabajo correcto, con lo que se estabilizan con las pequeas
fluctuaciones tpicas 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 prcticamente idntica a la de la otra bomba. Slo existe unas pequeas
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 prohibicin de re
arrancar dependiendo de la intensidad, no est activa. Pero hemos incluido otra restriccin.
Cuando observamos el diagrama, tras la bomba que estamos tratando existe una vlvula
automtica. Sera una incoherencia que nos permitiera poner en marcha dicha bomba sin
previamente abrir esta vlvula, ya que el trabajo que realizara esta bomba podra llevar a

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

una avera. Entonces es lgico que este acto se tenga que realiza previamente, por lo que si
no lo hacemos nos generar un mensaje de error.

Ilustracin 58: Mensaje de error que informa de que la vlvula 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 presin, 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 funcin muy
interesante en uno de estos cuadros de medida. Algo muy utilizado en estos sistemas de
control industrial, es poder saber la progresin en el tiempo de la variable, pues ello nos
informa de la tendencia que tiene, y nos permite actuar con antelacin a cualquier exceso o
defecto en una variable. En definitiva nos est dibujando una funcin en el tiempo. En este
caso nos representar estos tres valores pertenecientes a la situacin online de la bomba.
Estas grficas las podemos extraer al hacer doble Chick en el medidor de revoluciones,
pero teniendo en cuenta que est enclavado a que haya algn valor medido, en el caso de
que no exista valor, no se ejecuta. Es lgico 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.

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

Ilustracin 59: Pantalla Grficas de Tendencias.

La pantalla Grficas se ha diseado de forma bsicamente informativa, permite un


mnimo de manipulacin, pero muy limitado. De este apartado tan solo, se podra hacer un
software dedicado, ya que las posibilidades que brinda un buen historial de grficas de
tendencias son muy amplias, y la ayuda que presta al control y prevencin de riesgos en un
proceso, es importantsimo. Tan solo por ello no podemos dejar nuestro sistema sin
introducir este elemento.
No se ha trabajado este punto en profundidad, ya que implicara prcticamente un proyecto
solo para este fin. Pero con la implementacin que hemos realizado, ser suficiente para
plantearlo y ejemplificarlo.
En un proceso real dispondramos de un registro histrico de das, meses o incluso aos.
En nuestro caso la medida es online, no est dotada de memoria, es decir una vez se cierra
las grficas se borran. Los grficos reales no tienen tiempo lmite, el nuestro tiene una
duracin determinada, pasada la cual empezara de nuevo.
Una vez introducido un poco este tema, podemos exponer el funcionamiento de esta
ventana.

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

Est dividida en dos partes: el recuadro de la izquierda, dedicado al ajuste de las grficas, y
el recuadro de la derecha que nos permite una mnima manipulacin 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 funcin de jugar con la amplitud de la
grfica, 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 multiplicacin 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 grfica 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 acta sobre la barra de ajuste vertical y sobre el span que de forma
automtica ajusta la variable en el centro de la pantalla, pudiendo despus colocarla donde
deseemos. Si empleamos este modo, cuando el sistema haya ajustado el canal deseado, nos
mostrar un mensaje informndonos de este hecho.
Ya hemos explicado cmo 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 ms clara, se ha dotado a cada uno de un color diferente. Para
activar o desactivar el canal, se pulsa sobre el botn 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 crculo azul que nos indica esto,
adems de que empezar a dibujarse la funcin. Para seleccionar un canal cuando lo
queramos ajustar, clicaremos con el ratn en el cuadro de color donde pone el tag.
Automticamente un recuadro rojo aparecer, envolvindolo, de esta manera queda
seleccionado este canal.
Lo siguiente que encontramos avanzando hacia la derecha es una vlvula
reguladora. La vlvula funciona de forma diferente a los dispositivos explicados hasta el
momento. Para su activacin no tenemos ningn enclavamiento, ya que es autosuficiente.
Pero como su funcin es regular la refrigeracin 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 vlvula nos aparece una nueva
ventana.

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

Ilustracin 60: Reguladora intercambiador.

En esta ventana podemos regular la temperatura del intercambiador de dos maneras: de


forma manual o automtica.
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
regulacin de temperatura.
El regulador contiene dos barras de progreso: la primera nos indica la reaccin 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 vlvula que tenemos en cada momento. Estos
datos podemos verlos tambin de forma numrica 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 vlvula.
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 acte de forma
automtica regulando a una temperatura prefijada, pulsando el botn con las flechas en
crculo. Cuando funciona en modo automtico las flechas giran de forma circular, cuando
est en forma manual estas detenidas.

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

Todos los dems 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.

Ilustracin 61: Dispositivos.

La mayora 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 lnea que lo precede, empiecen
a reflejar valores.
El ltimo dispositivo de funcionamiento diferente a los dems es la vlvula
reguladora VA2. Esta vlvula funciona prcticamente igual que la reguladora de agua que
hemos explicado anteriormente, con algunas diferencias.

Ilustracin 62. Reguladora VA2

Visualmente podemos ver que son muy parecidas, pero existen algunas diferencias
importantes de funcionamiento. Veamos la ilustracin 62. Podemos observar que en la
parte superior izquierda existe un pequeo men llamado Ajuste. Para explicar este
70
Estudio y desarrollo de un control distribuido para una planta.

comando, debemos aclarar un aspecto sobre esta vlvula. 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 vlvula reguladora, que est
fsicamente ejemplificada mediante los tres displays de 7 segmentos de un circuito
contadora. Adems este ltimo est tambin 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 botn sincronizamos a cero los
dos elementos tanto de la estacin 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 medan temperatura en la primera de ellas y ahora miden
caudal. La segunda sigue refirindose a la apertura de 0 a 100.
Los dos marcadores siguen la misma lnea, el primero nos indica el caudal en m3 y el
segundo la apertura en %.
Una de las mayores diferencias reside en el control. Slo podemos aumentar o disminuir la
apertura de 1 en 1%, y no existe el control automtico.
Otra de las mayores diferencias es que esta reguladora posee grfica 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 exposicin del proyecto explicaremos brevemente el funcionamiento
del puerto paralelo, de manera que podamos entender el funcionamiento del bus que hemos
creado, para la comunicacin del sistema.

3.3.1. Introduccin.
Un puerto paralelo es una interfaz entre una computadora y un perifrico, cuya principal
caracterstica es que los bits de datos viajan juntos, enviando un paquete de byte a la vez.
Es decir, se implementa un cable o una va fsica para cada bit de datos formando un bus.
Mediante el puerto paralelo podemos controlar tambin perifricos como focos, motores
entre otros dispositivos, adecuados para automatizacin.
El puerto paralelo ms conocido es el puerto de impresora (que cumplen la norma IEEE
1284, tambin 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 comunicacin bidireccional de 8 bits de datos, adems de un conjunto de
lneas de protocolo. Las lneas de comunicacin cuentan con un retenedor que mantiene el
ltimo valor que les fue escrito hasta que se escribe un nuevo dato, las caractersticas
elctricas son:

Tensin de nivel alto: 3,3 o 5 V.


Tensin de nivel bajo: 0 V.
71
Estudio y desarrollo de un control distribuido para una planta.

Intensidad de salida mxima: 2,6 mA.


Intensidad de entrada mxima: 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 configuracin


que no tiene conexin al exterior, su direccin en el LPT1 es 0x37A.
El registro de estado, se trata de un registro de entrada de informacin de 5 bits, su
direccin en el LPT1 es 0x379.
El registro de datos, se compone de 8 bits, es bidireccional. Su direccin en el
LPT1 es 0x378.

3.3.1.1. Caractersticas fsicas del puerto paralelo.


La caracterstica ms relevante del puerto paralelo es que es capaz de transmitir 8 bits de
datos simultneamente a travs de 8 lneas en paralelo. La distancia mxima del cable es de
2 a 4 metros, lo que reduce mucho su mbito de aplicacin. A cambio la velocidad de
transferencia puede ser mayor que la de un puerto serie. Las seales elctricas que utilizan
TTL en lgica positiva: 0 voltios para el 0 lgico y 5 voltios para el 1 lgico.
En la tabla siguiente se muestra un resumen de las seales del puerto paralelo y la
asignacin 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 BUS DE DATOS
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
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

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

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 MASA
lneas a masa.
Tabla 2: asignacin de los contactos en los tres tipos de conectores.

Ilustracin 63: Conector DB 25.

Si deseamos utilizar el puerto paralelo para otros usos distintos de la conexin a una
impresora sabemos que disponemos de las siguientes seales genricas en funcin del tipo
de puerto.
El puerto paralelo en los PCs 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 seales se relacionan con la conexin de una impresora
paralelo, pero desde el punto de vista ms general, podemos ver el puerto paralelo como un
conjunto de E/S digitales a las que nombraremos segn el tipo de registro. De este modo,
las salidas son las lneas D0-D7 del registro de datos y las lneas /C0, /C1, C2 y /C3 del
registro de control. Las entradas son S3, S4, S5, S6 y /S7.
Las seales de / indican lgica negativa: si el bit /S7 est a uno en la lnea 11 hay cero
voltios.
La norma IEE 1284 define 3 tipos de conectores:
Tipo A: Se corresponde con el clsico 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 perifricos, posee 36 conectores.
73
Estudio y desarrollo de un control distribuido para una planta.

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 PCs, estn siendo reemplazados por los puertos USB.
El nmero de puertos paralelo y serie instalados en el PC pueden ser ledo del rea de datos
de la BIOS en las siguientes direcciones.

Deteccin del nmero de puertos


Dir. Bits Contenido Valor tpico
0040:0011 D0-D1 Nmero total de puertos paralelo 0x01
0040:0011 Nmero total de puertos serie 0x02
Tabla 3: Deteccin del nmero 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 direccin 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 tpico
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 direccin 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

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

DIR_ES_BASE+2 LEC/ESC Registro de control (C0..C7) 0x03FA


Tabla 5: Registro del puerto paralelo..

Ilustracin 64: Propiedades del Puerto paralelo.

A continuacin mostraremos los tres registros del puerto paralelo SPP.

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

Ilustracin 65: Registros SPP.

La primera columna indica la direccin de E/S donde se encuentra el registro. La segunda


columna indica el tipo de acceso: lectura o escritura. Obsrvese como el registro de estado
es de slo 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 tensin en las lneas 2 a 9 del conector
DB25, si leemos de l sabremos la tensin actual de esas lneas. Si se encuentra activado el
modo bidireccional (bit C5 del registro de control) el registro de datos es de slo lectura y
es un reflejo de las tensiones aplicadas en las lneas 2 a 9 del conector.
La columna INV indica si se produce una inversin hardware por parte de la interface
CENTRONICS, por ejemplo, cuando el bit /S7 est a uno, en la lnea 11 del conector se
tiene cero voltios.
La columna L indica si la seal correspondiente del protocolo CENTRONICS va con
lgica positiva o con lgica negativa, por ejemplo, la lnea /ACK (reconocimiento de
76
Estudio y desarrollo de un control distribuido para una planta.

datos) informa al PC de que se ha recibido un nuevo dato ponindose a nivel bajo. Sin
embargo, puesto que /ACK se corresponde con el bit S6 y ste no tiene inversin hardware
cuando en la lnea existan cero voltios en S6 habr un 0 lgico.
Para evitar confusiones, se utilizan nicamente las nomenclaturas de las lneas a partir del
bit que ocupan. Las que trabajan en lgica negativa son: /S7, /C0, /C1 y /C3. Como
resumen se muestra a continuacin 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 interrupcin (IRQ5 o IRQ7 tpicamente) cuando se produce una
transicin en el bit S6 (/ACK) correspondiente a la lnea 10 del conector DB25.

Ilustracin 66: Mapa de E/S.

3.4. Circuito Interface (Bus paralelo).


Una vez hemos descrito el funcionamiento de la estacin de trabajo y del puerto paralelo,
continuaremos explicando cmo hemos hecho para hacer efectiva la comunicacin. Es
decir en definitiva la arquitectura de nuestro bus.
3.4.1. Introduccin
Este circuito ser el primero de otros tres, que son junto al PC que hace de Estacin de
trabajo y el que realiza la funcin de PLC conforman el hardware del proyecto.
En este primer circuito realizaremos la funcin de comunicacin Estacin de Trabajo al
PLC. Anlogamente sera la red por la que viajarn los datos, bajo el protocolo de
comunicacin adecuado, ya sea un bus Profibus, o cualquier otro. En nuestro caso ser
77
Estudio y desarrollo de un control distribuido para una planta.

simplemente un lenguaje binario o BCD. Esta comunicacin se realizar mediante el


puerto paralelo de los dos PCs. Es un mtodo fuera de uso hoy en da, pero para realizar
una demostracin comprensible es ms que suficiente, El dilogo se realizar a travs de la
interpretacin y el procesado de cdigos binarios. Cada uno de ellos corresponder a la
orden de activacin o desactivacin de un dispositivo, as como cdigos de generacin de
alarmas de funcionamiento incorrecto de dispositivos, que ya explicaremos en el apartado
correspondiente al circuito Estacin Remota.

Ilustracin 67. Vista Circuito interface.

3.4.2. Descripcin.
Como ya hemos explicado anteriormente, el puerto paralelo del PC, est compuesto por un
conector DB25 hembra, estas 25 patillas estn dispuestas en tres grupos. Salidas de control,
salidas de datos y entradas.
78
Estudio y desarrollo de un control distribuido para una planta.

Ilustracin 68: Patillaje DB25.

Para las salidas de datos contamos con 8 lneas numeradas de la D0 a la D7 en tecnologa


TTL, es decir 5V, las cuales como su nombre indica (puerto paralelo), da seal a los 8
bits simultneamente. 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 lneas desde la C0 a la C3, nos permite codificar desde el 0 al 16, pero con una
peculiaridad, que tres de las lneas 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 implementacin por software. Finalmente las entradas, estn 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 lgica negativa.
Un aspecto importante para el diseo del circuito es conocer el comportamiento de las
entradas y salidas, ya que sin este conocimiento previo, el planteamiento del mismo sera
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, estn basadas en TTL, pero a diferencia de las entradas, su estado inicial
es fcilmente conocido, se encuentran siempre a nivel lgico alto (1), Este nivel permanece
invariante hasta que se le fuerza a 0 mediante la puesta a nivel bajo de la lnea de forma
fsica. Es decir, de alguna manera hay que llevar esta lnea a potencial 0. Esto solo se
puede hacer mediante el control de algn tipo de dispositivo.
El sistema ha sido diseado para que la comunicacin entre la estacin de trabajo y el PLC
sea bidireccional. Con este fin se han creado dos carriles, uno de trfico de datos ET
PLC y otra PLC ET. Los datos que corrern desde la ET compartirn carril con otra
corriente proveniente de la Estacin Remota (ER).
Empezar la explicacin de este circuito de la misma forma en que lo he concebido y en
idntico orden. Nos situamos en la pantalla de un PC, que ficticiamente est ubicado en la
sala de control de una fbrica, la cual fabrica el producto X. El operario que controla el
79
Estudio y desarrollo de un control distribuido para una planta.

proceso desde esta interface decide actuar sobre un elemento, ya sea vlvula, motor, o
simplemente modificando una consigna de temperatura, etc. Cuando ste realiza tal accin
se produce una cascada de bits que fluye desde el puerto paralelo de dicha estacin de
trabajo en direccin a la red de comunicacin. Puesto que todos los elementos de dicho
sistema no utilizan el mismo idioma, hay que traducirlo para que se puedan entender. Esta
es la funcin principal del circuito en cuestin, 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 ms de idnticas caractersticas, pero
finalidades muy diferentes.
Una vez han atravesado el portal de acceso, la orden del operario en forma de bits, entra en
un circuito electrnico el cual se encargar de dirigirlos adecuadamente y con un orden
correcto. El sistema tiene dos carriles de opuestas direcciones, el carril actual direccin
PLC tiene una peculiaridad respecto al de regreso. Este puede albergar datos de entrada de
dos fuentes diferentes: ET y de la Estacin Remota (ET). Es por ello que para separar los
unos de los otros se ha decidido usar una puerta lgica suma (OR) 74LS32, que evita el
trafico inadecuado de bits en sentido peligroso.

Ilustracin 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 algn dispositivo.
Ahora tendremos que actuar de alguna manera sobre un dispositivo que nos pueda llevar
fsicamente a cero las entradas del puerto paralelo del PLC. Como es lgico nos hemos
decantado por un transistor, ya que son de fcil 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 quizs en demasa. Esta afirmacin es cierta en su totalidad. Pero la
razn es que para la implementacin de otros circuitos del proyecto s que se necesita algo
ms de potencia. Por lo que para unificar criterios usando el mismo en todos los circuitos,
decid su empleo.

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

Ilustracin 70: BD137

Cmo logramos con un transistor poner las entradas del PLC fsicamente a un nivel lgico
cero?
En la patilla 2 del transistor o colector conectamos una lnea de potencial fijo cero, ms
comnmente 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 seal de salida de la puerta suma. Cuando esta ltima nos proporciona un 1, el
transistor se pone en conduccin ya que superamos el umbral EB de 0.6 voltios, por lo que
la resistencia CE se encuentra en su valor mnimo producindose un cierre del circuito,
haciendo de esta manera que la entrada seleccionada encuentre al otro lado del transistor
un derivacin 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 pequeo inconveniente: el transistor invierte la seal que recibe,
es decir, cuando recibe un 1 en la base, el transistor conduce y pone a cero la entrada. Este
pequeo conflicto es un concepto a tener en cuenta a la hora de la implementacin con
software, del programa, ya que si lo obviamos tendremos serios problemas de
comunicacin.
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
tambin tenemos una peculiaridad diferente al ya recorrido. Esta caracterstica
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 ejecucin y el
PLC si. En nuestro caso no podra ser diferente, ya que de lo contrario nos alejaramos de
la realidad. De ah que tengamos dos tipos diferentes de salidas: unas se encargan de
activar y desactivar los dispositivos fsicos tales como motores, bombas, actuadores,
niveles, etc. y la otra sirve para informar a la ET que la peticin se ha realizado con o sin
xito. Es decir es tan solo un camino de informacin, no de ejecucin.
Sigamos con los bits que el operario haba lanzado a nuestra red de control industrial. El
PLC ha recibido la informacin y decide en consecuencia. l sabe lo que ha de hacer con
81
Estudio y desarrollo de un control distribuido para una planta.

esos datos, ya que posee una base de datos donde buscar y traducir la informacin, de tal
forma que opere la informacin adecuadamente. Una vez traducido, decide porque lnea ha
de mandarlos, si es una orden de ejecucin usar un camino, que son las salidas de control
del puerto paralelo y si es solo informacin 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 decisin de usar las salidas de control para poder ejecutar la
orden. En cuanto el cdigo sale del puerto del PLC, entra por el 2 puerto de entrada salida
del circuito interface. Este puerto es un conector DB25 idntico al primero. Atravesado el
mismo llegamos nuevamente a la placa de circuito impreso, a ella accedern los datos
mediante un driver 74LS07. El driver es una puerta lgica muy simple, ya que su salida
tiene siempre el mismo valor que a su entrada. Su funcin es la de alimentar a los
dispositivos conectados en sus salidas, de tal manera que el elemento que da la seal, 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 polarizacin
positiva. Es decir las salidas han de estar alimentadas a cinco voltios a travs de una
resistencia de polarizacin, de lo contrario no funciona.

Ilustracin 71: 74LS07.

La informacin 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 PLCs remotos, variadores
de frecuencia, actuadores, etc. Esta comunicacin en nuestro sistema le conducir a un
segundo circuito, el cual lo conoceremos por el nombre de Estacin Remota (ER). Este
circuito emular estos dispositivos de control. El funcionamiento del mismo lo
expondremos ms adelante.

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

3.5. Circuito Estacin Remota.

3.5.1. Introduccin.
La Estacin 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
automatizacin y control.
Es la parte que controla localmente y de la forma ms autnoma posible la seccin del
proceso que se le encomienda. Consta de dos partes:
Controlador de procesos y comunicaciones.
Electrnica de adquisicin y telemando (entradas / salidas).

Ilustracin 72. Montaje estacin remota.

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

Estos dispositivos pueden estar dotados de inteligencia y de una limitada capacidad de


decisin, siempre muy por debajo de la del PLC. Su funcin es la de recibir las rdenes del
PLC y decidir su ejecucin local entre un nmero pequeo y limitado de dispositivos. sta
quizs sera 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 funcin de determinar qu dispositivos acciona
o para, segn interpreta las rdenes que el PLC le indica. Puesto que es slo una
simulacin de un sistema pequeo, tan solo dispondremos de una estacin remota, pero un
proceso puede tener un gran nmero de ellas. Esto implicar que todos los dispositivos
sern activados y desactivados por la misma estacin remota, algo que podra llevar al
equvoco 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 mdulo de entradas, procedentes del circuito
Interface. Este mdulo se encargar de recibir las seales 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 seales son cdigos binarios que corresponden a las rdenes de
activacin o desactivacin 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 vlvula ficticiamente ubicada en campo.
Y finalmente el mdulo de control de los dispositivos finales, que en este caso se tratar de
3 pequeos ventiladores, que simularan los motores que funcionaran en un proceso real, y
que estn grficamente representados en el software.

3.5.2. Descripcin.
El circuito en cuestin, recoger 8 rdenes codificadas de forma BCD. Este nmero se ha
decidido, no por limitaciones de sistema ni por protocolos, ms bien por la creencia de que
con la simulacin de cuatro elementos finales era suficiente para exponer el
funcionamiento del lazo de control y hacer comprensible su funcionamiento.
Situmonos 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 lneas, donde podemos
codificar hasta 16 cdigos BCD. De estos 16 tan slo necesitamos 8, tres activarn los tres
ventiladores, otros tres los desactivarn y el resto se usan para incrementar o decrementar
el contador del circuito nmero 3.
Siguiendo con la orden que ejecut el operador en la ET, nos encontramos un cdigo BCD
de 4 bits que viaja en direccin 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 diseo 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 acta si entrar en la complejidad de un sistema con

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

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.

Ilustracin 73. Decoder 74LS42.

Este chip tiene un comportamiento peculiar, ya que las 10 lneas de salida se encuentran
permanentemente a nivel alto hasta que una es seleccionada, la cual cambia su estado a
bajo. Es decir funciona con lgica negada. El comportamiento del chip es ideal, si no
tenemos en cuenta que la conexin de las salidas del puerto paralelo se har de modo
secuencial. Esto quiere decir, que al poner las lneas de salida del puerto paralelo al nivel
lgico correcto, no todas lo harn 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 lnea, a la que llamaremos lnea de activacin. Esta lnea da permiso para que los
datos accedan al 74LS42, de tal manera que lo hagan todos al unsono.

Ilustracin 74. Lnea de activacin.

Para ello necesitan algo ms que una simple lnea. Necesitan un dispositivo donde actuar y
que haga su vez de puerta que tan solo se pueda abrir cuando la lnea de acceso de paso.
Este elemento es una puerta AND. Podemos ver la disposicin adoptada a tal efecto en la
ilustracin 72 y como slo es posible pasar los datos de las 4 lneas de entrada a la salida,
conectando la lnea de activacin. As garantizamos que todos los bits son entregados a la
vez, por lo que el decodificador slo 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

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

este cambio de flanco y a su vez memorizar el estado, para que no desaparezca tan pronto
como el decodificador cambie el mismo.
La solucin 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 simulacin
hemos escogido el integrado 74LS74.

Ilustracin 75. Flip - flop 74LS74.

De esta manera cuando queramos conectar un dispositivo, codificaremos la orden de


conexin con una combinacin 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. Anlogamente cuando
queramos su desconexin, ejecutaremos el cdigo 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 lgico cero. Ahora tenemos las rdenes de marcha y paro
estables e inmutables. Slo nos quedara hacer que estas cumplan su misin actuando sobre
algn dispositivo real.

Ilustracin 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 saturacin y cuando est a nivel bajo
en corte. Esto unido a un rel conectar y desconectara los ventiladores que actuarn como
elementos finales.

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

3.6. Circuito Contador.

3.6.1. Introduccin.
Este circuito ser junto a los ventiladores que hacen la funcin de dispositivos finales del
proceso industrial, una vlvula 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 contarn de 0 a 100. Cada
pulsacin de apertura o cerrado que el operador realice en la estacin de trabajo, se
traducir en un incremento o decremento numrico visible mediante estos displays. Como
para llevar esto a cabo tan solo disponamos de dos lneas hemos tenido que hacer un
montaje un tanto particular que pasaremos a presentar de forma mucho ms amplia
seguidamente.

Ilustracin77. Circuito Contador.

3.6.2. Descripcin.
Como comentbamos en el apartado anterior, este dispositivo simula la apertura de una
vlvula reguladora en %. Para hacer esto disponamos tan solo de dos lneas, una con la
87
Estudio y desarrollo de un control distribuido para una planta.

finalidad de incrementar y otra de decrementar. Para poder disponer de estas dos lneas,
hemos aprovechado el decodificador del circuito anterior. Como esta funcionalidad no
tena un peso importante en el circuito ER no lo hemos expuesto, algo que haremos a
continuacin.
Del mismo modo que en la ER dependiendo del cdigo BCD activaba o desactivaba los
elementos finales de este lazo de control. Existen dos cdigos binarios asignados
exclusivamente para las operaciones de incrementar y decrementar el contador.
Cuando el decodificador recibe cualquiera de estas dos seales, activa la lnea 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 lneas 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 deberan verse tres ceros, uno
en cada uno de los display de 7 segmentos. En esta posicin inicial pulsamos el botn de
incrementar un 1% la apertura de la reguladora. Tras recibir el decodificador la debida
orden da un el flanco descendente en la lnea 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.

Ilustracin 78. 74LS192.

Poseen tambin 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 slo es capaz de representar hasta 9, para lograr el 10,
cuando contabiliza los 9 pulsos al llegar al dcimo, automticamente se pone a cero y da
un pulso de acarreo a la entrada up del siguiente contador. Anlogamente cuando bajamos
de un 10 a un 9 el contador da una seal 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 informacin codificada en BCD a travs de sus 4 salidas. Pero

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

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).

Ilustracin 79. 74LS47

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

Ilustracin 80. Display 7 Segmentos nodo comn.

Existen dos tipos de displays los de nodo comn y los de ctodo comn, la diferencia es
bien sencilla. Un display no es ms que 7 leds juntos dentro de un mismo encapsulado.
Para ahorrar tamao no es necesario colocar las 14 patillas necesarias para todos los leds,
ya que sera absurdo. Para ello se utiliza como comn o todos los positivos, que sera
nodo comn, o se utilizan todos los negativos, ctodo comn. Nosotros nos hemos
decantado por la de nodo comn. El funcionamiento en principio es el mismo, no
presentauna complejidad mayor, pero hemos decidido as por disponibilidad de material.

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

3.7. PLC

3.7.1. Definicin de PLC.


Puede definirse como un equipo electrnico programable en lenguaje no informtico y
diseado para controlar, en tiempo real y en ambiente industrial, procesos secuenciales.
Los autmatas son equipos electrnicos de cableado interno independiente del proceso a
controlar (hardware). Un autmata se integra en la mquina o instalacin a controlar
mediante un programa que define la solucin de las operaciones que se desea (Software) y
de un cableado directo a los elementos de entrada y de salida del autmata. El autmata
programable realiza funciones de control de tipo lgico y secuencial dentro de las fbricas,
es decir, en la proximidad de las mquinas en un entorno industrial. El funcionamiento
puede adaptarse plenamente a la formacin y hbitos del personal de fabricacin y
mantenimiento.
El nmero de instrucciones procesadas difiere de un autmata a otro. El programa es
directamente concebido por un automatista, electricista o mecnico. Este trabajo se facilita
an ms mediante el empleo de consolas de programacin. Se convierte en un equipo
especfico una vez dotado de un programa y acoplado con los elementos de entrada y
salida. El programa debe esta alojado en una memoria interna. Segn el tipo de memoria
interna de programa, se distingue entre autmatas de programacin libre y autmatas de
programacin intercambiable.
Los autmatas de programacin libre van equipados con una memoria de lectura / escritura
(RAM o memorias vivas) en donde puede introducirse el programa sin ms dispositivos
adicionales que la consola de programacin. Ello permite tambin leer un programa ya
introducido. La memoria RAM pierde su contenido en caso de cada de tensin, pero ello
puede evitarse mediante una batera tampn.
Los autmatas de programacin intercambiable van equipados con una memoria de solo
lectura (PROM o EPROM), tambin denominada memoria muerta que debe cambiarse en
caso de modificacin del programa. Las memorias EPROM pueden borrarse mediante una
radiacin 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 autmata se presenta bajo la forma de un conjunto de tarjetas o circuitos impresos en
los que se han montado componentes electrnicos integrados. Estos se alojan en paneles o
RACs que las protegen mecnicamente. 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 lneas de entrada en el momento de la toma en consideracin de los
datos; as mismo sita los valores calculados sobre las lneas de salida.
El procesador es la unidad de tratamiento lgico que ejecuta los clculos booleanos en
funcin de las instrucciones del programa. La CPU lleva igualmente consigo un conjunto
90
Estudio y desarrollo de un control distribuido para una planta.

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
Autmata programable podemos empezar la explicacin de como hemos diseado el
nuestro.

3.7.2. Introduccin.
Igual que en el caso de la estacin remota, el PLC que hemos usado para implementar este
proyecto ha sido un PC, pero en este caso porttil. Este hecho hace que el proyecto sea ms
transportable, ya que si implementramos todo con dos PCs de sobremesa sera difcil y
costoso el transporte. Tambin es cierto que encontrar un porttil que incorporara un DB25
no ha sido tarea fcil, ya que si bien en los de sobre mesa aun es corriente en las placas
base modernas, en los porttiles por sus requerimientos de tamao y austeridad, hace aos
que fue eliminado. Para ello nos hemos decantado, por falta de opciones, de un porttil
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
simulacin, los cubre con creces.
De forma similar para este PC se ha desarrollado un software, tambin implementado en
Visual Basic 6.0, Este software es completamente diferente al de la Estacin de Trabajo.
Esta requera de un diseo grfico importante para su manipulacin, algo que en un PLC
no es necesario. Hace aos que en la industria han empezado a aparecer PLCs con
pantallas que soportan un pequeo entorno grfico. Podra decirse que estos autmatas
estn en un sub-segmento entre estos dos dispositivos, pero siguen haciendo ms la funcin
de PLC, ya que estn lejos de poderse incorporar como elemento hbrido funcional.
Nosotros lo hemos equipado con una pequea interface grfica, a modo demostrativo, para
poder ejemplificar mejor el funcionamiento del sistema, pero podra obviarse en
prcticamente su totalidad y el global funcionara de igual forma. En nuestro caso el PLC
estar compuesto del propio ordenador porttil ms un cable CENTRONIC .

3.7.3. Software.
El software que se ha diseado para este sistema se puede dividir en dos pantallas, cada
una de las cuales tiene una funcin especfica, pero que para funcionar necesitan del
trabajo combinado de ambas.
Pantalla principal
Pantalla de datos.

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

3.7.3.1. Pantalla principal

Ilustracin 81. Pantalla Principal PLC.

Como comentbamos en la introduccin de esta seccin, vemos que el entorno grfico


presente en esta ventana, no es demasiado funcional, ya que los parmetros a manipular no
son demasiados. Un PLC una vez se le ha programado ha de ser autnomo, por lo que
hacer un interface grfica elaborada constituye una prdida de recursos.
De todas maneras podemos observar una serie de botones y un pequeo men, el cual nos
da la posibilidad de realizar algunas maniobras, pero muy limitadas. De igual manera que
con el software de la Estacin de Trabajo, empezaremos a introducirnos en el software por
el men desplegable de la parte superior.

Ilustracin 82. Men..

Si pinchamos en la primera opcin llamada Men tan solo encontraremos la posibilidad


de salir del programa. Es la nica utilidad que tiene este botn.

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

Ilustracin 83. Datos.

Al desplegar el sub-men Datos se despliega una nica opcin que es la de ver datos.
sta opcin lo que hace es activar la segunda venta que conforma este software, que
explicaremos en profundidad ms adelante.
Hasta aqu llega el men, ahora tan solo nos queda explicar una seri de botones que hay
distribuidos por la pantalla.

Ilustracin 84. On OFF.

Como sus nombres indican estos botones tienen la funcin de arrancar y parar el programa
que corre por el PLC. Estos botones son para interrumpir la comunicacin
momentneamente por algn motivo, ya que el PLC se pone en marcha automticamente al
conectar el sistema desde la Estacin de Trabajo.
En el momento en que el programa se carga, automticamente 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 cdigo que recibe.
El sistema, aunque est cargado el programa, no tiene capacidad de leer las entradas si no
se pulsa el botn de ON o se le da la orden desde la Estacin de Trabajo. Una vez
ponemos en marcha el sistema, va leyendo ininterrumpidamente la entrada del puerto
paralelo, cada vez que le llega una informacin, 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 exponamos el funcionamiento del puerto paralelo,
cuando se genera un cdigo en el puerto, ste se mantiene en este estado hasta que se
manda otro. Para evitar que est leyendo durante mucho tiempo el mismo cdigo, haciendo
trabajar intilmente a todo el software con la misma informacin, 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 va libre para circular
por el software.
El cdigo 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
quedara descartada. Una vez la informacin es identificada se manda a la siguiente
ventana donde se tratar para su posterior salida.

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

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

3.7.3.2. Pantalla Datos

Ilustracin 85. Pantalla Datos.

Visualmente podemos ver que esta ventana es algo ms completa, pero como
comentbamos anteriormente, es todo ilustrativo, para hacer ms comprensible el sistema,
y tambin nos sirve como ayuda la informacin que nos da esta pantalla.
No existen botones que nos permitan manipular informacin, sucede como en la ventana
anterior, porque el hecho de que sea ms completa, no implica que sea mucho mas
manipulable, aunque es cierto que se pueden realizar ms operaciones y que tiene una
opcin, que luego explicaremos, que si es capaz de ejecutar acciones importantes, pero es
solo una excepcin.
Para seguir con la lnea marcada hasta ahora, empezaremos introducindonos en el
programa, por el men superior, que como en el caso anterior es muy bsico y sencillo. En
el caso de la opcin Men vemos que como en el caso anterior solo nos permite cerrar
esta ventana, no tiene ningn uso ms.

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

Ilustracin 86. Men.

En el caso de la segunda opcin Datos veremos que se despliegan dos opciones.

Ilustracin 87. Datos.

Antes de continuar, haremos un inciso necesario para poder explicar debidamente como
funciona este apartado. Si nos fijamos bien en la ilustracin 88, podemos ver que se ha
dividido la ventana en 4 recuadros numerados del 1 al 4. Esto en la ventana original
lgicamente no se ve, slo se ha hecho sobre la imagen de la misma para facilitar la
explicacin. Hay que decir que cuando cargamos la pantalla correspondiente a dicha
ilustracin, 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 estn activos y
visibles siempre.
Una vez dicho esto podemos proseguir con el sub-men que habamos preintroducido.
Cuando seleccionamos la primera opcin Mostrar Registros IO, aparecer en pantalla el
recuadro 1.

Ilustracin 88. Mostrar Registros IO.

Esta pantalla es muy til para comprobar a que tag equivale un cdigo binario. Quizs
faltara explicar un punto que no ha quedado del todo claro anteriormente. Las bases de
datos estn compuestas por 5 registros. Tres de los cuales son los bits de entradas, los bits
de salidas y los bits de ejecucin, as como dos registro de tags de entrada y tags de salida.
Los bits de entrada estn directamente relacionados con los tags de entrada. Esto se ha
95
Estudio y desarrollo de un control distribuido para una planta.

hecho para comprobar en todo momento que el cdigo correcto activa la opcin deseada.
As al enviar un cdigo desde la estacin de trabajo ha de coincidir con su tag de entrada.
Una vez tenemos el cdigo relacionado con su tag de entrada, se le asigna un cdigo de
salida y un tag de salida. El ltimo registro es nicamente para los dispositivos reales que
se pondrn en marcha a travs de los circuitos electrnicos. Si pulsamos en la parte
superior el botn de in, nos saldr a la izquierda los bits de entrada y los tags que le
corresponde a cada cdigo. De igual manera si pulsamos out ocurrir lo mismo con la
salida. Pero si lo que queremos es comprobar un cdigo o un tag nicamente
seleccionamos de los recuadros superiores el tag, o el cdigo que queramos, este al ser
seleccionado se colocar en la casilla inferior que le pertoque y automticamente en el otro
recuadro aparecer su informacin homloga. No tiene un efecto sobre el sistema, pero es
una gran herramienta que nos sirve para verificar si algn cdigo no esta siendo
interpretado adecuadamente.
La segunda opcin de este sub-men, Registro de entradas, completa la pantalla anterior,
si recordamos la ilustracin 88, veremos que corresponde al cuadro marcado con un 2.

Ilustracin 89. Registro de entradas.

Vemos que al ejecutar este comando, el recuadro de la ilustracin 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 aparecern 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 Estacin de Trabajo. Otra funcin es
la de informacin. Cuando seleccionamos un tag del recuadro llamado con este nombre,
que se encuentra a su izquierda, automticamente hace una pequea descripcin 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 ratn en el recuadro destinado a los Registros de Entrada , y la limpia
dejndola vaca.
Ya hemos terminado con el men y con los dos primeros recuadros.
En el recuadro nmero 3 de la ilustracin 88 encontramos diferentes elementos. Lo
primero que salta a la vista son los 11 tags con sus correspondientes indicadores
luminosos.
96
Estudio y desarrollo de un control distribuido para una planta.

Ilustracin 90. Estado Dispositivos.

Cada vez que uno de estos dispositivos se activa desde la estacin 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, slo se ilumina si ocurre algn error en
cualquiera de los dispositivos, en este caso se iluminar de rojo. A la vez este error se
transmitir a la Estacin de trabajo, donde el elemento en cuestin 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 averas
que se puedan dar.

Ilustracin 91. Seleccin de tag para generar averas.

Si pulsamos el desplegable, vemos que en l se encuentran todos los dispositivos que hay
implementados en el proyecto exceptuando la vlvula de refrigeracin. Cuando queramos
generar un error slo tenemos que desplegar la lista, seleccionar el dispositivo y pulsar el
botn de aceptar. Automticamente el indicador rojo del dispositivo seleccionado se
97
Estudio y desarrollo de un control distribuido para una planta.

iluminara, apagndose el verde, siempre y cuando ste estuviera en marcha. Esto dar la
orden de paro a la estacin de trabajo del propio elemento, colocndolo en rojo. Cuando el
elemento ha quedado reparado, lo seleccionaremos nuevamente en el desplegable y cuando
pulsemos el botn de reset dicho componente restaurara el Led de avera apagndose ste.
Aqu es donde entra en juego el botn que tenamos en el cuadro desplegable de la pantalla
principal de la Estacin de Trabajo. Ahora que la avera ha sido restaurada en el PLC, para
que el operado pueda disponer de la unidad, ha de pulsar este botn que resetea la avera en
la Estacin de Trabajo.
Por ltimo tenemos el recuadro nmero 4, este recuadro es nicamente informativo,
solo da informacin til para el observador.

Ilustracin 92. Reguladora y datos E/S.

En primer caso lo que ms llama la atencin es el gran display digital. ste marcar en
todo momento los incrementos y decrementos que desde la Estacin 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
cdigo de entrada y su tag, as como el cdigo correspondiente de salida y su tag.

98
Conclusiones y Lneas futuras

4. Conclusiones y lneas futuras.


4.1. Conclusiones
Sera una ardua tarea el resumir toda esta temtica en unas pocas lneas, 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 tecnologas
entorno a lneas de conexin como Ethernet, los buses de control tales como Profibus, as
como los potentes sistemas electrnicos que conforman los cerebros de los PLC, estaciones
Remotas, estaciones de trabajo etc. En definitiva unas nuevas tecnologas en desarrollo que
envuelven la industria de hoy y la futura, garantizan unos sistemas de produccin, de una
efectividad jams vista y lo ms importante, garantizando unos niveles de seguridad muy
grandes. Todo ello unido a algo que prima sobre casi todos los dems factores mesurables,
a la hora del diseo de cualquier entorno industrial, que son los costes.
En definitiva la automatizacin industrial, es la definicin 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 fbricas actuales se ha reducido gracias a estas tecnologas. Esto a costa
nuestro, implica una reduccin de costes, axial como la reduccin de el factor humanaos a
la hora de cierta toma de decisiones de cliz peligroso para la seguridad.
Pero no tenemos que mirarlo con ojos desdeosos, ya que esta gran afluencia de
informacin 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 ms
acertadas decisiones, porque el factor improvisador o de aleatoriedad se ha de reducir cada
da ms.
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 estn reduciendo da a da.
En lo que se refiere propiamente dicho al proyecto prctico realizado, debo decir que ya
conoca en parte el funcionamiento de dichos mtodos, desde el punto de vista de usuario,
ya que llevo mucho aos en este campo. Con ello he podido conocer la otra parte del
sistema, la parte ms tcnica y en definitiva la ms importante. Hacer mi propio control
disendolo 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, dndole una banal importancia, resultan ser mucho ms de lo que
parece. La implementacin del software ha sido especialmente compleja, hasta llegar a
convertirse en reto en algunos puntos. El hardware no se ha quedado atrs, en complejidad,
pero quizs ha sido la parte ms agradable de trabajar, ya que con ello nos hemos movido
en hechos reales. Pero al finalizar esta creo que ha quedado una simulacin muy prctica,
de fcil compresin y muy cercana a la realidad que en definitiva era lo que se pretenda.

- 99 -
Conclusiones y Lneas futuras.

4.2. Lneas futuras.


El sistema que se ha desarrollado podra sufrir innumerables mejoras y perfeccionamiento,
en el caso de que quisiramos un sistema ms potente, y que requiriera controlar ms
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
programacin similar llamado Cicode.
Cicode es un lenguaje de programacin. La estructura y la sintaxis del Cicode es
muy similar a la del lenguaje de programacin Pascal, cuya principal diferencia es
que no incluye indicadores y conceptos asociados. Citect ofrece una rica
programacin de la API de programacin que incluye sofisticadas construcciones
tales como tareas concurrentes y los semforos.
Ejemplo programacin 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, empezaramos por sustituir un bus paralelo, que si bien es ms


potente que el serie, est limitado en cuanto a distancia y a nmero de datos a transmitir.
Por lo que sera otro punto mejorable dentro de nuestro sistema. Como estudiamos en la
primera parte del proyecto, la mayora de los buses existentes hoy en DIA para entornos
industriales, se implementan sobre bus serie. Al sustituir esto cambiaremos tambin el
protocolo de comunicacin por un ms efectivo TCP IP por ejemplo. Nos permite un
mayor control del bus axial como deteccin de errores y un flujo de informacin mas
ordenado.
Tambin podramos introducir mejoras en los dispositivos electrnicos diseados, sobre
todo en el circuito Estacin Remota. Donde se le podra dotar de inteligencia utilizando un
microprocesador. A diferencia de ahora que la reparticin de funciones la realiza un
decodificador

- 100 -
Bibliografa y Software empleado.

5. Bibliografa.
" I he Measurement and Automation" calalog 2004 National Instrumentis
Revista "Instrumentacin y Control Automtico" n 122
"EtberNet/IP" Rockwell automation Noviembre 2000
"NetLnx" Rockwell automation Noviembre 2002
"Latinoamericana Advance" Siemens 2004
"Sistemas De Control "Carmen D'Sousa www.monografias.com
"Tecnologas y actividades de estandarizacin para la interconexin de Industrial
Networks" Alcatel para Fundacin AUNA
"Comunicaciones Industriales" Autores: V.Sempere, J. Silvestre, J.A. Martnez
Editorial: SPUPV (SPUPV-2002.213) Ao:2002
Departamento de Ingeniera de Sistemas y Automtica Universidad de Vigo
Universidad Miguel Hernndez Dpto. Ingeniera.
http://en.wikipedia.org/wiki/Citect
http://es.wikipedia.org/wiki/Profibus_PA
http://formacion.plcmadrid.es/descargas/docs/omron/ProfibusOmron.pdf
Electrnica digital moderna. Teora y Prctica . 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 programacin Fco. Javier Ceballos Editorial ra-ma.

5.1. Software Empleado.


Software de programacin: Visual Basic 6.0
Software de diseo y prueba : Multisim Power Pro Edition 10.0.144.
Software de diseo: Rimu PCB 1.08.
Software diseo grfico. Microsoft Pain 5.1.
Sistema Operativo Estacin de trabajo: Windows XP SP3.
Sistema Operativo PLC: Windows 98 SE.
SimuladorDigital_095

- 101 -
Links datasheets

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).

- 102 -
ndice de Anexos

ANEXOS

7. Anexo1: Rutinas Programadas. 104


7.1. Pantallas Estacin de Trabajo. 104
7.1.1. Cdigo Pgina Inicio: 104
7.1.2. Cdigo Pantalla Entrada Manual. 106
7.1.3. Cdigo Pantalla Password. 112
7.1.4. Cdigo Pantalla Vlvula amonaco. 114
7.1.5. Cdigo Pantalla Inicio. 116
7.1.6. Cdigo Pantalla Entrada Manual. 119
7.1.7. Cdigo Pantalla Grficas. 124
7.1.8. Cdigo Pantalla Entradas/Salidas. 132
7.1.9. Cdigo Pantalla Mximos y Mnimos. 148
7.1.10. Cdigo Pantalla NAcceso. 150
7.1.11. Cdigo Pantalla NPASSWORD. 151
7.1.12. Cdigo Pantalla PPRINAPOYO. 152
7.1.13. Cdigo Pantalla Principal. 155
7.1.14. Cdigo Pantalla REFRIG. 200
7.1.15. Cdigo Pantalla RegAlarm. 203
7.2. Cdigo PLC. 203
7.2.1. Cdigo Pantalla Principal. 203
7.2.2. Cdigo Pantalla Datos. 215
8. Anexo2: Planos 228
8.1. Planos Circuito Interface. 228
8.1.1. Esquema Elctrico. 228
8.1.2. Fotolito Circuito Interface. 229
8.1.3. Esquema Componentes. 229
8.2. Planos Estacin Remota. 231
8.2.1. Esquema elctrico. 231
8.2.2. Fotolito Circuito Estacin Remota. 232
8.2.3. Esquema componentes. 233
8.3. Planos Circuito Contador. 234
8.3.1. Esquema elctrico. 234
8.3.2. Fotolito Circuito Contador. 235
8.3.3. Esquema Componentes. 236

- 103 -
Anexos1 Rutinas Programadas

7. Anexo1: Rutinas Programadas.

7.1. Pantallas Estacin de trabajo.

7.1.1. Cdigo Pgina Inicio:


Option Explicit
Dim opcion1 As Variant 'variable de eleccin de abrir o cerrar el
programa
Dim direccion, s As String 'variable direccin 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, "Atencin!"
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")
- 104 -
Anexos1 Rutinas Programadas

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 ejecucin y no lo repita
msg = App.EXEName & "Proyecto final de carrera.EXE" & " ya
est en ejecucin"
MsgBox msg, 16, "Aplicacin."
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

105
Anexos1 Rutinas Programadas

Form2.Visible = True
NUM = 1
Form2.Frame2.Enabled = True
End Sub
Private Sub ACCESO1_KeyPress(KeyAscii As Integer) 'Realiza la misma
funcin que el botn acceder pero pulsando el botn 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. Cdigo 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)

106
Anexos1 Rutinas Programadas

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,
"Atencin!"
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

107
Anexos1 Rutinas Programadas

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

108
Anexos1 Rutinas Programadas

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

109
Anexos1 Rutinas Programadas

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

110
Anexos1 Rutinas Programadas

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

111
Anexos1 Rutinas Programadas

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. Cdigo 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
112
Anexos1 Rutinas Programadas

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 ningn password!", vbInformation,
"ATENCIN!"
Text1.SetFocus
Case 2
MsgBox "No ha verificado el password!", vbInformation, "ATENCIN!"
Text2.SetFocus
Case 3
MsgBox "Los Passwords no coinciden!", vbInformation, "ATENCIN!"
End Select
End Sub

Private Sub TEXT2_KeyPress(KeyAscii As Integer)


If KeyAscii = vbKeyReturn Then

113
Anexos1 Rutinas Programadas

KeyAscii = 0
Call Command1_Click
End If
End Sub
7.1.4. Cdigo Vlvula 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
114
Anexos1 Rutinas Programadas

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

115
Anexos1 Rutinas Programadas

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. Cdigo Pantalla Inicio.


Option Explicit
Dim opcion1 As Variant 'variable de eleccin 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,
"Atencin!"
Load NPASSWORD
NPASSWORD.Visible = True
Close #1
Exit Sub
End If
Close #1
If Acceso1.Text = psw Then
ProgressBar1.Visible = True
Call CARGARPROGRAMA
116
Anexos1 Rutinas Programadas

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 ejecucin y no lo repita
msg = App.EXEName & "Proyecto final de carrera.EXE" & " ya
est en ejecucin"
MsgBox msg, 16, "Aplicacin."

117
Anexos1 Rutinas Programadas

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

118
Anexos1 Rutinas Programadas

7.1.6. Cdigo 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,
"Atencin!"
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
119
Anexos1 Rutinas Programadas

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

120
Anexos1 Rutinas Programadas

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

121
Anexos1 Rutinas Programadas

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

122
Anexos1 Rutinas Programadas

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

123
Anexos1 Rutinas Programadas

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. Cdigo Pantalla Grficas.


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
124
Anexos1 Rutinas Programadas

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

125
Anexos1 Rutinas Programadas

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()

126
Anexos1 Rutinas Programadas

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 Vlvula en %"

127
Anexos1 Rutinas Programadas

Label9.Caption = "Caudal refrigeracin"


Label10.Caption = "Temperatura lquido"
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

128
Anexos1 Rutinas Programadas

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()

129
Anexos1 Rutinas Programadas

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,
"Atencin!"
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,
"Atencin!"
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, "Atencin!"

130
Anexos1 Rutinas Programadas

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,
"Atencin!"
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,
"Atencin!"
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, "Atencin!"
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,
"Atencin!"

131
Anexos1 Rutinas Programadas

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,
"Atencin!"
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, "Atencin!"
ProgressBar1.Value = 0
End If
End If
End Sub

7.1.8. Cdigo 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)

132
Anexos1 Rutinas Programadas

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

133
Anexos1 Rutinas Programadas

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

134
Anexos1 Rutinas Programadas

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

135
Anexos1 Rutinas Programadas

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

136
Anexos1 Rutinas Programadas

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

137
Anexos1 Rutinas Programadas

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

138
Anexos1 Rutinas Programadas

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

139
Anexos1 Rutinas Programadas

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

140
Anexos1 Rutinas Programadas

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

141
Anexos1 Rutinas Programadas

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

142
Anexos1 Rutinas Programadas

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

143
Anexos1 Rutinas Programadas

'*******************************************************************
*****
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 'vlvula fro 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

144
Anexos1 Rutinas Programadas

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

145
Anexos1 Rutinas Programadas

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

146
Anexos1 Rutinas Programadas

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

147
Anexos1 Rutinas Programadas

End Sub

7.1.9. Cdigo Pantalla Mximos y Mnimos.


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 mximo inferior al mnimo", 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 mximo inferior al mnimo", 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

148
Anexos1 Rutinas Programadas

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

149
Anexos1 Rutinas Programadas

NUM = 6
ButtonMac3.Visible = True
End Sub

7.1.10. Cdigo 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

150
Anexos1 Rutinas Programadas

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. Cdigo 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
151
Anexos1 Rutinas Programadas

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,
"ATENCIN!"
text1.SetFocus
Case 2
MsgBox "No ha verificado el password!", vbInformation, "ATENCIN!"
TEXT2.SetFocus
Case 3
MsgBox "Los Passwords no coinciden!", vbInformation, "ATENCIN!"
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. Cdigo 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
152
Anexos1 Rutinas Programadas

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

153
Anexos1 Rutinas Programadas

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

154
Anexos1 Rutinas Programadas

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. Cdigo 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
155
Anexos1 Rutinas Programadas

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

156
Anexos1 Rutinas Programadas

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 bsico de operacin
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 simulacin " & 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

157
Anexos1 Rutinas Programadas

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 simulacin?",
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

158
Anexos1 Rutinas Programadas

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, "Atencin!"
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

159
Anexos1 Rutinas Programadas

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 recirculacin sin nivel en el
reactor", vbCritical, "ATENCIN!"
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,
"Atencin!"
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

160
Anexos1 Rutinas Programadas

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, "ATENCIN!"
Exit Sub
ElseIf Picture19.Visible = True Then
MsgBox "No se puede realizar sin abrir la vlvula de salida
reactor", vbCritical, "ATENCIN!"
Exit Sub

161
Anexos1 Rutinas Programadas

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, "Atencin!"
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 vlvula con la bomba en marcha",
vbCritical, "ATENCIN!"
Exit Sub
End If
Volumen &HAD, 0, 1, 0
ACTB = MsgBox(" CERRAR VLVULA ?" & 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 VLVULA ?" & Chr(13), 324, "ATENCION")
Volumen &HAD, 0, 1, 0
If ACTB = 7 Then
Else
ENTSAL = 13
Load INOUT
If MSGALRM = 7 Then
Else

162
Anexos1 Rutinas Programadas

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, "Atencin!"
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

163
Anexos1 Rutinas Programadas

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, "Atencin!"
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 VLVULA ?" & 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 VLVULA ?" & Chr(13), 324, "ATENCION")
Volumen &HAD, 0, 1, 0
If ACTB = 7 Then
Else

164
Anexos1 Rutinas Programadas

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

165
Anexos1 Rutinas Programadas

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

166
Anexos1 Rutinas Programadas

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()

167
Anexos1 Rutinas Programadas

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, "Atencin!"
PLCstatus.Enabled = False
CONTADOR = 0
Exit Sub
End If
If CONTADOR = 5 Then
MsgBox "El PLC no esta activado o falla la comunicacin",
vbExclamation, "Atencin!"
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 simulacin", vbCritical, "Atencin!"
Exit Sub
End If
Unload PPrincipal
Load Form1
Form1.Visible = True
Unload AMONIAC
Unload REFRIG
Unload GRAFICAS
End Sub

Private Sub SNIFERIN_Timer() 'MTODO PARA LEER LAS ENTRADAS


If GetPortBit(&H379, 3) = True Then
N0 = 0

168
Anexos1 Rutinas Programadas

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

169
Anexos1 Rutinas Programadas

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 condicin 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 subira 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 REFRIGERACIN 2
If MSGALRM = 11 Then
Else
MSGALRM = 11
End If
Call ALARMAS
ENTSAL = 12
Load INOUT
Picture25.Visible = True
Picture24.Visible = False

170
Anexos1 Rutinas Programadas

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, "Atencin!"
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

171
Anexos1 Rutinas Programadas

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
refrigeracin)
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
refrigeracin)
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
refrigeracin)
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
refrigeracin)
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
refrigeracin)
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
refrigeracin)
Load PPRINAPOYO
MARCO = 29
End Sub

172
Anexos1 Rutinas Programadas

Private Sub text25_MouseMove(Button As Integer, Shift As Integer, X


As Single, Y As Single)
'MARCO DE SELECCION DE LOS INDICADORES (Caudal circuito
refrigeracin)
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 refrigeracin)
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 refrigeracin)
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 refrigeracin)
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 refrigeracin)
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 (Vlvula amonaco)
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 (Vlvula amonaco)
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 (Vlvula amonaco)
Load PPRINAPOYO

173
Anexos1 Rutinas Programadas

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 (presin 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

174
Anexos1 Rutinas Programadas

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 refrigeracin
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 refrigeracin
intercambiador)
Load PPRINAPOYO
MARCO = 13
End Sub

175
Anexos1 Rutinas Programadas

Private Sub PICTURE33_MouseMove(Button As Integer, Shift As Integer,


X As Single, Y As Single)
'MARCO DE SELECCION DE LOS INDICADORES (bombas refrigeracin
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 refrigeracin
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

176
Anexos1 Rutinas Programadas

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

177
Anexos1 Rutinas Programadas

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

178
Anexos1 Rutinas Programadas

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

179
Anexos1 Rutinas Programadas

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

180
Anexos1 Rutinas Programadas

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

181
Anexos1 Rutinas Programadas

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 INDICACIN
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 PEQUEO
CALCULO PARA QUE OSCILE LA TEMPERATURA HASTA DECIMAS DE GRADO
Text6 = (TEMP - 1) / 10
TEMP2 = Aleatorio(CLng(2150), CLng(2200)) 'REALIZAMOS UN PEQUEO
CALCULO PARA QUE OSCILE LA TEMPERATURA HASTA DECIMAS DE GRADO
Text8 = (TEMP2 - 2) / 10

182
Anexos1 Rutinas Programadas

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

183
Anexos1 Rutinas Programadas

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

184
Anexos1 Rutinas Programadas

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

185
Anexos1 Rutinas Programadas

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

186
Anexos1 Rutinas Programadas

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

187
Anexos1 Rutinas Programadas

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

188
Anexos1 Rutinas Programadas

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)

189
Anexos1 Rutinas Programadas

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 refrigeracin refrigerante muy alta"
Timer3.Enabled = True
Call REGISTRO_ALARMAS
Case 6
Text1 = "Fallo marcha agitador reactor"
Timer3.Enabled = True
Call REGISTRO_ALARMAS

190
Anexos1 Rutinas Programadas

Case 7 ' FALLO APERTUR A VLVULA SALIDA


Text1 = "Fallo apertura vlvula 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 refrigeracin 1"
Timer3.Enabled = True
Call REGISTRO_ALARMAS
Case 11
Text1 = "Fallo en bomba refrigeracin 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 Presin alta reactor
Timer3.Enabled = True
Call REGISTRO_ALARMAS
Case 14 'BAJA PRESIN REACTOR
Text1 = "IP1 Presin 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

191
Anexos1 Rutinas Programadas

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 Presin circuito reactor alta "
Timer3.Enabled = True
Call REGISTRO_ALARMAS
Case 24
Text1 = "IP3 Presin 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

192
Anexos1 Rutinas Programadas

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

193
Anexos1 Rutinas Programadas

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

194
Anexos1 Rutinas Programadas

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 refrigeracin 1
LED3(4).Visible = True
Picture44(4).Visible = True
Case 5 ' bomba refrigeracin 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

195
Anexos1 Rutinas Programadas

End Sub

Private Sub Timer24_Timer()


Text2 = "Operador"
MsgBox "Tiempo desconexin alcanzado", vbInformation, "Atencin!"
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 simulacin " & 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

196
Anexos1 Rutinas Programadas

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))

197
Anexos1 Rutinas Programadas

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

198
Anexos1 Rutinas Programadas

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 VLVULA ?" & 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 VLVULA ?" & Chr(13), 324, "ATENCION")
Volumen &HAD, 0, 1, 0
If ACTB = 7 Then
Else
Picture28.Visible = False
Picture26.Visible = True
End If
End Sub

199
Anexos1 Rutinas Programadas

7.1.14. Cdigo 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
200
Anexos1 Rutinas Programadas

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

201
Anexos1 Rutinas Programadas

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

202
Anexos1 Rutinas Programadas

Else
KeyAscii = 0
End If
End Sub

7.1.15. Cdigo 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. Cdigo PLC.

7.2.1. Cdigo 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
203
Anexos1 Rutinas Programadas

Dim valorm As Variant


Dim para As Boolean
Dim contenedor As Variant
Dim d1, d2 As Integer 'variable que se queda con la posicin 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

204
Anexos1 Rutinas Programadas

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
'*******************************************************************
********************************************

205
Anexos1 Rutinas Programadas

' 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

206
Anexos1 Rutinas Programadas

If LED4.Visible = True Then 'ESTA OPCIN 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

207
Anexos1 Rutinas Programadas

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()

208
Anexos1 Rutinas Programadas

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 posicin 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"

209
Anexos1 Rutinas Programadas

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

210
Anexos1 Rutinas Programadas

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 comparacin esta vaca que
la llene
forzar2 = forzar
Call NUEVOMTODO
DatosIO.Text5 = forzar
DatosIO.LECTOR.Enabled = True
Else
If forzar2 = forzar Then
Else
Call NUEVOMTODO
forzar2 = forzar

211
Anexos1 Rutinas Programadas

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

212
Anexos1 Rutinas Programadas

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 NUEVOMTODO()
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

213
Anexos1 Rutinas Programadas

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

214
Anexos1 Rutinas Programadas

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. Cdigo 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
215
Anexos1 Rutinas Programadas

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 = "Vlvula Reguladora Refrigeracin" Then

216
Anexos1 Rutinas Programadas

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 Refrigeracin 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 Refrigeracin 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

217
Anexos1 Rutinas Programadas

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 = "Vlvula 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 = "Vlvula Aireacin" 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 = "Vlvula cerrada"
LED2(2).Visible = False
LED1(2).Visible = True

218
Anexos1 Rutinas Programadas

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

219
Anexos1 Rutinas Programadas

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

220
Anexos1 Rutinas Programadas

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

221
Anexos1 Rutinas Programadas

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

222
Anexos1 Rutinas Programadas

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 vlvula reguladora refrigeracin"
ElseIf Text7 = "REGULADORA2" Then
Text3 = "1% de cierre vlvula reguladora refrigeracin"
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

223
Anexos1 Rutinas Programadas

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

224
Anexos1 Rutinas Programadas

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

225
Anexos1 Rutinas Programadas

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 vlvula %"
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

226
Anexos1 Rutinas Programadas

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 vlvula %"
End Sub
Private Sub TEXT3_DblClick()
Text3 = ""
EndSub

227
Anexo 2: Planos

8. Anexo2: Planos
8.1. Planos Circuito Interface.
8.1.1. Esquema Elctrico.

- 228 -
Anexo 2: Planos

8.1.2. Fotolito Circuito Interface.

- 229 -
Anexo 2: Planos

8.1.3. Esquema componentes.

- 230 -
Anexo 2: Planos

8.2. Planos Estacin Remota.


8.2.1. Esquema Elctrico.

- 231 -
Anexo 2: Planos

8.2.2. Fotolito Circuito Estacin Remota.

- 232 -
Anexo 2: Planos

8.2.3. Esquema componentes

- 233 -
Anexo 2: Planos

8.3. Planos Circuito Contador.


8.3.1. Esquema elctrico.

- 234 -
Anexo 2: Planos

8.3.2. Fotolito Circuito Contador.

- 235 -
Links Datasheets.

8.3.3. Esquema Componentes.

- 236 -