# Stromverbrauch messen mit SPS und PAC3200



## byt0x (21 August 2022)

Servus,

ich bekomme von einer Siemens PAC3200 den aktuellen Stromverbrauch (Ptot in Watt) per Feldbus an meine SPS (CodesysControl auf Raspi).
Wie berechne ich nun den korrekten Verbrauch Stunden und Tageweise?

Es muss ja irgendwie mit einer bestimmten Abtastrate passieren und dann umgerechnet werden. Ich kenne jetzt die Rate nicht mit der mir das PAC3200 sein 
Prozessabbild aktualisiert, aber am Feldbus über Modbus frage ich alle 100ms ab. So würde ich eine Abtastrate von 10Hz erreichen (alle 100ms).

Bekomme ich mit einem Baustein der all diese Werte addiert und dann anhand der Anzahl einen Durchschnitt errechnet eine zuverlässige Berechnung?

Danke und Gruß


----------



## Otwin (21 August 2022)

Das PAC3200 muss auch einen Energiezähler bereitstellen. Einfach mal in der Doku schauen.
Diesen Zählerstand zum Stunden/Tages/Monatswechsel what ever speichern und daraus den
Verbrauch pro Zeitraum berechnen.
Das summieren der Leistung in bestimmten Zeitintervallen geht zwar theoretisch, ist aber deutlich aufwändiger und mit Sicherheit auch deutlich ungenauer.


----------



## byt0x (21 August 2022)

Danke für die Rückmeldung. Habe kurz mal reingesehen. Scheint so unterstützt zu werden.

Wie digitale Stromzähler das intern lösen weiss aber nicht zufällig jemand? Das muss ja auch über eine Art Abtastrate gellst sein.


----------



## Blockmove (21 August 2022)

byt0x schrieb:


> Das muss ja auch über eine Art Abtastrate gellst sein.


Ist auch so.
Du kannst auch den Zähler im PAC3200 reseten (z.B. Tageswechsel)


----------



## Heinileini (21 August 2022)

byt0x schrieb:


> Wie digitale Stromzähler das intern lösen weiss aber nicht zufällig jemand? Das muss ja auch über eine Art Abtastrate gellst sein.


Im Prinzip jain, aber Du redest hier davon, dass die *Leistung* in kurzen MessIntervallen gemessen wird, um durch die Integration der Leistung über die Zeit möglichst genau den *Energie*"verbrauch" innerhalb dieser Zeit zu berechnen. Das tut der EnergieZähler.



byt0x schrieb:


> Bekomme ich mit einem Baustein der all diese Werte addiert und dann anhand der Anzahl einen Durchschnitt errechnet eine zuverlässige Berechnung?


Wenn ich Deine Frage richtig verstanden habe: nein.
Du willst doch jetzt auf der Ebene Energie (und nicht Leistung) weitere Zahlen für z.B. statistische (Anzeige-)Zwecke produzieren.
Der Zählerstand des EnergieZählers summiert fortlaufend die "verbrauchte" Energie.
Speicher den Zählerstand zu Beginn Deines MessIntervalls (also für den jeweiligen Tag oder die jeweilige Stunde) ab und subtrahier diesen Zählerstand vom aktuellen Zählerstand zum Ende Deines MessIntervalls.
Diese Differenz ist die Energie, die innerhalb des MessIntervalls "verbraucht" wurde.
Das hat aber mit DurchschnittsWerten nichts zu tun.
Diese "MessIntervalle" sind die von Dir genannten Tage oder Stunden, für die Du den Energie"vebrauch" berechnen/anzeigen willst.

Etwas anders im EnergieZähler. Der misst die Leistung in kurzen Intervallen und integriert daraus die Energie (Energie = Leistung * Zeit).
Diese MessIntervalle entsprechen den von Dir genannten 100 ms. Hier dürfte/könnte es sinnvoll sein, die Messwerte über einen etwas längeren Zeitraum (z.B. 1 s) zu erfassen, bevor man den EnergieZuwachs zum Zählerstand dazu addiert. 
Wenn Du z.B. alle 100 ms die Leistung misst und erst nach Ablauf von 1 s in den entsprechenden EnergieZuwachs umrechnen willst, dann die 10 LeistungsWerte [in der Einheit W*100ms] in dieser 1 Sekunde addieren und die sich dadurch geänderte Masseinheit berücksichtigen [jetzt Einheit W*s], also letzlich doch durch 10 dividieren.
Wenn dies auch rechnerisch exakt wie eine DurchschnittsBildung aussieht, ist es eigentlich keine (meine ganz persönliche Interpretation). 

Immer im Hinterkopf behalten, mit welcher MassEinheit Du gerade arbeitest. Das kann z.B. Ws oder Wh oder kWs oder kWh sein, schliesslich sollen winzige, hinzugekommene "Verbräuche" nicht in einer zu groben MassEinheit verlorengehen und wenn Dich z.B. der "Verbrauch" innerhalb eines Jahres interessiert, dürfte eine "grobe" Masseinheit für diesen Zweck genügend genau sein.
Wie auch immer, der EnergieZuwachs wird im Zähler aber schlicht und einfach zum letzten Zählerstand hinzuaddiert. 

Zuverlässige Berechnung? Im Rahmen der Dir zur Verfügung stehenden Messwerte und MessIntervalle sicherlich - aber deshalb diese MessIntervalle nicht unnötig gross machen. 100 ms sollten OK sein. 
Sobald Du Dich auf der Ebene des EnergieZählens bewegst, könntest Du "2-stufig" zählen. Der erste (z.B. Ws-)Zähler zählt in einer kleineren Einheit, und bei Erreichen von 3.599.999 Ws und Wechsel auf 0 wird der zweite (z.B. kWh-)Zähler um 1 kWh erhöht.
Falls Dir die Abstufung kWh im zweiten Zähler zu grob ist, kannst Du stattdessen z.B. Zehntel oder Hundertstel kWh zählen (und den ersten Zähler dementsprechend nur bis 359.999 bzw. 35.999 zählen lassen).


