Discussions au sujet des autres produits NI

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

passage de reférence dans un sous vi

Bonjour, peut être la question a déjà été posée, mais je ne trouve pas ma réponse.

En fait je dois contrôler 140 sorties indépendantes.

Je boucle sur un tableau avec 140 temps, et j'appel autant de sous vi qui m'activent chacun une sortie aussi longtemps que souhaité.

Je dois donc passer pour paramètres à mon sous vi le temps et la sortie en question, mais j'aimerais aussi pouvoir les arrêter (les sous vi) par un commande unique sur mon vi appelant.

Pour tout ça, je ne vois que le passage de paramètres par variables globales, mais je lis un peu partout que c'est déconseillé chez labview, alors je voudrais faire un passage de paramètre par référence.

Et c'est là que ça se complique.

0 Compliments
Message 1 sur 8
4 547 Visites

Bonjour,

 

Vous trouverez toutes les informations nécessaires pour comprendre comment bien utiliser les références et les noeuds de propriété dans ce document:

Control References: Overview

 

Cordialement,

Olivier L. | Certified LabVIEW Developer


0 Compliments
Message 2 sur 8
4 524 Visites

J'ai pas tout lu, mais il semble que cette explication s'applique à des sous-vi appelés directement. Or moi je dois appeler jusqu'à 140 fois le même sous-vi (en parallèle), avec des paramètres différents.

Il me semble donc que je suis obligé de faire cette appel de sous-vi par référence. Je ne peu donc pas passer mes paramètres directements (que ces paramètres soient des références ou sous n'importe quelle autre forme).

En fait mon vrai problème est de passer des paramètres à un sous-vi appelé par référence, sans utiliser de variables globales. Est-ce possible?

0 Compliments
Message 3 sur 8
4 520 Visites

Nicolas,

 

Je n'avais pas compris votre besoin ainsi lors de votre premier post.

Pour avoir accès aux paramètres d'entrée/sortie d'un VI appelé dynamiquement, vous pouvez utiliser le noeud d'appel par référence.

Je vous invite à regarder le document "Differences Between Calling a VI with an Invoke Node and Calling a VI with a Call by Reference Node... ainsi que les liens qui y sont rattachés.

 

Cordialement,

Olivier L. | Certified LabVIEW Developer


0 Compliments
Message 4 sur 8
4 515 Visites

Merci pour ces liens, je les avais déjà vus, le problème est que le noeud d'appel par référence ne permet pas (de ce que j'en ai vu) de lancer simultanément plusieurs vi, il faut attendre que le 1er appel soit fini pour lancer le 2eme.

Un autre renseignement cela dit : est-ce dangeureux de lancer 140 vi en même temps, je n'ai pas trop idée des ressources que ça peut prendre?

0 Compliments
Message 5 sur 8
4 511 Visites

Bonjour,

C'est juste pour répondre à l'envoi des paramètres du sous vi sans passer par une variable globale.

Si tu as la reference de ton sous vi, tu peux récupérer la référence de ses commandes sur la face avant, et donc imposer des valeurs à ces commandes (faut juste pas se tromper dans toutes les references de commandes :p).

 

je te met en image le code pour récupérer ces references de commandes.

 

Par contre pour ta derniere question, je sais pas trop, J'ai déjà dû executer 2 ou 3 fois le même  sous vi en meme temps, et je n'ai pas vu de probleme particulier, juste que LabVIEW créé des copies de ce vi. Avec 140 fois le meme sous vi, je suppose qu'il doit y avoir 140 fois plus de memoire utilisée, mais si tu en as assez de memoire sur ton pc, pourquoi te gener.

 

 

0 Compliments
Message 6 sur 8
4 508 Visites

C'est exactement ce que je cherchais.

Mais bien sur un autre probleme, qui pour le coup me parait assez étonnant, se pointe.

Je vais essayer d'être le plus clair possible (l'envoi du programme est complexe car j'ai beaucoup de vi en dépendance) :

   Un vi (A) qui - ouvre une référence d'un autre vi (C) sans l'executer,

                      - execute un vi (B) en lui passant "la référence de C" en parametre.

   Le vi B   - teste l'état de C et le lance s'il n'est pas déjà en exécution,

                - attend (boucle while) une certaine valeur d'un indicateur de C.

 

Le probleme vient de la référence de C. Le vi B la reconnait bien, lance le sous-vi C, mais au bout d'un certain nombre d'itération (variable, entre 4000 et 7000 à priori), ne reconnait plus la référence:

                                   "L'erreur 1026 s'est produite à : Nœud de méthode dans irrigationAutomatique.vi:3

 

                                    Raisons possibles :
                                    LabVIEW:  Référence du VI incorrecte."

 

alors que le vi C est toujours en cours d'execution.

Autre phénomène paranormal : si je lance le vi A en exécution détaillée, tout fonctionne...

Voilà, j'ai fait de mon mieux pour expliquer ce problème "étrange", à savoir que le vi C est lancé sans suppression automatique de la référence.

Si quelqu'un a comprit mon problème et sait comment une référence peut s'autodétruire, ça m'intéresse.

0 Compliments
Message 7 sur 8
4 428 Visites

J'ai trouvé une solution, je ne l'explique pas plus mais ça marche.

Je met la référence au vi C en dur dans le vi B, et il n'y a plus de problème.

Peut être un paramètre a-t-il une durée de vie limité?

0 Compliments
Message 8 sur 8
4 419 Visites