Usuario:984 M18379

De Wikifab

Contenido

TAREA FINAL

El presente trabajo consiste en realizar el diseño de la interfaz hombre máquina (HMI) que mida el contenido máximo y mínimo en un tanque, además, este debe que simular la carga y descarga del depósito con caudales de entrada y salida diferentes, para lo cual se establece controladores capaces de seleccionar el comportamiento de las bombas. Finalmente, con una serie de alarmas tipo led se indica el funcionamiento de las bombas y los límites de fluido dentro del recipiente.

Pocedimiento

El presente trabajo se lo realizó en el software NI LabView 2018. Primero,se crea un proyecto nuevo, haciendo click en la opción "New VI" e inmediatamente nos aparecen dos áreas de trabajo una para realizar la interfaz gráfica y la otra para programar mediante bloques. Se inicia diseñando la interfaz de usuario en la que se agrega botones, elementos de acceso numérico, alarmas y medidores; dando como resultado una interfaz gráfica en la que el operario podrá controlar el flujo en el tanque.

Imagen:18379_Tanque.jpg

El siguiente paso es realizar la programación de bloques, para lo cual se crea dos cuadros de While Loop, entornos que nos permitirán representar el llenado y el vaciado del fluido. En cada uno de estos entornos While Loop se inserta un cuadro de verdadero y falso, de tal forma que cuando indiquen verdadero, en el correspondiente entorno de llenado se coloca un bloque numérico +1 (valor que puede variar dependiendo del caudal de entrada) y en el de vaciado un bloque numérico -1 (valor que puede variar dependiendo del caudal de salida). Esta varaciónde caudal se logra obteniendo el producto de -1 o +1 por un número aleatorio entre 0 y 1.

Imagen:18379entorno.jpg Imagen:18379entorno1.jpg

Ahora conectamos los botones de accionamiento de las bombas a estos cuadros de verdad o falso para después con una "Shift Register" conexión horizontal interna del entorno "While Loop" con el cuadro de caso cuando esté VERDADERO y con el bloque numérico. Ahora, cuando el cuadro esté en falso debemos asegurarnos de que realizar la conexión. Este procedimiento se realiza tanto al While Loop de llenado como al de vaciado.

Imagen:18379 bloque1.jpg Imagen:18379 bloque2.jpg

Imagen:18379 bloque3.jpg

Lo siguiente es crear dos "local variable" para cada indicador, esto con el objeto de evitar de conectar la misma variable a la conexión de llenado como a la de vaciado. A los indicadores a los que nos referimos son el tanque, el indicador numérico y los tipo led de máximo y mínimo nivel. Añadimos comparadores de mayor o igual y de menor o igual para conectar los indicadores (máximo nivel y mínimo nivel) al "Shift Register" del "While Loop", este proceso se hace para los dos casos, aquí aprovechamos para fijar como constantes la capacidad máxima y mínima del tanque.

Imagen:18379 bloque4.jpg

Para obtener el registro de llenado del tanque conectamos el local variable del indicador numérico a la conexión "Shift Register" lo que nos permitirá simular un instrumento que mide el volumen en cualquier instante de tiempo. Previo a finalizar con este ejercicio, configuraremos el control de llenado y vaciado del tanque, para este efecto se usa los controladores numéricos de máximo y mínimo nivel asociados a otros indicadores tipo led que servirán para iterrumpir la operación de las bombas. Para este efecto, nuevamente usamos comparadores de mayor igual para el llenado y menor igual para el vaciado; de sus tres posibles conexiones la primera se conecta a la línea "Shift Register", el segundo se conecta al controlador numérico y la tercera al "loop condition". Además, como se puede ver en la imagen se añadió un condicional "or" para acoplar el botón de de reseteo y de parada en caso de que se lo requiera.

Imagen:18379 bloque5.jpg

Resultado Final

