NEWS
[gelöst] Konfiguration: Zusätzliche NPM-Module ?
-
@hanss sagte: Hast du einmal untersucht, wie die Parameter Xp und Tn sich auswirken?
Ich weiß, wie sich die Parameter auswirken. Welche Parameter hast Du gewählt?
-
@paul53
Das ist schön, wenn du es weist.
Wieso schreibst du sie nicht auf?
Ich habe für alles mögliche versucht, von xp 0-10 und Tn 1-500 -
@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?