# CrossVentilation\_Sulzer

## `CrossVentilation_Sulzer` (FB)

FUNCTION\_BLOCK CrossVentilation\_Sulzer

### Kurzbeschreibung

Steuerung der Querlüftung mittels Fensterelementen durch vier getrennt einstellbare Kennlinien\
\
Kennlinie 1: Öffnungszeit in Abhängigkeit von der Aussentemperatur\
Kennlinie 2: Öffnungsgrad in Abhängigkeit von der Aussentemperatur\
Kennlinie 3: Öffnungsgrad in Abhängigkeit von der Windgeschwindigkeit\
Kennlinie 4: Wartezeit in Abhängigkeit von der Aussentemperatur\
\
Typische Anwendung: Steuerung der Querlüftung durch den Raum-CO2-Istwert\\

### Darstellung

<figure><img src="https://879424349-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR4vCFzt6ixgsqlR3pdR%2Fuploads%2Fgit-blob-f306d7db224a13038fe3de38107e5f5be5082f88%2FCrossVentilation_Sulzer_FB.png?alt=media" alt=""><figcaption></figcaption></figure>

### Schnittstellen

#### Eingänge

| Name                     | Datentyp | Wertebereich | Initialwert | Funktion                                                                                                                                                                                    |
| ------------------------ | -------- | ------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *xStartCrossVentilation* | BOOL     |              | FALSE       | Beginn der Querlüftung ( bei jeder ansteigenden Flanke )                                                                                                                                    |
| *xAbortCrossVentilation* | BOOL     |              | FALSE       | Abbruch der Querlüftung ( bei jeder ansteigenden Flanke )                                                                                                                                   |
| *xEn\_WT*                | BOOL     |              | FALSE       | Freigabe / Sperrung der Wartezeit ( TRUE = Freigabe )                                                                                                                                       |
| *xEnComplete\_OT*        | BOOL     |              | FALSE       | Freigabe / Sperrung des Eingangs ‘xComplete\_OT’ ( FALSE = Sperrung ) ( \_OT = Opening Time )                                                                                               |
| *xComplete\_OT*          | BOOL     |              | FALSE       | Freigabe / Sperrung des manuellen Abbruchs der Öffnungsdauer ( bei jeder ansteigenden Flanke, falls xEnComplete\_OT = TRUE ) ( z.B. Abbruch über CO2-Gehalt nach Ablauf der Öffnungsdauer ) |
| *rOutsideTemp*           | REAL     |              | 0.0         | Aussentemperatur                                                                                                                                                                            |
| *rOutsideWindSpeed*      | REAL     |              | 0.0         | Windgeschwindigkeit                                                                                                                                                                         |
| *xResError*              | BOOL     |              | FALSE       | Rücksetzung der Ausgänge ‘xError’ und ‘sErrorCode’ ( bei jeder ansteigenden Flanke )                                                                                                        |
| *xValidData\_OT*         | BOOL     |              | FALSE       | Gültigkeit der Daten der Kurve ‘Öffnungsdauer - Aussentemperatur’ ( \_OT = Opening Time ) ( TRUE = Gültig )                                                                                 |
| *xValidData\_WDOO\_OT*   | BOOL     |              | FALSE       | Gültigkeit der Daten der Kurve ‘Fensteröffnungsgrad - Aussentemperatur’ ( \_WDOO = Windows Degree Of Opening, \_OT = OutsideTemp ) ( TRUE = Gültig )                                        |
| *xValidData\_WDOO\_WS*   | BOOL     |              | FALSE       | Gültigkeit der Daten der Kurve ‘Fensteröffnungsgrad - Windgeschwindigkeit’ ( \_WDOO = Windows Degree Of Opening, \_WS = Wind Speed ) ( TRUE = Gültig )                                      |
| *xValidData\_WT*         | BOOL     |              | FALSE       | Gültigkeit der Daten der Kurve ‘Wartezeit - Aussentemperatur’ ( \_WT = Waiting Time ) ( TRUE = Gültig )                                                                                     |

