Skip to content

Systemfunktionen und mathematische Funktionen (PML)

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.

NamensraumVariablennameTypBeschreibung
.constants .RNumberAllgemeine Gaskonstante: 8,314472 [J/mol K]
.constants

.PiNumberKreiskonstante: 3.14159265
.ref
.TNumberBezugstemperatur
.ref.pNumberBezugsdruck
.amb.TNumberUmgebungstemperatur zur Berechnung der Exergie
.amb.pNumberUmgebungsdruck zur Berechnung der Exergie
.norm.TNumberNormtemperatur zur Berechnung der Exergie
.norm.pNumberNormdruck 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 EinstellungenReferenzzustand 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.warningEine Warnmeldung wird in dem Simulatorfenster ausgegeben.
.system.isStructuralOptimizationBinaryPrüfung, ob es sich bei der Simulation um eine Strukturoptimierung handelt: 1 = ja, 0 = nein (true wenn ja, false wenn nein).
.system.isYearRoundCoupledOptimizationBinaryPrüfung, ob es sich bei der Simulation um eine Ganzjahresgekoppelte Optimierung handelt: 1 = ja, 0 = nein (true wenn ja, false wenn nein).
.system.hasTargetFunctionAnnualisedCostsBinaryGibt true zurück, wenn die Zielfunktion annualisierte Gesamtkosten sind, sonst false.
.system.hasTargetFunctionOperationTypBinaryGibt true zurück, wenn die Zielfunktion Betriebskosten sind, sonst false.
.system.isPrestageBinaryEin 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.getLookaheadNumberGibt den Look-Ahead im Simulationszeitraum in einer Zeiteinheit (z. B. h) wieder.
.system.getResultTimeFrameNumberGibt das Ergebniszeitfenster in einer Zeiteinheit (z. B. h) wieder.
.system.simTimeSpanDateTimeGibt den gesamten Simulationszeitraum als DateTimeObjekt wieder.
.system.simTimeSpan.toNumberNumberGibt den gesamten Simulationszeitraum in einer Zeiteinheit (z. B. h) wieder.
.system.stepWidthDateTimeGibt die Simulationsschrittweite als DateTimeObjekt wieder.
.system.stepWidth.toNumber()NumberGibt die Simulationsschrittweite in einer Zeiteinheit (z. B. h) wieder.
.system.steps(Integer-) NumberAnzahl der Zeitschritte des gesamten Problems (dieser Wert ist während der Simulation nicht konstant)
.system.timeDateTimeDatum und Uhrzeit des Simulationszeitpunkts in Ortszeit
.system.timeCETDateTimeDatum und Uhrzeit des Simulationszeitpunkts in Mitteleuropäischer Zeit
.system.stepNoNumberGibt 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.

FunktionBasistypArgumenteBeschreibung
.absNumber
--- Absolutwert
.getLastStepValueNumber
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).
.integralNumber
--- Integral
.max Number
--- Maximum
.mean Number
--- Mittelwert
.minNumber
--- Minimum
.weightedMeanNumber
--- 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:

Beispiel

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.maxMaximum zweier Zahlen
.math.sinSinus einer Zahl
.math.cosKosinus einer Zahl
.math.tanTangens einer Zahl
.math.asinArkussinus einer Zahl
.math.acosArkuskosinus einer Zahl
.math.atanArkustangens einer Zahl
.math.expExponentialfunktion mit einer Zahl als Argument
.math.lognatürlicher Logarithmus einer Zahl
.math.log10Logarithmus 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
isStructuralOptimizationPrüfung, ob die Komponente, in der diese Funktion aufgerufen wird, eine Strukturoptimierungskomponente ist.
.isSolvablePrüfung, ob die Variable, für welche die Funktion aufgerufen wird, in der Blockzerlegung in einem unterbestimmten Block vorkommt.
.isNaNPrüfung, ob die Variable, für welche die Funktion aufgerufen wird, den Wert NaN (not a number) hat. Beispiel: T_out.isNaN
.accumulateStepsSummiert 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]).
.hasSelectionPrü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]);

An den Anfang scrollen