le 03-01-2017 02:43 AM
Bonjour à tous,
Je souhaiterais ouvrir et exécuter un vi à partir d'un autre vi .
J'ai utilisé différents nœuds de commande pour essayer d'y arriver mais je me retrouve toujours devant un problème.
Si j'ouvre le vi et ne l'exécute pas c'est bon. Mais si en plus je l’exécute, il va le faire qu' une seule fois .Si je le ferme, à l'ouverture suivante, j'ai un message d'erreur.
Quelle est la meilleure solution pour ouvrir et exécuter à partir du vi principal ? Et quels sont les paramètres à rentrer dans le menu "exécution" du vi appelé ?
Merci pour vos infos.
Cordialement
le 03-01-2017 02:58 AM
Bonjour,
Tous dépend de ton besoin lors de l'exéuction de ton vi secondaire.
Tu peux l'intégrer dans une face avant secondaire, tu peux le faire afficher en fenêtre flottante.
Après lors de l'appel à ton VI, il faut faire attention aux attributs que tu donnes, qui vont dépendre de ton besoin.
Soit tu lances le VI, et tu poursuis ton programme sans attendre de réponse de sa part, soit tu le lances et tu attends un retour....
Si tu me fournis un VI d'exemple, je pourrais t'indiquer où se situe la source du problème. Sans cela, il va être compliqué de répondre à ton besoin, vu la complexité de la chose :S.
le 03-01-2017 08:27 AM
Merci Michael pour ta réponse.
Je vais te faire 2 vi qui représente ce que je veux faire.
En fait, j'ai presque réussi mais pour fermer le vi lancé il faut que je rajoute un bouton fermeture du vi qui ferme la face avant et fait un abandon . Par contre, si je fais ferme le vi par la croix de la fenêtre dans le coin à droite il plante....Et c'est ce que je voudrais faire !
le 03-02-2017 02:22 AM
Alors pour la fermeture du sous vi, il faut que tu regardes dans le VI en lui même.
SI tu as une structure condition, et que tu as des étapes précises à respecter lors de la fermeture de ton VI, tu peux rajouter une condition dans ta structure "face avant fermé", et en mettant "True" à rejeter, tu interdis la fermeture brutale de ton programme, mais tu peux faire une sortie de boucle propre.
Regarde mon VI d'exemple, fait le test en mettant "True ou False" au terminal rejeté et tu comprendras la différence de comportement 🙂
le 03-03-2017 07:43 AM
Merci Michael. Je ne connaissais même pas cette fonction sur la boucle évènement !
En fait, mon pb n'est pas tout à fait ça.
Quelle est la différence au niveau de LabVIEW et de la mémoire entre une fermeture par le bouton ( rond) rouge d'arrêt d'execution et l'arrêt par la croix en haut à droite du cadre ?
J'ai l'impression que mon pb est là
le 03-03-2017 08:32 AM
Bonjour,
A ma connaissance, aucune, les deux sont à proscrire :D.
Cela correspond à un arrêt brutal de ton programme à l'instant T, sans prise en compte d'une quelconque procédure d'arrêt de ton système (fermeture de communication, enregistrement de donnée, mise en sécurité du système,....).
Après, dans le cadre d'un appel à un VI dynamique, ce qui peut se produire, c'est que tu ne détruit pas correctement le handle d'appel de ton VI, et donc l'appel suivant, ton VI maître est en erreur, car il n'arrive plus à trouver la face avant que tu cherches à contacter car celle-ci n'est plus en mémoire.
Il faudrait que tu fournisses un exemple de code représentatif de ton problème pour réellement t'apporter une solution.
Cdt,
Michael
le 03-09-2017 01:05 AM
Bon j'ai pu régler ce problème.
Tu as raison Michael, je ne voyais pas que le vi restait en mémoire. Effectivement il faut l'effacer de la mémoire avant de l'abandonner et de demander ensuite une réouverture.
Le truc qui est assez déroutant c'est que ton vi peut être toujours en mémoire sans que tu le saches... si tu l'as mal fermé ! 🙂
Comment peux t'on vérifier que ce vi est bien effacé ?
le 03-09-2017 01:35 AM
Bonjour,
Pour ma part, dans le cadre d'un appel dynamique, je vérifie avant d'exécuter le sous VI, je regarde l'état du VI avant de le lancer, en vérifier s'il est en cours d'exécution, au travers du noeud de propriété
http://zone.ni.com/reference/fr-XX/help/371361N-0114/lvprop/vi_exestate/
En espérant que cela réponde à ton besoin.
Cdt,
Michael