le 03-15-2018 05:55 AM
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?
Résolu ! Accéder à la solution.
03-15-2018 06:54 AM - modifié 03-15-2018 06:55 AM
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.
--Eric
Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.
le 03-15-2018 07:14 AM
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?
le 03-15-2018 07:23 AM
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
le 03-15-2018 12:35 PM
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 )
le 03-16-2018 03:23 AM
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,...)
04-07-2018 04:42 AM - modifié 04-07-2018 04:46 AM
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"
04-07-2018 10:49 AM - modifié 04-07-2018 10:54 AM
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.
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.
le 04-07-2018 12:09 PM
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.
le 04-11-2018 02:18 AM
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.