Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

dialogue VI sous-VI

Bonjour,

Certains vont peut être soupirer mais tant pis.

Ci-joints 2 VI avec "main.vi" et "pop".vi".

pop est un sous-VI de main.

pop permet de lire un son au format wav si une condition est vraie ; il contient 2 while.

exécuté seul, pop marche bien.

la condition est du type a > b => jouer le son sinon ne rien faire.

Je souhaite maintenant définir les valeur de a et b dans un VI principal à l'aide 2 potentiomètres et envoyer les valeurs à pop.vi qui est placé en sous-VI dans main.vi.

Ca ne marche pas. Je pense que c'est du à ma mauvaise compréhension de la notion de flux de données, que les valeurs de a et b ne sont lues qu'à la première (et unique) exécution de la boucle while dans "main.vi". Unique car le flux va dans les while du sous-VI et y reste. C'est ça ?

Bref, j'ai cherché à faire des choses avec "passage de références", "variables globales fonctionnelles".

Mais rien ne marche.

Le besoin est pourtant simple, me semble-t-il, et pourtant, me voilà perdu.

Queqlu'un à la clé ?

Merci.

0 Compliments
Message 1 sur 13
3 745 Visites

ok, j'ai vu quoi  Smiley heureux

Comment veux-tu que tes valeurs soient lues periodiquement puisque tu boucles dans le "pop" et pas dans le "main"

Regarde mes modifs dans le pop, parceque là ... il y avait quand même de grosses choses bien laides  Smiley surpris

regarde "musique_ver2" (fichier zip joint) ... essaye et reviens me dire quoi.

Message 2 sur 13
3 724 Visites

Merci Ouadji,

 

L'imbrication VI / sous-VI est ok, certes, mais ta solution remet sur la table un problème que "j'avais" résolu : dans ta solution, il faut "attendre" que la lecture du ficher son soit finie pour qu'une nouvelle comparaison "valeur" / "seuil" ait lieu.

D'où les deux while dans pop.vi, solution proposée ici : http://forums.ni.com/t5/Discussions-au-sujet-de-NI/Lecture-de-fichier-WAV/td-p/3572115

Ci-joint ton zip ; j'ai ajouté un connecteur au sousVI "pop.vi" pour afficher le message dans "main.vi". ; on voit bien que, pendant la lecture du son, si on passe la valeur en dessous du seuil, le message ne s'actualise qu'après la fin de la lecture du wav...

C'est embêtant ; et du coup je reviens vers toi !

0 Compliments
Message 3 sur 13
3 720 Visites

ok, "je vois", mais ...

et si pendant la lecture du son la comparaison se fait 100 fois ... avec 100 fois "true" ... tu veux que le son soit joué 100 fois d'affilée ? ou une seule fois ? seule le "texte" serait actualisé au rythme des comparaisons. J'ai besoin de précisions sur le comportement de l'ensemble, le texte, et le son.

0 Compliments
Message 4 sur 13
3 716 Visites

regarde un peu ce VI , "main.vi" , ci-joint en LV2012 . (il n'y a plus de "pop" pour le moment)

Fais le tourner, regarde si son comportement correspond à ce que tu recherches.

 

toto3.png

0 Compliments
Message 5 sur 13
3 698 Visites

Merci de l'intérêt porté à la chose.

J'ai un laser qui tape sur une photorésistance ; sa tension est acquise avec un boitier NI6009 + NIDAQ côté soft.

Si le faisceau est coupé, la tension acquise chute. C'est ça que je simule avec le potentiomètre "Valeur".

Si on coupe le faisceau laser à la main par exemple, je veux que ça joue un son => j'y arrive.

Mais un son peut être bref, "bop" par exemple, avec un fichier .wav qui dur le temps du "bop", 0,2 s par exemple,

Mais il peut être long, "booooop" par exemple sur 1 seconde.

 

Prenons le cas de la version longue, sur une seconde.

On coupe le laser à la main => début lecture.

On enlève la main au bout de 0,4 s => la lecture se poursuit jusqu'à la fin du .wav, soit encore les 0,6 s restantes.

 

Dans l'idéal :

=> Le retrait de la main arrête la lecture en cours du .wav.

Ceci nécessite donc déjà de connaitre à chaque instant la valeur de la tension (simulé par le potentiomètre "Valeur") pour la comparer au seuil à chaque instant.

=> Le maintien de la main ("valeur > seuil" tjrs vrai) fait que les lectures du son se succèdent.

 

Arrive du coup le second pb qui est de stopper la lecture du son. Mais, à la limite, je peux me contenter de jouer des sons courts et ça contournera ce soucis.

 

J'ajoute que j'ai plusieurs faisceaux et donc plusieurs sons et je trouve plus judicieux de travailler avec un VI principal avec include() de sous-VI, un sous-VI par son.

Et là, c'est le problème initial de mon POST, à savoir la communication de Valeur et Seuil définie dans le VI principal au sous-VI.

 

Ouadji, en fait, je vais tester ton VI avec des sons courts pour voir ce que cela donne parce que si ça se trouve, mon pb tend vers 0 avec des sons courts...

 

0 Compliments
Message 6 sur 13
3 690 Visites

- je vais cabler le code pour utiliser un sous-vi (pas un gros soucis)

- je vais réfléchir pour voir comment on pourrait arrêter le son quand on retire la main (moins évident ça)

0 Compliments
Message 7 sur 13
3 686 Visites

On voit bien dans ton VI que le champ message s'actualise en temps réel, sans attendre la fin du son. Mais le son continue quand jusqu'à son terme, ça ne l'arrête pas.

Ceci est un soucis car je viens de tester avec un son court (un "LA 440" qui dure 0,05s) et j'ai une discontinuité dans la succession des lectures => la solution "sons courts" ne fonctionne pas => pas de pot.

 

Je sais maintenant que je vais devoir travailler avec des fichiers son qui durent 2 secondes (je me fixe cette durée).

Cette obligation implique que je doive stopper la lecture dès que "valeur < seuil", d'où la nécessité de comparer en temps réel la valeur au seuil et, consécutivement, d'arrêter la lecture en cours (ce que je ne sais pas faire).

 

Ci-joint deux wav, un qui dure 50ms et un qui dure 2000ms.

0 Compliments
Message 8 sur 13
3 678 Visites

ok. Perso je n'ai jamais eu besoin de lancer un son et de devoir l'arrêter avant la durée prédéfinie au lancement.

donc ... je vais plancher sur le sujet. Je reviendrai si j'ai trouvé une (belle) solution.

Message 9 sur 13
3 674 Visites

Bon,

J'arrive à stopper la lecture du fichier son en cours de route. Chouette.

Est-ce bien propre tout ça ? Ca bug un peu (marche/marche pas, pas très stable)...

 

Je vais essayer de faire tout ça avec "main.vi" et un sous-VI, ce qui me ramène à l'autre problème, celui de la communication VI sous-VI...

 

Remarques ou autres solutions bienvenues...

 

0 Compliments
Message 10 sur 13
3 661 Visites