Systemvariablen der PML
TOP-Energy enthält Systemvariablen, die einen globalen Namensraum besitzen und somit von jedem Komponentenmodell aufgerufen werden können, ohne dass sie nochmals deklariert werden müssen. Im eSim-Modul sind diese Variablen deklariert. Die Werte können im Modul verändert werden. In der nachfolgenden Tabelle sind alle Systemvariablen mit globalem Namensraum aufgelistet.
| Namensraum | Variablenname | Typ | Beschreibung |
|---|---|---|---|
| .constants | .R | Number | Allgemeine Gaskonstante: 8,314472 [J/mol K] |
| .constants | .Pi | Number | Kreiskonstante: 3.14159265 |
| .ref | .T | Number | Bezugstemperatur |
| .ref | .p | Number | Bezugsdruck |
| .amb | .T | Number | Umgebungstemperatur zur Berechnung der Exergie |
| .amb | .p | Number | Umgebungsdruck zur Berechnung der Exergie |
| .norm | .T | Number | Normtemperatur zur Berechnung der Exergie |
| .norm | .p | Number | Normdruck zur Berechnung der Exergie |
Bezugs- und Umgebungswerte
In jeder Komponente kann aus jedem Modellbeschreibungsabschnitt auf Referenz- und Umgebungswerte zugegriffen werden. Dabei beziehen sich .ref. auf die Referenzwerte zur Berechnung der Enthalpiewerte, .amb. auf die Umgebungsgrößen und .norm. auf die Normbedingungen (z. B. zur Berechnung des Normvolumenstroms bei Druckluft), die im eSim-Formular unter Einstellungen → Referenzzustand und Normzustand vorgegeben sind.
Mit Hilfe von Bezugswerten, wie im folgenden Beispiel der Bezugstemperatur, wird beispielsweise die spezifische Enthalpie eines Stoffstroms ermittelt.
begin step
h = c_p * ( T – .ref.T);
end step
Mit Hilfe von Umgebungswerten, wie im folgenden Beispiel der Umgebungstemperatur, kann beispielsweise die spezifische Umgebungsenthalpie berechnet werden.
begin step
h_u = c_p * (.amb.T – .ref.T);
end step
Systemfunktionen
Systemfunktionen sind Funktionen, die innerhalb der PML zur Verfügung stehen. Sie werden von einem globalen Kontext aus aufgerufen. Die folgende Tabelle enthält grundlegende Systemfunktionen.
| Funktion (Syntax) | Typ | Beschreibung |
|---|---|---|
| .system.error | Eine Fehlermeldung wird in dem Simulatorfenster ausgegeben. | |
| .system.warning | Eine Warnmeldung wird in dem Simulatorfenster ausgegeben. | |
| .system.isStructuralOptimization | Binary | Prüfung, ob es sich bei der Simulation um eine Strukturoptimierung handelt: 1 = ja, 0 = nein (true wenn ja, false wenn nein). |
| .system.isYearRoundCoupledOptimization | Binary | Prüfung, ob es sich bei der Simulation um eine Ganzjahresgekoppelte Optimierung handelt: 1 = ja, 0 = nein (true wenn ja, false wenn nein). |
| .system.hasTargetFunctionAnnualisedCosts | Binary | Gibt true zurück, wenn die Zielfunktion annualisierte Gesamtkosten sind, sonst false. |
| .system.hasTargetFunctionOperationTyp | Binary | Gibt true zurück, wenn die Zielfunktion Betriebskosten sind, sonst false. |
| .system.isPrestage | Binary | Ein Binary, das den Wert true annimmt, wenn man sich gerade in der Vorstufe (Strukturoptimierung oder ganzjahresgekoppelte Optimierung) befindet. Kann nicht in einer Case- oder if-Abfrage verwendet werden. |
| .system.getLookahead | Number | Gibt den Look-Ahead im Simulationszeitraum in einer Zeiteinheit (z. B. h) wieder. |
| .system.getResultTimeFrame | Number | Gibt das Ergebniszeitfenster in einer Zeiteinheit (z. B. h) wieder. |
| .system.simTimeSpan | DateTime | Gibt den gesamten Simulationszeitraum als DateTimeObjekt wieder. |
| .system.simTimeSpan.toNumber | Number | Gibt den gesamten Simulationszeitraum in einer Zeiteinheit (z. B. h) wieder. |
| .system.stepWidth | DateTime | Gibt die Simulationsschrittweite als DateTimeObjekt wieder. |
| .system.stepWidth.toNumber() | Number | Gibt die Simulationsschrittweite in einer Zeiteinheit (z. B. h) wieder. |
| .system.steps | (Integer-) Number | Anzahl der Zeitschritte des gesamten Problems (dieser Wert ist während der Simulation nicht konstant) |
| .system.time | DateTime | Datum und Uhrzeit des Simulationszeitpunkts in Ortszeit |
| .system.timeCET | DateTime | Datum und Uhrzeit des Simulationszeitpunkts in Mitteleuropäischer Zeit |
| .system.stepNo | Number | Gibt die Nummer des aktuellen Simulationsschritts wieder. |
Beispiel
if(.system.isStructuralOptimization() == 1)
.system.warning(„<de_DE> Achtung, Strukturoptimierung! <en_US> Watch out, structural optimization.“);
end if
Fehlermeldungen und Warnungen werden im Simulatorfortschrittsfenster als Modellmeldungen angezeigt.
Einfache Zeitreihenfunktionen
Zeitreiheneigenschaften wie Minimum, Maximum oder Mittelwert lassen sich über einfache Zeitreihenfunktionen abfragen. Diese können innerhalb von Gleichungen oder Ausdrücken verwendet werden und erfordern keine Argumente, daher bleiben die Klammern hinter dem Funktionsaufruf leer.
| Funktion | Basistyp | Argumente | Beschreibung |
|---|---|---|---|
| .abs | Number | --- | Absolutwert |
| .getLastStepValue | Number Boolean | --- | reeller Wert, der letzte Zeitschritt der Simulationszeitreihe in ms. Die Simulationszeitreihe ist die Zeitreihe, die durch die Synchronisation der Eingabezeitreihen entsteht und nur die gemeinsamen Informationen aller Eingabezeitreihen beinhaltet (Zeitstempel, Zeitzone). |
| .integral | Number | --- | Integral |
| .max | Number | --- | Maximum |
| .mean | Number | --- | Mittelwert |
| .min | Number | --- | Minimum |
| .weightedMean | Number | --- | gewichteter Mittelwert |
Diese Funktionen liefern keine konstanten Zeitreihen, sondern Zahlenwerte. So berechnet z. B. die folgende Gleichung die Variable b als Summe von Minimum und Maximum der (zeitabhängigen) Variablen a.
b = a.min() + a.max();
Häufig finden diese Funktionen bei der Berechnung von Wirkungsgraden Verwendung. So ergibt sich der Wirkungsgrad eines BHKW (eta) als Quotient von elektrischer (P_el) plus Wärmeleistung (Q_dot_heat) und Brennstoffleistung (H_dot_chem).
eta = (Q_dot_heat.weightedMean() + P_el. weightedMean()) / H_dot_chem. weightedMean();
Weitergehende Zeitreihenfunktionen, z. B. Maximalwerte innerhalb eines Tages, beschreibt der Artikel Datums- und Zeitreihenfunktionen (PML).
Mathematische Funktionen
In der PML können vordefinierte mathematische Funktionen verwendet werden. Diese werden mit der Syntax .math.Funktionsname(Argument) eingebunden und haben den Rückgabetyp Number. Zum Beispiel kann die Variable y_sin als Sinus von 45° wie folgt berechnet werden:
y_sin = .math.sin(45[deg]);
In der PML akzeptieren die trigonometrischen Funktionen (sin, cos, tan) als Argument sowohl einheitenlose Größen als auch Größen, die in Radian [rad] konvertierbar sind. Die folgende Tabelle zeigt die mathematischen Funktionen mit dem Rückgabetyp Number. Die Syntax besteht jeweils aus dem Namensraum .math und der Funktion, z. B. .min.
| Funktion (Syntax) | Beschreibung |
|---|---|
| .math.min | Minimum zweier Zahlen |
| .math.max | Maximum zweier Zahlen |
| .math.sin | Sinus einer Zahl |
| .math.cos | Kosinus einer Zahl |
| .math.tan | Tangens einer Zahl |
| .math.asin | Arkussinus einer Zahl |
| .math.acos | Arkuskosinus einer Zahl |
| .math.atan | Arkustangens einer Zahl |
| .math.exp | Exponentialfunktion mit einer Zahl als Argument |
| .math.log | natürlicher Logarithmus einer Zahl |
| .math.log10 | Logarithmus zur Basis 10 einer Zahl |
In die .math-Funktionen werden die Variablentypen Number eingegeben. Bei den Ergebnissen handelt es sich ebenfalls um Number-Variablen. Das folgende Beispiel zeigt die Schreibweise einer mathematischen Funktion.
begin step
a = .math.sin (b, 3.0);
b = .constants.Pi;
end step
begin step
a = .math.sin (.constants.Pi);
end step
Weitere Funktionen
Es gibt weitere Funktionen für Variablen, welche für die Vorlagen verwendet werden und für die Modellierung eigener Komponenten weniger bedeutsam sind. Alle mit is beginnenden Variablen sind Binärvariablen, die wahr sind, wenn der Wert 1 annimmt, und falsch sind, wenn der Wert 0 annimmt.
| Funktion (Syntax) | Beschreibung |
|---|---|
| isStructuralOptimization | Prüfung, ob die Komponente, in der diese Funktion aufgerufen wird, eine Strukturoptimierungskomponente ist. |
| .isSolvable | Prüfung, ob die Variable, für welche die Funktion aufgerufen wird, in der Blockzerlegung in einem unterbestimmten Block vorkommt. |
| .isNaN | Prüfung, ob die Variable, für welche die Funktion aufgerufen wird, den Wert NaN (not a number) hat. Beispiel: T_out.isNaN |
| .accumulateSteps | Summiert die Werte einer linearen Variablen in der Vergangenheit oder Zukunft. Argumente sind die aufzusummierende Variable, linke Grenze der Rückschau und rechte Grenze der Vorschau. Die Grenzen können einheitenlos vorgegeben werden. Dann werden sie als Simulationsschritte interpretiert, z. B. SummedElectricPower.accumulateSteps(lP_el, -3, 3). Sind die Grenzen mit einer Zeiteinheit versehen, werden sie als Simulationszeiträume interpretiert, z. B. SummedElectricPower.accumulateSteps(lP_el, -3[h], 3[h]). |
| .hasSelection | Prüft, ob eine componentRef-Variable eine Auswahl hat (z. B. das Verweisfeld im KWK-Zuschlag auf ein BHKW) |
Alle auf Variablen bezogenen Funktionen werden durch die Deklaration Variable.Funktion aufgerufen, z. B.:
if(T_out.isSolvable() == 0)
.system.error(„<de_DE> Die Variable T_out kommt in einem nicht-lösbaren Block des Gleichungssystems vor.“) ;
end if
if(T_out.NaN() == 0)
.system.error(„<de_DE> Die Variable T_out hat keinen gültigen Wert.“) ;
end if
SummedPower_last24hours.accumulateSteps(lP_el,-24[h],0[h]);