#### Ein- und Ausgänge

| Name               | Datentyp            | Wertebereich | Initialwert | Funktion                                                                                                                                       |
| ------------------ | ------------------- | ------------ | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| *arData\_OT*       | stCurve\_Real\_Time |              |             | Array mit den Stützstellen für die Kurve ‘Öffnungsdauer - Aussentemperatur’ ( \_OT = Opening Time )                                            |
| *arData\_WDOO\_OT* | stCurve\_Real\_Real |              |             | Array mit den Stützstellen für die Kurve ‘Fensteröffnungsgrad - Aussentemperatur’ ( \_WDOO = Windows Degree Of Opening, \_OT = OutsideTemp )   |
| *arData\_WDOO\_WS* | stCurve\_Real\_Real |              |             | Array mit den Stützstellen für die Kurve ‘Fensteröffnungsgrad - Windgeschwindigkeit’ ( \_WDOO = Windows Degree Of Opening, \_WS = Wind Speed ) |
| *arData\_WT*       | stCurve\_Real\_Time |              |             | Array mit den Stützstellen für die Kurve ‘Wartezeit - Aussentemperatur’ ( \_WT = Waiting Time )                                                |

#### Ausgänge

| Name                     | Datentyp | Wertebereich | Initialwert | Funktion                                                                                                                                                 |
| ------------------------ | -------- | ------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| *tTimeCurve\_OT*         | TIME     |              | T#0s        | Aktuelle Öffnungszeitdauer aus der Kurve ( \_OT = Opening Time )                                                                                         |
| *tRemainingTime\_OT*     | TIME     |              | T#0s        | Restzeit der aktiven Öffnungszeitdauer ( \_OT = Opening Time )                                                                                           |
| *xActive\_OT*            | BOOL     |              | FALSE       | Rückmeldung - Aktive Öffnungszeitdauer ( TRUE = Aktiv ) ( \_OT = Opening Time )                                                                          |
| *rDegreeCurve\_WDOO\_OT* | REAL     |              | 0.0         | Aktueller Fensteröffnungsgrad \[ % ] in Abhängigkeit von der Aussentemperatur aus der Kurve ( \_WDOO = Windows Degree Of Opening, \_OT = OutsideTemp )   |
| *rDegreeCurve\_WDOO\_WS* | REAL     |              | 0.0         | Aktueller Fensteröffnungsgrad \[ % ] in Abhängigkeit von der Windgeschwindigkeit aus der Kurve ( \_WDOO = Windows Degree Of Opening, \_WS = Wind Speed ) |
| *rDegree\_WDOO*          | REAL     |              | 0.0         | Aktueller Fensteröffnungsgrad \[ % ] ( \_WDOO = Windows Degree Of Opening )                                                                              |
| *xActive\_WDOO*          | BOOL     |              | FALSE       | Rückmeldung - Aktive Fensteröffnung ( TRUE = Aktiv ) ( \_WDOO = Windows Degree Of Opening )                                                              |
| *tTimeCurve\_WT*         | TIME     |              | T#0s        | Aktuelle Wartezeit aus der Kurve ( \_WT = Waiting Time )                                                                                                 |
| *tRemainingTime\_WT*     | TIME     |              | T#0s        | Restzeit der aktiven Wartezeit ( \_WT = Waiting Time )                                                                                                   |
| *xActive\_WT*            | BOOL     |              | FALSE       | Rückmeldung - Aktive Wartezeit ( TRUE = Aktiv ) ( \_WT = Waiting Time )                                                                                  |
| *xError*                 | BOOL     |              | FALSE       | Fehlerzustand ( FALSE = kein Fehler, TRUE = Fehler )                                                                                                     |
| *sErrorCode*             | STRING   |              | ‘’          | String mir den Nummern der aktiven Fehler                                                                                                                |

#### Sollwerte / Parameter

