Frei programmierbare Steuerung (FPS)

Hintergrund und Anwendungen

Mit der frei programmierbaren Steuerung lassen sich beliebige Ausgänge und Sensoren in mathematischen Formeln verknüpfen. Diese Formeln werden vom System ausgewertet und das Ergebnis kann dann auf einen Ausgang gelegt werden.

Das Modul Raumanforderung erfüllt diese Funktion bereits in eingeschränkter Weise. In der Raumanforderung können die Ausgänge aus der Einzelraumregelung derart verknüpft werden, dass ein zusätzlicher Ausgang geschalten wird, sobald einer der verknüpften Ausgänge vom System geschalten wird. Damit lässt sich beispielsweise realisieren, dass eine Pumpe oder der zentrale Wärmeerzeuger geschalten wird, sobald ein Raum einen Wärmebedarf meldet.

Mit der FPS lassen sich deutlich kompliziertere Sachverhalte abbilden, vorerst können aber nur Heizraumsensoren, Differenz- und Vorlauftemperaturregelungen, Raumanforderungen sowie FPS untereinander miteinander verknüpft werden. 

Beispielsweise kann so eine Differenzregelung für eine Solaranlage mit einer Raumanforderung verknüpft werden. Im ersten Schritt wird der Differenzregelung kein Ausgang zugeordnet. In der FPS wird dann eine Formel angelegt, die das Ergebnis der Berechnung der Differenzregelung mit dem Ergebnis der Raumanforderung mit einem logischen UND verknüpft. Eine Verknüpfung mit logischem UND liefert als Ergebnis eine 1 bzw. AN genau dann, wenn beide (bzw. alle) verknüpften Ausgänge/Regelungen 1 bzw. AN liefern. Das Ergebnis der Auswertung wird dann auf einen Ausgang gelegt. Im Beispiel bedeutet das, dass ein Ausgang für die Differenzregelung tatsächlich nur dann geschalten wird, wenn gleichzeitig auch eine Raumanforderung besteht. Die Berechnung lässt sich natürlich auch dahingehend umstellen, dass etwa der Ausgang nur dann geschalten wird, wenn die Differenzregelung auf 1 bzw. AN schaltet, gleichzeitig aber keine Raumanforderung besteht. Ebenso lässt sich die Berechnung ausweiten durch Hinzufügen zusätzlicher Raumanforderungen, Differenzregelungen oder mit dem Vergleich von Sensorwerten.

Einrichtung

Jede FPS wird intern eindeutig über eine ID gespeichert. In der Oberfläche wird allerdings der vom Benutzer zugewiesene Name verwendet. Es ist also zu empfehlen, einen eindeutigen, verständlichen Namen anzugeben.

Wenn die Auswertung der Formel scheitert, wird der Fehlerwert als Ergebnis der Berechnung zurückgegeben und auf etwaig zugeordnete Ausgänge ausgegeben. Die Auswertung scheitert, wenn einer oder mehrere der verknüpften Ausgänge und Sensoren keinen Wert zurückgibt bzw. nicht überträgt. Damit ist sichergestellt, dass z.B. beim Ausfall von Sensoren ein definiertes Verhalten eintritt. Für FPS an digitalen Ausgängen sollte der 0 oder 1 sein, an analogen Ausgängen in [0;100] liegen.

Jede FPS definiert eine Formel, deren Ergebnis einem virtuellen Ausgang A0 zugewiesen wird. Dieser Ausgang kann in der Ausgangszuordnung einem oder mehreren physische Ausgängen an einem Heizraumgateway zugewiesen werden. Der virtuelle Ausgang wird in jeder FPS mit A0 bezeichnet, ist aber natürlich eindeutig definiert und wird in der Ausgangszuordnung über den Namen der FPS (s.o.) eindeutig identifiziert. 

Wenn die FPS einem digitalen Ausgang zugeordnet wird, dann wird der berechnete Wert auf 0/1 abgebildet. Der Ausgang ist also AUS, wenn die Formal zu 0 evaluiert und 1 für jeden anderen Wert. Wenn die FPS einem analogen Ausgang zugeordnet wird (d.h. Ausgang 13 oder 14 an einem HRGW), dann sollte der Wert entsprechend auf Werte in [0;100] abgebildet werden.

