Discusiones sobre Productos NI

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

Leer carácter del puerto serie

Hola buenos días, tengo un problema que he solucionado de una manera que no es del todo apropiada y quería saber dónde está mi problema. Una una situación determinada tengo que leer un byte del puerto serie a través de los componentes VISA. El problema es que si todavía no ha llegado el dato al buffer el componente VISA no espera hasta recibirlo, me devuelve 0 en la salida count (evidentemente). Yo lo que necesito es conseguir que se detenga dentro del timeout hasta que llegue un byte que es lo que le solicito. No tengo activado ningún caracter de terminación.

 

Temporalmente lo que hago es comprobar cuándo hay un byte en el puerto para después leerlo.

 

Saludos.

 

P.D. No sé si con la propiedad End Mode for Reads con el valor Last Bit me funcionaría.

0 kudos
Mensaje 1 de 4
2.847 Vistas

Hola Raul

 

Lo que puedes hacer es utilizar un property node para leer la cantidad de bytes que hay en el puerto, la propiedad del visa se llama Bytes at Port, esto utilizalo en un ciclo, donde te quedas esperando mientras la cantidad de bytes en el puerto es = 0, cuando sea diferente de 0 , te sales del ciclo y ejecutas la funcion Read. Esta es la solucion que existe para lo que solicitas, que creo que es lo que estas haciendo.

 

Saludos

Jaime Peña
National Instruments Mexico
Ingeniería de Aplicaciones
www.ni.com/soporte
0 kudos
Mensaje 2 de 4
2.840 Vistas

Efectivamente es exactamente lo que hago, pero me parece extraño que no se pueda. Sí que podemos esperar un determinado carácter con TermChar, lo cual detendría el proceso sin sobrepasar el timeout definido hasta recibirlo dicho caracter. Pero claro, en el caso de no conocer exactamente qué nos tiene que llegar pues este mecanismo no funciona. Aún así parece feo esto del bucle de espera, para ser un componente VISA debería existir esta posibilidad.

 

Saludos.

0 kudos
Mensaje 3 de 4
2.836 Vistas

Hola Raul

 

Hay otra posibilidad y esto es utilizando eventos de Visa, poniendo un event structure y entonces el programa se detiene hasta que reciba un byte por el puerto serie, y en la parte de timeout del event structure dejalo vacio para que se queda esperando indefinidamente hasta que obtenga un evento. Esto te puede ayudar mas no si se afecte en el diseño de tu aplicacion.

 

 

Saludos

Jaime Peña
National Instruments Mexico
Ingeniería de Aplicaciones
www.ni.com/soporte
0 kudos
Mensaje 4 de 4
2.827 Vistas