Neues Modul PID20 - Der PID-Regler

Begonnen von John, 02 Dezember 2013, 22:03:40

Vorheriges Thema - Nächstes Thema

JHo

Hallo John,

super, vielen Dank für die Aufklärung! Ich werde im Winter mal monitoren, wie stark das von mir betreute Clubheim auskühlt, wenn die Therme nur im Frostmodus ist und zirkuliert, aber die Heizkörper "zu" bleiben. Vielleicht reicht ja die Heizleistung im Beton aus, um zumindest ein paar Tage über die Runden zu kommen und die Nachbarn zu alarmieren, notfalls die elektrischen Heizkörperthermostate ab- und die guten alten analogen Dinger wieder anzuschrauben.

Noch eine Frage, auf die ich hier im Thread gestoßen bin: Nachtabsenkung der Heizkreistemperatur.
Ich habe das sehr krass im Clubheim (#2 meiner Signatur) mit 1-2 Terminen pro Woche, in denen geheizt werden muss. Von Mitte Dezember bis Mitte Januar ist gar nichts los. Dort fahren wir die Therme im Frostschutzbetrieb (springt bei Vorlauf um die 5° an) mit den MAX-Thermostaten auf 5.5°. Wenn eine Veranstaltung ansteht, geht die Therme via HCS auf 75° im Vorlauf, damit wir den massiv ausgekühlten Raum schnell auf Temperatur bringen. Die Thermostate stehen dann auf 19.5°. Über HCS wird die Therme nach Erreichen der Zieltemperatur wieder abgeschaltet, die Hitze im Vorlauf hält ja aber noch ein wenig an und "heizt" weiter.
Klar, dass die MAX-interne Regelung damit komplett überfordert ist und von sich aus Schwankungen über +-2.5° um die Zieltemperatur produziert. Sie kann ja auch nicht wissen, dass zwischenzeitlich mal der Wärmelieferant Therme wieder ab- und bei Bedarf wieder zugeschaltet wird. Dummerweise kommen zwischendurch dann auch noch einige Personen in den Raum, die kräftig Wärme abstrahlen. Das MAX-System ist hier meiner Meinung nach viiiel zu träge, und reizt geradezu, die Zieltemperatur vor Ort händisch nachzuregeln. Das macht die Schwankung dann natürlich noch schlimmer.

Frage dazu also: wie verfahre ich mit der Kombination HCS / PID20? Habe vorne im Thread (https://forum.fhem.de/index.php/topic,17067.msg134945.html#msg134945 bzw. https://forum.fhem.de/index.php/topic,17067.msg121126.html#msg121126) gelesen, dass sinnvollerweise in dem Fall PID bei Ist>Soll gestoppt werden soll. Macht hier als Stop-Temperaturwert genau der Zielwert fürs Ausschalten der Therme Sinn? Ab welchem Delta nach unten starte ich PID sinnvollerweise wieder?

Fraglich für mich auch die x Tage, in denen gar nichts passiert und nichts zu regeln ist (außer Frostschutz ggf.). Heute z.B. sind dort Ist bei 11°, Soll bei 6. Macht das Sinn, hier PID weiter laufen zu lassen, auch wenn ohnehin nichts zu regeln ist? "Versaue" ich mir damit auch den I-Anteil, wenn PID weiter läuft, oder besser: gelten die Aussagen für "Ist>Soll" auch bei so einer großen Soll/Ist-Differenz?

Bin leider kein Techniker und daher sehr unsicher in meinen Überlegungen... daher nochmal herzlichen Dank für unterstützende Gedanken!
Jan
1: FHEM auf Ubuntu, MAX!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, diverse LaCrosse-Sensoren, per remote angebundene DS18B20-Sensoren
2: FHEM auf Raspi 3, Max!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, ht_pitiny-Adapter zu Junkers FW120

John

@Jho

Den Frostschutz zu gewährleisten ist die eine Sache, aber es gilt auch die Feuchte  im Gebäude im Griff zu behalten.

Wenn die relative Feuchte zu hoch ist (>70%) besteht die Gefahr von Schimmelbildung an den kältesten Stellen des Gebäudes.

Auch das kann man mit ausreichender Raumtemperatur beeinflussen.

Die Max-Thermostate halte ich für deinen Anwendungsfall nur bedingt für geeignet. Diese haben einen adaptiven (selbst-lernenden) Algorithmus, der sich über Tage hinweg ausbildet.

Vielleicht gibt es die Möglichkeit die Temperatur im  Versammlungsraum als Führungsgröße (Istwert für die Regelung)  für deine Therme zu verwenden. Einige Heizungsregelungen unterstützten diesen Modus. Dazu müsste ein kompatibler Themeraturfühler in dem Raum installiert sein, der direkt an die Steuerung deiner Therme angeschlossen ist.

Die Aufheizphase sollte nicht zu kurz bemessen sein, da sich sonst sehr viel Wärmeengergie in kurzer Zeit im System befindet, was regelungstechnisch nicht einfach zu handhaben ist.

Ein anderer Ansatz:


* du verwendest PID20 für die Präsenz-Zeiten, hierbei ist das MAX-Ventil das Stellglied (Sollwert auf 30 Grad, PID beeinflusst maxValveSetting)
* du vewendest MAX im Normal-Modus (hier greift die Max-Reglung)  für die Absenz-Zeiten und gewährleistet damit die Mindest-Raumtemperatur um Schimmelbildung und Frost zu verhindern


Wie steuerst du deine Therme an ? nur per EIN/AUS oder kannst du den Sollwert vorgeben ?



John



CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

JHo

Hallo John,

nochmal Danke. Schimmel... ja. Jein. Das Gebäude ist in den 60ern selbst gebaut worden und bis auf ganz wenig am Dach komplett ungedämmt. Da pfeift es durch, Schimmel hatten wir noch nie. Aber klar, das muss jetzt natürlich intensiver beobachtet werden: die letzten 40 Jahre wurde mit zwei Gas-Einzelöfen geheizt (d.h. der Referent ist bei kalten Temperaturen ein paar Stunden vor Beginn vorbei gefahren und hat die Öfen aufgedreht) und im Winter zusätzlich mit Elektrofrostwächtern die Sanitäranlagen bedient. Unser Vermieter hat uns "erfreulicherweise" den Sanitärbereich renoviert und damit auf Zentralheizung (Gastherme) und Wasser-Radiatoren umgestellt. Damit haben wir nun mit FHEM / MAX zwar mehr Komfort, aber eben viel Ballast nebenbei. Den ersten Winter haben wir in 2 Monaten unseren vorherigen Jahresverbrauch an Gas durchgebracht, daher bin jetzt ich mit FHEM und MAX am Drücker.

Wir steuern die Therme bisher ohne eigenen Raumthermostat (lässt sich organisieren, verbaut ist die Junkers FW120 direkt am Gerät) über das Heatronic-Modul und einen Pitiny-Adapter am Heizungsbus. Im Moment steuere ich wirklich rein über An (75° Fuß- und Endpunkt, also völlig unabhängig von der Außentemperatur) / Aus (Frost) und lasse die Heizkörperthermostate "den Rest" regeln. Da wir ca. 3K/Stunde beim Aufheizen schaffen, kann ich die notwendige Dauer fürs Aufheizen im Wochenprogramm jeweils (händisch) drauflegen und unsere Ausbildungsteilnehmer sitzen im Warmen, zumindest im Rahmen der o.g. Schwankungen. Klar kann ich weniger Vorlauf einstellen und tue mich dann leichter, die Zieltemperatur zu halten. Dafür brauche ich eben längeren Vorlauf. Keine Ahnung, was effizienter ist.

Ich kann per Heatronic auch die Raum-Zieltemperatur vorgeben, habe aber zumindest bei der Fuß-/Endpunkteinstellung das Gefühl, dass das überhaupt keinen Einfluss auf irgendwas hat. Da muss ich nochmal das Junkers-Handbuch wälzen, welche Methode da die richtige wäre. In jedem Fall brauche ich eine Vorlauftemperatur, die unabhängig von der Außentemperatur ist, um die notwendige Aufheizzeit irgendwie sinnvoll miteinkalkulieren zu können.

Wie stelle ich denn nach Deiner Anregung zwischen PID20 und Max-Modus um?
*Präsenzzeit --> PID --> Wochenprogramm auf "ON" und PID starten (Ist- und Solltemperatur wird vom Wandthermostat genommen)
*Absenzzeit --> Normalmodus --> Wochenprogramm auf 6°, PID stoppen; Solltemperatur kann nicht am Wandthermostat gestellt werden, da es ja nicht mit den Heizkörpern assoziiert sein darf

Jan
1: FHEM auf Ubuntu, MAX!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, diverse LaCrosse-Sensoren, per remote angebundene DS18B20-Sensoren
2: FHEM auf Raspi 3, Max!Cube, Wand- und Heizkörperthermostate, Eco-Schalter, ht_pitiny-Adapter zu Junkers FW120

John

ZitatIn jedem Fall brauche ich eine Vorlauftemperatur, die unabhängig von der Außentemperatur ist, um die notwendige Aufheizzeit irgendwie sinnvoll miteinkalkulieren zu können.

Es macht schon Sinn, wenn die Brennersteuerung die Vorlauftemperatur über die  Aussentemperatur festlegt. Je kälter es draussen ist, umso höher wird die Vorlauftemperatur,
da ja auch mehr Wärmeverluste auszugleichen sind (Temperaturdifferenz zwischen Raum- und Aussentemperatur).

Auch wenn du fix mit 75 Grad im Vorlauf fährst wird sich je nach Aussentemperatur ein anderes zeitliches Verhalten ergeben.


Zum Thema alternierender Betrieb von MAX und PID20:

* die Regelung von MAX kann man eigentlich nicht abschalten
* wenn man jedoch den höchsten Sollwert vorgibt (der nie erreicht wird), so wird MAX das Ventil immer zu 100% öffnen
* in dieser Situation kann PID20 mit maxValveSetting direkt die Ventilöffnung beeinflussen


Präsenz-Modus:
* Sollwert Max auf 30 Grad (Max-Regelung ist "inaktiv")
* PID20 aktivieren (manipuliert das Reading maxValveSetting und steuert somit direkt die Ventilöffnung von MAX)
* set <PID> restart 100

Absenz-Modus
* Sollwert von Max auf 5 Grad  bzw. OFF (Frostschutz)
* PID20 deaktivieren (set <PID> stop)
* maxValveSetting auf 100 setzen

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

exciter

Moin,
kann man das Modul einsetzten um eine KWL anhand des Co2 Wertes in der Luft zu regeln?
Ich habe einen Co2 Sensor, welcher mir jede Minute den Co2-Wert bereitstellt.
Die Lüftungsanlage kann in 8-Stufen geregelt werden.
Ich habe den Regler definiert:

defmod co2regler PID20 ESPEasy_Umweltsensor_co2_og:PPM Vallox_350SE:Stufe
attr co2regler event-on-change-reading .*
attr co2regler pidActorErrorAction errorPos
attr co2regler pidActorErrorPos 4
attr co2regler pidActorInterval 30
attr co2regler pidActorKeepAlive 900
attr co2regler pidActorLimitLower 1
attr co2regler pidActorLimitUpper 8
attr co2regler pidActorTreshold 0
attr co2regler pidActorValueDecPlaces 0
attr co2regler pidCalcInterval 30
attr co2regler pidFactor_I 0.1
attr co2regler pidFactor_P 0.8
attr co2regler pidReverseAction 1
attr co2regler room ESPEasy


Wie taste ich mich am Besten an die P/I Komponenten ran?
Ich habe diverse Einstellungen durchprobiert, aber es wird immer nur die Stufe 1 / 8 angefahren, Zwischenstufen leider nicht.
Kann mit hier vielleicht jemand auf die Sprünge helfen oder ist das Modul für sowas ungeeignet?

Gruß Steffen

abc2006

Hi,
als erstes würde ich dir vorschlagen, ein SVG zu erstellen, in dem du measured, pi,pp und pd sowie actuation ausgibst. Daran kannst du sehr gut erkennen, welcher der Werte den sprung von 1 auf 8 verursacht.

Mein Gefühl sagt:
calcInterval zu klein
pidFactor_i zu groß
pidFactor_d zu klein


Wie stark schwankt denn der CO2-Wert? Zeig mal ein paar Messwerte...
Wenn du einen "schlechten" CO2-Wert hast und die Lüftung auf 1 (2...8) einschaltest, wie lange dauert es etwa, bis sich der Wert anfängt zu ändern?
Was mir grade noch einfällt: Wenn der CO2-Sensor direkt an der Zuluft hängt, könnte das durchaus kontraproduktiv sein... ich würde ihn an eine geschützte stelle bauen, evtl sogar in den Abluft-Kanal...


Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

cwagner

Meine Erfahrung ist bei einer KWL ebenfalls, dass die Messung in der Abluft deutlich besser als Regelgröße funktioniert.

Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

exciter

Danke für eure Antworten :)
Was habt ihr für Werte eingestellt? Müsste ein PI-Regler nicht langen?
Abluft direkt am Zentralrohr der  KWL oder beim zu "überwachenden" Raum selber im Abluftrohr?
LG

cwagner

Da ich aktuell nur einen Fühler habe (und schließlich auch nur je einen Zuluft-/Abluftmotor, den ich steuern kann)  habe ich mich entschlossen, der zentralen Abluftrohr (hinter dem letzten Filter) zu messen (Mischung aller Abluften).

Herzliche Grüße

Christian
PI 2B+/3B+ Raspbian 12, Perl 5.36.0, FHEM 6.3: 295 Module in ConfigDB: Steuerung Heizkessel, FBH, Solarthermie, kontr. Lüftung mit WRG. Smarthome u.a. HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM EPS3), MQTT2. DOIF, PID20, Threshold, OWX; Micropelt IRTV, Volkszähler, SolarForecast; MariaDB

