Zum Hauptinhalt springen

Beispiel 1 - Leistungsberechnung, Energiezähler, Tageswerte

Beispiel 1a - Leistungsberechnung

Aufgabe:

Die elektrische Leistung eines Verbrauchers soll aus gemessen Spannungs- (LINEVOLT_1, LINEVOLT_2 in Volt) und Stromsignalen (LINECURRENT in Ampere) berechnen werden. Die Spannung wird redundant gemessen, wobei eine Messstelle abgeschaltet sein kann. Die Ausgabe soll in der Einheit "kW"" erfolgen. Bestimmung der aufgenommenen und abgegebenen Energie in "kWh".

Lösung:

// Konstanten zur Einheitenumrechnung
uConv_Ws2kWh = 1e-3 / 3600; // Ws -> kWh

LINEVOLT = max(LINEVOLT_1, LINEVOLT_2); // V
POWER = LINEVOLT * LINECURRENT; // W
POWER_KW = POWER / 1000.0; // kW
WAUF_KWH = integrate(max(POWER, 0.0), {storage: 'sto_WAUF'}) * uConv_Ws2kWh; // kWh
WABG_KWH = -integrate(min(POWER, 0.0), {storage: 'sto_WABG'}) * uConv_Ws2kWh; // kWh

Verwendete Funktionen

Erläuterung:

  • uConv_Ws2kWh: Zunächst wir ein Faktor zur Einheitenumrechnung von Ws in kWh definiert. Dies verbessert die Lesbarkeit des folgenden Codes. Solche Definitionen werden günstiger Weise zentral am Anfang des Formelsatzes platziert.

  • LINEVOLT: von den zwei gemessenen Netzspannungen wird das Maximum genommen. Fällt eine aus und wird 0.0, so liefert die andere immer noch einen plausiblen Wert.

  • POWER und POWER_KW: Die Berechnung der elektrischen Leistung erfolgt zunächst in W (Watt) und gesondert in kW (kilo-Watt). Diese Trennung ist notwendig, weil die nachfolgende Integral-Funktion immer mit SI-Basiseinheiten des "MKS"-Systems beschickt werden sollte, hier also der Leistung in W.

  • WAUF_KWH, WABG_KWH: Die berechnete Leistung wird über die min() und max() Funktionen nach ihrem Vorzeichen und damit der Leistungsflussrichtung getrennt auf die zwei Integratoren integrate() geführt. Beide Integratoren halten ihren aktuellen Zählerstand (in SI-Basiseinheiten!) in den angegebenen Speicherstellen. Durch die Integration kommt zum Integranden die Dimension Zeit als s (Sekunde) hinzu. Der integrierte Wert hat also die Energie Einheit "Ws" (Watt-Sekunde). Diese wird mit dem oben berechneten Skalierungsfaktor in kWh (kilo-Watt-Stunde) umgerechnet.

  • Sollten sich im späteren Verlauf die Einheiten der zu integrierenden Messsignale (kV, kA, mA) oder des integrierten Wertes ändern (kJ, MWh, etc.), kann der im Integrator gespeichert Wert leicht weiter verwendet werden, sofern dieser in SI-Basiseinheiten vorliegt. Dann ist ausschließlich eine leicht verständliche, nachvollziehbare Skalierung der Eingangsgröße oder Ausgangsgröße notwendig, jedoch keine permanente Reskalierung des im Integrator gespeicherten Wertes oder ein dadurch erzwungener Neustart.

Beispiel 1b - Tagesaktuelle Zwischenwerte

Aufgabe:

Jetzt soll die Berechnung so erweitert werden, dass tagesaktuelle Zählerstände zum Zeitpunkt des Betriebsschlusses, der Verbrauch der letzten 7 Tage und der laufende Verbrauch des aktuellen Tages ausgegeben werden.

Lösung:

In Ergänzung zum Formeltext aus Beispiel 1a:

newDay = timer({ minute: 15, hour: 3 }); // Referenz-Zeit, Schichtwechsel

_hist_WAUF_KWH = buffer(WAUF_KWH, newDay, {size:8, storage:'sto_h_WAUF'});
WEEK_WAUF_KWH = _hist_WAUF_KWH[0] - _hist_WAUF_KWH[7];
YDAY_WAUF_KWH = _hist_WAUF_KWH[0] - _hist_WAUF_KWH[1];
TDAY_WAUF_KWH = WAUF_KWH - _hist_WAUF_KWH[0];

_hist_WABG_KWH = buffer(WABG_KWH, newDay, {size:8, storage:'sto_h_WABG'});
WEEK_WABG_KWH = _hist_WABG_KWH[0] - _hist_WABG_KWH[7];
YDAY_WABG_KWH = _hist_WABG_KWH[0] - _hist_WABG_KWH[1];
TDAY_WABG_KWH = WABG_KWH - _hist_WABG_KWH[0];

Verwendete Funktionen

Erläuterung:

  • Variablen für internen Gebrauch sind mit einem _ als erstes Zeichen gekennzeichnet. Dies verbessert die Lesbarkeit.

  • newDay: Mit der timer() Funktion wird ein Impulssignal generiert, das mit der gegebenen Konfiguration jeden Morgen um 3:15 einen kurzen Impuls erzeugt. Mit diesem Impuls werden im Folgenden die Zählerstände gespeichert.

  • _hist_WAUF_KWH, _hist_WAUF_KWH: Mit Hilfe der buffer() Funktion werden Werte der Energiezähler in einen Ringspeicher der Länge 8 übernommen. Immer dann, wenn eine positive Flanke mit dem newDay Signal anliegt, werden die Werte im Ringspeicher eine Position weiter nach hinten verschoben und an Stelle [0] wird der aktuelle Wert WAUF_KWH bzw. WABG_KWH abgelegt. Auch diese Speicher sichern ihren Inhalt in eine persistente Stelle, um nach einem Neustart mit den bisher ermittelten Zählerständen weiter zu rechnen.

  • WEEK_*: Der Energieverbrauch der letzten 7 Tage ergibt sich aus der Differenz des in der letzten Nacht aufgenommen Wertes und dem 8 Nächte zuvor [7].

  • YDAY_*: Der Energieverbrauch des letzten Tages (yesterday) ergibt sich aus der Differenz des in der letzten [0] und vorletzten [1] Nacht aufgenommenen Wertes.

  • TDAY_*: Der Energieverbrauch des laufenden Tages (today) ist die Differenz aus dem absoluten und in der letzten Nacht gespeicherten Wertes.

Da sich die gespeicherten historischen Werte nur einmal pro Tag ändern, ist die Datenübertragung in die Cloud oder in OSF-Dateien sehr effizient möglich.