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.

Similar Messages

  • Arrêt forcé d'une boucle while

    Bonjour,
    Est-il possible d'arrêter une boucle while avant la fin de l'exécution de la boucle ou avant la fin du temps d'attente ?
    Exemple si je programme un temps de cycle de 5 secondes ou plus (quelques minutes), et que j'appuie sur le bouton stop de la boucle j'observe alors une tempo de 5 s (ou plus) avant l'arrêt de la boucle.
    Merci.

    Oui, c'est possible. Vous pouvez remplacer la fonction d'attente avec une structure de gestion des évenements avec un timeout correspondant.
    J'attache un example.
    Paolo
    LV 7.0, 7.1, 8.0.1, 2011
    Attachments:
    Example.vi ‏18 KB

  • Arrêter une boucle FOR dans une boucle While

    Bonjour à tous, 
    J'ai une boucle while me permettant de faire une acquisition de température et en même temps, exécuter des commandes en fonction des sections.. 
    Néanmoins une fois toutes mes sections exécutées à partir de mon fichier ini, l'execution recommence. 
    Ce que je ne souhaite pas.. 
    Auriez-vous une solution ?
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    Mode _Auto_Cluster.vi ‏124 KB

    TiTou a écrit : Tu comptes finir un jour ce blog post?
    Je ne sais pas... j'ai commencé en LV2010, et en 2012 des "choses" ont été modifiées par le "process" NI qui gére les templates. Le principe de départ reste le même, mais avec quelques modification sur le specpage, et surtout le postcopy. Je travaille parfois, à mes heures perdues, tardivement dessus. Mais je voudrai faire beaucoup plus via le gestionnaire custom, donc il y a du travail, hors j'ai pas beaucoup d'heures perdues!!!
    TiTou a écrit : Vous avez des templates de projets personnalisés chez Mesulog?
    oui nous avons, 2 modèles de projet, réalisés suivant
    Partie 1/3 : Créer des modèles de projet personnalisés avec le gestionnaire de projet LabVIEW - Pour...
    et distribué aujourd'hui suivant le gestionnaire "standard" de NI
    Partie 2/3 : Distribuer des modèles de projet personnalisés avec le gestionnaire de projet LabVIEW -...
    il reste donc "quelques opérations manuels", surtout concernant le build, et du renommage de vi, comme le main et fichier ini.
    TiTou a écrit : On a un framework chez QMT et j'aimerai le distribuer sous forme de package VIPM et pour ça j'aimerai d'abord l'intégrer au templates gérés par LabVIEW.
    J'avais proposé pour les rencontres LUGE, users group de la région, de discuter de cela. Mais pas beaucoup de retour. Les personnes étaient plus intéressées par une présentation sur les techniques de programmation LabVIEW que par les projets...
    Si cela intéresse d'autres personnes...
    Sinon nous pourrions réflechir à une journée technique MESULOG - SAPHIR - QUALIMATEST...
    @+
    Luc Desruelle | Voir mon profil | LabVIEW Code & blog
    Co-auteur livre LabVIEW : Programmation et applications
    CLA : Certified LabVIEW Architect / Certifié Architecte LabVIEW
    CLD : Certified LabVIEW Developer / Certifié Développeur LabVIEW

  • Modif de valeurs pour un sousvi dans une boucle while

    Bonjour, j'ai une question qui a surement l'air un peu idiote mais j'essaie de modifier une frequence de sinusoide en utilisant un sous vi. Ce sous vi est dans une boucle while et helas il ne prend en compte que la premiere valeur au demarrage du vi. Comment je peux modifier les vi de facons a ce que je puisse modifier la valeur de la frequence a mon gre. D'avance merci, je joins un projet exemple de ce que j'aimerais faire, merci de votre aide
    Pièces jointes :
    essai.lvproj ‏8 KB

    Bonjour,
    Vous pouvez utiliser les références pour contrôler votre sous-VI. Voici un exemple : Using Control References to Pass Access of Front Panel Controls to SubVIs
    Cordialement,
    Charlotte F. | CLAD
    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;}
    >> "Du 11 octobre au 17 novembre, 2 sessions en parallèle : bien démarrer - approfondir vos connais...

  • 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  

  • 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).

  • Relancer une boucle while

    Bonjour, 
    est ce que quelqu'un sait comment controler une boucle while a l'aide d'un bouton poussoir : position pour arreter la boucle et l'autre bour la relancer.
    Merci d'avance 
    Résolu !
    Accéder à la solution.

    Salut,
    Je te joins ce que j'aurais fait naturellement. Ce n'est peut-être pas la façon la plus propre de faire mais c'est fonctionnel. A adapter à ton projet évidemment
    Maxime
    Certified LabVIEW Associate Developper
    Pièces jointes :
    PauseWhile.vi ‏14 KB

  • 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/

  • 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

  • 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

  • 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

  • Boucle FOR dans une boucle while

    Bonjour à tous,
    je rencontre un problème, car lorsque j'exécute une série de commande dans boucle FOR, celle ci ne s'arrête jamais.
    Ma boucle FOR est censée exécuter toutes les sections lues à partir d'un fichier de configuration  et s'arrêter.
    Mais elle répète en boucle mes sections..
    Je ne vois pas bien d'où vient mon problème.
    Cordialement
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    Mode _Auto_Cluster.vi ‏151 KB

    @aznnath : 
    Mode_Auto_Cluster.vi.
    jolie surprise, bravo pour l'effort évident de propreté du BD. (on va dans la bonne direction)
    une certaine réponse était peut-être un rien "rigide".
    à ma décharge, une certaine forme de récurrence n'aide pas.
    et respect à TiTou pour sa déterminantion dans l'aide qu'il t'apporte.

  • Arrêter une boucle alors qu'une autre s'exécute en parallèle

    Bonjour/Bonsoir, voici mon problème :
    J'éxecute deux boucles en parralèles, cadencées a la même vitesse mais d'on les durées d'éxecution sont différentes. Le problème est que l'orsque la première boucle à fini de s'éxecuter, elle doit attendre la fin de la deuxieme boucle avant de pouvoir s'éxecuter à nouveau.
    Je souhaiterais donc que les deux boucle s'arretent et repartent indépendament l'un de l'autre.
    Quelle solution me conseillez vous pour réalisé se fonctionnement ?
    Je join un VI d'exemple présentant ce problème au cas où l'explication ne soit pas suffisante.
    Je vous remercie par avance pour vos réponse.
    Attachments:
    test1.vi ‏9 KB

    Translated:
    Good afternoon/evening, here's my problem:
    I am executing two loops in parallel, running at the same speed but with different lengths of execution.  The problem is that when the first loop finishes, it must wait for the second loop to end before starting again.
    I would therefore like the two loops to stop and restart independent of each other.
    What approach do you recommend to achieve this?
    I'm attaching an example VI in case the explanation is not sufficient.
    Thanks in advance for your response.
    In the simple case of your example, I recommend that you remove the for loops entirely and count iterations of the while loop.  Put two shift registers on the while loop.  One shift register counts to 1000, the other to 2000.  This also has the advantage that when you click the stop button, you do not need to wait for the for loops to terminate.  It would look like this:
    If you cannot change the logic of your program like this, you can make two separate while loops so that they run in parallel, independently.  You will need some mechanism to stop both loops when you click the stop button in one.  A notifier is commonly used for this purpose.  One way to do this is shown below:
    (Bien que pas mal des utilisateurs de ce forum comprendent le francais, ce forum est anglophone; il existe aussi une communaute francophone sur ce site).

  • Table: enleverun ligne dans une boucle while

    bonjour,
    je remplis une table avec des valeurs, le but est de pouvoir effacer une ligne quand j'ai fais une faute ,
    le probleme quand je click  droit souris sur la table supprimer la ligne , ca ne marche pas,car je suis dans un boucle infini.
    je veux rester dans la boucle et effacer la ligne , si vous avez une idée, ou améliorer mon programme
    merci.
    Pièces jointes :
    table.vi ‏136 KB

    Bonjour Babnour,
    J'espère que cet exemple vous éclairera; à vous par la suite de le réutiliser et de l'adapter exactement à ce dont vous avez besoin. Il me semble que vous connaissez déjà la structure évènement, et je l'ai enregistré pour LabVIEW 7.0...
    Une remarque concernant les tableaux: il est recommandé lorque l'on en connaît la taille, d'utiliser la fonction remplacer un élément, plutôt que ajouter un élément (gestion de mémoire plus efficace, puisque dès l'initialisation du tableau, l'espace mémoire nécéssaire est alloué).
    Dans l'exemple, la taille du tableau est réglable (avant de lancer l'éxécution) et paramétrée à 8 par défaut. en focntion de l'évènement "clic" détecté, on détermine l'index qui servira pour la fonction remplacer, et l'index pour la prochaine itération de la boucle globale. Si cet index suivant sort de la gamme d'index possible du tableau, on ne modifie pas le tableau, on ne prend pas en compte la modification d'index, et un message apparaît.
    Cordialement,
    Message Edité par Mathieu R. le 09-08-2006 03:26 PM
    .mrLeft{float:left} .mrInfo{border-left:solid 1px #989898;font-size:x-small;color:#989898}
    Mathieu R.  
      CTD - Certified TestStand Developer / Développeur TestStand Certifié  
      CLAD - Certified LabVIEW Associate Developer  
    Pièces jointes :
    tableRem.vi ‏47 KB

  • Boucle FOR dans une boucle while avec un registre à décalage

    Bonjour à tous,
    je rencontre un problème au niveau de l'indexation de l'execution de mes commandes.
    Lorsque j'exécute mon programme, seulement la dernière commande est prise en compte.
    Faut-il enlever mon registre à décalage? Changer le mode du tunnel ?
    Cordialement
    Pièces jointes :
    Boucle FOR, while.JPG ‏134 KB

    ça peut avoir son utilité lorsque le diagramme est conséquent et illisible
    alors c'est que tu "reprends en main" le diagram d'un autre .... 
    sinon... si c'est le tien ... il ne sera jamais illisible.
    Et si tu veux "gagner du temps" ... je t'assure ... cable "propre" du premier coup.
    Lisibilité, compréhensibilité, évolutivité ... tu seras gagnant à tous les coups. (à 1000%)
    Sans compter "le coup d'oeil" quand "un autre" ouvrira ton code.
    Avant d'aller plus loin et de comprendre quoi que ce soit dans ce que tu as fait ...
    la propreté de ton diagram sera "ta signature".
    Ah oui ... un diagramme aussi propre que ça ... ça ne peut être que Geoffrey !
    ça l'fait non ?  

Maybe you are looking for

  • Custom icon in Windows Add/Remove Programs list

    Hi all, I am developing a software with Labview 2011/2012. When I am creating an installer for my application I am configuring icon section and I can see my icon in windows All programs section. And I want to see this icon also in windows Control Pan

  • Servlet chaining problem..

    import java.io.*;     import javax.servlet.*;     import javax.servlet.http.*;     public class Deblink extends HttpServlet {       public void doGet(HttpServletRequest req, HttpServletResponse res)                                    throws ServletEx

  • WM - Two step confirmation cancellation

    Hi Gurus, I am using the two step confirmation for transfer order in one of my business process (no 2 step picking). This is a necessary requirement from my client, but I have a little issue with the cancellation. Once the first step is confirmed, al

  • ICloud - how to synch a second account?

    We have 3 apple products and two separate accounts.  One apple accounts has iPhone and iPad and are synched in iCloud.  the other account has iPhone and is not synched. How do i link the other account iPhone to the same iCloud as the other 2?

  • Problem with 2.2 update

    i am tried to update my touch to 2.2 because all of the new apps seem to need it but it gets to the backing up files part and the takes like four hours to get a quarter of the way through. is this normal or is there something i can do