# OptStartHeat32\_V2

## `OptStartHeat32_V2` (FB)

FUNCTION\_BLOCK OptStartHeat32\_V2

### Kurzbeschreibung

> Einschaltoptimierung für den Heizbetrieb mit einer Anbindung an den FB ‘ClockSlave32’ (Prinzip: Variable Vorheizzeit)\
> Ziel: Raumtemperatur = Solltemperatur zu Beginn des Tagbetriebs\
> Typische Anwendung: Zonenregelkreis mit Heizventil

### Darstellung

<figure><img src="https://879424349-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR4vCFzt6ixgsqlR3pdR%2Fuploads%2Fgit-blob-70deb06828a29cd337fd1c4875fe1d6d9b411b8e%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

### Schnittstellen

#### Eingänge

| Name                          | Datentyp       | Wertebereich | Initialwert | Funktion                                                                                                                                                                                           |
| ----------------------------- | -------------- | ------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *xClockMaster\_Holiday*       | BOOL           |              | FALSE       | Aktueller Zustand des Kanals ‘Ferien’ der Instanz des zugeordneten FB ‘ClockMaster32’ (FALSE = keine Ferien)                                                                                       |
| *xClockMaster\_PublicHoliday* | BOOL           |              | FALSE       | Aktueller Zustand des Kanals ‘Feiertage’ der Instanz des zugeordneten FB ‘ClockMaster32’ (FALSE = kein Feiertag)                                                                                   |
| *xClockMaster\_SwitchTimeS*   | BOOL           |              | FALSE       | Aktueller Zustand des Kanals ‘Ausnahmetage’ der Instanz des zugeordneten FB ‘ClockMaster32’ (FALSE = kein Ausnahmetag)                                                                             |
| *xClockMaster\_AllOn*         | BOOL           |              | FALSE       | Aktueller Zustand der Zwangssteuerung-EIN aller Ausgänge ‘xClockActice’ aller zugeordnetne FB ‘ClockSlave32’ der Instanz des zugeordneten FB ‘ClockMaster32’ ( FALSE = keine Zwangssteuerung-EIN ) |
| *xClockMaster\_AllOff*        | BOOL           |              | FALSE       | Aktueller Zustand der Zwangssteuerung-AUS aller Ausgänge ‘xClockActive’ aller zugeordneten FB ‘ClockSlave32’ der Instanz des zugeordneten FB ‘ClockMaster32’ (FALSE = keine Zwangssteuerung-AUS)   |
| *ClockSlave\_Param*           | stSlvClockData |              |             | Anbindung an einige ausgewählte Parameter des FB ‘ClockSlave32’                                                                                                                                    |
| *xEn*                         | BOOL           |              | FALSE       | Generelle Freigabe der Einschaltoptimierung                                                                                                                                                        |
| *xEnAdapt*                    | BOOL           |              | TRUE        | Freigabe der Datenablage im historischen Speicher                                                                                                                                                  |
| *xResAdapt*                   | BOOL           |              | TRUE        | Rücksetzung des historischen Speichers                                                                                                                                                             |
| *rTo*                         | REAL           |              |             | Aktuelle Aussentemperatur                                                                                                                                                                          |
| *rTi*                         | REAL           |              |             | Aktuelle Raumtemperatur                                                                                                                                                                            |
| *rSetTemp*                    | REAL           |              |             | Aktuelle Raumsolltemperatur im Komfort-/Tagbetrieb                                                                                                                                                 |

#### Ausgänge

| Name           | Datentyp | Wertebereich | Initialwert | Funktion                                                                                                  |
| -------------- | -------- | ------------ | ----------- | --------------------------------------------------------------------------------------------------------- |
| *xDaytime*     | BOOL     |              | FALSE       | Freigabe des Komfort-/Tagbetriebs (Aus = FALSE, Ein = TRUE)                                               |
| *xProcess*     | BOOL     |              | FALSE       | Freigabe - Vorheizprozess (Aus = FALSE, Ein = TRUE)                                                       |
| *bState*       | BYTE     |              | 0           | Phase des Vorheizprozesses (0=Aus/Dekativiert, 1 = Prüfzeit, 2 = Totzeit, 3 = Heizzeit, 4 = Heizzeitende) |
| *wError*       | WORD     |              | 0           | Fehlerstatus des letzten Vorheizprozesses                                                                 |
| *bResult*      | BYTE     |              | 0           | Qualität des letzten Vorheizprozesses (0 = ungültig, 1 = gut, 2 = normal, 3 = schlecht)                   |
| *xActive*      | BOOL     |              | FALSE       | Zustand des Uhrkanals (Aus = FALSE, Ein = TRUE)                                                           |
| *uiDeadTime*   | UINT     |              | 0           | Anzeige der aktuellen Totzeitdauer (min)                                                                  |
| *uiHeatTime*   | UINT     |              | 0           | Anzeige der aktuellen Heizzeitdauer (min)                                                                 |
| *uiNumber*     | UINT     |              | 0           | Anzeige der Gesamtanzahl der erfolgreichen Vorheizprozesse                                                |
| *rAverageDiff* | REAL     |              | 0.0         | Durchschnittliche absolute Raumtemperaturabweichung der letzten 10 erfolgreichen Vorheizprozesse          |

#### Sollwerte / Parameter

| Name        | Datentyp | Wertebereich | Initialwert | Funktion                           |
| ----------- | -------- | ------------ | ----------- | ---------------------------------- |
| **uiHGMin** | UINT     |              | 30          | Minimalwert - Heizgradient (min/K) |
| **uiHGMax** | UINT     |              | 240         | Maximalwert - Heizgradient (min/K) |
| **uiDTMin** | UINT     |              | 10          | Minimalwert - Totzeit (min)        |
| **uiDTMax** | UINT     |              | 180         | Maximalwert - Totzeit (min)        |
| **uiHTMin** | UINT     |              | 15          | Minimalwert - Heizzeit (min)       |
| **uiHTMax** | UINT     |              | 600         | Maximalwert - Heizzeit (min)       |

#### Globale Variablen

| Name                               | Datentyp | Wertebereich | Initialwert | Funktion                                                                                |
| ---------------------------------- | -------- | ------------ | ----------- | --------------------------------------------------------------------------------------- |
| `gc_Parameters.rTOMin`             | REAL     |              | -25         | Minimalwert - Aussentemperatur (°C)                                                     |
| `gc_Parameters.rTOMax`             | REAL     |              | 25          | Maximalwert - Aussentemperatur (°C)                                                     |
| `gc_Parameters.rTIMin`             | REAL     |              | 15          | Minimalwert - Raumtemperatur (°C)                                                       |
| `gc_Parameters.rTIMax`             | REAL     |              | 30          | Maximalwert - Raumtemperatur (°C)                                                       |
| `gc_Parameters.rDiffSetTemp`       | REAL     |              | 0           | Abweichung zur Raumsolltemperatur am Ende des Vorheizprozesses (K)                      |
| `gc_Parameters.rDTDiffTemp`        | REAL     |              | 0.2         | Erhöhung der Raumtemperatur zur Erkennung des Endes der Totzeit (K)                     |
| `gc_Parameters.uiPHMaxTime`        | UINT     |              | 720         | Maximale Zeitdauer des Vorheizprozesses                                                 |
| `gc_Parameters.rLimitResultWell`   | REAL     |              | 0.5         | Ergebnisanzeige: Raumtemperaturabweichung - Grenzwert für einen guten Vorheizprozess    |
| `gc_Parameters.rLimitResultNormal` | REAL     |              | 1           | Ergebnisanzeige: Raumtemperaturabweichung - Grenzwert für einen normalen Vorheizprozess |

### Einschränkungen / Randbedingungen

\
1\) Dieser FB erlaubt keine tagübergreifenden Vorheizprozesse. Der Vorheizprozess kann daher frühestens um 00:01 Uhr jedes Wochentages beginnen.

{% hint style="info" %}
Beispiel: Beginn - Komfortbetrieb: Montag - 05:30 Uhr // Berechnete Vorheizzeit = 7 Stunden\
Optimaler Startzeitpunkt - Vorheizprozess: Sonntag - 22:30 Uhr\
Realer Startzeitpunkt - Vorheizprozess: Montag - 00:01 Uhr
{% endhint %}

2\) Sonderschaltzeiten bewirken, sofern zugeordnet (FB ‘ClockSlave32’: Parameter ‘xSwitchTimeS’ = TRUE) und aktiv (FB ‘ClockMaster32’: Ausgang ‘xSwitchTimeS’ = TRUE), keinen Beginn eines Vorheizprozesses und einen unmittelbaren Abbruch eine eventuell aktiven Vorheizprozesses.