----------



## byt0x (22 August 2022)

Ich werde es nachher nochmal in Ruhe durchgehen.

M.M.n ist es doch so, dass ich auf kWh komme wenn ich über eine Stunde die Leistung messe, aufsummiere und anhand der Anzahl an Messungen den Durchschnitt bilde.

Beispiel ungenau mit wenigen Messungen: 
15min: 150W
30min: 200W
45min: 3000W
60min: 75W

3425W / 4 = 856Wh = 0,856kWh
Wenn natürlich die 3000W nur für eine Minute genutzt wurden genau während der Messung, dann ist das Ergebnis sehr ungenau. Daher höhere Abtastraten.


----------



## MFreiberger (22 August 2022)

byt0x schrieb:


> Ich werde es nachher nochmal in Ruhe durchgehen.
> 
> M.M.n ist es doch so, dass ich auf kWh komme wenn ich über eine Stunde die Leistung messe, aufsummiere und anhand der Anzahl an Messungen den Durchschnitt bilde.
> 
> ...


Wie kommst Du auf einmal von Leistung (W) auf Arbeit (Wh)???
Du hast nirgendwo eine Zeiteinheit in Deiner Berechnung mit einbezogen!!!
Also, das Ergebnis stimmt zwar, aber der Weg dahin ist unsauber (P / Konstante = W ??? sollte P * t = W sein (3425W * 1/4h = 0,856kWh)).

W1 = P1 * t1 = 150W * 1/4h = 37,5 Wh
W2 = P2 * t2 = 200W * 1/4h = 50 Wh
W3 = P3 * t3 = 3000W * 1/4h = 750Wh
W4 = P4 * t4 = 75W * 1/4h = 18,75Wh

Summe(Wn) = 856,25 Wh =~856 Wh = 0,856 kWh

Es ist doch einfacher zuerst zu jedem Zeitstempel die Arbeit zu berechnen und dann die Arbeitswerte aufzuaddieren. Dabei kannst Du auch schnell das Zeitintervall ändern. Andernfalls musst Du die Menge der Leistungswerte mitteln (also durch das Zeitintervall teilen) und dann immer noch die Arbeitswerte addieren.

VG

MFreiberger


----------



## byt0x (22 August 2022)

Moin,

Die Rechnung ist genau die Gleiche nur zusammengefasst:
(150+200+3000+75)*1/4h
(150+200+3000+75)/4*1h

Nur in der Steuerung würde ich einen Counter hochzählen pro Messung und dann durch den Counter teilen. Die Zeit ergibt sich aus der Dauer der Aufnahme. Wenn das  eine Stunde ist, dann hast du ja das fehlende "h" was zur Arbeit fehlt.

Distributivgesetz? Stimmt das? KA! Is zu lange her.

Spart im übrigen Rechebleistung, wenn man bedenkt, dass diese Berechnung bei höheren Abtastraten doch öfter durchgeführt wird.

Einen Vorteil hat Deine Rechnung aber: Die Variable welche die Summe enthält kann kleiner dimensioniert werden.


----------



## MFreiberger (22 August 2022)

Moin byt0x:



byt0x schrieb:


> Die Rechnung ist genau die Gleiche nur zusammengefasst:
> (150+200+3000+75)*1/4h


In Deinem ersten Post (#6) hattest Du aber die Zeiteinheit vergessen. Dass das gleiche Ergebnis rauskommt, hatte ich ja auch dazu geschrieben.



byt0x schrieb:


> Distributivgesetz? Stimmt das? KA! Is zu lange her.


Ja, bei Deiner Gleichung kommt das Distributivgesetz zur Anwendung.



byt0x schrieb:


> Spart im übrigen Rechebleistung, wenn man bedenkt, dass diese Berechnung bei höheren Abtastraten doch öfter durchgeführt wird.


Naja. Ich weiß natürlich nicht, welche Leistungsdaten Dein Raspy mit CodesysControl hat. Aber häufiger als 1x/Zyklus wirst Du die Rechnung wohl nicht ausführen. Zudem musst Du bedenken, dass Du bei Deiner Programmierung in dem Zyklus, in dem die Mittelwertbildung stattfindet, eine höhere Rechenlast hast und in den übrigen Zyklen keine Rechenlast. Das führt genau genommen zu Zykluszeitschwankungen, währen bei meiner Programmierung kein Zyklus ohne Rechenlast, dafür aber immer mit weniger Rechenlast als bei Deiner Mittelwertbildung entsteht.

Insgesamt sind das aber Spitzfindigkeiten. Denn diese Berechnung sollte für eine SPS keine Herausforderung darstellen.

Weiterer Vorteil meiner Programmierung: Du kannst zu jedem Zeitpunkt (bis zu dem Abtastratenraster hinunter) die verrichtete Arbeit ermitteln. Bei Deiner Berechnung gibt es nur nach jeder Stunde einen aktuellen Wert.

VG

MFreiberger


----------



## byt0x (22 August 2022)

MFreiberger schrieb:


> Moin byt0x:
> 
> 
> In ersten Post (#6) hattest Du aber die Zeiteinheit vergessen. Dass das gleiche Ergebnis rauskommt, hatte ich ja auch dazu geschrieben.
> ...


Das stimmt natürlich.

Danke Euch!


----------

