Sortir d'une boucle while par un bouton extérieur à cette boucle

Bonsoir,
question bête...lorsque l'on se trouve dans une boucle while existe-t-il un moyen pour sortir de cette boucle en actionnant un bouton qui ne se trouverait pas intégré à la boucle ?
Merci d'avance pour vos réponses.
Cordialement.

Hi SyP,
Thanks for posting on the National Instruments Forum. 
This part of the Forum is in English, please post here in English and over there in French. 
It is possible to create a local variable to implement what you want to do. Please find below an example where you have 2 While loops in parallel and one Boolean control which interact in both loops using right click on the stop control>>Create>>Local Vairbale.
Message Edité par BenjaminR le 08-13-2009 03:58 AM
Benjamin R.
R&D Software Development Manager
http://www.fluigent.com/

Similar Messages

  • Y a t-il des solutions pour les modifications par un utilisateur extérieur à Muse

    J'ai réalisé un site pour un client, je lui ai donné l'accès (par identifiant et mot de passe) pour qu'il puisse modifier son site.
    Lorsqu'il le fait tout se synchronise bien avec le site que j'ai créé dans Muse.
    Mais il ne peut pas faire grand chose en dehors de modifier un texte et échanger des photos.
    Existe t il des solutions pour qu'il puisse ajouter un article, ajouter une photo ou un pdf ?
    merci d'avance si quelqu'un à une solution .

    At current stage you can edit images and text with In browser editing, please feel free to add your suggestion in our ideas section.
    Thanks,
    Sanjit

  • Redemarrer une boucle while

    Bonjour a tous !
    J'aimerais savoir comment faire pour relancer une boucle while. Je m'explique : quand la boucle est lancee, on peut creer un bouton stop tout simple pour l'arreter. Seulement, existe t'il un moyen tout aussi simple de faire s'executer une nouvelle fois cette boucle ?
    L'idee est de pouvoir simplement : lancer le trace d'un graphe a partir d'une DAQ, pouvoir l'arreter (en gardant la courbe a l'ecran), puis de le relancer (et de rafraichir le graph a partir de rien).
    Je vous remercie d'avance pour votre aide.
    ps : desole pour l'absence d'accents mais il n'y en a pas sur un clavier allemand :/

    Tu me conseilles donc de creer une structure event, selectionnee par un bouleen ou enum, dans laquelle il y aura : un etat ou le graphique affiche les donnees, un deuxieme etat ''pause'' ou rien ne sera relie au graphique, et un troisieme etat avec une constante ''null'' reliee au noeud de propriete history data pour avoir une sorte de clear chart ?
    Regarde les exemples qu'on trouve sur le web 
    Le concept c'est d'utiliser l'Enum pour faire discuter de ce qu'on veut faire : initialiser, acquérir, attendre l'appui sur un bouton... et on discture de ça dans une structure condition.
    Le plus propre est de laisser une seule structure event qui est dans l'étape où on attends une interaction de l'utilisateur (avec plusieurs structures event on risque de bloquer l'interface par mégarde, donc surtout à éviter).
    Edit : plusieurs intérêts :
    on rend le code arbitrairement séquentiel : on se sait ce qui se passe dans quel ordre,
    on peut s'arranger pour que le code ne prenne qu'un seul écran : plus facile à lire/maintenir,
    on a le flux d'erreur toujours accessible si on le fait passer via un registre à décalage dans la boucle while,
    on peut ranger les données dans un cluster : on évite le diagramme spaghetti en ne sortant que ce dont on a besoin pour l'étape du calcul,
    on met toutes les interactions utilisateurs à un seul endroit (structure événement) : plus facile à gérer et maintenir (et on évite le bug d'une structure événement qui bloque la face avant en attendant un événement, empêchant une autre structure d'interagir).

  • Problème boucle while bouton

    bonjour,
    je voudrais arrêter une boucle while quand un bouton  change de valeur ( qu'il soit sur on ou off peu importe , juste qu'il change de valeur) et je ne sais pas comment faire.
    Pouvez-vous m'aider ?
     Meri d'avance !!
    Julie

    Bonjour,
    Je vois plusieurs possibilités pour résoudre ton problème :
    - Tu peux mettre une structure d'évènement qui détectera ton changement de valeur (après configuration de ta structure bien sûr)
    - Tu peux également mettre un registre à décalage sur ta boucle While afin de détecter une différence entre ton bouton et le retour du registre...
    Bastien

  • Ralentissement boucle while

    Bonjour à tous,
    Dans le cadre d'une application, j'ai besoin d'envoyer un notificateur toutes les 50 ms - de façon très précise. La marge d'erreur acceptée est de 1ms, le temps entre deux notificateurs envoyés ne doit donc pas dépasser 51 ms.
    J'ai tout simplement placé l'envoi du notificateur dans une boucle While cadencée à 50 ms ; je me suis aperçue de plusieurs retards (certaines itérations prennent jusqu'à 300 ms !) 
    J'ai donc enlevé les notificateurs de ma boucle afin de la faire tourner (vide) et de mesurer le temps des itérations ; je me suis aperçue que de façon aléatoire, certaines itérations dépassaient le temps de cadencement (52 ms jusqu'à 150 ms).
    J'ai donc remplacé ma boucle While par une structure While cadencée mais là, même problème (quoique moins fréquent) : certaines itérations prennent beaucoup de temps, et dépassent les 50 ms, alors que la boucle est vide et que rien ne s'éxécute !
    Je ne comprends pas d'où vient ce problème : limites LabVIEW / Windows ?
    Il est impératif, pour l'application, que l'envoi de ces notificateurs s'effectue à une fréquence très précise.
    En PJ un VI très simple (while cadencée et mesure du temps de boucle, si une itération est  supérieure à 51 ms : on allume un booléen).
    Merci,

    Bonjour D1431,
    Tel que décrit, je pense que ton problème vient bien du fait que Windows n'est pas un OS temps-réel. Globalement, il suffit que pour une raison ou une autre Windows décide d'allouer des ressources à une autre tâche plus prioritaire, et ton cadencement est fichue.
    Je ne suis donc pas sûr que tu puisses atteindre ton objectif sans cible temps-réel. D'autres sauront sûrement mieux te renseigner que moi

  • Comment changer la tension de mon générateur par une boucle while

    Bonjour,
    Je débute sur Labview et voici mon problème.
    Une tension est rentrée manuellement sur mon générateur. Une intensité est calculée par un multimètre. Tout ceci est envoyé sur Labview qui calcul la résistance expérimentale par la loi d'Ohm. Or si la résistance expérimentale est différente de la résistance théorique (rentrée sur Labview auparavant) je veux que Labview calcul et envoie la bonne tension d'entrée pour obtenir une résistance expérimentale proche de la théorique.
    Je veux donc utiliser une boucle while qui ferait : while Rth différent Rexp faire U=Rth*I
    Sauf que je n'ai pas assez de connaissances sur Labview pour faire ce que j'ai souligné. Je pense que cela n'est pas très compliqué mais je ne trouve pas de tuto qui  explique ceci.
    Merci d'avance pour votre aide

    oups ... pas propre.
    aligner les fils, éviter les "escaliers" (un peu partout)
    les entrées et les sorties sur les "structures" ... sur les bords gauche et droit (si possible, pas au dessus, et ici cela est certainement posible)
    jamais de flux de données droite-gauche ... le flux doit toujours se propager de la gauche vers la droite.
    Je reviens sur votre code dès qu'il ne me fera plus mal aux yeux  

  • Sortie des informations "chaîne" d'une boucle While a chaque boucle

    Bonjour a tous,
     Je souhaiteras avoir des informations pour sortie a chaque bouclage de boucle While une "chaîne" de caractère afin de la traiter en parallèle.
    J'ai réussie a récupéré la valeur à la fin de la boucle While mais pas en cour de bouclage.
    Je me doute que mon code n'est forcement optimiser, j'ai débuter il y a quelque semaine
    Je vous ci-joint mon code.
     Merci par avance
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    ma problematique.png ‏47 KB

    Bonjour,
    Il n'est pas possible de câbler la chaine comme vous l'avez fait. Les infos à la sortie d'une boucle ne sont dispo que lorsque la boucle a terminé son exécution. Il faut du coup soit passer par une varaible locale, une variable globale fonctionnelle, ou même mettre votre code directement dans la boucle puisqu'il traite une info qui se met à jour comme la boucle....
    La boucle n'a pas de cadencement, elle s'exécute rapidement. Vous pouvez aussi récupérer en sortie un tableau de toutes les chaines traitées (ce que vous avez fait en fait), et les traiter juste derrière.
    De plus, vous pouvez utiliser un registre à décalage plutôt que des variables locales dans la boucle, ce sera plus propre et plus efficace.
    Francis M | Voir mon profil
    Certified LabVIEW Developer

  • Répétition d'une opération par le biais d'une boucle

    Rebonjour, je post un nouveau message pour vous demander à nouveau votre aide.
    Il y a quelques temps, j'ai réalisé un programme permettant d'envoyer des informations à un capteur (simulation de l'appuie sur la touche a, puis p, puis échap.
    La réalisaton fonctionne, seulement maintenant j'aurai besoin de realiser plusieur fois la simulation de l'appuie sur la touche p.
    Je vous met mon programme en pièce jointe, pourriez vous me dire ce qui ne va pas au niveau de la boucle ?
    Cordialement
    Note : Dans une version antérieure j'avais mis la boucle seulement sur la partie simulation de l'appuie sur la touche p, cela ne marchait pas non plus
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    port serie ecriture(modif17) - Test structure évênement.vi ‏178 KB

    C'est tout à fait normal que ça ne s'exécute qu'une fois, vu que le bouton conditionne l'action, et que tu n'appuies qu'une seule fois dessus. En fait dans tous tes cas tu dois sortir les conditions, et les boutons n'ont pas besoin d'être cablés.
    Il faut juste le laisser dans le cas correspondant s'il est en latch pour qu'il se réinitialise (qu'il se relache) mais il n'y a pas besoin de le cabler. L'action choisie génère un évênement qui est enregistré par LabVIEW  pour effectuer l'action correspondante
    L'évênement value change correspond à n'importe quel changement de valeur généré par l'utilisateur sur l'IHM ou par l'utilisation d'un noeud de propriété Value(signaling). c'est donc celui qui s'adapte le mieux à la gestion des IHM car tu peux t'en servir sur toutes les commandes et le générer par programmation.
    Cordialement,
    Simon D.
    CLA | Certified LabVIEW Architect
    CTA | Certified TestStand Architect

  • Qu'est-ce qui limite la vitesse d'excécuti​on d'une boucle while?

    J'utilise Labview 7.0 avec une carte PCI-6024E (à 12bits à 200Kéch/s en entrée et 12bits à 10Kéch/s en sorties). Mes VI sont essentiellement basé sur des boucles "while" dont je règle la temporisation et contrôle la période d'excécution. Mon PC n'est pas capable d'excécuter ces boucles à des périodes inférieures à 150-200ms.
    Qu'est-ce qui limite la période d'acquisition des boucles while: les performances du PC ou la carte?
    En gros, est-ce qu'il suffirait que je change de PC?
    Merci...
    PC: Pentium II, 392760 Ko de RAM

    Je viens de jeter un oeil aux deux VIs que vous utilisez. Voici ce que je vous recommande :
    Si tel n'est pas le cas, reliez le compteur d'itération de la boucle à l'entrée iteration (init:0) de AI Read One Scan.
    Créez une copie de AO Update Channel et modifiez celle-ci de manière à ajouter l'entrée iteration count (0:initialize) du sous-VI AO Write One Update à son connecteur.
    Utilisez la copie modifiée et reliez également le compteur d'itération de la boucle à l'entrée ajoutée.
    Ceci devrait sensiblement réduire le temps d'exécution de la boucle puisque les tâches d'écriture et de lecture seront ainsi configurées uniquement lors de la première itération.
    Une alternative à ces opérations serait d'utiliser des fonctions DAQ plus avancées qui vous permettront de séparer la configuration de la lecture/écriture selon mon précédent message.
    Message Edité par JB le 07-09-2008 03:27 PM

  • Mettre en pause boucle while qui comporte une attente

    Bonjour,
    Je cherche à interrompre une attente qui est dans une boucle while.
    A l'aide d'un bouton pause par ex. je voudrais interrompre l'attente et en enlevant la pause, reprendre l'attente où elle en était.
    Merci pour vos idées.
    Manu

    Bonjour Manu,
    Tu trouveras un exemple ici :
    https://decibel.ni.com/content/docs/DOC-10792
    Cdlmt,
    Pierre
    Pierre V, Application Engineer
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    LabVIEW Tour
    Journées Techniques dans 10 villes en France, du 4 au 20 novembre 2014

  • Arrêt une boucle While

    Bonjour,
    Pourriez-vous me donner des infos pour arrêter une boucle while ci-joint le vi. Merci par avance  
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    VGL.lvlib ‏2 KB
    Test-de ProducerConsumerDataNI.vi ‏51 KB

    Bonjour,
    Le problème de non arrêt est provoqué du fait que votre 2eme boucle attendra un élément de la file d'attente qui n'arrive pas car la première boucle est déjà arrêtée.
    Mais plusieurs problème subsiste dans votre programme puisque vous utilisez une file d'attente pour envoyer vos résultat d'acquisition mais vous n'utiliser pas cette file d'attente pour enregistrer vos données. La file d'attente avec une constante chaine vide ne sert à rien ?
    N'oubliez pas que le test de votre variable globale est faite en meme temps que l'attente d'un élément dans la file d'attente, donc elle est lue avant qu'il y est la possibilité d'avoir un élément dans cette file et donc comme vous n'avez configuré aucun time out sur cette fonction elle attendra indéfiniment un élément qui ne viendra jamais.
    Vous pouvez observer le phénomène après avoir appuyé sur le bouton stop, passez sur votre diagramme et animez l'exécution, votre 2éme boucle est bloquée sur "supprimer le premier élément d'une file d'attente"
    Cordialement
    Greg S.
    CNRS
    LV 7.1 8.2 8.6 2009 2011 2012 2013
    LPMC - CNRS
    N'oubliez pas de complimenter cela fait toujours plaisir.

  • Stopper plusieurs boucle while dans une structure évènement

    Bonjour.
    Je gère actuellement l'acquisition de données sous LabVIEW et ai mis en place une structure évènementielle.
    Mon programme possède 6 fonctionnalités principales correspondant à 6 boutons :
    - paramètres de sécurité
    - étalonnage des capteurs
    - paramètres de l'essai
    - quitter le programme
    - démarrer l'essai
    - arrêt de l'essai
    Jusqu'à présent, les 5 premières fonctionnalités s'exécutent à merveille.
    Le problème réside dans l'interruption du code (sans le quitter attention !!) lors de l'appui du bouton "arreter essai".
    Lors de l'appui du bouton démarrer, 5 boucles while s'exécutent simultanément (soit dans l'évènement "Demarrer Essais : value change").
    J'ai tenté de relier chaque condition d'arrêt de ces boucles à la variable locale "Arreter Essais" (cf. ex ici http://forums.ni.com/t5/Discussions-de-produit-de-NI/Quitter-une-boucle-While-dans-une-structure-Eve... post n°7/9).
    Le programme semble alors bien s'interrompre... mais repart de plus belle sans que je ne sache pourquoi :/
    Autre test : relier les conditions d'arrêt à une variable globale prenant la valeur vraie dans l'évènement "Arreter essais : value change", là encore échec cuisant.
    Je vous joint une imprécran d'une des 5 boucles while en question, afin d'illustrer peut-être de meilleure manière mon problème.
    Si vous avez une piste de résolution du problème, n'hésitez surtout pas.
    Pour finir, je travaille sous LabVIEW 8.6.1
    Merci d'avance.
    Arnaud
    Attachments:
    Boucle WHILE d'affichage sur le graphe.png ‏29 KB

    Duplicate
    Flo
    Open Diagram First

  • Mesure de temps dans une boucle while

    Bonjour,
    Je travaille sur une application qui doit exécuter les ligne d'un tableau contenant différent paramètre les unes après les autres.
    Il faudrait que la boucle While se stoppe quand le temps passer dans la boucle est égale au paramètre de temps contenu dans le tableau. C'est pour la partie mesure du temps dans la boucle que je galère.
    Si quelqu'un a des idées, merci d'avance.

    Bonjour,
    Excusez moi mais j'ai un peu de mal à comprendre votre problème.
    J'ai essayé de faire un test que je vous envoie en pièce jointe.
    Ici j'ai initialisé mon tableau et chaque itération de boucle se fait au bout de 1 sec.
    Etant donné que la seule donnée logique de mon tableau initialisé se trouve à la ligne n ou je met n (attention le tableau commence à l'indice 0) alors je sortirai de la boucle ou bout de n+1 sec.
    J'espère que ce VI répondra à votre question, sinon, n'hésitez pas à revenir vers nous et à nous donner plus d'informations.
    Cordialement.
    Pierre Denis
    National Instrument
    Pierre_D
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    LabVIEW Tour
    Journées Techniques dans 10 villes en France, du 4 au 20 novembre 2014
    Attachments:
    test.vi ‏9 KB

  • Retard sur la sortie d'une boucle condition

    Bonjour
    Je développe un banc d'endurance pour des électrovannes+pompes. Le but est d'alterné l'ouverture des electrovannes avec une activation de pompe correspondante suivant un cycle de 4,5 en fonctionnement et 25,5s au repos. Le cycle ce fait bien comme je le souhaite à part que la commande des électrovannes+pompe est en retard par rapport à l'affichage du coup lorsque mon cycle d'activation est censé être finit je suis en réalité au milieu du cycle. Ceci me pose problème pour l'enregistrement des données que je souhaite réaliser tous les 80 cycles mais surtout je ne comprend pas pourquoi j'ai ce problème.
    J'utilise un PXI 1042 avec une carte PXI 6229 pour le pilotage des relais et une carte PXI-6689 pour l'acquisition le tout sour LabVIEW 7.1.
     Merci pour votre aide
    Guillaume
    Attachments:
    electrovanne.vi ‏1343 KB

    Bonjour,
    Qu'entendez-vous par "la commande des électrovannes+pompe est en retard par rapport à l'affichage"?
    Egalement, à quoi correspond un cycle d'activation ? j'imagine 2 tours de boucle while (1 pompe en marche + 1 en attente) ?
    J'ai simulé votre materiel pour faire tourner le VI mais je n'observe rien de particulier, pourriez-vous illustrer le problème ?
    A noter, par contre, que dans l'étape "pompe en marche" vous générez 10 pts de signaux carrés échantillonnés à 100 Hz, d'une periode de 0.6Hz (définis dans les VIs Express "simuler un signal").
    En définitive, ces 10 premiers points sont toujours égaux à 0. Je ne suis pas sur que ce soit le comportement désiré ?
    Bonne journée !
    Rémi M.
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    >> Les présentations NIDays 2010 déjà disponibles au téléchargement !

  • Start Bouton / boucle While

    Salut
    J'ai des signaux des cartes PCMCIA et USB NI, maintenant je veux  contrôler les données d'entrée à l'aide d'un bouton start / stop, donc,  je veux savoir si mon VI c'est un bon moyen de faire un Panneau de control,
    J'utilise une boucle while dans une boucle while et je ne sais pas si sa rend plus lent mon programme.
    Quels conseils pouvez-vous me donner, merci pour votre aide.
    Pièces jointes :
    Buttons to Initiate Actions.vi ‏65 KB

    Je pense qu'il faut rester sur une machine d'états mais il faudrait l'arranger, rajouter des états pour que sa soit plus clair et leur donner des noms explicites: Init acquisition, acquisition, cleanup acquisition, INIT program, STOP program,etc...
    Donner des noms aux controles plus explicites que "booléens"
    A quoi sert le registre à décalage string dans ce programme? j'ai l'impression qu'il ne fait rien non?
    Ajouter des commentaires, des labels sur les fils importants, nettoyer l'apparence graphique du code (fils droits etc)
    Ajouter une étape après l'acquisition pour enregistrer les données plutôt qu'a chaque mesure
    Eviter les VI express et utiliser des fonctions plus "bas niveau"
    Rodéric L
    Certified LabVIEW Architect

Maybe you are looking for