Deux boucles while simultanée = freeze ?

Bonjour,
J'ai un probléme avec la structure de mon programme :
L'acquisition et l'enregsitrement du signal sont chacun dans une boucle, je dois pouvoir démarrer/arreter l'enregsitrement a n'importe quel moment de l'acquisition.
Seulement, un probléme de taille se pose, si je pose ces deux boucle while dans mon priogramme il se bloque et je suis obligé de redéùmarrer mon ordinateur.
Si je n'utilise qu'une seule boucle while, le programme rentre dans une boucle et n'en resort jamais !
Quelq'un peut m'aider ?
Cordialement

Salut à vous.
J’ai regardé le code… je suis d’accord il faut reprendre la structure, et les bases.
Pour le coup de gueule… je suis toujours réservé car nous sommes ici pour aider. Mais il faut reconnaître que l’histoire entre Reborn et Doriann est étrange ( ?!) A la lecture des éléments d’ouadji, je trouve la pratique douteuse 27 compliments pour des posts juste avec 27 questions et avec 0 réponse. Je suis gêné par la réciprocité. Certaines personnes prennent du temps pour répondre, le compliment est la façon de dire merci. Doriann a donné 4 compliments, et tous à Reborn ?! et SAMUEL_NIF & Rodéric & DavidS.& ouadji & …
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

