# ValveAnalog

## `ValveAnalog` (FB)

FUNCTION\_BLOCK ValveAnalog

### Kurzbeschreibung

> Steuerung eines stetigen Ventilantriebs mit Blockierschutzfunktion und stetiger Positionsrückmeldung\
> \
> Typische Anwendung: Regelventil in einem Heizkreis

### Darstellung

<figure><img src="/files/8UrTl6rXoyc7lTVLTSpP" alt=""><figcaption></figcaption></figure>

### Schnittstellen

#### Eingänge

| Name       | Datentyp          | Wertebereich                                  | Initialwert            | Funktion                                         |
| ---------- | ----------------- | --------------------------------------------- | ---------------------- | ------------------------------------------------ |
| *rY*       | REAL              |                                               |                        | Stellsignal aus Regelung                         |
| *xForce*   | BOOL              |                                               | FALSE                  | Zwangsübersteuerung nach Handübersteuerung       |
| *xAlarmIn* | BOOL              |                                               | FALSE                  | Störmeldung des Antriebs                         |
| *rU*       | REAL              |                                               | 0.0                    | Positionsrückmeldung vom Regelventil             |
| *eAO*      | HVACTYPES.eManNum | HVACTYPES.eManNum.Auto, HVACTYPES.eManNum.Man | HVACTYPES.eManNum.Auto | Rückmeldung - Automatikbetrieb                   |
| *rPoti*    | REAL              |                                               |                        | Rückmeldung - Stellsignal aus Hardware-Handebene |

#### Ausgänge

| Name          | Datentyp        | Wertebereich | Initialwert | Funktion                                           |
| ------------- | --------------- | ------------ | ----------- | -------------------------------------------------- |
| *rHA*         | REAL            |              |             | Stellsignal nach Handübersteuerung                 |
| *rAA*         | REAL            |              |             | Stellsignal vor Handübersteuerung                  |
| *xAlarmPos*   | BOOL            |              |             | Störmeldung aus Positionüberwachung                |
| *dtAbsLastOn* | DATE\_AND\_TIME |              |             | Datum / Uhrzeit des letzten Blockierschutzbetriebs |
| *xAlarm*      | BOOL            |              |             | Sammelstörmeldung                                  |
| *xAuto*       | BOOL            |              |             | Sammelmeldung Automatikbetrieb                     |

#### Sollwerte / Parameter

| Name               | Datentyp | Wertebereich                                | Initialwert  | Funktion                                                     |
| ------------------ | -------- | ------------------------------------------- | ------------ | ------------------------------------------------------------ |
| **udiControlTime** | UDINT    | 0 … 600s                                    | 180s         | Zeitdauer der Positionsüberwachung                           |
| **rControlDiff**   | REAL     |                                             | 7.0%         | Überwachung der Ventilposition: Maximale Positionsabweichung |
| **xControl**       | BOOL     |                                             | TRUE         | Freigabe der Positionsüberwachung                            |
| **xForceOption**   | BOOL     |                                             | TRUE         | Zustand vom Ausgang *rHA* bei Zwangsübersteuerung            |
| **rAbsMaxLimit**   | REAL     |                                             | 100.0        | Oberer Grenzwert für das Stellsignal vor Handübersteuerung   |
| **rAbsMinLimit**   | REAL     |                                             | 0.0          | Unterer Grenzwert für das Stellsignal vor Handübersteuerung  |
| **udiAbsTime**     | UDINT    | 10s … 600s                                  | 180s         | Zeitdauer des Blockierschutzbetriebs in Sekunden             |
| **tAbsStartTime**  | TOD      | 00:00:00 - 23:59:59 Uhr                     | 08:00:00 Uhr | Zeitpunkt des Blockierschutzbetriebs                         |
| **eAbsDay**        | eDoW     | eDow\.Inactive, eDoW\.Monday … eDoW\.Sunday | eDoW\.Monday | Wochentag des Blockierschutzbetriebs                         |
| **rManValue**      | REAL     |                                             | 0.0          | Handübersteuerung: Handwert                                  |
| **eManModeN**      | eMANNUM  | eMANNUM.Auto, eMANNUM.Man                   |              | Handübersteuerung: Betriebsart                               |

