> 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/control/out3p.md).

# Out3P

## `Out3P` (FB)

FUNCTION\_BLOCK Out3P

### Short description

> Conversion of an analog value (e.g. P-controller) into output signals for a 3-point actuator (pulse-width modulation).\
> Additionally, a reference position (limit switch) of the actuator can be captured.

### Representation

<figure><img src="/files/5fb8c966540760ba93e109591cbe8c331164faee" alt=""><figcaption></figcaption></figure>

### Interfaces

#### Inputs

| Name      | Data type | Value range | Initial value | Function                                                          |
| --------- | --------- | ----------- | ------------- | ----------------------------------------------------------------- |
| *xEn*     | BOOL      |             |               | Enable of the function block                                      |
| *rIn*     | REAL      |             |               | Input signal                                                      |
| *xRefPos* | BOOL      |             |               | Digital input for detecting the reference position (limit switch) |

#### Outputs

| Name        | Data type | Value range | Initial value | Function                                    |
| ----------- | --------- | ----------- | ------------- | ------------------------------------------- |
| *xOutOpen*  | BOOL      |             |               | Output variable Plus/More for the actuator  |
| *xOutClose* | BOOL      |             |               | Output variable Minus/Less for the actuator |
| *rPos*      | REAL      | 0.0 … 100.0 |               | Analog signal for the current position      |

#### Setpoints / parameters

| Name             | Data type | Value range | Initial value | Function                                                     |
| ---------------- | --------- | ----------- | ------------- | ------------------------------------------------------------ |
| **iRefPosition** | INT       | 0 - 100     | 0%            | Reference position of the actuator                           |
| **tImpulsClose** | TIME      |             | 1s            | Duration of a pulse at the Minus/Less output                 |
| **tImpulsOpen**  | TIME      |             | 1s            | Duration of a pulse at the Plus/More output                  |
| **rMinLimit**    | REAL      |             | -100.0        | Integral value for pulse triggering at the Minus/Less output |
| **rMaxLimit**    | REAL      |             | 100.0         | Integral value for pulse triggering at the Plus/More output  |
| **rDuration**    | TIME      |             | 120s          | Runtime of the actuator                                      |
| **tIntegration** | TIME      |             | 100ms         | Duration between two integration operations                  |

### Function description

#### General

This function block is used to convert an analog input signal *rIn* into the corresponding output signals *xOutOpen* and *xOutClose* in the form of pulse-width modulation.\
The pulse length is always constant (**tImpulsClose** or **tImpulsOpen**) while the pause between two pulses varies in length.\
For a current input signal *rIn* of 0.0 no output pulses are generated.\
If the current input signal is in the positive range (0.0 - +100.0) then only at the output *xOutOpen* pulses are generated.\
If the current input signal is in the negative range (0.0 - -100.0) then only at the output *xOutClose* pulses are generated.\
The enable/disable of the function block is done via the digital input *xEn*.\
Any rising edge on the digital input *xRefPos* (i.e. the actuator is currently in its reference position) triggers a redefinition of the analog output signal *rPos* to the target value / parameter **iRefPosition**.

#### Enable input *xEn*

If the enable input is not active (*xEn* = FALSE) both outputs are *xOutOpen* and *xOutClose* reset. Additionally the integral is set to 0 and the digital signal for capturing the reference position *xRefPos* is non-functional.\
With each falling edge on the enable input the output signal *xOutClose* is activated continuously for a duration of **rDuration** + 10s and at the same time the output signal *xOutOpen* is deactivated (= forced movement of the actuator to the rest position).

#### Reference position

The digital input *xRefPos* allows a readjustment of the position display *rPos* to a predefined value **iRefPosition** (0% = rest position - 100% = maximum position).\
Any rising edge on the digital input triggers a readjustment.

#### Signal generation

The analog input signal *rIn* (control deviation of a control process, signal symmetric around zero) is integrated over the interval **tIntegration** over time.\
That means after each integration interval **tIntegration** the product of *rIn* and the **tIntegration** is formed and added to the current content of the integration memory. This therefore results in a step function.

> **Example**
>
> *rIn* = 100K, **tIntegration** = 100ms, old value of the integration memory = 500Ks, new value (after 100ms) = 510Ks.\
> If the integration value exceeds the threshold **rMaxLimit**, then at the output signal *xOutOpen* a pulse of length **tImpulsOpen** is generated.

If the integration value falls below the threshold **rMinLimit**, then at the output signal *xOutClose* a pulse of length **tImpulsClose** is generated.\
After each pulse generation the integration value is reset to 0.\
The threshold **rMaxLimit** may only take values > 0.0, the threshold **rMinLimit** may only take values < 0.0.

> **Examples with different parameters**
>
> **tIntegration** = 100ms, **rMaxLimit** = 100.0, **rMinLimit** = -100.0: With an input signal *rIn* of +5.0 at the output *xOutOpen* a pulse with length 1s is generated every 4s.\
> **tIntegration** = 100ms, **rMaxLimit** = 100.0, **rMinLimit** = -100.0: With an input signal *rIn* of -5.0 at the output *xOutClose* a pulse with length 1s is generated every 4s.\
> \
> **tIntegration** = 200ms, **rMaxLimit** = 100.0, **rMinLimit** = -100.0: With an input signal *rIn* of +5.0 at the output *xOutOpen* a pulse with length 1s is generated every 2s.\
> **tIntegration** = 200ms, **rMaxLimit** = 100.0, **rMinLimit** = -100.0: With an input signal *rIn* of -5.0 at the output *xOutClose* a pulse with length 1s is generated every 2s.\
> \
> **tIntegration** = 100ms, **rMaxLimit** = 200.0, **rMinLimit** = -100.0: With an input signal *rIn* of +5.0 at the output *xOutOpen* a pulse with length 1s is generated every 8s.\
> **tIntegration** = 100ms, **rMaxLimit** = 200.0, **rMinLimit** = -100.0: With an input signal *rIn* of -5.0 at the output *xOutClose* a pulse with length 1s is generated every 8s.

#### Position display *rPos*

It is used to display the current position of the 3-point actuator in the range 0 - 100% and is calculated internally (0% = rest position, 100% = maximum position).\
To avoid deviations between the calculated and the actual position, regular triggering of the recalibration of the position display is recommended.\
The position display is independent of the signal generation, i.e. if the position display reaches an end position (0% or 100%), signals are nevertheless still sent to the outputs *xOutOpen* or *xOutClose* is generated.

### CODESYS

InOut:

| Scope       | Name           | Type   | Initial      |
| ----------- | -------------- | ------ | ------------ |
| Input       | `xEn`          | `BOOL` |              |
| Input       | `rIn`          | `REAL` |              |
| Input       | `xRefPos`      | `BOOL` |              |
| Input Const | `iRefPosition` | `INT`  | 0            |
| Input Const | `tImpulsClose` | `TIME` | TIME#1s0ms   |
| Input Const | `tImpulsOpen`  | `TIME` | TIME#1s0ms   |
| Input Const | `rMinLimit`    | `REAL` | -100.0       |
| Input Const | `rMaxLimit`    | `REAL` | 100.0        |
| Input Const | `tDuration`    | `TIME` | TIME#2m0s0ms |
| Input Const | `tIntegration` | `TIME` | TIME#100ms   |
| Output      | `xOutOpen`     | `BOOL` |              |
| Output      | `xOutClose`    | `BOOL` |              |
| Output      | `rPos`         | `REAL` |              |


---

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

```
GET https://support.powerio.com/hub/codesys-hvac/en/hvac-library/functionblocks/control/out3p.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.
