LabView - parar un while loop

 
Vista:

parar un while loop

Publicado por Elena (7 intervenciones) el 15/06/2006 11:12:21
Hola! Tengo un subVI que tiene un while loop que controlo con un botón (stop). Cuando utilizo este subVI en mi programa principal, no puedo controlar el botón de stop, ya que se está ejecutando el subVI. Entonces es imposible parar la ejecución del subvi, y por eso tampoco puedo utilizar los datos de este subVI, para mi aplicación general.
Tengo alguna forma de parar el while loop del subVI, o parar la ejecución del subVI pasado un cierto tiempo, o no sé...algo parecido???
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:parar un while loop

Publicado por Jorge (10 intervenciones) el 15/06/2006 16:23:49
Que tal, una manera de solucionar tu problema es que cuando tenga tu subVi la salidad de stop no le coloques el boton dentro de la sub rutina sino que haciendo click derecho sobre la salidad hacia el boton de stop , luego esta la enlacas desde la edicion del icono y el boton de stop lo agregas en tu programa principal.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:parar un while loop

Publicado por Edgar Muñoz (108 intervenciones) el 15/06/2006 21:30:06
La solución que te da Jorge no creo que vaya a funcionar o al menos no va a funcionar como esperas.

Te recomiendo que detengas el while loop del sub VI es con una condición generada por el propio programa (por ejemplo cuando una variable llega a determinado valor o se han procesado un determinado número de datos, etc). Me parece que no tiene lógica que pretendas detener un while loop en un subVI utilizando un botón externo, la verdad nunca he visto una aplicación que haga esto (aunque se puede hacer).

Toma en cuenta que un sub VI tiene la misión de realizar un procedimiento y devolver datos o realizar alguna acción, y finalizar su ejecución por sus propios medios cuando el procedimiento se ha cumplido.

Tal vez te pueda ayudar un poco más si me cuentas que tipo de aplicación estás realizando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:parar un while loop

Publicado por Elena (7 intervenciones) el 16/06/2006 10:31:38
Estoy realizando una aplicación de medida de potencia. Para esto necesito un osciloscopio que me mida dos tensiones.
El subVI del que estoy hablando es el osciloscopio, que como es lógico, tiene un bucle para ir tomando medidas. He programado el osciloscopio para que con un botón le digo cuando tiene que empezar a medir y cuando vuelvo a pulsar el botón deja de medir.
El caso es que mientras se está ejecutando este subVI, no puedo hacer nada con los datos que me devuelve, porque todavía no me los ha devuelto, o porque no puedo ejecutar otra parte del programa principal al mismo tiempo.
Por eso quería tener un botón en el programa principal, que sea la entrada del subVI, para empezar a medir y para detenerse, pero esto no funciona, ya que mientras se está ejecutando el subVI, no va a saber si estoy haciendo cambios en el panel frontal de la aplicación general, y por esto se me convierte en un bucle infinito, del que nunca salgo, y por tanto no salgo nunca de la ejecución del subVI.
No sé si me he explicado muy bien...
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:parar un while loop

Publicado por Edgar Muñoz (108 intervenciones) el 16/06/2006 18:47:45
LabVIEW tiene la característica de ejecución "multithread" o multihilo, es decir, puede ejecutar varios fragmentos de código en forma paralela o "simultánea", cada fragmento se ejecuta en un thread o hilo.

En el menú Tools selecciona opciones y luego en el cuadro de diálogo selecciona Performance and Disk y asegúrate que esté activada la casilla de verificación Run with multiple threads (es posible que necesites cerrar y reiniciar LabVIEW). Con esta configuración LabVIEW está listo para ejecución multithread.

Te envío los VIs de ejemplo a tu e-mail para que te quede más claro.

Hay dos while loop en el diagrama de bloques, el primero va a contener el sub VI "adquirir.vi" que utilizo para simular la adquisición (una onda senoidal inmersa en ruido), es aquí donde debe ir ubicado tu sub VI. El otro while loop contendrá las operaciones que necesitas hacer en el panel frontal de tu aplicación. Los dos while loop se ejecutan paralelemente (multithread, recuerdas). Estos dos lazos se deben detener con un solo control Stop, por eso utilizo una variable local para detener uno de ellos.

Toma en cuenta además que el botón Stop debe tiene acción mecánica "Switch When Pressed", no puedes utilizar una acción mecánica con Latch porque no es compatible con las variables locales. La función AND al final de los dos lazos se utiliza para regresar al botón a la posición original (False) sólo cuando los dos lazos se hayan terminado de ejecutar.

Utiliza referencias para el gráfico (Wveform Graph) y para el botón de parada (Stop) y pasalas como entradas de tu sub VI (obviamente el sun VI deberá tener dos entradas de tipo referencia a control). Se utilizan referencias porque esta es la única forma (o al menos es la más sencilla) de escribir o leer valores de controles o indicadores externos a un sub VI.

En el sub VI debes utilizar un Property Node para que puedas leer y escribir en la propiedad Value del botón Stop y del Waveform Graph respectivamente.

En el panel frontal puedes acceder a los datos adquiridos con una variable local del Waveform Graph, en el ejemplo utilizo la variable local para obtener el valor RMS de la onda.

El ejemplo está programado en LabVIEW 7.0 (7 Express), espero que no hayan inconvenientes (sobretodo si estás trabajando con una versión inferior).

Espero que te el ejemplo y la explicación te sean de completa utilidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:parar un while loop

Publicado por Elena (7 intervenciones) el 20/06/2006 13:11:37
Muchas gracias por todo! Esta misma tarde voy a probarlo.
Gracias de nuevo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar