# Burner2Stage

## `Burner2Stage` (FB)

FUNCTION\_BLOCK Burner2Stage

### Kurzbeschreibung

> Steuerung eines Wärmeerzeugers (Temperaturregelung über binäre Steuerbefehle Mehr / Weniger)\
> \
> Typische Anwendung: Wärmeerzeugung

### Darstellung

<figure><img src="/files/kZs8lZlTBRDlgAQlgLp5" alt=""><figcaption></figcaption></figure>

### Funktionsbeschreibung

#### Allgemeines

Dieser Funktionsbaustein dient zur Steuerung / Regelung eines Wärmeerzeugers in Abhängigkeit von der Anforderung des Wärmeerzeugers *xEn*, der Vorlaufsolltemperatur *rSetPtTemp* und der Vorlauftemperatur *rFdT*.\
Die Freigabe / Sperrung des Wärmeerzeugers erfolgt über den Ausgang *xHB* (FALSE = Sperrung, TRUE = Freigabe).\
Die Vorlauftemperaturregelung (Analog auch Kesseltemperaturregelung) erfolgt mittels zweier Leistungsregler (P-Regler, langsam und schnell) durch die Ausgänge *xMoreHB* und *xLessHB*.\
Die Freigabe der Regelung erfolgt zweitverzögert (Sollwert / Parameter **udiWaitControl**) nach der Betriebsrückmeldung (*xFb* = TRUE) des Wärmeerzeugers.\
\
Es kommen im Wesentlichen folgende Funktionsbausteine zur Anwendung:

ControlP

Out3P

OperatingHours

ManBin

#### Freigabe / Sperrung des Wärmeerzeugers

Die Freigabe des Wärmeerzeugers (*xAB* = TRUE, *xHB* = TRUE (eManModeB = eManBin.Auto)) erfolgt, falls die Vorlauftemperatur *rFdT* die Summe aus Vorlaufsolltemperatur *rSetPtTemp* und Sollwert / Parameter **rSwitchOnPoint** unterschreitet, gleichzeitig die generelle Freigabe *xEn* aktiv (= TRUE) und die Mindeststillstandszeit nicht aktiv ist.\
Die Sperrung des Wärmeerzeugers (*xAB* = FALSE, *xHB* = FALSE (eManModeB = eManBin.Auto)) erfolgt, falls die Vorlauftemperatur *rFdT* die Summe aus Vorlaufsolltemperatur *rSetPtTemp* und Sollwert / Parameter **rSwitchOffPoint** überschreitet und gleichzeitig die generelle Freigabe *xEn* aktiv (= TRUE) ist.\
Zwischen zwei aufeinander folgenden Betriebszyklen wird stets eine Mindeststillstandszeit (Zeitdauer = **udiTimeMinOff**, Anzeige - Restzeit: *tOnDelay*) eingefügt.\
Die Mindeststillstandszeit beginnt jeweils mit der fallenden Flanke (TRUE > FALSE) am Eingang *xFb*.

#### Temperaturregelung des Wärmeerzeugers

Die Freigabe der Temperaturregelung erfolgt zeitverzögert (Zeitdauer = **udiWaitControl**, Anzeige - Restzeit: *tOnControlDelay*)\
nach der aktiven Betriebsmeldung (*xFb* = TRUE) des Wärmeerzeugers.\
Die Sperrung der Temperaturregelung erfolgt unmittelbar nach der inaktiven Betriebsmeldung (*xFb* = FALSE) des Wärmeerzeugers (Ausschaltwert: **rYDisabled**).\
Die beiden internen Leistungsregler ( P-Regler, langsam und schnell, Ausgangsbereich jeweils -100.0 - 100.0 %) werden gleichzeitig freigegeben / gesperrt. (Sollwert = Vorlaufsolltemperatur *rSetPtTemp*, Istwert = Vorlauftemperatur *rFdT*).\
Die Stellsignale beider Leistungsregler werden in Minimalwertauswahl (Weiterleitung des Signals mit dem geringeren Wert) dem Ausgangsregler im Bereich -100.0 - 100.0 % zugeführt.\
Der Ausgangsregler erzeugt abschliessend Ausgangssignale für einen 3-Punkt-Antrieb (Pulsweitenmodulation, Integrationsintervall = **tIntegration**) mit den Ausgängen *xMoreHB* bzw. *xLessHB*.\
Die konstante Impulsdauer für die beiden Ausgänge ist jeweils frei einstellbar (**tImpulsOpen** bzw. **tImpuls Close**), die variablen Impulspausen werden durch den Ausgangsregler festgelegt.\
Die beiden Leistungsregler können individuell und abhängig voneinander konfiguriert werden (P-Regler schnell: Verstärkungsfaktor **rKpBig**, P-Regler langsam: Verstärkungsfaktor **rKpTiny**).

