04-16-2013 02:10 PM - edited 04-16-2013 02:21 PM
Estoy comunicando un dispositivo USB usando VISA, usé como base el ejemplo Basic Serial Write and Read.vi, sin embargo tengo que estimar el tiempo de espera que varía según la cantidad de bytes que lea ¿hay alguna forma de poner un ciclo while que finalice cuando la comunicación serie terminó?
La idea es quitar la espera (sequence) y poner un ciclo que esté verificando alguna señal del puerto que indique cuando la comunicación terminó haciendo el proceso lo más rápido posible sin perder datos. Agrego el código que estoy empleando.
Gracias por la ayuda.
04-20-2013 04:07 PM
Buen día!
Una manera en la que podrías hacerlo es crear un ciclo que esté monitoreando constantemente (cada 10 ms por ejemplo) el número de bits que se encuentran presentes en el puerto: Si no hay bits disponibles sigues en el ciclo; cuando haya información disponible, sales del ciclo y haces la lectura.
Espero te sea de utilidad,
Saludos!
04-22-2013 11:05 AM
Alberto.
Gracias por la respuesta, la probaré quitando la espera que es lo que no deseo ya que tendría que estimar el tiempo y podría ser que tenga los datos antes de que termine la espera ¿sabes si se pueden ocupar alguna de las propiedades de comunicación serie como DTR o XON?
04-23-2013 09:59 AM
Que tal,
Esta link nos explica un poco acerca de la utilización del XON / XOFF para el control de flujo en una comunicación serial:
Como puedes ver, estas banderas sí nos servirían para establecer cuándo estar recibiendo y cuándo empezar una transmisión, sin embargo no creo que te puedan servir para el tipo de aplicación que quieres desarrollar. Aparte faltaría checar si el dispositivo serial que estás manejando soporta este tipo de control de flujo.
En cuanto a lo de quitar la temporización en el código que anexé, habría que probar que funcione aunque siempre es recomendable tener algún tipo de temporización para permitir que el procesador no se sature y pueda ejecutar otras tareas.
Saludos!