NI Home
Cart Achats | Aide
Hello Events Academic NI Developer Zone Support Solutions Products & Services Contact NI MyNI
You are here: 
NI Home > NI Developer Zone > NI Discussion Forums


Répondre
Active Participant
ouadji
Envois : 851
0 Compliments
Solution approuvée

Queue (entre 2 VIs)

[ modifié ]

Bonjour à tous,

 

petite question à propos de l'utilisation des Queues

 

Est-il possible de créer une Queue (Obtain Queue) et d'empiler (Enqueue Element) ... dans un VI

et de dépiler (Dequeue Element) dans un autre VI ?

 

Le problème est le passage de la référence de la Queue.

J'ai "résolu" la problème par une variable locale ... mais il me reste un problème de "timing" (flux de données)

C'est à dire que la variable locale est lue avant qu'elle ne soit écrite (par Obtain Queue)

Mon premier "Dequeue Element" se retrouve donc avec une référence de Queue invalide et stoppe.

 

J'ai résolu cela à ma façon. Je place une boucle d'attente dans laquelle je vérifie la validité de la référence.

 

ça fonctionne ... mais je doute fort que ce soit la "bonne façon" de solutionner cela.

 

Comment passer la réf. d'une Queue entre 2 VIs en étant certain que le VI "client" recevra la bonne référence ?

 

Merci à tous.

 

(Il s'agit d'un code "labo", juste pour mettre en évidence le fonctionnement d'une Queue)

 

original6.png

 

 

 

Active Participant
ouadji
Envois : 851
0 Compliments

Re : Queue (entre 2 VIs)

[ modifié ]

 

Je pense avoir trouvé nettement mieux.("il me semble")

L'avantage ici .. pas de boucle pour attendre une référence valide.

ceci dit, il existe peut être une solution plus appropriée.

Vos avis et remarques m'intéressent beaucoup.

 

ps: j'ai trouvé "un cas" ou une structure Event n'a pas besoin dun While.

Un While est même proscrire. (amusant ça)

 

Merci à tous.

 

 

original5.png

 

Member
yledieu
Envois : 124

Re : Queue (entre 2 VIs)

[ modifié ]

Tu n'as pas besoin de rajouter du code pour attendre la queue avant de démarrer la boucle while, il te suffit tout simplement de connecter la sortie de ta fonction "Obtain Queue" aux entrées de tes deux boucles, et l'attente se fera naturellement par le flux de donnée.

 

Pour transférer des éléments entre deux VIs à l'aide d'une queue c'est tres simple aussi, tu appele la fonction "Obtain Queue" dans ton VI principal (ou plus précisément le VI qui contient les deux sous-VI qui utiliseront la queue), et tu passe la référence de la queue à tes deux sous-VI par les connecteurs d'entrée.

Cordialement,
Yohann L.
Active Participant
Florent_A
Envois : 259

Re : Queue (entre 2 VIs)

Bonjour ouadji,

 

La fonction Obtain Queue, va commencer par vérifier s'il existe une FIFO qui a le même nom, et la créée si aucune n'a été trouvé (à condition que l'entrée create if not found? reste à sa valeur par défaut).

 

FIFO.png

 

J'ai tout mis dans un seul VI pour faire un seul snippet,mais le comportement reste le même dans 2 VIs appelés par une même instance d'application.

Bonne journée,

 

Florent A. - AE Manager - NI France

Active Participant
ouadji
Envois : 851
0 Compliments

Re : Queue (entre 2 VIs)

[ modifié ]

 

merci yledieu et Florent pour vos réponses.

 

yledieu : "il te suffit tout simplement de connecter la sortie de ta fonction "Obtain Queue" aux entrées de tes deux boucles"

oui, je sais, mais c'est justement ce que je ne voulais pas faire.

Mon but est de pouvoir utiliser une Queue dans un code ... Queue obtenue dans un autre code,

mais sans "liaisons" directes entre les deux.

"et tu passe la référence de la queue à tes deux sous-VI par les connecteurs d'entrée"

très intéressant, je ne savais pas, merci.


 

Florent :  "la fonction Obtain Queue vérifie si la Queue existe ... seul le nom suffit"

rien que le nom ? woaw !  j'adore :smileyhappy:

 

Petite question subsidiaire:

J'ai pas mal de doc sur LV, mais dans aucune je ne trouve ce type d'info.

Oui, j'ai vu l'entrée "create if not found" ... mais de là à en tirer la conclusion que seule le nom suffit ... bof, c'est hasardeux.

Quelle doc aurais-je du lire pour "tomber" sur la solution de Florent en toutes lettres (doc en français ou en anglais) ?

 

merci beaucoup pour votre aide.


 

 


Member
yledieu
Envois : 124
0 Compliments

Re : Queue (entre 2 VIs)


ouadji a écrit :

yledieu : "il te suffit tout simplement de connecter la sortie de ta fonction "Obtain Queue" aux entrées de tes deux boucles"

oui, je sais, mais c'est justement ce que je ne voulais pas faire.

Mon but est de pouvoir utiliser une Queue dans un code ... Queue obtenue dans un autre code,

mais sans "liaisons" directes entre les deux.


Ah ok, je n'avais pas compris ça, je pensais que c'était deux questions différentes

Petite question subsidiaire:

J'ai pas mal de doc sur LV, mais dans aucune je ne trouve ce type d'info.

Oui, j'ai vu l'entrée "create if not found" ... mais de là à en tirer la conclusion que seule le nom suffit ... bof, c'est hasardeux.

Quelle doc aurais-je du lire pour "tomber" sur la solution de Florent en toutes lettres (doc en français ou en anglais) ? 


 Dans l'aide contextuelle de la fonction "Obtain Queue", si tu clique sur "Detailed Help" tu as l'aide LabVIEW qui te l'explique :
"Use named queues to pass data between two sections of a block diagram or between two VIs in the same application instance. If you do not wire name, the function creates a new, unnamed queue reference. If you wire name, the function searches for an existing queue with the same name and returns a new reference to the existing queue. If a queue with the same name does not already exist and create if not found? is TRUE, the function creates a new, named queue reference."

 

Cordialement,
Yohann L.
Active Participant
ouadji
Envois : 851

Re : Queue (entre 2 VIs)

" Dans l'aide contextuelle de la fonction "Obtain Queue",

si tu clique sur "Detailed Help" tu as l'aide LabVIEW qui te l'explique : ....."

 

Oui, c'est vrai. J'avais lu cette phrase ... sans trop comprendre sa "portée".

 

C'est comme pour les meubles en Kit ... une fois que tu as terminé de le monter (2 jours)

tu te rends compte, que finalement, la doc était parfaitement claire. :smileywink:

 

merci yledieu

En consultant ce site, vous en acceptez les Conditions d'utilisation. Veuillez les lire attentivement avant d'accéder à une quelconque partie du site. Veuillez suivre ce lien pour en savoir plus sur la politique sur les droits d'auteur de ni.com.
Mon Profil | Confidentialité | Conditions d'utilisation | Contacter NI © 2011 National Instruments Corporation. All rights reserved.    |    Envoyer cette page Envoyer cette page