Discussions au sujet de NI LabVIEW

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

Calcul de la moyenne de X-points pour lancer une étape suivante dans une State Machine

Bonjour.

 

Je viens vers vous car je fais un VI sous forme de machine à état pour calibrer des thermocouples par rapport à une sonde de référence. Je programme des consignes de paliers en température et je fais l'acquisition des mesures sur ces paliers sur un temps donné puis je passe à la consigne suivante etc.....

Puis j'enregistre sur Excel.

Tout fonctionne mais je souhaite améliorer ce VI en attendant que mon point courant en température du four que j'utilise pour calibrer ces thermocouple soit stable. Ce qui veut dire que je souhaite ajouter une étape d'attente de stabilisation avant de lancer l'étape où je reste un temps donnée à la consigne avec une acquisition dans mon tableau Excel.

Ce que je veux faire c'est qu'il calcule la moyenne des 20 derniers points par exemple (avec pont acquis toute les minutes) et que cette valeur moyenne si :

 

     - elle est non comprise dans un Range défini je retourne à l'étape montée en consigne

     - elle est dans le range proche consigne, je passe à l'étape suivante de maintien en consigne avec acquisition.

 

En clair, je souhaite être sûr d'être stable car comme vous le savez quand on régule en PID on a un overshoot léger puis ça oscille autour de la consigne et selon l'inertie de l'enceinte c'est pas génial.

J'essaye de faire avec les moyennes etc...point by point, où par moi-même mais j'ai l'impression que cela calcule la moyenne au fur et à mesure à chaque fois et non par paquet de tant de point puis on recommence etc...jusqu'à ce que l'on soit sûr que sur un temps donné ça ne bouge plus.

 

Pouvez vous m'aider un peu ?

 

Bien à vous.

 

0 Compliments
Message 1 sur 7
755 Visites

