2 votes

Comment arrêter une boucle While dans LabView en utilisant un timer ?

Je fais un projet pour l'université et j'ai besoin que la boucle while s'arrête après 6s. J'ai donc fait comme d'habitude, en configurant le wait(ms) pour attendre 6000ms et en le comparant à 6000const pour obtenir une valeur bool de TRUE qui aurait dû arrêter ma boucle, mais ce n'est pas le cas. Je me demandais donc si vous aviez une idée de ce que pouvait être le problème ?

3voto

srm Points 398

Vous ne voulez pas d'une fonction " Wait " (attendre) : cette fonction arrête l'exécution jusqu'à ce que ce nœud se termine, ce qui signifie que votre boucle While ne s'exécutera qu'une fois, et que cette fois durera 6000 ms.

Ce que vous voulez, c'est la fonction Tick Count.

Vous pouvez faire glisser cette image depuis votre navigateur (certains navigateurs peuvent vous demander d'enregistrer d'abord le PNG sur le disque) sur votre schéma fonctionnel pour recréer le code (si vous avez LV 2016 ou une version ultérieure, comme indiqué par le numéro de version dans le coin supérieur droit). Cette image a été créée en utilisant "Edit >> Create VI Snippet From Selection".

enter image description here

0voto

D.J. Klomp Points 1533

Une autre option pour résoudre votre problème peut être d'utiliser une boucle temporisée. Ces boucles sont spécialement conçues pour les tâches de chronométrage. L'avantage d'une boucle temporisée est que vous avez un contrôle plus précis du moment où elle s'arrête. La boucle while proposée (par srm) s'arrêtera après 6 secondes + le temps nécessaire pour terminer le code. L'"inconvénient" d'une boucle temporisée est qu'elle se comporte plus comme une boucle for où chaque boucle prend un intervalle de temps spécifique, habituellement je trouve cela plus un avantage qu'un inconvénient :

while loop and timed loop VI snippet

J'ai également mis la solution suggérée précédemment (par srm) pour comparaison. Sur mon pc, la boucle temporisée s'arrête avec une précision de l'ordre de la ms alors que la boucle while a un retard de plusieurs dizaines de milisecondes.

0voto

poompt Points 198

La raison pour laquelle votre valeur bool est fausse est que la sortie du VI Wait (ms) n'est pas le nombre de millisecondes que le VI a attendu mais "milliseconds timer" qui est le nombre de millisecondes depuis le démarrage de Windows ou quelque chose de ce genre. C'est le même nombre que vous obtiendriez si vous lanciez le VI Tick Count (ms) à l'instant où le VI Wait se termine.

D'autres ont raison de souligner qu'une attente de 6 secondes dans la boucle empêchera votre boucle de terminer son exécution et de se répéter jusqu'à ce que les 6 secondes soient écoulées.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X