le 05-29-2009 10:30 AM
Bonjour,
J'ai fait une application de simulation sous labview 8.6 (plusieurs VI qui fonctionnent en parallele et qui echangent des informations par variables globales).
Je souhaite ajouter une fonctione 'scénarisante'. Pour cela, il faut qu'un autre VI soit capable de modifier 'à la volée' les commande chaque 'simulateur'.
Par exemple, je veux pouvoir agir sur la commande de vitesse d'un simulateur, sans devoir relancer ce vi pour cela (car il effectue des operations en permanence).
Je pense qu'il faut passer par les references de vi, noeud de reference, mais j'ai quelques soucis.
Je vous propose deux VI symboliques de mon probleme.
Je désire :
- On exectue le VI_Processus.vi. Il travaille dans son coin (ici il fait juste une somme sur son entrée numérique).
- On execute le VI_Superviseur.vi. Il doit pouvoir aller modifier la commande numérique du Vi_Processus.vi sur demande. (j'ai mis cette commande en 'entrée' dans l'icone du VI_processus afin d'"esperer utiliser l'appel par reference).
Est ce la bonne voie ?
Je vous remercie.
Résolu ! Accéder à la solution.
le 05-29-2009 10:33 AM
bonsoir,
post tes VIs en LV 8.5
le 05-29-2009 10:36 AM
05-29-2009 10:50 AM - modifié 05-29-2009 10:51 AM
Bonjour,
Voila comment j'aurai fait ce que tu veux.
Le lancement de processus par le superviseur n'est pas forcé.
J'ai modifié tes 2 vi d'ailleurs. Ca te donnera l'idée général, à toi d'adapter tout cela.
Et dans le tableau de reference de commandes, l'ordre des commandes dépends de l'ordre dans le quel tu as construit ta face avant du vi processus.
Je sens que je suis pas très clair sur la dernière phrase.
Bref, si tu as des difficultés hésites pas à demander
Derniere petit chose, les commandes dont tu changes les valeurs à distances peuvent être soit des controls, soit des indicateurs.
le
05-29-2009
12:36 PM
- dernière modification le
04-28-2025
04:12 PM
par
Content Cleaner
Salut,
Evite à tout prix les variables globales... Elles sont un pied de nez au flux de données, et la porte ouverte aux race conditions (voir ici aussi)
Ton architecture doit rester simple. A mon avis, ton superviseur devrait envoyer les données aux processus via des FGVs ou action engines
En gros, les informations que tu as besoin de partager seraient stockées dans des VIs - un peu particuliers au premier abord, mais largement utilisés dans le cas de développement d'application - dont l'accès est protégé contre les accès multiples - VIs dits non-réentrants.
Une FGV - ou action engine selon les appelations - a au moins deux "méthodes". Seul ton superviseur ferait un "Set" - écriture de la variable - et tes processus feraient à chaque tour de boucle, un "Get" - lecture de la variable - avant de dérouler leur code "normal"
Si ça te semble coller à ton programme, et que tu as besoin de plus d'infos, n'hésite pas
Bon weekend
le 05-29-2009 04:12 PM
Bonsoir,
Je vous remercie pour vos reponses,
mioumiou, c'est exactement le fonctionnement que je cherchais. J'ai bien compris ce dont tu parles pour l'ordre du tableau. D'ailleurs, existe-il un moyen de visualiser les noms des controls plutot que de les appeler par un numéro ? Typiquement, j'ai une vingtaine de commandes potentiellement modifiables, si j'en supprime une, je ne veux pas que mon superviseur devienne faux. Or, en les appelant par leur numéro, tout est décalé lorsqu'en supprime une, et ça me parait difficile à modifier par un exterieur. non ?
Mathieu S… , j'ai souvent lu que les variables globales etaient déconseillées, c'est pourquoi je me refuse de tout faire en global, merci pour ces explications. Je ne connaissais pas le concept de action engine. Si je comprends bien, je me créé un vi pour chaque variable afin de le lire (get) ou l'écrire (set) en respectant l'architecture de flux.ça va allourdir (plein de vi en plus), mais si tu dis que c'est plus fiable.... je vais regarder. TU me conseillerais donc de dégager mes variables globales (jen ai utilisé) et de les remplacer par ces variables personnelles stockées dans des VI ? .
Phil_NTA : ci joint les VI modifié par mioumiou (ils montrent ce que je cherche à faire). Si tu as une idée pour permettre de modifier les commandes par un accès nominatif ? (comme quand on lit un cluster par noms).
le 05-29-2009 05:15 PM
Il te faut utiliser les "Invoke node" et oui, il est plus facile de prendre le nom des variables. J'ai apporté quelques petites modifications.
Jean-Marc
le
05-29-2009
05:39 PM
- dernière modification le
04-28-2025
04:13 PM
par
Content Cleaner
Si tu désires quand même connaître le nom et le type des contrôles d'un VI.
Jean-Marc
Pour ce qui est de ClassID:
le 06-02-2009 02:15 AM
Merci beaucoup J-M , je pense que je vais pouvoir faire ce que je veux avec ça !
+ ++