| Name                  | Datentyp | Wertebereich | Initialwert | Funktion                                                                                         |
| --------------------- | -------- | ------------ | ----------- | ------------------------------------------------------------------------------------------------ |
| **rOutsideTempLimit** | REAL     |              | -15         | Aussentemperatur-Grenzwert, bei dessen Unterschreitung keine Fensteröffnung mehr gestartet wird. |

### Funktionsbeschreibung

#### Kennlinien

Die insgesamt vier frei einstellbaren Kennlinien ( mit jeweils 10 Stützpunkten, FB ‘Curve\_10XY\_Reaö\_Real’ oder FB ‘Curve\_10XY\_Real\_Time’ )\
werden mit den zugehörigen Dateneingängen ( arData\_XX ) verbunden, ebenso die Ausgänge der Kennlinien, die die Gültigkeit\
der Daten signalisieren ( xValidData\_XX ).\
Die Zuordnung der Kennlinien zu den Eingängen ist dabei fest vorgegeben:\\

1. Index \_OT ( Opening Time ): Kennlinie ‘Öffnungszeit in Abhängigkeit von der Aussentemperatur’
2. Index \_WDOO\_OT ( \_WDOO = Windows Degree Of Opening, \_OT = Outside Temp ): Kennlinie ‘Öffnungszeit in Abhängigkeit von der Aussentemperatur’
3. Index \_WDOO\_WS ( \_WDOO = Windows Degree Of Opening, \_WS = Wind Speed ): Kennlinie ‘Öffnungszeit in Abhängigkeit von der Aussen-Windgeschwindigkeit
4. Index \_WT ( Waiting Time ): Kennlinie ‘Wartezeit in Abhängigkeit von der Aussentemperatur’

Wird einer Kennlinie ein Eingangswert ( = X-Wert ) ausserhalb des durch die Stützstellen 1 und 10 vorgegebenen Bereichs übergeben, so wird der\
Y-Wert der nächstliegenden Stützstelle zurück gegeben ( Beispiel: Stützstelle 1 ( 1, 10 ), Stützstelle 10 ( 10, 100 ), X-Wert = -5 — Y-Wert = 10 )

#### Ablauf

Die Querlüftung wird mit einer ansteigenden Flanke am Eingang ‘xStartCrossVentilation’ gestartet. Die Öffnungszeitdauer wird aus der Kennlinie 1 berechnet.\
Aus den Kennlinien 2 und 3 wird der Öffnungsgrad bestimmt und ausgegeben. Nach dem Abschluss der Fensteröffnung wird die Wartezeit, errechnet aus Kennlinie 4,\
gestartet, die temporär eine erneute Querlüftung verhindert.

#### Start der Querlüftung

Die Querlüftung wird mit einer ansteigenden Flanke am Eingang ‘xStartCrossVentilation’ gestartet, falls alle nachfolgenden Bedingungen erfüllt sind:\\

1. Die Wartezeit ist nicht aktiv ( xActive\_WT = FALSE )
2. Die Öffnungszeit ist nicht aktiv ( xActive\_OT = FALSE )
3. Alle vier Kennlinien enthalten gültige Daten ( xValidData\_XX = TRUE )
4. Die Aussentemperatur überschreitet die absolute Minimal-Grenze ( rOutsideTemp > rOutsideTempLimit )

#### Öffnungsdauer

Nach dem erfolgreichen Start der Querlüftung wird die Öffnungszeitdauer einmalig aus der Kennlinie 1 in Abhängigkeit von der aktuellen\
Aussentemperatur errechnet. Während der Öffnungszeitdauer ist die Statusanzeige ‘xActive\_OT’ aktiv und am Ausgang ‘tRemainingTime\_OT’ wird die\
verbleibende Restzeitdauer ausgegeben.

#### Abbruch

Die aktive Querlüftung kann zu jedem beliebigen Zeitpunkt durch eine ansteigende Flanke am Eingang ‘xAbortCrossVentilation’ abgebrochen werden.

#### Öffnungsgrad

