Discussions au sujet de NI LabVIEW

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

Probleme buffer de lecture

Résolu !
Accéder à la solution

Bonjour,

 

J'essaye de communiquer par laison série avec un appareil avec Labview. J'utilise le VI serial read and write des exemples.

 

Lorsque j'envoie une commande, je n'ai pas toujours de réponse... Alors que je devrais toujours en avoir même en cas de problème.

 

Parfois, j'obtiens une réponse dans le buffer de lecture mais elle n'est pas complète. Je n'ai que la première ligne...

Et d'autres fois, si j'insiste en envoyant plusieurs fois à la suite la commandes,  j'obtiens cette erreur:

L'erreur -1073807252 s'est produite à : VISA Read dans VISA Test.vi

Raisons possibles :

VISA: (Hex 0xBFFF006C) Une erreur de dépassement s'est produite en cours de transfert. Un caractère n'a pas été lu par la carte avant l'arrivée du caractère suivant.

Mais je pense que c'est que j'envoie trop de fois la commande.

 

J'ai testé les parametres de communication (bauds, bits, stop etc...) et les commandes avec Termite, cela fonctionne parfaitement.

 

Quelqu'un peut il m''aider?

 

 

 

 

0 Compliments
Message 1 sur 14
5 550 Visites

Le caractère de terminaison que tu utilises est Retour de chariot (13) et celui par defaut de ton sous-VI 'Configure serial port', est Line feed (10). Branche une constante 13 sur 'termination char'.

Message 2 sur 14
5 541 Visites

Merci mais cela ne change pas grand chose...

 

J'ai toujours une partie du message dans le buffer de lecture qui est coupé.

0 Compliments
Message 3 sur 14
5 524 Visites

Je viens de trouver ! Pour mon probleme de buffer de sortie il fallait y mettre un noeud de retroaction pour enregistrer toutes les trames!

 

Par contre maintenant j'ai un nouveau soucis. Si j'envoie plusieurs commandes à la suite, ma fenetre de lecture sur la face-avant est  vite remplie. 

 

- Comment faire pour la vider entre chaque commande?

- Et comment voir les résultats d'une commande qui envoit des trames en continu? Est ce possible d'avoir un buffer de sortie déroulant?

 

Merci

0 Compliments
Message 4 sur 14
5 518 Visites

Bonjour,

J'ai modifié ton programme pour répondre à ton premier besoin.

 

 

Pour ton deuième problème, il te suffit de laisser tourner tourner ta boucle, en l'état, il viendra remonté des informations présentes à la fréquence de raffraichissement de ta boucle.

 

Cdt,


Michael

“En science, la phrase la plus excitante que l'on peut entendre, celle qui annonce des nouvelles découvertes, ce n'est pas "Eureka" mais c'est "drôle"
Isaac ASIMOV
Message 5 sur 14
5 514 Visites

Merci beaucoup! Cela regle mon 1er probleme.

 

Par contre je ne comprends pas ta réponse pour le 2eme soucis.

Si je laisse tourner la boucle, la fenetre du buffer de lecture se remplit entièrement et au bout d'un moment je ne vois plus les dernières trames.

 

 

0 Compliments
Message 6 sur 14
5 512 Visites

Salut Marcelito,

 

Sinon, tu peux tout simplement cliquer droit sur ton buffer de lecture en face avant -> Propriété -> Cocher "Afficher la barre de défilement verticale".

 

Ainsi, tu auras toutes les réponses reçues durant tout le temps ou le VI était en Run...

 

J'espère que ça répond à ton souci !

Bilsix.
0 Compliments
Message 7 sur 14
5 506 Visites

Merci mais la réponse de mon appareil est trop rapide... 1 trame toutes les 20 ms en continu...

J'ai pas le temps de descendre le curseur en bas de la fenetre...

Il faudrait une lecture inversée dans la fenetre du buffer.

 

 

 

0 Compliments
Message 8 sur 14
5 497 Visites

En fait je m'égare un peu avec cette histoire d'affichage...

 

Mon problème actuellement est de pouvoir lancer une commande et de pouvoir récuperer la réponse entièrement.

La plupart des messages de sortie se termine par $EOT ou $KO

 

J'ai donc remplacé mon bouton stop de la boucle while par une comparaison de chaine de caractère du buffer avec les chaines $EOT ou $KO

 

j'obtiens bien toutes les trames mais mon VI ne s'arrete pas tout seul.

 

Comment cela se fait il?

 

Merci encore

 

0 Compliments
Message 9 sur 14
5 493 Visites

Hmm, la fonction "Comparaison" compare les chaînes entières. C'est-à-dire que si la chaîne reçue n'est pas exactement la même, le booléen renvoyé sera "False".

Typiquement, en admettant que le message réceptionné soit "Ok $EOT" par exemple, si tu compares cela à "$EOT", ça va renvoyer un "False".

 

Mais je ne sais pas si ton problème vient de là, car je n'ai pas pu voir ton VI : il est enregistré en LV 15, et je n'ai que LV 14... Peux-tu l'enregistrer pour une version antérieure ?

Bilsix.
0 Compliments
Message 10 sur 14
5 489 Visites