# ForecastOutsideTemp

## `ForecastOutsideTemp` (FB)

FUNCTION\_BLOCK ForecastOutsideTemp

### Kurzbeschreibung

> > Vorhersage der Außentemperatur (Vorhersagezeitraum und Funktion einstellbar)\
> > Voraussetzung: FB ‘WeatherForecast’ aus der Weather Forecast Library\
> > Randbedingung: Die Wettervorhersagedaten müssen mindestens alle 12 Stunden aktualisiert werden\
> > Index \_FC: Wetter-Vorhersagedaten extern
>
> Index \_Int: Wetter-Vorhersagedaten intern | Typische Anwendung: Berechnung der Außentemperatur einer Heiz-/Kühlkurve

### Darstellung

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

### Schnittstellen

#### Eingänge

<table><thead><tr><th width="160">Name</th><th>Datentyp</th><th>Wertebereich</th><th>Initialwert</th><th>Funktion</th></tr></thead><tbody><tr><td><em>xEn</em></td><td>BOOL</td><td></td><td>FALSE</td><td>Freigabe - Wettervorhersage (FALSE = Aus, TRUE = Ein)</td></tr><tr><td>*rOutsideTemp_In’</td><td>REAL</td><td></td><td>-10.0</td><td>Ersatzwert für die Aussentemperatur</td></tr><tr><td><em>xOutsideTempError_In</em></td><td>BOOL</td><td></td><td>FALSE</td><td>Fehlerzustand - Ersatzwert für die Aussentemperatur (FALSE = kein Fehler, TRUE = Fehler)</td></tr><tr><td><em>rFixedValue</em></td><td>REAL</td><td></td><td>0.0</td><td>Festwert für die Aussentemperatur</td></tr><tr><td><em>xError_FC</em></td><td>BOOL</td><td></td><td>FALSE</td><td>Fehlerzustand - Wetter-Vorhersagedaten (FALSE = kein Fehler, TRUE = Fehler)</td></tr><tr><td><em>xDone_FC</em></td><td>BOOL</td><td></td><td>FALSE</td><td>Signal nach dem erfolgreichen Abschluss der Übertragung der Wetter-Vorhersagedaten (ansteigende Flanke)</td></tr><tr><td><em>arData_FC</em></td><td>ARRAY[*] OF WEATHER_FORECAST.WeatherData</td><td></td><td></td><td>Array mit den Wetter-Vorhersagedaten (Ausgang ‘aForecast’ vom FB ‘WeatherForecast’)</td></tr></tbody></table>

#### Ausgänge

<table><thead><tr><th width="177">Name</th><th>Datentyp</th><th>Wertebereich</th><th>Initialwert</th><th>Funktion</th></tr></thead><tbody><tr><td>*eMode’</td><td>eForecastOutsideTempMode</td><td></td><td>eForecastOutsideTempMode.Invalid_Mode</td><td>Betriebsart (0 = keine, 1 = Vorhersage, 2 = Außentemperatur, 3 = Festwert)</td></tr><tr><td>*eFBPeriod_Int’</td><td>eForecastOutsideTempPeriod</td><td></td><td>eForecastOutsideTempPeriod.Invaild_Period</td><td>Rückmeldung - Vorhersagebereich - Interne Wetter-Vorhersagedaten (0 = keine, 1 = 3 Stunden, 2 = 6 Stunden, 3 = 9 Stunden, 4 = 12 Stunden, 5 = 24 Stunden, 6 = 36 Stunden, 7 = 48 Stunden, 8 = 72 Stunden, 9 = 96 Stunden)</td></tr><tr><td>*eFBFunction_Int’</td><td>eForecastOutsideTempFunction</td><td></td><td>eForecastOutsideTempFunction.Ivalid_Function</td><td>Rückmeldung - Funktion - Interne Wetter-Vorhersagedaten (0 = keine, 1 = Minimalwert 2 = Maximalwert, 3 = Durchschnittswert)</td></tr><tr><td>*rOutsideTemp_Out’</td><td>REAL</td><td></td><td></td><td>Berechnete Aussentemperatur</td></tr><tr><td><em>xError</em></td><td>BOOL</td><td></td><td>FALSE</td><td>Fehlerzustand (FALSE = kein Fehler, TRUE = Fehler)</td></tr></tbody></table>