abc2006

ZitatWie stark schwankt denn der CO2-Wert? Zeig mal ein paar Messwerte...
Wenn du einen "schlechten" CO2-Wert hast und die Lüftung auf 1 (2...8) einschaltest, wie lange dauert es etwa, bis sich der Wert anfängt zu ändern?


Wenn du mir ein paar Werte zur Verfügung stellt, äusser ich mich gerne mal zu den start-faktoren..
aber *raten* kann ich die nicht...

grüße,
Stephan  (der für diese Steuerung vermutlich auf den I-Anteil verzichten würde)
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

John

#370
@exciter

Ich meine daß diese Parametrierung keine gute Idee ist:

attr co2regler pidActorLimitLower 1
attr co2regler pidActorLimitUpper 8
attr co2regler pidActorTreshold 0


Gründe:
Der PID Actor-Bereich wird extrem eingeschränkt, um eine Anpassung an den Eingang des Aktors mit Stufe 1..8 zu erreichen.

Viel sinnvoller ist die Vorstellung, daß PID am Ausgang eine Wert von 0..100%  aufweisen kann.
Dieser ist dann auf den Eingangsbereich des physischen Aktors zu transformieren.

Beispiel:
Von Bis Stufe
0
12
1
13
25
2
26
37
3
38
50
4
51
62
5
63
75
6
76
87
7
88
100
8