\
3\) Der Wert des Ausgangs ‘ctClockSlave32’ des FB ‘ClockMaster32’ wird durch jede Instanz des FB ‘OptStartHeat32’ um Eins erhöht.

### Funktionsbeschreibung

\
Der Ausgang **xDaytime** wird bei generell freigegebener Einschaltoptimierung (xEn = TRUE) in Abhängigkeit von den historischen Daten, der aktuellen Aussentemperatur, der aktuellen Raumtemperatur und der aktuellen Solltemperatur für den Tag-/Komfortbetrieb **vor** dem geplanten Beginn des Komfort-/Tagbetriebs aktiviert.\
\
Diese Vorheizung bewirkt, dass die Raumtemperatur zu Beginn des Tagbetriebs bereits der gewünschten Solltemperatur entspricht.\
Die dazu nötige Vorheizzeit wird für jeden Vorheizprozess **individuell** neu berechnet, die tatsächliche Vorheizzeit fliesst zusätzlich in die historischen Daten ein.\
Es sind keine tagesübergreifende Vorheizprozesse möglich.\
Die Einschaltoptimierung dient der Energieeinsparung und der Erhöhung des Bedienkomforts.\
Die für die Einschaltoptimierung relevanten Komponenten werden alle 60s abgearbeitet.\
\
Ein neuer Vorheizprozess wird nicht gestartet bzw. ein aktiver Vorheizprozess wird unterbrochen, falls mindestens eine der nachfolgende\
beschriebenen Bedingungen erfüllt ist:\
\
1\) Ferienkanal aktiv (FB ‘ClockMaster32’ - xHoliday = TRUE UND FB ‘ClockSlave32’ - ClockSlaveParam.xHoliday = TRUE)\
2\) Feiertagekanal aktiv (FB ‘ClockMaster32’ - xPublicHoliday = TRUE UND FB ‘ClockSlave32’ - ClockSlaveParam.xPublicHoliday = TRUE)\
3\) Sonderschaltzeitenkanal aktiv (FB ‘ClockMaster32’ - xSwitchTimeS = TRUE UND FB ‘ClockSlave32’ - ClockSlaveParam.xSwitchTimeS = TRUE)\
4\) Zentralbefehl EIN aktiv (FB ‘ClockMaster32’ - xAllOn = TRUE)\
5\) Zentralbefehl AUS aktiv (FB ‘ClockMaster32’ - xAllOff = TRUE)\
\
Der Vorheizprozess gliedert sich in vier Zeitabschnitte.\
Sie werden bei jedem erfolgreichen Vorheizprozess nacheinander durchlaufen.\
Der Vorheizprozess kann vor, genau zum oder nach dem Einschaltpunkt (= Übergang in den Komfort-/Tagbetrieb) enden.

<figure><img src="https://879424349-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR4vCFzt6ixgsqlR3pdR%2Fuploads%2Fgit-blob-ddb4bce3f99981a01a8b9333e271ce79a2b7e730%2Fimage%20(1).png?alt=media" alt=""><figcaption></figcaption></figure>

#### Prüfzeit (bState = 1)

Die Prüfzeit dient zur zyklischen Prüfung ( alle 60s), ob die Bedingungen für die Freigabe der Vorheizung erfüllt sind.\
\
Sie beginnt, falls gleichzeitig folgende Bedingungen erfüllt sind:

1. Der Vorheizprozess ist nicht aktiv (*xProcess* = FALSE)
2. Der Uhrkanal ist nicht aktiv (**xActive** = FALSE)
3. Es existiert ein gültiger nächster Einschaltpunkt

\
Sie endet regelgerecht, falls die Bedingungen für die Freigabe der Vorheizung erfüllt sind (= Beginn der Totzeit).\
Sie endet in jedem Fall, falls der nächste gültige Einschaltpunkt gleich der aktuellen Uhrzeit ist.

#### Totzeit (bState = 2)

Die Totzeit dient zur Vorkonditionierung der Beheizung.\
\
Sie beginnt mit dem regelgerechten Ende der Prüfzeit.\
\
Sie endet regelgerecht, falls die aktuelle Raumtemperatur *rTi* die Raumtemperatur zu Beginn der Totzeit um die einstellbare Differenz `gc_Parameters.rDTDiffTemp` dauerhaft während einer Zeitdauer von mindestens 120s überschreitet (= Beginn der Heizzeit).\
\
Sie endet in jedem Fall, falls der nächste gültige Einschaltpunkt gleich der aktuellen Uhrzeit ist.