Nach dem erfolgreichen Start der Querlüftung wird der Öffnungsgrad einmalig aus den beiden Kennlinien 2 und 3 in Abhängkeit von der aktuellen Aussentemperatur\
bzw. der aktuellen Aussen-Windgeschwindigkeit bestimmt:\
\
Variable Z = (( Wert aus Kennlinie 2 ) X ( Wert aus Kennlinie 3 )) / 100\
Die Variable Z wird nun mit fest vorgegebenen Bereichsgrenzen verglichen und der dem jeweiligen Bereich zugeordnete Öffnungsgrad ausgegeben:\
\
0 <= Z < 15: Öffnungsgrad = 0%\
15 <= Z < 25: Öffnungsgrad = 25%\
25 <= Z < 50: Öffnungsgrad = 50%\
50 <= Z < 75: Öffnungsgrad = 75%\
Z > 75 : Öffnungsgrad = 100%\
\
Der so bestimmte Öffnungsgrad wird am Ausgang ‘rDegree\_WDOO’ ausgegeben, der Ausgang ‘xActive\_WDOO’ signalisiert dabei eine aktive Fensteröffnung ( = TRUE ).

#### Wartezeit

Direkt nach dem Abschluss der Öffnungsdauer beginnt eine eventuelle Wartezeit bis zur nächsten Aktivierung der Querlüftung. Hierzu muss die Wartezeitdauer\
generell freigegeben sein ( xEn\_WT = TRUE ). Am Anfang der Wartezeit wird die Zeitdauer einmalig aus der kennlinie 4 in Abhängigkeit von der Aussentemperatur bestimmt.\
Während der aktiven Wartezeit ist die Statusanzeige ‘xActive\_WT’ aktiv und am Ausgang ‘tRemainingTime\_WT’ wird die verbleibende Restzeitdauer ausgegeben.\
Die Wartezeit endet mit dem Ablauf der Zeitdauer oder mit der Sperrung der Wartezeit ( xEn\_WT = FALSE ).

#### Beendigung der Öffnungszeit

Die Öffnungszeit endet unmittlbar mit dem Ablauf der Zeitdauer ( xEnComplete\_OT = FALSE ).\
Die Öffnungszeit endet nach dem Ablauf der Zeitdauer ( xEnComplete\_OT = TRUE ), falls am Eingang ‘xComplete\_OT’ eine ansteigende Flanke erkannt wurde.\
Die dient der Verlängerung der Öffnungsdauer bis zum Erreichen eines akzeptablen CO2-Gehalts.

#### Sperrung der Querlüftung über die Aussentemperatur

Die Querlüftung wird nur dann gestartet, wenn die aktuelle Aussentemperatur zum Startzeitpunkt den einstellbaren Grenzwert ‘rOutsideTempLimit’ überschreitet.

#### Eingang ‘xResError’

Jede ansteigende Flanke an diesem Eingang setzt die Ausgänge ‘xError’ bzw. ‘sErrorCode’ auf den jeweiligen nicht fehlerhaften Zustand zurück.

#### Ausgang ‘xError’

Der Ausgang ist aktiv ( = TRUE ), falls mindestens ein Fehler erkannt wurde ( ‘sErrorCode <> ‘’ )

#### Ausgang ‘sErrorCode’

Dieser Ausgang signalisiert den aktuellen Fehlerstatus. Ein Leerstring ‘’ zeigt an, das kein Fehler vorliet.\
Aktuell sind folgende Fehlerzustände festgelegt:\
‘1’: xValidData\_OT = FALSE ( Kennlinie 1 ohne gültige Daten )\
‘2’: xValidData\_WDOO\_OT = FALSE ( Kennlinie 2 ohne gültige Daten )\
‘3’: xValidData\_WDOO\_WS = FALSE ( Kennlinie 3 ohne gültige Daten )\
‘4’: xValidData\_WT = FALSE ( Kennlinie 4 ohne gültige Daten )