### Funktionsbeschreibung

#### Stellsignal vor Handübersteuerung *rAA*

Das Stellsignal vor Handübersteuerung *rAA* wird vom Blockierschutzmodul beeinflusst.\
Das Blockierschutzmodul wird durch die Sollwerte / Parameter *udiAbsTime*, **tAbsStartTime** und **eAbsDay** parametriert, als Eingangssignal wird die Positionsrückmeldung vom Regelventil *rU* verwandt.\
Die minimale Änderung der Ventilposition zur Sperrung der Blockierschutzfunktion ist auf 10.0% fixiert.\
Das Stellsignal vor Handübersteuerung *rAA* ist durch die beiden absoluten Grenzwerte **rAbsMinLimit** und **rAbsmaxLimit** begrenzt.\
Die Positionsrückmeldung vom Regelventil *rU* darf durch das Stellsignal aus Regelung *rY* ersetzt werden, falls keine Positionsrückmeldung vorhanden ist.

#### Stellsignal nach Handübersteuerung *rHA*

Das Stellsignal nach Handübersteuerung *rHA* wird durch den Ausgang des Blockierschutzmoduls, das Stellsignal aus Regelung *rY*, die Handübersteuerung und die Zwangssteuerung beeinflusst.

| **eManModeN** | Blockierschutzprozess | *xForce* | **xForceOption** | *rHA*                               | Hinweise                                            |
| ------------- | --------------------- | -------- | ---------------- | ----------------------------------- | --------------------------------------------------- |
| eMANNUM.Auto  | FALSE                 | FALSE    | X                | *rY*                                | Automatikbetrieb mit passivem Blockierschutzprozess |
| eMANNUM.Auto  | TRUE                  | FALSE    | X                | Ausgang des Blockierschutzprozesses | Automatikbetrieb mit aktivem Blockierschutzprozess  |
| eMANNUM.Man   | X                     | FALSE    | X                | **rManValue**                       | Handübersteuerung                                   |
| X             | X                     | TRUE     | FALSE            | 0.0                                 | Zwangsübersteuerung 0.0%                            |
| X             | X                     | TRUE     | TRUE             | 100.0                               | Zwangsübersteuerung 100.0%                          |

Legende: X = beliebig

#### Positionsüberwachung

Die Positionsüberwachung kann freigegeben (**xControl** = TRUE) oder gesperrt werden (**xControl** = FALSE).\
Bei freigegebener Positionsüberwachung wird permanent der Betrag der Differenz zwischen dem Stellsignal nach Handübersteuerung *rHA* und der Positionsrückmeldung vom Regelventil *rU* ermittelt und mit dem Grenzwert **rControlDiff** verglichen.\
Überschreitet diese Differenz permanent während einer Meldeverzögerung **udiControlTime** den Grenzwert, so wird ein Alarmsignal erzeugt, falls gleichzeitig die Rückmeldung - Automatikbetrieb *eAO* den Automatikbetrieb (*eAO* = HVACTYPES.eManNum.Auto) signalisiert.\
Dieses Alarmsignal wird zum Ausgang *xAlarmPos* übertragen (*xAlarmPos* = TRUE).\
Das Alarmsignal wird wieder deaktiviert (*xAlarmPos* = FALSE), sobald die Differenz den Grenzwert erstmalig wieder unterschreitet.

#### Positionsrückmeldung vom Regelventil *rU*

Die Positionsrückmeldung vom Regelventil *rU* darf durch das Stellsignal aus Regelung *rY* ersetzt werden, falls keine Positionsrückmeldung vorhanden ist.

