Discussions au sujet de NI LabVIEW

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

Réception d'une même trame ASCII RS232

Résolu !
Accéder à la solution

Bonjour à tous,

 

Je vous demande de l'aide aujourd'hui car je n'ai plus d'idée pour régler mon problème.

 

J'ai un pH-mètre qui m'envoie la même trame en continu  :

7.00pH

25.0øC MTC

EP auto Standard

 

Cette trame est toujours envoyée dans cet ordre, je le vois bien sur "Hyperterminal".

 

Cependant, j'ai des soucis lorsque je passe sur LabVIEW. Je cherche à tracer un graphe du pH. Ca marche très bien par moment, et parfois c'est le silence pendant 1min.

Je vous joints mon programme, très basique, mais que je pensais fonctionnel.

 

J'ai pu constater que le buffer n'était pas toujours "complet" ie qu'il n'y avait pas toutes les informations citées plus haut, donc qu'il manquait parfois le pH. J'ai donc mi un registre un décalage pour ne pas avoir de "0" sur mon graphe si l'info était mal reçue de temps en temps.

 

Si vous avez une idée pour m'aider je suis preneur.

 

Merci par avance et bon week-end.

0 Compliments
Message 1 sur 8
3 054 Visites

bonjour,

essaye le vi modifié que je joins, tu as fait l'erreur d'ouvrir la ressource VISA à chaque boucle quand tu actives l'acquisition, ce n'est pas une bonne pratique, la ressource doit être ouverte une fois en début de programme et fermée à la fin.
J'ai d'ailleurs ajouté un bouton pour arrêter ton Vi, je ne sais pas comment tu faisais sans!!?!
Reviens donner des infos, je n'ai pas épluché le côté données reçues, il y a peut-être une correction à faire vu que ton train de données pourrait se trouver incomplet ou pollué!

0 Compliments
Message 2 sur 8
3 038 Visites
Solution
Accepté par l'auteur du sujet cyprien11

Je n'ai pas la version 2017 sur cet ordi alors je ne sais pas quel modif Phil à fait mais selon moi le problème est l'utilisation de Bytes at Port et du Wait de 1000 ms de la boucle interne.

 

La communication série à été configurée avec un caractère de terminaison (valeur 13 ce qui correspond à un retour de chariot). Dans cette configuration la fonction VISA Read.vi attendra jusqu'à ce qu'une des 3 conditions suivante soit réalisée:

1- Le caractère de terminaison a été reçu, dans ce cas le Read retournera tous les bytes reçus depuis la dernière lecture.

2- Le nombre de bytes relié à l'entrée byte count à été lu, dans ce cas le Read retournera ce nombre de bytes (et retournera un Warning qu'il est possible qu'il y ait plus de byte disponible sur le port).

3- Aucune des 2 conditions précédente n'a eu lieu dans un temps inférieure à la valeur du timeout de VISA (10 sec par défaut je crois).

 

Donc je te suggère d'éliminer le Wait de 1000 ms (la boucle interne sera temporisée par la fonction VISA Read) et le noeud Bytes at Port et de relier un nombre de bytes supérieur à celui du message typique (par exemple 1024) à l'entrée byte count de la fonction VISA Read.

 

Je ne vois pas de problème avec l'ouverture/fermeture du port dans la externe s'il n'y a pas d'opération marche/arrêt en sucession rapide (ce serait par contre très mal avisé de le faire dans la boucle interne).

 

Si tu veux qu'il n'y ait aucun point sur ton graphe s'il n'y a pas de data utilise NaN (not a number) au lieu de 0.

 

Ben64

0 Compliments
Message 3 sur 8
3 030 Visites

en version 2014 si ça te convient Ben !!??!!

0 Compliments
Message 4 sur 8
3 022 Visites

Merci Phil.

0 Compliments
Message 5 sur 8
3 019 Visites

de rien 😉
mais je n'ai rien modifié de fondamental dans le Vi proposé, j'ai juste proposé de gérer la ressource VISA de manière plus .. "safe" 🙂
Puis pour le traitement des données, c'est une autre histoire, faut voir ce qu'il reçoit comme données et comprendre où ça bug!
Mais tes remarques sont pertinentes, comme toujours 😉
Tiens, je me demandais pourquoi Ben64, c'est ton année de naissance???

Moi c'est 58 ... et c'est bien mon année de naissance 😉 (me reste plus que 5 années à faire du LV, ça me désespère un peu d'ailleurs 😞 , je m'amuse bien ici 🙂 )

0 Compliments
Message 6 sur 8
3 013 Visites

Ça ne nous rajeunit pas Smiley très heureux

 

Ben██

 

 

0 Compliments
Message 7 sur 8
3 009 Visites

Bonjour à vous,

 

Merci beaucoup pour vos réponses, mon problème semble être résolu, tout fonctionne parfaitement. 

 

Comme vous me l'avez conseillé, j'ai supprimé le Wait de 1000ms ainsi que le Bytes at Port puis saisie une constante de 1024 sur l'entrée byte count de la fonction VISA Read. Cela a suffit pour régler mon problème.

 

J'ai mi une boucle autour de mon Open/Close VISA pour me laisser le temps de saisir le bon port COM avant de mettre en marche mon bloc de lecture. Cela semble être une mauvaise idée mais c'est le seul moyen que j'ai trouvé pour que les opérateurs puissent saisir le bon port COM et autres variables nécessitant une saisie avant lancement, sans qu'ils aient à toucher les boutons "Executer", "Executer en continu", ....

 

Merci encore pour votre aide.

 

Bien cordialement,

0 Compliments
Message 8 sur 8
2 991 Visites