le 02-01-2012 07:16 PM
Bonjour à tous,
Je suis étonné que ce diagramme ne fonctionne pas.
Labview fonctionne par flux de données et multithreading. (si j'ai bien compris)
Mon étonnement vient de ceci : "A" ne s'exécute que si et seulement si "B" est stoppé (stop_2)
or, après la 1ere itération de "B", la "sortie de B" est définie,
et donc (à mon sens) permettrait à "A" de démarrer.
Il est clair que 2 threads sont ici indispensables.
Avec un seul thread on se retrouve en pur séquentiel et "A" ne peut démarrer si la boucle "B" est active.
Mais Labview est capable d'exécuter plusieurs choses en parallèles (multi-threading),
pour autant que les données soient présentes aux entrées (par flux de données)
... alors où est l'erreur ?
Merci à tous.
Résolu ! Accéder à la solution.
le 02-02-2012 12:28 AM
Bonjour Ouadji,
Vous avez raison quant au principe de base sous LabVIEW mais votre conclusion n'est pas tout à fait correcte.
Le PLUS important sous LabVIEW est le flux de données qui stipule que:
"un noeud ne s'exécute que si toutes ses entrées sont disponibles; et ses sorties ne seront accessible que lorsque l'exécution du noeud sera complète"
Et qu'est qu'un noeud? A peu près tous sauf les fils de liaison, c'est-à-dire les fonctions, les sous-VI et les structures telles que les boucles While ou For.
Dans votre cas, le fils de liaison entre les 2 boucles impose le flux de données entre ces 2 noeuds, ces 2 boucles. Seul l'arrêt de la première, permet
l'exécution de la seconde.
Bonne journée
Flo
le 02-02-2012 01:58 AM
L'idéal pour bien comprendre ces fonctionnements de flux de données est d'utiliser "hilglight execution" (l'ampoule) sur le diagramme, ce qui permet de visualiser l'enchainement des étapes.
Ici le fil vert est une sortie de la boucle B et ne sera donc disponible qu'une fois B terminée.*
Il existe plusieurs méthodes (avec leurs avantages et leurs inconvénients!) pour communiquer entre des boucles comme les variables locales, globales ou les FIFOs... Tout dépend de l'utilisation souhaitée, de la synchronisation ou non des boucles...
le 02-02-2012 02:56 AM
Merci pour vos réponses.
from SimonD:
" ... la sortie de la boucle B et ne sera donc disponible qu'une fois B terminée."
Je reste malgré tout étonné,
car dans "B", la led fonctionne parfaitement en accord avec le bouton poussoir
... et la donnée en sortie de "B" est identique à celle présente à l'entrée de cette led.
Ceci dit, je constate que Labview est un language très structuré,
et dans cette optique, je comprends.
Etant avant tout un programmeur en assembleur, j'avais pensé à l'idée de la variable globale.
(l'idée d'une variable "locale" est plus abstrait pour moi).
Avec une écriture (par B) et une lecture (par A) , pas besoin de synchronisation (pas de conflit)
Mais comment mettre en oeuvre cette variable globale, ou locale.
L'idée de cette manip est de mettre en évidence le multi-threading, rien de plus.
J'ai essayé de créer une variable gloale... mais elle possède une entrée OU une sortie, pas les deux.
Je vais continuer de chercher dans ce sens ... mais un coup de pouce des anciens est le bienvenu.
bonne journée et merci à tous.
le 02-02-2012 03:35 AM
Je pense avoir "trouvé" en utilisant une variable locale.
Par contre je n'y arrive pas avec une globale.
Serait-il indispensable d'avoir des VIs différents (ici 2) pour pouvoir utiliser une variable globale ?
Par contre, avec une locale, je la déclare et je l'utilise dans le même VI, apparemment sans soucis.
02-02-2012 03:50 AM - modifié 02-02-2012 03:51 AM
Bonjour,
une variable locale est disponible dans un même VI
une variable globale est disponible d'un vi à un autre
une variable " shift register " est propre à la boucle qui le contient
il existe aussi des globales fonctionelles fonctionnant sur le principe des shift register qui permettent la communication entre les vi
et d'associer des fonctions propres à la strucutre de données ce qui évite les accès concurrents
enfin les fifo qui permettent l'echange de données entres boucles d'un même vi ou non , et permettent la bufferisation
Cdt
Tinnitus
le 02-02-2012 04:07 AM
Merci tinnitus pour ces précisions.
Je commence a y voir plus clair.
le 02-02-2012 10:39 AM
Bonjour Ouadji,
Aussi, je vous encourage à prendre connaissance des éléments présents depuis notre site internet au sujet de LabVIEW.
Le premier lien permet d'avoir une vue d'ensemble sur la programmation graphique LabVIEW et en comprendre les rudiments. Le second permet de comprendre le fonctionnement du driver NI DAQmx et des fonctions nécessaires pour créer une application d'acquisition/génération de données.
1. Getting Started with NI LabVIEW Student Training
http://zone.ni.com/devzone/cda/tut/p/id/7466
2.Learn 10 Functions in NI-DAQmx and Handle 80 Percent of Your Data Acquisition Applications
http://zone.ni.com/devzone/cda/tut/p/id/2835
Autrement je vous invite à valider la solution pour que d'autres personnes puissent y accéder...
Cordialement,
Rémi D.
National Instruments France
le 02-02-2012 04:20 PM
Merci Remi.D pour ces conseils.
Je ne manque pas de docs sur Labview, ebooks, tutos, et j'en passe.
Mais entre "lire" une doc, et implémenter un code qui tourne (proprement), il y a souvent un ou deux parsecs d'écart.
La notion de "flux de données" est plus subtile qu'il n'y paraît à première vue.(pour la comprendre en finesse)
de plus Labview utilise un language de très haut niveau et très structuré.
Je suis bien loin de mon environnement habituel de l'assembleur.
Ceci dit, ce que je découvre est absolument passionnant.
(j'ai validé une solution)