bonjour il faut utiliser le VI  Mean PtByPt qui va bien calculer la moyenne "par bloc de point". Il faut bien définir le nombre de points sur lequel faire le calcul, et laisser la variable "initialize" = à False (ou gérer le fait d'avoir un reset = True qui repasse à False, sinon reset permanent).

Le VI va s'initialiser sur le first call. Il définit alors la taille du tableau de travail. Le tableau n'étant pas full, le code passe alors lors de chaque appel dans "Queue not full", et lorsque le tableau a la bonne taille, finite horizon dans le case true.

bref, pour utiliser le code, il faut l'utiliser à un seul endroit dans le code", puis lorsque Reset (ou initialize) passer la bonne taille de point sur lequel faire les calculs par la suite. 

 

Le code ne doit pas avoir de problème. Si tu as un doute, tu peux faire un VI de test, afin de mettre en évidence le fonctionnement.

A+

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

0 Compliments
Message 2 sur 7
734 Visites

Bonjour.

 

Merci de votre réponse, je teste et je reviens vers vous. 

 

Belle journée et bonne année par-ailleurs.

 

 

0 Compliments
Message 3 sur 7
682 Visites

Bonjour. 

 

Je reviens vers vous après avoir testé et ça ne fonctionne pas. Je vous joint une image avec ce post ainsi que le VI en préparation.

 

Explication du VI :

 

-Je communique avec une étuve sous vide  (la partie du diagramme à gauche où est écrit panneau de lecture de l'acquisition). Cette étuve contient un thermocouple paroi pour réguler la chauffe en fonction de la lecture d'un autre thermocouple situé sur une platine au centre de l'étuve. Au coté du thermocouple de la platine sont positionnés une pt100 qui sert de référence et un thermocouple quelconque à calibrer.

-Je fais l'acquisition de la pt100 via un multimètre de table Keithley (module acquisition keithley).

-Je fais l'acquisition du thermocouple à calibrer via une carte Arduino (module arduino en pièce jointe).

 

Enfin je fais une State machine qui a pour but :

 

-Consigne de pallier 1 (la montée en rampe vers un pallier 1 où je ferais une acquisition de mesure Temp Thermocouple à calibrer en fonction de la valeur de la pt 100...autrement dit une courbe XY).

-Stabilisation en régime thermique permanent (valeur stable de la température que l'étuve mesure au centre, et c'est ici que j'ai besoin de faire la moyenne des 20 derniers points espacés par exemple de 30 secondes ou plus pour être sûr que je suis stable, sans les oscillations autour du point de consigne).

-Pallier restant un nombre de secondes données par la fonction "ellapsed time" puis une fois ce temps écoulé la State machine passe à un pallier 2.

 

J'ai essayé d'utiliser MEAN pt by pt mais au lieu de faire une moyenne par paquet, j'ai moyenne point par point....

Je voudrais faire la moyenne d'un paquet de point.

 

Je vous donne le VI. Pour l'instant je n'ai modifié que la partie pallier 1 (avant je ne faisais qu'un comparaison de la valeur courante en température du centre étuve donnée par celle-ci avec la consigne de pallier correspondante : vous le voyez sur les pallier2,3...etc...de la machine à état).

 

Je vous remercie par avance pour le coup de main.

 

-

Tout télécharger
0 Compliments
Message 4 sur 7
674 Visites

bonjour, pouvez-vous m'expliquer : J'ai essayé d'utiliser MEAN pt by pt mais au lieu de faire une moyenne par paquet, j'ai moyenne point par point....

 

Dans votre cas vous avez spécifié à "10" le nombre de samples, donc le code va prendre 10 points, pour en faire la moyenne. Chaque nouveau point remplace le plus ancien. Il n'y a que 10 points mémorisés en interne, le nouveau remplace le plus ancien, et le vi calcul la moyenne sur les 10 points.

 

non?

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

0 Compliments
Message 5 sur 7
670 Visites

Et bien, oui là c'est vrai j'ai mis dix points, avant j'en avais mis 100 pour voir la latence de déclenchement vers l'étape de palier avec le temps choisi qui s'écoule. Hors ici, le Mean se calcule point par point. Moi ce que je voudrais c'est que labview calcule par exemple 10, 20 ou 100 points peu importe en paquet et que le résultat de ce paquet ait une valeur.

Si cette valeur est égale à la consigne de palier (en ayant pris assez de points pour être sûr que cela reste pile sur la consigne) le temps de maintien au palier se déclenche.

là je vois que la fonction MEAN n'attends pas le nombre de points pour calculer une moyenne de ce paquet de point. Je voudrais qu'il y ait une moyenne de tant de valeur, si cette valeur n'est pas égale à la consigne, ou du moins dans un range fin, je recommence une moyenne de tant de nouvelles valeur.

 

Bien à vous 

(Pardon si je ne suis pas très clair).

0 Compliments
Message 6 sur 7
667 Visites

re j'avoue ne pas comprendre. Dans l'exemple, le code va garder "point après point" un tableau de 10 points (en réalité tant que le code n'a pas mémorisé samples points il effectue le calcul uniquement sur les points disponibles), et retourner la moyenne sur les 10 points.si cela ne correspond pas, avez-vous un exemple pour comprendre? que signifie :  Labview calcule par exemple 10 points peu importe en paquet et que le résultat de ce paquet ait une valeur.

 

Je te tramsets un VI snippet (cette image est du code, que tu peux glisser dans ton diagramme LabVIEW)

Si tu peux l'utiliser pour m'expliquer? A+

mean.png

banniere Luc Livre NXG Champion.png

Luc Desruelle | Mon profil | Mon blog LabVIEW | Auteur livre LabVIEW : Programmation et applications - G Web
Certified LabVIEW Architect (CLA) & Certified TestStand Developper (CTD) | LabVIEW Champion

MESULOG - LinkedIn site | NERYS - NERYS Group
| directeur CEO MESULOG
| CODIR - NERYS group

0 Compliments
Message 7 sur 7
655 Visites