Autor Tema: DataLogger Visual Basic 2010  (Leído 28270 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
DataLogger Visual Basic 2010
« en: 08 de Junio de 2013, 13:10:09 »
Hola foreros,

Llevo unos días probando el Visual Basic 2010 y he decidido hacer un datalogger que sea configurable para poder adaptarlo a distintos datos de distintas aplicaciones y el resultado os lo muestro aquí, para que la gente que quiera aprender como registrar sus datos con Visual Basic tenga una base y la gente que necesita una aplicación como esta pueda utilizarla para registrar sus datos.

Aviso: Es una versión que he probado durante poco tiempo por lo que podría no ser robusta del todo. A demás a medida que haga mejoras o añada funciones intentaré publicarlas aquí si tengo tiempo.

Os adjunto el Instalador para poder usar el programa y el código fuente.

Bueno vamos a explicar un poco como funciona:

- Pantalla principal



En esta pantalla podemos ver (empezando por arriba a la izquierda):

FILE: De momento solo nos da la opción de salir (Exit)
SERIAL: Configuraciones del puerto serie - BaudRate y numero de puerto al que vamos a conectar.
CHART: Configuraciones del gráfico - Configuración de las series y tipo de gráfico que queremos ver.
SAMPLE TIME: En este desplegable podemos configurar el tiempo de adquisición del puerto serie.
CONNECT: Presionando este botón conectamos y desconectamos del puerto serie.

-Configuración Series:

En la parte derecha de la pantalla vemos 10 Series. Estas series son configurables desde el menu Chart --> Series. Al hacer click en Series nos aparece la siguiente ventana de configuración:



En esta pantalla de configuración podemos elegir el color de la serie (haciendo click sobre el color correspondiente), el nombre de la serie y si queremos habilitar esta serie o deshabilitarla.

- En la parte inferior tenemos información del puerto seleccionado y el baudRate.

- En la parte central es donde nos aparecerá la gráfica



- ZOOM: Si pulsamos sobre la gráfica y arrastramos el ratón sin soltar podemos hacer zoom en la parte de la gráfica que deseemos.





Al hacer zoom nos aparecerán barras de desplazamiento en la parte izquierda e inferior de la gráfica para poder navegar por ella.

En las mismas barras de desplazamiento nos aparece un botón con un circulo y un punto en el centro que nos permiten volver al zoom anterior.

TRAMA DE COMUNICACIONES

El DataLogger puede leer hasta 10 datos (10 series). Para que el DataLogger reconozca los datos que le enviamos desde nuestro microcontrolador PIC, ARM, ATMEL, ARDUINO o cualquier sistema que pueda comunicar con el PC por el puerto serie (también puede ser un USB con puerto virtual), tenemos que generar una trama de comunicaciones como la que sigue:

Dato1;Dato2;Dato3;Dato4;Dato5;Dato6;Dato7;Dato8;Dato9;Dato10;\r\n

Sencillo: Enviamos cada dato separado por un ";" y un salto de linea al final de la trama.

No hace falta enviar los 10 datos, podemos enviar menos siempre y cuando sigan las reglas de la trama. El Datalogger reconoce y muestra cada dato y los representa en la gráfica.


EJEMPLO

Os pongo un ejemplo de la versatilidad que le he querido dar.

He hecho una pequeña aplicación con un Arduino Mega y un sensor DHT22 (Temperatura y Humedad) con una trama de solo dos datos.



He deshabilitado todas las series menos dos y estas dos las he renombrado a Temperatura y Humedad



Y ya tengo una gráfica para representar los datos de mi aplicación.




FUTURO

En un futuro tengo previsto poder imprimir las gráficas en una impresora y poder guardar los datos en un archivo CSV para más tarde poder cargar este archivo en el programa y ver gráficas guardadas anteriormente (modo Offline podríamos llamarlo)

--------------------------------------------------------------------------------------------------

Bueno hasta aquí a llegado todo. Espero que os guste y si alguien le puede servir que pueda utilizarlo.

Cualquier idea o critica constructiva sera bien recibida.

Un saludo a todos!  ;-)

EDITO: No puedo adjuntar el programa ni el código fuente por el tamaño que ocupan, si alguien esta interesado lo puedo colgar en algún sitio que me digáis. Lo siento, no había contado con el tamaño...
BitPIC

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: DataLogger Visual Basic 2010
« Respuesta #1 en: 08 de Junio de 2013, 13:15:09 »
Os dejo aquí el instalador:

