Discusiones sobre Productos NI

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

Elementos antiguos en cola

Hola, buenos días!

Escribo porque tengo un comportamiento raro utilizando estructuras "queues" .

Os cuento, tengo un Vi principal en el que hay un subpanel que carga diferentes "plugins", desde este vi ppal se lanza un evento de usuario que se llama unloadPanel para que el plugin actual lo escuche y pare su ejecución, luego el vi ppal comprueba que el proceso paró dando un tiempo de 1000 ms para ello, si no se encuentra en estado "Idle" aborta la ejecución del plugin. (ideas cogidas de un ejemplo de NI)

El plugin funciona con dos bucles, uno q escucha eventos y encola comandos a otro bucle q los ejecuta según el comando q le llegue a través de la cola.

Mi problema es que aún no controlo el retardo necesario para dar tiempo al plugin a que pare su ejecución, alguna vez funciona pero otras no, y me he dado cuenta de que estaba obteniendo malos resultados porque aparte del problema de sincronización de los eventos, cuando se produce un "abortar" del pluggin (pq no paró a tiempo) en su cola se queda guardado en la cola de comandos el comando UnloadPanel, encolado cuando se lanzó el evento de usuario y no da tiempo a procesarlo, por lo que a veces a pesar de parar todos los vi y arrancarlos de nuevo, dicha cola tiene un elemento guardado, el comando "unloadPanel" (q desregistra este vi de los eventos y para la ejecución del bucle) al quedarse guardado de la ejecucion anterior es lo primero que se ejecuta y luego ya el vi no escucha eventos.

Es normal que en una coal se alamacenene datos de una ejecución a otra? He probado a hacer un "flush" después del "obtain Queue" pero no parece funcionar... Teneís alguna idea??

 

Gracias!!!

0 kudos
Mensaje 1 de 6
3.054 Vistas

Hola Magnetic Tweezers,

 

            Primero que nada te comento que no es normal que los datos de un queue se queden guardados de una ejecución a otra. ¿Cómo comprobaste que el comando que se queda guardado es el "unloadPanel"? También me parece raro que el Flush Queue no funcione correctamente. Puedes utilizar las funciones de Get Queue Status y Preview Queue Element después de aplicar el Flush Queue para verificar que el Queue está vacío. ¿Podrías incluir una imagen de tu código para poder visualizar mejor el problema?

 

Saludos

0 kudos
Mensaje 2 de 6
3.048 Vistas

Hola gracias por responder! Justo acabo de solucionarlo, el problema era q al manejar el unload panel en mi vi incrustado se me había olvidado hacer un release queue, de todas maneras me parece extraño que de una ejecución a otra guardara datos verdad?

 

Lo comprobé poniendo un breakpoint dentro del caso "unloadpanel" y viendo q se paraba ahi nada más comenzar la ejecución, tb había un "probe" en el elemento resultante del dequeue.

Ahora parece q si que se queda en estado idle, aunq no siempre le da tiempo la verdad, lo que me llama la atención también es que al parar la ejecución del vi incrustado sigue siendo visible en el panel, no debería desaparecer? Y que pasa si cargo otro vi en este mismo panel si no ha desaparecido?

 

Gracias!!

0 kudos
Mensaje 3 de 6
3.046 Vistas

La aplicacion es bastante grande, pero este es el codigo del vi del plugin en cuestion, te lo mando el pantallazo por si te aclara, gracias!

0 kudos
Mensaje 4 de 6
3.044 Vistas

Hola Magnetic Tweezers,

 

         En este caso el queue se quedaba en memoria porque te faltaba la función de Release Queue, entonces si suena lógico que a la siguiente ejecución tuvieras todavía elementos del queue anterior.

         Respecto al otro problema, cuando detienes el VI en el subpanel éste no debe de quitarse, se debe quedar ahi. Para quitarlo tienes que usar un Invoke Node del subpanel con el método Remove VI. Pero este nodo lo debes ejecutar hasta el VI se ha detenido. Para verificar si el VI ya se detuvo puedes usar el Property Node de Execution State del VI incrustado. Este es un enum que te indica si el VI está corriendo o no, si no está corriendo entonces ejecutas el método de Remove VI para que puedas cargar el siguiente VI en el subpanel. 

 

En la siguiente liga se describe el método de Remove VI para un subpanel.

http://zone.ni.com/reference/en-XX/help/371361H-01/lvprop/subpanel_removevi/}

 

En la siguiente liga se describe el property node de Execution State.

http://zone.ni.com/reference/en-XX/help/371361H-01/lvprop/vi_exestate/

 

         Espero que esta información te sirva.

 

Saludos

0 kudos
Mensaje 5 de 6
3.038 Vistas

Muchisimas gracias, lo pruebo mañana en cuanto llegue al curro! Comprobar el estado del Vi si que lo hago como te comentaba, pero no sabía que tenía que hacer un remove.

 

Gracias!!!

0 kudos
Mensaje 6 de 6
3.035 Vistas