#### Handübersteuerung der digitalen Ausgänge

Alle digitalen Steuerungsausgänge nach Handübersteuerung (*xHB*, xMoreHB\*, *xLessHB*) können entweder im Automatikmodus (eMANBIN.Auto) oder in einer der beiden Handbetriebsarten (eMANBIN.ManOn, eMANBIN.ManOff) betrieben werden.

| *xAB* | eMANBIN        | *xHB* | Hinweise                               |
| ----- | -------------- | ----- | -------------------------------------- |
| FALSE | eMANBIN.Auto   | FALSE | Handübersteuermodul in Automatik       |
| TRUE  | eMANBIN.Auto   | TRUE  | Handübersteuermodul in Automatik       |
| X     | eMANBIN.ManOn  | TRUE  | Handübersteuermodul in Handbetrieb Ein |
| X     | eMANBIN.ManOff | FALSE | Handübersteuermodul in Handbetrieb Aus |

Legende: X = beliebig

#### Sammelstörung *xAlarm*

Die Sammelstörung *xAlarm* ist aktiv (= TRUE), falls die Störmeldung des Wärmeerzeugers *xAlarmIn* aktiv (= TRUE) ist.\
In allen übrigen Situationen ist die Sammelstörung *xAlarm* nicht aktiv (= FALSE).

#### Sammelmeldung Automatikbetrieb *xAuto*

Die Sammelmeldung Automatikbetrieb *xAuto* wird aktiviert (= TRUE), falls folgende Bedingungen gleichzeitig erfüllt sind:

* Eingang *eAOO* = HVACTYPES.eManBin.Auto
* Eingang *eAOOMore* = HVACTYPES.eManBin.Auto
* Eingang *eAOOLess* = HVACTYPES.eManBin.Auto
* Sollwert / Parameter **eManModeB** = eMANBIN.Auto
* Sollwert / Parameter **eManModeBMore** = eMANBIN.Auto
* Sollwert / Parameter **eManModeBLess** = eMANBIN.Auto

#### Betriebsstundenzähler - Wärmeerzeuger

Der Betriebsstundenzähler (*udiOperatingHours*, *udiCountFb*) für den Wärmeerzeuger ist aktiv, wenn die Betriebsmeldung aktiv ist (*xFb* = TRUE).

> **Schreibzugriff auf die Zählerstände**
>
> Über den Pfad ‘Instanzname.\_OperatingHours.udiOperatingHours’ bzw. ‘Instanzname.\_OperatingHours.udiCountFb’ ist ein Schreibzugriff auf die beide Zählerstände möglich.
>
> **Voraussetzung für den Einsatz des Funktionsbausteins Burner3P**
>
> Zur korrekten Funktion ist der Einsatz des Funktionsbausteins TimeRead2 erforderlich.

#### Aktuelle berechnete Leistung des Wärmeerzeugers *rPos*

Die aktuelle **berechnete Leistung** des Wärmeerzeugers wird am Ausgang *rPos* im Bereich 0.0 - 100.0 % dargestellt.\
Hierzu ist die korrekte Angabe der Laufzeit des Antriebs zwischen minimaler und maximaler Leistung (**tDuration**) erforderlich.\
Es findet keine Neupositionierung an einer Referenzposition statt.