Instalador

Y aquí el código fuente:

Codigo

 :-/
BitPIC

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: DataLogger Visual Basic 2010
« Respuesta #2 en: 09 de Junio de 2013, 11:13:11 »
Muchas gracias bitpic por tu aporte  ((:-)) ((:-)).
saludos.
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: DataLogger Visual Basic 2010
« Respuesta #3 en: 07 de Enero de 2014, 07:45:31 »
No había visto este proyecto. Es una chulería.
Enhorabuena bitpic

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: DataLogger Visual Basic 2010
« Respuesta #4 en: 07 de Enero de 2014, 11:35:25 »
 ((:-)) ((:-))
Felicidades bitpic, me gusto mucho el proyecto, en particular la parte del zoom

 :-/
"Nada es imposible, no si puedes imaginarlo"

Desconectado nibblesys

  • PIC10
  • *
  • Mensajes: 1
Re: DataLogger Visual Basic 2010
« Respuesta #5 en: 18 de Febrero de 2014, 08:25:02 »
Os dejo aquí el instalador:

Instalador

Y aquí el código fuente:

Codigo

 :-/

Excelente trabajo !!!!
quisiera descargar el fuente pero no funciona el link.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: DataLogger Visual Basic 2010
« Respuesta #6 en: 22 de Febrero de 2014, 15:31:07 »

Excelente trabajo !!!!
quisiera descargar el fuente pero no funciona el link.

Perdon, llevo un tiempo desconectado del foro y no habia visto las respuestas. Gracias si os ha gustado, la verdad es que esta versión gratuita de visual studio va muy bien para nuestras pruebas.
En cuanto a lo del codigo nibblesys si lo necesitas dame unos días que tengo el pc en mal estado, en cuanto lo tenga operativo busco el código (si consigo recuperarlo) y miramos a ver como te lo puedo pasar.

Mientras tanto, si tienes alguna duda dimelo y intentamos solventarla.

Saludo.
BitPIC

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: DataLogger Visual Basic 2010
« Respuesta #7 en: 27 de Febrero de 2014, 17:09:42 »
Siento deciros que ya no tengo el programa :cry:  Si es que soy un desastre... cada vez que formateo pierdo algo   :? pero vamos a hacer una cosa que creo que puede ser mejor o al menos más instructivo.

Como he recibido algunos mails pidiendo info sobre como adquirir datos y mostrarlos en gráficas vamos a hacer una cosa, ponedme aquí vuestras dudas he intentaré hacer un manual paso a paso de como adquirir datos en el PC a través del puerto serie con Visual Basic y como mostrarlos numéricamente y en gráfica.

Haré solo lo básico para hacer estas dos cosas y a partir de hay el aspecto final y funciones adicionales es cuestión de dedicarle unas horas más.

En cuanto tenga un rato y me ponga con ello os dejo aquí el link para que podáis seguirlo.

Salud!
BitPIC

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: DataLogger Visual Basic 2010
« Respuesta #8 en: 27 de Febrero de 2014, 17:34:51 »
Yo tengo la primer duda! jeje

He leído que en .net la comunicacion serie se realiza en un thread distinto al de la ejecucion del programa (o algo así) y que por lo tanto, en el evento del componente serie debemos usar delegados para poder modificar controles del thread principal. Entendí bien?
Mi otra duda es, si armo una estructura de datos en el uC y la envío por el puerto serie, como la vuelvo a construir en el PC?
Otra consulta podría ser, si yo tengo una cadena de datos separados por "," y como final de cadena un CR (ASCII 13), como haría en VB o C# para leer una línea completa de datos y luego separarlos?

En esos temas es que estoy un poco parado en este momento...

Saludos y gracias de ante mano!
-
Leonardo Garberoglio

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: DataLogger Visual Basic 2010
« Respuesta #9 en: 27 de Febrero de 2014, 17:46:09 »
Yo tengo la primer duda! jeje

He leído que en .net la comunicacion serie se realiza en un thread distinto al de la ejecucion del programa (o algo así) y que por lo tanto, en el evento del componente serie debemos usar delegados para poder modificar controles del thread principal. Entendí bien?
Mi otra duda es, si armo una estructura de datos en el uC y la envío por el puerto serie, como la vuelvo a construir en el PC?
Otra consulta podría ser, si yo tengo una cadena de datos separados por "," y como final de cadena un CR (ASCII 13), como haría en VB o C# para leer una línea completa de datos y luego separarlos?

