Discussions au sujet de NI LabVIEW

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

Cycle de chauffage / refroidissement

Résolu !
Accéder à la solution

Bonjour à tous,

 

Je vous présente mon problème sur lequel je bloque depuis déjà un moment. Mon objectif de projet est principalement de gérer des cycles de chauffage par laser et refroidissent par azote liquide d'un échantillon, mais par manque de matériel nous utilisons pour l'instant une résistance chauffante ainsi qu'un ventilateur afin de mimer notre système.

Toute la partie température ainsi que de gérer les instruments est faite, le point qui me pose problème est tout bête, mais pourtant je ne trouve pas comment faire sur LabVIEW.

 

Je veux pouvoir enclencher mon ventilateur (et arrêter le chauffage) lorsque la température dépasse 70°C et lorsque la température descend à 30°C repasser en chauffage.

Le problème est que, en faisant une boucle évènement simple, je vais me retrouver bloqué quand je suis entre 30 et 70°, en effet je dois dans un cas chauffer et dans l'autre refroidir. 

J'avais trouvé une solution bonne en théorie, mais pas vraiment en pratique, je vous montre donc ce que j'ai fait en photo et je l'explique juste en dessous.

 

Le principe est que, quand la température est au-dessus de 70°, je rentre dans l'évènement vrai (refroidissement) qui contient une boucle while qui fonctionne jusqu'à que la température atteigne 30°, en dessous de 30° on sort donc de la boucle while et on rentre alors dans l'évènement faux (chauffage), où l'on va alors chauffer jusqu'à 70° etc...

 

Le problème est que l'utilisation d'une boucle while '' bloque '' le reste du programme, on ne peut pas sortir des valeurs en direct et donc, envoyer des données afin de piloter mon équipement n'est pas pratique. 

 

J'ai cherché pas mal de solution avec d'autre boucles, où d'autres méthodes pour gérer ce problème mais je n'ai rien trouvé. Avez-vous une solution ? J'ai cherché un moyen d'avoir un booléen qui s'enclencherai quand la température passe au-dessus de 70 et reste vrai jusqu'à atteindre la valeur 30, je n'ai malheureusement pas trouvé.

 

Merci d'avoir lu. N'hésitez pas à me demander plus d'information si je n'ai pas bien, ou pas assez expliqué mon problème.

Tout télécharger
0 Compliments
Message 1 sur 10
2 845 Visites

you can make time out case to your event case so the event driven not stucking  the program

CLA
0 Compliments
Message 2 sur 10
2 834 Visites

Le problème est pas que je reste bloqué dans ma boucle while, mais le fais que j'utilise une boucle while. J'aimerais bien l'enlever et trouver une autre solution car son utilisation complique la communication avec mes appareils.

 

Merci tout de même de m'avoir répondu. 

0 Compliments
Message 3 sur 10
2 822 Visites

Please attach your Vi instead of pictures. You code is highly flawed and we can fix it for you once we have the VI.

 

  • You only need an outer while loop and a case structure (state machine!). No inner while loops!
  • You don't need to configure the serial port with every iteration. Once is enough.
  • You don't need a formula node to generate a diagram constant.
  • Obviously, I64 is not the correct datatype.
  • Where do you define the loop rates?

 

0 Compliments
Message 4 sur 10
2 803 Visites
Solution
Accepté par l'auteur du sujet ValerianB

 

Ton programme est pas top. Il faut bien une boucle while principale, par contre la deuxième est à proscrire. 

 

Dans ce type d'application, il faut une machine à états. En tout cas c'est ce que je préconiserais. Regarde un peu la théorie, c'est très simple finalement :

https://www.ni.com/fr-ch/support/documentation/supplemental/16/simple-state-machine-template-documen...

 

Il y a deux états :

- la chauffe

- le refroidissement

 

Dans les examples de labview tu trouveras quelques examples. Notament en recherchant "state machine".

0 Compliments
Message 5 sur 10
2 765 Visites

En effet la deuxième boucle while est le problème.

 

Merci pour ta suggestion, c'est en effet sans doute la solution à mon problème, j'ai donc essayé de comprendre le fonctionnement et créer un VI pour vérifier que ça marche bien avant de l'intégrer à mon programme principal mais malheureusement je reste bloqué sur un point :

Je ne peux pas utiliser les mêmes noms pour mes registres à décalages et mes noms de conditions dans ma structure, j'ai fais pas mal de test pour comprendre ce que j'ai mal faits mais je n'ai rien trouvé. 

Avez-vous une idée pour résoudre ce problème, je laisse mon VI joint à mon commentaire.

0 Compliments
Message 6 sur 10
2 754 Visites

Tu pourrais le sauvegarder en Labview 2017?

0 Compliments
Message 7 sur 10
2 748 Visites

J'ai sauvegardé en version 17.0, dit moi si ça va, je te rajoute tout de même 3 captures d'écrans au cas où ça ne marche pas.

 

Merci pour ta réactivité.

Tout télécharger
0 Compliments
Message 8 sur 10
2 743 Visites

Les valeurs "enum" doivent être définies... Les tiennes valaient tous "0".

Walker34_0-1635771153631.png

 

Je t'ai  modifié ton example avec des valeurs numériques pour pas te brouiller. Ca ira très bien aussi. Tu pourrais aussi le faire avec des Strings.

 

Message 9 sur 10
2 734 Visites

Ca marche nickel, j'ai donc utilisé des strings pour que ce soit plus claire pour moi, je te remercie énormément d'avoir pris de ton temps pour m'expliquer 🙂 

0 Compliments
Message 10 sur 10
2 728 Visites