Discusiones sobre Productos NI

cancelar
Mostrando los resultados de 
Buscar en lugar de 
Quiere decir: 

Leer datos de multimetro al puerto serie RS232 y graficarlos

¡Resuelto!
Ir a solución

Hola que tal, soy Alejandro, nuevo en el uso de Labview, estoy trabajando con una version 2012. Apreciaria algun ejemplo o guia ya que Necesito hacer lo siguiente-: Leer el puerto serie COM1 con los constantes datos (valores) que envia un multimetro a traves de RS232..Por ahora necesito obtener esos valores en terminos de corriente y tension y leugo graficarlos en lo posible.

Estoy usando un ordenador con puerto serie, ya que con adaptador serial-usb tuve muchos inconvenientes. He tratado con programas basicos y los ejemplos incluidos pero en bloque VISA read me arroja el error -1073807339

Snifeando el puerto pude determinar el sigueinte protocolo para el multimetro

Cada bloque de datos completo son 11 paquetes que incluyen:

- Data bit: 7

- Velocidad: 2400baudios

- stop bit:1

- start bit:0

- parity: odd

 

Habria luego que identificar el codigo de 7 bit de datos para determinar que valor en entero de 0 a 1 reprsenta.

Desde ya agradezco cualquier ayuda o ejemplo. Muchisimas gracias y saludos desde Argentina

 

0 kudos
Mensaje 1 de 9
6.854 Vistas

Hola, el error que recibes es simplemente un error de timeout: puedes averiguarlo pasando aquel código por ejemplo al Simple Error Handler.vi que encuentras en la paleta Dialog & User Interface.

Para tratar con instrumentos, te recomiendo antes que todo que encuentres la documentación del fabricante, ya que normalmente si un instrumento viene con la RS232 también debería estar descrito el protocolo por utilizar. El segundo paso es buscar si ya no existe alguna herramienta para comunicar con él, sea en la web del fabricante u en el Instrument Driver Network de NI: intenta buscar allí tu multímetro ya que hay muchos instrumentos que ya vienen con el driver.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 2 de 9
6.826 Vistas

muchas gracias por la respuesta, el vi de error hand lo que me daria es la fuente, el codigo de error etc correcto? , pues eso ya lo se. En el bloque VISA read se produce el time out error, intercale un property node con seteo de time out pero ya probe un monton de valores y sigo sin leer el puerto.

Los dos pasos que mencionas ya los habia realizado, el multimetro es UNI-T UT60C del cual no hay drivers para NI, el protocolo ya lo consegui, pero necesito acceder a leer los datos  enviados por el instrumento para obtener de alli el valor numerico.

Con respeto al bit count del bloque visa read, probe usando otro property node y tb ingresar manualmennte cantidad de bits. Sigue el error

El resuldo final deberia ser poder leer continuamente los datos que me va enviando el multimetro... procesar y trabajar con ellos sera el siguiente paso. Gracias

 

0 kudos
Mensaje 3 de 9
6.814 Vistas

