Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Echange de données entre VI

Résolu !
Accéder à la solution

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   

0 Compliments
Message 1 sur 9
1 931 Visites

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

0 Compliments
Message 2 sur 9
1 920 Visites

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.

0 Compliments
Message 3 sur 9
1 899 Visites

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 

 

Tout télécharger
0 Compliments
Message 4 sur 9
1 887 Visites
Solution
Accepté par l'auteur du sujet Nono_Celduc

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 ?

0 Compliments
Message 5 sur 9
1 874 Visites

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

CallerCaller

 

VI appelé avec définition de la valeur de l'indicateur par un noeud de propriétés.

CalledCalled

0 Compliments
Message 6 sur 9
1 867 Visites

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

0 Compliments
Message 7 sur 9
1 855 Visites

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.

Message 8 sur 9
1 840 Visites

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.

0 Compliments
Message 9 sur 9
1 824 Visites