Damit kann auch pidActorTreshold wieder eingesetzt werden und das ist auch dringend geboten.
Angenommen PID befindet sich direkt am Übergang von einer zur nächsten Schaltstufe, so würde er dauernd hin- und herschalten.
Die vorgeschlagene Transformation lässt sich sicher gut mit einem User-Reading umsetzen.

Denkbare logiche Transformations-Formel : GANZZAHL(actuation/100+1)

John
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

exciter

Kann ich denn userreadings nutzen um das Reading actuation  direkt zu ändern?
Nur unter Verwendung eines neuen Readings oder nicht?
Z.B. actuation {int( ReadingsVal("co2regler","actuation",0)/12.5)} funktioniert nicht.

Schreibe ich: actuation2 {int( ReadingsVal("co2regler","actuation",0)/12.5)}, haut es hin und ich bekomme bei actuation 100% -> actuation2 = 8.

Bezüglich werte/Diagramme/SVG habe ich noch nix Vernünftiges.

John


Rezept:


       
  • beim Device Vallox_350SE ein UserReading "actuation" erzeugen

       
  • die PID20 Defintion so abändern, daß das neue Reading verwendet wird

       
  • Für Vallox_350SE.actuation ein notify definieren, daß den Wert wie vorgeschlagen transformiert und in das Reading Vallox_350SE:Stufe schreibt.
CubieTruck Docker Node-Red Tasmota Shelly Homematic-IP

abc2006

Gründe:
Der PID Actor-Bereich wird extrem eingeschränkt, um eine Anpassung an den Eingang des Aktors mit Stufe 1..8 zu erreichen.


Für mich zum Verständnis:
*Eigentlich* dürfte das doch keinen Unterschied machen, ob ich jetzt Werte von 1-100 nehme und die Faktoren auf 5 oder 10 einstelle,
oder ob ich Werte 1-8 nehme und die Faktoren auf 0.2 einstelle?

mit dem Threshold hast du natürlich recht, da sollte man das schwanken verhindern.
Bleibt die Frage, in welchen Grenzen sich der CO2-Wert bewegt...

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

exciter

Moin,
der CO2-Wert schwankt so zwischen 400PPM (keiner Anwesend) und ~1200-1500PPM (2 Personen anwesend im Schlafzimmer).

Gruß Steffen