Hallo allerseits,
Da sich seit meiner ersten Beschreibung doch noch so dies und das geändert hat, mache ich die hier mal -- leichter auffindbar -- neu.
Das Haus stammt aus den 80er Jahren und ist -- mit Ausnahme des Satteldaches -- nicht energetisch saniert. Es wird mit Fernwärme beheizt, was aber in diesem ersten Teil noch keine Rolle spielt. Realisiert ist eine bedarfsgeführte Regelung, wobei die maximal bereitgestellte Heizleistung/Vorlauftemperatur für 100% Bedarf mit einer Heizkurve bestimmt wird. Besteht seitens der Raumtemperaturregler (RTR) weniger Bedarf, dann senkt der Regler die Vorlauftemperatur unter die Heizkurven-Temperatur ab. Besteht gar kein Bedarf mehr, dann wird die Heizung komplett abgeschaltet. Da die RTR schon Zeitschaltuhren haben, ist für die Nachtabsenkung/-abschaltung keine zentrale Schaltuhr mehr nötig: Sind alle Räume auf Nachtbetrieb abgesenkt, so ist automatisch auch die Vorlauftemperatur entsprechend abgesenkt oder die Heizung sogar komplett abgeschaltet.
In diesem Teil 1 der Beschreibung beschäftigen wir uns mit:
Heizungsregelung1.png
Die über 6 Stunden gemittelte Außentemperatur Tavg aus dem Baustein "Statistik für Zeitreihen" wird für die Heizkurve verwendet, die in der ersten Formel des Formelberechnungs-Bausteins steckt:
Die weiteren Parameter der verwendeten Funktion sind:
Die weiteren Formeln befassen sich anhand weiterer Eingabegrößen mit der bedarfsgeführten Reduzierung der Vorlauftemperatur bis hin zur Abschaltung der Heizung:
Heizungsregelung2.png
Auch hier ist wieder eine Formelberechnung zentrales Element im Logikblatt. Sie erhält folgende Eingabegrößen:
Ein Statistikbaustein ermittelt aus den Ergebnissen der ersten beiden Formeln den Index des Raums mit dem größten Komfortverlust, sofern dieser über 0.5 liegt (ansonsten einen ungültigen Index). Diesen benötigen wir zur Steuerung der Zwangsöffnung von Heizkörper-Stellventilen (da kommen wir später dazu).
Ein weiteres Logikblatt ermittelt
Heizungsregelung3.png
Die Eingangswahlschalter+-Bausteine wählen anhand des Indexes von den Raumwerten (Soll- und Ist-Temperatur) jeweils den des Führungsraums aus.
Die folgenden beiden Logikblätter öffnen Stellventile voll, wenn das gewünscht ist, so z. B. im Führungsraum und in dem Raum mit dem größten Komfortverlust. Dazu wandelt das folgende Logikblatt zunächst die Indizes des Führungsraums und des Raums mit dem größten Komfortverlust in Wahrheitswerte für jeden Raum um:
Heizungsregelung5.png
Diese werden anschließend für jeden Raum gleich weiterverarbeitet, um zu entscheiden, ob das Stellventil im Raum zwangsgeöffnet werden soll:
Heizungsregelung4.png
Die erste Formelberechnung (im Bild ganz unten) errechnet die Abregelgrenze. Liegt in einem Raum eine Stellgröße oberhalb dieses Werts -- also in der Nähe der Stellgröße des Führungsraums -- an, dann soll auch dort das Ventil zwangsgeöffnet werden:
wobel Smax die größte Stellgröße eines RTR in irgend einem Raum ist.
Die beiden anderen Formelberechnungen -- eine pro Raum -- sind identisch mit folgenden Formeln parametriert:
Ende Teil 1
Da sich seit meiner ersten Beschreibung doch noch so dies und das geändert hat, mache ich die hier mal -- leichter auffindbar -- neu.
Das Haus stammt aus den 80er Jahren und ist -- mit Ausnahme des Satteldaches -- nicht energetisch saniert. Es wird mit Fernwärme beheizt, was aber in diesem ersten Teil noch keine Rolle spielt. Realisiert ist eine bedarfsgeführte Regelung, wobei die maximal bereitgestellte Heizleistung/Vorlauftemperatur für 100% Bedarf mit einer Heizkurve bestimmt wird. Besteht seitens der Raumtemperaturregler (RTR) weniger Bedarf, dann senkt der Regler die Vorlauftemperatur unter die Heizkurven-Temperatur ab. Besteht gar kein Bedarf mehr, dann wird die Heizung komplett abgeschaltet. Da die RTR schon Zeitschaltuhren haben, ist für die Nachtabsenkung/-abschaltung keine zentrale Schaltuhr mehr nötig: Sind alle Räume auf Nachtbetrieb abgesenkt, so ist automatisch auch die Vorlauftemperatur entsprechend abgesenkt oder die Heizung sogar komplett abgeschaltet.
In diesem Teil 1 der Beschreibung beschäftigen wir uns mit:
- Erfassung und Aufbereitung der Außentemperatur
- Heizkurve
- Feststellung und Aufschaltung des tatsächlichen Heizbedarfs
- Sommer/Winter-Umschaltung
Heizungsregelung1.png
Die über 6 Stunden gemittelte Außentemperatur Tavg aus dem Baustein "Statistik für Zeitreihen" wird für die Heizkurve verwendet, die in der ersten Formel des Formelberechnungs-Bausteins steckt:
Hlk.HeatingCurve({Tavg:N}, 18, -12, {Trmax:N}, 70, 1.33)
Die weiteren Parameter der verwendeten Funktion sind:
- die Heizgrenze (über 18 Grad Außentemperatur wird generell nicht geheizt)
- die minimal zu erwartende Außentemperatur (-12 Grad), bei der die maximale Vorlauftemperatur erreicht wird
- die maximale Raumtemperatur von 22 Grad
- die Auslegungstemperatur (maximale Vorlauftemperatur) der Heizungsanlage von 70 Grad
- Der Heizkörperexponent 1.33, der die Krümmung der Heizkurve (Überhöhung bei milden Außentemperaturen) bestimmt
Die weiteren Formeln befassen sich anhand weiterer Eingabegrößen mit der bedarfsgeführten Reduzierung der Vorlauftemperatur bis hin zur Abschaltung der Heizung:
- Formel 2 reduziert die Vorlauftemperatur linear entsprechend dem Bedarf des RTR mit der größten Stellgröße:
({Bedarf:N} / 100) * (_out1_ - {Trmax}) + {Trmax} - Formel 3 errechnet anhand des Komfortverlustes (im Bereich 0.0 = kein Komfortverlust .. 1.0 = erheblicher Komfortverlust) die endgültige Vorlauftemperatur, die irgendwo zwischen denen aus den ersten beiden Formeln liegt:
({Komfortverlust:N} * _out1_) + ((1.0 - {Komfortverlust}) * _out2_) - Formel 4 legt die minimale Vorlauftemperatur fest, unterhalb derer keine nennenswerte Heizleistung zu erwarten ist:
/* Tvsmin = */ {Trmax} + 1.0 - Formel 5 ermittelt anhand von Heizperiode ("Winterbetrieb") und finaler Vorlauftemperatur, ob die Heizung laufen soll (Ausgabewert aus Formel 3 gerundet auf 0.25 Grad) oder abgeschaltet werden soll (Ausgabewert 0.0):
({Heizperiode:B} && ({Bedarf} >= 5.0) && (_out3_ >= _out4_)) ? (Math.Round(_out3_ * 4.0) / 4.0) : 0.0 - Formel 6 sorgt dafür, dass dem Heizungsregler nur dann eine neue Vorlauftemperatur vorgegeben wird, wenn die Änderung mindestens 0.5 Grad beträgt:
(Math.Abs(_out5_ - _previousOut6_) > 0.49) ? _out5_ : _previousOut6_
Heizungsregelung2.png
Auch hier ist wieder eine Formelberechnung zentrales Element im Logikblatt. Sie erhält folgende Eingabegrößen:
- Soll- und Ist-Temperaturen sowie Heiz-Kühlmodus von (jederzeit erweiterbaren) 2 Räumen
- Die erwartete Höchst-Außentemperatur der nächsten 18 Stunden (aus OpenWeatherMap-Vorhersage)
- Die höchste in den letzten 18 Stunden benötigte Vorlauftemperatur
- Formel 1 ermittelt den Komfortverlust, der sich aus der Temperaturabweichung im Wohn-/Esszimmer ergibt, im Bereich 0.0 (kein Komfortverlust) .. 1.0 (erheblicher Komforverlust):
{WEZKühlen:B} ? 0.0 : Math.Max( ({WEZSoll:N} - 0.5 - {WEZIst:N}) / 2.5, 0.0 ) - Formel 2 tut das Gleiche fürs Bad:
{BadKühlen:B} ? 0.0 : Math.Max( ({BadSoll:N} - 0.5 - {BadIst:N}) / 2.5, 0.0 ) - Formel 3 gibt den höheren dieser Komfortverluste aus und begrenzt ihn auf 1.0:
/* Max. Komfortverlust */ Math.Min( 1.0, Math.Max(_out1_, _out2_) ) - Formel 4 schaltet auf Winterbetrieb, wenn sie true ergibt. Das geschieht, wenn der Komfortverlust in den (unbeheizten) Räumen zu hoch wird. Dabei hängt der akzeptable Komfortverlust auch von der demnächst erwarteten Außentemperatur ab. Ist sie niedrig, wird weniger Komfortverlust akzeptiert:
_out3_ > (1.0 - (20.0 - {Tamax:N}) / 12.0) - Formel 5 schaltet auf Sommerbetrieb, wenn sie true ergibt. Das geschieht, wenn entweder der Heizbedarf in den letzten 18 Stunden sehr gering war oder wenn die Außentemperatur voraussichtlich demnächst über 20 Grad steigen wird:
( (_previousOut6_ && {Tvsmax:N} < 27.0) ) || ({Tamax:N} > 20.0) - Formel 6 ergibt und speichert aus den vorigen beiden die Heizperiode (true = Winterbetrieb; false = Sommerbetrieb):
(_out4_ && !_out5_) ? (bool?)true : ( (_out5_ && !_out4_) ? (bool?)false : null )
Ein Statistikbaustein ermittelt aus den Ergebnissen der ersten beiden Formeln den Index des Raums mit dem größten Komfortverlust, sofern dieser über 0.5 liegt (ansonsten einen ungültigen Index). Diesen benötigen wir zur Steuerung der Zwangsöffnung von Heizkörper-Stellventilen (da kommen wir später dazu).
Ein weiteres Logikblatt ermittelt
- die größte RTR-Stellgröße als den Bedarf (zwischen 0 und 100%),
- welcher Raum -- der so genannte Führungsraum -- diesen Bedarf bedingt (als Index)
Heizungsregelung3.png
Die Eingangswahlschalter+-Bausteine wählen anhand des Indexes von den Raumwerten (Soll- und Ist-Temperatur) jeweils den des Führungsraums aus.
Die folgenden beiden Logikblätter öffnen Stellventile voll, wenn das gewünscht ist, so z. B. im Führungsraum und in dem Raum mit dem größten Komfortverlust. Dazu wandelt das folgende Logikblatt zunächst die Indizes des Führungsraums und des Raums mit dem größten Komfortverlust in Wahrheitswerte für jeden Raum um:
Heizungsregelung5.png
Diese werden anschließend für jeden Raum gleich weiterverarbeitet, um zu entscheiden, ob das Stellventil im Raum zwangsgeöffnet werden soll:
Heizungsregelung4.png
Die erste Formelberechnung (im Bild ganz unten) errechnet die Abregelgrenze. Liegt in einem Raum eine Stellgröße oberhalb dieses Werts -- also in der Nähe der Stellgröße des Führungsraums -- an, dann soll auch dort das Ventil zwangsgeöffnet werden:
Math.Max(0.9 * {Smax:N} - 7.5, 0.01)
wobel Smax die größte Stellgröße eines RTR in irgend einem Raum ist.
Die beiden anderen Formelberechnungen -- eine pro Raum -- sind identisch mit folgenden Formeln parametriert:
- Formel 1 ergibt true, wenn die Stellgröße höher als die Abregelgrenze ist. Um bei kleinen Änderungen der Stellgröße das Ventil nicht unnötig zu verfahren, bleibt der vorherige Ausgabewert innerhalb eines Korridors von 5% erhalten:
{Stellgröße:N} > ({UntereSchwelle:N} + 5) ? true : ({Stellgröße:N} < {UntereSchwelle:N} ? false : _previousOut1_) - Formel 2 ergibt true, wenn Heizbedarf > 10% besteht und die Heizkreispumpe nachläuft, um Restwärme im Haus zu verteilen:
({Stellgröße:N} > 10) && {Nachlauf:B} - Formel 3 öffnet das Ventil zwangsweise, wenn eine der beiden obigen Bedingungen zutrifft, der entsprechende Raum der Führungraum ist oder erheblichen Komfortverlust hat:
_out1_ || _out2_ || {Führungsraum:B} || {Komfortverlust:B}
Ende Teil 1
Kommentar