# ControlPI

## `ControlPI` (FB)

FUNCTION\_BLOCK ControlPI

### Kurzbeschreibung

> Proportional-Integral wirkender Regler (PI-Regler)\
> Der Wirksinn (invertiert / direkt) ist ebenfalls einstellbar.\
> Typische Anwendung: Regelstrecken mit Stellgliedern, die keinen speichernden Charakter haben.

### Darstellung

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

### Schnittstellen

#### Eingänge

| Name  | Datentyp | Wertebereich | Initialwert | Funktion             |
| ----- | -------- | ------------ | ----------- | -------------------- |
| *rX*  | REAL     |              |             | Analoger Istwert     |
| *rW*  | REAL     |              |             | Analoger Sollwert    |
| *xEn* | BOOL     |              |             | Freigabe des Reglers |

#### Ausgänge

| Name           | Datentyp | Wertebereich | Initialwert | Funktion                             |
| -------------- | -------- | ------------ | ----------- | ------------------------------------ |
| *rY*           | REAL     |              | 0.0         | Ausgangssignal des Reglers           |
| *rDiff*        | REAL     |              |             | Regelabweichung                      |
| *rPartP*       | REAL     |              |             | Proportionalanteil am Ausgangssignal |
| *rPartI*       | REAL     |              |             | Integralanteil am Ausgangssignal     |
| *xLimitActive* | BOOL     |              |             | Status - Grenzwertüberschreitung     |

#### Sollwerte / Parameter

| Name           | Datentyp     | Wertebereich | Initialwert           | Funktion                                        |
| -------------- | ------------ | ------------ | --------------------- | ----------------------------------------------- |
| **rMax**       | REAL         |              | 100.0                 | Oberer absoluter Grenzwert des Ausgangssignals  |
| **rMin**       | REAL         |              | 0.0                   | Unterer absoluter Grenzwert des Ausgangssignals |
| **rTn**        | REAL         | 0.0 …        | 200.0                 | Nachstellzeit in Sekunden                       |
| **rKp**        | REAL         | 0.0 …        | 2.0                   | Verstärkungsfaktor                              |
| **rOffset**    | REAL         |              | 0.0                   | Versatz                                         |
| **rInitValue** | REAL         |              | 0.0                   | Initialisierungswert für das Ausgangssignal     |
| **rYDisabled** | REAL         |              | 0.0                   | Ausschaltwert                                   |
| **eAction**    | eControlMode |              | eControlMode.Inverted | Wirksinnn des Reglers (Invertiert, Direkt)      |
| **eManModeN**  | eManNum      |              | eManNum.Auto          | Betriebsart für das Ausgangssignal des Reglers  |
| **rManValue**  | REAL         |              |                       | Ausgangssignal im Handbetrieb                   |

### Funktionsbeschreibung

#### Allgemeines

Dieser Funktionsbaustein enthält einen proportional-integral wirkenden Pegler (PI-Regler).\
Das Ausgangssignal des Reglers *rY* wird bei freigegebenem Regler (*xEn* = TRUE) und in der Betriebsart Automatik des Reglers (**eManModeN** = eManNum.Auto) wie folgt berechnet:\
\
\
Ausgangssignal: *rY* = Proportional-Anteil + Integral-Anteil\
\
\
Proportionalanteil: Proportionalanteil = **rKp** \* Regelabweichung\
\
Regelabweichung: Regelabweichung = *rW* - (*rx* + **rOffset**) \[Wirksinn - Invertiert: **eAction** = eControlMode.Inverted]\
\
Regelabweichung = *rX* - ( *rW* + **rOffset** ) \[Wirksinn - Direkt: **eAction** = eControlMode.Direct]\
\
Integralanteil: Integralanteil = (Proportionalanteil \* (Abtastzeit / Nachstellzeit)) + Integralanteil (t-Abtastzeit)\
\
\
Legende: t-Abtastzeit … Zeitpunkt, der um die Abtastzeit vor dem aktuellen Zeitpunkt t lag\
Abtastzeit … Zeitdauer zwischen zwei Aufrufen des Funktionsblocks\
t … aktueller Zeitpunkt

> **Regeln / Eigenschaften - Nachstellzeit rTn**
>
> Sie darf nur Werte > 0 annehmen.\
> **rTn** >>> Abtastzeit: Der Integralanteil bleibt konstant\
> Regelabweichung = 0: Der Integralanteil bleibt konstant\
> Je nach Wirksinn des Reglers **eAction** werden die Ist- und Sollwerte wie folgt festgelegt:
>
> \
> \| \*\*eAction\*\* | Regelabweichung | Funktion | |-------------------------|-------------------------------|-----------------------| | eControlMode.Invertiert | \*rW\* - ( \*rx\* + \*\*rOffset\*\* ) | Wirksinn - Invertiert | | eControlMode.Direct | \*rX\* - ( \*rW\* + \*\*rOffset\*\* ) | Wirksinn - Direkt |

#### Integralanteil

