# Burner2Stage

## `Burner2Stage` (FB)

FUNCTION\_BLOCK Burner2Stage

### Short description

> Control of a heat generator (temperature control via binary control commands More / Less)\
> \
> Typical application: heat generation

### Representation

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

### Function description

#### General

This function block is used to control / regulate a heat generator depending on the demand of the heat generator *xEn*, the supply setpoint temperature *rSetPtTemp* and the supply temperature *rFdT*.\
The enable / disable of the heat generator is done via the output *xHB* (FALSE = lockout, TRUE = enable).\
The flow temperature control (analogously also boiler temperature control) is carried out by means of two power controllers (P-controllers, slow and fast) via the outputs *xMoreHB* and *xLessHB*.\
The enabling of the control is delayed (setpoint / parameter **udiWaitControl**) after the running feedback (*xFb* = TRUE) of the heat generator.\
\
The following function blocks are essentially used:

ControlP

Out3P

OperatingHours

ManBin

#### Enable / disable of the heat generator

The enabling of the heat generator (*xAB* = TRUE, *xHB* = TRUE (eManModeB = eManBin.Auto)) occurs if the supply temperature *rFdT* the sum of supply setpoint temperature *rSetPtTemp* and setpoint / parameter **rSwitchOnPoint** falls below, at the same time the general enable *xEn* active (= TRUE) and the minimum off-time is not active.\
The disabling of the heat generator (*xAB* = FALSE, *xHB* = FALSE (eManModeB = eManBin.Auto)) occurs if the supply temperature *rFdT* the sum of supply setpoint temperature *rSetPtTemp* and setpoint / parameter **rSwitchOffPoint** exceeds and at the same time the general enable *xEn* is active (= TRUE).\
Between two consecutive operating cycles a minimum off-time is always inserted (duration = **udiTimeMinOff**, display - remaining time: *tOnDelay*).\
The minimum off-time begins with the falling edge (TRUE > FALSE) at the input *xFb*.

#### Temperature control of the heat generator

The enabling of the temperature control is delayed (duration = **udiWaitControl**, display - remaining time: *tOnControlDelay*)\
after the active running signal (*xFb* = TRUE) of the heat generator.\
The disabling of the temperature control occurs immediately after the inactive running signal (*xFb* = FALSE) of the heat generator (switch-off value: **rYDisabled**).\
The two internal power controllers (P-controllers, slow and fast, output range each -100.0 - 100.0 %) are enabled/disabled simultaneously. (Setpoint = desired flow temperature *rSetPtTemp*, actual value = supply temperature *rFdT*).\
The control signals of both power controllers are fed through a minimum-value selection (forwarding the signal with the smaller value) to the output controller in the range -100.0 - 100.0 %.\
The output controller finally generates output signals for a 3-point actuator (pulse width modulation, integration interval = **tIntegration**) with the outputs *xMoreHB* or *xLessHB*.\
The constant pulse duration for the two outputs is freely adjustable in each case (**tImpulsOpen** or **tImpuls Close**), the variable pulse pauses are determined by the output controller.\
The two power controllers can be configured individually and independently of each other (P-controller fast: gain factor **rKpBig**, P-controller slow: gain factor **rKpTiny**).

#### Manual override of the digital outputs

All digital control outputs after manual override (*xHB*, xMoreHB\*, *xLessHB*) can either be operated in automatic mode (eMANBIN.Auto) or in one of the two manual operating modes (eMANBIN.ManOn, eMANBIN.ManOff).

| *xAB* | eMANBIN        | *xHB* | Notes                                          |
| ----- | -------------- | ----- | ---------------------------------------------- |
| FALSE | eMANBIN.Auto   | FALSE | Manual override module in automatic            |
| TRUE  | eMANBIN.Auto   | TRUE  | Manual override module in automatic            |
| X     | eMANBIN.ManOn  | TRUE  | Manual override module in manual operation On  |
| X     | eMANBIN.ManOff | FALSE | Manual override module in manual operation Off |

Legend: X = any

#### Aggregate fault *xAlarm*

The aggregate fault *xAlarm* is active (= TRUE) if the fault signal of the heat generator *xAlarmIn* is active (= TRUE).\
In all other situations the aggregate fault *xAlarm* not active (= FALSE).

#### Collective automatic-mode message *xAuto*

The collective automatic-mode message *xAuto* is activated (= TRUE) if the following conditions are met simultaneously:

* Input *eAOO* = HVACTYPES.eManBin.Auto
* Input *eAOOMore* = HVACTYPES.eManBin.Auto
* Input *eAOOLess* = HVACTYPES.eManBin.Auto
* Setpoint / parameters **eManModeB** = eMANBIN.Auto
* Setpoint / parameters **eManModeBMore** = eMANBIN.Auto
* Setpoint / parameters **eManModeBLess** = eMANBIN.Auto

#### Operating hours counter - heat generator

The operating hours counter (*udiOperatingHours*, *udiCountFb*) for the heat generator is active when the running signal is active (*xFb* = TRUE).

> **Write access to the counter values**
>
> Via the path 'InstanceName.\_OperatingHours.udiOperatingHours' or 'InstanceName.\_OperatingHours.udiCountFb' write access to both counters is possible.
>
> **Prerequisite for the use of the function block Burner3P**
>
> The use of the TimeRead2 function block is required for correct operation.

#### Current calculated power of the heat generator *rPos*

The current **calculated power** of the heat generator is displayed at the output *rPos* in the range 0.0 - 100.0 %.\
For this, the correct specification of the travel time of the actuator between minimum and maximum power (**tDuration**) is required.\
No repositioning to a reference position takes place.

#### Feedback of the heat generator power *rU*

The current **actual** Power of the heat generator can be connected at the input *rU* .\
This input is currently not used for control and regulation purposes.

#### Not active state (*xEn* = FALSE)

| *xHB*                            | *xAB* | *xMoreHB*                            | *xMoreAB* | *xLessHB*                            | *xLessAB* | *rPos* | *tOnDelay* | *tOnControlDelay* | *dtLastFb* | *udiOperatingHours* | *udiCountFb* | *xAlarm*            | *xAuto*   | Notes         |
| -------------------------------- | ----- | ------------------------------------ | --------- | ------------------------------------ | --------- | ------ | ---------- | ----------------- | ---------- | ------------------- | ------------ | ------------------- | --------- | ------------- |
| FALSE (eManModeB = eManBin.Auto) | FALSE | FALSE (eManModeBMore = eManBin.Auto) | FALSE     | FALSE (eManModeBLess = eManBin.Auto) | FALSE     | 0.0 %  | old value  | old value         | old value  | old value           | old value    | State of *xAlarmIn* | old value | *xEn* = FALSE |

Legend: X = any

### 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 |