#### Heizzeit (bState = 3)

Die Heizzeit dient zur Vorheizung der Zone.\
\
Sie beginnt mit dem regelgerechten Ende der Totzeit.\
\
Sie endet regelgerecht, falls sich die aktuelle Raumtemperatur *rTI* der aktuelle Raumsolltemperatur im Komfort-/Tagbetrieb *rSetTemp* dauerhaft während einer Zeitdauer von mindestens 120s bis auf eine Differenz kleiner als die globale Variable `gc_Parameters.rDiffSetTemp` annähert.\
\
Sie endet, falls eine abfallende Signalflanke am Zustand des Uhrkanals *xActive* erkannt wird.\
\
Sie endet, falls die aktuelle Heizzeitdauer den einstellbaren Maximalwert **uiHTMax** überschreitet.

#### Heizzeitende (bState = 4)

Das Heizzeitende dient dem Abschluss des erfolgreichen Vorheizprozesses. Die historischen Daten werden, sofern keine Grenzwerte verletzt sind, aktualisiert, falls die Freigabe der Datenablage im historischen Speicher (*xEnAdapt*) aktiv ist.\
\
Sie beginnt mit dem regelgerechten Ende der Heizzeit.

#### Freigabe *xEn*

Dieser Eingang dient der generelle Freigabe der Einschaltoptimierung (*xEn* = TRUE). Im gesperrten Zustand (*xEn* = FALSE) werden die Ausgänge wie folgt definiert:

| Ausgang        | Zustand/Wert | Hinweise |
| -------------- | ------------ | -------- |
| *xDaytime*     | FALSE        |          |
| *xProcess*     | FALSE        |          |
| *bState*       | 0            |          |
| *wError*       | 0            |          |
| *bResult*      | 0            |          |
| *uiDeadTime*   | 0            |          |
| *uiHeatTime*   | 0            |          |
| *uiNumber*     | 0            |          |
| *rAverageDiff* | 0            |          |

Die historischen Daten bleiben auch im gesperrten Zustand erhalten.\
\
Dieser Eingang kann auch zur Aufschaltung von Fühlerstörungen (Störung - Raumtemperaturfühler, Störung Außentemperaturfühler) oder für den Betrieb der Zone in der Nutzzeitverlängerung verwendet werden.

#### Freigabe *xEnAdapt*

Dieser Eingang dient der Freigabe der Datenablage im historischen Speicher (*xEnAdapt* = TRUE, Voraussetzung: *xEn* = TRUE).\
Nach jedem erfolgreichen Vorheizprozess werden die relevanten Parameter abgelegt und stehen somit beim nächsten Vorheizprozess wieder zur Verfügung.\
Im gesperrten Zustand (*xEnAdapt* = FALSE) findet keine Datenablage statt.

#### Freigabe *xResAdapt*

Dieser Eingang dient der Initialisierung des historischen Speichers bei jeder ansteigenden Signalflanke (Voraussetzung: *xEn* = TRUE).

| Speicher                   | Zustand/Wert | Hinweise |
| -------------------------- | ------------ | -------- |
| Heizgradienten             | **uiHGMax**  |          |
| Totzeiten                  | **uiDTMax**  |          |
| Anzahl der Vorheizprozesse | 0            |          |

Zusätzlich werden der Zwischenspeicher für die durchschnittliche absolute Raumtemperaturabweichung der letzten 10 erfolgreichen Vorheizprozesse und der Datenspeicher für die aktuellen Daten zurück gesetzt.

{% hint style="info" %}
**Sinnvolle Verwendung des Eingangs&#x20;*****xResAdapt***

Dieser Eingang kann im Kombination mit dem Ausgang *rAverageDiff* (Durchschnittliche absolute Raumtemperaturabweichung der letzten 10 erfolgreichen Vorheizprozesse) eingesetzt werden, um bei größeren Abweichungen eine Neuinitialisierung der historischen und aktuellen Daten zu bewirken.
{% endhint %}

#### Eingang *rTo*

Dieser Eingang dient zur Erfassung der aktuellen Außentemperatur.\
Sie wird für die Einschaltoptimierung zusätzlich zeitlich gefiltert und begrenzt (Minimalwert = `gc_Parameters.rTOMin`, Maximalwert = `gc_Parameters.rTOMax`).

#### Eingang *rTi*

