Usuario:984 M18096

De Wikifab


RUBÉN MARTÍN


Graduado en Ingeniería Mecánica por la Universidad Carlos III de Madrid.

Estudiante del Máster en Ingeniería Mecánica de la Universidad Politécnica de Madrid.




TRABAJO FINAL


El objetivo de este trabajo es simular el comportamiento de un controlador para un depósito de agua con dos bombas (una para el llenado y otra para el vaciado) con una interfaz similar a la siguiente:

Imagen 1: Depósito enunciado


Para ello se empleará el software LabWindows/CVI ya que ha sido el más trabajado en la asignatura. La interfaz resultado obtenida es la siguiente:


Imagen 2: Interface Rubén


Esta interface contiene un botón de accionamiento (On/Off), un selector de modo (automático/manual), un botón de para de emergencia para tener completamente el funcionamiento de todo el sistema, un gráfico (StripChart) que representa los límites máximos y mínimos impuestos al depósito y el caudal que contiene el mismo, a cada instante de tiempo. Está representado también el tanque de agua, y las bombas de entrada y salida con un regulador de caudal independiente para cada una (sólo disponibles en modo manual). Finalmente a la derecha está contenido un marcador que indica el nivel del tanque en cada instante, los indicadores de los límites (máximo y mínimo) que son regulables manualmente en todo momento. Estos indicadores cuentan con un diodo led que aparece en verde cuando se cumplen los límites, o se pone rojo cuando no se cumplen. Además, existe un botón de salida para cerrar el programa.

En funcionamiento manual se pude apreciar como todos los botones están activados, el gráfico representa los límites y un llenado rápido con un pequeño descenso que se le ha ejecutado para bajar de los mil litros a los 942 que indica el marcador. Como el depósito supera el nivel máximo de agua se tiene el led en color rojo. Todo esto se puede apreciar en la siguiente imagen.


Imagen 3: Funcionamiento manual


El otro modo de funcionamiento que permite esta interface es el automático. Al activar este modo desaparecen los controles manuales de regulación del tanque. El modo automático funciona con números aleatorios para el caudal de entrada y de salida. El funcionamiento de los límites y del gráfico sigue siendo el mismo que antes. En la imagen siguiente se puede apreciar como quedaría esta interface en modo automático, en el gráfico se aprecia como el llenado ahora es variante debido a su funcionamiento con números aleatorios. Para probar se ha elevado el límite mínimo que debe tener el depósito a 350L de ahí que como el nivel del tanque está por debajo de ese valor, el led aparece en rojo. (Los límites están acotados entre 0 y 500 para el inferior, y 500 y 1000 para el superior).


Imagen 4: Funcionamiento automático


Todos los botones cuentan con cuadros de diálogo de ayuda que indican su función. Como por ejemplo el botón de RESET ALL tiene la ayuda que se muestra a continuación.


Imagen 5: Botones ayuda


Finalmente, atendiendo al código cabe destacar que todos los botones están programados mediante CALLBACK, y la ejecución de cada función está controlada por un timer que hace que se compruebe a cada instante el código estipulado y lo ejecute. El código principal, la función más importante (timer) y el resto de callback se puede apreciar en las siguientes imágenes. El resto de botones sigue la misma estructura que el botón de salida mostrado pero con las funciones (SetCtrlVal (para asignar un valor), ClearStripChart (para limpiar el gráfico), GetCtrlVal(Para coger un valor), SetCtrlAttribute...) apropiadas a cada uno.


Imagen 6: Código 1

Imagen 7: Código 2

Imagen 8: Código 3

Imagen 9: Código 4

Imagen 10: Código 5

Imagen 11: Código 6

Imagen 12: Código 7


Todo esto sería una breve explicación del funcionamiento de esta interface, para mayor conocimiento y exploración en profundidad del programa y de su código se pueden descargar los archivos para ejecutarlo correctamente (adjuntados debajo de estas imágenes de ejemplo).




Archivos para ejecutar este programa:Media:TF_INSTRUMENTACION_M18096.zip




TAREA 2


En este ejercicio se va a ejecutar el funcionamiento de las siguientes interfaces.



Una vez iniciado el programa (run) aparecerá la interfaz del menú principal, ahí gracias a la adaptación de una función random, se podrá representar unos valores de temperatura que oscilan entre 20 y 80. Para que se empiecen a mostrar estos valores en el StripChart habrá que accionar el botón de arranque (ponerlo en ON). El programa va representando valores por cada unidad de tiempo que origina un timer. Esta frecuencia de tiempo se puede modificar con la ruleta freq timer. El StripChart también representa los límites superiores e inferiores que el usuario desea de temperatura, para ajustar estos límites hay otras dos ruletas que los ajustan. Cada vez que la temperatura supere estos límites, se encenderá una alarma roja dependiendo de si se ha superado el límite superior o el inferior.


