Discusiones sobre Productos NI

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

parar while loop

Hola, tengo un problema al parar un while loop sin tener que esperar a que se ejecute el código que hay dentro. El botón de stop no se actualiza hasta que ha terminado de ejecutarse los 25 segundos de delay que hay en la estrucutura case. Hay alguna forma de pararlo instantantaneamente, antes de que pasen los 25 segundos? actualizar el valor y parar el bucle while?. Un saludo y muchas gracias
0 kudos
Mensaje 1 de 4
5.530 Vistas

Podrías hacer así (el botón de stop está en el caso del error):

 

while.PNG



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Mensaje 2 de 4
5.508 Vistas

Hola Kerek como te indica Roberto Bozzolo lo que necesitas hacer es separar la temporización de tu ciclo de la temporización del programa.

En LabVIEW existen dos tipos de temporización.

  • Tiempo de Ejecución: Controla que tan rápido se ejecuta una aplicación en el procesador
  • Control de tiempo por software: Controla el tiempo en el que se tiene que realizar una operación en el mundo real.

 

El tiempo de ejecución es el tiempo que vas a colocar en el ciclo, si no colocas nada de temporización en tu ciclo este va a correr lo más rápido que puede y satura el procesador, para controlar este tiempo de ejecución te sirven funciones como el wait, wait until next ms o los timed loops (estos últimos con manejo avanzado también se pueden utilizar para controlar tiempo por software pero hay mejores manejaras de hacerlo).

El control de tiempo por software, te permite temporizar actividades por ejemplo si tu quieres que un semáforo este encendido 5 segundos, no se debe usar un ciclo que tarde 5 segundos por ciclo, si haces esto nada dentro del ciclo se va a poder ejecutar durante 5 segundos incluyendo el botón de Stop. Una forma de implementar esto es por ejemplo usas un wait de 10ms (esto es para que tu ciclo reaccione cada 10 ms, y dentro del ciclo agregas un Enlapsed time, o generas esta variable funcional global para manejar el tiempo. Cada vez que transcurra el tiempo cambias el semáforo, pero tu ciclo corre mas rápido lo que permite que otras funciones trabajen con esto.

En el ejemplo que te agrego Roberto es lo que el está haciendo, su ciclo corre cada 250ms, (ese sería el tiempo que tendrías entre apretar el botón y que reaccione). Pero en ese ciclo se queda durante 25 segundos.

Aquí también puedes encontrar otro ejemplo:

Communities: Temporizacion En LabVIEW

Saludos

 

 

Benjamin C
Principal Systems Engineer // CLA // CLED
0 kudos
Mensaje 3 de 4
5.501 Vistas
Perdona, formule un poco mal la pregunta porque la imagen que envié no es exactamente igual que el vi que tengo. Realmente Donde he puesto el retardo de 25 segundos hay un proceso que tarda alrededor de 25 segundos en ejecutarse. Por lo tanto no puedo hacerlo como tu me lo has puesto. Alguna idea? Muchas gracias de todas formas!
0 kudos
Mensaje 4 de 4
5.398 Vistas