Discussions au sujet de NI LabVIEW

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

Comment mettre en pause ou suspendre n'importe quel programme LabView ?

Résolu !
Accéder à la solution

Bonjour, 

 

Je suis actuellement en stage pour effectuer mon projet de fin d'études. Le but de mon stage est de développer un nouveau banc de test pour la caractérisation de batterie Lithium. Pour cela, je commande une load active et une carte NI qui me permet de commuter entre la charge et la décharge ainsi que de relever des valeurs de tension, courant... 

Bref, tout fonctionne bien. J'ai désormais un programme qui fait appel à un certain nombre de sous-VI que j'ai aussi réalisé et dans lesquels il y a des boucles et des structures condition. Le problème est que j'aimerai, maintenant, mettre ce programme sur pause à n'importe quel moment et pouvoir reprendre ensuite le test dés que je le souhaite. 

J'ai l'impression que le plus gros problème est que je ne sais pas comment mettre un programme sur pause lorsqu'il réalise une itération d'une boucle while. 

 

Je suis preneur de toutes les idées si vous en avez. En espérant avoir été assez clair.

Merci d'avance.

0 Compliments
Message 1 sur 7
936 Visites

Bonjour,

 

Pour répondre le mieux possible à ton problème, cela serait plus simple de joindre le code en question ou bien un exemple ciblé de ce que tu cherches à faire.

 

Sauf en utilisant la fonctionnalité de debug "Pause" on ne peut pas facilement arrêter l'exécution d'un VI en cours.

 

Pour effectuer une pause dans une boucle while il y a plusieurs options mais la plus évidente est la suivante :

=> L'utilisation du modèle de conception avec machine à état 

 

Une machine a état consiste en une boucle while avec une structure condition à l'intérieur.

A chaque tour de boucle, l'état en cours permet de sélectionner l'état suivant et ainsi de suite.

 

Tu trouveras pas mal de documentation en ligne sur ce sujet comme par exemple :

State Machine - LabVIEW Wiki

Modèles de conception d’applications : Machines à états - NI

 

+ Les exemple de projet LabVIEW.

 

Bon courage.

 

Loïc

0 Compliments
Message 2 sur 7
895 Visites

Bonjour, 

 

Tout d'abord merci pour votre réponse, effectivement cela est complexe mais j'ai trouvé une solution. 

 

Néanmoins je fais face à une nouvelle problématique. Pour mettre en pause mon programme j'ai ajouter une condition dans mes boucles while afin qu'elle tourne à l'infini sans effectuer d'action lorsque j'appuie sur un bouton "pause". Et ça marche !

 

Sauf que lorsque je charge ma batterie par exemple. La charge se termine sous la condition que le temps de charge, au préalablement renseigné, est atteint. Or comme je fais tourner ma boucle while à l'infini, le temps continu à défiler. Et lorsque je veux remettre en charge ma batterie, le temps de charge n'est plus le bon et ma batterie ne va donc pas se recharger à fond. 

 

Est-il possible de mettre en pause le temps ? Ou alors de déclencher un compteur de temps lorsque j'appuie sur le bouton pause ? Temps que je viendrai ensuite soustraire au temps total écoulé. 

 

C'est assez complexe, néanmoins je vous met en pièce jointe la partie charge du code afin que vous puissiez mieux comprendre. 

 

Merci encore. 

Cordialement. 

0 Compliments
Message 3 sur 7
883 Visites

Créer un compteur de temps est un exercice classique auquel se confronte tous les développeurs LabVIEW lorsqu'il preparent leur certification CLD.

Tu trouveras des ressources la dessus dans les exercices de préparation du CLD sur le site de NI :

Certified LabVIEW Developer (CLD) - National Instruments (ni.com) 

 

Le VI express peut être un bon point d'entrée aussi : 

Loc_fr_0-1681914716637.png

 

 

Plusieurs petites remarques sur ton code :

- Même si il n'y a pas beaucoup de code pense a câbler et gérer tes erreurs, notamment pour des cas de timeout. Tu arretes ta boucles sur erreur et tu affiches cette dernière avec le "Simple Error Handler.vi"

- LabVIEW fonctionne par "flux de donnée" et il est fortement déconseillé d'utiliser à outrance des variables Local/Global et de privilégier les terminaux. D'autant plus que tu as l'air de vouloir gérer des interactions entre l'utilisateur et la face avant => La structures évènement est faite pour ça et je te renvois vers le principe de "State Machine" et "Event Driven State Machine". Les concepts sont plutôt accessible et amélioreront grandement la qualité de ton code (Lisibilité, Evolutivité, Maintenance, etc.)

 

Ce que tu décris est tout à fais classique, si tu suis les exercices et supports de préparation au CLD tu devrais t'en sortir.

 

Loïc

0 Compliments
Message 4 sur 7
877 Visites

Bonjour, 

 

Merci pour votre aide ! Pour la partie charge de ma batterie, j'ai réussi à me servir de la fonction "elapsed time". C'est même mieux !

 

Par contre, pour la partie décharge de ma batterie je n'arrive pas à m'en sortir. Je rappelle que pour la partie charge, la condition pour que la charge s'arrête est une condition sur le temps. Or, pour la décharge, elle se termine lorsque la tension de ma batterie atteint une tension minimale au préalablement renseignée. A la fin de ma boucle je récupère la durée de décharge pour voir combien de temps tient ma batterie. 

J'ai donc essayé de déclencher la fonction "elapsed time" dés que j'appuie sur le bouton pause afin de pouvoir soustraire ce temps écoulé au temps total de ma boucle. Lorsque je réappuie sur le bouton pause, ma décharge reprend et je récupère à la fin seulement le temps d'utilisation de la batterie. 

 

Mais je n'y parviens pas...

 

 

 

 

0 Compliments
Message 5 sur 7
854 Visites
Solution
Accepté par l'auteur du sujet Labo81

Je te joint un petit bout de code qui simule ton programme.

Il s'agit pas d'une version idéale, notamment sur l'usage d'autant de feed back node.

 

Cela met en œuvre un modèle de conception producteur/consommateur livré avec LabVIEW.

C'est une bonne introduction au concept de machine à état, file d'attente et structure évènement.

 

Libre a toi de le modifier/compléter ou de piquer les idées qui t'intéresse.

 

Loïc

0 Compliments
Message 6 sur 7
845 Visites

Bonjour, 

 

Merci beaucoup pour tes réponses constructives. J'ai enfin réussi à faire ce que je voulais faire. Grâce à toi mon programme est désormais complet. 

 

Je pense par la suite approfondir le concept de machines à états pour optimiser mon programme. En effet, au vu du VI démo et des conseils que tu as pu me donner, cela me semble être une bonne solution pour rendre mon programme plus propre et lisible. 

 

Merci encore. Bonne journée. 

 

 

0 Compliments
Message 7 sur 7
831 Visites