Discussions au sujet de NI LabVIEW

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

Jauge pression Pfeiffer

Résolu !
Accéder à la solution

Bonjour,

J’essaie de développer un VI me permettant de faire l’acquisition de données issues d’une jauge de pression Pfeiffer.

Je rencontre 2 problèmes :

Il se produit très régulièrement une erreur dans « Balayer une chaîne » ; « La chaîne en entrée ne contient de données dans le format attendu ». J’ai remarqué que cette erreur se produit quand le buffer de lecture affiche « _ ».

Quand tout se passe bien le buffer de lecture affiche bien la pression « 0, 4.0300E-02,5, 0.0000E+00 ».

Cette erreur a tendance à se produire une fois sur deux (une boucle ça affiche la pression ; la suivante l’erreur se produit).

 

Le second problème est qu’il y a un gros décalage (jusqu’à plusieurs minutes) entre l’affichage de la jauge de pression et l’acquisition que je fais. Pour être plus clair quand je fais varier la pression l’affichage de la jauge réagit tout de suite par contre mon VI met beaucoup de temps à indiquer le changement de pression.

 

Je suis débutant dans LabView donc toute remarque est la bienvenue.

Merci pour votre aide

0 Compliments
Message 1 sur 30
2 811 Visites

Bon, il y a plusieurs problèmes dans ton vi mais à la base je crois que tu n'as pas bien saisi le protocole de communication. Quand tu envois la commande COM,1\r\n tu dis à l'appareil que tu désires le configurer en mode Continuous Output of Measurement values avec 1 lecture à chaque seconde et il te répond <ACK><CR><LF> bien reçu. Ensuite il se met à envoyer de façon continue les valeurs mesurées à chaque seconde. Donc tu dois envoyer la commande une seule fois avant la boucle et lire le message "bien reçu" et ensuite dans la boucle tu ne fais que lire le data sans ré-envoyer la commande COM,1\r\n.

 

Deuxième point: tu as relié l'index i de la boucle à l'entrée dt de Build Waveform. Le dt est constant =1 dans le cas.

 

Troisième point: L'utilisation de Bytes at Port. Sur la fonction VISA Configure Serial le caractère de terminaison est activé pour une valeur de \n (par défault). Ainsi VISA Read attendra le premier des événements suivant: un time out (valeur de VISA timeout est de 20 sec par défaut … de mémoire), que le nombre de bytes lus soit égal à la valeur reliée à l'entrée Byte Count de la fonction VISA Read ou que le caractère de terminaison (\n dans ce cas) soit reçu ce qui est la meilleure méthode dans ce cas (attention de relier une valeur de Byte Count supérieure au nombre de bytes que l'on s'attend à recevoir à chaque seconde).

 

Quatrième point: En utilisant le caractère de terminaison il est inutile (et ça peut même être nuisible) d'utiliser un temps d'attente dans la boucle. La temporisation est faite par la fonction VISA Read.

 

Finalement, attention à l'utilisation de la fonction Build Array dans une boucle, cela consommera de plus en plus de mémoire et c'est une erreur de réécrire tous les point plus un à chaque itération le résultat affiché ne correspondra certainement pas à ce que tu t'attends (ce qui est d'ailleurs le cas).

 

Voici un exemple de comment tu pourrais implémenter toutes ces modifications:

Pression_mod.png

 

Ben64

0 Compliments
Message 2 sur 30
2 793 Visites

Bonjour Ben64

Tout d’abord merci beaucoup pour l’ensemble des remarques ainsi que pour la suggestion d’un VI.
J’ai donc créé ce VI.

Première question que signifie le NACK et pourquoi n’est-il pas câblé ?

Ensuite quand je lance le VI rien ne s’affiche car la réponse à la condition =6 est « Faux ».

Sais-tu d’où peut venir ce problème ?

Je joins le manuel de mon contrôleur TPG 261.

Merci encore pour ton aide.

0 Compliments
Message 3 sur 30
2 777 Visites

Quel est la valeur que la jauge envoie après la commande COM,1? (chaine complète svp).

 

Ben64

0 Compliments
Message 4 sur 30
2 766 Visites

Ci-joint ce que je vois quand je lance la commande.

Mais je ne peux pas dire si cela commence par afficher la pression ou "_". Ça dépend des fois.

 

0 Compliments
Message 5 sur 30
2 761 Visites

Ce que je veux savoir c'est la valeur de la chaine qui est reçue par le premier VISA Read du code que j'ai posté.

 

Ben64

0 Compliments
Message 6 sur 30
2 756 Visites

J'ai lancé le VI plusieurs fois. La plupart du temps il s'affiche "_" d'autre fois j'ai un bout de la pression(ex: "0,7.900").

0 Compliments
Message 7 sur 30
2 752 Visites

Le "-" correspond au <ACK>. Si on configure un string control pour afficher en hexadécimal que l'on écrit 06 puis qu'on change le mode d'affichage pour "normal display" on obtiend le "-" (en fait je tape un tiret mais ce qui est envoyé est un tiret long).

Dans mon code change le mode d'affichage de la constante 6 pour hexadécimal et tape la valeur 06. La condition = 06 devrait maintenant être vraie.

Commence par ce changement, ensuite on corrigera ce qui est lue dans la boucle si nécessaire (si l'appareil envoi toujours un string ACK avant chaque lecture).

 

Ben64

0 Compliments
Message 8 sur 30
2 746 Visites

J'ai modifié le 6 en 06 (je suis maintenant en affichage hexadécimal).

Résultat : Ça marche par moment  (condition = 06 'vrai') mais pas toujours. Car le premier VISA R n’envoie pas que ACK. Par moment il y a aussi la pression qui est envoyée. Du coup la condition est 'faux'.

Merci en tout cas pour ton aide.

0 Compliments
Message 9 sur 30
2 739 Visites

Salut,

J'ai un vi qui dialogue avec un contrôleur TPG261 (single ou dual jauges) depuis quelques années maintenant, si tu veux, je te le file, ou alors, si tu préfères, je te laisse te débrouiller pour apprendre (avec les conseils de Ben 😉 ), c'est toi qui voit!
Demain au plus tôt, je ne suis plus au boulot en ce moment!

0 Compliments
Message 10 sur 30
2 729 Visites