NEWS
[gelöst] Konfiguration: Zusätzliche NPM-Module ?
-
@hanss sagte: Wieso schreibst du sie nicht auf?
Was soll ich aufschreiben?
Die vorgegebenen Parameter Xp = 4 K und Tn = 600 s passen i.d.R. zur Raumtemperatur-Regelung.
Mit Istwert 19°C und Sollwert 20°C durchläuft dann der I-Anteil den Ausgang zwischen 0 und OutputMax in 40 Minuten:
dt = Xp / dT * Tn -
@paul53
Also: Das Beispiel oben ergibt bei Ist=19, Soll=20, Xp=4, Tn=600:13:00:43.728 info javascript.0 (3743) script.js.test.PI_Regler: Stellwert: 0.8 13:03:13.729 info javascript.0 (3743) script.js.test.PI_Regler: Stellwert: 0.9 13:05:43.730 info javascript.0 (3743) script.js.test.PI_Regler: Stellwert: 0.9 13:08:13.730 info javascript.0 (3743) script.js.test.PI_Regler: Stellwert: 1.0
-
@hanss
Welchen Wert hat OutputMax? -
@hanss
Bei mir mit OutputMax = 100 und sonst identischen Werten:13:22:38.893 info javascript.1 (3896) script.js.common.PI_Regler: 82.0 13:25:08.894 info javascript.1 (3896) script.js.common.PI_Regler: 88.2 13:27:38.896 info javascript.1 (3896) script.js.common.PI_Regler: 94.5
also 25 % in 10 Minuten, so wie zu erwarten.
-
@paul53
Ist das nich das selbe Ergebnis?
OutputMax 1: 0.8, 0,9 ...
OutputMax 100: 80, 90Du meintest aber: Ausgang zwischen 0 und OutputMax in 40 Minuten
-
@hanss sagte: Ausgang zwischen 0 und OutputMax in 40 Minuten
Ja, wenn das Stellsignal bei 0 startet, benötigt es 40 Minuten bis OutputMax, wenn sich zwischendurch Ist- und Sollwert nicht ändern.
-
@paul53
Irgendwie habe ich den Eindruck, du verstehst nicht, was ich meine:
Das Beispiel oben ergibt bei Ist=19, Soll=20, Xp=4, Tn=600:
Das Stellsignal startet eben nicht bei 0 sondern bei 80% von OutputMax -
@hanss sagte: Das Stellsignal startet eben nicht bei 0 sondern bei 80% von OutputMax
Das ist bedingt durch den P-Anteil: Der liefert 75 % von OutputMax bei diesen Werten.
-
@paul53
Jetzt kommen wir der Sache näher.
Wie kommen die 75% zustande und was muß ich einstellen, damit das Stellsignal bei 0 beginnt? -
@hanss sagte: was muß ich einstellen, damit das Stellsignal bei 0 beginnt?
Das wirst Du nicht schaffen, denn der P-Anteil verhindert es. Es ist eben ein PI-Regler und kein I-Regler.
-
@paul53
wie ist denn dann die Einstellung für minimalsten P-Anteil? -
@hanss sagte: wie ist denn dann die Einstellung für minimalsten P-Anteil?
Um einem I-Regler nahe zu kommen, muss Xp sehr groß und Tn sehr klein sein. Aber der Regler fängt dann nach Skriptstart immer bei 50% an.
-
@paul53
Wo steht denn das?
Ich glaube ich mache es mir selbst mit:e = Soll-Ist
esum = esum + e
y = Kp * e + Ki * Ta * esum -
@hanss sagte: y = Kp * e + Ki * Ta * esum
Das ist die theoretische Formel für einen PI-Regler, die in der regelungstechnischen Praxis keine Bedeutung hat.
-
@paul53
Damit weiß ich wenigstens wie die Stellgröße zustande kommt und kann darauf einwirken,
ist immer noch besser als ein Regler bei dem ich die Stellgröße erraten muß. -
Ich habe mir schon einen I-Regler gebaut, heißt hier Stepper.
Ist ein wenig "experimental", funktioniert aber genauso wie er soll.
Versuche nun, den ein wenig übersichtlicher zu machen.// ########################### Stepper ############################################### function Stepper(){ const maxUp = 15 // VL steigt mit max. 15K/h const maxDown = -10 // VL fällt mit max. 10K/h let Heizung_Ein = (getState('javascript.0.haus.keller.Weishaupt_WCM-COM.Heiz_Ein').val == '1') // WCM Heizbetrieb let WMZ_RLtemp = getState('mqtt.0.haus.keller.WMZ.RLTemp').val let WCM_LastStellung = parseFloat(getState("javascript.0.haus.keller.Weishaupt_WCM-COM.Laststellung").val) let WCM_VLsoll = parseFloat(getState("javascript.0.haus.keller.Weishaupt_WCM-COM.Vorlauf_Soll").val) let WCM_VList = parseFloat(getState("javascript.0.haus.keller.Weishaupt_WCM-COM.Vorlauf_Ist").val) let RTdiff = getState(Out_Root+'Kessel.RTdiff').val // Differenz Temp. alle Räume let RTStepSum = getState(Out_Root+"Kessel.RTStepSum").val // wegen Programm Neustart if (RTdiff<=0 && !unterNull){ // Verhindert weiteres Absinken der VL Temperatur unterNull = true } if (RTdiff>0 && unterNull){ unterNull = false } if (!Thermostat) { if ( (RTStepSum < -RTdiff) && ((WCM_VLsoll-WCM_VList) < 3) && (Heizung_Ein) && unterNull) { if ( (WMZ_RLtemp < 30) || (WCM_LastStellung < 70) ) { // Rücklauf Temp. Begrenzer 30° RTStepSum += maxUp/RTVLFakt/60; // heizen // log('heizen: '+ RTStepSum) } } else { // if ( (RTStepSum > -RTdiff) { // Thermostat Funktion if ( (RTStepSum > -RTdiff) && ((WCM_VList-WCM_VLsoll) < 3) && !unterNull) { // Thermostat Funktion verhindern, konstant Heizen RTStepSum += maxDown/RTVLFakt/60; // kühlen // log('kühlen: '+RTStepSum) } } } // !Thermostat if ( ((RTdiff > 0.7) || ((WCM_VList-WCM_VLsoll) > 4) ) && !Thermostat && ((Date.now()-ThTimerAus) > 10*60*1000 ) ) { // 5 Min timeout RTStepSum = -(ThermoTemp+1) // Thermostat ein (darf nicht unter Absenk-Temperatur) Thermostat = true ThTimerEin = Date.now(); log("******* Thermostat EIN RTdiff: "+RTdiff+' VLi: '+WCM_VList+' VLs: '+WCM_VLsoll) } if ( (RTdiff < 0.2) && Thermostat && ((Date.now()-ThTimerEin) > 10*60*1000 ) ) { // 10 Min timeout -0.1 RTStepSum = 0.1 // Thermostat aus Thermostat = false THein = true ThTimerAus = Date.now() log("******* Thermostat AUS RTdiff: "+RTdiff+' VLi: '+WCM_VList+' VLs: '+WCM_VLsoll) } // log("RTStepSum: "+RTStepSum) if (WCM_Stoerung || EvoHome_Stoerung) RTStepSum = 0 setState(Out_Root+"Kessel.RTStepSum",RTStepSum) return RTStepSum; } // ########################### Stepper ###############################################
-
@paul53
Hast Du dich schon mit einer Heizungsregelung befasst?
Würde Dich mein Problem interessieren? Wenn nicht ist es auch nicht schlimm. -
@hanss sagte: Hast Du dich schon mit einer Heizungsregelung befasst?
Ja.
@hanss sagte in [gelöst] Konfiguration: Zusätzliche NPM-Module ?:
Würde Dich mein Problem interessieren?
Was ist Dein Problem?
-
Es wäre sehr interessant für mich, wie Du an die Sache herangehen würdest:
ioBroker Eingangssignale
Einzelraumregelung: Soll- u. Ist Temperaturen aller 8 Räume
Therme: Soll- und Ist-Vorlauftemperatur, Rücklauftemperatur, Volumenstrom, Laststellung, AußentemperaturioBroker Ausgangssignal:
Therme: Soll-Raumtemperatur (Ist-Raumtemperatur kann nur über die Heizung-Fernbedienung verstellt werden
und ist bei 21°C fest eingestellt).
Die Thermen-Raumtemperaturen dienen nur zur Steuerung, bitte nicht mit den
tatsächlichen Raumtemperaturen der EZR verwechseln.Die Therme steuert die Vorlauftemperatur anhand der Außentemperatur, Steilheit und Differenz der
Thermen Raum-Soll u. Raum-Ist Temperatur. Der P-Anteil ist einstellbar.Besonderheiten:
Wenn der Vorlauf-Ist um 7K größer ist als der Vorlauf-Soll, dann schaltet die Therme ab (Takten)
Wenn die Thermen Raum-Ist um 3K größer ist als der Thermen Raum-Soll, dann schaltet die Therme ab (Thermostat), schaltet erst wieder ein, wenn die Thermen Raum-Ist kleiner ist als Thermen Raum-Soll.Über die Einzelraumregelung erfolgt eine Nachtabsenkung auf 18°C.
Morgens werden die Räume zu unterschiedlichen Zeiten hochgefahren und sollen möglichst schnell aufheizen.So sieht das jetzt aus:
RTdiff:
Es wird die (Soll-Ist) Differenz jedes einzelnen Raumes ermittelt.
RTdiff ist der Durchschnitt dieser 8 Raum-Differenz Temperaturen.
Besonderheit:
Ist ein Raum mehr als 0,6K zu kalt, dann wird als RTdiff die Differenztemperatur des kältesten Raumes
verwendet und nicht der Durchschnitt. -
@hanss sagte: ioBroker Ausgangssignal:
Therme: Soll-Raumtemperatur
Das ist die einzige Größe, die sich steuern lässt und sie bewirkt eine Parallelverschiebung der Heizkurve?
Dann würde ich sie in Abhängigkeit von der maximalen Ventilstellung aller ERR verändern.@hanss sagte in [gelöst] Konfiguration: Zusätzliche NPM-Module ?:
Über die Einzelraumregelung erfolgt eine Nachtabsenkung auf 18°C.
In den Räumen oder an der Therme?
@hanss sagte in [gelöst] Konfiguration: Zusätzliche NPM-Module ?:
Wenn die Thermen Raum-Ist um 3K größer ist als der Thermen Raum-Soll, dann schaltet die Therme ab (Thermostat), schaltet erst wieder ein, wenn die Thermen Raum-Ist kleiner ist als Thermen Raum-Soll.
Es gibt einen Referenzraum, mit 2-Punkt-Regler (Uhrenthermostat), der die Therme steuert? Gibt es in diesem Raum zusätzlich ERR (Thermostatventile) ?