TODOPIC

Lenguajes de programación para PC => C, C#, C++ => Mensaje iniciado por: Suky en 13 de Enero de 2009, 00:26:37

Título: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Suky 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:
Como el que hizo el maestro J1M en WinPicUsb, algo fácil de entender y como punto de partida.
(http://img26.imageshack.us/img26/9358/picusbvisala5.th.png) (http://img26.imageshack.us/my.php?image=picusbvisala5.png)

(http://img25.imageshack.us/img25/5012/picusbvisazo0.jpg)

Ejemplo completo (Esquemático, firmware, driver y software) (http://www.mediafire.com/file/i0qwowjzwwt/PicUsbVISA.rar)


Para bajar NI-VISA full directamente desde NI (http://digital.ni.com/softlib.nsf/webcategories/85256410006C055586256BBB002C0E91?opendocument&node=132060_US)

Tutorial para hacer el driver (Win Xp, Vista, Linux y Mac) (http://zone.ni.com/devzone/cda/tut/p/id/4478)

Ejemplos para LabView (http://www.mediafire.com/file/dihljtg5jlt/Ejemplos%20LabView%20Hechos%20por%20NI.rar)

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# (http://www.mediafire.com/file/lmgcy1gotyy/PicUsbVISA_C.rar)

En VB (http://www.mediafire.com/file/wyzbd3pfhyc/PicUsbVISA_VB.rar)

Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Nocturno en 13 de Enero de 2009, 08:21:00
Magnífica información. Muchas gracias por el aporte, Suky.
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: J1M en 13 de Enero de 2009, 09:31:23
Genial aplicación Suky, gracias por el aporte! :)
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Suky en 14 de Enero de 2009, 00:41:23
 :-/ Me alaga que a estos genios les haya gustado mi ejemplo  :-)
Título: Measurement Studio,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Suky en 15 de Enero de 2009, 00:36:59
Hola de nuevo!!!
Agregue al post original ejemplo hecho en C# y VB.
Saludos!
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: WOOD_girl 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
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Suky 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.
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: WOOD_girl en 15 de Febrero de 2009, 22:36:59
 :( ke mal, pero weno gracias de todos modos suki, un abrazo, bye
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Akone en 18 de Marzo de 2009, 20:02:24
Tremendo aporte, me has salvado la vida jejeje!
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Akone 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?

   
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Akone 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
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Suky 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!
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Akone 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
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: carlos7890 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.
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Suky 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.  :?  :?
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: marqueses en 13 de Noviembre de 2011, 18:25:01
Hola,

llevo un par de semanas intentando conseguir este mismo programa pero en Labview, utilizando NI VISA y la funcion VI write y VI read de labview, en concreto con el ejemplo de NI de USB BULK. No consigo recibir nada ni del pic al VI ni viceversa. Mi objetivo es realizar el mismo proyecto que Suky pero en lugar de usar Labwindows, usar Labview. Si alguien pudiera orientarme o tuviera algún proyecto realizado le agradecería que aportará documentación.

Gracias y saludos.
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Andres87ec en 03 de Diciembre de 2013, 06:38:30
Hola buen día a todos, veo que algunos dominan bastante Lab Windows CVI, estoy terminando una clase, y debemos presentar un proyecto, solo que el programa lo vimos en apenas 3 clases, vimos lo escencial y debemos desarrollar algo más.
Me pueden indicar donde conseguir ejemplos para basarme un poco?? alguien los tiene?

Agradezco por su respuesta, mi mail es andreslove105@hotmail.com

PD. es un proyecto sin comunicación USB, ni siquiera debemos traer señales de afuera, solo simular algo desde el software. Gracias.
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Suky en 03 de Diciembre de 2013, 16:20:34
Hola! Uff, desde el 2009 que no toco nada de LabWindows!  :mrgreen: Pero recuerdo que habia un par de ejemplos de simulación de generación de señales y visualización, no vienen con el instalador?


Saludos!
Título: Re: LabWindows/CVI,Comunicación USB con NI-VISA (Ejemplo)
Publicado por: Andres87ec en 04 de Diciembre de 2013, 07:12:21
Hola! Uff, desde el 2009 que no toco nada de LabWindows!  :mrgreen: Pero recuerdo que habia un par de ejemplos de simulación de generación de señales y visualización, no vienen con el instalador?


Saludos!

HOla pues hay un par d ellos, pero si alguien tiene alguno q m indiq seria mejor.... Ayudaaaa!!  :shock: