le 05-26-2009 08:37 PM
Je joins un exemple (VI principal et VI1) mais j'ai quelques problèmes à les sauvegarder en LV8.0 (avertissement). Vous devez faire deux copies du VI1 en les renommant VI2 et VI3. Si vous n'arrivez pas à les faire fonctionner, voici l'idée.
1) C'est le VI principal (votre VI menu) qui ouvre par réréfence tous les VI secondaires et transmet à chacun d'eux sa propre référence. Ainsi chaque VI secondaire peut rappeler le VI principal à l'aide de la référence "Refnum de VI principal" (VI principal Image 1).
2)Chaque VI secondaire possède la variable "VI refnum []" (array de ref number) et le VI principal écrit par référence, dans chacun de ces VI secondaires, la liste des références de tous les VI secondaires (VI principal Image 2). Maintenant, il est possible pour n'importe quel VI ou VI secondaire d'appeler le VI principal ou les autres VI secondaires que vous désirez (tout le monde connait tout le monde).
3) Lorsque vous êtes dans un VI secondaire, VI3 par exemple, et que vous désirez passer au VI suivant vous devez être en mesure de connaître sa position dans la variable "VI refnum []". Vous utilisez pour cela la fonction Search 1D Array et l'élément que vous cherchez est la référence du VI3 "This VI" (VI1, 2 ou 3 Image 1 et VI1, 2 ou 3 Image 2). Vous connaissez la position du VI3 dans "VI refnum []" et par conséquent la position de la référence du VI secondaire précédent ou suivant. Si vous désirez revenir au VI principal(votre VI menu), vous avez aussi sa référence.
Jean-Marc
le 05-26-2009 08:38 PM
le 05-26-2009 08:40 PM
le 05-26-2009 08:53 PM
Comme je l'avais mentionné dans mon premier post, cette technique utilise plus de mémoire vive (car tous les VI sont ouverts en même temps). On ne ferme jamais un VI (on le rend invisible- hidden), sinon la référence d'un VI que l'on a fermé devient non valide. Les VI secondaires sont fermés par le VI principal lorsque l'on quitte le VI principal.
Jean-Marc
le 05-27-2009 07:34 AM
Désolé,
Il était un peu tard lorsque j'ai écrit ma dernière réponse. La partie raturée est fausse:
"On ne ferme jamais un VI (on le rend invisible- hidden), sinon la référence d'un VI que l'on a fermé devient non valide."
Comme nous avons sélectionné "auto dispose refence = false" (pour les VI secondaire) alors, les références seront valides tant qu'elles ne seront pas fermées par le VI principal ou, il faut que je vérifie, mais je n'ai pas le temps actuellement, que le VI principal n'est pas fermé.
Vous pouvez aussi ouvrir les VI au fur et à mesure: dans le VI principal vous ouvrez seulement les références.
Lorsque vous ouvrez un VI secondaire, à partir du VI principal, vous transmettez la référence du VI principal et "VI refnum[]". Naturellement à chaque fois vous devez vérifier si le VI est déjà ouvert. Si un VI n'était pas déjà ouvert alors il faut aussi lui transmettre les références.
J'ai déjà utilisé quelque chose de semblable, mais j'avais seulement six VI et c'était plus simple de tous les ouvrir.
Jean-Marc
le 05-27-2009 09:12 AM
Bonjour Jean-Marc,
Merci beaucoup pour toutes vos réponses. J'ai ainsi réussi à faire ce que je voulais, mais il me reste un petit détail à régler, c'est que lorsque je crée un exe, les sous VI appelés ainsi n'apparaissent pas. J'ai du oublier une option mais je ne vois pas laquelle. Avez-vous une idée ?
Merci d'avance.
Ln
le 05-27-2009 09:30 AM
Je ne me rappelle plus ce qu'il faut faire dans LV8.0 mais dans 8.6 il faut que tout les VI que l'on appelle par référence soient "Always included - désolé, interface anglaise".
Votre VI Menu sera donc le "Startup VIs" et les autres VI seront "Always included".
Jean-Marc