Discussions au sujet de NI LabVIEW

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

variable locale et sous VI

Résolu !
Accéder à la solution

Bonjour,

 

Je commence tout juste à utiliser les variables globales et les sous VI pour rendre plus clair mon VI principal. Je pense avoir compris leur fonctionnement et leur utilisation mais une fois le programme lancé, quand je change la variable globale dans mon VI principal, rien ne se passe quand le programme tourne dans le sous VI hors la variable globale est aussi dans le sous VI pour contrôler des actionneurs.

 

Je vous joins mon programme principal "montée en charge + rampe + sous VI", le sous VI "étape 1 rampe" et la variable globale "glissière"

 

Merci d'avance pour l'aide que vous pourrez m'apporter

Tout télécharger
0 Compliments
Message 1 sur 3
2 191 Visites
Solution
Accepté par l'auteur du sujet jerome_ino

Le problème que je vois est un cas typique de condition de course (race condition). L'utilisation de variables (globales ou locales) pour communiquer entre différents points d'un diagramme ou entre VIs est fortement déconseillée. Les variables globales devraient être utilisées seulement avec l'approche Écrite une fois, Lue plusieurs fois (Write Once, Read Many).

 

Dans votre diagramme, il est impossible de déterminer si la variable globale est écrite avant ou après être lue. Quand c'est possible, il faut utiliser des fils pour envoyer de l'information dans LabVIEW. Si une communication asynchrone est nécessaire, il faut alors utiliser des queues ou des events. L'utilisation de registre (shift register) peut remplacer les variables locales.

 

Dans l'exemple ci-dessous, est-ce que la variable Glissière est lue avant ou après avoir été écrite? C'est impossible à déterminer de façon sûre, et même qu'il est probable que l'ordre change d'une éxécution à l'autre. Notez que dans le cas présent, vous écrivez le contrôle Glissière à la variable Glissière et comme le contrôle Glissière n'est pas initialisé, c'est sa valeur par défaut 0 qui est utilisée. L'utilisation seulement du contrôle Glissière ici est l'approche appropriée. Éliminez la variable globale Glissière, connectez le contrôle Glissière du sous-VI est ça devrait fonctionner.

 

etape 1 rampe_BD.png

Marc Dubois
Message 2 sur 3
2 166 Visites

Merci pour la réponse et pour l'explication que vous avez pu m'apporter. J'ai remplacé les variables globales par de simple connexion et j'ai enlevé le maximum de variables locales

Message 3 sur 3
2 134 Visites