En esos temas es que estoy un poco parado en este momento...

Saludos y gracias de ante mano!


te respondo una:
en c# lees una cadena con SerialPort.ReadLine()

para separar los componentes de tu vector, tendrías que hacer un parseo buscando ',' y creando subcadenas para recuperar tus datos

"Nada es imposible, no si puedes imaginarlo"

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: DataLogger Visual Basic 2010
« Respuesta #10 en: 27 de Febrero de 2014, 18:01:42 »
Yo tengo la primer duda! jeje

He leído que en .net la comunicacion serie se realiza en un thread distinto al de la ejecucion del programa (o algo así) y que por lo tanto, en el evento del componente serie debemos usar delegados para poder modificar controles del thread principal. Entendí bien?

Sí. Es correcto. Necesitás hacer uso de "delegados" que son una especie de lo que en C/C++ serían callbacks.


Mi otra duda es, si armo una estructura de datos en el uC y la envío por el puerto serie, como la vuelvo a construir en el PC?
Otra consulta podría ser, si yo tengo una cadena de datos separados por "," y como final de cadena un CR (ASCII 13), como haría en VB o C# para leer una línea completa de datos y luego separarlos?

En VB .NET se leen mediante el mísmo método: SerialPort.ReadLine(). Lo ideal es enviar los datos en la menor cantidad de bytes. Si estás holgado de ancho de banda del puerto serie, podés recurrir a enviarlos en líneas de String y separados por comas los datos por ejemplo.
Para separarlos podés usar: http://msdn.microsoft.com/es-es/library/b873y76a%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2

Sino hay que ensuciarse las manos y empaquetar los datos binarios. Del lado de la PC desempaquetarlos y recuperar la info.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: DataLogger Visual Basic 2010
« Respuesta #11 en: 27 de Febrero de 2014, 19:16:53 »
Y otra duda, supongamos que voy por la simple y mando lineas enteras, entonces en la PC uso ReadLine. Que pasa si envío los datos más rápido de lo que los leo? se llena algún buffer?
y que pasa si envio los datos muy lento, tengo algún evento que indique "linea completa recivida"? para no quedarme haciendo polling...

saludos y gracias!
-
Leonardo Garberoglio

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: DataLogger Visual Basic 2010
« Respuesta #12 en: 27 de Febrero de 2014, 19:42:43 »
el ReadLine lee hasta que encuentra un salto de linea, entonces se quedaría esperando ahí

si utilizas el ReadExisting , lees lo que hay en el buffer en ese momento, si envías tus datos muy lento, con esta recibirías tramos de tu cadena, y tu tendrías que unirlos.

yo hice un tipo "osciloscopio" para ir graficando unos datos en tiempo real, como tenia que parsear y dibujar entre cada recepción, lo que me pasó al enviar muy rápido fue que en la gráfica veía un retraso en la señal, pero creo que esto era por el tiempo del dibujo, no creo que los datos se leyeran con retraso
"Nada es imposible, no si puedes imaginarlo"

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: DataLogger Visual Basic 2010
« Respuesta #13 en: 27 de Febrero de 2014, 19:56:00 »
Se va llenando el ReadBuffer a medida que ingresan los datos. Con la propiedad ReadBufferSize elegís el tamaño del buffer de entrada que te parece que vas a necesitar.

Hasta donde sé, no tenés ningún evento asociado a nueva línea. Lo que dispara el evento DataReceived() es que hay disponibles para leer al menos ReceivedBytesThreshold bytes en el ReadBuffer. Ese es el trigger. En cuanto alcanza ese valor de Threshold, se dispara el evento DataReceived().

Acá tenés un ejemplo:

http://code.msdn.microsoft.com/windowsdesktop/SerialPort-Sample-in-VBNET-fb040fb2
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: DataLogger Visual Basic 2010
« Respuesta #14 en: 27 de Febrero de 2014, 20:25:50 »
Bueno, ya va quedando todo mas claro...

Faltaría ver un poco los delegados y estaríamos para avanzar...

Saludos y gracias!
-
Leonardo Garberoglio


 

anything