Das gleiche gilt für die Deklaration von zu verknüpfenden Ausgängen und Sensoren. So kann etwa ein Außentemperatursensor in einer Formel als S2, in einer anderen Formel als S1 deklariert und verwendet werden.

Funktionsweise

Operatoren

  • & (binäres UND).
  • | (binäres ODER).
  • not (Negation).
  • >, <, >=, <=, == (Vergleichsoperatoren).
  • +, -, *, / (Grundrechenarten).
  • () (Klammern).
  • if – else (WENN-DANN Verknüpfung)

Operatorrangfolge

Die Operatorrangfolge definiert die Reihenfolge (auch: Präzedenz), in der Operatoren in einer Formel auszuwerten sind. Ein bekanntes Beispiel ist die Wertigkeit der Grundrechenarten. So gilt 1+2*3=7, da die Multiplikation vor der Addition ausgewertet wird. Soll bewusst die Addition vor der Multiplikation in dieser Gleichung ausgewertet werden, so sind Klammern zu verwenden, also (1+2)*3=9. Die Operatorrangfolge für die Formeln in der FPS ist in aufsteigender Reihenfolge:

  • if – else
  • not
  • <, >, <=, >=, ==, !=
  • |
  • &
  • +, –
  • *, /

D.h. Multiplikation und Division haben die höchste Präzedenz, if – else die niedrigste. 

Funktionen

Funktionen berechnen aus den ihnen ggf. übergebenen Parametern einen Wert. Die Parameter können dabei sowohl feste Werte (z.B. 19) als auch Variablen (z.B. A1 oder S3) sein. Im Moment stehen zur Verfügung:

  • min() und max() geben das Minimum bzw. Maximum der übergebenen Werte zurück. min(S1, 10) mit S1 = 22.0 ergibt bspw. 10.
  • avg() berechnet den Mittelwert der übergebenen Parameter
  • tags (ohne Klammern) gibt ja oder nein zurück, je nach dem, ob es zum Zeitpunkt der Evaluierung der Formel am Standort des Miniservers tags ist
  • last_a0 (ohne Klammern) gibt den letzten Wert zurück, den diese FPS selbst ausgegeben hat

Hysterese und Ein-/Ausschaltverzögerung

Die Hysterese wird auf jeden Vergleich in der Formel angewandt (<, >, <=, >=, ==, !=). Um ggf. die gleichzeitige Anwendung der Hysterese auf mehrere Vergleiche in einer Formel zu vermeiden oder unterschiedliche Hysteresen für die jeweiligen Vergleiche einstellen zu können, müssen die Vergleiche in einzelne FPS Formeln heruntergebrochen werden und deren Ergebnisse dann in einer Gesamtformel zusammengeführt werden.

Die Ein-/Ausschaltverzögerung wird ganz am Ende, wenn das Ergebnis der Formel feststeht und damit der Schaltzustand für A0 berechnet ist, angewandt.

Raum- und Regelungswerte

Ohne gesonderte Deklaration können Soll/Offsets/Ziel- und Istwerte von Räumen in Formeln verwendet werden:

  • raum_X_soll
  • raum_X_ziel
  • raum_X_offsets
  • raum_X_offsets_Y