Si los parámetros de comunicación están bien ajustados y sigues con el error de timeout puede haber un problema con el protocolo. Dependiendo en las caracteristicas del protocolo, que desconosco, puede haber un problema si no usas el correcto carácter de fin de mensaje (a veces se requiere el retorno de carro u el nueva línea u otro carácter particular: deberías encontrarlo en la documentación del protocolo.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 4 de 9
6.807 Vistas

Hola TOTEM723,

 

Es probable que el error que recibes no lo vas a arreglar cambiando el timeout o la cantidad de bytes a leer, este problema se debe a un problema de configuración y también tu hardware puede estar dañado. Puedes descargar una herramienta llamada Putty que lee continuamente todo lo que haya en el puerto para verificar que tu dispositivo funciona correctamente.

 

Hay otra herramienta que puedes usar y son los VISA test panels abriendo NI MAX -> Devices and interfaces, seleccionando tu puerto y abre esta opción que debería aparecer en la parte superior de la pantalla. Con esto también puedes verificar que haya una conexión establecida enviando un comando IDN?* o solo leyendo del puerto (generalmente estos dispositivos responderían con su número de identificación aunque no aplica para todos)

 

Hay un ejemplo en LabVIEW llamado "Continuous Serial Write and Read.vi" que también puedes encontrar útil aunque te recomiendo que primero verifiques con otra herramienta que el dispositivo está enviando algo y tu puedes leerlo.

0 kudos
Mensaje 5 de 9
6.803 Vistas

Encontre la documentacion del protocolo, y es probable que el tema pase por un fin de carrera o algo asi, adjunto el pdf con el protocolo donde dice el codigo para los que es carriage return y line feed Para saber como implementar. Supongo ademas que por defecto el LF en  serial config es OxA.

La comunacion del insturmento es correcta si ejecuto por ejemplo hercules setup para snifear el com1. la comunicacion se activa tildando la opcion del data terminal ready.

Muchas graciasserial adq ut60e diag.JPG

0 kudos
Mensaje 6 de 9
6.799 Vistas

Por lo que parece, el instrumento siempre va transmitiendo datos sin necesitar un pedido del PC y ademas temina con un CR+LF, por lo que tienes dos opciones:

  • Leer siempre 11 bytes
  • Leer hasta el LF

Despés de recibir un mensaje completo, deber decodificarlo de acuerdo a la documentación.

 

De todas maneras, te sugiero que pongas el timeout fuera del loop, ya que no hay necesidad de confirmarlo cada vez. Adicionalmente, no debes pasar el data bits al byte count del read: el data bits son los bits de dato en cada byte (en tu caso 7), mientras que debes indicar el número del bytes en el mensaje (aquí son 11 bytes). El punto rojo te informa que estas conectando datos de formato incorrecto.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 kudos
Mensaje 7 de 9
6.774 Vistas

TOTEM723 escribió:

Encontre la documentacion del protocolo, y es probable que el tema pase por un fin de carrera o algo asi, adjunto el pdf con el protocolo donde dice el codigo para los que es carriage return y line feed Para saber como implementar. Supongo ademas que por defecto el LF en  serial config es OxA.

La comunacion del insturmento es correcta si ejecuto por ejemplo hercules setup para snifear el com1. la comunicacion se activa tildando la opcion del data terminal ready.

Muchas graciasserial adq ut60e diag.JPG


Hola TOTEM723:

Según está descrito en el protocolo, cada dato viene en un paquete de 11 bytes, cuyo final es un CR y un LF.

Te sugiero que vayas leyendo datos de uno en uno hasta que te encuentres un CR y a continuación un LF. Después lees 11 bytes, que para que el paquete sea válido los dos últimos bytes tienen que ser CR y LF.

Esos 11 bytes los descompones en range, digit0, digit1... para saber el valor que te está proporcionando y la magnitud asociada (tensión, corriente, etc.)

 

Y así sucesivamente para cada dato de 11 bytes.

Saludos

_________________________________________
https://aulamoisan.uva.es

0 kudos
Mensaje 8 de 9
6.773 Vistas
Solución
Aceptado por el autor del tema TOTEM723

Bueno despues de un parate, no cuento con disponibilidad de tiempo para estas practicas, pude revisar las sugerencias. Arme segun el ayuda de NI la deteccion de multiples caracteres de terminacion para instrumentos. Por lo que deducia del protocolo, mi multimetro UT-60E usa CF y LF:

CF=0001101

LF= 0001010

Esos son los codes

Me ocurre lo sigueinte, despues del bloque read, el programa en el primer byte leido, arroja error -1073807254 error de paridad( sea cual fuese la opcion seleccionada.. odd. none etc), dps , observando el property node, se van descontando ls bytes a leer en el buffer y ya no aparece mas ese error.

Vale notar que empeiza a leer lo que haya (puede arrancar en el byte 8, byte 2, etc) supongo porque es lo que esta enviando el isntrumento en ese momento. El tema que al llegar al byte el indicador bytes at port queda ahi.. en 0.

Ademas, no me queda muy claro el manejo del scan for string.

En definitiva, la idea era monitorear todos loS bytes como van llegando para leugo efectuar algunos algoritmos de extraccion de los datos que necesito propiamente dicho.

Vuelvo a repetir, agardezco mucho su colaboracion, pero al ser novato en esto (no soy programador) analizare de proseguir o no. Adjunto imagenes y VI, saludos para todosVI_dic2016.jpgtrama_ut60e.png

 

0 kudos
Mensaje 9 de 9
6.728 Vistas