# ControlP

## `ControlP` (FB)

FUNCTION\_BLOCK ControlP

### Kurzbeschreibung

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

### Darstellung

<figure><img src="/files/nfGX00aQuVGikRLK1j3Q" 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                  |
| *xLimitActive* | BOOL     |              |             | Status - Grenzwertüberschreitung |

#### Sollwerte / Parameter

| Name           | Datentyp     | Wertebereich | Initialwert           | Funktion                                        |
| -------------- | ------------ | ------------ | --------------------- | ----------------------------------------------- |
| **rMax**       | REAL         |              | 100.0                 | Oberer absoluter Grenzwert des Ausgangssignals  |
| **rMin**       | REAL         |              | -100.0                | Unterer absoluter Grenzwert des Ausgangssignals |
| **rKp**        | REAL         | 0.0 …        | 2.0                   | Verstärkungsfaktor                              |
| **rOffset**    | REAL         |              | 0.0                   | Versatz                                         |
| **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 wirkenden Pegler (P-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:\
\
\
\&#xNAN;*rY* = **rKp** \* ((Istwert + Offset) - (Sollwert))\
\
\
Je nach Wirksinn des Reglers **eAction** werden die Ist- und Sollwerte wie folgt festgelegt:

| **eAction**             | Istwert | Sollwert | Formel                                            | Funktion              |
| ----------------------- | ------- | -------- | ------------------------------------------------- | --------------------- |
| eControlMode.Invertiert | *rW*    | *rX*     | *rY* = **rKp** \* ((*rW* + **rOffset**) - (*rX*)) | Wirksinn - Invertiert |
| eControlMode.Direct     | *rX*    | *rW*     | *rY* = **rKp** \* ((*rX* + **rOffset**) - (*rW*)) | Wirksinn - Direkt     |

#### 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.\
\
Bei aktivem Freigabeeingang (*xEn* = TRUE) wird das Ausgangssignal gemäß oben stehender Formel berechnet und zum Ausgang *rY* übertragen (Voraussetzung: **eManModeN** = eManNum.Auto) und durch die absoluten Grenzwerte begrenzt.

#### Regelabweichung *rDiff*

Die Regelabweichung wird gemäß nachfolgender Formel berechnet und zum Ausgang *rDiff* übertragen.\
\
\&#xNAN;*rDiff* = Istwert - Sollwert

#### 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 vorliegt.\
Der Status der Grenzwertüberschreitung wird nicht aktiviert (*xLimitActive* = FALSE), falls keine Grenzwertüberschreitung vorliegt.\
\
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 Sollwert / Parameter **rManValue** wird bei jedem Übergang in den Automatikbetrieb mit dem aktuellen Wert des Ausgangssignal *rY* überschrieben.

| **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`       | -100                  |
| Input Const | `rKp`         | `REAL`       | 2                     |
| Input Const | `rOffset`     | `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      | `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/controlp.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.