Der Integralanteil ist sowohl nach oben als auch nach unten durch folgende absolute Grenzwerte begrenzt:\
Oberer Grenzwert = **rMax** - Proportionalanteil\
Unterer Grenzwert = **rMin** - Proportionalanteil

#### Freigabeeingang *xEn*

Bei nicht aktivem Freigabeeingang (*xEn* = FALSE) wird der Ausschaltwert **rYDisabled** zum Ausgang *rY* übertragen (Voraussetzung: **eManModeN** = eManNum.Auto) und durch die absoluten Grenzwerte begrenzt. Der Integralanteil wird auf 0.0 gesetzt.\
\
Bei aktivem Freigabeeingang (*xEn* = TRUE) wird as Ausgangssignal gemäß oben stehender Formel berechnet und zum Ausgang *rY* übertragen (Voraussetzung: **eManModeN** = eManNum.Auto) und durch die absoluten Grenzwerte begrenzt.\
\
Bei jeder ansteigenden Flanke am Freigabeeingang *xEn* wird der Regelprozess neu gestartet.

#### Neustart des Reglers

Bei jeder ansteigenden Flanke am Freigabeeingang *xEn* wird der Regelprozess neu gestartet. (Voraussetzungen: **eManModeN** = eManNum.Auto und *xEn* = TRUE)\
Der Integralanteil wird auf die Differenz zwischen **rInitValue** und dem Proportionalanteil festgelegt.

#### Regelabweichung *rDiff*

Die Regelabweichung entspricht dem Wert der Regelabweichung nach oben genannter Formel.

#### Proportionalanteil am Ausgangssignal *rPartP*

An diesem Ausgang steht immer der Proportionalanteil des Ausgangssignals zur Verfügung, siehe oben stehende Beschreibung.

#### Integralanteil am Ausgangssignal *rPartI*

An diesem Ausgang steht immer der Integralanteil des Ausgangssignals zur Verfügung, siehe oben stehende Beschreibung.

#### Absolute Grenzwerte **rMin** und **rMax**

Das Ausgangssignal des Reglers *rY* wird durch die absoluten Grenzwerte **rMin** nach unten und **rMax** nach oben begrenzt.\
Der absolute Grenzwert **rMin** wird auf den aktuellen Wert von **rMax** - 0.1 festgelegt, falls er >= dem aktuellen Wert von **rMax** ist.\
Davon ausgenommen ist lediglich der Handbetrieb für das Ausgangssignal des Reglers (**eManModeN** = eManNum.Man).

#### Status - Grenzwertüberschreitung *xLimitActive*

Der Status der Grenzwertüberschreitung wird aktiviert (*xLimitActive* = TRUE), falls eine Grenzwertüberschreitung nach oben oder unten vorliegt (*xEn* = TRUE).\
Der Status der Grenzwertüberschreitung wird nicht aktiviert (*xLimitActive* = FALSE), falls keine Grenzwertüberschreitung vorliegt oder das Freigabesignal deaktiviert ist (*xEn* = FALSE).\
\
Eine Grenzwertüberschreitung liegt vor, falls das Ausgangssignal des Reglers *rY* den oberen Grenzwert **rMax** erreicht / überschreitet oder den unteren Grenzwert **rMin** erreicht / unterschreitet.

#### Betriebsart für das Ausgangssignal des Reglers **eManModeN**

Der Parameter **eManModeN** erlaubt die Umschaltung des Ausgangssignals *rY* vom Automatik- in den Handbetrieb und umgekehrt.\
Im Handbetrieb übernimmt das Ausgangssignal *rY* das Ausgangssignal im Handbetrieb **rManValue**. Der Integralanteil wird auf die Differenz zwischen **rInitValue** und dem Proportionalanteil festgelegt.

| **eManModeN** | *rY*                                | Funktion                          |
| ------------- | ----------------------------------- | --------------------------------- |
| eManNum.Auto  | Signal gemäß Formel / Ausschaltwert | Automatikbetrieb - Ausgangssignal |
| eManNum.Man   | **rManValue**                       | Handbetrieb - Ausgangssignal      |

### Codesys

InOut:

| Scope       | Name          | Type         | Initial               |
| ----------- | ------------- | ------------ | --------------------- |
| Input       | `rX`          | `REAL`       |                       |
| Input       | `rW`          | `REAL`       |                       |
| Input       | `xEn`         | `BOOL`       |                       |
| 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 | `eAction`     | eControlMode | eControlMode.Inverted |
| Input Const | `eManModeN`   | eManNum      | eManNum.Auto          |
| Input Const | `rManValue`   | `REAL`       |                       |
| Output      | `rY`          | `REAL`       | 0                     |
| Output      | `rDiff`       | `REAL`       |                       |
| Output      | `rPartP`      | `REAL`       |                       |
| Output      | `rPartI`      | `REAL`       |                       |
| Output      | `xLimitAktiv` | `BOOL`       |                       |


---

# 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/control/controlpi.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.
