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

Similar Messages

  • Peut-on "désactive​r" des événements dans une structure Evénement?

    Bonjour,
    J'ai dans mon VI une structure événements dont les conditions d'événements sont reliées au changement de valeur de certaine de mes données.
    Ces conditions me permettent de ne pouvoir valider l'utilisation d'un interrupteur que lorsque l'utilisateur à rempli certaines informations sur la face avant (valeurs d'initialisation de mon VI).
    Une fois l'utilisation de cet interrupteur devenu valide, je désire que mes conditions d'événement ne soit plus valide: je ne désire plus que lorsque mes données changent effectuer les actions de certaine de mes conditions d'événement.
    Je cherche donc à faire un peu comme pour un microcontroleur:
    - Valider interruption X,Y,Z
    - si interrupteur basculé dévalider interruption X et Z
    X,Y,Z correspondant à mes conditions 1, 2 et 3 de ma structure d'événement.
    Es ce possible à réaliser?
    Résolu !
    Accéder à la solution.

    Bonjour à vous et à toi ! comme son nom l’indique nœud de propriétés « Register Events » : enregistrement des évènements…. Dynamique.
    Sur une structure évènementielle il y a des évènements enregistrés en dur (à la main dans le code par l'édition de la structure) et des évènements dynamiques. Le  « Register Events » permet un enregistrement des évènements de façon programmatique dans le code.
    Seulement les évènements dynamique sont modifiables et sont annulables.
    L’intérêt ? Par exemple l’enregistrement d’évènement d’un XControl (en dehors de lui-même), plus intéressant ? si tu as un exécutable « générique » (noyau) mais avec une IHM spécifique à des clients, sur laquelle tu veux gérer des évènements alors tu récupères les références des objets et tu les enregistres.
    Il y a un enregistrement d’évènement qui ressemble, se sont les ActiveX avec des vi Callback
    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

  • Comment réagissent plusieurs boucles whiles dans un même VI ?

    Bonjour,
    Je construit un automate embarquant une caméra et des platines motorisées.
    Actuellement, les deux types d'outils fonctionnent dans une seule et même boucle.
    Malheureusement le rafraîchissement image est ralentit par le temps de réponse des moteurs.
    Je voudrais savoir si il est absurde d'avoir des boucles "while" qui s'exécutent parallèlement et comment passer les données entre elles? ( Variable locales? Globales?)
    Merci par avance.
    Solved!
    Go to Solution.

    Bonjour,
    Chaque boucle de votre VI sera un thread dans votre application.
    Le ou les processeurs travaille(nt) sur chaque thread à tour de rôle de manière très rapide. Dans le cas où votre système a plus d'un coeur (ce qui est très problable), le code est exécuté de manière intelligente à savoir que chaque boucle sera exécutée sur un coeur différent.
    Cordialement,
    Jérémy C.
    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;}
    Travaux Pratiques d'initiation à LabVIEW et à la mesure
    Du 2 au 23 octobre, partout en France

  • Verrouillage non-souhaité de la face-avant dans une structure événement

    Bonjour !
    J'ai deux VIs qui gèrent un processus de calibration similaire. Dans ces deux VIs, je dois commencer par synchroniser mes capteurs avant de pouvoir faire des tests dessus (récupérer les données, etc). Cependant pour un des deux programmes (celui de Calibration Gaz, ci dessous) lorsque je clique sur "Synchroniser", l'événement de synchronisation est bien effectué, mais ensuite toute ma face avant est bloquée, et je me retrouve obligé d'arrêter le VI.
    Pourtant, dans mes deux programmes, la partie qui gère la synchronisation me semble bien similaire... Auriez-vous une idée d'où le problème pourrait venir ?
    Le Programme Fonctionnel :
    Le Programme Bloquant :

    MoonRat a écrit :
    . (pourtant, les cases "verrouiller la face-avant jusqu'à la fin de l'éxecution" dans la struct. événement sont bien décochées...)
    dans ma version de LabVIEW, lorsque j'ouvre ton code, dans le code de calibration gaz, la structure event (qui gére l'action synchroniser) est configurée en lock front panel until.... donc je ne suis pas d'acord avec toi.
    Tu as 2 structures event, et c'est la deuxième qui a l'option décochée.
    Donc pour moi, c'est l'évènement qui n'est pas terminé.

  • Mettre boucle While en pause/ structure séquence

    Bonjour,
    Actuellement en stage il m'a été demandé de développer une interface LabVIEW en vue du pilotage d'une alimentation triphasé.
    Pour l'instant la majeure partie de mon programme fonctionne mais je me heurte à un problème. Il m'a été aussi demandé que mon programme récupère les informations de mesure provenant de l'alimentation. Cette partie fonctionne également à une exception près : si l'on appuie sur un bouton alors que la commande Write de mesure est en exécution (commande TST dans mon VI), une autre commande sera alors transmise au générateur et la fonction READ ne lira plus de mesure et le VI affichera une erreur de TimeOut. Je cherche donc depuis 2 jours une solution qui me permettrait de mettre la boucle While de mesure en pause en cas d'appuie sur un bouton lors d'une mesure et la reprendre a la fin d'un temps donné.
    Je vous fournie un exemplaire de mon VI afin que cela paraisse plus clair (PS : Je suis sur LabVIEW 2009).
    Je vous remercie d'avance de votre réponse.
    Cordialement.
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    VI.vi ‏55 KB

    Je vous remercie beaucoup de vos réponse. J'ai utilsé vos amélioration et idée et je pense que en théorie ça devrait marcher mais avant d'entamer les tests sur l'alimentation je suis confronté à un nouveau problème : j'ai ajouté des onglets qui devrait me permettre de passer d'un type de langage de commande à un autre. Pour gérer le changement d'onglet j'ai utilisé une structure condition avec une boucle While et une structure évènement. Sur le papier l'idée me paraissait bonne mais après test l'interface se bloque lors du premier changement. La faute est due à la structure évènement qui bloque sur changement d'onglet : valeur changé. Si vous connaissez une alternative à cette solution je vous serez très reconnaissant si vous pouviez me la faire connaitre.
    En vous remerciant par avance.
    Pièces jointes :
    FGV style Visa(1).vi ‏22 KB
    ELGAR TEST 2.vi ‏86 KB

  • Est-il possible d'avoir un exemple plus détaillé de l'utilisation d'une structure évènement?

    Je cherche à piloter une charge programmable de type Prodigit 3254 series grace à Labview sous Windods XP. Une démo était fournie avec le matériel mais comporte beaucoup de bug et surtout surcharge l'UC à 100%. J'ai essayé d'utiliser une structure évènement pour palier à ce problème mais je perd le controle de la charge. Mon programme d'origine me permet de la controler, de faire évoluer sa config mais dès que l'ajoute la structure évènement je perds le controle de tout. Est-il possible d'avoir des détails sur la manière d'utiliser une structure évènement? sur son mode de fonctionnement? Rien ne figure dans le livre de programmation de Francis Cottet pour la version 6.1. Merci d'
    avance

    Bonjour, vous pouvez trouver les infos concernant la structure évènement ici :
    Loops and Structures : http://zone.ni.com/devzone/devzone.nsf/webcategories/E27D46969B82A7FD86256A23005B6947
    Plus précisément dans :
    - Event-Driven Programming in LabVIEW
    - Use the Event Structure in LabVIEW to Capture a Panel Close Event
    - Inside LabVIEW : Event-Driven Programming
    N'hésitez pas à me dire si cela répond à votre besoin.
    Cordialement
    Nicolas François
    National Instruments France

  • 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

  • Transférer un tableau dans une structure évenement

    bonjour,
    Je souhaite commander l'acquistion et l'enregistrement des mesures par eux booléens.
    L'acquisition commence via une structure évenementielle lorsque qu'on change l'état du booléen "acquisition", les données sont mises dans un tableau.
    J'aimerais commander l"enregitrement via un autre évenement.
    Seulement, lorsque je clique sur un des booléens, le deuxiéme marche bien mais ne commande plsur rien
    et
    Je n'arrive pas a récupérer mon tableaude valeurs (j'ai essayé avec des fils et des variables locales.)
    Merci
    Pièces jointes :
    Capture.PNG ‏29 KB
    Capture1.PNG ‏20 KB

    Bonjour,
    Lorsque l'on souhaite transférer des données entre plusieurs itération d'une boucle le mieux est d'utiliser un registre à décalage.
    Pour le code, je pense que tu devrais jeter un coup d'oeil aux machines à états pour revoir l'architecture de ton soft
    Ce n'est pas génial de mettre une boucle dans un évênement, qui ne doit contenir que du code 'rapide' à exécuter, comme un changement d'état de ta machine à état.
    Un dernier points, il ne faut pas mettre de boucle comme ici sans aucune temporisation, elle va consommer tout ton processeur pour tourner à fond.
    Cordialement,
    Simon D.
    CLA | Certified LabVIEW Architect
    CTA | Certified TestStand Architect

  • Initialisation des états de boutons dans une structure case

    Bonjour à tous,
    J'ai créer une un claseur contenant des fiches (1, 2, 3, etc...) sur la gauche de mon Front Panel (FP). Sur chaques fiches il y plusieurs boutons type bouléen. Les fiches correspondent à une structure "case".
    Chaque fiche comporte un schéma de test avec des vannes et des boutons (on/off). Comment définir la position initiale de ces boutons?
    En cliquant sur ces boutons, le schéma se modifie (changement de couleur/position) et lorque le schéma est conforme à la procédure de test, un signal (true) est communiqué vers un diagramme de mesure (à droite du FP) et y active le bouton "start".
    Comme la mesure est la même pour toute les configuration validée de chaques fiches, est-il possible d'avoir un seul fil d'activation du bouton start depuis la structure case (sous-entendu seule le "case" actif envoi un signal)?
    De plus, lors de l'exécution, je souhaiterai que le changement de fiche (de 1 à 2 par exemple), réinitialise l'ensemble des boutons présent sur toutes les fiches (y compris la fiche sélectionnée).
    Merci pour vos conseils, je redécouvre LV après 20 ans, et le programme à sacrément évolué (ou ma mémoire est trouée ).

    Bonjour MarYve,
    Que voulez vous dire par "Comment définir la position initiale de ces boutons?" Est-ce que vous faites référence à la valeur des boutons où bien les boutons changement litérallement de position sur la face avant?
    Pour ce qui est de l'initialisation des valeurs des booléans vous pouvez utiliser des varialbes local sur un changement de valeur du classeur, voir example en pièce jointe.
    Je vous suggère aussi de suivre ce tutoriel:
    http://www.ni.com/white-paper/5241/en/
    Attachments:
    initboolean.vi ‏11 KB

  • Comment remplir un tableau de données avec une structure événement ?

    Bonjour à tous.
    Je cherche à récupérer les données des curseurs d'un graph XY dans un tableau.
    Comme je fait plusieurs relevés j'utilise une fonction événement.
    j'ai réussi à incrémenter l'index du tableau à chaque enregistrement mais je n'arrive pas à inscrire les données dans le tableau.
    Comment inscrire ces données dans un tableau ?

    partant du principe qu'un petit VI vaut mieux qu'un long discours
    si tu as des questions, n'hésites pas
    When my feet touch the ground each morning the devil thinks "bloody hell... He's up again!"
    Attachments:
    add to array.vi ‏26 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 ?  

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

  • 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

  • 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

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

Maybe you are looking for

  • TS2972 Apple TV cannot connect to my iTunes library

    my Apple TV cannot connect to my itunes library

  • Downgrading iTunes to version 8 - can you still access the iTunes Store ?

    Well guys ? Those of you who have successfully downgraded to version 8.. Can you guys still access the iTunes Music Store ? Can you still buy tracks , preview tracks the old way , and buy songs online with the iTMS & iTunes 8 ?

  • Conditon in smartforms to print an include text

    Dear all , I am printing a PO which includes a special instructions at the end of PO. So, there are 8 lines in the special instructions. In the 7th line there is a text related to warranty. All the 8 lines are printed in same Text. Now the requiremen

  • Regarding error message BTE_01

    Hi Sap Experts Please help me for following error. I never seen before one of my user is trying to post GR using t-code MB1C and getting following error message BTE_01: Account 21000027 must be posted as group account 21000000 with trading partner. M

  • SE3510 FC with ALERT "Voltage sensor status"

    Hi Experts, I have one SE3510 FC with Single Raid Controler connected to Sun V440 via HBA (DAS), the system has been working well at production for two years but suddently, Yesterday, SE3510 FC had Audible beep out continueously and I saw only Power/