Trabajo práctico final

Introducción

Diseñar un sistema destinado a la simulación y control de una planta química.

El sistema consta de 3 aplicaciones independientes destinadas al diseño, simulación y control de la planta, respectivamente. Estas tres aplicaciones se explican a continuación:

1 - Diseño de la planta

Aplicación Windows, ya sea basada en un diálogo o SDI (Single Document Interface), destinada al diseño de la planta en forma gráfica.

El sistema debe poder cargar y grabar el diseño de la planta en un archivo de texto.

Parte 1 - Modelo de la planta

El diseño de la planta debe incluir los siguientes elementos:

El programa debe permitir insertar, borrar y mover cada uno de estos elementos.

Algunos de estos elementos de la planta tendrán atributos y estados, tal como se detalla en la siguiente tabla:

Elemento Atributos Estados
caños caudal máximo (litros / seg.)  
codos    
bifurcaciones    
uniones    
tanque capacidad (en litros) cantidad de litros en el tanque (valor real)
bomba caudal máximo (litros / seg.). Color del líquido. encendida/apagada (valor binario)
drenaje    
exclusa   abierta/cerrada (valor binario)

Cada elemento del sistema deberá poder asociarse un atributo adicional que será el nombre del objeto

A continuación se muestra como ejemplo el diseño de una planta.

A continuación se muestra el despiece de la planta en los diferentes objetos que la componen.

Parte 2 - Sistema de control

Seleccionando alguna opción en la aplicación se debe pasar al diseño del sistema de control de la planta.

En este modo, no se podrá modificar los objetos que componen la planta, sino que se mostrarán y permitirá modificar los elementos que determinan el control de la misma.

Como se mencionó anteriormente, algunos objetos pueden tener estados asociados. El programa debe desplegar dos entradas, que permitan modificar dicho estado (abrir/cerrar) y
una salida que permita leer dicho estado. En el caso del tanque, sólo se tendrán 2 salidas que indicarán si el contenido del mismo es superior/inferior a un porcentaje dado.

Estas entradas y salidas deben poder conectarse utilizando un editor gráfico, y debe permitir agregar los símbolos binarios AND y OR, el símbolo unitario NEGADOR, un pulsador y un
temporizador, tal como se muestra en el diagrama.


Esta lógica debe grabarse en el archivo con la descripción de la planta en formato texto, utilizando la nomenclatura que los alumnos prefieran.

2 - Simulación

Aplicación de consola, destinada a la simulación de la planta.

El programa debe cargar una planta de un archivo de texto generada por la aplicación de diseño descripta anteriormente, simular el funcionamiento de la misma y comunicarse con el programa de control para permitir la visualización y control de la planta.

Todos los parámetros requeridos por esta aplicación deben recibirse por línea de comandos.

Esta aplicación debe constar de 2 partes o módulos.

Módulo Simulación

Debe simular el funcionamiento de la planta en base al modelo que se describe en el apéndice I

Servidor TCP/IP.

Debe implementar la comunicación con una o más aplicaciones de control de la planta.

El protocolo utilizado para la comunicación debe ser en formato texto, y debe basarse en la filosofía web-services, que se describe a continuación:

El cliente (aplicación de control) envía un requerimiento al servidor en formato texto (preferentemente XML). Estos requerimientos pueden interpretarse como llamadas a funciones, donde se pasa el nombre de la "funcion" a invocar y sus parámetros.

El servidor responde con un texto (preferentemente en formato XML).

Las funciones a implementar deben permitir:

1 - Obtener una descripción de la planta

2 - Obtener el estado de un elemento de la planta.

3 - Modificar el estado de un elemento de la planta

3 - Aplicación de control.

Aplicación win32 similar a la descripta en el punto 1 y con similar interfaz gráfica. El programa no debe permitir modificar la planta, sino que debe mostrar el estado de la misma.

Esta aplicación debe mostrar el estado de todos los elementos que componen la planta en forma gráfica, animando cada elemento para indicar los flujos de líquido, con el color correspondiente a cada líquido.

Si la capacidad máxima de un tanque es superada, el programa debe emitir una alerta.

El sistema deberá mostrar el contenido de los tanques con el color de los líquidos que lo llenaron.
 

Apéndice I - Modelo de simulación

