Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

interrompre boucle while

Bonjour

Un petit soucis avec ma boucle while: j'effectue des mesures de température, donc avec un cadencement très lent (1 boucle/5 minutes). Mon problème est simple: entre le moment où je clique sur le bouton stop et le moment où la boucle s'arrète, il peut s'écouler jusqu'à 5 minutes; je souhaiterai une sortie quasi immédiate de la boucle.

 

J'ai déja résolu une fois ce problème en rajoutant une boucle for qui me permettait de subdiviser mes 5 minutes en 300 secondes et en vérifiant à chaque seconde l'appui sur le bouton stop... mais c'est un peu lourdingue. Existe-t-il une solution plus esthétique?

 

Merci d'avance

Philippe

0 Compliments
Message 1 sur 9
3 896 Visites

En utilisant une structure évenement on pourrait faire quelque chose de mieux. Mais j'ai l'impression que  pour faire quelque chose de propre il faille refaire pas mal de choses. Donc la solution que vous avez trouvée est snas doute la plus simple (avec le moins de choses à refaire).

Rodéric L
Certified LabVIEW Architect
0 Compliments
Message 2 sur 9
3 890 Visites

Effectivement, une structure événement dans une boucle While est utile dans ce cas et ne demanderait pas forcément beaucoup de modifs dans le code :

1) Tu mets le code présent dans ta boucle While dans la condition Timeout de la structure événement (ou tu l'exécutes via un sous-VI ou autre chose si c'est trop gros), en définissant la durée du Timeout à la période d'acquisition ;

2) Tu ajoutes une condition d'événement "valeur changée" sur un bouton Stop pour gérer l'arrêt de la boucle While.

 

Si l'utilisateur ne fait rien, la condition Timeout s'exécute périodiquement et réalise l'acquisition ; s'il appuie sur Stop, la structure événement répond immédiatement et arrête le programme.

 

HL

0 Compliments
Message 3 sur 9
3 877 Visites

Hello Philippe,

 

La structure événement peut éventuellement répondre à votre besoin, mais elle est relativement peu élégante. L'événement timeout ne devrait pas être utilisé pour exécuter une tâche telle qu'une acquisition mais plutôt pour gérer une rupture de communication ou une gestion d'erreur. L'avantage : la faible utilisation CPU pendant qu'on attend.

 

Je joins ma solution sous forme de machine à états : on déclenche un timer dès qu'on fait une mesure (ici 10 secondes), et on vient scruter si le timer est écoulé. Il n'y a donc pas de "famine" à cause d'une attente de 5 minutes puisque le code repose sur le timer.

 

Cdt,

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

Message 4 sur 9
3 865 Visites

Le VI attaché au précédent message est en LabVIEW2012 😞

Est-il possible de l'avoir sous une version antérieure (j'en suis resté à la version 2011...) ?

Merci d'avance,

HL

 

PS. J'utilise régulièrement la fonction Timeout de la structure événement de la façon que j'ai décrite : pour ma part, je trouve que c'est une solution plutôt élégante 😉 Mais bon...

 

0 Compliments
Message 5 sur 9
3 857 Visites

C'est en effet une solution valide et courante, mais le timeout n'a pas été conçu pour ce genre d'opération, donc c'est moins bien du point de vue programmation pure! 

 

Rodéric L
Certified LabVIEW Architect
Message 6 sur 9
3 848 Visites

Le revoilà en 2011 !

 

Cdt

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

0 Compliments
Message 7 sur 9
3 827 Visites

Merci pour le code. Mais, franchement, je ne suis pas convaincu : je trouve que c'est une solution bien lourde pour quelque chose qu'une simple structure événement avec Timeout réalise beaucoup plus simplement et en utilisant moins de ressources ! De plus, la structure événement me semble plus souple pour gérer d'autres interventions qu'un simple arrêt (modification de paramètres, par exemple) entre des tâches périodiques (mesures ou autre chose).

HL

0 Compliments
Message 8 sur 9
3 812 Visites

Bonjour,

 

J'ai déjà eu ce problème dans le passé.

 

Je te joins une petite astuce pour faire ce que tu veux.

 

Cdlt,

Tout télécharger
0 Compliments
Message 9 sur 9
3 721 Visites