LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Having troubles with event structure

Hi,

 

I'm having problems with an event structure. My code is executed only once and stop the event structure remains, and was checking step by step, always use the same syntax and do not understand why I have problems.
When I run once, it stays in the same event, never leaves the event, the code finishes executing and stays in the event and never leaves. This blocks all my program and I can't work.

I hope you can help me, thanks


http://prntscr.com/5frbd5
http://prntscr.com/5frbse
http://prntscr.com/5frd66
http://prntscr.com/5frdme
0 Kudos
Message 1 of 8
(3,586 Views)

Include your pictures or your vi to your post if you want more people to help you.

I know that there are a lot of people that will not open files on servers that are not releated to the forum.

0 Kudos
Message 2 of 8
(3,574 Views)

Thank you dkfire

Download All
0 Kudos
Message 3 of 8
(3,565 Views)

You really should post your VI for questions this broad. Also, use PNG fyleype for images (this is easy - select your cocde, go to edit -> create vi snippet from selected code).  Without seeing your actual vi, this is a guess, but...

 

You have your event structure in a while loop.  Your event happens, it goes back to the start of the while loop and sits there waiting forever for the next event (you don't have a timeout wired in).

0 Kudos
Message 4 of 8
(3,554 Views)

Yes, we need to see some code. What does "stays in the event" mean?

 

What does EscalaX do? Is it typically true or false?

Why do you read the MinimoX and MaximoX local variable with each iteration of the loop. Wouldn't once before the loop be sufficient? Where are the terminals?

Do you notice the breakpoint around the while loop? What is it for?

You should also probably change the order of properties. Setting the max and min followed by an autoscale operation seem useless, depending on the state.

You only need to build the array of references once before the loop, not with every trigger of the event.

0 Kudos
Message 5 of 8
(3,539 Views)

Hola Adimichel;

 

Una estructura de eventos tiene como característica principal que espera hasta que ocurra algun eventoi (click o movimiento de mouse, presionar el teclado, cerrrar una ventana) o incluso se ejecuta un timeout cuando no se registra ningun evento en un tiempo determinado (el comportamiento por default es que timeout no se ejecuta pues espera -1 o por siempre. 

 

Adicionalmente se recomenda colocar los botones o controles definidos dentro de la estructura de eventos dentro de su evento para asegurar su funcionamiento correcto,en este punto te recomendaría no usar variables .

 

Si subes una imagen del resto de tu código te podremos ayudar a determinar que es lo que está sucediendo

 

Exito en tu aplicación

0 Kudos
Message 6 of 8
(3,476 Views)

http://prntscr.com/5g0iau - Panel frontal

http://prntscr.com/5g0hl9 - Estructura del programa, dividido en 3 secuencias, secuencia 1

http://prntscr.com/5g0ig4 - Secuencia 2

http://prntscr.com/5g0iti    - Secuencia 3

http://prntscr.com/5g0j61

http://prntscr.com/5g0jab

http://prntscr.com/5g0jed

http://prntscr.com/5g0jht

 

 

Esa es practicamente toda la estructura del programa. El problema es que al dar clic a algun botón (que está dentro de la estructura de eventos) se queda congelado el programa, no puedo presionar ningun otro botón, no puedo cerrar la ventana, solamente lo puedo terminar desde el administrador de tareas. Por mas que lo reviso, no encuentro el error. Tengo otro programa similar y funciona perfectamente pero en este no comprendo que es lo que pasa.

 

Gracias por la ayuda

0 Kudos
Message 7 of 8
(3,470 Views)

Gracias por las impresiones Adimichel;

 

Primera sugerencia... cuidado con las estructuras secuenciales!!! en tu programa realmente no deberían existir. Por simple flujo de datos se pueden eliminar. 

 

Cuando tienes una estructura de eventos dentro de un ciclo while... el programa va a esperar (no va a hacerle caso a ningun elemento que esté fuera de esa estructura) En tu caso es es el recuadro 2. 

 

PAra que tu pantalla vuelva a ser responsiva, requieres terminar de ejecutar el código que se encuentra dentro de tu evento, reitero que el control principal (no la variable) se recomienda que esté dentro de la estructura de eventos para garantizar su correcto funcionamiento)

 

Adicionalmente dentro de tu código tienes escritura y sosbreescritura de variables. Esto te está causando condidiocnes de carrera que desestabilizan tu código... 

 

Hay que recordar que lo más importante dentro de labview es el flujo de datos.. si realizas (cuadro 2, true, 1, 2) una escritura de profundida y luego le sumas prof y lo sobreescribes, realmente no tienes control sobre el valor que se está colocando dentro de tu cluster. 

 

Mi recomendación, serí la de emplear una estructura de tipo productor consumidor; en tu lazo productor puedes tener una estructura de eventos (que monitoree los clicks) y en la del consumidor tener una maquina de estados que tome esos eventos y realice un estado dependiendo del botón presionado. Esta máquina de edos deberá tener un edo de inicialización (equivalente a tu cuadro 0)

 

Si de plano no quieres cambiar tu arquitectura... puedes sacar la estructura de eventos de la secuencial y correrla en un ciclo paralelo..

 

Exito en tu aplicación

 

0 Kudos
Message 8 of 8
(3,437 Views)