Discussions au sujet de NI LabVIEW

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

Utilisation du projet mesure continue et enregistrement dans un fichier

Résolu !
Accéder à la solution
Highlighted

Bonjour,

 

J'essaie d'utiliser le projet mesure continue et enregistrement dans un fichier fourni avec Labview (2014). Mon but est de récupérer la valeur de la température captée par un hygromètre (dew point mirror 473) via un cable rs232 et de l'afficher en temps réel dans le graph.

 

J'ai appris Labview par moi même j'ai donc des lacunes, c'est également la première fois que j'encontre le système de notifications.

 

J'ai modifié le vi Acquisition.lvlib:Acquire.vi: j'envoie une commande via Visa Write et je récupère la température avec Visa Read. Cependant la notification qui est en sortie est de type tableau de waveform. Quelle est la marche à suivre dans ce cas là ? Je dois récupérer la waveform précédente et la stocker dans un tableau que j'envoie à chaque fois ? Comment faire ?

 

Ci joint le projet

 

Merci,

 

Dorian

0 Compliments
Message 1 sur 6
631 Visites
Highlighted

Salut DarianG,

 

Je crois que tu as sorti un bazooka pour tuer une fourmi là !

Pourquoi avoir utilisé un Notifier alors que tu avais déjà un Template avec une Queue ? De plus, un Notifier pour afficher les données reçues n'est clairement pas la bonne méthode...

Petit rappel rapide avant d'aller plus loin qui pourra servir :

  • Une Queue permet de stocker des datas en FIFO. Grosso modo, après avoir créé ta queue, tu peux la remplir à chaque fois que tu reçois une valeur, et récupérer chaque valeur dans l'ordre de réception. Attention ici, on ne peut récupérer la valeur qu'une fois : une fois qu'elle est sortie de la queue, elle n'est plus dans la liste, on ne peut pas lire 2 fois la même donnée dans la queue. Si ton temps de traitement des données est parfois supérieur au temps de remplissage de la queue, tu n'auras pas à te soucier d'une éventuelle perte de données grâce à la FIFO. Attention cependant à ne pas remplir ta queue et créer un overflow !
  • Un Notifier c'est un peu différent : il s'agit d'une seule valeur qu'on peut lire un nombre infini de fois. En revanche, si on écrit une nouvelle valeur sur le Notifier, l'ancienne disparaît. Il y a donc des risques de zapper des données (si le temps de traitement d'une valeur est long, le notifier a potentiellement le temps d'écrire 2 ou 3 données). Dans ton cas, ce n'est clairement pas ce que tu veux, le Notifier est donc à éviter.

 

D'autre part, si tu veux afficher des données "en temps réel", on a juste besoin de savoir ce que l'hygromètre te renvoie sur le port série. Est-ce une seule valeur, un Double ou un Int ? Si oui, le mieux est d'utiliser un Waveform Chart (et non un Waveform Graph !), trouvable en fouillant dans les contrôles après avoir cliqué droit sur une Face Avant (et non sur un diagramme !). Le Waveform Chart va t'afficher automatiquement les valeurs uniques dans un graphique et le faire dérouler (ce qui donne l'impression du "temps réel". Le Waveform Graph attend plutôt un tableau de données pour les afficher toutes en une fois.

 

Je vais te proposer un truc bien plus simple que la QMH que tu as voulu utiliser : 

Tu trouveras en PJ un exemple de VI très simple qui reprend ce que tu as fait en acquisition (et qui semble très bien) pour l'afficher sur un graph très simplement.

Est-ce que cela a pu t'aider ?

Bilsix
0 Compliments
Message 2 sur 6
450 Visites
Highlighted

Bonjour Bilsix,

 

Tout d'abord merci beaucoup pour ta réponse !

En effet je me suis rendu compte moi même que ma solution était un peu overkill et j'avais donc refait un vi plus basique qui revient à ce que tu m'as envoyé.

Cependant j'ai maintenant 2 contraintes que je n'arrive pas à résoudre:

 

1. Je n'arrive pas à définir l'axe X comme l'heure d'acquisition du point.

2. L'hygromètre peut capter plusieurs choses comme la température ou l'humidité par exemple et on me demande d'afficher 3 mesures en même temps. Le mieux serait de tout faire sur un graphe mais je n'arrive pas à le faire sur 3 graphes différents déjà.J'ai essayé 3 write/read en paralleles ou séparés avec une structure séquence et ça ne marche pas.

 

Peux-tu m'éclairer sur les possibles solutions ?

 

Merci beaucoup,

 

Dorian

0 Compliments
Message 3 sur 6
423 Visites
Highlighted
Solution
Accepté par l'auteur du sujet DarianG

Re DarianG,

 

C'est une vaste question, il y a plusieurs façons de faire.

1. Bon pour ce point, il suffit de cliquer droit sur le graph souhaité -> Propriétés -> Onglet "Display Format" -> Choisir "X-axis" dans le menu déroulant -> Choisir "Absolute Time" -> Customiser le format de la date souhaité (24-hour, HH:MM:SS, D/M/Y, 4-digit year).

 

2.

Pour la récupération de tes données sur le port série :

Comment doit-on récupérer les données selon la doc de l'hygromètre ? Il y a une requête par donnée ? Ou alors il n'y a qu'une requête, et l'hygromètre envoie toutes les données en une fois qu'on doit traiter octet par octet ?

Soit sur de ne pas fermer et ouvrir le port série à chaque requête aussi. Tu peux l'ouvrir au départ du vi, faire tes write/read, puis le fermer une fois que l'utilisateur clique sur Stop. C'est plus propre.

 

Pour tracer plusieurs données sur un même graph :

D'aucuns te diront de te diriger vers les "Graph XY multiplot" je pense (qui se construit avec deux tableaux dans un cluster : un tableau pour l'axe X, et un autre pour l'axe Y. De cette façon, tu contrôles complètement ce que tu veux afficher, et tu peux donc "faire glisser" manuellement les valeurs à afficher sur le graph, en retirant à chaque tour de boucle la valeur la plus ancienne).

De mon côté, je vais plutôt te proposer la technique qu'a imaginé le LabVIEW God crossrulz ici :

En gros, il s'agit de continuer à travailler avec un Waveform Chart et d'utiliser ses propriété de mémorisation des dernières valeurs pour ne pas avoir à te taper toi-même la partie "glissement des données les plus anciennes".

Je te donne un exemple en PJ : Dans une boucle While, j'ai placé une structure Evenement. A chaque fois qu'on attend le temps "Timing" dans la boucle, on va réaliser ce qui se trouve dans l'évenement Timeout. Dans l'évenement Timeout, je crée 3 Waveforms qui contiennent un seul point chacun (avec le temps exact en X, et la valeur aléatoire en Y), que je place dans un seul tableau, pour le donner à afficher à la Waveform Chart.

Ca parait complexe quand je l'explique, mais tu vas voir le code en PJ, tu vas vite comprendre.

Waveform Chart Multiplot.png

 

Bilsix
Message 4 sur 6
407 Visites
Highlighted

Tout fonctionne, merci beaucoup pour ta précieuse aide ! 😁😁😁

0 Compliments
Message 5 sur 6
378 Visites
Highlighted

C'est top, à bientôt sur le forum !

Bilsix
0 Compliments
Message 6 sur 6
373 Visites