le 04-06-2022 09:37 AM
Bonjour à tous,
Débutant en Labview, je cherche à transmettre la valeur dynamique d'une variable depuis un sous-Vi vers un Vi de haut niveau.
Le sous-Vi appelé, execute une boucle while à une fréquence de 50Hz (par exemple) et je souhaite voir apparaitre le nombre d'itérations (le "i") de cette boucle en face avant de mon VI appelant.
J'ai tenté d'utiliser une variable globale, qui ferait le lien entre ces deux VI. Je câble donc le nombre d'itération sur la variable numérique globale et le récupère dans le VI appelant avec un indicateur face avant. Je ne vois pas le compteur s'agrémenter sur la face avant de l'appelant, juste la valeur finale qui est transmise...
Une idée de piste pour arriver à accèder au contenu du compteur ?
Merci
Résolu ! Accéder à la solution.
04-06-2022 12:51 PM - modifié 04-06-2022 12:54 PM
( utilise google traduction si tu ne comprends pas l'anglais )
You need to show us your VI. For example if the caller waits until the subVI is complete, it probably won't update the indicator unless terminal is running in a parallel loop
You could wire a reference to the indicator to the subVI and update the value in the subVI via a value property connected to that reference.
It is likely that there are much better solutions to whatever you are trying to do here.
04-07-2022 01:06 AM - modifié 04-07-2022 01:11 AM
La variable globale se trouve-t-elle dans la boucle while ou en dehors ? Elle doit évidemment être placée dans la boucle pour être actualisée à chaque itération.
Comme déjà indiqué par Christian (altenbach), il existe des solutions plus propres qu'une variable globale.
04-07-2022 01:53 AM - modifié 04-07-2022 01:55 AM
Hello,
Attached, are 2 pictures of my code. If originals VI files are needed, please tell me. I put comments with "#comment" heading.
You're diagnostic seems to be right, the global variable is updated only after the while loop (50Hz) is ending.
I only get the final value of "i" on the front panel (essai).
As said, i'm a beginner, does Labview integrates other mechanisms like variables passed by Address ?
What do you think ?
Many Thanks fo your help
04-07-2022 07:00 AM - modifié 04-07-2022 07:11 AM
Le problème est évident.
Dans Caller.vi, la fonction qui actualise le compteur de cycle est appelé. Ce sous-VI va actualiser ce compteur. Le problème est que cette variable globale n'est lue qu'une seule fois (d'ailleurs impossible de dire quand par rapport au reste du code dans cette Case Structure).
Le correctif le plus simple est celui mentionné par altenbach. Il faut générer une référence de l'indicateur Essai et puis transmettre celle-ci comme paramètre d'entrée au sous-VI. Cette référence permettra d'y définir la valeur de cet indicateur.
Compréhensible ?
04-07-2022 07:29 AM - modifié 04-07-2022 07:30 AM
Puisque cela ne demande que quelques minutes, voici un exemple basique.
VI appelant avec transmission de la référence de l'indicateur au VI appelé.
VI appelé avec définition de la valeur de l'indicateur par un noeud de propriétés.
le 04-07-2022 08:05 AM
Effectivement, il y a un step entre l'état de mes connaissance et ce fonctionnement là 🙂
Je viens de mettre en place le code équivalent dans mon application et je vois bien le compteur s'incrémenter au fur et à mesure.
Le passage d'argument par référence était donc la clé.
Avec mes remerciements
Arnaud
le 04-07-2022 10:46 AM
I very strongly recommend to rearchitect your entire code. While we cannot see most of it from a picture, there are serious issues when you stall the entire caller while running an extensive subVI, especially since the caller also has an event structure! You are placing gigantic dams into the dataflow! Your caller needs to be able to breathe!
Also the subVI code is very poorly written. Way too much duplicate code and way too much shuffling data around via value property nodes instead of shift registers. You are hammering the UI thread unnecessarily. If you would attach your VI, we can give you more specific advice.
le 04-08-2022 01:46 AM
Je ne peux que seconder les propos de Christian - un monstre LabVIEW 😂 - et je vous suggère de profiter de sa disponibilité pour vous aider à améliorer votre code. En plus d'obtenir un code plus propre, performant et facile à faire évoluer, cela sera l'occasion d'approfondir vos connaissances, en commençant par la notion de flux de données.