> For the complete documentation index, see [llms.txt](https://support.powerio.com/hub/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://support.powerio.com/hub/codesys-hvac/en/hvac-library/functionblocks/general/redundance16.md).

# Redundance16

## `Redundance16` (FB)

FUNCTION\_BLOCK Redundance16

### Short description

> Redundant control of 0 - 16 identical devices\
> Influencing factors: requirements, operating hours, operating and fault states\
> Typical application: definition of master and follower devices

### Representation

<figure><img src="https://2592874069-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR4vCFzt6ixgsqlR3pdR%2Fuploads%2F1Tt6kkbhy98P98DqO7oK%2FRedundance16_FB.png?alt=media&amp;token=03a5aa36-6856-4778-ae5e-b410364e76b7" alt=""><figcaption></figcaption></figure>

### Interfaces

#### Inputs

| Name                     | Data type | Value range | Initial value | Function                                                        |
| ------------------------ | --------- | ----------- | ------------- | --------------------------------------------------------------- |
| *wTotalNumberOfDevices*  | WORD      |             | 2             | Total number of devices (0 - *cwMaxMumberOfDevices*)            |
| *wActiveNumberOfDevices* | WORD      |             | 0             | Number of active devices (0 - *wTotalNumberOfDevices*)          |
| *xFb1*                   | BOOL      |             | FALSE         | Operation - Device 1 (TRUE = operation)                         |
| *xFb2*                   | BOOL      |             | FALSE         | Operation - Device 2 (TRUE = operation)                         |
| *xFb3*                   | BOOL      |             | FALSE         | Operation - Device 3 (TRUE = operation)                         |
| *xFb4*                   | BOOL      |             | FALSE         | Operation - Device 4 (TRUE = operation)                         |
| *xFb5*                   | BOOL      |             | FALSE         | Operation - Device 5 (TRUE = operation)                         |
| *xFb6*                   | BOOL      |             | FALSE         | Operation - Device 6 (TRUE = operation)                         |
| *xFb7*                   | BOOL      |             | FALSE         | Operation - Device 7 (TRUE = operation)                         |
| *xFb8*                   | BOOL      |             | FALSE         | Operation - Device 8 (TRUE = operation)                         |
| *xFb9*                   | BOOL      |             | FALSE         | Operation - Device 9 (TRUE = operation)                         |
| *xFb10*                  | BOOL      |             | FALSE         | Operation - Device 10 (TRUE = operation)                        |
| *xFb11*                  | BOOL      |             | FALSE         | Operation - Device 11 (TRUE = operation)                        |
| *xFb12*                  | BOOL      |             | FALSE         | Operation - Device 12 (TRUE = operation)                        |
| *xFb13*                  | BOOL      |             | FALSE         | Operation - Device 13 (TRUE = operation)                        |
| *xFb14*                  | BOOL      |             | FALSE         | Operation - Device 14 (TRUE = operation)                        |
| *xFb15*                  | BOOL      |             | FALSE         | Operation - Device 15 (TRUE = operation)                        |
| *xFb16*                  | BOOL      |             | FALSE         | Operation - Device 16 (TRUE = operation)                        |
| *xAlarm1*                | BOOL      |             | TRUE          | Fault - Device 1 (TRUE = fault)                                 |
| *xAlarm2*                | BOOL      |             | TRUE          | Fault - Device 2 (TRUE = fault)                                 |
| *xAlarm3*                | BOOL      |             | TRUE          | Fault - Device 3 (TRUE = fault)                                 |
| *xAlarm4*                | BOOL      |             | TRUE          | Fault - Device 4 (TRUE = fault)                                 |
| *xAlarm5*                | BOOL      |             | TRUE          | Fault - Device 5 (TRUE = fault)                                 |
| *xAlarm6*                | BOOL      |             | TRUE          | Fault - Device 6 (TRUE = fault)                                 |
| *xAlarm7*                | BOOL      |             | TRUE          | Fault - Device 7 (TRUE = fault)                                 |
| *xAlarm8*                | BOOL      |             | TRUE          | Fault - Device 8 (TRUE = fault)                                 |
| *xAlarm9*                | BOOL      |             | TRUE          | Fault - Device 9 (TRUE = fault)                                 |
| *xAlarm10*               | BOOL      |             | TRUE          | Fault - Device 10 (TRUE = fault)                                |
| *xAlarm11*               | BOOL      |             | TRUE          | Fault - Device 11 (TRUE = fault)                                |
| *xAlarm12*               | BOOL      |             | TRUE          | Fault - Device 12 (TRUE = fault)                                |
| *xAlarm13*               | BOOL      |             | TRUE          | Fault - Device 13 (TRUE = fault)                                |
| *xAlarm14*               | BOOL      |             | TRUE          | Fault - Device 14 (TRUE = fault)                                |
| *xAlarm15*               | BOOL      |             | TRUE          | Fault - Device 15 (TRUE = fault)                                |
| *xAlarm16*               | BOOL      |             | TRUE          | Fault - Device 16 (TRUE = fault)                                |
| *uiOperatingHours1*      | UDINT     |             | 0             | Operating hours - Device 1                                      |
| *uiOperatingHours2*      | UDINT     |             | 0             | Operating hours - Device 2                                      |
| *uiOperatingHours3*      | UDINT     |             | 0             | Operating hours - Device 3                                      |
| *uiOperatingHours4*      | UDINT     |             | 0             | Operating hours - Device 4                                      |
| *uiOperatingHours5*      | UDINT     |             | 0             | Operating hours - Device 5                                      |
| *uiOperatingHours6*      | UDINT     |             | 0             | Operating hours - Device 6                                      |
| *uiOperatingHours7*      | UDINT     |             | 0             | Operating hours - Device 7                                      |
| *uiOperatingHours8*      | UDINT     |             | 0             | Operating hours - Device 8                                      |
| *uiOperatingHours9*      | UDINT     |             | 0             | Operating hours - Device 9                                      |
| *uiOperatingHours10*     | UDINT     |             | 0             | Operating hours - Device 10                                     |
| *uiOperatingHours11*     | UDINT     |             | 0             | Operating hours - Device 11                                     |
| *uiOperatingHours12*     | UDINT     |             | 0             | Operating hours - Device 12                                     |
| *uiOperatingHours13*     | UDINT     |             | 0             | Operating hours - Device 13                                     |
| *uiOperatingHours14*     | UDINT     |             | 0             | Operating hours - Device 14                                     |
| *uiOperatingHours15*     | UDINT     |             | 0             | Operating hours - Device 15                                     |
| *uiOperatingHours16*     | UDINT     |             | 0             | Operating hours - Device 16                                     |
| *xUpdate*                | BOOL      |             |               | Triggering a recalculation of the sequence on every rising edge |

#### Outputs

| Name                          | Data type                     | Value range | Initial value | Function                                                              |
| ----------------------------- | ----------------------------- | ----------- | ------------- | --------------------------------------------------------------------- |
| uliCurrentSequencePrio1\_8    | ULINT                         |             | 0             | Current device sequence as integer (priority 1 - 8)                   |
| uliCurrentSequencePrio9\_16   | ULINT                         |             | 0             | Current device sequence as integer (priority 9 - 16)                  |
| *sCurrentSequence*            | STRING                        |             | ''            | Current device sequence as string                                     |
| *wNumberOfOperationalDevices* | WORD                          |             | 0             | Number of operational devices                                         |
| *xCmd1*                       | BOOL                          |             | FALSE         | Enable - Device 1 (TRUE = enable)                                     |
| *xCmd2*                       | BOOL                          |             | FALSE         | Enable - Device 2 (TRUE = enable)                                     |
| *xCmd3*                       | BOOL                          |             | FALSE         | Enable - Device 3 (TRUE = enable)                                     |
| *xCmd4*                       | BOOL                          |             | FALSE         | Enable - Device 4 (TRUE = enable)                                     |
| *xCmd5*                       | BOOL                          |             | FALSE         | Enable - Device 5 (TRUE = enable)                                     |
| *xCmd6*                       | BOOL                          |             | FALSE         | Enable - Device 6 (TRUE = enable)                                     |
| *xCmd7*                       | BOOL                          |             | FALSE         | Enable - Device 7 (TRUE = enable)                                     |
| *xCmd8*                       | BOOL                          |             | FALSE         | Enable - Device 8 (TRUE = enable)                                     |
| *xCmd9*                       | BOOL                          |             | FALSE         | Enable - Device 9 (TRUE = enable)                                     |
| *xCmd10*                      | BOOL                          |             | FALSE         | Enable - Device 10 (TRUE = enable)                                    |
| *xCmd11*                      | BOOL                          |             | FALSE         | Enable - Device 11 (TRUE = enable)                                    |
| *xCmd12*                      | BOOL                          |             | FALSE         | Enable - Device 12 (TRUE = enable)                                    |
| *xCmd13*                      | BOOL                          |             | FALSE         | Enable - Device 13 (TRUE = enable)                                    |
| *xCmd14*                      | BOOL                          |             | FALSE         | Enable - Device 14 (TRUE = enable)                                    |
| *xCmd15*                      | BOOL                          |             | FALSE         | Enable - Device 15 (TRUE = enable)                                    |
| *xCmd16*                      | BOOL                          |             | FALSE         | Enable - Device 16 (TRUE = enable)                                    |
| *wPrio1*                      | WORD                          |             | 0             | Current priority of device 1 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio2*                      | WORD                          |             | 0             | Current priority of device 2 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio3*                      | WORD                          |             | 0             | Current priority of device 3 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio4*                      | WORD                          |             | 0             | Current priority of device 4 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio5*                      | WORD                          |             | 0             | Current priority of device 5 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio6*                      | WORD                          |             | 0             | Current priority of device 6 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio7*                      | WORD                          |             | 0             | Current priority of device 7 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio8*                      | WORD                          |             | 0             | Current priority of device 8 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio9*                      | WORD                          |             | 0             | Current priority of device 9 (0 = none, 1 - *wTotalNumberOfDevices*)  |
| *wPrio10*                     | WORD                          |             | 0             | Current priority of device 10 (0 = none, 1 - *wTotalNumberOfDevices*) |
| *wPrio11*                     | WORD                          |             | 0             | Current priority of device 11 (0 = none, 1 - *wTotalNumberOfDevices*) |
| *wPrio12*                     | WORD                          |             | 0             | Current priority of device 12 (0 = none, 1 - *wTotalNumberOfDevices*) |
| *wPrio13*                     | WORD                          |             | 0             | Current priority of device 13 (0 = none, 1 - *wTotalNumberOfDevices*) |
| *wPrio14*                     | WORD                          |             | 0             | Current priority of device 14 (0 = none, 1 - *wTotalNumberOfDevices*) |
| *wPrio15*                     | WORD                          |             | 0             | Current priority of device 15 (0 = none, 1 - *wTotalNumberOfDevices*) |
| *wPrio16*                     | WORD                          |             | 0             | Current priority of device 16 (0 = none, 1 - *wTotalNumberOfDevices*) |
| *xErr*                        | BOOL                          |             | FALSE         | Output - fault                                                        |
| *eOperationalCondition*       | eRedundance3\_OperationalMode |             |               | Number / name of the current operating state                          |

#### Setpoints / parameters

| Name                   | Data type | Value range | Initial value | Function                                                                                                          |
| ---------------------- | --------- | ----------- | ------------- | ----------------------------------------------------------------------------------------------------------------- |
| **xConOperatingHours** | BOOL      |             | TRUE          | FALSE = sequence changeover only via input xUpdate, TRUE = automatic sequence changeover based on operating hours |
| **xEnFb**              | BOOL      |             | TRUE          | FALSE = changeover according to enable (xCmdX), TRUE = changeover according to operating feedback (xFbX)          |
| **wTolerance**         | WORD      |             | 100           | Limit value - operating hour difference for direct sequence change in partial-load operation                      |

### Function description

#### General

This function block is used for the redundant control of 0 - 8 identical devices depending on the influencing variables.\
Requirements (*wActiveNumberOfDevices*), operating hours (*uiOperatingHours*), operating states (*xFb*) and\
fault states (*xAlarm*).

#### Input *wTotalNumberOfDevices*

This input is used to define the total number of usable devices.\
The devices are assigned consecutively starting with the lowest device numbers.\
Example: *wTotalNumberOfDevices* = 3: Devices 1 - 3 (inputs and outputs) are used / considered.\
Permissible range: 0 - *cwMaxNumberOfDevices*

#### Input *wActiveNumberOfDevices*

This input is used to define the number of devices that should currently be used.\
Permissible range: 0 - *wTotalNumberOfDevices*

#### Input *xUpdate*

Every rising edge at this input triggers a recalculation of the current device sequence.\
Boundary conditions: *xConOperationHours* = FALSE, operating hour difference = 0 hours.

#### Outputs 'uliCurrentSequencePrio1\_8' and 'uliCurrentSequencePrio9\_16'

These outputs always show the current device sequence as an integer. The number of the device with the highest priority is always first, followed by the number of the device with the second-highest priority, etc.\
Example: *uliCurrentSequence1\_8* = 145 means: Device 1 = priority 1, Device 4 = priority 2 and Device 5 = priority 3

#### Output *sCurrentSequence*

This output always shows the current device sequence as a string with separators. The same applies to the priorities as for the outputs *uliCurrentSequencePrio1\_8 or uliCurrentSequencePrio9\_16* .\
Example: *sdiCurrentSequence* = '1-4-5' means: Device 1 = priority 1, Device 4 = priority 2 and Device 5 = priority 3

#### Output *wNumberOfOperationalDevices*

This output always shows the number of operationally ready devices.

#### Fault output *xErr*

This output is active (= TRUE) if at least one of the following conditions is met.

1. *wActiveNumberOfDevices* > *wTotalNumberOfDevices*
2. *wTotalNumberOfDevices* > *cwMaxNumberOfDevices*
3. *wActiveNumberOfDevices* > *wOperationalNumberofDevices*

\
In all other cases, the output \*xErr\* is not active (= FALSE).

#### Output *eOperationalCondition*

This output always represents the current load situation (idle, partial load, full load) depending on the setpoint / parameter **xEnFb** .\
**xEnFb** = FALSE: The enable outputs *xCmd* of the operationally ready devices are evaluated / considered.\
**xEnFb** = TRUE: The operating states *xFb* of the operationally ready devices are evaluated / considered.\
Example: **xEnFb** = TRUE, *wTotalNumberOfDevices* = 3 and *xFb1* = TRUE and *xFb2* = TRUE: Output = *PartLoad\_Inputs\_Fb*

#### Setpoint / parameter **xConOperatingHours**

**xConOperatingHours** = FALSE: The switching of the device sequence is triggered only by a rising edge at input *xUpdate* .\
**xConOperatingHours** = TRUE: The switching of the device sequence is triggered depending on the operating hours, the operating messages (for **xEnFb** = TRUE)\
and the enables (for **xEnFb** = FALSE).

#### Setpoint / parameter **xEnFb**

**xEnFb** = FALSE: The enable outputs 'xCmd' of the operationally ready devices are evaluated / considered.\
**xEnFb** = TRUE: The operating states 'xFb' of the operationally ready devices are evaluated / considered.

#### Setpoint / parameter **wTolerance**

This setpoint determines the maximum operating hour difference before a changeover of the device sequence based on operating hours.

#### Determination of the device sequence

A changeover of the device sequence can **generally** only take place if at least one of the following conditions is met:

1. The fault state of at least one device (devices 1 - *wTotalNumberOfDevices*) has changed (high priority)
2. The total number of devices (input *wTotalNumberOfDevices* ) (1 - *cwMaxNumberOfDevices*) has changed (high priority)
3. The number of operating hours of at least one operationally ready device (devices 1 - *wTotalNumberOfDevices*) has changed (low priority)

#### Definition - Idle:

xEnFb = FALSE: The enable outputs 'xCmd' of all operationally ready devices (devices 1 - wTotalNumberOfDevices) are inactive (= FALSE)\
xEnFb = TRUE: The operating messages 'xFb' of all operationally ready devices (devices 1 - wTotalNumberOfDevices) are inactive (= FALSE)

#### Definition - Full load:

xEnFb = FALSE: The enable outputs 'xCmd' of all operationally ready devices (devices 1 - wTotalNumberOfDevices) are active (= TRUE)\
xEnFb = TRUE: The operating messages 'xFb' of all operationally ready devices (devices 1 - wTotalNumberOfDevices) are active (= TRUE)

#### Definition - Part load:

xEnFb = FALSE: The number of enable outputs 'xCmd' of all operationally ready devices in the active state (= TRUE) is greater than or equal to 1 and less than the number of all operationally ready devices (devices 1 - wTotalNumberOfDevices)\
xEnFb = FALSE: The number of operating messages xFb of all operationally ready devices in the active state (= TRUE) is greater than or equal to 1 and less than the number of all operationally ready devices (devices 1 - wTotalNumberOfDevices)\
\
\
\
High-priority (= immediate) changeover depending on the fault states (inputs xAlarm) and input wTotalNumberOfDevices.\
\
The fault state of each device in the range 1 - *wTotalNumberOfDevices* is recorded cyclically and evaluated for changes.\
The input *wTotalNumberOfDevices* is recorded cyclically and evaluated for changes.\
Each faulty device (input *xAlarm* = TRUE) in the range 1 - *wTotalNumberOfDevices* is no longer operationally ready.\
Any change in the fault state of at least one device in the range 1 - *wTotalNumberOfDevices* triggers an immediate recalculation of the device sequence.\
Any change in input *wTotalNumberOfDevices* triggers an immediate recalculation of the device sequence.\
\
\
\
Changeover with **low** priority depending on the operating hours (inputs *udiOperationHours*), operating states (inputs *xFb*)\
and enable outputs (outputs *xCmd*) of devices 1 - 3.\
\
The operating hours of each operationally ready device in the range 1 - *wTotalNumberOfDevices* are recorded cyclically and evaluated for changes.\
The operating states and enable outputs of each operationally ready device in the range 1 - *wTotalNumberOfDevices* are recorded cyclically.\
The recalculation of the device sequence occurs as soon as one of the situations described below applies:\
\
\
\
**Situation 1** ( *xConOperationHours* = FALSE, rising edge at input *xUpdate* )\
\
The device sequence is recalculated with an operating hour difference of 0 hours, i.e. the fault-free device with the lowest number of operating hours\
has the highest priority (in case of equal operating hours, the device with the lower number has the higher priority).\
\
\
\
**Situation 2** (*xConOperationHours* = TRUE, idle or full load)\
\
In idle or under full load, the device sequence is recalculated with an operating hour difference of 0 hours, i.e. the fault-free device\
with the lowest number of operating hours has the highest priority (in case of equal operating hours, the device with the lower number has the higher priority).\
The recalculation of the device sequence is triggered if the operating hours of at least one operationally ready device have changed.\
\
\
\
**Situation 3** (*xConOperationHours* = TRUE, part load)\
\
When first switching to part-load operation, the device sequence is recalculated with an operating hour difference of 0 hours, i.e. the fault-free device\
with the lowest number of operating hours has the highest priority (in case of equal operating hours, the device with the lower number has the higher priority).\
\
In regular part-load operation, the device sequence is recalculated with an operating hour difference of **wTolerance** hours.\
The recalculation of the device sequence is triggered if the operating hours of at least one operationally ready device have changed.

#### Enable outputs 'xCmd'

\
The states of the outputs of the devices in the range 1 - wTotalNumberOfDevices are ultimately defined as follows:\
\
The enable outputs of the operational devices in the range 1 - wTotalNumberOfDevices are activated if their current priority <= the number of requested devices (input wActiveNumberOfDevices).\
The enable outputs of the operational devices in the range 1 - wTotalNumberOfDevices are deactivated if their current priority > the number of requested devices (input wActiveNumberOfDevices).

#### Priority outputs *wPrio*

\
The priority outputs of each device always contain the current priority in the range 0 - wTotalNumberOfDevices.\
\
Priority = 0: The device has no priority or an invalid priority\
Priority = 1: The device has the highest priority\
Priority = 2: The device has the second highest priority\
Priority = 3: The device has the third highest priority\
etc.

### CODESYS

InOut:

| Scope       | Name                          | Type                          | Initial |
| ----------- | ----------------------------- | ----------------------------- | ------- |
| Input       | `wTotalNumberOfDevices`       | `WORD`                        | 2       |
| Input       | `wActiveNumberOfDevices`      | `WORD`                        | 0       |
| Input       | `xFb1`                        | `BOOL`                        | FALSE   |
| Input       | `xFb2`                        | `BOOL`                        | FALSE   |
| Input       | `xFb3`                        | `BOOL`                        | FALSE   |
| Input       | `xFb4`                        | `BOOL`                        | FALSE   |
| Input       | `xFb5`                        | `BOOL`                        | FALSE   |
| Input       | `xFb6`                        | `BOOL`                        | FALSE   |
| Input       | `xFb7`                        | `BOOL`                        | FALSE   |
| Input       | `xFb8`                        | `BOOL`                        | FALSE   |
| Input       | `xFb9`                        | `BOOL`                        | FALSE   |
| Input       | `xFb10`                       | `BOOL`                        | FALSE   |
| Input       | `xFb11`                       | `BOOL`                        | FALSE   |
| Input       | `xFb12`                       | `BOOL`                        | FALSE   |
| Input       | `xFb13`                       | `BOOL`                        | FALSE   |
| Input       | `xFb14`                       | `BOOL`                        | FALSE   |
| Input       | `xFb15`                       | `BOOL`                        | FALSE   |
| Input       | `xFb16`                       | `BOOL`                        | FALSE   |
| Input       | `xAlarm1`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm2`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm3`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm4`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm5`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm6`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm7`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm8`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm9`                     | `BOOL`                        | TRUE    |
| Input       | `xAlarm10`                    | `BOOL`                        | TRUE    |
| Input       | `xAlarm11`                    | `BOOL`                        | TRUE    |
| Input       | `xAlarm12`                    | `BOOL`                        | TRUE    |
| Input       | `xAlarm13`                    | `BOOL`                        | TRUE    |
| Input       | `xAlarm14`                    | `BOOL`                        | TRUE    |
| Input       | `xAlarm15`                    | `BOOL`                        | TRUE    |
| Input       | `xAlarm16`                    | `BOOL`                        | TRUE    |
| Input       | `udiOperatingHours1`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours2`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours3`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours4`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours5`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours6`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours7`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours8`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours9`          | `UDINT`                       | 0       |
| Input       | `udiOperatingHours10`         | `UDINT`                       | 0       |
| Input       | `udiOperatingHours11`         | `UDINT`                       | 0       |
| Input       | `udiOperatingHours12`         | `UDINT`                       | 0       |
| Input       | `udiOperatingHours13`         | `UDINT`                       | 0       |
| Input       | `udiOperatingHours14`         | `UDINT`                       | 0       |
| Input       | `udiOperatingHours15`         | `UDINT`                       | 0       |
| Input       | `udiOperatingHours16`         | `UDINT`                       | 0       |
| Input       | `xUpdate`                     | `BOOL`                        |         |
| Input Const | `xConOperatingHours`          | `BOOL`                        | TRUE    |
| Input Const | `xEnFb`                       | `BOOL`                        | TRUE    |
| Input Const | `wTolerance`                  | `WORD`                        | 100     |
| Output      | `udiCurrentSequence`          | `UDINT`                       | 0       |
| Output      | `sCurrentSequence`            | `STRING`                      | ''      |
| Output      | `wNumberOfOperationalDevices` | `WORD`                        | 0       |
| Output      | `xCmd1`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd2`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd3`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd4`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd5`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd6`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd7`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd8`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd9`                       | `BOOL`                        | FALSE   |
| Output      | `xCmd10`                      | `BOOL`                        | FALSE   |
| Output      | `xCmd11`                      | `BOOL`                        | FALSE   |
| Output      | `xCmd12`                      | `BOOL`                        | FALSE   |
| Output      | `xCmd13`                      | `BOOL`                        | FALSE   |
| Output      | `xCmd14`                      | `BOOL`                        | FALSE   |
| Output      | `xCmd15`                      | `BOOL`                        | FALSE   |
| Output      | `xCmd16`                      | `BOOL`                        | FALSE   |
| Output      | `wPrio1`                      | `WORD`                        | 0       |
| Output      | `wPrio2`                      | `WORD`                        | 0       |
| Output      | `wPrio3`                      | `WORD`                        | 0       |
| Output      | `wPrio4`                      | `WORD`                        | 0       |
| Output      | `wPrio5`                      | `WORD`                        | 0       |
| Output      | `wPrio6`                      | `WORD`                        | 0       |
| Output      | `wPrio7`                      | `WORD`                        | 0       |
| Output      | `wPrio8`                      | `WORD`                        | 0       |
| Output      | `wPrio9`                      | `WORD`                        | 0       |
| Output      | `wPrio10`                     | `WORD`                        | 0       |
| Output      | `wPrio11`                     | `WORD`                        | 0       |
| Output      | `wPrio12`                     | `WORD`                        | 0       |
| Output      | `wPrio13`                     | `WORD`                        | 0       |
| Output      | `wPrio14`                     | `WORD`                        | 0       |
| Output      | `wPrio15`                     | `WORD`                        | 0       |
| Output      | `wPrio16`                     | `WORD`                        | 0       |
| Output      | `xErr`                        | `BOOL`                        | FALSE   |
| Output      | `eOperationalCondition`       | eRedundance3\_OperationalMode |         |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://support.powerio.com/hub/codesys-hvac/en/hvac-library/functionblocks/general/redundance16.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
