le 10-27-2013 05:52 AM
J'aimerais pouvoir placer un "appel asynchrone" dans un sous-VI
et pouvoir utiliser ce "sous_vi_appel_asynchrone" avec en entrée ... des references de vi différents.
problème ! ...
un appel asynchrone demande une référence stricte ... donc cette référence correspond à un et un seul vi.
Comment faire ? Cela est-il possible ?
J'ai l'impression que "non" (par définition d'une référence stricte) ... mais ... LV est tellement vaste !
Merci à tous.
Résolu ! Accéder à la solution.
le 10-28-2013 02:47 AM
Hello ouadji,
Démystifions la notion de VI Strict 🙂
Il s'agit en fait un moyen de discriminer un type de VI parmi d'autres. Pour ça, on utilise le connecteur du VI. Donc pour tout VI qui aura le même connecteur, il sera possible d'utiliser la même référence stricte. C'est comme ça qu'on crée des architectures plug-in (souvent en utilisant un/des variant(s) pour avoir harmoniser les différents type de données à passer selon les différents VIs à appeler)...
Un bout d'exemple (même s'il utilise un appel par référence simple, le principe est le même.) : https://decibel.ni.com/content/docs/DOC-21092
Cdt,
Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.
le 10-28-2013 05:00 AM
Bonjour Eric,
Merci pour ton intervention.
Oui, j'ai cherché, et j'ai effectivement remarqué que si les VIs ont le même connecteur
(mêmes emplacements, mêmes type de données) ... c'est bon.
mais ...
Pourquoi bon dieu, faut-il définir le type de connecteur de façon "rigide".
Sur base de la Référence du VI (je parle de sa Ref simple, non-stricte) Labview pourrait en dynamique retrouver quel est son connecteur.
Il suffirait que LV "aille voir" les paramètres du dit VI avant de lancer l'appel asynchrone.
là il me reste une incompréhension.
Pourquoi ce besoin d'une définition rigide du connecteur dès le départ ?
à une Reference de VI (simple), correspond un et un seul VI, et donc un connecteur parfaitement défini.
Qu'en penses-tu Eric ?
le 10-28-2013 05:56 AM
le 10-28-2013 06:00 PM
Pour un appel asynchrone, LV a besoin de connaître "les types en entrée" lors de l'edition.
J'ai poussé le bouchon en proposant ceci
donc, placer un appel asynchrone dans un sous-vi et pouvoir rendre ce sous-vi totalement générique est impossible.
rideau !
10-29-2013 02:56 AM - modifié 10-29-2013 02:58 AM
Je crois que tu t'es répondu seul.
Considérons la fonction printf(). C'est mignon comme fonction, mais moi, j'ai aucune idée des paramètres à lui passer et leur type de données. En C, on a le prototype (connu du compilateur grâce au linkage). En LV, on a le spécificateur de type d'un VI.
Le seul cas que tu trouveras pour être complètement générique sera l'appel à la méthode Run VI. Cette dernière ne nécessite pas de spécificateur de type. Par contre, pour l'échange de données, on est obligés de fonctionner via des Ctr.Val.Set/Get, ou nouvellement, les fonctions "Control Set/Get by Index". Sinon, il est toujours bon de passer par des files d'attente ou des User Events pour la communication de données.
Quant à ton poste sur Idea Exchange, il paraît légitime, mais le souci est que c'est la référence d'un VI qui est obtenue grâce à un spécificateur et non l'inverse...
Cdt,
Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.
le 10-29-2013 05:03 AM
Merci Eric pour ce petit plus d'explication.
J'ai bien compris le "pourquoi" et le "comment" des choses.
Comprendre le "pourquoi" est pour moi une chose essentiel.
Comprendre uniquement le "comment" construit une connaissance statique,
comprendre le "pourquoi" permet d'extrapoler.