Post on 23-Apr-2020
transcript
Iván Gómez Partido
Interfaz de usuario para equipo de medida de concentración de iones
TRABAJO DE FIN DE GRADO
Dirigido José Luis Ramírez Falo
Grado de Ingeniería Electrónica Industrial y Automática
Tarragona
2016
Información Confidencial
Esta es la versión pública del documento.
Para su publicación y siguiendo las instrucciones del acuerdo de confidencialidad (ver
página siguiente) del Trabajo Final de Grado, han sido eliminadas de la versión íntegra del
documento las partes del contenido de carácter confidencial.
Para más información:
NT Sensors, S.L.
C/Jaume I, nº23
43764 El Catllar
Teléfono 977653925
Interfaz de usuario para equipo de medida… 1. Índice general
4
1 Índice general
1 Índice general ............................................................................................................................. 4
1.1 Índice de figuras ................................................................................................................. 6
2 Introducción ............................................................................................................................... 7
3 Objetivos .................................................................................................................................... 8
3.1 Diseño ................................................................................................................................ 8
3.2 Configuración del sistema .................................................................................................. 8
3.3 Resultados de las muestras ................................................................................................. 9
3.4 Otras funcionalidades ......................................................................................................... 9
4 Antecedentes............................................................................................................................. 10
5 Comunicación PC-Equipo ........................................................................................................ 11
6 Configuración sonda y solución de calibración ....................................................................... 15
6.1 Configuración sonda ........................................................................................................ 15
6.2 Configuración solución de calibración ............................................................................. 17
6.3 Guardar en memoria no volátil configuración sonda y solución ...................................... 18
6.4 Visualización sonda y solución configurada ................................................................... 21
7 Calibración del equipo ............................................................................................................. 22
7.1 Actuación bombas calibración ......................................................................................... 22
7.2 Visualización resultados calibración ................................................................................ 24
7.3 Calibración del pH ........................................................................................................... 25
7.4 Guardar parámetros de calibración del pH ....................................................................... 26
8 Realización de medidas y visualización de resultados ............................................................. 27
8.1 Actuación bombas ............................................................................................................ 27
8.2 Monitorización resultados de las medidas........................................................................ 28
8.2.1 Tabla resultados última medida ............................................................................... 28
8.2.2 Gráfica resultados de medidas ................................................................................. 29
9 Configuración del equipo ......................................................................................................... 30
10 Horario calibración y medidas .............................................................................................. 31
11 Alarmas ................................................................................................................................ 32
12 Juego de pruebas ................................................................................................................. 33
13 Resultados y conclusiones .................................................................................................... 36
14 Referencias ........................................................................................................................... 37
Interfaz de usuario para equipo de medida… 1. Índice general
5
15 Anexos .................................................................................................................................. 39
Interfaz de usuario para equipo de medida… 1. Índice general
6
1.1 Índice de figuras
Figura 1. Estructura proyecto C# .................................................................................................... 11
Figura 2: Selección de equipo si hay más de uno conectado .......................................................... 13
Figura 3: Ventana configuración sonda .......................................................................................... 16
Figura 4: Ventana configuración solución de calibración .............................................................. 18
Figura 5: Mensaje espera secuencia de inicio ................................................................................. 20
Figura 6: Ventana visualización sonda y solución .......................................................................... 21
Figura 7: Ventana resultados calibración ........................................................................................ 24
Figura 8: Mensaje calibración pH ................................................................................................... 25
Figura 9: Vista ventana principal interfaz ....................................................................................... 28
Figura 10: Tabla resultados última medida ..................................................................................... 29
Figura 11: Gráfica evolución de la concentración de diferentes muestras ...................................... 29
Figura 12: Ventana configuración offsets bombas y número de muestra ....................................... 30
Figura 13: Horario muestras y calibración ...................................................................................... 31
Figura 14: Ventana configuración alarma ....................................................................................... 32
Figura 15: Aviso de sonda no configurada ..................................................................................... 33
Figura 16: Aviso de solución no configurada ................................................................................. 33
Figura 17: Resultados medidas ....................................................................................................... 34
Figura 18: Gráfica resultados medidas juego de pruebas ............................................................... 35
Interfaz de usuario para equipo de medida… 2. Introducción
7
2 Introducción
En el segundo cuatrimestre del cuarto curso del Grado de Ingeniería Electrónica
Industrial y Automática realicé prácticas en la empresa NT Sensors, S.L., una PYME
situada en el municipio El Catllar, perteneciente a la provincia de Tarragona.
La actividad principal de la empresa se centra en la producción de sensores basados
en nanotubos de carbono. Los equipos producidos en NT Sensors se caracterizan por la
capacidad de medir la concentración de iones en el agua, que son de gran utilidad en
agricultura y plantas de tratamiento de aguas. Puesto que permiten determinar la
concentración de hasta 8 iones en un minuto en el lugar donde se encuentra el agua que se
desea analizar, sin la necesidad de enviar las muestras a un laboratorio.
NT Sensors me ha ofrecido la oportunidad de realizar el Trabajo de Fin de Grado
en su empresa. Trabajando en un proyecto de uno de sus equipos. Este, consiste en la
elaboración de una interfaz de usuario sobre Windows para el Automatic Multi Ion
Analisys, un sistema automático que permite cuantificar simultáneamente la concentración
de iones en una sola muestra. Esto se consigue a partir de la actuación de unas bombas, que
introducen las soluciones de calibración y el agua a medir en una celda donde se encuentra
la sonda Multi Ion.
Interfaz de usuario para equipo de medida… 3. Objetivos
8
3 Objetivos
Los objetivos del proyecto se basan principalmente en proveer al cliente de un
software intuitivo, que permita configurar el sistema y proporcionar toda la información
referente al mismo de una forma clara.
Para conseguir estos objetivos desde la empresa se marcan una serie de
especificaciones:
3.1 Diseño
La interfaz se debe estructurar en diferentes ventanas, en las cuales se puedan
realizar todas las configuraciones pertinentes al sistema. En la ventana principal, se deben
mostrar tanto las gráficas donde se aprecie la evolución temporal de la concentración de los
iones, como los valores de la última medida.
3.2 Configuración del sistema
A un PC pueden haber conectados diferentes equipos, por tanto, al ejecutar el
software, si únicamente hay uno conectado, debe conectarse a ese. Si hay más
equipos, se debe preguntar al usuario a cual se quiere conectar.
Sonda y solución de calibración. La primera vez que se ejecute la interfaz, el
usuario debe de configurar la sonda y las soluciones. En el caso de la sonda, se
basará únicamente en seleccionar que iones se van a medir. Al configurar la
solución, se debe introducir que iones se encuentran en la solución así como la
concentración de cada ion.
Horario. Una vez configuradas sonda y soluciones de calibración, se debe mostrar
un horario, donde se pueda seleccionar a qué horas se realizaran las calibraciones.
Muestras. Del mismo modo que en el caso de la calibración, se debe mostrar un
horario donde el usuario pueda escoger a qué horas se realizaran las medidas.
También se debe poder seleccionar el número de muestras. Por ejemplo, en el
proceso de tratamiento de aguas, se toma una muestra del agua de entrada y otra de
salida para poder apreciar la efectividad del proceso.
Alarmas. Para conseguir un software de mayor funcionalidad, se le debe permitir
al usuario poder configurar unos rangos para concentración de cada ion, superados
estos se debe producir una alarma.
Interfaz de usuario para equipo de medida… 3. Objetivos
9
3.3 Resultados de las muestras
Para mostrar los resultados, se requiere una gráfica para cada muestra, en la cual se
pueda apreciar la evolución de la concentración de los iones en el tiempo. En dicha gráfica
se debe poder seleccionar los iones que se quieren observar en un momento determinado.
Poder variar las escalas, para así poder apreciar los resultados con más detalle.
Como he comentado anteriormente, con las gráficas deben aparecer también los
valores numéricos de la última concentración medida de cada ion.
3.4 Otras funcionalidades
La medida de la concentración de los diferentes iones se realiza a partir de la
ecuación de una recta. Por lo que el proceso de calibración consiste en ajustar los
parámetros de la pendiente y la intersección de dicha recta.
Para facilitar los parámetros correspondientes a la calibración, al usuario, se debe
configurar una ventana. Donde en una tabla debe constar la siguiente información para
cada ion:
Pendiente. (Cada ion cuenta con un rango diferente en el cual puede variar la
pendiente, dentro del correspondiente rango la calibración es correcta, como el
usuario no tiene por qué conocer los diferentes rangos para cada ion, se debe
indicar si el valor obtenido es correcto).
Intersección
Temperatura de la solución.
Hora de calibración
Fecha de calibración
Para el usuario es muy importante poder ver en un histórico el día y la hora en la
que han saltado las alarmas, se ha realizado una medida, calibración, limpiado, etc. Por lo
tanto, se debe mostrar un histórico en el que se muestre toda la información mencionada
anteriormente. Además el usuario debe poder filtrar que información ver, por ejemplo,
únicamente alarmas.
La interfaz debe contener la posibilidad de configurar una serie de avisos por e-
mail, en el momento que salte alguna alarma.
El software a realizar debe ser bilingüe, debido a que los clientes de la empresa no
son únicamente a nivel nacional, ya que sus equipos son exportados a diferentes países del
mundo. Por lo tanto, debe estar disponible en inglés y castellano.
Para finalizar este apartado, comentar que el software se realizará con el entorno de
programación Microsoft Visual Studio 2010 en el lenguaje C#. Un lenguaje de
programación orientado a objetos desarrollado y estandarizado por Microsfoft. Su sintaxis
básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de
Java[1].
Interfaz de usuario para equipo de medida… 4. Antecedentes
4 Antecedentes
Para comenzar este apartado me gustaría dar una idea del estado del equipo a la
hora de iniciar el proyecto.
El sistema se basa en una PCB, donde se conecta la sonda Multi Ion. La cual
contiene diferentes electrodos, cada uno correspondiente a un ion. Cada electrodo se
conecta a un canal de entrada de la placa. Con tal de garantizar una impedancia de entrada
mínima y filtrar el máximo ruido posible, se aplica un seguidor de tensión mediante el
integrado LMC6484. Posteriormente, se realiza un filtrado con un filtro RC de R = 10 kΩ
y C = 0,22 uF y un seguidor de tensión mediante el integrado OPA4277. Una vez filtradas,
las señales son multiplexadas (DG408DJ) con tal de obtener como única salida el canal
seleccionado, posteriormente se realiza una conversión Analógica/Digital, una vez
convertida la señal se introduce en el microcontrolador PIC18F4550 de Microchip. El
micro contiene el firmware que actualiza el estado de las bombas, que llenarán una celda
donde se encuentra la sonda Multi Ion, ya sea de soluciones de calibrado, agua que se
desea medir o agua para limpiar la sonda. El firmware ya se encuentra realizado, por lo que
en este proyecto únicamente se realizaran algunas modificaciones que puedan surgir.
El sistema AMIC, se encuentra en funcionamiento, pero sus posibilidades son muy
limitadas. El usuario puede interactuar con el mediante 3 pulsadores, que permiten realizar
calibrado, limpiado y medidas puntualmente. Y los resultados obtenidos en las medidas
son introducidos en una tarjeta de memoria SD.
Las configuraciones referentes a la sonda, soluciones de calibración, frecuencia de
calibración y medida, va configurado en el firmware.
Esto da lugar a que cada cliente cuente con un firmware personalizado según sus
especificaciones. Esto presenta un problema. Si el cliente desea realizar alguna
modificación en su equipo, como puede ser añadir un ion. Se dispone únicamente de dos
opciones, o el cliente hace llegar el equipo a las instalaciones de NT Sensors para ser
modificado o se tendría que desplazar algún empleado del servicio técnico al lugar donde
el cliente tenga instalado su equipo.
Por tanto, la realización de esta interfaz es de gran importancia puesto que permitirá
realizar configuraciones en el equipo de una manera más sencilla. El propio cliente podrá
realizarlas. Por otro lado el cliente obtendrá mucha más información ya que podrá ver los
parámetros de calibración y si son correctos. A la hora de apreciar los resultados de las
medidas, en lugar de obtener los valores numéricos, y tener que realizar las gráficas el
propio cliente, la propia interfaz le mostrará las gráficas. Además, con la posibilidad de
configurar rangos por el cliente, se podrá observar de manera instantánea por medio de las
alarmas que se ha superado un valor en la concentración de cualquier ion y podrá realizar
las correcciones pertinentes de una forma más rápida.
Interfaz de usuario para equipo de medida… 5. Comunicación PC-Equipo
11
5 Comunicación PC-Equipo
La comunicación entre el PC y el equipo se realizara mediante comunicación serie
RS-232, por especificación de la empresa.
En primer lugar, apuntar que el lenguaje de programación C# es prácticamente
nuevo para mí. Por lo que para realizar este proyecto he utilizado como guía la MSDN, del
inglés (Microsoft Developer Network)[2]. Un lugar, donde los desarrolladores de software
de plataformas de Microsoft podemos encontrar la información necesaria para llevar a cabo
los proyectos.
Para empezar a programar la interfaz, he creado el proyecto (AMI C7 Auto) donde
programaré todas las ventanas de configuración, muestra de resultados, etc. También he
creado una librería (ntDriver) en la cual estarán todas las funciones que estén relacionadas
con la comunicación entre en el PC y el equipo.
Figura 1. Estructura proyecto C#
El primer paso a la hora de iniciar la programación es crear la ventana principal del
programa. Como se puede apreciar en la Figura 1, está ventana la he nombrado
FormPrincipal. Este formulario, se trata de una Form. Como apuntan desde MSDN, se trata
de una ventana o cuadro de dialogo que constituye la interfaz de usuario de una
aplicación[3].
Interfaz de usuario para equipo de medida… 5. Comunicación PC-Equipo
12
El código de esta ventana, en este capítulo del proyecto, únicamente contendrá las
instrucciones para establecer la comunicación entre el Pc y el Equipo. En próximos
capítulos se extenderá para mostrar la información pertinente que se detalla en el capítulo
correspondiente a los objetivos.
En el código correspondiente a la ventana principal, en primer lugar instancio un
objeto de la clase ntDevice (donde se encuentran las funciones relacionadas con la
comunicación con el equipo automático). Para establecer la comunicación con el equipo se
utiliza la clase SerialPort[4]. Esta clase es proporcionada por las librerías contenidas en el
entorno de programación. Para todas las clases proporcionadas por las librerías, se debe
consultar el capítulo correspondiente en la MSDN para apreciar las propiedades y métodos
que nos ofrecen, así como algunos ejemplos que son de gran ayuda.
Una de las especificación que debe cumplir el software es que a un PC pueden
haber conectados diferentes equipos AMIC. En el caso de que se encuentren varios equipos
conectados, al ejecutar el software se debe preguntar al usuario a cuál de ellos se quiere
conectar.
Para abordar esta especificación, se realiza una encuesta mediante un bucle de 6
iteraciones (ya que los PC suelen contar como máximo con 6 puertos de comunicación),
donde se comprueba si en cada uno de esos puertos se encuentra un equipo AMIC
conectado. Previamente, se comprueba si la comunicación serie se encuentra abierta, de ser
así se cerraría mediante el método Close(). Esto se realiza, debido a que si la comunicación
serie se encuentra abierta, a la hora de intentar establecerla da problemas. Una vez
asegurado que la comunicación está cerrada, se establecen los tiempos de espera de lectura
y escritura del puerto de comunicación. Esto se realiza mediante las propiedades
ReadTimeout y WriteTimeout respectivamente.
El bucle de 6 iteraciones que comentaba en la párrafo anterior, se basa en enviar por
cada uno de los puertos de comunicación la trama {0x70, 0x00, 0x00, 0x00}. Donde el
primer byte correspondiente (0x70) corresponde al código de operación correspondiente a
operación de solicitar información del firmware. Todos códigos de operación se encuentran
en el Anexo 15.2 correspondiente al protocolo de comunicación. En los puertos en los que
se encuentre un equipo conectado, se recibirá una trama de la siguiente estructura:
Primer byte = 0x23 (Inicio de trama)
Segundo byte = 0x07 (Operación de enviar información del firmware)
Undécimo byte = 0x7A (Final de trama)
Por lo tanto, en todos los puertos que se cumplan esas condiciones se guardará en
un objeto instanciado de la clase Dictionary <TKey, TValue>[5], correspondiente a una
lista de claves y valores. En la clave se guardará el nombre del equipo, obtenido en los
bytes del 3 al 8 de la trama recibida. El nombre del equipo cumplirá la estructura “AMIC7
más un número, por ejemplo, AMIC7 25. En el valor se guardará el puerto en el que se ha
localizado este equipo. Guardarlo en un objeto de la clase Dictionary ayuda a simplificar el
código ya que, en una lista obtendremos el nombre del equipo con el correspondiente
puerto al que está conectado. Sin la necesidad de crear una clase exclusiva para esta
función.
Interfaz de usuario para equipo de medida… 5. Comunicación PC-Equipo
13
Una vez comprobados los equipos que se encuentran conectados a los puertos de
comunicación del PC se pueden dar 3 casos:
Que no haya ningún equipo conectado.
Que únicamente haya conectado un solo equipo. Por tanto, se establecerá la
comunicación.
Que hayan conectados más de un equipo. Se deberá preguntar al usuario a que
equipo se quiere conectar. Para ello creo una ventana, como se muestra en la
Figura 2, en la que se muestra los nombres de los equipos conectados. El usuario
deberá seleccionar con cual desea establecer la comunicación.
Figura 2: Selección de equipo si hay más de uno conectado
El código fuente correspondiente a esta ventana se puede consular en el Anexo
15.1.21 FormselDevice.
Para establecer la comunicación, ya sea en el segundo caso o en el tercero, he
creado función connect() en la clase ntDevice, a la cual se le pasa la clave del puerto en el
que está conectado el equipo con el que se desea establecer la comunicación. En la
propiedad PortName, correspondiente a la clase SerialPort, se establece el nombre del
puerto con el que se debe establecer la comunicación. El nombre corresponderá al valor
ligado a la clave, de la lista creada a la hora de analizar cuantos equipos habían conectados.
Establecida la comunicación entre el PC y el equipo, es necesario conocer en qué
estado se encuentra. Ya que puede estar en reposo, inicializando, llenando la celda de
solución de calibración o de agua para analizar. Para ello se le envía la trama que solicita el
estado. Esta trama, es de 4 bytes. El código de operación correspondiente para solicitar el
estado del equipo es 0x50. Enviada esta solicitud, se espera que el equipo devuelva la
información pertinente. Por tanto, he configurado un evento (serial_DataReceived,
pudiéndose consultar en el Anexo 15.1.24 ntDevice), que se ejecutará cuando se reciba
información proveniente del equipo. Todas las tramas recibidas tendrán como primer byte
(0x23) y el último (0x74). El segundo byte informará que tipo de información se está
recibiendo, cuando se reciba el estado del equipo, el byte de operación correspondiente es
el 0x05. El detalle de las tramas se puede consultar en el Anexo 15.2.
Interfaz de usuario para equipo de medida… 5. Comunicación PC-Equipo
14
Una vez recibida la información se deben actualizar las variables.
Durante la realización de este Trabajo de Fin de Grado, he comprendido lo
importante que es el conocer el estado del equipo en todo momento para realizar una
correcta sincronización. Por ejemplo, al ejecutar la aplicación si el equipo se encontraba
realizando la secuencia de inicialización. El software debía esperar a que finalizase,
teniendo en cuenta que si en la celda permanecían restos de alguna muestra al introducir
algún patrón de calibración u otra muestra se contaminaban.
También es importante que el usuario conozca en qué estado se encuentra su
equipo. Para ello he habilitado en el margen inferior, en la izquierda, una etiqueta en la
cual se mostrará en todo momento, que acción está llevando a cabo el equipo. Ya que en el
normal funcionamiento, el usuario escucharía las bombas actuar pero no tendría constancia
de que acción se está realizando. Para mostrar esta información se ha implementado una
etiqueta, en un toolStrip[6].
Interfaz de usuario para equipo de medida… 6. Configuración sonda y solución
15
6 Configuración sonda y solución de calibración
En este capítulo se tratarán como se definen las ventanas en las que se configurará
las características de la sonda y la solución de calibración. Estas ventanas se implementan
siguiendo las especificaciones impuestas por el cliente, que para el caso de la sonda
consisten en que el usuario debe de introducir el nombre de sonda, que iones mide y si la
sonda cuenta con sensor de pH y temperatura. Respecto a la solución el usuario debe
introducir el nombre de ésta, que iones la componen, la concentración de estos. Para ello,
se han implementado dos Forms, al igual que en el caso de la ventana principal, comentada
en el capítulo anterior. Se utiliza esta clase debido a que es la que nos proporciona el
entorno de programación, que presenta infinidad de facilidades. Ya que en el margen
izquierdo se encuentran todos los elementos que se pueden utilizar para construir las
ventanas (botones, cuadros de texto, CheckBox, etiquetas, etc). Para introducirlos
únicamente hay que arrastrarlos.
Como trabajo previo a la implementación de estas dos ventanas, se han configurado
los iones que puede medir el equipo a día de hoy. Para ello se ha creado una List[7] de
objetos llamada Disponibles. Esta lista contendrá objetos de la clase DisponiblesClass.
Para cada ion se instanciará un objeto de dicha clase. Esta clase contiene toda la
información referente a los iones, el símbolo de la tabla periódica, el nombre del ion.
También contendrá la masa atómica. Esto es necesario para poder presentar los valores de
concentración en mg/l y mmol/l.
Configurada la lista y la clase que contendrá la información, se instancia un objeto
para cada ion y se introduce en la lista. Esto se implementa al inicio de la ejecución del
programa ya que corresponde a una inicialización.
6.1 Configuración sonda
El siguiente paso consiste en implementar la ventana en la que el usuario configure
la sonda. Esta configuración se basa en indicar el nombre la sonda, número de iones, cuales
son estos iones, en que canal están conectados los electrodos e indicar si la sonda cuenta
con sensor de temperatura.
Al igual que en la ventana principal, se crea una instancia de la clase Form. En ella
se configura un cuadro de texto (textBox), donde el usuario introducirá el nombre de su
sonda. Para configurar si la sonda contiene sensor de temperatura y de pH, se han
habilitado dos checkBox, que el usuario deberá de marcar en el caso de poseer en su sonda
alguno de estos sensores.
Respecto a los iones, en primer lugar se ha configurado un ComboBox, es decir, un
desplegable que mostrará valores del 1 al 7, donde el usuario seleccionará el número de
iones de los cuales se va a medir la concentración. Además se configuran otros 7
ComboBox, uno correspondiente a cada canal de la sonda. En cada uno de ellos se
mostrarán todos los iones que se han introducido en la lista (Disponibles) anteriormente. A
partir del valor introducido correspondiente al número de iones, se ocultarán los
ComboBox que no sean necesarios.
Interfaz de usuario para equipo de medida… 6. Configuración sonda y solución
16
Para facilitar al usuario la operación de configurar la sonda, se inicializa en los
ComboBox la configuración habitual, correspondiente a 7 iones, conteniendo además
sensores de temperatura y pH, y la siguiente distribución de iones por canal:
Canal 1: Calcio
Canal 2: Cloruro
Canal 3: Potasio
Canal 4: Sodio
Canal 5: Amonio
Canal 6: Nitrato
Canal 7: Magnesio
Gracias a esta inicialización, si el usuario cuenta con la configuración de la sonda
habitual, únicamente tendrá que introducir el nombre a la sonda.
Por último se añaden dos botones, uno para guardar la configuración de la sonda y
otro para cancelar. En la Figura 3 se puede apreciar la distribución de los elementos
explicados anteriormente.
El código fuente a la ventana donde se configura la sonda se puede consultar en el
Anexo 15.1.4 FormAddSonda. Por otro lado, la clase donde se alojará la información
configurada se puede consultar el en Anexo 15.1.5 Sonda.
Figura 3: Ventana configuración sonda
Interfaz de usuario para equipo de medida… 6. Configuración sonda y solución
17
6.2 Configuración solución de calibración
Al igual que para la configuración de la Sonda, para la Solución de calibración se
crea otra ventana.
A la hora de configurar la Solución, el usuario debe de introducir el nombre de ésta,
que iones la componen, la concentración y las unidades de los dos patrones.
Para poder configurar lo comentado en el párrafo anterior, se ha habilitado un
TextBox para introducir el nombre de la Solución. Para fijar las unidades, se ha creado un
ComboBox, en el cual se muestra mg/l y mmol/l. Para introducir los iones con la
correspondiente concentración de los dos patrones, de forma análoga a la ventana de
configuración de la sonda, se añade un desplegable en el cual se mostrarán todos los iones
disponibles. Una vez seleccionado el ion, el usuario tendrá que introducir en dos cuadros
de texto la concentración de los dos patrones. Una vez hecho esto, el usuario deberá
presionar un botón para añadir la información del ion a la solución. Al presionar el botón
para añadir el ion, previamente a ser introducido, se realizan una serie de comprobaciones
que impiden que el usuario pueda introducir valores erróneos. Estas comprobaciones se
basan en verificar si ya hay 7 iones introducidos a la hora de presionar el botón. De ser así
mostrará un mensaje indicando que en una solución de calibración no pueden haber más de
7 iones. La segunda comprobación consiste en asegurarse de que un ion no ha sido
introducido dos veces. Por tanto, si el usuario intenta introducir un ion que previamente ha
sido insertado se le avisará.
Si después de realizar las comprobaciones, todo es correcto se guardará la
información de los patrones introducidos para dicho ion. Para ello se ha creado una clase
llamada ConcentracionesClass(Anexo 15.1.7).
Por tanto, para cada ion que se introduzca en la solución, se instanciará un objeto de
la clase anterior. De forma análoga que cuando se han configurado todos los iones que
puede medir el equipo, se ha creado una lista de objetos de la clase ConcentracionesClass
(Anexo 15.1.7).
Todos los iones introducidos se mostraran en cuadro de texto (Iones añadidos en la
solución) que se aprecia en la Figura 4. Este cuadro de texto ha sido configurado como
solo lectura, para que el usuario no lo pueda modificar.
Finalmente se han habilitado dos botones, uno para guardar la solución y el otro
para cancelar, que cerrará la ventana sin tener en cuenta la información introducida.
Interfaz de usuario para equipo de medida… 6. Configuración sonda y solución
18
En la Figura 4 se muestra la ventana correspondiente a la configuración de la
solución.
Figura 4: Ventana configuración solución de calibración
El código fuente correspondiente a la ventana anterior se puede consultar en el
Anexo 15.1.6 FormAddSolution.
6.3 Guardar en memoria no volátil configuración sonda y solución
El guardar la configuración de la sonda y la solución en la memoria no volátil del
equipo no se barajó a la hora de fijar las especificaciones de la aplicación. Pero durante la
programación, se contempló como una muy buena opción, ya que otorgaría a la aplicación
un valor añadido. El hecho de no guardar en el PC la configuración de la sonda y hacerlo
en la memoria no volátil del equipo presenta una serie de ventajas.
La primera, es que en el caso de tener guardada esta configuración en el PC, si este
presenta algún problema técnico, teniendo que sustituirlo o formatearlo, esta configuración
se perdería y el usuario debería de introducir la configuración otra vez. La segunda ventaja,
consiste en que el servicio técnico de la empresa, previamente a enviar el equipo realiza
una serie de pruebas para comprobar que su funcionamiento sea el correcto. Al realizar
estas pruebas se introduciría la configuración de la sonda y la solución. Al tener la
configuración guardada en la memoria no volátil, cuando el usuario reciba el equipo no
tendría que realizar la configuración, lo que simplificaría su utilización.
Interfaz de usuario para equipo de medida… 6. Configuración sonda y solución
19
Al presionar el botón de guardar en la ventana de configuración de la sonda, será
cuando se realice la operación de guardar la configuración en la memoria no volátil del
equipo. Previamente se realizarán las comprobaciones de que todo ha sido introducido
correctamente. En primer lugar, se comprobará de que se haya introducido un nombre a la
sonda, de no ser así se le indicará al usuario. De estar el nombre introducido, este debe
contener 10 caracteres como máximo. Si el nombre introducido contiene más de 10
caracteres se deberá cambiar.
Si todo es correcto se creará un array con la información de la sonda, con el cual se
realizarán 2 acciones.
En primer lugar, se instancia un objeto de la clase sonda (Anexo 15.1.5). Que
contendrá toda la información comentada anteriormente. Mediante este objeto se conocerá
toda la información referente a la sonda a la hora de realizar las calibraciones y las
medidas.
En segundo lugar, se envía este array al equipo, para guardarlo en la memoria no
volátil. Para ello se ha creado una función GuardaNVolatil() Anexo 15.1.24 ntDevice, la
cual únicamente escribirá la trama en el puerto en el que esté conectado el equipo. La
estructura de la trama se puede consultar en el Anexo 15.2.
Como en un principio no estaba contemplado guardar en la memoria no volátil del
equipo estas configuraciones, se deberán realizar modificaciones en el firmware.
Una vez disponible la información en el micro. Se deben estudiar las posibilidades
que este presenta para guardar en memoria no volátil. Para ello se consultó el Data Sheet
del micro[8]. A simple inspección se observa que el PIC presenta dos opciones de memoria
no volátil. Por un lado una EEPROM y por otro la Flash. Al estudiar los capítulos
correspondientes en el Data Sheet, en particular en el apartado 7.7 (Using the Data
EEPROM) del capítulo de la EEPROM, se indica que variables que no sean modificadas
frecuentemente se deben de guardar en la memoria Flash. Siendo este nuestro caso, se
procedió a realizar el guardado de la información en esta memoria.
Para hacer uso de la memoria Flash, se consultó el capítulo 6.0 Flash Program
Memory del Data Sheet comentado anteriormente. En él se explica que la escritura se
realiza en bloques de 32 bytes y el borrado en bloques de 64 bytes. En esta guía, se indica
que se utiliza un registro intermedio (TABLAT) de 8 bits, para mover datos entre en la
memoria RAM y la Flash. Además se muestran las instrucciones utilizadas para leer y
escribir en esta memoria, así como un ejemplo de escritura, lectura y borrado.
Siguiendo los ejemplos proporcionados por el fabricante he realizado el código
correspondiente a la escritura. Se puede consultar en el Anexo 15.1.25. Para ello se ha
creado una función en la cual se realiza un borrado de un bloque de 60 bytes de la
memoria. Posteriormente se introduce en el registro TABLAT, la información que se desea
guardar y se realiza el guardado. La instrucción TBLWTPREINC, no está implementada
en C, por lo que se realiza una fracción de código en assembler. Para introducir el
fragmento en assembler, se consultó el capítulo 2.8 Languaje Extensions del MPLAB C18
Compiler User’s Guide[9].
Interfaz de usuario para equipo de medida… 6. Configuración sonda y solución
20
Por tanto, teniendo guardada la configuración de la sonda en la memoria no volátil
del PIC, al iniciar la interfaz se debe comprobar si existe alguna configuración guardada.
Para ello, una vez establecida la comunicación con el equipo, se comprueba que el micro
haya finalizado la secuencia de inicio que se basa en activar la bomba de vaciado, por si
queda algún tipo líquido en la celda, ya sea de solución de calibración, agua o alguna
muestra. Si este se encuentra realizando dicha secuencia, se le pedirá al usuario que espere
a que finalice mediante el siguiente mensaje:
Figura 5: Mensaje espera secuencia de inicio
Una vez la secuencia de inicio haya finalizado, se enviará la trama solicitando la
información guardada en el micro correspondiente a la sonda. Se recibirá un array de bytes.
Si el primer byte recibido es 0xff, quiere decir que no se ha guardado previamente, ya que
en las posiciones de memoria Flash se encuentran a 0xff por defecto. De no ser así, quiere
decir que disponemos de alguna configuración guardada. Por tanto, del array de bytes
recibidos se extraerá la información y se le preguntará al usuario si la quiere cargar. En
caso afirmativo, se instanciará un objeto de la clase sonda (Anexo 15.1.5).
En el caso de la configuración de la solución de calibración se sigue un proceso
análogo. Al presionar el botón de guardar, en primer lugar se comprueba que todo sea
correcto. Es decir, que la solución cuente con un nombre y que se haya introducido los
iones con las concentraciones correspondientes para los dos patrones. Comprobados estos
factores, se crea una instancia de la clase solucion(Anexo 15.1.7).
Posteriormente a obtener la sonda guardada en la memoria no volátil, se solicitará
la configuración de la solución. De encontrarse guardada, se le preguntará al usuario si
desea cargarla.
Interfaz de usuario para equipo de medida… 6. Configuración sonda y solución
21
6.4 Visualización sonda y solución configurada
Al guardar en la memoria no volátil del equipo las configuraciones de la sonda y la
solución, surge la necesidad de mostrar estas configuraciones. Debido a que el usuario las
pudo haber configurado con mucha anterioridad y no recuerde que tiene configurado.
Para ello se crea una ventana, utilizando como en los casos anteriores la clase Form.
En este caso la he nombrado FormSeeProbeSolution(Anexo 15.1.8).
Esta ventana se basa en dos dataGridView[10]. Como su propio nombre indica, se
trata de unas cuadriculas en la cuales se añaden filas y columnas para mostrar información.
En el caso de la sonda, además de la cuadricula, se han habilitado dos
checkBox[11]. Estos mostrarán si la sonda configurada contiene sensor de temperatura y
de pH. En estos checkBox la propiedad “Enabled” se establece como false. Con esta
configuración no responderá a la iteración del usuario, o lo que es lo mismo, si el usuario
clica no podrá seleccionarlo o deseleccionar. Posteriormente a partir de la información del
objeto instanciado de la clase sonda(Anexo 15.1.5), se crearán en la cuadricula dos
columnas. En la primera se indicará en canal (1,2,..7), y en la segunda columna el ion
asociado a cada canal. Por último, se ha configurado una etiqueta en la cual se mostrará la
hora y el día en el que se configuro la sonda.
En el caso de la solución, la cuadricula contendrá 3 columnas. En la primera se indicará el
ion configurado, y en las dos siguientes la concentración de los dos patrones (P1 y P2). Del
mismo modo que en la sonda, se ha configurado una etiqueta para mostrar la hora y la
fecha en la que fue configurada. La forma final de esta ventana se puede apreciar en la
Figura 6.
Figura 6: Ventana visualización sonda y solución
Interfaz de usuario para equipo de medida... 7. Calibración del equipo
22
7 Calibración del equipo
En este capítulo se explica el proceso de calibración del equipo: la configuración de
la comunicación del PC con el equipo para activar las bombas correspondientes y recibir la
información necesaria procedente del equipo. Una vez recibida la información, ésta se
tratará para conseguir los parámetros necesarios para realizar las medidas. En este proceso
también se incluye una especificación del cliente, que consiste en mostrar al usuario los
resultados de dicha calibración. Además, se ha insistido en mostrar de una forma sencilla
para el usuario si la calibración ha sido correcta o no, mediante una pequeña imagen verde
si es correcta o una cruz roja de no serlo.
7.1 Actuación bombas calibración
Para realizar la calibración del equipo se deben hacer llegar los patrones de
calibración a la celda donde se encuentra la sonda. Estos patrones se hallan en dos
recipientes dentro del armario del equipo. Por lo que se utilizan dos bombas para hacerlos
llegar a la celda. El equipo cuenta también con una tercera bomba para vaciar la celda, que
harán llegar el fluido de la celda a un recipiente, para ser desechado. También cuenta con
una bomba que introduce agua en la celda para limpiar los posibles restos que puedan
quedar de algún líquido.
Para la implementación de la aplicación cuento con un prototipo del equipo, el cual
no dispone de bombas, pero se aprecia si éstas están actuando mediante LED’s.
El proceso de calibración consiste en la siguiente secuencia:
1. Llenar de agua
2. Llenar de Patrón 1 de calibración
3. Llenar de Patrón 1 de calibración
4. Medir Patrón 1 de calibración
5. Llenar de Patrón 2 de calibración
6. Llenar de Patrón 2 de calibración
Después de cada acción enumerada anteriormente se producirá el vaciado de la
celda. Previamente a llenar de patrón 1 la celda, se realiza un llenado con agua. Esto se
debe a que el patrón 1 de calibración es de una concentración muy baja, por lo que si
anteriormente se ha realizado una medida de una muestra con la concentración alta de
algún ion, si quedasen restos podría dar lugar a una calibración errónea. Por tanto, para una
mayor seguridad de la calibración, previamente a realizar la medida de éste patrón, se llena
2 veces. Siendo el primer llenado de limpieza. Como el patrón 2 de calibración es de una
concentración más alta, no es necesario llenar de agua, por lo que con dos llenados de
patrón 2 es suficiente para conseguir una correcta calibración.
Interfaz de usuario para equipo de medida... 7. Calibración del equipo
23
Para conseguir realizar la secuencia mencionada anteriormente, se ha optado por
crear una operacionClass (Anexo 15.1.24), en la cual se han implementado las variables
necesarias para alojar la información correspondiente a que operación se quiere realizar,
bomba que se tiene que activar, y offset. El tiempo de actuación será el mismo para todas
las bombas (fijado en el firmware), pero como la distancia que debe recorrer las muestras
hasta llegar a la celda es mayor que la de los patrones de calibración (que se encuentran en
el propio armario) se deben configurar offsets.
Como en otros capítulos, se ha implementado una lista de objetos de la clase
operación. Realizarlo de esta forma permite ordenar los objetos de una forma sencilla.
Cada vez que se reciba la trama correspondiente a que el equipo se encuentra en reposo, se
realizará la operación que se encuentre en la primera posición, una vez realizada se
eliminará de la lista.
Se ha configurado un timer (timerStartOper) para comprobar que operación se debe
realizar. En la función que sirve al timer, previamente a realizar ninguna operación, se
comprueba que el equipo se encuentre en reposo o lleno. De no ser así significaría que se
encuentra realizando alguna operación.
Por tanto, si el equipo se encuentra en reposo, se debe de crear y enviar la trama
que solicite al equipo la realización de la operación deseada. Esto se realiza en la función
doOperacion(se puede consultar en el Anexo 15.1.24).
Cada vez que el equipo empieza a realizar una operación envía el estado al PC. Lo
cual es importante para la sincronización, como comenté en el capítulo 4. En este capítulo
se debe ampliar la función que sirve al evento de recepción de datos por el puerto serie. En
el capítulo 4, se implementó está función y realizaba las acciones pertinentes a recibir el
estado del equipo. Al calibrar se recibe una trama totalmente distinta, en este caso se recibe
la información correspondiente a una lectura de la sonda, o lo que es lo mismo, el valor
correspondiente en mV de la concentración de los 7 canales y temperatura. Como esta
función corresponde al código de la librería que contiene las funciones que interactúan con
el equipo, surge la necesidad de implementar un evento, que nos indique en el código
correspondiente a la aplicación que se ha recibido la información de una lectura [12].
En la función que sirve al evento mencionado anteriormente, se instancia un objeto
de la clase PuntoClass(Anexo 15.1.18). En los objetos instanciados de esta clase se alojará
la información proporcionada por el equipo a la hora de realizar una medida, ya sea de un
patrón de solución o muestra. Esta información corresponde al valor en mV
correspondiente a la concentración obtenido en cada canal, la temperatura y la hora en la
que se ha obtenido. En el caso de calibración se crean dos listas de objetos de la clase
PuntoClass(Anexo 15.1.18), una para medidas del patrón 1 y la otra para el patrón 2
(mVP1 y mVP2).
En la lista de objetos donde se configuran las operaciones que debe realizar el
equipo correspondientes al proceso de calibración, se añade una operación (CALCCALI),
que no enviará ninguna trama al equipo pero indicará a la aplicación que ya se han
realizado todas las operaciones necesarias, y que debe de realizar el tratamiento de los
datos recibidos para obtener los parámetros de calibración. Para ello se ha implementado
una nueva clase Parametros(Anexo 15.1.16). Donde se calculará la pendiente y a la
intersección de la ecuación de la recta para cada ion.
Interfaz de usuario para equipo de medida... 7. Calibración del equipo
24
A partir de la configuración de la sonda se obtiene que ion se está midiendo en cada
canal, en la configuración de la solución se obtiene la concentración correspondiente para
cada ion en cada uno de los dos patrones y en los dos objetos instanciados de la clase
PuntoClass(Anexo 15.1.18) se obtiene el valor de tensión correspondiente a la
concentración medida de cada ion en los dos patrones de calibración. Por tanto, se calcula
para cada ion los parámetros correspondientes a la pendiente y la intersección de la
ecuación de una recta.
7.2 Visualización resultados calibración
Como ya se comentó en la introducción de este capítulo, el cliente marca una
especificación vinculada a mostrar los resultados de la calibración al usuario. Ésta consiste
que para cada ion, existen unos rangos entre los cuales puede variar el parámetro
correspondiente a la pendiente para cada ion, que el usuario no tiene por qué conocer. Por
tanto, a la hora de mostrar los resultados correspondientes a la calibración se debe de
mostrar los parámetros obtenidos, y al lado de la pendiente se debe mostrar una imagen
(cruz roja o tick verde) que permita saber al usuario si el parámetro obtenido se encuentra
dentro del rango.
Para mostrar la información correspondiente, al igual que en el capítulo anterior,
donde se muestra la sonda y la solución configurada, se ha optado por una ventana
secundaria (Anexo 15.1.15 CalParam), la cual se basa en una cuadricula. La cuadricula
contará con 7 columnas (Ion, Pendiente, Imagen que indique si la pendiente es correcta,
Intersección, temperatura hora y fecha de calibración.
En la implementación de esta ventana, la primera acción que se realiza es consultar
en la configuración de la sonda si existe sensor de temperatura, de no ser así la columna de
temperatura se elimina. Seguidamente para cada ion configurado en la sonda, se carga toda
la información comentada anteriormente como se observa en la Figura 7, que se encuentra
guardada en el objeto instanciado de la Clase Parametros(Anexo 15.1.16) a la hora de
realizar los cálculos correspondientes a la calibración.
Figura 7: Ventana resultados calibración
Interfaz de usuario para equipo de medida... 7. Calibración del equipo
25
7.3 Calibración del pH
En el proceso de calibración comentado anteriormente se calibran los parámetros
para medir la concentración de cada uno de los iones pero quedan por obtener los
parámetros del pH. La calibración del pH no se realiza de manera simultánea a la del resto
de iones debido a que los patrones de calibración de éste se encuentran por separado. Por
tanto, cuando se quiera calibrar el pH se deben de sustituir los dos recipientes que
contienen los patrones de calibración por los del pH. La calibración del pH, a diferencia de
la de los iones que se debe de calibrar al menos una vez al día, con una calibración por
semana es suficiente.
Para realizar la calibración del pH, se ha habilitado un botón en el menú. Al
presionar este botón, se mostrará un mensaje indicándole al usuario que debe cambiar los
recipientes que contienen la solución de los iones por las del pH. Una vez se hayan
sustituido los recipientes, el usuario deberá de presionar el botón aceptar, dicho mensaje se
puede apreciar en la ilustración 7. Y de la misma forma que en el proceso de calibración de
los iones, se programan las acciones activar la bomba P1, P2 y realizar los cálculos
correspondientes. Para ello se ha implementado una nueva clase CalpH(Anexo 15.1.17).
Los cálculos correspondientes a la calibración del pH, como en el caso de los iones,
consiste en obtener la pendiente y la intersección de la ecuación de la recta que forman los
dos puntos correspondientes a cada uno de los patrones.
Figura 8: Mensaje calibración pH
Al finalizar la calibración del pH, mediante otro mensaje similar al de la Figura 8
se le recuerda al usuario que debe de volver a cambiar las soluciones de calibración. Hasta
que el usuario no pulse el botón aceptar, la ejecución del programa se detendrá a la espera
de que el usuario realice esta acción. Ya que si hubiese programada alguna calibración de
los electrodos que miden la concentración de los iones, al no disponer de la solución
correspondiente los parámetros de calibración serán erróneos.
En el caso de realizar una medida en un equipo que cuente con sensor de pH, y éste
no haya sido calibrado, la medida se realizará correctamente de todas formas, ya que se
ajustan a unos valores obtenidos experimentalmente que la experiencia de la empresa
indica que se cumple habitualmente. En el caso de que se haya calibrado la medida será
mucho más precisa, pero como el calibrado del pH se realiza de forma manual, surge la
posibilidad de que se realicen medidas sin que lo esté, y el cliente prefiere obtener un valor
aproximado que no obtener ningún valor.
Interfaz de usuario para equipo de medida... 7. Calibración del equipo
26
7.4 Guardar parámetros de calibración del pH
Como se ha comentado en el apartado anterior, no es necesario calibrar el pH
diariamente. Por tanto, al cerrar la aplicación se deberán de guardar en el PC y recuperarlos
al volver a ejecutar la aplicación.
Para realizar esto se ha optado por la serialización que consiste en convertir un
objeto en una secuencia de bytes para almacenar el objeto, trasmitirlo a una base de datos o
a un archivo [13].
Por tanto según la descripción de serialización, se va a convertir el objeto
instanciado de la clase CalpH, en una secuencia de bytes para transmitirlo a un archivo.
Siguiendo los ejemplos disponibles en la MSDN, el primer paso es crear el archivo
donde se va a guardar la secuencia de bytes correspondientes a nuestro objeto. Para ello se
implementa una rutina que se ejecutará al cerrar la aplicación. En ella se ejecutará el
proceso de crear el archivo, serializar el objeto e introducir el objeto serializado en el
objeto.
Para crear el archivo el primer paso es seleccionar la ruta donde poder encontrarlo.
Para seleccionar la ruta se ha utilizado la clase Environment.SpecialFolder, que especifica
las constantes enumeradas para recuperar rutas de acceso a directorios en carpetas
especiales del sistema [14].
En esa enumeración de rutas se ha seleccionado la correspondiente a
LocalApplicationData, como su propio nombre indica sirve para guardar datos de
aplicaciones locales. Esta ruta corresponde a una carpeta oculta que, en una configuración
standard, se ubicaría en la carpeta \AppData a partir del directorio de instalación.
Seleccionada la ruta donde se va a guardar el archivo, se necesita crear el archivo.
Para ello el entorno de programación contiene una clase, FileStream[15], que permite
crear, leer y escribir en un archivo.
Por tanto, cuando el archivo ya está creado, se debe de realizar el proceso de
serialización del objeto deseado, para ello se debe de realizar una llamada al método
Serialize(), de la clase IFormatter, indicándole la ruta del archivo donde se quiere guardar y
el objeto a serializar.
Una vez serializado el objeto y guardado el archivo, la aplicación se puede cerrar
sin problema, ya que podremos recuperar esa información. Al iniciar otra vez la aplicación,
se debe de realizar el proceso inverso, es decir, deserializar. Para ello se debe de indicar, la
ruta donde se encuentra el archivo que contiene el objeto serializado y su nombre.
Localizado el archivo, se debe de realizar una llamada al método Deserialize() de la clase
IFormatter.
Interfaz de usuario para equipo de medida... 8. Realización de Medidas…
27
8 Realización de medidas y visualización de resultados
Una vez se haya calibrado el equipo, se podrán realizar las medidas para diferentes
muestras según la configuración del equipo, el número de muestras puede variar entre 1 y 2
según las necesidades del cliente. En este capítulo se tratará la comunicación PC-Equipo
para realizar la secuencia de activación de bombas, la lectura de la concentración de los
iones configurados en la sonda y por último la monitorización de los resultados.
8.1 Actuación bombas
La actuación de las bombas se consigue de manera análoga que en el capítulo
anterior, correspondiente a la calibración.
Respecto a la actuación de las bombas, en todos los casos que se realice una
medida, se producirá la secuencia correspondiente para la medida de la muestra 1, que
consiste en llenar 3 tres veces del fluido correspondiente a la muestra 1 la celda donde se
encuentra la sonda. Los dos primeros llenados se realizan para limpiar la celda, así nos
aseguramos que a la hora de realizar la medida no quede en el interior de la celda ningún
resto de otro fluido. Una vez la celda se encuentre llena por tercera vez, se solicitará al
equipo que realice la lectura, a dicha operación el equipo responderá al PC con una trama
en la cual se encuentren los resultados de la medida.
En el caso de que el equipo se encuentre configurado para medir dos muestras, se
repetirá el mismo procedimiento para la muestra 2.
El código fuente correspondiente a estas secuencias se encuentra en la función
RealizaMues(), en el Anexo 15.1.3 formPrincipal.
Interfaz de usuario para equipo de medida... 8. Realización de Medidas…
28
8.2 Monitorización resultados de las medidas
Una vez la aplicación haya recibido la trama correspondiente a los resultados, se
obtendrá para cada ion el valor correspondiente de concentración a partir de los parámetros
de la calibración.
Según la especificación del cliente, la monitorización de los resultados se realizará
en la ventana principal de la interfaz, dividiendo ésta en una gráfica en la parte superior
donde se pueda apreciar la evolución temporal de la concentración de cada ion, en la parte
inferior una tabla donde se aprecien los resultados numéricos de la última medida
realizada, como se puede apreciar en la Figura 9.
Figura 9: Vista ventana principal interfaz
8.2.1 Tabla resultados última medida
Del mismo modo que al mostrar los resultados de la calibración, se crea una tabla,
proporcionada por el entorno de programación como dataGridView[10]. En ella se debe
mostrar, en primer lugar, si se trata de una lectura de la Muestra 1 o de la Muestra 2, en las
siguientes columnas se implementan los iones configurados en la sonda, donde se
introducirá el valor de concentración correspondiente. En el caso de que algún ion no
disponga de una correcta calibración, no se mostrará el valor obtenido, sino un guion. La
siguiente columna corresponde a las unidades de la concentración.
Interfaz de usuario para equipo de medida... 8. Realización de Medidas…
29
Como se comentó en el capítulo correspondiente a la configuración de la sonda,
según las necesidades del cliente, está puede contener sensor de pH y de temperatura. En el
caso de que dispongan se debe añadir una columna donde mostrar los valores obtenidos.
Como se puede apreciar en la Figura 10, la sonda con la que se ha realizado la interfaz
dispone de sensor de pH, pero no de temperatura.
Figura 10: Tabla resultados última medida
8.2.2 Gráfica resultados de medidas
En esta gráfica se deben mostrar los resultados de las medidas de forma que el
usuario pueda apreciar la evolución de la concentración de los diferentes iones. Para crear
esta gráfica se ha utilizado la clase chart[16], proporcionada por el entorno de
programación. En está gráfica los ejes corresponderán por un lado al valor de
concentración y por el otro a la fecha en la cual se tomó la medida.
Para facilitar la comprensión de dicha gráfica se han habilitado, un checkBox[11]
para cada ion configurado en la sonda y pH en el caso de disponer. El usuario podrá marcar
en el caso de que quiera monitorizar el ion en concreto o deseleccionar para ocultarlo,
como se aprecia en la Figura 11. Esto es de vital importancia en el caso de que la sonda
configurada cuente con los 7 iones y el equipo mida 2 muestras, ya que la gráfica queda
con un número excesivo de puntos que dificulta su comprensión.
Figura 11: Gráfica evolución de la concentración de diferentes muestras
El código fuente correspondiente a la configuración tanto de la gráfica, como la
leyenda se puede consular en la función InicializaLeyenda(int ion, int n, int M). La
introducción de los puntos en las gráficas se puede consultar en la función
ActualizaChart(). Estas dos funciones se encuentran en el Anexo 15.1.3 FormPrincipal.
Interfaz de usuario para equipo de medida... 9. Configuración del equipo
30
9 Configuración del equipo
Al implementar el código que activa las bombas en los dos capítulos anteriores, se
aprecia que el firmware espera recibir un valor correspondiente a un offset que permita
modificar el tiempo de actuación de éstas. Por defecto todas las bombas se mantienen
activas durante un tiempo fijado como constante en el firmware, pero por motivos como la
distancia de las muestras o la perdida de eficiencia de las bombas, se necesita aumentar el
tiempo de alguna bomba en particular.
Por otro lado, en el capítulo 7 correspondiente a las medidas, se explica que el
equipo puede estar configurado para medir 1 o 2 muestras. Lo que nos presenta otro
aspecto que debe configurar el usuario acerca de la configuración general del equipo.
Para configurar estos aspectos se ha creado una ventana, a la cual se accederá desde
el menú principal. Para realizar la configuración de los offsets, se han habilitado diferentes
desplegables, los cuales mostrarán valores del 0 al 15. Para configurar si el equipo realizará
medidas de 1 muestra o 2, se han habilitado 2 checkBox. El de la muestra 1 se ha
configurado como seleccionado y no modificable por el usuario, ya que todos los equipos
realizarán medidas con las muestra 1. El checkBox correspondiente a la muestra 2 es el que
permite la interacción con el usuario, pudiendo éste seleccionar si su equipo cuenta con la
segunda bomba, que le permita realizar medidas de 2 muestras distintas. La distribución de
esta ventana se puede observar en la Figura 12.
Está configuración es conveniente guardarla, para que el usuario no tenga que
configurarla cada vez que ejecute la interfaz. Por tanto, al igual que en los parámetros de la
calibración del pH en el capítulo 6, se realiza una serialización[13] del objeto de la clase
TiempoActClass (Anexo 15.1.10) que contiene la configuración.
El código fuente correspondiente a la a la configuración e inicialización de esta
ventana se puede consultar en el Anexo 15.1.9 FormConfTime.
Figura 12: Ventana configuración offsets bombas y número de muestra
Interfaz de usuario para equipo de medida... 10. Horario calibración y medidas
31
10 Horario calibración y medidas
Otra especificación marcada por el cliente consiste en mostrar un horario en el cual
el usuario pueda seleccionar cuando desea realizar calibraciones y medidas. Este horario
debe mostrar las 24 horas del día, pudiendo seleccionar a qué horas se desea realizar
alguna de las operaciones mencionadas anteriormente.
Para implementarlo se ha optado por crear una ventana secundaria, a la cual se
accederá desde el menú principal.
Siguiendo las especificaciones del cliente, en esta ventana se crean 24 etiquetas.
Donde en cada una de ella se mostrará una hora. Estás horas se dividirán en dos grupos
según el sistema horario de 12 horas, como se puede apreciar en la Figura 13.
Seguidamente de cada etiqueta se implementan dos checkBox, uno para calibrar y otro
para realizar una medida. Mediante estos checkBox el usuario podrá seleccionar cuando
desea realizar estas operaciones.
Como no es práctico que el usuario deba configurar cada vez que ejecuta la
interfaz, en que momento desea realizar estas operaciones se realiza una serialización[12]
del objeto de la clase HorasCal (Anexo 15.1.12).
Para realizar las calibraciones y medidas a las horas seleccionadas, se ha
configurado un timer(timerSetOp) que cada hora comprueba si es necesario, realizar
alguna operación. Esta comprobación se realiza mediante la función
CompruebaOperación() que se puede consultar en el Anexo 15.1.3 FormPrincipal.
Figura 13: Horario muestras y calibración
Interfaz de usuario para equipo de medida... 11. Alarmas
32
11 Alarmas
Para cada medida realizada, el cliente solicita que se compruebe que el valor
obtenido se encuentre dentro de unos rangos configurados por el cliente para cada ion. En
el caso de que el valor se encuentre fuera del rango para algún ion, se debe de notificar
poniendo en rojo el valor en cuestión de la tabla donde se muestran los resultados de la
medida en la ventana principal (configurada en el capítulo 7).
Para cumplir esta especificación se implementa una ventana (Alarmas, pudiéndose
consultar en el Anexo 15.1.13) en la cual se muestren los iones configurados en la sonda.
Para cada ion se configuran dos numericUpDown, uno para valor mínimo y otro para el
máximo. Se ha optado por configurar este tipo de herramienta debido que permite
introducir el valor numérico por teclado y además se puede reducir o incrementar mediante
dos flechas como se aprecia en la Figura 14. Al configurar el rango para cada ion, el
usuario deberá pulsar un botón para guardar la configuración. Al pulsar dicho botón se
instanciará un objeto de la clase SaveAlarmas (Anexo 15.1.14).
Por tanto, cada vez que se realice una medida, y por consiguiente se modifique la
tabla donde se muestren los resultados, se comprobará si el valor se encuentra dentro del
rango configurado en el objeto mencionado anteriormente para fijar en que color se debe
introducir.
Al igual que para otras configuraciones que debe realizar el usuario en capítulos
anteriores, se debe de guardar, ya que de no ser así el usuario debería de volver a
configurarlos cada vez que ejecute la interfaz. Por tanto, el objeto que contiene los rangos
será serializado en el momento de cerrar la aplicación y deserializado en el momento de
iniciar la ejecución.
Figura 14: Ventana configuración alarma
Interfaz de usuario para equipo de medida... 12. Juego de pruebas
33
12 Juego de pruebas
Durante la realización de este proyecto, cada vez que se implementaba alguna
funcionalidad nueva se realizaban pruebas para asegurar que el funcionamiento fuese el
correcto. En este capítulo se comprueba que todo funciona, teniendo especial cuidado en
que no se produzca ningún problema si el usuario intenta hacer un uso incorrecto de la
interfaz, como por ejemplo, intentar realizar una calibración o una muestra sin configurar
la sonda o la solución de calibración.
La primera prueba consiste en simular la primera vez que se ejecuta la interfaz.
Donde la configuración de la sonda y la solución no se encuentran configuradas ni en el Pc
ni en la memoria volátil del equipo. Por tanto, la aplicación nos lo comunicará y nos
preguntará si las queremos configurar en ese momento, como se puede apreciar en las
Figuras 15 y 16. Se cancelará cualquier configuración, por tanto, al no tener estas
configuraciones el equipo deberá de permanecer en reposo hasta que se realicen estas
configuraciones. Por otro lado, también se comprueba que se puedan abrir las diferentes
ventanas sin que se produzca ninguna excepción.
Figura 15: Aviso de sonda no configurada
Figura 16: Aviso de solución no configurada
Como era de esperar, el equipo se mantiene en reposo incluso configurando
acciones automáticas, tampoco permite realizar calibraciones y medidas con los botones,
ya que estos se encuentran deshabilitados. Por otro lado, al intentar abrir las diferentes
ventanas no se ha producido ninguna excepción.
Interfaz de usuario para equipo de medida... 12. Juego de pruebas
34
La siguiente prueba consiste en configurar la sonda y la solución de calibración.
Justamente después de configurarlas, el equipo debe realizar una calibración y una medida
de forma automática. Está prueba también sirve para comprobar que los valores obtenidos
en la medida se muestran correctamente, y si el valor obtenido para algún ion se encuentra
fuera del rango configurado por el usuario, lo señalizará. Como se aprecia en la Figura 17,
los valores se muestran correctamente, y los valores fuera de rango se muestran en rojo.
Durante la realización de la calibración y la medida, se verifica que no se permita al
usuario abrir la ventana para configurar la sonda y la solución. La cual únicamente permite
abrir si el equipo se encuentra en reposo.
En este capítulo no se comprueba los resultados obtenidos al realizar medidas,
puesto que se comprobó en el momento de implementar dicha operación. Esta prueba
consistió en contrastar los resultados midiendo una solución de concentración conocida.
Figura 17: Resultados medidas
Una vez se comprueba que el equipo realiza la calibración y la muestra teniendo la
sonda y la solución configurada, se modifican los valores de alarmas, offsets de las bombas
y horas a las que se desea realizar calibración y medidas. Para comprobar que al cerrar la
aplicación y volverla a abrir las recupera. Lo que también funciona.
Interfaz de usuario para equipo de medida... 12. Juego de pruebas
35
Para finalizar el juego de pruebas, se configura que el equipo realice una
calibración a las 18:00 horas y diferentes muestras a las 18:00, 19:00 y 20:00. Como se
aprecia en la Figura 18, las operaciones se han realizado en el momento esperado.
Figura 18: Gráfica resultados medidas juego de pruebas
Interfaz de usuario para equipo de medida... 13. Conclusiones
36
13 Resultados y conclusiones
Los resultados del proyecto se basan en la interfaz que se ha explicado en los
diferentes capítulos, la cual se encuentra funcionando correctamente. Por otro lado añadir
que la aplicación se ha realizado siguiendo las especificaciones del cliente, que ha
realizado un seguimiento durante la implementación y ha propuesto modificaciones sobre
la marcha, por lo que ha quedado muy satisfecho con el trabajo realizado.
Como conclusiones, se puede afirmar que en general se han cumplido los objetivos
fijados en el momento de iniciar este trabajo. Siendo estos en primer lugar, realizar un
proyecto en una empresa, previamente a finalizar la formación académica, para así ver el
funcionamiento de la empresa y como se trabaja a la hora de realizar un proyecto. Así
como realizar un proyecto que tenga una aplicación posterior, este fue uno de los motivos
por los que me decanté para hacer este trabajo.
Por otro lado, este trabajo me ha permitido apreciar la capacidad de adaptarme para
trabajar en otros lenguajes de programación a partir de los conocimientos adquiridos
durante este periodo de formación. Ya que previamente a la realización de este proyecto, el
lenguaje de programación C# era prácticamente desconocido para mí.
Durante la realización de este trabajo he apreciado una evolución referente a la
resolución de problemas. Al inicio cuando me encontraba con algún problema, la
localización de este como su resolución era más lenta, lo que me podía llevar días e incluso
semanas. En las últimas semanas de trabajo, la resolución de problemas no me llevaba más
de unas horas. Desde mi punto de vista, esta evolución se ha producido, en parte, por un
mayor conocimiento del lenguaje de programación y sobre todo por la adquisición de una
buena metodología a seguir para la resolución de problemas.
Respecto a los problemas, uno que me llevo gran parte del tiempo en solventar fue
la sincronización entre el equipo y el PC, del cual he aprendido de la gran importancia de
realizar una correcta sincronización entre dos equipos comunicados. Teniendo en cuenta
que en el momento que se produce un fallo en la sincronización la interfaz pierde toda su
utilidad.
Para finalizar las conclusiones, comentar que no se han podido realizar todos los
objetivos que se marcan en el capítulo 3. Por ejemplo, la realización de los archivos Excel
de los resultados de calibración y medidas, el programa bilingüe y el sistema de mails para
avisar al usuario de que operación está realizando su equipo. Debido a que algunos
contratiempos han llevado más tiempo de lo esperado. El no poder realizar alguno de estos
apartados debido al tiempo, era una posibilidad que se consideró a la hora de realizar el
anteproyecto, puesto que se valoró que era un proyecto ambicioso.
Interfaz de usuario para equipo de medida... 15. Anexos
37
14 Referencias
[1] C#. Wikipedia
<https://es.wikipedia.org/wiki/C_Sharp>
[2] MSDN.
<https://msdn.microsoft.com/es-es/default.aspx>
[3] Form Clase. MSDN
<https://msdn.microsoft.com/eses/library/system.windows.forms.form(v=vs.110).aspx>
[4] SerialPort. MSDN
<https://msdn.microsoft.com/es-es/library/system.io.ports.serialport(v=vs.110).aspx>
[5] Dictionary. MSDN
<https://msdn.microsoft.com/es-es/library/xfhwa508(v=vs.110).aspx>
[6] ToolStrip. MSDN
<https://msdn.microsoft.com/es-es/library/system.windows.forms.toolstrip(v=vs.110).aspx>
[7] List Clase. MSDN
<https://msdn.microsoft.com/es-es/library/6sh2ey19(v=vs.110).aspx>
[8] PIC18F2455/2550/4455/4550 Data Sheet. Microchip
<http://ww1.microchip.com/downloads/en/DeviceDoc/39632e.pdf>
[9] MPLAB C18 C Compiler User’s Guide
<http://ww1.microchip.com/downloads/en/DeviceDoc/51288c.pdf>
[10] DataGridView. MSDN
<https://msdn.microsoft.com/es-es/library/system.windows.forms.datagridview(v=vs.110).aspx>
[11] CheckBox. MSDN
<https://msdn.microsoft.com/es-es/library/system.windows.forms.checkbox(v=vs.110).aspx>
[12] Cómo: Implementar eventos de interfaz (Guía de programación de C#)
<https://msdn.microsoft.com/es-es/library/ak9w5846.aspx>
[13] Serialización (C# y Visual Basic). MSDN
<https://msdn.microsoft.com/es-es/library/ms233843.aspx>
Interfaz de usuario para equipo de medida... 15. Anexos
38
[14] Environment.SpecialFolder (Enumeración). MSDN
<https://msdn.microsoft.com/es- es/library/system.environment.specialfolder(v=vs.110).aspx >
[15] FileStream. MSDN
< https://msdn.microsoft.com/es-es/library/system.io.filestream(v=vs.110).aspx>
[16] Chart. MSDN
< https://msdn.microsoft.com/es-
es/library/system.windows.forms.datavisualization.charting.chart(v=vs.110).aspx>
Interfaz de usuario para equipo de medida... 15. Anexos
39
15 Anexos
Capítulo no publicado en la versión pública del documento siguiendo las instrucciones
del acuerdo de confidencialidad del Trabajo Final de Grado. Han sido eliminadas de la
versión íntegra del documento las partes del contenido de carácter confidencial.