03-30-2013 08:05 PM - modifié 03-30-2013 08:10 PM
suite de la petite histoire ( from here )
Un VI "Target" ... c'est une FGV (Get/Set) ... rendue totalement polymorphe par le "monitoring" du code "Main"
but de ce post:
montrer/échanger ... avoir l'avis des Anciens, toute critique est la bien venue (+ ou -)
la manip :
1) lancer le VI Main
2) en parallèle, ouvrir le VI Target ... et jouer avec l'entrée et la sortie de cette FGV (entrer n'importe quel type ... quelques types sont prévus en démo)
3) se rendre compte que cette FGV est full polymorphe.
une fois "cablée" avec le type choisi, on peut la faire tourner ... Set/Get
attention ! : ne pas stopper "Main" avec le bouton "Abort" ...toujours avec "son" propre STOP (sur son FP)
PS:
1) Le "Clear Error" (dans "Target") est placé là pour éliminer l'erreur si on "run" le vi Target en "Get" juste après un changement de type.
Prochaine étape :
J'aimerais bien placer le code de "Main" dans un XControl (détourné de son rôle premier) pour qu'il soit sur le BD de "Target".
Un XControl est, en effet, la seule façon d'avoir du "code qui tourne" en mode édition sur un BD.
La seule façon ... heuuu ... mis à part mettre tout ça dans un XNode (pas bien, on peut pas faire ça)
Résolu ! Accéder à la solution.
le 04-03-2013 05:18 AM
Bonjour ouadji,
J'irai plus voir du côté du Quick Drop ou du JKI Right Click Framewrok, voir même des VI polymorphes avec l'option Allow Polymorphic VI to Adapt to Data Type.
04-03-2013 10:13 AM - modifié 04-03-2013 10:14 AM
@Benjamin ... "VI polymorphes avec l'option Allow Polymorphic VI to Adapt to Data Type"
Un VI Polymorphe ne sera jamais plus que ce qu'il est ... c'est à dire une librairie d'instances reprenant chacune un type défini.
La fonctionnalité "Adapt to Data Type" autorise simplement le Polymorphe à chosir lui-même l'instance ... parmis celles implémentées.
Cela ne rend pas le Polymorphe capable de "s'adapter" à n'importe quel type.
Les VIs Polymorphes sont même à l'origine ma petite recherche ... comment aller "plus loin" ?
Ce Polymorphisme par scripting est sans conditions,
à l'entrée de ma FGV, je cable aussi bien un booléen, qu'un U32 ... ou qu'un Array à 17 dimensions
C'est un polymorphisme totale, inconditionnel ... identique à certaines fonctions natives de LV.
le 04-03-2013 10:26 AM
Je n'ai pas dit que le VI polymorphe faisait la même chose que ce que tu essaye de faire mais juste une petite recherche àa faire, ne sachant pas que ton idée partait de là.
Par contre regarde le Quick Drop et le Right Click Framework pour remplacer le XControl. Je trouve ces 2 solutions plus efficaces et éléguantes.
04-03-2013 10:34 AM - modifié 04-03-2013 10:35 AM
Effectivement, j'ai trouvé des choses intéressantes du côté de "Quick Drop". (Merci Benjamin)
Ceci dit, je reste (quasi) persuadé que le must du must pour l'objectif recherché est le XNode.
Mais là ... je n'ai pas encore trouvé la réelle "porte d'entrée"
Pour le moment j'ai placé mon code dans un XControl.
Je place ce XControl sur le BD de mon VI Target ... et il le rend totalement polymorphe. (avec Target en mode édition)
Il faut aussi préciser que mon but est le plaisir de "trouver" (de programmer) ... la finalité n'est qu'une récompense, sans plus.
Merci pour ton aide Benjamin.
le 04-03-2013 10:46 AM
En effet, le XNode répond exactement à ce que tu cherche à faire mais malheureusement c'est une technologie que NI n'a pas ouverte (il te faut une licence spéciale et certains token dans le INI).
Tu peux créer ton propre plug-in pour le Quick Drop mais cela ne fera pas l'adaptation en live comme tu le désire.
le 04-04-2013 02:25 AM
ouadji a écrit :
Ce Polymorphisme par scripting est sans conditions,
à l'entrée de ma FGV, je cable aussi bien un booléen, qu'un U32 ... ou qu'un Array à 17 dimensions
C'est un polymorphisme totale, inconditionnel ... identique à certaines fonctions natives de LV.
Hello,
Je ne vois pas comment ton VI de scripting serait "total". Il te faudrait pour ça avoir à ta disposition tous les types de données possibles imaginables de LabVIEW (ça inclut toutes les références, objets, clusters et tableaux possibles)... Pas si simple !
Le XNode t'aidera dans la théorie, mais dans tous les cas on ne peut pas changer le code d'un XNode à l'exécution pour lui faire renvoyer un type de données défini (bien qu'ils puissent s'adapter à divers types grâce à une capacité spéciale, mais ce sont deux choses différentes), et malheureusement on ne sait jamais dire avant l'exécution quel type de données transite sur un fil, même en utilisant un variant... LabVIEW est fortement typé, et c'est vrai que c'est un peu dommage 😉
Cdt
Eric M. - Senior Software Engineer
Certified LabVIEW Architect - Certified LabVIEW Embedded Systems Developer - Certified LabWindows™/CVI Developer
Neosoft Technologies inc.
le 04-04-2013 04:35 AM
mais si ...
références, objets, clusters et tous les tableaux possibles ... bien sur, et un tableau à 21 dimensions aussi si tu veux.
Je termine et je poste ça Eric, tu pourras "voir".
J'ai mis le code qui gère le polymorphisme dans un XControl. (sur le BD de Target.vi) ... ça fonctionne tip-top.
Dernier petit soucis, je n'arrive pas à stopper ce XControl quand je ferme "Target.vi".
Mon XControl continue de tourner même après la fermeture de Target.
Comment arrêter un XControl ? Possède-t-il une référence indépendante de son vi "parent" ?
Je cherche ... je vais trouver ça
le 04-04-2013 04:58 AM
Une instance spécifique de ton XControl est dans ton VI target. Après sans ton code je ne vois pas trop comment t'aider.
04-04-2013 06:33 AM - modifié 04-04-2013 06:33 AM
Quand je ferme le "main" (Target_C.vi) ... le XControl reste actif en mémoire (??)
1) ouvrir LV
2) ouvrir "Traget_C.vi"
La "led" du XControl clignote .. le XControl est en train de "monitorer" le Main (Target_C).
"Jouer" avec l'entrée de la FGV (le Tunel "IN" en rouge) ... changer de type (comme on veut) ...
La FGV est polymorphe, on peut raccorder en sortie un "indicateur" du même type que celui présent à l'entrée ... pas de "broken" !
Pendant toute la manip, Target_C.vi est en mode édition.
Mais quand je ferme Target_C.vi ... le code du XControl reste actif.
Si j'ouvre "facade.vi" du XControl (après la fermeture de Target_C.vi) ... facade.vi est en mode "run" (pas en mode édition)
Attention :
avant de fermer Target_C.vi, toujours activer le bouton STOP (du XControl)
avant de fermer Target_C.vi .. la led du XControl ne doit plus clignoter.
(en faisant cela, le XControl "re-configure" pour la prochaine ouverture de Target)
c'est un code prototype, cela n'a rien de "release"