interfaz gráfica en matlab
TRANSCRIPT
Interfaz Gráfica en MATLAB
Cálculo del Factor de Compresibilidad de un Gas
Creamos primero un archivo GUI con el nombre “gas” e insertamos todos los botones, paneles y menúes
haciéndoles las modificaciones correspondientes, de modo que nos queda lo siguiente:
Reconocemos los elementos:
Push buttons:
string tag
IDEAL “ideal”
VAN DER WAALS “vdw”
REDLICH – KWONG “redkw”
PENG – ROBINSON “peng”
Panels:
string
“Ecuacion”
“Variables de Estado”
“Gas”
“Resultados”
Static Texts:
string Tag
Temperatura “text”
K “text”
Presion “text”
atm “text”
Volumen molar “text”
Factor de
Compresibilidad“text”
L/mol “text”
_ “volm”
_ “faccom”
Edit texts:
string tag
_ temp
_ pres
Pop-up menu:
string tag
Metano
Etano
Propano
n-Butano
“gas"
i-Butano
n-Pentano
El proceso de cálculo es:
Leer los parámetros del gas, es decir, seleccionar con qué gas se va a trabajar.
Para esto recurrimos al Callback del pop-upmenu, haciendo clic derecho sobre éste, seleccionando “view
callbacks” y luego “callback”:
Lo que observamos es simplemente la declaración de la función, observemos que el nombre con que
está identificada es exactamente el TAG que le asociamos al diseñar la ventana.
Ahora, el objetivo es que podamos seleccionar un gas de la lista emergente y que se asignen sus valores
críticos para los posteriores cálculos.
Para esto, agregamos códigos de modo que nos queda:
La variable “g” que aparece es una temporal a la que se ha asignado el valor del selector del popmenu.
La sentencia “get” tiene la función (análoga con “input”, usada en codificación normal) de asignar
valores a una variable desde un elemento de la ventana GUI.
Siempre, para manipular cualquier TAG se usa “handles”: handles.nombre_del_tag.
La línea “g= get(handles.gas, ‘value’)” significaría “ asignar a ‘g’ el valor de ‘gas’”, pero “gas” contiene
una lista de 6 elementos; por ello usamos el lazo “switch” para que acorde con la selección del gas, se
usen determinados valores de presión y temperatura críticos y factor acéntrico.
Como “tc”, “pc” y “w” son variables locales de la función “gas_callback”, tenemos que hacerlas útiles
cuando las invoquemos en otras funciones.
Para esto designamos una estructura “data” que tiene los campos “tempc”, “presc” y “facac” a los que al
final designamos cada valor de “tc”, “pc” y “w” respectivamente.
Para hacer constar que la estructura “data” será usada en otras funciones, siempre hay que agregar la
línea: “guidata(hObject, handles)”.
Ahora que ya tenemos definidos los parámetros de cada gas, pasemos a leer la presión y temperatura, para esto
recurrimos a los Edit Texts que representan a los campos en que se colocarán los datos de temperatura y
presión.
Recurriendo al Callback del primero:
Lo que queremos es que al agregar un dato numérico en el recuadro de temperatura, éste sea almacenado
como una variable, para ello le agregamos codificación:
Las líneas precedidas por un “%” son comentarios, los que están en inglés han sido agregados por el
mismo programa.
Ahí vemos que definen qué es “hObject”, dentro de la función, este identificador representa al TAG.
“t” es una variable que definimos dentro de la función, su valor está en formato “double” o numérico.
La sentencia “str2double” traduce un dato que está en formato “string” (cadena de caracteres) a
formato “double” (número).
Entonces, “t” es el valor numérico que se obtiene de leer el TAG “temp”.
La siguiente sentencia con el lazo “if” es para cerciorarnos de que el valor sólo puede ser numérico. La
sentencia “isnan(t)” significa “t no es un numérico”.
La siguiente sentencia, “set” (análoga al “disp” en programación normal) es para asignar un valor al tag
designado.
La sentencia “errordlg” se usa para que aparezca un mensaje de error si se ingresara un valor no
numérico.
Finalmente almacenamos la variable “t” en el campo “temp” de la estructura “data”.
Realizamos lo análogo para la presión:
Como ya tenemos definidas todas las variables, lo que queda es definir las funciones de cada push button, de
modo que al hacer clic sobre ellos, al ejecutar el programa, se realicen los cálculos pertienentes.
Al ver el CALLBACK de cada push button, sólo aparece la declaración de la función, es nuestra labor agregar el
código necesario.
Primero con trabajemos para el caso “ideal”:
Luego:
Observemos que en la primera y segunda línea se asignan las variables de presión y temperatura.
Luego se calcula el volumen molar, aplicando la ecuación del gas ideal y se asigna al TAG “volm” el valor
obtenido de esta operación.
Finalmente se calcula el factor de compresibilidad y se asigna al TAG “faccom” el valor obtenido de esta
operación.
El desarrollo de las otras funciones es análogo, sólo que como son ecuaciones más complejas, se ha agregado el
proceso iterativo para el cálculo del volumen molar.
Para el caso de Van der Waals:
Proceso
Iterativo
Para el caso de Redlich – Kwong:
Proceso
Iterativo
Asignación de variables
Para el caso de Peng – Robinson:
El programa está listo para ejecutarse y lo puede comprobar con los archivos adjuntos.
NOTA: Teniendo abierta la ventana donde observamos toda la codificación se debe hacer la corrida
del programa, si intentamos abrir directamente el archivo *.fig, no se realizará ningún cálculo y sólo
aparecerán mensajes de error en el Workspace.
Asignación de variables
Constantes Complementarias
Proceso
Iterativo
Cálculo del Factor de Compresibilidad de una Mezcla de Gases
El procedimiento es muy similar al seguido, los únicos cambios son:
Ya no hay un pop-up menu, más bien existe una lista de determinados gases, de los cuales se debe
ingresar el número de moles.
La lectura del número de moles de cada gas es similar a la lectura de temperatura y presión (iguales que
para el caso de un solo gas), para el gas 1, existe el TAG “mol1” y así sucesivamente.
Luego las moles leídas se agrupan en un vector para aplicarlo en los cálculos de cada función.
Las constantes críticas han sido ingresadas como vectores de valor fijo y las constantes críticas de la
mezcla se calculan como medias ponderadas:
El desarrollo de las funciones de cada PUSH BUTTON es prácticamente el mismo, sólo que se han
reemplazado “tc”, “pc” y “w” por “tcm”, “pcm” y “wm” respectivamente.
Para la ecuación ideal:
Para el caso de Van der Waals:
Para el caso de Redlich – Kwong:
Para el caso de Peng – Robinson:
El programa queda listo para compilarse, lo cual puede verificarse con el archivo adjunto.
Conclusiones:
El uso de interfaz gráfica del usuario es bastante práctica en cuanto se refiere a ingreso de datos y salida de resultados.
Su uso, evidentemente, es ideal para personas que no estén familiarizadas con programación y que sólo necesiten realizar cálculos.
Estos dos pequeños ejemplos en la creación de interfaces gráficas nos abre las puertas a una infinidad de programas didácticos que podemos diseñar con la GUI de MATLAB.
Dada la potencia de cálculo del MATLAB y conociendo los códigos pertinentes, podríamos diseñar nuevas herramientas de cálculo, por ejemplo un programa en el que ingresamos una función y observamos su gráfica u obtenemos el valor de su derivada o de su integral en un intervalo.
Resolución de sistemas lineales y no lineales. Problemas estadísticos. Cualquier programa que administre variables sobre un determinado sistema determinado, ideal para
ingeniería química. Etc.
Fuentes:
Gran parte del código que desarrollé fue por ensayo y error a partir de diversos ejemplos que encontré en la web, pero de todos los enlaces visitados, hay uno con muchos videos tutoriales:
http://www.youtube.com/user/diegokillemall
Es de un joven ingeniero de telecomunicaciones (Ecuador), que durante su carrera y vida profesional está especializado en el manejo de MATLAB; en mi opinión, muy buen material, práctico y entendible.
Habiendo terminado el curso con Turbo Pascal y habiendo visto el manejo a nivel básico de MATLAB, agradezco la oportunidad que se me brindó para desarrollar programas con la interfaz gráfica de MATLAB, como muchos lo han hecho siempre, afirmo que es una de las mejores herramientas, una nueva cara de la programación de la que tenía poco conocimiento y me acerca más a comprender cómo podrían funcionar los demás programas con que solemos trabajar en ingeniería y cómo podría ingeniar nuevos programas; resulta un “alivio” saber que con un programa y una computadora puedo diseñar mis propias herramientas de trabajo.
Francisco Osores Bonilla
20082597K
UNI – FIP, Lima, 20 de Julio del 2010