le 01-22-2010 10:18 AM
Bonjour à tous,
eh oui je craque. Je ne comprend toujours pas les subtilités des graphes (déroulants, XY, waveform, etc...).
Je vous joins mon programme pour que vous y jetiez un oeil.
Le principe :
- J'acquière 2 données (Main, Nose) sur port COM toutes les secondes
- Durant 1 minutes, je cherche les Min, Max et Erreur éventuelles pour chaque voie.
- Pour chaque données, je fais un graphe avec Min, Max, Err (donc 3 courbes dans le graphe) actualisé toutes les minutes (et non toutes les secondes) et il me faut absolument en Axe X le temps auquel s'est fait la mesure.
J'ai tout essayé (waveform, XY, déroulant), mais je n'arive jamais à obtenir le bon résultat. J'ai laissé le fichier dans un état non fonctionnel, mais là je n'en peut plus.
Bon après, il faudra aussi que j'enregistre les données dans des fichiers. Un fichier avec les données toutes les secondes, et un autre avec la synthèse (Min, Max, Err) sur une minute, mais ca fera peut-etre l'objet d'un autre post.
Voilà, j'espère que vous pourrez m'aider sur ce sujet.
Au passage, si vous les pros de Labview, voyaient des incohérences dans mon diagramme, faites moi en part. Il va vraiment falloir que j'arrive à convaincre mon boss qu'il me faut une formation complète sur Labview... et à tous les niveaux...
David49.
le 01-25-2010 03:04 AM
Bonjour,
Bon commençons par les choses simples: tu devrais passer l'initialisation et la fermeture de la communication en sous VI.
Après au niveau de ta boucle principale:
1. Tu ne veux pas afficher main et nose ?
2. tu regarde à chaque tour de boucle si la valeur est supérieur ou inferieur à la précedente, ne serait-ce pas judicieux d ele faire en fait toute les minutes ? les fonctions max min sur tableaux.
3. erreur temps dans le cluster temps ? comprend pas, erreur dans min max tu ne peux pas l'afficher car c'est un NAN ou rien donc pas une valeur. Qui a fait les sous VI de cluster d'error et de temps ?
4. Pour l'axe des temps plusieurs solution: tu prend directement la fonction temps et tu a donc un temps pour le graphe. Mais de toute façon il te faudra utilisez les registres à décalages pour créer un graphe XY pour construire tes clusters de courbes cluster(X,Y) et le tableau de clusters de courbes tab(clust(X,Y), Clust2(X,Y).
5. Vu que tu sors un cluster comprenant temps min, max, error porquoi sont-ils egaux ? et max, min, error donc il faut que tu dessassemble le cluster pour mettre comme il faut les valeurs afin de construire les graphes et garder seulement les valeurs qui t'intéresses.
Quel versions de LabVIEW tu as, car moi j'ai la 8.6 ou 2009 je peux t'envoyer un exemple mais il faut pouvoir le lire.
Je te conseille aussi d'ouvrir l'exemple graph.vi de LV qui explique les graphes.
Cordialement
le 01-25-2010 03:51 AM
Bonjour,
J'ai fait un sousVI pour la fermeture du COM, par contre pour l'init, vu que j'ai une commande en face avant qui est lue dans une boucle while, j'ai peur que cette valeur ne se rafraichisse pas si je fais un sous VI, elle ne sera lue qu'une seule fois non ?
1/ En fait, j'ai créé en face avant 2 boutons StartMain et StartNose pour activer ou non l'affichage et l'enregistrement des données lues sur les voies. Je pensais qu'il serait bcp plus simple de lire en continu mes valeurs mais de ne les afficher (et enregistrer) que quand on le souhaitait.
J'ai également créer des boutons pause, mais je pense que je vais les enlever. L'interet de ce bouton était de ne pas changer le nom du fichier d'enregistrement.
Le nom de fichier de l'enregistrement incorporera la date et l'heure à laquelle on appuie sur StartMain par exemple.
2/ J'avais commencé en effet par utiliser le fonction Min/Max sur un tableau, mais je ne savais pas comment ensuite gérer l'incorporation de mon Error.
Pour rappel, les données lues sur le port COM est : soit une valeur (négative ou positive), soit "*NONE*, soit "*OFS*". Durant une minute je dois analyser ces données et les afficher sur un graphe (quand StartMain a été enclenché bien sur), d'où les 3 graphes (Min, Max, Err). Concernant Err, j'avais trouvé une méthose avec Nan pour ne rien afficher quand il n'y avait pas d'erreur, et s'il y avait une erreur je mettais une valeur 1 à Err pour que j'ai qqch qui s'affiche sur le graphe, c'est meme en histogramme, comme ca, ca me fait une belle barre verticale au lieu de me mettre un point, c'est plus visuel.
3/ Je suis en effet arrivé à une solution complexe avec mes clusters, chose que je ne voulais pas au début. Au début j'avais juste fait un tableau de 3 colonnes (Min, Max, Err) que je demandais gentiment à mon graphe d'afficher. Il le faisait bien, mais je n'arrivais pas à avoir l'horodatage en axe X, et là j'ai essayé bcp de choses jusqu'à arriver jusqu'aux clusters, mais si tu as plus simple je suis preneur.
Je te joins 2 fichiers txt pour illustrer les données enregistrées. Un version Full où j'enregistre les données toutes les secondes, et une version light où les données sont enregistrées toutes les minutes. Désolé, je n'ai pas de fichier avec Erreur sous la main, mais tu pourras imaginer *NONE* à la place d'une valeur.
4/ Qu'appelles tu la fonction temps ? C'est un vi ou une option du graphe ? Sur une autre version j'avais trouvé une solution pour gérer le temps, c'était en créant des waveforms, mais je ne sais pas pourquoi, j'avais envie de chnger pour faire mieux... C'était peut-etre pas la meilleure idée... Je crois que je vais m'y perdre avec mes clusters, non ?
J'utilise LV8.0.
J'ai déjà ouvert graph.vi, et je comprends bien comment ils fonctionnent mais dès que je veux l'appliquer à mon code, je sèche... car il y a trop de différences, surtout en terme d'horodatage.
le 01-25-2010 08:03 AM
Re,
Tu peux regarder l'exemple boucle cadencée comme cela tu peux régler ta boucle pour fonctionner avec un intervalle de 1sec et récupérer le temps réelle des boucles. De plus je ferais le calcul au bout de une minute en utilisant une autre boucle (si tu es en multi processeur le mette sur un autre processeur) et soit utiliser les files d'attentes ou les occurences ou des autres fonctions de synchronisation pour faire démarrer la boucle de calcul min max et enregistrement des données quand la première boucle a atteint les 60 sec.
Donc à regarder l'exemple Graph XY, l'exemple boucle cadencée, et l'exemple file d'attente ou tous les exemples de synchronisation logiciel.
Sinon dès que j'ai un peu plus de temps je te fais un petit exemple utilisant une des méthodes citées.
Sinon la plus simple mais pas forcément la mieux, garder ta méthode mais creer tout de suite à la sortie de ta boucle un tableau de cluster (voir exemple graph XY) en utilisant les registre à décalages sur la boucle toute les 1 minutes.
Bon je me rends compte que c'est pas très clair.
Pour garder ta methode voici comment tu peux afficher les min et max sur graphe XY. Par contre tu pourras t'apercevoir que ton dt n'est pas de 1sec puisque tu attends une sec à chaque tour de boucle mais les fonctions ont aussi un temps d'exécution.
le 01-26-2010 03:12 AM
Salut,
voici ma dernière version, je pense avoir réussi à faire mon programme, si ce n'est encore des problèmes vis à vis de l'échelle X. Je n'arrive pas à bien définir le t0 du graphe, car lorsque je fais un zoom cadré, il revient plus en arrière que le t0 que je lui ai défini.
De plus, le zoom cadré pousse la limite supérieure jusqu'en 2020, ce n'est pas très utile à mon sens, si tu as des idées pour me solutionner ce dernier problème, je suis preneur.
David.
le 01-26-2010 04:12 AM
Zoom cadré ?
que veux tu exactement?
le 01-26-2010 04:27 AM
dans les options de graphique, quand le vi est exécuté, tu peux faire des zoom sur tes graphes, un zoom horizontal, un zoom vertical et un zoom"fit", bref un zoom automatique pour tout voir, aussi bien en horizontal qu'en vertical, et c'est avec ce dernier zoom qu'il va bien plus loin que je ne le voudrais.
Voir le symbole en bas à gauche de la figure 6 du document : http://cnx.org/content/m12237/latest/
le 01-26-2010 04:53 AM
le 01-26-2010 04:59 AM
euh oui, je suis trop bete, on appelle ca "unzoom", désolé....
J'aurai aimé faire autrement que de réajuster manuellement les limites sup et inf de mon graphe, j'aurai bien aimé qu'il commence dès que je clique sur un des Start, puis qu'il affiche une durée de 10 minutes par défaut, ensuite on peut faire un unzoom, puis rezoomer sur une section, et enfin recliquer sur qqch pour réafficher les 10 dernière minutes.
le 01-27-2010 04:31 PM
Salut David, Salut Greg,
Je ne me mèle que brièvement de votre post!
David, si tu es du maine et loire, sache qu'il va surement bientot y avoir sur Nantes un forlation LabVIEW Basics 1. Si ca t'intèresse, je peux te fournir les infos! Sinon, si ton chef ne te permets pas de suivre la formation, il est aussi possible d'acquérir seulement le manuel pour moins cher du coup!
Greg, tes réponses son très bien expliquées, et j'aime bien la référence au Nonos : )
Bon courage à vous et peut-être rdv sur NI Days mardi!
M-junior