Discussions au sujet de NI LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

flux de données/multithreading (débutant)

Solved!
Go to solution

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.

 

 

 

 

0 Kudos
Message 1 of 9
(3,993 Views)

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

0 Kudos
Message 2 of 9
(3,978 Views)
Solution
Accepted by topic author ouadji

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

Cordialement,

Simon D.
CLA | Certified LabVIEW Architect
CTA | Certified TestStand Architect
Message 3 of 9
(3,974 Views)

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.

 

0 Kudos
Message 4 of 9
(3,970 Views)

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.

0 Kudos
Message 5 of 9
(3,964 Views)

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

CLAD / Labview 2011, Win Xp
------------------------------------------------------
Mission d'une semaine- à plusieurs mois laissez moi un MP...
RP et Midi-pyrénées .Km+++ si possibilité de télétravail

Kudos always accepted / Les petits clicks jaunes sont toujours appréciés
Don't forget to valid a good answer / pensez à valider une réponse correcte
Message 6 of 9
(3,962 Views)

 

Merci tinnitus pour ces précisions.

Je commence a y voir plus clair.

0 Kudos
Message 7 of 9
(3,955 Views)

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,

Message 8 of 9
(3,938 Views)

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)

 

0 Kudos
Message 9 of 9
(3,930 Views)