le 06-29-2018 08:44 AM
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.
Résolu ! Accéder à la solution.
le 06-29-2018 10:19 AM
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é!
le 06-29-2018 11:40 AM
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
le 06-29-2018 12:38 PM
en version 2014 si ça te convient Ben !!??!!
le 06-29-2018 12:50 PM
le 06-29-2018 12:57 PM
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 🙂 )
le 06-29-2018 01:04 PM
le 07-02-2018 08:53 AM
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,