#### Sollwerte / Parameter

<table><thead><tr><th width="175">Name</th><th>Datentyp</th><th>Wertebereich</th><th>Initialwert</th><th>Funktion</th></tr></thead><tbody><tr><td>**eFBPeriod_Int’*</td><td>eForecastOutsideTempPeriod</td><td></td><td>eForecastOutsideTempPeriod.Time_24_Hours</td><td>Vorhersagebereich - Interne Wetter-Vorhersagedaten (0 = keine, 1 = 3 Stunden, 2 = 6 Stunden, 3 = 9 Stunden, 4 = 12 Stunden, 5 = 24 Stunden, 6 = 36 Stunden, 7 = 48 Stunden, 8 = 72 Stunden, 9 = 96 Stunden)</td></tr><tr><td>**eFBFunction_Int’*</td><td>eForecastOutsideTempFunction</td><td></td><td>eForecastOutsideTempFunction.Average</td><td>Funktion - Interne Wetter-Vorhersagedaten (0 = keine, 1 = Minimalwert 2 = Maximalwert, 3 = Durchschnittswert)</td></tr></tbody></table>

### Funktionsbeschreibung

Der Ausgang rOutsideTemp\_Out wird in Abhängigkeit vom Zustand am Eingang ‘xEn’ berechnet / festgelegt:\
\
xEn = FALSE:\
\
Der Ausgang rOutsideTemp\_Out nimmt den Zustand des Ersatzwerts (rOutsideTemp\_Out = rOutsideTemp\_In) an, falls der Ersatzwert\
fehlerfrei (xOutsideTempError\_In = FALSE) ist.\
Der Ausgang rOutsideTemp\_Out nimmt den Zustand des Festwerts (rOutsideTemp\_Out = rFixedValue) an, falls der Ersatzwert fehlerhaft (xOutsideTempError\_In = TRUE) ist.

\
Der Ausgang eMode wird entsprechend aktualisiert.\
Der Ausgang xError nimmt den Zustand FALSE an.\
Der Ausgang eFBPeriod\_Int nimmt den Zustand eForecastOutsideTempFunction.Ivalid\_Function an.\
Der Ausgang eFBFunction\_Int nimmt den Zustand eForecastOutsideTempFunction.Ivalid\_Function an\
\
xEn = TRUE:\
\
Der Ausgang *rOutsideTemp\_Out* wird aufgrund der Parameter ‘ePeriod\_Int’ (ePriodInt <> eForecastOutsideTempPeriod.Invalid\_Period) und\
‘eFunction\_Int’ (eFunctionInt <> eForecastOutsideTempFunction.Invalid\_Function) festgelegt, falls der Eingang ‘xError\_FC’ den Wert FALSE und die interne Fehlervariable ebenfalls den Wert FALSE annehmen. Die Ausgänge eFBPeriod\_Int bzw. eFBFunction\_Int übernehmen die aktuellen\
Einstellwerte der Parameter ePeriod\_Int bzw. eFBFunction\_Int.\
\
Der Ausgang *rOutsideTemp\_Out* nimmt den Zustand des Ersatzwerts (*rOutsideTemp\_Out* = ‘rOutsideTemp\_In) an, falls der Ersatzwert fehlerfrei (xOutsideTempError\_In = FALSE) ist.\
Der Ausgang eFBPeriod\_Int nimmt den Zustand eForecastOutsideTempFunction.Ivalid\_Function an.\
Der Ausgang eFBFunction\_Int nimmt den Zustand eForecastOutsideTempFunction.Ivalid\_Function an\
\
Der Ausgang *rOutsideTemp\_Out* nimmt den Zustand des Festwerts\
(*rOutsideTemp\_Out* = ‘rFixedValue) an, falls der Ersatzwert\
fehlerhaft (xOutsideTempError\_In = TRUE) ist.\
Der Ausgang eFBPeriod\_Int nimmt den Zustand eForecastOutsideTempFunction.Ivalid\_Function an.\
Der Ausgang eFBFunction\_Int nimmt den Zustand eForecastOutsideTempFunction.Ivalid\_Function an\
\
Der Ausgang eMode wird entsprechend aktualisiert.\
Der Ausgang xError wird entsprechend aktualisiert.

