02-23-2012 04:07 PM - modifié 02-23-2012 04:11 PM
Bonjour à tous,
J'ai besoin d'un oeil "qui sait" pour me dire si je suis dans le bon ou pas.
Premier contact avec l'appel dynamique d'un sous-VI ... dans une boucle While.
J'ai rassemblé tout ce que j'ai appris jusqu'à présent, et pour le reste j'ai utilisé le bon sens.
ça compile et ça tourne ... c'est pas pour ça que c'est forcément ok.
voici mes questions (et d'avance un grand merci pour vos réponses et le temps consacré)
En image ci-dessous mon appel dynamique dans la boucle While.
Ma question concerne "open VI reference" et "close reference".
a) Est-ce comme cela que l'on fait ? (les 2 en dehors de la boucle, avec rétroactions)
(Je pense que c'est correct, mais sans confirmation cela reste une supposition.)
b) Est-il "d'usage" d'utiliser les appels dynamiques ?
Cela libère de la mémoire ... y a-t-il d'autres avantages ?
Quels sont les inconvénients ?
c) Dans "open VI reference", a quoi servent les entrées: (non cablées ici)
- application reference (locale)
- options ... quels sont ces fameuses options ?
Toutes vos remarques et conseils sont les bienvenus concernant cette pratique.
Merci beaucoup à tous.
Résolu ! Accéder à la solution.
le 02-24-2012 12:53 AM
Bonjour,
Pourriez-vous republier le snippet puisqu'une erreur semble s'être produite lors de sa publication ?
b) J'utilise cette technique pour appeler des VIs qui s'exécuteront en parallèle au reste du code (méthode Run VI avec l'entrée Wait Until Done définie à False) et avec lequels des informations seront échangées par exemple par le biais de queues.
c) Ces options sont décrites dans l'aide de Open VI Reference. Avez-vous besoin de plus de détails que ce qui figure dans l'aide ?
A la prochaine
02-24-2012 02:55 AM - modifié 02-24-2012 02:58 AM
Bonjour,
Il y'a également le VI "Asynchronous VI Call" (voir pièce jointe) qui semble plus adapté, mais qui n'existe que depuis LabVIEW 2011.
Si vous souhaitez executer des VIs en parallèle comme l'a dit JB, cela semble la meilleur solution si vous disposez de LabVIEW 2011.
Cordialement,
02-24-2012 03:59 AM - modifié 02-24-2012 04:00 AM
Merci Helmut et JB pour vos réponses.
Je reviendrai après avoir pris le temps d'analyser tout cela de prês.
Mais rapidement, je replace le snippet, comme demandé
PS:
Helmut, je vous ai posé une question dans le sujet "Evénement (déclenché par un booléen au VI)
actuellement 18eme dans la liste en première page du forum.
Quand vous avez 3min, votre réponse m'intéresse beaucoup.
le 02-24-2012 05:38 AM
votre avis ?
les 2 rétroactions sont-elles nécessaires ? (le snippet ci-dessus)
le feedback sur le cluster d'erreur ... pour moi, il est nécessaire,
mais le feedback sur la référence du VI ?
cette référence est relue à chaque itération, non ?
J'ai l'impression que la rétroaction sur la réf du VI n'est pas indispensable ...
qu'en pensez-vous ?
merci à tous,
le 02-24-2012 06:28 AM
bonjour, vous avez quelques questions en LabVIEW
je vous propose de faire la lecture
LabVIEW Style Checklist qui évoque Front Panel Checklist et block diagram Checklist et VI
et
Building Applications Checklist
et
LabVIEW Style Guide
A la question
ouadji a écrit : votre avis ? les 2 rétroactions sont-elles nécessaires ? (le snippet ci-dessus)le feedback sur le cluster d'erreur ... pour moi, il est nécessaire,
mais le feedback sur la référence du VI ?cette référence est relue à chaque itération, non ?J'ai l'impression que la rétroaction sur la réf du VI n'est pas indispensable ...qu'en pensez-vous ?
Le registre à décalage sur l'erreur : oui pour ne pas perdre l'erreur. Je ne sais pas ce que fait le code mais il faudrait gérer le stop de la boucle si erreur.
Le registre à décalage sur la référence : non car elle ne change pas (si elle change il faudrait la fermer). Dans une boucle for il y a un intérêt. Si la boucle ne s'éxécute pas; par exemple auto-indexation vide; alors la référence est perdue si pas sur un registre à décalage.
PS : Vous pouvez mettre le fil d'erreur droit; chaîner la référence entre les 2 propriétés value (celle en en écriture et celle lecture); gérer l'erreur sur les propriétés surtout si pas implicite avec passage via une référence;
Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion
MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group
02-24-2012 06:32 AM - modifié 02-24-2012 06:33 AM
Helmut O'Brian a écrit :
Le code d'Helmut est un bel exemple : ligne droite d'erreur; lecture de gauche à droite. Très propre. Du vrai code LabVIEW d'un vrai développeur qui a mon estime.
Juste une remarque je pense qu'il faut mettre un registre à décalage sur la gestion d'erreur de la boucle For car si une erreur arrive en entrée après 1000 boucles elle sera perdue.
Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion
MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group
02-24-2012 06:58 AM - modifié 02-24-2012 06:58 AM
le 02-24-2012 07:12 AM
Luc Desruelle a écrit :
Juste une remarque je pense qu'il faut mettre un registre à décalage sur la gestion d'erreur de la boucle For car si une erreur arrive en entrée après 1000 boucles elle sera perdue.
Je ne pense pas, il n'y a que si la boucle n'executait aucune iteration que la valeur serait perdue, mais dans le cas présent ce n'est pas possible puisque le nombre d'itérations est fixé à 1000, la ligne d'erreur va véhiculer 1000 fois la valeur d'erreur présente initialement sur le connecteur d'entrée de la boucle.
le 02-24-2012 07:29 AM
sur cet exemple il n'est pas necessaire de mettre le cluster d'erreur dans un registre puisqu' il
sert seulement à sequencer le code.
Si dans la boucle l'erreur était utilisée il serait alors nessaire de la memoriser d'une fois sur l'autre via le registre.
Cdt
Tinnitus