Discussions au sujet de NI LabVIEW

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

Communication entre vi appelant et appelé par référence

Résolu !
Accéder à la solution

Bonjour,

 

Je souhaite faire communiquer deux vi. Le premier est un vi appelant et le second un vi appelé par le vi appelant.

Je ne souhaite pas mettre de connecteur sur le vi appelé et je ne souhaite pas utilisé de FGV ou File d'attente entre les deux vi.

Ce que je souhaite faire c'est de mettre sur le diagramme du premier le vi appelé et qu'ils puissent communiquer entre eux.

 

Avez-vous une idée sur la manière dont je peux procéder? avec des ref d'application?

0 Compliments
Message 1 sur 11
6 052 Visites
Solution
Accepté par l'auteur du sujet TakSaphir

Pourquoi pas de file d'attente? Que fait le VI appelé ?

 

Gros guess : s'il s'agit d'un VI de monitoring ou d'espionnage du VI appelant (du coup, il faut qu'il soit générique), utiliser le VI serveur est la meilleure solution. Une approche simple pour récupérer la référence au VI appelant est de passer par la fonction Call Chain, le second élément du tableau est le nom du VI appelant.

 

GetRefFromCallee.png

 

 

 

 

 

--Eric

 

 

Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.

0 Compliments
Message 2 sur 11
6 035 Visites

Bonjour Eric,

 

Justement ce que je cherche à faire, c'est de communiquer avec le vi appelant de manière générique. Sans passer par l'initialisation de variables globales ou FGV. Le but étant de ne rien déclarer de commun entre les deux vi.

 

Du coup, pour reprendre ma question initiale. est-il possible de faire un passage de données ou référence de file d'attente via les refnums d'application? un peu sur le même principe que vous citez?

0 Compliments
Message 3 sur 11
6 030 Visites

C'est bon j'ai trouvé la solution. Effectivement en passant comme vous avez décrit par les références de l'application je retrouve mes petits.

 

Merci Eric

0 Compliments
Message 4 sur 11
6 022 Visites

Ta question/code m'interpelle. Je serais intéressé de savoir quels "petits" tu as pu récupérer via la Ref du VI appelant ... et quel est le but recherché (si cela est "possible" bien entendu Smiley heureux )

0 Compliments
Message 5 sur 11
5 998 Visites

Si vous voulez je cherche à communiquer entre deux vi (appelant et appelé) sans forcément connaitre à l'avance les variables (Queue, Digital, String,...) et sans passer de FGV, Variables, connecteurs entre les deux.

Je souhaitais de manière dynamique récupérer des références Queue par exemple de mon appelant. 

 

Le but de tout ça est de coller le subvi dans le diagramme de l'appelant et que la communication s'établisse sans configuration (init,...)

Message 6 sur 11
5 978 Visites

salut Tomaks,

juste en vitesse ...

la Ref via un noeud de rétroaction sur le type ... ça, c'est malin ... j'adore  (kudo).

Il me "semble" que tu connais Saphir ... ça "se sent"  Smiley tirant la langue

 

panel.jpg

Message 7 sur 11
5 824 Visites

re,

 

Je remarque un soucis de "flux de données" dans ton code. Dans ton "Main" tu places ton subVI de manière "flottante". Or, dans ton subVI tu lis la valeur de l'indicateur "queue" (par scripting) qui se trouve dans le Main. Encore faut-il que cet indicateur "queue", dans le Main, ait reçu son data. Ton code fonctionne ... oui ... mais un peu par hasard. Rien ne te permet de dire que l'indicateur "queue" aura reçu sa donnée "avant" que le subVI s'exécute. Oui, peut-être ... ou pas ! D'ailleurs le code ci-dessous ne fonctionne pas.

 

panel.jpg

 

La fonction "enqueue element" dans ton subVI génère un code d'erreur 1 ... input paramètre invalide (c'est normal !).

et en plaçant ton subVI "flottant", la probabilité que ton code s'exécute (d'un point de vue timing) comme le code ci-dessus est tout sauf nulle. Pour avoir un code fiable à 100%, tu dois être certain que l'indicateur "queue" aura reçu sa valeur avant que subVI ne s'exécute.

 

Le code ci-dessous à une fiabilité de 100%. Là, on est certain du timing.

J'ai utilisé une structure séquence ... il y a d'autres façons d'établir une liaison de flux entre Main et subVI.

 

panel.jpg

 

0 Compliments
Message 8 sur 11
5 810 Visites

voici une version du sous-VI qui autorise de le placer "flottant".

C'est le sous-VI qui se charge de vérifier que le data "queue" est bien une Ref valide.

0 Compliments
Message 9 sur 11
5 801 Visites

Salut Pierre,

Oui effectivement, il y potentiellement un problème de flux de données. C'était un VI de test :P. Je placerai le tout dans une machine a états een faisant attention aux flux ;). Mais en tout cas merci de ton implication à vouloir améliorer le code.

 

Thomas.

0 Compliments
Message 10 sur 11
5 734 Visites