le 04-13-2010 07:33 AM
Bonjour,
je fait appel à vos compétances pour savoir comment stopper un sous-vi de la manière la plus élégante possible.
En sachant que ce sous-vi est éxcuter en parrallèle, c'est qu'il n'est pas appellé dans le diagramme mais par open vi reference
Et que ces deux vi utilisent un event, avec la machine d'état jki software ???
Si quelqu'un à une idée ???
Je pensais à générer un évènement ???
Cordialement
le 04-14-2010 12:47 AM
Fiston wrote:Je pensais à générer un évènement ???
Salut,
Une bonne idée !
Si ça s'intègre mal, pense aux évènements dynamiques.
A+
04-14-2010 02:22 AM - modifié 04-14-2010 02:24 AM
Vous avez tous les outils à dispo d'après votre description.
Dans le cas ou le sous-VI est une interface utilisateur:
Comme vous ouvrez le sous-VI avec Open VI Reference, vous avez donc la possibilité d'utiliser la méthode FP.Close depuis l'appelant à partir de la référence.
Et dans le sous-VI, vous pouvez gérer l'évenement associé "Panel.Close?" avec un Discard=True et dans ce même event, vous renvoyer le sous-VI vers un cas Quitter propre de votre machine à états.
Si ce n'est pas une interface utilisateur, effectivement vous pouvez générer un User Event
le 04-14-2010 07:26 AM
Erratum:
Contrairement à ce que je croyais (et d'ailleurs, c'est la cata pour plusieurs de mes devs), la méthode 'FP.Close' sur la référence d'un sous-VI dynamique n'est pas interceptée dans le sousVI par l'event Panel.Close?.
Dans la doc LV, il est spécifié :
Note LabVIEW cannot generate a Panel Close event for a VI being viewed or controlled remotely. If you are viewing or controlling a VI remotely, LabVIEW can generate events only for controls, not for a VI or the entire application. ![]()
Vous voudrez donc bien m'excuser pour le mauvais conseil que j'ai proposé précedemment.
Si des experts passent par là et ont une combine pour sortir d'un sous-VI dynamique proprement (equivalent à Panel.Close? + Discard=True puis renvoi vers un cas quitter), avec sans rien ajouter à la structure event (c'est à dire ne pas ajouter d'event personnalisé), je suis preneur. 😉
le 04-14-2010 07:39 AM
le 04-14-2010 07:40 AM
Bonjour,
Il y'a un exemple très bien fait qui utilise les VI Server ici :
http://digital.ni.com/public.nsf/allkb/E38991F4A3892B6F86256E44004C5963?OpenDocument
Cordialement,
le 04-14-2010 07:47 AM
Oui effectivement très bonne exemple, mais ça je connais déjà !!!
Nous on parle de deux vi avec structure event.
Car cette méthode ne signale pas d'èvènement sur le bouton stop.
Cordialement
le 04-14-2010 08:47 AM
Dans mon cas concret, j'ai une appli assez importante qui présente une vingtaine d'interfaces prédéfinies brassant un ensemble de données mais représentées différemment suivant le contexte dans les interfaces. Parmi ces interfaces, il y en a une plus générique qui est un lanceur de plugins ou l'Utilisateur peut créer ses propres interfaces en ayant accès facilement aux données générales (techno wireless inside ;)).
Le seule contrainte que j'impose à l'Utilisateur lors de la création de ses interfaces, c'est que le code tourne en continu => i.e une boucle while mais je n'impose pas de condition particulière d'arrêt de la boucle (comme un bouton 'stop' par exemple) car j'arrête ces 'Plugins' par la méthode FP.Close. Par contre, comme je ne sais pas à l'avance le contenu de ces interfaces perso, je conseille vivement àl'Utilisateur de gérer une sortie propre du code en plaçant une structure Event avec un cas Panel.Close? et un Discard=True dans la boucle. Ca c'était valable si FP.Close était vu par Panel.Close? mais là, le choc, c'est pas vrai... ![]()
J'utilise LV8.5.1.
le 04-20-2010 02:52 AM
le 04-20-2010 03:54 AM
Bonjour,
tu as un exemple sur la manière de générer des évènements utilisateur avec la JKI state machine sur les forums JKI:
http://forums.jkisoft.com/index.php?showtopic=1347