Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Modifier les variables d'un VI par un autre

Résolu !
Accéder à la solution

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.

Tout télécharger
0 Compliments
Message 1 sur 9
4 433 Visites

bonsoir,

 

post tes VIs en LV 8.5

Philippe B.
Certified Associate Developer / Dépt Moyens d'essais

www.ingenia-system.com
0 Compliments
Message 2 sur 9
4 432 Visites
sinon si tu veux modifier les variables d'un VI par un autre VI tu dois utiliser les variables globales.
Philippe B.
Certified Associate Developer / Dépt Moyens d'essais

www.ingenia-system.com
0 Compliments
Message 3 sur 9
4 431 Visites

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.

Message Edité par mioumiou le 05-29-2009 10:51 AM
Tout télécharger
0 Compliments
Message 4 sur 9
4 427 Visites

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

Message Edited by Mathieu Steiner on 05-29-2009 07:38 PM
Message 5 sur 9
4 422 Visites

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).

 

Tout télécharger
0 Compliments
Message 6 sur 9
4 399 Visites
Solution
Accepté par l'auteur du sujet Gazawik

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

Tout télécharger
Message 7 sur 9
4 388 Visites

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:

https://www.ni.com/docs/en-US/bundle/labview-api-ref/page/properties-and-methods/vi-server/generic/c...

 

 

 

 

 

Message 8 sur 9
4 383 Visites

Merci beaucoup J-M , je pense que je vais pouvoir faire ce que je veux avec ça !

 

  + ++

0 Compliments
Message 9 sur 9
4 334 Visites