#### Blockierschutzmodul

Das Blockierschutzmodul wird durch das numerische Blockierschutzmodul mit einstellbarer Zeitdauer (FB: AbsA) realisiert.\
Die Zeitdauer *udiAbsTime*, der Zeitpunkt **todAbsStartTime** und der Wochentag **eAbsDay** sind einstellbar.\
Die Mindestlaufzeit zur Sperrung des Blockierschutzbetriebs beträgt 30s.\
Der Zeitstempel (Datum / Uhrzeit) des letzten Blockierschutzbetriebs *dtAbsLastOn* steht zur Verfügung.

#### Sammelstörung *xAlarm*

Die Sammelstörung *xAlarm* wird aktiviert (= TRUE), falls *xAlarmPos* oder der Eingang *xAlarmIn* aktiv ist.\
In allen übrigen Fällen ist die Sammelstörung *xAlarm* nicht aktiviert (= FALSE).

#### Sammelmeldung Automatikbetrieb *xAuto*

Die Sammelmeldung Automatikbetrieb *xAuto* wird aktiviert (= TRUE), falls der Eingang *eAO* den Wert HVACTYPES.eManNum.Auto und der Sollwert / Parameter **eManModeN** den Wert eMANNUM.Auto enthält.\
In alle übrigen Fällen ist die Sammelmeldung Automatikbetrieb *xAuto* nicht aktiviert (= FALSE).

#### Zwangsübersteuerung *xForce*

Die Zwangsübersteuerung wirkt direkt auf den Ausgang *rHA*. Mit dem Parameter **xForceOption** wird festgelegt, welchen Zustand der Ausgang *rHA* bei TRUE am Eingang *xForce* einnimmt.\
\
Bei **xForceOption** = FALSE\
Befindet sich der Eingang *xForce* auf TRUE, dann wird der Ausgang *rHA* auf 0 gesetzt.\
\
Bei **xForceOption** = TRUE\
Befindet sich der Eingang *xForce* auf TRUE, dann wird der Ausgang *rHA* auf 100 gesetzt.

### CODESYS

InOut:

| Scope       | Name              | Type    | Initial           |
| ----------- | ----------------- | ------- | ----------------- |
| Input       | `rY`              | `REAL`  |                   |
| Input       | `xForce`          | `BOOL`  | FALSE             |
| Input       | `xAlarmIn`        | `BOOL`  | FALSE             |
| Input       | `rU`              | `REAL`  | 0                 |
| Input       | `eAO`             | eManNum | eManNum.Auto      |
| Input       | `rPoti`           | `REAL`  |                   |
| Output      | `rHA`             | `REAL`  |                   |
| Output      | `rAA`             | `REAL`  |                   |
| Output      | `xAlarmPos`       | `BOOL`  |                   |
| Output      | `dtAbsLastOn`     | `DT`    |                   |
| Output      | `xAlarm`          | `BOOL`  |                   |
| Output      | `xAuto`           | `BOOL`  |                   |
| Input Const | `udiControlTime`  | `UDINT` | 200               |
| Input Const | `rControlDiff`    | `REAL`  | 7                 |
| Input Const | `xControl`        | `BOOL`  | TRUE              |
| Input Const | `xForceOption`    | `BOOL`  | TRUE              |
| Input Const | `rAbsMaxLimit`    | `REAL`  | 100               |
| Input Const | `rAbsMinLimit`    | `REAL`  | 0                 |
| Input Const | `udiAbsTime`      | `UDINT` | 180               |
| Input Const | `todAbsStartTime` | `TOD`   | TIME\_OF\_DAY#8:0 |
| Input Const | `eAbsDay`         | eDoW    | eDow\.Monday      |
| Input Const | `rManValue`       | `REAL`  | 0                 |
| Input Const | `eManModeN`       | eMANNUM | eMANNUM.Auto      |


---

# 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/components/valveanalog.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.
