Bien sûr.
Jâai implĂ©mentĂ© un rĂ©gulateur type PID. Lâouverture de la vanne est la somme de 3 termes
P roportionnel : Kp x Erreur
I ntégral : Ki x Erreur_Integration
D Ă©rivation : Kd x Erreur_Variation
Ouverture_Vanne = Kp x Erreur + Ki x Erreur_Integration + Kd x Erreur_Variation
avec Ki = Kp / Ti et Kd =Kp x Td oĂč
Ti : pĂ©riode dâintĂ©gration
Td : période de dérivation
Les 3 termes sont des % dâouvertures de vanne.
Lâerreur est la diffĂ©rence entre la tempĂ©rature mesurĂ©e et la tempĂ©rature de consigne en °C. Le coefficient Kp sâexprime en % par °C. Avec un Kp=20%/°C, lors dâun changement de consigne de 17°C Ă 20°C, on a subitement une erreur de 3°C (je suppose que la prĂ©cĂ©dente consigne Ă©tait atteinte), le terme proportionnel Kp x Erreur vaudra 60%, donc la vanne augmentera de 60 points (si elle Ă©tait Ă 10%, elle passera Ă 70%). Au dĂ©but, jâavais mis 40%/°C, quand je passais de 17.5°C Ă 20°C de consigne, je faisais du pied au plancher et la vanne sâouvrait de 100% (=2.5*40)
Le scĂ©nario est exĂ©cutĂ© toutes les 5 minutes pour calculer lâouverture Ă appliquer sur la vanne en fonction de la tempĂ©rature (Je peux utiliser nâimporte quelle sonde de tempĂ©rature ). Donc, la vanne reçoit aussi une info toutes les 5 minutes. La pĂ©riode de base est de 5 minutes. En cas de changement, il faut adapter les coefficients Ti et Td (Une ouverture de 2% toutes les 5 minutes est Ă©quivalent Ă une ouverture de 4% toutes les 10 minutes)
Lâerreur dâintĂ©gration est le cumul des erreurs Ă chaque cycle de 5 minutes en °C.5min. Le coefficient Ki sâexprime en % par °C.5min. Supposons que la consigne passe de 19°C Ă 20°C et que la tempĂ©rature de la piĂšce atteingne la consigne en 50 minutes, câest-Ă -dire que la tempĂ©rature monte de 0.1°C toutes les 5 minutes. Lâerreur sera de 1.0°C, puis 0.9°C, puis 0.8°C, etc, 0.1°C, enfin 0°C, soit une erreur cumulĂ©e de 5.5°C au bout de 10 pĂ©riodes de 5 minutes. En rĂ©gime Ă©tabli, la tempĂ©rature mesurĂ©e Ă©gale la tempĂ©rature de consigne, lâerreur est nulle et constante, la variation dâerreur est aussi nulle, donc lâouverture de la vanne vaut directement le terme intĂ©gral Ki x Erreur_Integration . Pour maintenir la tempĂ©rature de consigne de 20°C, je considĂšre Ă la grosse que la vanne a besoin dâĂȘtre environ ouverte Ă 15-25%. Si câest 22%, alors 22% = Ki x 5.5 °C.5min, donc Ki vaudrait 4% par °C.5min. Dans mon cas, la chaudiĂšre rĂ©gule de son cĂŽtĂ© la tempĂ©rature de lâeau qui passe dans le radiateur en fonction de la tempĂ©rature extĂ©rieure, plus il fait froid dehors, plus la tempĂ©rature de lâeau sera chaude. Ainsi la vanne ne devrait pas avoir besoin de sâouvrir davantage pour maintenir la tempĂ©rature de consigne lorsquâil fait plus froid dehors. AprĂšs quelques essais jâai baissĂ© sa valeur Ă 1%/(°C.5min) pour avoir moins dâoscillations. La pĂ©riode Ti = Kp / Ki correspond Ă la pĂ©riode dâintĂ©gration soit un certain nombre de pĂ©riodes de 5 minutes.
La variation dâerreur est diffĂ©rence entre lâerreur actuelle et la prĂ©cĂ©dente (il y a 5 minutes). LâidĂ©e du terme dĂ©rivĂ© est de booster lâouverture de vanne lorsque la tempĂ©rature mesurĂ©e est loin de la consigne (On fonce si on est loin de la consigne et on ralenti si on est proche pour Ă©viter les oscillations). Cette partie nâest pas Ă©vidente Ă concevoir avec a des sondes limitĂ©es Ă des rĂ©solution de 0.1°C. Si je reprends lâexemple prĂ©cĂ©dent oĂč la tempĂ©rature monte de 0.1°C toutes les 5 minutes, alors la diffĂ©rence sera constante Ă 0.1°C/5min. En rĂ©gime stable, sa valeur nulle en thĂ©orie car il nây plus de variation. Dans la pratique, la tempĂ©rature mesurĂ©e tourne au mieux Ă +/-0.1°C autour de la tempĂ©rature de consigne. Donc la valeur de la variation dâerreur prend presque toujours seulement 3 valeurs +0.1°C/5min, -0.1°C/5min et 0.0°C/5min. Il est rare dâavoir une variation de 0.2°C ou plus en 5 minutes, câest Ă©norme. Il faut crĂ©er un courant dâair en ouvrant les fenĂȘtres, et dans ce cas, la vanne sâouvrirait davantage pour compenser. Sâil y a une variation de 0.1°C en 25 minutes, il nây aura pas dans le calcul une valeur de 0.02°C/5min mais plutĂŽt 4 fois 0.0°C/5min puis 1 fois 0.1°C/5min. Ainsi, Ă chaque fois que la tempĂ©rature fais du +/-0.1°C autour de la tempĂ©rature de consigne, le terme dĂ©rivĂ© ferait +/-X% sur lâouverture un peu inutilement je trouve puisque le terme intĂ©gral effectue dĂ©jĂ la correction et surtout en douceur.
De plus, il y a encore un autre problĂšme avec la dĂ©rivĂ©e lors du changement de consigne. Lorsque la consigne passe de 19°C Ă 20°C, lâerreur va passer de 0°C Ă 1°C puis Ă 0.9°C, 0.8°C, 0.7°C. La variation de lâerreur passe de 0°C/5min (temp de consigne atteinte) Ă 1°C/5min puis globalement constante Ă 0.1°C/5min par la suite. La vanne effectuera un aller-retour inutilement en 5 minutes. DâoĂč la nĂ©cessitĂ© de rajouter un filtrage sur le terme dĂ©rivĂ© pour limiter ce pic.
Vu tous les problĂšmes avec la partie dĂ©rivĂ©e, je reste en rĂ©gulation PIâŠ
EDIT : jâai publiĂ© mon code ici
Jâai rĂ©alisĂ© un rĂ©gulateur PID pour la gestion dâune vanne thermostatique Z-Wave Spirit en mode manuelle (fonctionnement en %). Parce que moi je veux que ça commence avec du pied au plancher (vanne ouverte Ă 100%) Ă 5h le matin pour que ça monte rapidement en tempĂ©rature
Le rĂ©gulateur calcule une valeur dâouverture de vanne comprise entre 0% et 100% Ă envoyer Ă la tĂȘte thermostatique en fonction de lâĂ©cart entre la tempĂ©rature mesurĂ©e et la tempĂ©rature de consigne afin de rĂ©guler la tâŠ
Pour faire ce scénario, je me suis inspiré de cette page
http://www.ferdinandpiette.com/blog/2011/08/implementer-un-pid-sans-faire-de-calculs/
Bug rencontrĂ© : il mâest arrivĂ© que des expressions ne soient pas calculĂ©es numĂ©riquement et les variables/tag deviennent des chaĂźnes de caractĂšres contenant les formules au lieu des rĂ©sultats de calcul. Puis aprĂšs itĂ©rations, ces chaĂźnes de caractĂšres ne font que sâallongerâŠ
Bonjour,
Jâai un scĂ©nario qui sâexĂ©cute toutes 5 min pour effectuer des calculs de façon itĂ©rative.
Il commence par rĂ©cupĂ©rer la valeur dâune variable dans un tag, puis effectue les calculs avec ce tag et enregistre Ă la fin le nouveau rĂ©sultat du tag dans la variable.
Cela fonctionne bien sauf quâĂ un moment donnĂ©e le nombre peut avoir un exposant dans lâĂ©criture du nombre. Ici, câest un E-12 qui traĂźne.
Ensuite, lorsque le tag rĂ©cupĂšre la valeur ce cette variable, il le considĂšre comme uneâŠ
Au final, la difficulté est de trouver les bonnes valeurs des coefficients du régulateur et faire mieux que le constructeur.