Dieser Eingang dient zur Erfassung der aktuellen Raumtemperatur.\
Sie wird für die Einschaltoptimierung zusätzlich zeitlich gefiltert und begrenzt (Minimalwert = `gc_Parameters.rTIMin`, Maximalwert = `gc_Parameters.rTIMax`).

#### Eingang *rSetTemp*

Dieser Eingang dient zur Erfassung der aktuellen Raumsolltemperatur für den Komfort-/Tagbetrieb.\
Bei jeder Änderung der Solltemperatur erfolgt ein Rücksetzung in den Grundzustand (siehe Freigabe *xEn* - gesperrter Zustand).

#### Ausgang *xDaytime*

Dieser Ausgang dient zur Freigabe des Komfort-/Tagbetriebs (Aus = FALSE, Ein = TRUE) **durch die Einschaltoptimierung**.\
Er wird beim Übergang von der Prüfzeit in die Totzeit aktiviert.\
Er wird deaktiviert, falls der nächstgültige Einschaltpunkt erreicht wird.

#### Ausgang *xProcess*

Dieser Ausgang dient zur Anzeige des aktiven Vorheizprozesses (Aus = FALSE, Ein = TRUE).\
Er ist aktiv, falls sich der Vorheizprozess in den Phasen 1 - 4 befindet und / oder der Ausgang *xDaytime* aktiv ist.

#### Ausgang *bState*

Dieser Ausgang dient zur Anzeige der aktiven Phase des Vorheizprozesses.

| Wert | Phase              |
| ---- | ------------------ |
| 0    | Aus / Deaktiviert  |
| 1    | Prüfzeit aktiv     |
| 2    | Totzeit aktiv      |
| 3    | Heizzeit aktiv     |
| 4    | Heizzeitende aktiv |

#### Ausgang *wError*

Dieser Ausgang dient zur Anzeige von Warnungen / Fehlern während des letzten Vorheizprozesses.\
Jeder Meldung ist dabei ein Bit (Bit = 0 = kein Fehler, Bit = 1 = Warnung / Fehler aktiv) zugeordnet.\
Dieser Ausgang wird permanent aktualisiert.\
Bei jeder Änderung wird zusätzlich das Datum / die aktuelle Uhrzeit erfasst.\
Dieser Ausgang wird stets zum Beginn der Prüfzeit mit 0 (= kein Fehler) initialisiert.\
Bei jedem Auftreten eines Fehlers wird der Vorheizprozess gestoppt und die Phase ‘Aus / Deaktiviert’ eingeleitet.\
Bei jedem Auftreten einer Warnung wird der Ausgang *wError* aktualisiert.

| Bit | Ursache                                | Fehlertyp | Hinweise |
| --- | -------------------------------------- | --------- | -------- |
| 1   | Überschreitung der maximalen Heizzeit  | Fehler    |          |
| 4   | Grenzwertverletzung Heizgradient       | Warnung   |          |
| 5   | Grenzwertverletzung Totzeit            | Warnung   |          |
| 6   | Unterschreitung der minimalen Heizzeit | Warnung   |          |

#### Ausgang *bResult*

Dieser Ausgang dient zur Anzeige der Qualität des letzten erfolgreichen Vorheizprozesses.\
Der Ausgang wird im Einschaltpunkt (= Übergang in den Komfort-/Tagbetrieb) bei Bedarf aktualisiert.\
Das absolute Betrag aus der Berechnung von *rSetTemp* - `gc_Parameters.rDiffSetTemp` - *rTi* wird für die Bewertung verwandt.\
Dieser Ausgang wird stets zum Beginn der Prüfzeit mit 0 (= kein Ergebnis) initialisiert.

| Ergebnis            | Grenzwert                          | *bResult* | Hinweise                  |
| ------------------- | ---------------------------------- | --------- | ------------------------- |
| kleiner als         | `gc_Parameters.rLimitResultWell`   | 1         | Guter Vorheizprozess      |
| kleiner als         | `gc_Parameters.rLimitResultNormal` | 2         | Normaler Vorheizprozess   |
| grösser oder gleich | `gc_Parameters.rLimitResultNormal` | 3         | Schlechter Vorheizprozess |

#### Ausgang *xActive*

Dieser Ausgang dient zur Anzeige des Zustands des Ausgangs ‘xClockActive’ des FB ‘ClockSlave32’ (Aus = FALSE, Ein = TRUE).\
Er wird permanent unabhängig vom Zustand von *xEn* (= Generelle Freigabe der Einschaltoptimierung) aktualisiert.