Eine Variable mit dem Namen “raum_1_soll” wird automatisch durch den Sollwert des Raumes mit der ID 1 ersetzt. “raum_X_offsets” wird durch den Gesamtoffset des Raumes ersetzt, “raum_X_temp” durch die Temperatur des Raumtemperatursensors, “raum_X_ziel” ist eine Abkürzung für “raum_X_soll + raum_X_offsets”. “raum_X_offset_Y” wird durch den Offset (oder 0.0 falls nicht vorhanden) eines spezifischen Moduls Y (z.B. “wetter” oder “geolocation” ersetzt.

Zusätzlich zu den Raumwerten kann über “vtr_X_ziel” der Zielwert einer Vorlauftemperaturregelung eingebunden werden. X ist hierbei die in der Liste der Vorlauftemperaturregelungen angeführte Ziffer.

Modulvariablen in der FPS

Im Moment können Werte aus den Modulen Wetter Pro und Jahreskalender unmittelbar als Variable in der FPS verwendet. Im Fall von Wetter Pro muss das Modul aktiviert und eine Variable deklariert werden. Die FPS verwendet dann immer die aktuelle Auswertung dieser Variable, z.B. den mittleren Bedeckungsgrad in den nächsten sechs Stunden. Bei Kalender muss ein Eintrag explizit für die FPS (in der Liste von Räumen und Regelungen einen Haken bei FPS machen) freigegeben werden. Wenn der Eintrag aktiv ist, hat die Variable den Wert des im Kalender eingestellten Offsets, ansonsten 0.

Variablen

Es können auch Variablen mit Zahlenwerten konfiguriert und als V1…n verwendet werden. Diese Variablen haben den zusätzlichen Effekt, dass sie über einen Slider in der über die Raumliste erreichbaren Seite dieser FPS im laufenden Betrieb verändert werden können. Verhalten und Benutzung sind damit in etwa vergleichbar zu den Solltemperaturslidern in den eingerichteten Räumen oder bei Differenzregelungen.

FPS als Offset

Eine FPS kann auch als Offset für Räume konfiguriert werden. Hierzu im Dropdown unten auf der Seite anstatt ‘Ausgang’ ‘Offset’ auswählen. In der Liste darunter können dann die Räume ausgewählt werden, für die der berechnete Offset gelten soll.

Beispiele

Für die Beispiele gehen wir davon aus, dass die Ausgänge und Sensoren für die Auswertung die folgenden Werte haben:

  • A1 = 1
  • A2 = 0
  • A3 = 1
  • A4 = 55%
  • S1 = 24.5°
  • S2 = 45.0°

Beispielformeln:

  • not A1 = 0.
  • A1 & A2 = 0.
  • A1 | A2 = 1.
  • not A1 & A2 = 1. Diese Formel evaluiert zu 1. Da “&” eine höhere Präzedenz hat als “not”, wird zuerst “A1 & A2” ausgewertet und das Ergebnis dann mit “not” negiert.
  • (not A1) & A2 = 0. “(not A1)” wird zu 0, so dass “0 & A2” übrig bleibt und auch zu 0 wird.
  • A1 & not A2. Diese Formel führt zu einem Syntaxfehler, weil “&” eine höhere Präzedenz hat als “not”, so dass im ersten Auswertungsschritt nicht “not A2” evaluiert wird, sondern “A1 & not”.
  • A1 & S1 > 20. Diese Formel führt zu einem Syntaxfehler. “A1 & S1” wird als erstes ausgewertet und versucht inkompatible Datentypen zu verknüpfen, da A1 ein Wahrheitswert und S1 eine Dezimalzahl ist.
  • A1 & (S1 > 20) = 1. S1 ist mit 24.5° größer als 20, so dass der Term in Klammern zu 1 wird. Damit ist A1 & 1 = 1.

Fehlermeldungen

  • „Variable nicht deklariert“: Tritt auf, wenn im Auswahlmenü für einen Ausgang oder Sensor nichts ausgewählt wurde.
  • „Auswertung nicht möglich / Fehlerwert“: Tritt auf, wenn einer der verknüpften Ausgänge oder Sensoren keinen Wert zurückliefert. Die Formel gibt als Ergebnis dann den definierten Fehlerwert zurück.
  • „Syntaxfehler“: Generischer Syntaxfehler, wenn die Formel nicht eindeutig ausgewertet werden kann.
  • „Syntaxfehler, Klammern geschlossen?“: Tritt u.a. auf, wenn Klammern in der Formel nicht geschlossen werden.
  • „Unbekannte Variable“/“Ungültige Variable verwendet“: Tritt auf, wenn in der Formel eine Variable verwendet wird, die nicht der A*/S* Konvention entspricht.
  • „Illegale oder unbekannte Operation in Formel“: Tritt auf, wenn ein Operator verwendet wird, der unbekannt oder zur Verwendung in Formeln nicht zugelassen ist.
  • „unzulässiger Operand für Operator XY“: Tritt auf, wenn z.B. „&“ verwendet wird, um einen 0/1 Wert eines Ausgangs mit einem Dezimalwert eines Sensors zu verknüpfen.

Bemerkungen

  • wenn irgendeiner der zu verknüpfenden Ausgänge einen Fehlerwert liefert (z.B. wenn eine Differenzregelung auf “Fehler” steht) oder ein zu verknüpfender Sensor nicht überträgt, wird A0 auf den definierten Fehlerwert gesetzt.
  • deklarierte Ausgänge und Sensoren müssen mit ihrem exakten Namen verwendet werden, d.h. “a1” in der Formel für den Ausgang A1 ist nicht zulässig.

Anwendungsbeispiele