Similar Messages

  • Arrêter boucle while pour appeler un VI

    Bonjour,
    Je rencontre un problème pour l'appel d'un VI. En effet j'ai deux boucles while, une servant à configurer mon port COM  (plusieurs configurations sont disponibles via un enum) et l'autre servant à appeler le VI souhaité.
    Comment faire pour pouvoir appeler le VI ?
    Ci-joint une image de mon diagramme, et sinon mon VI est "Interface_HM"
    Cdt
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    PASTEC 1.0.zip ‏524 KB
    Interface_HM.JPG ‏56 KB

    Bonjour aznnath11,
    D’après l’image que vous m’avez envoyez, je pense qu’il y a un souci au niveau de la programmation.
    La deuxième boucle ne s’exécutera seulement lorsque la première aura finie de s’exécutée.
    En effet le principe de flux de donnée di qu’Un nœud du diagramme s'exécute lorsqu'il a reçu toutes ses entrées de données. Ors la condition d’arrêt de la première boucle ne passe jamais à vrai et donc ne s’arrêtera jamais.
    Pour que deux boucles s’exécutent en parallèles et communiquent entre elles, il faut utiliser une communication Asynchrone.
    Je vous propose donc de consulter cette vidéo de 20 minutes et notamment les parties sur les boucles maître/esclave et  producteur/consommateur
    http://www.ni.com/webcast/1102/fr/
    Je vous souhaite une bonne journée,
    Cordialement,
    Sabri JATLAOUI - Certified LabVIEW Developer

  • Boucle while parralelle temps attente

    Bonjour,
    Je possede deux boucles while qui commandent deux machines differentes qui marchent bien independament, mais lorsque je met les deux boucles while en parralelle sur un meme vi je suis obligé d'augmenter le temps d'attente des deux boucles.(2 et 4s)
    Y a t il une autre solution?
    Merci pour vos reponses
    Pièces jointes :
    MiniFlash1214.vi ‏100 KB

    Bonjour et merci pour ta réponse,
    Effectivement ça marche bien, sauf l' intervalle d'enregistrement qui est de 4s quand je regle 2s et 4 puis 6s en alternance quand je regle 5s.(alors qu'il marchait bien avant).
    Si je sort l'init de visa l'intervalle est bon mais la carte me donne des valeurs eronées par moment.(un thermocouple sur trois en alternance)
    Il ya un truc a savoir sur les boucles cadensées?
    Ci joint mon VI
    Pièces jointes :
    MiniFlash1223.vi ‏121 KB

  • Ecriture sur fichier sans boucle while

    Bonjour,
    J'ai créé un vi d'enregistrement de données qui ne comporte pas de boucle while, le but étant de pouvoir éxécuter d'autres fonctions durant cet enregistrement. Il se compose en plusieurs sous-vi et fonctionne de la manière suivante:
    1- Récupération de deux entrées analogiques (effectué en permanence pour affichage sur graphe),
    2- Au top, création d'un tableau 1D comprenant: heure / Analog Input 1 / Analog Input 2, puis insertion de ces lignes 1D dans un tableau 2D (et ce jusqu'au second top).
    3- Au second top, ecriture de ce tableau 2D dans un fichier tableur.
    Le programme fonctionne bien mais mon problème réside dans le fait que je ne peux pas gérer ma fréquence d'enregistrement, même en insérant une horloge d'échantillonnage dans la lecture de mes analog inputs.
    Savez-vous d'où vient le problème?
    Je vous remercie par avance de vos réponses.

    Bonjour,
    Quel type de matériel utilisez-vous ? Quelle type de fichier écrivez-vous ?
    Ceci étant, d'après votre description, la seule façon que vous avez de "cadencer" l'écriture dans votre fichier dans votre cas précis, est la fréquence du second top. Pour cadencer votre enregistrement, il faut l'intégrer dans une boucle qui à ce que cette boucle ne s'exécute qu'une fois. Utilisez alors la fonction "attendre en ms" plutôt que la fonction "attendre un multiple de milliseconde" pour se faire.
    N'hésitez pas à nous contacter pour toute demande ou renseignement complémentaire.
    Bien cordialement,
    Yannick.
    Yannick 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;}
    >> Du 30 juin au 25 août, embarquez pour 2 mois de vidéo-t'chat ! Prenez place pour un voyage au coe...

  • 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

  • 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

  • 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

  • Boucles While en parallele

    Bonjour,
    J'ai créé un programme où je fais, dans une boucle While le contrôle d'un pressurisateur et dans une autre boucle l'acquisition et l'enregistrement des données.
    Le pressurisateur doit fonctionner en continu alors que l'enregistrement se fait lors de l'appuis sur un bouton.
    Est-ce que deux voire trois boucles While peuvent fonctionner en parallèle, si oui, faut-il faire qqch de spécial dans le diagramme ou ça fonctionne sans paramètres spéciaux.
    Merci, cdt
    J. Perrin
    Résolu !
    Accéder à la solution.

    dans ton 1er exemple ... c'est l'erreur typique d'une méconnaissance du principe du "flux de données".
    Ta boucle "du bas" ne commencera son exécution qu'àprès la fin de l'exécution de la boucle "du haut".
    Car elle a besoin pour "commencer" d'avoir toutes les données présente à ses entrées.
    Elle s'exécutera ... mais n'exécutera qu'une seule itération.
    voici une solution ... il y a plusieurs façons de stopper des while en // ... celle-ci est,disons, la plus "simple".
    clic droit sur ton bouton "stop" ... create / local variable ... et placer cette variable locale en "lecture".
    Pièces jointes :
    Test_While_qui_fonctionne.vi ‏60 KB

  • 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

  • HT4061 Can a unlocked (no ATT, Verizon, Sprint plan) iphone 5 bought from an Apple store utilize a phone call while simultaneously checking email, web pages etc.? I know the ATT version can and the Verizon version can't, so can a unlocked  Apple?

    Can a unlocked (no ATT, Verizon, Sprint plan) iphone 5 bought from an Apple store utilize a phone call while simultaneously checking email, turn by turn, web pages etc.? I know the ATT version can and the Verizon version can't, so can the unlocked  version from Apple (which is not yet available) do it?

    The tech specs are identical from both wesites of Vietnam and USA--To add further confusion!
    Apple Vietnam
    GSM model A1428*: UMTS/HSPA+/DC-HSDPA (850, 900, 1900, 2100 MHz); GSM/EDGE (850, 900, 1800, 1900 MHz); LTE** (Bands 4 and 17)
    CDMA model A1429*: CDMA EV-DO Rev. A and Rev. B (800, 1900, 2100 MHz); UMTS/HSPA+/DC-HSDPA (850, 900, 1900, 2100 MHz); GSM/EDGE (850, 900, 1800, 1900 MHz); LTE** (Bands 1, 3, 5, 13, 25)
    GSM model A1429*: UMTS/HSPA+/DC-HSDPA (850, 900, 1900, 2100 MHz); GSM/EDGE (850, 900, 1800, 1900 MHz); LTE** (Bands 1, 3, 5)
    802.11a/b/g/n Wi-Fi (802.11n 2.4GHz and 5GHz)
    Bluetooth 4.0 wireless technology
    Apple USA
    GSM model A1428*: UMTS/HSPA+/DC-HSDPA (850, 900, 1900, 2100 MHz); GSM/EDGE (850, 900, 1800, 1900 MHz); LTE (Bands 4 and 17)
    CDMA model A1429*: CDMA EV-DO Rev. A and Rev. B (800, 1900, 2100 MHz); UMTS/HSPA+/DC-HSDPA (850, 900, 1900, 2100 MHz); GSM/EDGE (850, 900, 1800, 1900 MHz); LTE (Bands 1, 3, 5, 13, 25)
    GSM model A1429*: UMTS/HSPA+/DC-HSDPA (850, 900, 1900, 2100 MHz); GSM/EDGE (850, 900, 1800, 1900 MHz); LTE (Bands 1, 3, 5)
    802.11a/b/g/n Wi-Fi (802.11n 2.4GHz and 5GHz)
    Bluetooth 4.0 wireless technology

  • HT5100 Can I browse while simultaneously listening to iTunes U?

    I found that I can't browse other apps or the web while simultaneously listening to iTunes U. The iTunes U function also stops when the autolock is engaged. Is this common or can I override this?

    Hi Kiran,
    You can browse NET when SAP server is running on the same system.
    But don't install the unwanted softwares, downloads etc which consumes the CPU time which effects the SAP server speed.
    Hope this helps.
    Thanks,
    Srinivas

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

  • 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

  • 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  

  • Remise à 1 boucle while

    Bonjour,
    Pour une application que je développe, je souhaite remettre (par appui sur un bouton commande) à 1 la valeur i d'une boucle while. J'ai trouvé une solution (cf. fichier joint) mais je voudrai tout de même savoir si il n'existe pas une solution plus simple.
    Merci.
    Djamel
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    RA1.vi ‏10 KB

    Je pense que Simon parle de ceci,
    ceci dit, avec le noeud de rétroaction et la soustraction ... l'idée était astucieuse.

Maybe you are looking for