Fimalmente, para que exista la interacción entre los dos entornos se los conecta desde los nodos del "Shift Register" de tal forma que se cierre el circuito y el programa tenga un "Feedback" al finalizar sus operaciones. Al hacer una prueba de funcionamiento notaremos que el proceso ocurre con mucha rapidez y con la misma tasa de llenado se da el vaciado, para corregir este punto añadimos en cada entorno "While Loop" un "Time Delay", en donde al llenado se lo configura con un retraso de 0.1 segundos y al vaciado con el doble de tiempo, de tal forma que nos aseguramos que el caudal de llenado sea diferente al caudal de vaciado.

Imagen:18379 bloque6.jpg

Archivo a descargar

Media:M18379_TrabajoFinal V2.rar

Media:18379TrabajoFinal.rar

TAREA # 2

Realización de un interface de usuario - con un "set" de datos en un gráfico de un panel diferente

Procedimiento

En el User Interface Editor, se crea la interface de usuario solicitada por la tarea para lo cual debemos dibujar dos paneles; el primer panel tendrá tres accesos numéricos, tres botones de comando y un gráfico tipo "Strip Chart" mientras que el segundo panel tendrá un accesos numérico de color, tres botones de comando y un gráfico. Lo anteriormente mencionado aparece en la siguiente figura:

Imagen:18379_a.jpg

El siguiente paso es realizar el control del programa solicitado, para ello se selecciona Generate»All Code desde el menú Code, aparecerá una serie de cuadros de diálogo que pide guardar el archivo .uir y esperamos a que se genere automáticamente el código base de acuerdo a lo dibujado en los paneles de control.Para continuar con la programación de la iterface creada se añade ordenes de lo que se desea ejecutar en cada botón, pero previo a esto debemos asegurarnos de incluir o de que estén incluidas las librerías sobre todo formatio.h que habilitará las funciones para grabar un archivo de adquisición de datos.

Imagen:18379_b.jpg

Previo a esto debemos declarar las variables de tipo double, int y float que se usaran por las funciones y operaciones que planteemos, para este caso de estudio se ha generado las siguientes variables:

Imagen:18379_c.jpg

Ahora si, se programa en los CVICALLBACK de cada botón, como se ve en la siguiente imagen para esta ocasión se incluye códigos específicos a un case EVENT_TIMER_TICK.

Imagen:18379_d.jpg

Como se puede ver, el programa debe funcionar mostrando la lectura de una señal aleatoria en un STRIPCHART que está en función de un frecuencia configurable con el TIMERTICK. En el primer panel se configura nuevos mandos como el arranque con un BINARSWITCH, el valor máximo de temperatura con un NUMERICDIAL y la configuración de una señal de alarma en un PANEL_LED. Finalmente, se añade un botón de PAUSA, uno de EVALUACIÓN y por último un botón para salir del programa.

Imagen:18379_e.jpg

Imagen:18379_f.jpg

Con el objetivo de cumplir con la consigna de obtener un volcado de los "set" de datos a un fichero, y que se puede recuperar ese "set" de datos en un gráfico de un panel diferente. Se configura el PANEL 2 para que se despliegue después de ser llamado por el botón de EVALUAR, en este panel se configura el botón GRABAR y MOSTRAR. El botón GRABAR se configura para hacer el llamado a una ventana que permite grabar los primeros 100 datos en un archivo .txt , se usa las funciones FileSelectPoup y ArrayToFile.

Imagen:18379_g.jpg

Los datos pueden ser mostrados en una gráfica al accionar el botón MOSTRAR que pide cargar una archivo para ploearlos en el panel gráfico, estas operaciones se logran con la ayuda de las funciones FileSelectPoup, ArrayToFile y PlotY

Imagen:18379_h.jpg

Resulatado

Imagen:18379_j.jpg Imagen:18379_k.jpg

Archivo a descargar

Media:M18379_Tarea_2.rar

TAREA # 1

Realización de un interface de usuario - pantalla en el software LabWindows/CVI.

Procedimiento

