le 06-06-2016 08:18 AM
Bonjour,
Je souhaiterai structurer mon code afin d'aller progressivement d'une structure boucle Productrice-Consommatrice à une structure QMH. Mais j'ai un problème de portée de variables.
Dans l'exemple ultra-basique en pièce attachée, j'ai une boucle productice qui sélectionne une opération ( addition, soustraction) et les variables associées ( nombre A et nombre B).
La boucle consommatrice réalise la fonction et affiche le résultat. Tout est OK, mais pour des raison d'optimisation, je souhaite encapsuler ma boucle consommatrice dans un sous-Vi, et je désire que la variable résultat soit toujours visible et réactualisée dans la fenêtre principale de mon VI? Comment dois-je faire? car dans mon exemple ( Fenetre3.VI), la variable "Resultat" n'est réactualisée qu'à la fermeture de la boucle consommatrice...c'est à dire jamais.
Dans mes futurs projets, je serai amené à manipuler dans la boucle consommatrice, de nombreuses variables que je souhaite voir se réactualiser sur la fenêtre de mon programme principal et non en devant ouvrir le sous-Vi associé à la boucle consommatrice.
Par la suite, mon programme pourra avoir plusieurs boucles consommatrices d'ou mon souhait d'encapsulation pour maintenir une lisiblité du code.
En vous remerciant de votre aide..
Résolu ! Accéder à la solution.
le 06-06-2016 08:59 AM
Salut Pimpon !
Ton problème est très classique, et du coup facilement résolvable !
En réalité, la mise à jour des valeurs d'une variable d'un VI à partir d'un autre VI se fait grâce à ce qu'on appelle la référence à une variable.
Il s'agit tout simplement de signifier à ton sous-VI qui est censé changer la valeur de la variable présent sur la FA du Vi que tu souhaites mettre à jour une référence de VI, et non créer uen autre variable.
Je t'explique du coup ce que j'ai fait :
1) J'ai ajouté une "référence" en entrée de ton sous-VI. C'est à cette entrée que tu vas câbler la référence de la variable que tu veux changer. Cette référence se crée en faisant
"Clic droit sur un diagramme -> Contrôle d'aplication -> Reference VI serveur", puis sur la variable "Clic droit -> crer -> Commande".
2) J'ai créé un noeud de propriété, que j'ai changé en lecture, que j'ai câblé à la commande référence, en lui donnant la propriété "Valeur". Il suffit ensuite simplement de câbler ce noeud de propriété à la valeur que tu veux donner à ta variable.
3) J'ai changé le modèle de ton câblage de ton sous-VI pour qu'on puisse insérer la commande référence.
4) Je suis retourné sur ton VI principal "Fenetre 3.vi" et ai créé une référence à la variable que tu veux changer en FA (que tu as nommé "Resultat") en faisant:
"Clic droit sur un diagramme -> Contrôle d'aplication -> Reference VI serveur" puis sur la variable "Clic gauche -> Panneau -> Resultat".
Il a simplement suffit de câbler cette référence au sous-VI pour que tout fonctionne...
En espérant que c'est ce que tu voulais,
Au plaisir !
le 06-06-2016 09:53 AM
Merci de votre réactivité, est-ce possible d'avoir votre réponse sous Labview2009?
Encore merci!!
Je vais étudier cela de prêt
le 06-06-2016 10:01 AM
Bien sur, désolé, j'suis allé un peu vite et j'ai zappé la conversion...
06-06-2016 04:45 PM - modifié 06-06-2016 04:45 PM
@ Pimpon : " ... de nombreuses variables que je souhaite voir se réactualiser sur la fenêtre de mon programme principal "
Pourquoi ne pas partir sur un "subpanel" ? (juste une idée)
Plutôt que de faire de longues phrases, j'ai placé mon code en pièce jointe (LV2009)
C'est un code modifié comprenant "fenêtre_3" et "boucle_calcul".
Je ne discute pas le "fond" (ce n'est pas le but) , je reprends simplement le code de Bilsix dans lequel j'ai fait certaines modifications.
(notamment l'affichage via subpanel ... et d'autres petites choses aussi)
tu en fais ce que tu veux (Pimpon), peut-être y trouveras-tu des modifs qui t'intéressent (ou pas)
Bon code.
le 06-07-2016 02:14 AM
Bonjour,
Encore merci de ces idées, je vais travailler dessus et voir ce qui est le plus approprié pour mes applications futures.
06-07-2016 02:23 AM - modifié 06-07-2016 02:27 AM
Hello ouadji,
L'idée du subpanel est effectivement une autre solution qui marche bien !
J'ai personnellement toujours trouvé que l'intégration d'un subpanel dans une FA pouvait mener à des erreurs inattendues (typiquement, cette méthode ne marche plus si tu lances "Fenetre_3.vi" en laissant par inadvertance "Boucle_Calcul.vi" ouvert... De même, pour peu que tu bouges les contrôles de la FA du subpanel, ça peut tout chambouler sur la FA du VI principal...).
L'avantage de simplement faire passer une référence à une commande numérique donnée, c'est que le VI principal ne dépend en aucun cas de l'état du sous-VI qu'il appelle (ouvert/fermé, ou simplement l'état de la FA du sous-VI).
Ceci dit, le code appellant un subpanel reste très élégant, je trouve.
@Pimpon : Pour expliquer avec à peine plus de détails, ouadji a réalisé un petit code sympa qui permet d'afficher un bout de la face-avant du sous-VI sur la face-avant du VI principal. Tu places le numérique voulu à côté du point de référence que tu as choisi (ici, l'origine, c'est-à-dire (0;0), et tu crées une petite fenêtre sur la FA du VI principal pour afficher la FA du sous-VI.
Ps : N'oublie pas de laisser un ou deux compliments si tu touves que les messages t'ont plu et surtout de passer le topic en résolu (en choisissant un message comme solution) si tu as réussi à faire disparaître ton problème !
le 06-07-2016 08:05 AM
J'ai bien compris le principe de la méthode, par contre je ne sais pas si cela provient des différences de Labview 2015 et Labview 2009, mais lorsque je met ma reference de VI serveur sur le diagramme du VI encapsulé, celle-ci arrive avec une variable "Ce VI", et lorsque je crée la commande (clic droit- créer --> commande) ,je me retrouve avec une commande de reference de VI generique et non de numérique, ce qui fait que je ne peux pas lui associer la propriété valeur! ou alors j'ai zappé quelque chose
de même, pour le point 4, je l'obtient directement avec un clic droit sur l'indicateur "Resultat de la FA du VI principal puis menu créer --> une référence.
Sinon cette méthode répond parfaitement à mes attentes...
le 06-07-2016 08:29 AM
Au temps pour moi Pimpon (quel pseudo rigolo), j'ai zappé un petit détail qui ici fait tout la différence :
il est nécessaire, avant de créer la commande "Référence Numérique" en faisant un clic droit, de lier la référence à un numérique quelconque déjà présent sur la face-avant.
Autrement dit, dans le cas de ton sous-VI "Boucle_Calcul.vi", tu dois faire :
1) Diagramme : Clic droit -> Contrôle d'application -> référence VI Serveur.
2) Clic gauche sur la ref que tu viens de créer -> Panneau -> Result (La variable Result que tu avais était un numérique).
A cet instant, normalement, tu devrais avoir une référence à un nombre.
3) Clic droit -> Créer -> Commande.
Et le tour sera joué, tu auras ta commande référence numérique !
Ps : Si tu n'as pas de variable numérique Result sur la FA de ton sous-VI, tu peux en créer un furtivement le temps de la manip, que tu effaceras une fois la commande référence numérique créée...