#### Ausgang *uiDeadTime*

Dieser Ausgang dient zur Anzeige der aktuellen Totzeitdauer (min).\
Dieser Ausgang wird stets zum Beginn der Prüfzeit mit 0 min initialisiert.

#### Ausgang *uiHeatTime*

Dieser Ausgang dient zur Anzeige der aktuellen Heizzeitdauer (min).\
Dieser Ausgang wird stets zum Beginn der Prüfzeit mit 0 min initialisiert.

#### Ausgang *uiNumber*

Dieser Ausgang dient zur Anzeige der Gesamtanzahl der erfolgreichen Vorheizprozesse.

#### Ausgang *rAverageDiff*

Dieser Ausgang dient zur Anzeige der durchschnittliche absoluten Raumtemperaturabweichung der letzten 10 erfolgreichen Vorheizprozesse.\
Dieser Ausgang wird immer nach der Aktualisierung des Ausgangs *bResult* aktualisiert.\
Dieser Ausgang wird bei jeder ansteigenden Signalflanke am Eingang *xResAdapt* mit 0 K initialisiert.

{% hint style="info" %}
**Sinnvolle Verwendung des Ausgangs&#x20;*****rAverageDiff***

Dieser Ausgang kann im Kombination mit dem Eingang *xResAdapt* (Rücksetzung des historischen Speichers) eingesetzt werden, um bei größeren Abweichungen eine Neuinitialisierung der historischen und aktuellen Daten zu bewirken.
{% endhint %}

#### 1. Vorheizprozess

Nach dem Softwaredownload bzw. nach jeder ansteigenden Signalflanke am Eingang *xResAdapt* werden die historischen Daten neu initialisiert.\
Die Totzeiten werden dabei mit dem Parameter **uiDTMax**, die Heizgradienten mit dem Parameter **uiHGMax** und die Anzahl der erfolgreichen Vorheizprozess mit dem Wert 0 beschrieben.

#### Parameter **uiHGMin**

Dieser Parameter dient zur Festlegung des minimal zulässigen Heizgradienten (min / K).\
Er dient zur Überprüfung von Grenzwertverletzungen. Im Falle einer Grenzwertverletzung werden die historischen Daten nicht aktualisiert.

#### Parameter **uiHGMax**

Dieser Parameter dient zur Festlegung des maximal zulässigen Heizgradienten (min / K).\
Er dient zur Überprüfung von Grenzwertverletzungen. Im Falle einer Grenzwertverletzung werden die historischen Daten nicht aktualisiert.

#### Parameter **uiDTMin**

Dieser Parameter dient zur Festlegung der minimal zulässigen Totzeit (min).\
Er dient zur Überprüfung von Grenzwertverletzungen. Im Falle einer Grenzwertverletzung werden die historischen Daten nicht aktualisiert.

#### Parameter **uiDTMax**

Dieser Parameter dient zur Festlegung der maximal zulässigen Totzeit (min).\
Er dient zur Überprüfung von Grenzwertverletzungen. Im Falle einer Grenzwertverletzung werden die historischen Daten nicht aktualisiert.

#### Parameter **uiHTMin**

Dieser Parameter dient zur Festlegung der minimal zulässigen Heizzeit (min).\
Er dient zur Überprüfung von Grenzwertverletzungen.

#### Parameter **uiHTMax**

Dieser Parameter dient zur Festlegung der maximal zulässigen Heizzeit (min).\
Er dient zur Überprüfung von Grenzwertverletzungen.\
Bei jedem Auftreten einer Grenzwertverletzung wird der Vorheizprozess gestoppt und die Phase ‘Aus / Deaktiviert’ eingeleitet.

#### Globale Variable `gc_Parameters.rTOMin`

Diese globale Variable dient zur Festlegung der minimal zulässigen Aussentemperatur (°C).\
Sie dient zur Überprüfung von und Korrektur bei Grenzwertverletzungen.

#### Globale Variable `gc_Parameters.rTOMax`

Diese globale Variable dient zur Festlegung der maximal zulässigen Aussentemperatur (°C).\
Sie dient zur Überprüfung von und Korrektur bei Grenzwertverletzungen.

#### Globale Variable `gc_Parameters.rTIMin`