#### Rückführung der Leistung des Wärmeerzeugers *rU*

Die aktuelle **tatsächliche** Leistung des Wärmeerzeugers kann am Eingang *rU* angeschlossen werden.\
Dieser Eingang wird aktuell nicht für Steuerungs- und Regelungszwecke verwandt.

#### Nicht aktiver Zustand (*xEn* = FALSE)

| *xHB*                            | *xAB* | *xMoreHB*                            | *xMoreAB* | *xLessHB*                            | *xLessAB* | *rPos* | *tOnDelay* | *tOnControlDelay* | *dtLastFb* | *udiOperatingHours* | *udiCountFb* | *xAlarm*               | *xAuto*    | Hinweise      |
| -------------------------------- | ----- | ------------------------------------ | --------- | ------------------------------------ | --------- | ------ | ---------- | ----------------- | ---------- | ------------------- | ------------ | ---------------------- | ---------- | ------------- |
| FALSE (eManModeB = eManBin.Auto) | FALSE | FALSE (eManModeBMore = eManBin.Auto) | FALSE     | FALSE (eManModeBLess = eManBin.Auto) | FALSE     | 0.0 %  | alter Wert | alter Wert        | alter Wert | alter Wert          | alter Wert   | Zustand von *xAlarmIn* | alter Wert | *xEn* = FALSE |

Legende: X = beliebig

### CODESYS

InOut:

| Scope       | Name                 | Type    | Initial      |
| ----------- | -------------------- | ------- | ------------ |
| Input       | `xEn`                | `BOOL`  |              |
| Input       | `rSetPtTemp`         | `REAL`  |              |
| Input       | `xFb1`               | `BOOL`  |              |
| Input       | `xFb2`               | `BOOL`  |              |
| Input       | `xAlarmIn`           | `BOOL`  |              |
| Input       | `eAOO1`              | eManBin | eManBin.Auto |
| Input       | `eAOO2`              | eManBin | eManBin.Auto |
| Input       | `rFdT`               | `REAL`  |              |
| Output      | `xHB1`               | `BOOL`  |              |
| Output      | `xAB1`               | `BOOL`  |              |
| Output      | `xHB2`               | `BOOL`  |              |
| Output      | `xAB2`               | `BOOL`  |              |
| Output      | `tOnDelay`           | `TIME`  |              |
| Output      | `tOn2Delay`          | `TIME`  |              |
| Output      | `dtLastFb`           | `DT`    |              |
| Output      | `udiOperatingHours`  | `UDINT` |              |
| Output      | `udiCountFb`         | `UDINT` |              |
| Output      | `dtLastFb2`          | `DT`    |              |
| Output      | `udiOperatingHours2` | `UDINT` |              |
| Output      | `udiCountFb2`        | `UDINT` |              |
| Output      | `xAlarm`             | `BOOL`  |              |
| Output      | `xAuto`              | `BOOL`  |              |
| Input Const | `udiTimeTOFxFb`      | `UDINT` | 7            |
| Input Const | `udiWait2`           | `UDINT` | 3            |
| Input Const | `rSwitchOffPoint1`   | `REAL`  | 2.5          |
| Input Const | `rSwitchOffPoint2`   | `REAL`  | -1           |
| Input Const | `rSwitchOnPoint1`    | `REAL`  | -2.5         |
| Input Const | `rSwitchOnPoint2`    | `REAL`  | -1.5         |
| Input Const | `udiTimeMinOff`      | `UDINT` | 3            |
| Input Const | `eManModeB2`         | eMANBIN | eMANBIN.Auto |
| Input Const | `eManModeB1`         | eMANBIN | eMANBIN.Auto |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://support.powerio.com/hub/codesys-hvac/hvac-library/functionblocks/components/burner2stage.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
