Autor Tema: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)  (Leído 20277 veces)

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

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« en: 13 de Enero de 2009, 00:26:37 »
Primero que nada quiero agradecer a los foristas de TodoPic que con la exposición de algún tema o la respuesta a preguntas me han ayudado en muchos de mis proyectitos.
Lo que hago aquí es mostrar en un ejemplo el uso de NI-VISA para la comunicación usb utilizando LabWindows/CVI, ya que cuando yo tuve que hacerlo busque en infinidad de páginas y no podía encontrar un ejemplito que me ayudara, mucha teoría y nada de acción. (Por lo menos para LabWindows/CVI).  Virtual Instrument Software Architecture (VISA) es un standard para configurar, programar, y solucionar problemas de sistemas de instrumentación que comprenden GPIB, VXI, PXI, Serial, Ethernet, y/o interfaz de USB. VISA provee el  interfaz de programación entre el hardware y ambientes de desarrollo como LabVIEW, LabWindows/CVI, y Measurement Studio para Microsoft Visual Studio. Agregando la posibilidad de compartir un instrumento en red/acceso remoto con VISA-Server.
Las interfaces estándar en la industria aseguran que el sistema de test dure a lo largo del tiempo. Con estas tecnologías construidas aparte del bus de comunicación, puede programar su sistema con una API estándar independientemente del bus que use, da igual que sea GPIB, USB, serie, o Ethernet/LAN. Mientras no cambie la interfaz de programación del instrumento, el cambio entre un bus y otro no requiere modificar el código, o requiere hacerlo mínimamente, lo que ayuda a garantizar la larga duración del sistema.

En este ejemplo vamos a comunicar un PIC de la familia 18Fxx5x con la PC por medio de NI-VISA (El Driver los creamos con Driver Development Wizard que puede ser usado en Win Xp y Vista) usando transmisión Bulk, con ello pretendemos conseguir que enviemos comandos e información al PIC y éste nos conteste devolviéndonos lo que corresponda. Comandos y/o funciones:
  • Petición de lectura de un potenciómetro conectado al conversor A/D.
  • Un comando de conmutación del estado de un LED en nuestro Hardware.
  • Dos led’s que indican estado del dispositivo (conectados y reconocidos por el Windows del PC o viceversa)
Como el que hizo el maestro J1M en WinPicUsb, algo fácil de entender y como punto de partida.


Ejemplo completo (Esquemático, firmware, driver y software)


Para bajar NI-VISA full directamente desde NI

Tutorial para hacer el driver (Win Xp, Vista, Linux y Mac)

Ejemplos para LabView

Software (Con sources) hecho en Visual Studio 2003 .net y Measurement Studio 7.1, ya que tiene algunas diferencias con respecto a LabWindows/CVI.-

En C#

En VB

« Última modificación: 20 de Marzo de 2009, 15:28:40 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #1 en: 13 de Enero de 2009, 08:21:00 »
Magnífica información. Muchas gracias por el aporte, Suky.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #2 en: 13 de Enero de 2009, 09:31:23 »
Genial aplicación Suky, gracias por el aporte! :)

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #3 en: 14 de Enero de 2009, 00:41:23 »
 :-/ Me alaga que a estos genios les haya gustado mi ejemplo  :-)
No contesto mensajes privados, las consultas en el foro

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Measurement Studio,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #4 en: 15 de Enero de 2009, 00:36:59 »
Hola de nuevo!!!
Agregue al post original ejemplo hecho en C# y VB.
Saludos!
« Última modificación: 20 de Marzo de 2009, 15:27:56 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado WOOD_girl

  • PIC12
  • **
  • Mensajes: 56
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #5 en: 14 de Febrero de 2009, 21:19:28 »
hola suki, estoy intentando pasar una señal de 60Hz por medio del labview haciendo una adaptación de lo que hizo J1M en labview pero no he podido lograr como una sincronia, por ke la señal que se ve en el labview veo ke no toma  todas las muestras ke le envia el pic, eso parece, tu has logrado hacer algo de ese tipo, me serviria saberlo, bye, muy weno el post

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #6 en: 15 de Febrero de 2009, 20:37:04 »
He hecho algo parecido pero en LabWindows.
Desde el programita hecho en LabWindows solicito al PIC medida cada 5ms y ha funcionado correctamente, pero no manejo labView como para ayudarte.
No contesto mensajes privados, las consultas en el foro