#### Typische Anwendung

Der Ausgang ‘xActive\_WDOO’ ( = TRUE ) signalisiert die Anforderung zur Öffnung der Fenster durch die Querlüftung, der Ausgang ‘rDegree\_WDOO’\
den Fensteröffnungsggrad im Bereich 0.0 - 100.0% ( 0.0% = geschlossen ).\
Dieser Funktionsbaustein kann wie folgt angewendet werden:

<figure><img src="https://879424349-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FQR4vCFzt6ixgsqlR3pdR%2Fuploads%2Fgit-blob-c7ce29a68d6fc77d89136ad9bdf60895f813c76c%2FCrossVentilation_Sulzer_Application_Example.png?alt=media" alt=""><figcaption></figcaption></figure>

### CODESYS

InOut:

| Scope       | Name                     | Type                           | Initial  |
| ----------- | ------------------------ | ------------------------------ | -------- |
| Input       | `xStartCrossVentilation` | `BOOL`                         | FALSE    |
| Input       | `xAbortCrossVentilation` | `BOOL`                         | FALSE    |
| Input       | `xEn_WT`                 | `BOOL`                         | TRUE     |
| Input       | `xEnComplete_OT`         | `BOOL`                         | FALSE    |
| Input       | `xComplete_OT`           | `BOOL`                         | FALSE    |
| Input       | `rOutsideTemp`           | `REAL`                         | 0.0      |
| Input       | `rOutsideWindSpeed`      | `REAL`                         | 0.0      |
| Input       | `xResError`              | `BOOL`                         | FALSE    |
| Input       | `xValidData_OT`          | `BOOL`                         | FALSE    |
| Input       | `xValidData_WDOO_OT`     | `BOOL`                         | FALSE    |
| Input       | `xValidData_WDOO_WS`     | `BOOL`                         | FALSE    |
| Input       | `xValidData_WT`          | `BOOL`                         | FALSE    |
| Input       | `arData_OT`              | POINTER TO stCurve\_Real\_Time |          |
| Input       | `arData_WDOO_OT`         | POINTER TO stCurve\_Real\_Real |          |
| Input       | `arData_WDOO_WS`         | POINTER TO stCurve\_Real\_Real |          |
| Input       | `arData_WT`              | POINTER TO stCurve\_Real\_Time |          |
| Output      | `tTimeCurve_OT`          | `TIME`                         | TIME#0ms |
| Output      | `tRemainingTime_OT`      | `TIME`                         | TIME#0ms |
| Output      | `xActive_OT`             | `BOOL`                         | FALSE    |
| Output      | `rDegreeCurve_WDOO_OT`   | `REAL`                         | 0.0      |
| Output      | `rDegreeCurve_WDOO_WS`   | `REAL`                         | 0.0      |
| Output      | `rDegree_WDOO`           | `REAL`                         | 0.0      |
| Output      | `xActive_WDOO`           | `BOOL`                         | FALSE    |
| Output      | `tTimeCurve_WT`          | `TIME`                         | TIME#0ms |
| Output      | `tRemainingTime_WT`      | `TIME`                         | TIME#0ms |
| Output      | `xActive_WT`             | `BOOL`                         | FALSE    |
| Output      | `xError`                 | `BOOL`                         | FALSE    |
| Output      | `sErrorCode`             | `STRING`                       | ‘’       |
| Input Const | `rOutsideTempLimit`      | `REAL`                         | -15.0    |

Methods:

> mCalculateCurveSectionValue\_Real\_Real

> mCalculateCurveSectionValue\_Real\_Time

> mCalculateCurveValue\_Real\_Real

> mCalculateCurveValue\_Real\_Time

> mResData

Structure:

* mCalculateCurveSectionValue\_Real\_Real (Method)
* mCalculateCurveSectionValue\_Real\_Time (Method)
* mCalculateCurveValue\_Real\_Real (Method)
* mCalculateCurveValue\_Real\_Time (Method)
* mResData (Method)