Imagen 2: Funcionamiento menú principal


En la imagen se ha podido observar como se representa gráficamente la temperatura y además se muestra el valor de esta, a cada instante, en un panel numérico. Se puede apreciar también que hay un botón para grabar un set de datos, esto va a permitir grabar un cierto número de datos que se muestren en la gráfica. Cuando se quiera empezar a grabar los datos se da a reset para limpiar el StripChart y se ajusta el número de datos que se desee para el set y su posterior graficado en el análisis de datos. Pasado un cierto tiempo se pulsa el botón de grabar, y se generará un archivo que contiene el número de datos que se ha marcado de las temperaturas que han aparecido desde la reinicialización.


Imagen 3: Acción de guardar Set de Datos


El último botón que aparece en el menú principal es de Análisis de datos, pulsando este botón se puede acceder al segundo interfaz de usuario. En él se pueden cargar los datos que previamente se habían guardado pulsando en el botón de Mostrar Set de Datos. Estos datos se representarán en el Graph para su correcto análisis. En este interfaz hay también un botón para limpiar el gráfico y dejarlo vacío, otro para regresar al menú principal, y el último, al igual que en el menú principal, el botón de salir para cerrar el programa.


Imagen 4: Interfaz de análisis de datos


Para mostrar este set de datos, al pulsar el botón de mostrar, se abrirá una ventana en la que buscar el archivo a cargar en el gráfico.


Imagen 5: Carga de datos


Detrás de toda esta interfaz gráfica hay una programación en C donde los aspectos más destacados son los siguientes.

- Declaración de variables y visualización de las dos interfaces por separado en el MAIN:


Imagen 6: Programación en C (1)



- Callback correspondiente al timer y todas las funciones que se realizan a cada tick:


Imagen 7: Programación en C (2)


- Algunas Callbacks más, importantes, como la de grabar, mostrar, acceder al panel 2 y retroceder al menú principal:



Imagen 8: Programación en C (3)



Aparte de estas funciones están las de limpiar, resetear y salir que se comentaron en la Tarea 1.


Archivos para ejecutar programa: Media:Tarea2_M18096.zip



TAREA 1


Realización de la siguiente interfaz de usuario para la representación de ondas senoidales.


Imagen 1: Interfaz de usuario


Con este programa se va a poder representar las ondas senoidales con el número de ciclos, la amplitud y la fase que determine el usuario. Además, el usuario podrá fijar el color que desee para cada curva .

Para que el programa pueda definir estas curvas senoidales con un ruido determinado se fijan en el código las siguientes funciones:


SinePattern (1000, amplitudseno, fase, ciclos, seno);
WhiteNoise (1000, amplitud, -1, ruido);
for (i=0;i<=999;i++)
{
SenoRuidoso[i]=seno[i]+ruido[i];
}


Este programa tiene que detectar los valores numéricos que se han introducido para los ciclos, la amplitud, la fase y el color. Para ello se declaran las siguientes funciones en el código:


GetCtrlVal (panelHandle, PANEL_NUMERIC, &ciclos);
GetCtrlVal (panelHandle, PANEL_NUMERIC_2, &amplitud);
GetCtrlVal (panelHandle, PANEL_NUMERIC_3, &fase);
GetCtrlVal (panelHandle, PANEL_NUMERIC_4, &amplitudseno);
GetCtrlVal (panelHandle, PANEL_COLORNUM, &color);


Por último, para graficar la curva deseada se emplea la siguiente función:


PlotY (panelHandle, PANEL_GRAPH, SenoRuidoso, 1000, VAL_DOUBLE, VAL_THIN_LINE, VAL_EMPTY_SQUARE, VAL_SOLID, 1, color);


Como complemento, se ha añadido para que en los tres botones, si se pinchan con botón derecho te dé información de lo que hace. Para ello se ha declarado el siguiente código.


case EVENT_RIGHT_CLICK:
MessagePopup ("AYUDA", "PULSANDO ESTE BOTON SE REPRENSENTAN EN EL GRAFICO LA FUNCION SENOIDAL DESCRITA");
break;


Por lo tanto, los resultados que se pueden obtener con este programa, son como los que se muestran en las imágenes siguientes.


Imagen 2: Muestra la interfaz, el resultado y el comando de ayuda


Imagen 3: Resultado gráfico de la ejecución de dos curvas senoidales diferentes


Archivos para ejecutar programa.Media:Tarea1_M18096.zip

Herramientas personales