Discusiones sobre Productos NI

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

Prioridad VISA (Read Buffer)

Buenas he leido muchas cosas en este foro que me han permitido resolver mis dudas a cerca de la implementación de tareas en LabVIEW, ahora vengo a ustedes haber si pueden ayudarme nuevamente pues no he encontrado una solución a cierto inconveniente.

 

El tema va de esta manera, tengo un programa principal el cuál se encarga de seleccionar datos de un arreglo dependiendo del tiempo transcurrido y enviarlos a unas pantallas a través del VISA write. Pero al mismo tiempo necesito determinar si alguien ha presionado un botón (externo) para realizar variaciones al programa principal, el problema viene ahora pues estoy usando el VISA (Read Buffer) para adquirir datos externos y parece que mientras el sub-vi del VISA Read esté activo posee mayor prioridad que mi programa principal por lo cual mi programa principal no funciona, esperando un cambio externo. Cómo podría mejorar yo esta situación y que ambos corran independientes uno del otro o que funcione correctamente y el VISA Read sea una herramienta (Botón) en el programa principal sin interrumpir su desempeño.

 

En otras palabras el VISA Read funciona como un detector de que se ha presionado un botón (externo) creando una condición de cierto "TRUE" que utilizo para otos propósitos, pero utilizarlo como sub-vi supone que el programa solo espera esa interrupción y no realiza otras tareas.

 

P/S: ambos .vi separados funcionan a la perfección, el problema es al utilizar el de lectura como un sub-vi.

0 kudos
Mensaje 1 de 2
3.356 Vistas

Hola Daniel, aquí todo tiene que ver con el flujo de datos. Si tu SubVI para leer el puerto serial se encuentra dentro del ciclo principal el ciclo principal no puede ejecutar su ciclo nuevamente hasta que termine de ejecutarse el SubVI.

Para que trabaje en forma independiente lo puedes dejar como un ciclo while independiente y que este mande los datos al principal. Si quieres que sea tu misma estructura de eventos la que lo reciba puedes utilizar lo que son eventos.

Para estos generarías el evento en tu otro loop y solo lo tienes que registrar en tu estructura para manejarlo como un botón más.

Ahora si quieres manejar algo de prioridades lo que puedes hacer es mantenerlo en forma independiente y solo pasar los datos del segundo ciclo (serial) y los datos leerlos en el principal. Aquí la ventaja que tienes es que no te quita tiempo de ejecución del ciclo principal pero puedes perder o leer datos repetidos.

Para mas información de los eventos de usuario estas ligas te pueden ser de utilidad:

User Events - NI LabVIEW 8.6 Help

Creating User Events - NI LabVIEW 8.6 Help

Saludos

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 2 de 2
3.326 Vistas