La planta puede entenderse como un grafo dirigido, donde cada objeto representa un nodo del grafo y cada caño una arista. Si bien en un caño el líquido puede fluir en ambas direcciones,
simplificaremos el modelo suponiendo que el liquido fluye en una única dirección.

Los objetos de la planta pueden dividirse en 3 tipos:

1 - Fuentes. (ejemplo: bomba)
2 - Drenajes. (ejemplo: salida)
3 - Los restantes objetos (exclusas, bifurcaciones, uniones, etc) son idealizados suponiendo que no almacenan líquido.

Un caso particular de dispositivo es el tanque, que constituye una fuente y drenaje al mismo tiempo.

Para simular la planta, se analizan todos los flujos de liquido entre todas las fuentes y drenajes.

Las bifurcaciones son simplificadas suponiendo que divide el flujo de líquido en dos.
Las uniones son simplificadas suponiendo que sólo aceptan el 50% del caudal posible de cada entrada.

Si una exclusa / bomba está cerrada, el programa debe considerar que dicha parte del grafo no está presente.

Ejemplo:

Tomando el diseño de la planta dado anteriormente, se lo dividirá en un grafo, tal como se muestra a continuación:

El sistema deberá iterar n veces por segundo, determinando los caudales en cada arista del grafo. Una vez hecho esto se actualizará los contenidos de líquido en cada tanque en base a los caudales determinados.

En primer lugar se determinan los posibles caminos fuente-drenaje:

1 - 4
3 - 4
4 - 8
4 - 10
8 - 10
10 - 12

Una vez hecho esto se determinará el caudal en cada arista, tal como se muestra a continuación:

Flujo en arista 1
Si la bomba 1 está apagada: 0
Si la bomba 1 está encendida y la 2 apagada:
mínimo entre:
* caudal max. entregado por la bomba
* caudal max. arista 1
* caudal máx. arista 3
Si la bomba 1 y 2 están encendidas:
* caudal max. entregado por la bomba
* caudal max. arista 1
* mitad del caudal máx. arista 3.

Flujo en arista 2
Similar flujo en arista 1

Flujo en arista 3
Suma de los flujos por las aristas 1 y 2

Flujo en arista 4
Si la exclusa 5 está cerrada, el flujo será 0.
En caso contrario:
Si la bomba 8 está apagada, el grafo se reduce y el flujo estará
dado por el mínimo caudal entre
* máximo caudal posible en arista 4
* máximo caudal posible en arista 5
* máximo caudal posible en arista 8 por dos, ya que sólo la mitad
del caudal se irá por esta arista.
* máximo caudal posible en arista 6 por dos, ya que sólo la mitad
del caudal se irá por esta arista.
* máximo caudal posible en arista 9 por dos.

Si la bomba 8 está abierta, el análisis es similar solo que el
último flujo será directamente:
* máximo caudal posible en arista 9.

Flujo en arista 5
Será idéntico al flujo por la arista 4

Flujo en arista 6
Será la mitad del flujo en la arista 5

Flujo en arista 8
Será la mitad del flujo en la arista 5

Flujo en arista 9
Suma de los flujos en aristas 6 y 7

Los restantes flujos pueden ser determinados por los alumnos.

En este análisis no se tuvo en cuenta la existencia de líquido en un tanque. Si un tanque está vacío, debe considerarse que no hay flujo de líquido (exclusa cerrada). Si un cuanto de flujo de líquido resulta ser superior al líquido existente en un tanque, dicho caudal deberá ser limitado al caudal existente.

Una vez determinado el caudal en cada arista del grafo, el programa debe actualizar el contenido de todos los tanques.

Tener en cuenta que cada bomba de la planta entrega líquidos de distinto tipo (color) lo cual deberá ser tenido en cuenta al actualizar los volúmenes de cada tanque, de tal forma que el color mostrado en el grafo sea proporcional (en forma aproximada) a la densidad de los líquidos entrantes.

Por ejemplo:

Si un tanque contiene 10 litros de líquido rojo (255,0,0) y recibe 10 litros de líquido de verde (0,255,0), el color resultante será:

(255 * 90 / 100, 255 * 10 / 100, 0)

Utilizar números double para minimizar errores de redondeo.