En el User Interface Editor, editor que facilita la creación de interfaces de usuario sin escribir una sola línea de código, se selecciona la opción New del menú File de la ventana project, en el submenú se selecciona un archivo .uir, abriéndose inmediatamente la ventana User Interface Editor. Ahí se puede crear la interface de usuario solicitada por la tarea para lo cual debemos dibujar dos accesos numéricos, un accesos numérico de color, tres botones de comando y un gráfico tal como aparece en la figura:

Imagen:config.jpg

El siguiente paso es realizar el control del programa solicitado, para ello se selecciona Generate»All Code desde el menú Code, aparecerá una serie de cuadros de diálogo que pide guardar el archivo .uir generándose automáticamente un archivo principal .h, después se abre otro cuadro para configurar los eventos de los botones de comando y finalmente una nueva ventana aparece mostrando el siguiente código:

Imagen:CodigoGeneradoInicio.jpg

Para continuar con la programación de la iterface creada se añade ordenes de lo que se desea ejecutar en cada botón, entonces en los CVICALLBACK de cada botón se incluye códigos específicos en el case EVENT_COMMIT. El programa debe funcionar con tres botones uno llamado ADD que debe graficar una señal sinosoidal ruidosa, otro llamado BORRAR para borrar lo graficado y el último llamado QUIT para salir del programa. Previo a esto debemos declarar las variables en la parte superior de la ventana, estas variables de tipo double, int y float serán usadas por las funciones que me permiten obtener la curva sinusoidal solicitada

Imagen:DeclaVari.jpg

Botón ADD

El CVICALLBACK ya está configurado para ejecutar cuando se le de un click por lo tanto se procede a añadir ordenes en el case EVENT_COMMIT Primero con GetCtrlVal se pide que obtenga los valores indicados de los accesos numéricos y se asigne a las variables ciclos, amplitud y color, respectivamente. Después para obtener la función SenoRuidoso primero se ingresa el código para obtener las funciones seno con SinePatern y ruido con WhiteNoise estas se deben sumar como matrices que para lo cual usamos un bucle for.

Imagen:ADD.jpg

Botón BORRAR y QUIT

Se configura los botones BORRAR para borrar lo graficado y el de salida del programa llamado QUIT. Igual que en el caso anterior se añade ordenes en el case EVENT_COMMIT de cada botón, para borrar lo graficado se usa DeleteGraphPlot indicando sobre que control actuar y para salir del programa se usa QuitUserInterface. El detalle de lo mencionado se puede ver en la siguiente imagen:

Imagen:BORRAR y QUIT.jpg


Resultado

Finalmente, se ejecuta el código y la interface de usuario que se diseñó al inicio se presenta como un programa ejecutable en el que que podremos obtener varios tipos de curva de una función seno no suavizada, pudiendo editar los números de ciclo y la amplitud de la señal ruidosa.

Imagen:SenWhiteNoise.jpg


Comentario

Esta tarea nos permite enlazar lo visto en los dos ejercicios de clase pues el primero consistió en obtener una gráfica de seno ruidoso desde un código sencillo sin tanta elaboración y con ayuda del YGraphPopup mientras que en el segundo ejercicio se trabajó con una interface de usuario que al programarla presenta a la gráfica en un entorno amigable y disponible para un usuario final que no requiere conocimientos previos de programación.

Además, esta tarea permitó considerar y configurar otro tipo de variables como son los float que permite el ingreso de decimales en el acceso numérico correspondiente a la amplitud del ruido. Asimismo, se exploró el cómo ingresar en el código la variable color a la función PlotY para que el usuario pueda modificar el color de la curva desde el ejecutable.

Sin duda una una de las ventajas de crear una interface de usuario es que desde ese ejecutable se puede controlar las entradas y salidas durante la ejecución del programa para ello en este caso de estudio se utilizó la función GetCtrlVal que permite capturar el valor seteado en la interface e ingresarlo al código.

Archivos a descargar

Media:Tarea1_M18379.rar

https://drive.google.com/file/d/1a-0TnaLKH1dgJvWWlLXf2OeiQpWQYdCm/view?usp=sharing

Herramientas personales