# BurnerP

## `BurnerP` (FB)

FUNCTION\_BLOCK BurnerP

### Short description

> Control of a heat generator (temperature control via analog power signal 0.0 - 100.0 %)\
> \
> 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-21d9affcb26a7286c9ae88cc56fcd583a1bc60aa%2FBurnerP_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 = locked, TRUE = enabled).\
The supply temperature control (analog also boiler temperature control) is performed by a power controller (PI controller) via the analog output *rHa* in the range of **rYMin** to **rYMax**.\
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:

ControlPI

OperatingHours

ManBin

ManNum

#### 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 operating message (*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 (power signal - heat generator before manual override *rAA* in the locked state = **rYDisabled**).\
The internal power controller (PI controller, output range: **rYMin** to **rYMax**) is enabled/disabled with the temperature control. (Setpoint = supply set temperature *rSetPtTemp*, actual value = supply temperature *rFdT*).\
\
The parameters of the internal power controller can be configured individually:\
\
Power controller - Upper absolute limit of the output signal in % : **rYMax**\
Power controller - Lower absolute limit of the output signal in % : **rYMin**\
Power controller - Reset time in s : **rTn**\
Power controller - Gain factor : **rKp**\
Power controller - Offset temperature in °C : **rOffset**\
Power controller - Initialization value for the output signal in % : **rInitValue**\
Power controller - Switch-off value in % : **rYDisabled**\
\
The output signal of the power controller is fed directly to the output *rAA* supplied.

#### Manual override of the digital output *xHB*

The enabling/locking of the heat generator (*xHB*) can be operated either in automatic mode (eMANBIN.Auto) or in one of the two manual 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

#### Manual override of the analog output *rHA*

The output signal of the power controller (*rHA*) can be operated either in automatic mode (eMANNUM.Auto) or in manual mode (eMANNUM.Man).

| *rAA* | eMANNUM      | *rHA*         | Notes                                      |
| ----- | ------------ | ------------- | ------------------------------------------ |
| Value | eMANNUM.Auto | Value         | Manual override module in automatic        |
| X     | eMANNUM.Man  | **rManValue** | Manual override module in manual operation |

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 *eAO* = HVACTYPES.eManNum.Auto
* Setpoint / parameters **eManModeB** = eMANBIN.Auto
* Setpoint / parameters **eManModeN** = eMANNUM.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 using the function block BurnerP**
>
> The use of the TimeRead2 function block is required for correct operation.

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

#### Feedback of the manual value for the power signal from the manual override - hardware *rPoti*

The feedback of the manual value can be at the input *rPoti* .\
This input is currently not used for control and regulation purposes.

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

| *xHB*                            | *xAB* | *rHA*                                     | *rAA*          | *tOnDelay* | *tOnControlDelay* | *dtLastFb* | *udiOperatingHours* | *udiCountFb* | *xAlarm*            | *xAuto*   | Notes         |
| -------------------------------- | ----- | ----------------------------------------- | -------------- | ---------- | ----------------- | ---------- | ------------------- | ------------ | ------------------- | --------- | ------------- |
| FALSE (eManModeB = eManBin.Auto) | FALSE | **rYDisabled** (eManModeN = eManNum.Auto) | **rYDisabled** | 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       | `xFb`               | `BOOL`  |              |
| Input       | `rU`                | `REAL`  | 0            |
| Input       | `xAlarmIn`          | `BOOL`  |              |
| Input       | `eAOO`              | eManBin | eManBin.Auto |
| Input       | `eAO`               | eManNum | eManNum.Auto |
| Input       | `rPoti`             | `REAL`  |              |
| Input       | `rFdT`              | `REAL`  |              |
| Output      | `xHB`               | `BOOL`  |              |
| Output      | `xAB`               | `BOOL`  |              |
| Output      | `rHA`               | `REAL`  |              |
| Output      | `rAA`               | `REAL`  |              |
| Output      | `tOnDelay`          | `TIME`  |              |
| Output      | `tOnControlDelay`   | `TIME`  |              |
| Output      | `dtLastFb`          | `DT`    |              |
| Output      | `udiOperatingHours` | `UDINT` |              |
| Output      | `udiCountFb`        | `UDINT` |              |
| Output      | `xAlarm`            | `BOOL`  |              |
| Output      | `xAuto`             | `BOOL`  |              |
| Input Const | `udiTimeTOFxFb`     | `UDINT` | 7            |
| Input Const | `rYMax`             | `REAL`  | 100          |
| Input Const | `rYMin`             | `REAL`  | 0            |
| Input Const | `rTn`               | `REAL`  | 200          |
| Input Const | `rKp`               | `REAL`  | 2            |
| Input Const | `rOffset`           | `REAL`  | 0            |
| Input Const | `rInitValue`        | `REAL`  | 0            |
| Input Const | `rYDisabled`        | `REAL`  | 0            |
| Input Const | `udiWaitControl`    | `UDINT` | 3            |
| Input Const | `rSwitchOffPoint`   | `REAL`  | 2.5          |
| Input Const | `rSwitchOnPoint`    | `REAL`  | -2.5         |
| Input Const | `udiTimeMinOff`     | `UDINT` | 3            |
| Input Const | `rManValue`         | `REAL`  | 0            |
| Input Const | `eManModeN`         | eMANNUM | eMANNUM.Auto |
| Input Const | `eManModeB`         | eMANBIN | eMANBIN.Auto |
