Datums- und Zeitreihenfunktionen der PML
Zu den PML-Funktionen gehören Datums- und Zeitreihenfunktionen.
Kalender-/Datumsfunktionen zum Simulationszeitpunkt
Bei zeitabhängigen Simulationen kann der aktuelle Simulationszeitpunkt über die folgenden beiden Systemvariablen vom Typ DateTime abgefragt werden.
| Namensraum | Variablenname | Typ | Beschreibung |
|---|---|---|---|
| .system | .time | DateTime | Datum und Uhrzeit des Simulationszeitpunkts in Ortszeit |
| .system | .timeCET | DateTime | Datum und Uhrzeit des Simulationszeitpunkts in Mitteleuropäischer Zeit |
Kalenderfunktionen wie getDayOfYear() oder getMinuteOfDay() können aus Zeitreihenwerten die zugehörigen Zeitwerte ermitteln. Die Rückgabewerte sind einheitenlos und vom Typ Number. Zur Konvertierung in Variablen vom Typ Number gibt es folgende Datumsfunktionen, die auf oben genannten Systemvariablen aufgerufen werden können und keine Argumente erfordern.
| Funktion | Basistyp | Argumente | Beschreibung |
|---|---|---|---|
| .getHourOfDay | DateTime | --- | berechnet die Stunde des Tages als Number |
| .getMinuteOfDay | DateTime | --- | berechnet die Minute des Tages als Number |
| .getDayOfWeek | DateTime | --- | berechnet den Wochentag als Number (Montag = 1, Dienstag = 2, ... , Sonntag = 7) |
| .getDayOfMonth | DateTime | --- | berechnet den Tag des Monats als Number |
| .getDayOfYear | DateTime | --- | berechnet den Tag des Jahres als Number |
| .getMonthOfYear | DateTime | --- | berechnet den Monat des Jahres als Number |
| .getYear | DateTime | --- | berechnet das Jahr als Number |
| .isLeapYear | DateTime | --- | gibt als Antwort, ob es sich um ein Schaltjahr handelt |
Auf diese Weise wird z. B. in der folgenden Gleichung der Monatstag des Simulationszeitpunkts auf die mitteleuropäische Zeitzone bezogen ermittelt.
dayOfMonthCET = .system.timeCET.getDayOfMonth();
Liegt keine Zeitabhängigkeit vor, wird Null zurückgegeben. Die Kalenderfunktionen erlaubt Modelle, die vom aktuellen Simulationszeitpunkt abhängen, wie z. B. die Berechnung des Sonnenstands.
begin declaration
Number a ~ 1220 [min];
Number b ~ 180 [];
Number c ~ 5 [min];
end declaration
begin step
c := 1[min];
a = .system.time.getMinuteOfDay ( ) * c;
b = .system.time.getDayOfYear ( ) ;
end step
Erzeugen einer Dauerlinie
Die Funktion isLoadDurationOf erzeugt eine Dauerlinie (in der folgenden Abbildung rot) als eine neue Zeitreihe, in der die Daten der Eingabezeitreihe (in der folgenden Abbildung blau) absteigend sortiert sind.
Die Syntax lautet:
Ergebnisvariable.isLoadDurationOf(Eingabevariable);
Die Ergebnisvariable muss mit einem Primitiv verbunden sein, in welches die berechnete Zeitreihe direkt gespeichert wird. Die Zeitachse der Dauerlinie ist abstrakt und stimmt insbesondere nicht mit den Simulationszeitpunkten überein. In der Simulation kann mit diesen Ergebnissen nicht weiter gerechnet werden, weil inkonsistente Zeitpunkte vorliegen.
Um zum Beispiel eine Dauerlinie für die Betriebsstunden in der Komponente BHKW zu erzeugen, wird zunächst die Ergebnisvariable deklariert und mit einem Primitiv verbunden.
Number OperatingHoursLoadProfile(„/Local/eProc/…“);
Anschließend kann in den Gleichungen die Funktion isLoadDurationOf als Anweisung aufgerufen werden.
OperatingHoursLoadProfile.isLoadDurationOf(OperatingHours);
Erweiterte Zeitreihenfunktionen
Es gibt erweiterte Zeitreihenfunktionen, die es erlauben, typische Eigenschaften wie Minimum, Maximum, Mittelwert oder Integral für den gesamten Simulationszeitraum oder für jeden Tag, jeden Monat oder jedes Jahr innerhalb des Simulationszeitraums zu ermitteln.
Diese Funktionen erfordern drei Parameter. Die Syntax lautet im Allgemeinen:
Ergebnisvariable.Zeitreihenfunktion(Eingabevariable, Zeitraum, Referenzzeit);
Die Zeitreihenfunktion wird auf der Zeitreihe der Eingabevariable vom Typ Number ausgeführt und darf nur als Anweisung verwendet werden. Das Ergebnis wird in der Ergebnisvariable, ebenfalls vom Typ Number, gespeichert.
Für die vier Funktionen isMinValueOf, isMaxValueOf, isMeanValueOf und isWeightedMeanValueOf ist das Ergebnis eine konstante Zeitreihe.
Für die Funktion isIntegralOf ist das Ergebnis eine Zeitreihe, die für jeden Zeitpunkt das Integral der Eingabezeitreihe ab dem Referenzzeitpunkt enthält. Der Referenzzeitpunkt richtet sich nach dem Zeitraum.
Zeitraum
Der Zeitraum bestimmt die jeweils betrachteten Zeiträume. Er ist ein Parameter vom Typ Integer. Es gibt die folgenden vier verschiedenen Zeitraumvarianten:
| Wert | Zeitraum |
|---|---|
| 0 | gesamter Simulationszeitraum |
| 1 | Jahr |
| 2 | Monat |
| 3 | Tag |
Referenzzeitpunkt
Der Referenzzeitpunkt ist ein Parameter vom Typ Integer und bestimmt den Beginn der jeweiligen Zeiträume. Das Integral beginnt am Referenzzeitpunkt mit 0.
Auf diese Weise kann man jahrweise ab Juli, monatsweise ab dem 15. des Monats oder tagweise ab 12 Uhr rechnen.
Die Standardwerte ergeben sich, indem man den Wert 0 wählt. Man kann in die Funktion auch nur den ersten bzw. die ersten beiden Parameter eintragen. Die restlichen Parameter werden dann als Null interpretiert.
Verfügbare Zeitreihenfunktionen
Zeitreihenfunktionen wie isMaxValueOf() oder isWeightedMeanValueOf() berechnen eine neue Zeitreihe, indem sie die Simulationszeitpunkte mit in Betracht ziehen. So kann z. B. für eine Eingabezeitreihe monatsweise das Maximum bestimmt werden. Die Funktionen erhalten drei Inputs, deren erster der Eingabezeitreihe entspricht. Der zweite Input ist eine Steuerungsgröße, die entscheidet, ob die Operation für den Gesamtzeitraum (Wert 0), pro Jahr (Wert 1), pro Monat (Wert 2) oder pro Tag (Wert 3) ausgeführt wird. Der dritte Input ist ein Referenzzeitpunkt, mit dem das betrachtete Jahr jeweils im k-ten Monat oder der betrachtete Monat jeweils am k-ten Tag begonnen wird.
Die verfügbaren Zeitreihenfunktionen sind in der folgenden Tabelle zu sehen.
| Funktion | Basistyp | Argumente | Beschreibung |
|---|---|---|---|
| .isMinValueOf | Number | Number, Integer, Integer (3) | berechnet das Minimum pro Jahr, Monat, Tag oder für den gesamten Simulationszeitraum |
| .isMaxValueOf | Number | Number, Integer, Integer (3) | berechnet das Maximum pro Jahr, Monat, Tag oder für den gesamten Simulationszeitraum |
| .isMeanValueOf | Number | Number, Integer, Integer (3) | berechnet den Mittelwert pro Jahr, Monat, Tag oder für den gesamten Simulationszeitraum |
| .isWeightedMeanValueOf | Number | Number, Integer, Integer (3) | berechnet den gewichteten Mittelwert pro Jahr, Monat, Tag oder für den gesamten Simulationszeitraum |
| .isIntegralOf | Number | Number, Integer, Integer (3) | berechnet das Integral pro Jahr, Monat, Tag oder für den gesamten Simulationszeitraum |
Für Variablen a, b, c vom Typ Number ordnet
b.isMaxValueOf(a, 2);
jedem Zeitpunkt von b das Monatsmaximum von a zu. Der nicht spezifizierte Parameter für den Referenzzeitpunkt nimmt hier den Standardwert Null an. Ferner ordnet
c.isMeanValueOf(a, 1, 4);
jedem Zeitpunkt von c das Jahresmittel von a im Zeitraum April-März zu. Die Ergebnisse für einen Wärmebedarf sind in der folgenden Abbildung dargestellt: sie zeigt den Wärmebedarf eines Jahres mit Monatsmaxima (blau) und Jahresmittel (rot).
Werden das zweite und dritte Argument weggelassen, ergibt sich der Ausdruck analog zu dem im Abschnitt Einfache Zeitreihenfunktionen.
Die Ausdrücke
a = b.min() ;
und
a.isMinValueOf(b) ;
sind identisch.


