le 05-16-2019 04:36 AM
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
Résolu ! Accéder à la solution.
le 05-18-2019 10:57 AM
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.
le 05-21-2019 08:28 AM
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