|
|||||||||||||
03-09-2012 11:31 AM - modifié 03-09-2012 11:39 AM
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)
Résolu ! Accéder à la solution.
03-09-2012 04:36 PM - modifié 03-09-2012 04:40 PM
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.
03-10-2012 02:03 AM - modifié 03-10-2012 02:07 AM
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.
le 03-10-2012 02:34 AM
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).
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
03-10-2012 04:10 AM - modifié 03-10-2012 04:14 AM
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 ![]()
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.
le 03-12-2012 03:57 AM
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."
le 03-12-2012 04:17 AM
" 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. ![]()
merci yledieu
Mon Profil | Confidentialité |
Conditions d'utilisation |
Contacter NI
© 2011 National Instruments Corporation. All rights reserved. | Envoyer cette page
|
||

Envoyer cette page