Desconectado WOOD_girl

  • PIC12
  • **
  • Mensajes: 56
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #7 en: 15 de Febrero de 2009, 22:36:59 »
 :( ke mal, pero weno gracias de todos modos suki, un abrazo, bye

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #8 en: 18 de Marzo de 2009, 20:02:24 »
Tremendo aporte, me has salvado la vida jejeje!

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #9 en: 19 de Marzo de 2009, 17:26:50 »
Gracias de nuevo, llevo todo el día cacharreando gracias al ejemplo que has subido (CVi) mis nociones sobre este son muy escasas por no decir nulas, había hecho cosillas con Labview y tal, pero bueno poco a poco van saliendo.

Me gustaría hacer que los botones de acción sobre el led y la lectura de tensión no sean necesarios, es decir, que cada X tiempo se ejecuten los viRead y viWrite para poder capturar datos.

Supongo que habrá que hacer un bucle do while o algo similar pero no lo he conseguido hacer aun.

¿Alguna idea?

   

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #10 en: 19 de Marzo de 2009, 18:55:16 »
Bueno he conseguido algo un poco chapuza pero de momento me sirve.

Si no existiese google no se que haría! xD

Meto un Timer y en el evento EVENT_TIMER_TICK hago la medición de tensión.
Mi primera linea de codigo en el main es SuspendTimerCallbacks();
Y una vez que se pulsa Iniciar después de activar los paneles pongo ResumeTimerCallbacks(); 

lo que me gustaría ahora es conseguir que si no está conectado el dispositivo sigan suspendidos los callbacks del timer... ¿alguna idea? supongo que tendrá podría hacer una comparación del nombre que aparece en el dispositivo USB0::0x04D8::0x0BB0::NI-VISA-0::RAW con el que aparece si está desconectado ASRL1::INSTR, supongo que está en la variable status pero aun no lo he conseguido sacar... ire comunicando mis progresos.


Fdo: Aprenda cVI en dos dias xD

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #11 en: 20 de Marzo de 2009, 21:24:43 »
Con lo siguiente solo te limitas a buscar dispositivos USB. En el caso que halla un solo dispositivo USB y al no estar conectado status será menor a VI_SUCCESS. Entonces aquí podes decidir que hacer si el dispositivo no esta. Si hay mas de uno solo queda comparar si el string que identifica al dispositivo (por ejemplo: USB0::0x04D8::0x0BB0::NI-VISA-0::RAW)
Código: C
  1. status = viFindRsrc(rsrc, "USB?*", &fList, &numInstrs, desc);
  2.         if (status < VI_SUCCESS) {
  3.                 MessagePopup("NI-VISA","No hay dispositivo");
  4.                 viClose(rsrc);
  5.         }

Esto lo haría cada vez que se activa el callback del Timer. Y utilizaría alguna variable (conectado) para indicar que si, en el anterior callback timer no encontró dispositivo y se cerró sesión, en el actual al encontrar el dispositivo conectado vuelva a establecer sesión.
Ósea, es distinto a como pretendías hacerlo. El problema es que al desconectar el dispositivo no hay forma de saber si no es por poleo, en este caso cada cierto tiempo mediante el Timer.

Algo asi:

Código: C
  1. int CVICALLBACK Timer (int panel, int control, int event,
  2.                 void *callbackData, int eventData1, int eventData2)
  3. {
  4.         switch (event)
  5.         {
  6.                 case EVENT_TIMER_TICK:
  7.                         if(conectado==0){//Se desconecto anteriormente, verifica si se ha conectado.-
  8.                                 viOpenDefaultRM (&rsrc);
  9.                                 status = viFindRsrc(rsrc, "USB?*", &fList, &numInstrs, desc);
  10.                                 if (status < VI_SUCCESS)
  11.                                         MessagePopup("NI-VISA","No hay dispositivo");
  12.                                         viClose(rsrc);
  13.                                         conectado=0;
  14.                                 }
  15.                                 else{
  16.                                         viOpen (rsrc, desc, VI_NULL, 1, &instr);
  17.                                         conectado=1;
  18.                                         //realizo medici&#243;n.-
  19.                                 }
  20.                         }
  21.                         else{//Anteriormente dispositivo conectado, verifica si sigue conectado.-
  22.                                 status = viFindRsrc(rsrc, "USB?*", &fList, &numInstrs, desc);
  23.                                 if (status < VI_SUCCESS)
  24.                                         MessagePopup("NI-VISA","No hay dispositivo");
  25.                                         viClose(rsrc);
  26.                                         conectado=0;
  27.                                 }
  28.                                 else{
  29.                                         //Realizo medici&#243;n.-
  30.                                 }
  31.                         }
  32.         .
  33.         .
  34.         .


Bueno, espero que se entienda.  :mrgreen:
Saludos!
« Última modificación: 20 de Marzo de 2009, 21:28:23 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Akone

  • PIC10
  • *
  • Mensajes: 29
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #12 en: 22 de Abril de 2009, 12:49:03 »
bueno por fin tengo esto listo, he realizado gracias al ejemplo y adaptándolo un poco, una tarjeta de adquisición de datos con el PIC18F4550, la cual tiene 12 entradas analogicas, 8 entradas digitales y 8 salidas digitales, es un programa bastante rudimentario pero que cumple con su cometido, aunque aun le quedan muchos detalles por pulir.

Por ejemplo me gustaría poder ir guardando gráficas con valores tomados en unos intervalos o que el programa se ejecute automáticamente cuando esté el dispositivo conectado.

Esta noche si tengo tiempo subiré los archivos.

Me gustaría saber si hay alguna forma de pasar ese programa a labview, buscando por internet veo que hace falta crear una .dll y un .fp para despues con un programa adaptarlo a .vi pero no entiendo muy bien como hacerlo, tambien intenté usar el ejemplo de PicUsb de labview pero el ordenador se me reinicia cuando ejecuto el programa (es por los drivers que no consigo instalarlos bien, pero lo e intando mil veces y nada). Espero que alguien me pueda echar una mano.

Sin más, intentaré subir lo que he realizado lo más pronto posible

Desconectado carlos7890

  • PIC10
  • *
  • Mensajes: 28
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #13 en: 26 de Abril de 2009, 18:48:09 »
Suky:
Muchas gracias por tu aporte, ya que Labwindows me parece un muy buen programa, pero tiene muy poca bibliografía y menos en español.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
« Respuesta #14 en: 28 de Abril de 2009, 11:53:46 »
Es cierto, como cuesta encontrar información. A mi parecio un programa super intersante, pero hay que hacer todo al pulmón.  :?  :?
No contesto mensajes privados, las consultas en el foro


 

anything