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 : 

Initialisation d'une valeur au premier tour de boucle (boucle while)

Résolu !
Accéder à la solution

Bonjour à tous,

 

Je travaille sur une interface où l'utilisateur pourra choisir plusieurs étalons. De ce choix en découle des fonctions accessibles (ou non), ce qui implique des unités disponibles ou non.

 

Ce programme est donc basé sur le raisonnement suivant :

 

Choix étalon -> Choix fonction -> Choix unité

 

Mon programme marche bien dans le sens, où il empêche à l'utilisateur de sélectionner une unité "incohérente". Je voudrai cependant rajouter une caractéristique : je voudrai une initialisation cohérente de la valeur fonction et unité lorsque l'utilisateur choisit un étalon.

 

Je m'explique, si l'utilisateur choisit l'étalon 8508, il aura accès à toutes les fonctions. Maintenant s'il choisit la fonction résistance et l'unité ohm, ces 2 choix resteront toujours en mémoire même s'il choisit un étalon qui n'a pas accès à cette fonction et à cette unité. J'ai voulu initialiser chaque étalon avec une fonctionet une unité disponible avec le noeud de propriété value mais forcément au sein de la boucle while, ma valeur devient donc figée et cela ne me va pas.

 

J'espère avoir été clair. N'hésitez pas à utiliser le vi pour visualiser le problème.

Merci de vos futurs conseils, et as usual, si des choses sont à améliorer (surement d'ailleurs) n'hésitez pas !

 

 

0 Compliments
Message 1 sur 8
2 601 Visites

C'est exactement le cas qui est résolu par une structure "State Machine" (http://www.ni.com/tutorial/7595/en/).

Marc Dubois
Message 2 sur 8
2 581 Visites

Merci de ton conseil, maintenant que tu me l'as dit, je me sens bête de ne pas y avoir pensé ! 

Je code ça et je mettrai la résultat sur le forum.

 

As-tu constaté autrement des erreurs de codage ou des choses à optimiser ?

 

Merci de ton retour rapide et de ton lien, un rafraichissement de mémoire ne fait jamais de mal !

0 Compliments
Message 3 sur 8
2 576 Visites

Mon seul conseil serait de toujours démarrer la programmation d'un VI avec un template de State Machine, à moins que le VI soit vraiment très simple.

Marc Dubois
Message 4 sur 8
2 573 Visites

Bonjour Marc, merci de ton retour. 

 

J'ai essayé de reprendre mon petit VI d'initialisation mais je n'ai pas réussi à adapter une state machine pour que le programme ait le comportement voulu. Le comportement du programme était trop rigide comparé au programme que je t'ai montré. En "pilotant" la state machine avec un control je n'ai pas vu d'autres solution que de créer 2 boucles while imbriquées : - boucle de la state machine

                                                                                                                                              - boucle englobant la state machine pour mettre a jour                                                                                                                                                    le control, ici "choix étalon"

Je me bloquais donc dans la state machine sans avoir accès au control "choix étalon"

 

Une solution rapide et simple (mais peut-être pas la meilleure) était tout simplement de sortir de la boucle, l'énum qui pilote les unités. Ainsi au premier tour de boucle, la donnée est transmise tout en en laissant la possibilité à l'utilisateur de changer ce paramètre. Le problème de cette technique est sa lourdeur, autant de constante d'énum que d'unités différentes.

 

Je continue à travailler sur la state machine, afin de voir si je ne peux pas faire quelque chose de plus propre.

 

0 Compliments
Message 5 sur 8
2 546 Visites
Solution
Accepté par l'auteur du sujet Lablasc

Voici la state machine comme je le comprends. J'espère que ça aide.

 

Sélection des étalons (state machine)_BD.png

Marc Dubois
Tout télécharger
Message 6 sur 8
2 539 Visites

Bonjour Marc,

 

Je viens de voir ta machine à état et elle répond parfaitement à mon objectif. Désolé de t'avoir "donné du boulot" mais je t'en remercie sincèrement car c'est très instructif ! Je pense maintenant pouvoir l'arranger et l'utiliser dans d'autres cas. Je ne la maîtrisais pas vraiment finalement donc merci pour ce cours illustré 😉

 

Cependant, il y avait un toute petite chose à rectifier pour que la "state machine" fonctionne à merveille, c'était de corriger un enum dans la structure évènement :

 

-> structure condition -> waits for events -> structure évènement -> fonction à générer -> enum : fonction à générer 

(en étant sur waits for events, les contraintes de choix sur l'unité ne s'appliquaient pas)

 

Mais je suis sûr que tu l'as laissé volontairement pour me faire "briller" ! 😄

 

Plus sérieusement merci beaucoup pour ton aide ! Je vais accepter ta réponse comme solution et je pense poster un nouveau message avec cette même state machine qui contiendra plus de fonctions. Ce sera un bon exercice pour m'entrainer sur les state machine.

 

PS: il y a un léger bug avec la fonction fréquence (enum fonction à générer) car elle n'était pas totalement terminée lorsque j'ai transféré mon VI, je suis donc le seul fautif 😄

 

0 Compliments
Message 7 sur 8
2 527 Visites

Bonjour Marc,

 

Je pensais avoir mis sur ce sujet la state machine que j'avais complété en continuant sur le (très bon) modèle que tu m'avais envoyé.

J'en profite pour te remercier à nouveau, car cela m'a vraiment aidé à mieux comprendre et à modifier cette "bestiole".

 

Je me dis qu'elle peut aider d'autre personnes et si je peux avoir d'éventuels retours sur des améliorations possibles ce serait super. Elle fonctionne bien : elle répond à mon objectif d'initialisation de la face avant, mais il est possible que beaucoup de choses soient à modifier pour améliorer l'efficacité du codage (si Luc passe par là, ne lui dîtes pas que c'est moi qui ait codé cela :D)

 

Plus sérieusement, j'ai reçu énormément d'aide de la part du forum et j'essaie de rendre un dixième de pourcentage de tout cela 😄

 

Comme d'habitude, toute remarque est la bienvenue 😄

Bon code à tous !

Tout télécharger
0 Compliments
Message 8 sur 8
2 335 Visites