#### Aktualisierung des Ausgangs *rOutsideTemp\_Out*

Der Ausgang *rOutsideTemp\_Out* wird (Voraussetung: xEn = TRUE) aktualisiert, falls mindestens eines der folgenden Kriterien zutrifft:\
\
Kriterium 1: Aktualisierung der Wetter-Vorhersagedaten (ansteigende Flanke am Eingang xDone\_FC)\
Kriterium 2: Änderung des Startindexes\
Kriterium 3: Änderung des Vorhersagebereichs (Parameter ePeriod\_Int)\
Kriterium 4: Änderung der Funktion (Parameter eFunction\_Int)\
Kriterium 5: Ansteigende Flanke am Eingang xEn\
\
Der Startindex ändert sich, falls der aktuelle Zeitstempel (= Systemzeit) den Zeitstempel des nächsten Elements der Wetter-Vorhersagedaten erreicht.\
Der Ausgang *rOutsideTemp\_Out* wird daher mindestens alle 3 Stunden aktualisiert.\
Der Ausgang *rOutsideTemp\_Out* wird stets zeitrichtig berechnet, d.h. es werden alle Elemente der Wetter-Vorhersagedaten zur Berechnung heran gezogen,\
die sich zwischen dem Zeitpunkt der Aktualisierung und dem Zeitpunkt der Aktualisierung + Vorhersagebereich befinden.\
\
Im Falle eines internen Datenfehlers (fehlende Daten, fehlerhafte Daten) wird der Ausgang *rOutsideTemp\_Out* mit einer intern festgelegten Konstante\
(aktuell: -1000.0) beschrieben und der Zustand der internen Fehlervariable auf TRUE gesetzt.

#### Typische Anwendung

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-637dbec56846c15dd95e218297d93619e63fb8e7%2FForecastOutsideTemp_Bild_1.png?alt=media" alt=""><figcaption></figcaption></figure>

### CODESYS

InOut:

| Scope       | Name                   | Type                                               | Initial                                       |
| ----------- | ---------------------- | -------------------------------------------------- | --------------------------------------------- |
| Input       | `xEn`                  | `BOOL`                                             | TRUE                                          |
| Input       | `rOutsideTemp_In`      | `REAL`                                             |                                               |
| Input       | `xOutsideTempError_In` | `BOOL`                                             | FALSE                                         |
| Input       | `rFixedValue`          | `REAL`                                             | 0.0                                           |
| Input       | `xError_FC`            | `BOOL`                                             | FALSE                                         |
| Input       | `xDone_FC`             | `BOOL`                                             | FALSE                                         |
| Input       | `arData_FC`            | <p>POINTER TO<br>WEATHER\_FORECAST.WeatherData</p> |                                               |
| Output      | `eMode`                | eForecastOutsideTempMode                           | eForecastOutsideTempMode.Invalid\_Mode        |
| Output      | `eFBPeriod_Int`        | eForecastOutsideTempPeriod                         | eForecastOutsideTempPeriod.Invaild\_Period    |
| Output      | `eFBFunction_Int`      | eForecastOutsideTempFunction                       | eForecastOutsideTempFunction.Ivalid\_Function |
| Output      | `rOutsideTemp_Out`     | `REAL`                                             |                                               |
| Output      | `xError`               | `BOOL`                                             | FALSE                                         |
| Input Const | `eFunction_Int`        | eForecastOutsideTempFunction                       | eForecastOutsideTempFunction.Average          |
| Input Const | `ePeriod_Int`          | eForecastOutsideTempPeriod                         | eForecastOutsideTempPeriod.Time\_24\_Hours    |

Methods:

> mApplyFunction\_Int

> mCalculateOutsideTempOut\_Int

> mCalculateStartIndex\_Int

> mResetData\_Int

> mUpdateData\_Int

Structure:

* mApplyFunction\_Int (Method)
* mCalculateOutsideTempOut\_Int (Method)
* mCalculateStartIndex\_Int (Method)
* mResetData\_Int (Method)
  * Rücksetzung aller internen Wetter-Vorhersagedaten auf ungültige Werte \*\*\*
* mUpdateData\_Int (Method)