Diese globale Variable dient zur Festlegung der minimal zulässigen Raumtemperatur (°C).\
Sie dient zur Überprüfung von und Korrektur bei Grenzwertverletzungen.

#### Globale Variable `gc_Parameters.rTIMax`

Diese globale Variable dient zur Festlegung der maximal zulässigen Raumtemperatur (°C).\
Sie dient zur Überprüfung von und Korrektur bei Grenzwertverletzungen.

#### Globale Variable `gc_Parameters.rDiffSetTemp`

Diese globale Variable dient zur Festlegung der Abweichung zur Raumsolltemperatur am Ende des Vorheizprozesses (K).\
Sie legt fest, wie weit sich die Raumtemperatur der Solltemperatur im Tag-/Komfortbetrieb annähern muss, um den aktiven Vorheizprozess zu beenden.

#### Globale Variable `gc_Parameters.rDTDiffTemp`

Diese globale Variable dient zur Festlegung der Erhöhung der Raumtemperatur zur Erkennung des Endes der Totzeit (K).\
Sie legt fest, wie weit sich die Raumtemperatur während der Totzeit dauerhaft erhöhen muss, um die Heizzeit einzuleiten.

#### Globale Variable `gc_Parameters.uiPHMaxTime`

Diese globale Variable dient zur Festlegung der maximalen Zeitdauer des Vorheizprozesses.\
Sie wird für interne Berechnungen verwandt.

#### Globale Variable `gc_Parameters.rLimitResultWell`

Diese globale Variable dient zur Festlegung des Grenzwerts ‘Guter Vorheizprozess’ für die Qualitätsanzeige *bResult*.

#### Globale Variable `gc_Parameters.rLimitResultNormal`

Diese globale Variable dient zur Festlegung des Grenzwerts ‘Normaler Vorheizprozess’ für die Qualitätsanzeige *bResult*.

#### Typische Anwendung

Dieser Funktionsbaustein kann wie folgt angewendet werden:

<figure><img src="https://879424349-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR4vCFzt6ixgsqlR3pdR%2Fuploads%2Fgit-blob-4f87ba2330df77559805cbc53c7d5ee03c1d9398%2Fimage.png?alt=media" alt=""><figcaption></figcaption></figure>

### CODESYS

InOut:

| Scope       | Name                         | Type           | Initial |
| ----------- | ---------------------------- | -------------- | ------- |
| Input       | `xClockMaster_Holiday`       | `BOOL`         | FALSE   |
| Input       | `xClockMaster_PublicHoliday` | `BOOL`         | FALSE   |
| Input       | `xClockMaster_SwitchTimeS`   | `BOOL`         | FALSE   |
| Input       | `xClockMaster_AllOn`         | `BOOL`         | FALSE   |
| Input       | `xClockMaster_AllOff`        | `BOOL`         | FALSE   |
| Input       | `ClockSlave_Param`           | stSlvClockData |         |
| Input       | `xEn`                        | `BOOL`         | FALSE   |
| Input       | `xEnAdapt`                   | `BOOL`         | TRUE    |
| Input       | `xResAdapt`                  | `BOOL`         | FALSE   |
| Input       | `rTo`                        | `REAL`         |         |
| Input       | `rTi`                        | `REAL`         |         |
| Input       | `rSetTemp`                   | `REAL`         |         |
| Output      | `xDaytime`                   | `BOOL`         | FALSE   |
| Output      | `xProcess`                   | `BOOL`         | FALSE   |
| Output      | `bState`                     | `BYTE`         | 0       |
| Output      | `wError`                     | `WORD`         | 0       |
| Output      | `bResult`                    | `BYTE`         | 0       |
| Output      | `xActive`                    | `BOOL`         | FALSE   |
| Output      | `uiDeadTime`                 | `UINT`         | 0       |
| Output      | `uiHeatTime`                 | `UINT`         | 0       |
| Output      | `uiNumber`                   | `UINT`         | 0       |
| Output      | `rAverageDiff`               | `REAL`         | 0.0     |
| Input Const | `uiHGMin`                    | `UINT`         | 30      |
| Input Const | `uiHGMax`                    | `UINT`         | 240     |
| Input Const | `uiDTMin`                    | `UINT`         | 10      |
| Input Const | `uiDTMax`                    | `UINT`         | 180     |
| Input Const | `uiHTMin`                    | `UINT`         | 15      |
| Input Const | `uiHTMax`                    | `UINT`         | 600     |
