From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Discussions au sujet de NI LabVIEW

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

PB : Stopper 2 boucles While // ayant 2 timings différents

Résolu !
Accéder à la solution

Bonjour à tous,

J'ouvre un nouveau post car ce nouveau problème sort du cadre (pb Port COM) de mon précédent post.

Bref, j'ai un soucis. Je n'arrive pas à arrêter mes 2 boucles While via un seul bouton Stop. J'ai essayé avec des variables locales, avec des nœud de propriété, des astuces mais rien n'y fait... A vrai dire je n'ai jamais eu vraiment besoin de faire çà mais actuellement j'en aurai besoin car je souhaite scruter un indicateur Char qui selon sa valeur enverra un émail d'alerte. Je remarque aussi qu'il n’envoie les emails que quand j'arrête (abort) mon VI. Il envois après que j'ai lancé mon laser et que j'appuie sur le OFF (bouton) et là il envois. Pourquoi ? J'aimerai que ce soit que pendant l’exécution du VI.

 

extrait.png

 

 

Capture.PNG

Le VI ci-dessous fonctionne mais si je l'applique au mien non ...

 

Merci d'avance pour votre aide !

Gaël,

0 Compliments
Message 1 sur 16
3 923 Visites
Solution
Accepté par l'auteur du sujet GDB21
Message 2 sur 16
3 901 Visites

Merci Thib !

J'arrive à arrêter les 2 boucles While et d'ailleurs mon soucis de scrutation avec envoi d'email c'est réglé aussi !

J'avoue ne pas être très familier avec les fonctions "Synchronisation" mais voilà un bon exemple de m'y mettre !

Je te remercie ! 🙂

0 Compliments
Message 3 sur 16
3 867 Visites

Merci à OuadjiSmiley heureux

0 Compliments
Message 4 sur 16
3 855 Visites

@GDuBois : " J'arrive à arrêter les 2 boucles While "

tu as trouvé une solution à ton soucis ... chouette.

Mais qu'as-tu utilisé comme méthode ... et surtout, as-tu trouvé pourquoi cela ne fonctionnait pas avec une variable locale ?

Je n'aime pas trop la méthode via une locale (je préfère une fonction événementielle qui envoie une "info-stop") ... ceci dit, stopper 2 While (ou x While) via une locale sur le terminal stop, normalement, ça doit tourner aussi. Alors, c'était quoi le bug avec une locale ? (ce serait pas mal intéressant de connaître le "fond de l'histoire" avec cette locale)

0 Compliments
Message 5 sur 16
3 848 Visites

J'ai tout simplement enlevé mes variables locales (sauf une dans la machine d'état) et utiliser les occurrences que Thib m'a conseillé entre mes 2 boucles While. Ce qui m'a permis de pouvoir arrêter les 2 boucles en même temps. Après des tests répétitifs avec le laser, tout répond très bien. 

A vrai dire, je ne sais pas pourquoi mes 2 boucles n'étaient pas capable de s'arrêter avec une variable locale. Peut-être due à la différence de cadencement des 2 boucles ? (100ms contre 30min) ? (Je ne suis pas très à l'aise avec çà mais si tu as une explication à me donner je t'en serais gré ! 😉 )

 

Le VI en pièce-jointe.

0 Compliments
Message 6 sur 16
3 828 Visites

Avec une variable locale, pour ton bouton "stop", il fallait utiliser "switch when pressed" et pas "switch until released".

 

Révélation
au delà ... ta façon de coder (graphiquement) n'est pas ce que l'on peut appeler du code "propre" (désolé). Pas d'alignement, des escaliers partout, du flux "droite-gauche", ce n'est pas du "beau code". Un jour tu ne t'y retrouveras plus toi-même. Sans compter "les autres" qui peut-être un jour devront "reprendre" tes codes. Aussi ... les noeuds de propriété "volants", en dehors du "data flow", c'est pas bon ça. Le data-flow séquence tout ... tu ne peux jamais prévoir avec une absolue certitude quand un noeud, qui n'est pas connecté à ce flux, sera exécuté. Tu dois intégrer tes noeuds au flux de données !

 

 

 

0 Compliments
Message 7 sur 16
3 820 Visites

Un peu brute comme aide ... Smiley frustré mais je suppose que c'est pour m'améliorer ? Smiley heureux 

J'avais déjà testé avec "switch when pressed" et sa buggé. Tu as pu tester en changeant l'action mécanique sur mon VI ?

Oui mais, je souhaite éviter de croiser les fils (d'ou le droite/gauche) après je me sentirais perdu... 

Que me conseilles-tu pour éviter un code sur 2 écrans ... ? des multitudes de sous-VI ?

 

J'ai refondu graphiquement le code, j'espère qu'il est plus rigoureux 😉

Ps : j'ai laissé une partie pour l'occurrence mais j'ai remis la variable locale avec la bonne action mécanique mais dès que je le lance j'ai l'impression d'un comportement de roue libre.

 

Gaël,

 

0 Compliments
Message 8 sur 16
3 805 Visites

Oui, perso j'ai testé avec ton paramétrage d'origine du bouton "stop", c.a.d. positionné en "switch until released", et effectivement la boucle du dessus stoppe, mais pas celle du dessous .... ce comportement est normal avec "switch until released". Quand tu positionne ton bouton stop en switch-until-released", ton booléen "stop" passe à "1" jusqu'à ce que tu le relâches ... et le contenu de la variable locale associée suis cette même séquence. Simulation .... tu appuies 1sec sur ton bouton stop ... en ce qui concerne la boucle du dessus, c'est une structure Event, aucun soucis la structure a capté l'événement, tu te retrouves dans ta structure case, en code "5", la while supérieure stoppe. Mais ... que fait la structure while du bas ? elle passe 99,9% de son temps dans la tempo (ton ancien code). Quand elle a fini sa tempo, elle boucle et lit "enfin" la variable locale ... qui est repassée à "0" depuis longtemps vu que tu a relâchés le bouton stop. Avec switch-when-pressed", tu "mémorises" ton action. Perso, chez moi, avec switch-when-pressed", et des variables locales ... (j'aime pas) mais ça tourne.

 

En ce qui concerne ton dernier code, c'est sympa avec une Occurrence ... mais je ferais 2 modifs.

a) pas de variable locale dans le code "5" (structure case) ... mais plus simplement un "true".

b) j'utiliserais la sortie de la fonction "wait on occurrence" pour gérer le stop ... pas de locale ici non plus.

comme ceci :

 

DPD.jpg

 

Et bravo, effectivement, ton dernier code est déjà beaucoup plus propre.

Super aussi pour les Noeuds qui ont rejoints le flux de données.

 

PS: pour éviter d'avoir un code sur plusieurs écrans

oui, des sous-VIs ... tu peux avoir un code sur plusieurs écrans (le minimum, pas 36) mais alors jamais dans les deux dimensions ... uniquement à l'horizontale c'est préférable.

0 Compliments
Message 9 sur 16
3 797 Visites

@GDuBois : " dès que je le lance, j'ai l'impression d'un comportement de roue libre."

 

? ... que veux-tu dire par là ?

0 Compliments
Message 10 sur 16
3 794 Visites