Step 7 S0 Impulse von Energiezähler i. d. S7 in akt. Wirkleistung umrechnen u. visualisieren

sob

Level-1
Beiträge
24
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich komme auf keine Lösung und würde Eure Hilfe benötigen.
Ich möchte S0 Impulse aus einem EMU Energiezähler Professional (mit Direktmessung max 75A) in eine S7 CPU315 einlesen und dort daraus die aktuelle Wirkleistung errechnen um diese anschliessend an einem TP visualisieren.
Das Visualisieren ist kein Problem.
Probleme bereitet mir die Berechung der aktuellen Wirkleistung. :confused:

Der Zähler liefert folgende Werte.
Impulslänge: 40ms
1000 Impulse = 1kWh

Sollte das möglich sein will ich im zweiten Schritt meinen Eigenverbrauch an der PV-Anlage optimieren.

Wäre super wenn ich mich hierbei unterstützen könntet.
Habe hier zwar schon etwas über S0 Impulse von Stromzählern finden können aber leider nichts zum errechnen der Wirkleistung.
 
wenn deine DI die Impulse mitbekommt brauchst du doch nur Impuls = 1 Wh Rechnen.

Die Frage ist nur ob deine DI auch alle Impulse mitbekommt.

Falls Nein, muss eine schnellere DI her.

Was hast du als DI?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...ja aber dann habe ich als Ergebnis nur "Wh" und noch immer nicht die reine Wirkleistung "W".
Ich muss doch hier anhand der Geschwindigkeit der Impulse wie sie vom Energiezähler (EMU) kommen und der Impulsdauer (40ms) auf die Wirkleistung hochrechnen damit ich als Ergebnis nur Watt bekomme.
Oder denke ich hier viel zu kompliziert.

 
Hallo

Wichtig ist aber dass es nicht zuviele Impulse werden sonst verliert die SPS den einen oder anderen.
Was ist die höchste Leistung? Dann musst du die Impulse und die Impulslänge aufaddieren / multipliziern
und dann kommt hoffentlich noch ein Signal mit 0 und 1 heraus und noch akzeptabel für die SPS.

Also ich mache das mit dem roten Steifen auf dem Zähler. Es gibt einen Sensor der erkennt die rote Markierung.


Mit diesem Signal starte ich mit eine Stoppuhr und warte bis des nächste Signal kommt. Dann rechne ich hoch,
wenn das nächste Signal in dieser Zeit kommen würde dann verbrauche ich im Moment xxx W, KW,...

Die Impulsdauer darf sich nicht ändern bei dir, die wird auch gleich bleiben.
Du kannst also nur messen von Impuls zu Impuls und dann hochrechen. Dann bist du zwar immer
um einen Takt hinterher aber das ist normalerweise ausreichend.
Wenn du aber Online wissen willst wieviel du verbrauchst dann musst du den Strom messen, oder gleich
die Leistung.

Ich habe das mit der Systemzeit gemacht. Da gibt es einen SFC der nimmt die aktuelle Systemzeit
mit Millisekunden (glaube ich). Dann kannst du die bei einer positiven Flanke gespeicherte Systemzeit
von der zweiten, ebenfalls bei positiver Flanke, gespeicherten Systemzeit abziehen.
Diese Differenz ist dann die Zeit von Impuls zu Impuls und du kannst die Leistung berechnen.

Gruß
Bernhard
 
Hallo Bernhard,

danke.
Die max Leistung beträgt 27kW. ES waren aber noch nie über 20kW.

Der Zähler ist aktuell auf 1000 Impulse pro kWh eingestellt.
Kann ihn aber auf 100 oder 10 Impulse pro kWh umstellen.
Die Impulsdauer von 40ms ist eine Konstante.
Hast Du evtl. ein Programmbespiel für mich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich habe das mit dem SFC 64 gemacht.


SFC 64.jpg

Da kommt die Zeit schon in Millisekunden.
Ergebnis 1 von 2 abziehen und schon fertig.

z.B. Ergebnis 1 Sekunde -> Jede Sekunde 1 Impuls -> 3600 Impulse pro Stunde -> div. durch 1000 -> 3,6 KW/h
z.B. Ergenbis 1/2 Sekunde -> Jede Sekunde 2 Impulse -> 7200 Impulse pro Stunde -> div. durch 1000 -> 7,2 KW/h
z.B. Ergenbis 1/4 Sekunde -> Jede Sekunde 4 Impulse -> 14400 Impulse pro Stunde -> div. durch 1000 -> 14,4 KW/h

So aus dem Kopf ohne Gewährleistung auf Richtigkeit.

Gruß
Bernhard
 
das beutet also wenn ich den Wert so aktuell wie möglich haben will muss ich den SFC64 entsprechend öfter neu starten.
 
Gut, ich versuch das mal zusammen zu fassen:

Du hast max 27kWh mit 1000 Imp je Wh oder 0.001Wh / Impuls.
Maximale Impulsanzahl 27000 je Stunde ^= 7,5 Imp pro Sekunde.
Impulsdauer 40 ms.
Sollte für einen normalen Digitaleingang keine Schwierigkeiten machen.

So, jetzt Grundlagen zur Impuls-Auswertung.
Grundsätzlich gibt es für sowas meherere Varianten und man sollte sich, je nach Impulsbild, für eine entscheiden:

1. Zählen der Impulse in einem fixen Zeitintervall.
Man zählt zum Beispiel wie viele Impulse in einer Minute (oder einem Zeitintervall) ankommen und rechnet damit weiter.
Vorteil: Einfach, funktioniert gut bei höherfrequenten Signalen. Mittelwertfilter integriert.
Nachteil: Liefert schlechte Ergebnisse wen man nur wenige Impulse in seinem Zeitintervall bekommt.
Manchmal können die Impulse so liegen dass man in einem Zeitintervall einen mehr hat als im nächsten.
2. Messen des Impulsabstands zwischen 2 Impulsen
Man misst die Zeit zwischen 2 Impulsen und verrechnet diese dann (wie oben bereits beschrieben)
Vorteil: Funktioniert genauso exakt auch wenn mal wenig oder mehr Impulse kommen.
Nachteil: Bei Höherfrequenten Signalen (bezogen auf einen normalen DI, max. 20 Takte pro Sekunde) kommt zum Tragen,
dass du für die Zeitbestimmung eigentlich immer auf irgendeine Ungenauigkeit festgenagelt bist.
Mal abgesehen von Interrupts und schnellen Zählern etc. Von Zeitungenauigkeit durch Hardware sprechen wir gar nicht.​

3. Kombination aus beidem
Bis zu einem gewissen Maß (z.B.: 1s) zählt man Impulse pro Sekunde, fällt dann der Abstand zwischen
zwei Impulsen länger aus (genau genug für Zeitmessung) verwendet man den Zeitabstand.
Vorteil: ziemlich genau
Nachteil: aufwändig​

Wie IPC Bernhard schon gepostet hat, verwendet man häufig den SFC64 (basiert auf der Systemzeit) oder die SFBs TON,TOF.
Die Systemzeit unterliegt bei S7-300-System einer Genauigkeit von 10ms.
<EDIT> Onkel Dagobert hat mich weiter unten in diesem Punkt schon verbessert</EDIT>
Für eine theorethische Überlegung ist es allerdings nicht schlecht, damit du ein Gefühl bekommst was ein paar Millisekunden ausmachen können.

Die Hardware-Timer sind schon formatbedingt nicht genauer.

So in deinem Fall nehme ich mal an das du im Normfall zwischen 10kWh (2,8 Imp/s) und 20kWh (5,6 Imp/s) liegst.
Variante 2 klingt schon ganz gut. Gehen wir mal von einem Zeitfehler von +/-5ms.
Bei 10kWh im schlechtesten Fall ein Ergebnis von 9,863kW oder 10,140kW
Bei 20kWh im schlechtesten Fall ein Ergebnis von 19,459kW oder 20,571kW
Wie du siehst können 5ms schon einiges ausmachen. Und von anderen Ungenauigkeiten haben wir noch gar nicht gesprochen.
Im unteren Messbereich fällt die Ungenauigkeit kaum auf:
Bei 1kWh im schlechtesten Fall ein Ergebnis von 0,998kW oder 1,001kW

Du musst also schon bei der Konzeption abschätzen in welchem Bereich sich der Messwert (nomineller Impulsabstand) am häufigsten
befindet und dann die beste Variante wählen. UND uns das auch genau so sagen. :cool:


Puh, ich glaub ich hab grad nen halbes FAQ geschrieben, jetzt weiß ich wie's PN/DP immer geht.
Fühlt euch frei die Fehler die ich beim Rechnen/Denken gemacht habe aufzuzeigen. :p


PS: Beim Nutzen von SFC64 muss man den Überlauf beachten!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
..Ich weiß ehrlich gesagt selber nicht auf was sich diese 10ms beziehen, vor allem über welchen Zeitraum.
Viellicht kann mich mal jemand aufklären...
Das ist die Granularität bzw. die Auflösung. De Systemzeit zählt(e) bei den S7300 also nur in Schritten von 10ms. Aber das betrifft nur ältere CPUs. Heutige und gestrige CPUs zählen alle im 1ms-Raster. Ich handhabe es so dass ich die ermittelte Abtastzeit dämpfe. Somit werden Zyklusschwankungen eliminiert und es ergibt sich quasi ein gemittelter Wert für die berechnete Leistung. Bleibt längere Zeit der Impuls aus, wird das Ergebnis auf Null gesetzt.
 
Das ist die Granularität bzw. die Auflösung. De Systemzeit zählt(e) bei den S7300 also nur in Schritten von 10ms.
Aha. Ich dachte dass eventuell sowas wie "10ms Abweichung über eine gewissen Zeitraum" gemeint war.
Aber das betrifft nur ältere CPUs. Heutige und gestrige CPUs zählen alle im 1ms-Raster.
Sehr schön zu hören! Es schadet aber trotzdem nicht wenn der TE sich mal über diese Dinge Gedanken macht.
Ich handhabe es so dass ich die ermittelte Abtastzeit dämpfe. Somit werden Zyklusschwankungen eliminiert und es ergibt sich quasi ein gemittelter Wert für die berechnete Leistung. .
Jetzt hast du mich neugierig gemacht, könntest du mir ein genaueres Beispiel nennen.
Bleibt längere Zeit der Impuls aus, wird das Ergebnis auf Null gesetzt
So ähnlich mach ich's auch. Solange der laufende Zeitmesswert kleiner als der letzte Zeitmesswert ist, bleibt der Energie-Messwert unverändert. Kehrt sich dieses
Verhältnis (z.B.: sinkender Messwert) wird der Energie-Messwert dynamisch aktualisiert bis entweder eine neuer Impuls kommt oder eine Max-Zeit abläuft.

Und jetzt noch für den TE, ein Beispiel für eine Zeit-Differenzmessung über SFC64 mit Überlauf-Schutz (grad der Teil macht Ungeübten oft Probleme).
Anhang anzeigen Example_SFC64_tDiff.pdf

EDIT:
Hier noch ein Beispiel dass ich mir von Dalbi abgeschaut habe, wo man einfach das Vorzeichen eliminiert.
Da hat man anscheinend, neben der Einfachheit, auch den Vorteil dass man die eine Millisekunde von MAX auf 0 mitbekommt.
Das Ergebnis liefert 1ms mehr als das Beispiel oben.
Anhang anzeigen Example_SFC64_tDiff2.pdf
 
Zuletzt bearbeitet:
Es wundert mich, dass niemand den Prozessalarm ins Spiel bringt.
Bedingung ist natürlich eine alarmfähige Eingangskarte, bei der ein Eingang auf steigende Flanke parametriert ist.
Diese Flanke startet dann per Interrupt den OB40.
Das Ganze sähe dann wie folgt aus: (nur mal so auf die Schnelle hingeschrieben)
Code des OB40:
Code:
L Zeitwert_neu
T Zeitwert_alt
CALL SFC64
RET_VAL := Zeitwert_neu
SET
= Merker
Beliebiger anderer Baustein
Code:
UN Merker  // Impulsmerker abfragen
SPB eNDe
L Zeitwert_neu  // Delta T berechnen
L Zeitwert_alt
-D
T DeltaT // lokales Doppelwort
L 3600  // kommt von 1000Imp/kWh
L DeltaT
/D
T Leistung    // Leistung in Watt
CLR
= Merker  // Impulsmerker löschen
eNDe: NOP 0

eNDe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
2. Messen des Impulsabstands zwischen 2 Impulsen
Man misst die Zeit zwischen 2 Impulsen und verrechnet diese dann (wie oben bereits beschrieben)
Vorteil: Funktioniert genauso exakt auch wenn mal wenig oder mehr Impulse kommen.
Nachteil: Bei Höherfrequenten Signalen (bezogen auf einen normalen DI, max. 20 Takte pro Sekunde) kommt zum Tragen,
dass du für die Zeitbestimmung eigentlich immer auf irgendeine Ungenauigkeit festgenagelt bist.
Mal abgesehen von Interrupts und schnellen Zählern etc. Von Zeitungenauigkeit durch Hardware sprechen wir gar nicht.​

Fühlt euch frei die Fehler die ich beim Rechnen/Denken gemacht habe aufzuzeigen. :p

Bei Variante 2 musst Du noch beachten, dass bei P=0kW keine Impulse mehr kommen, d.h. dein Leistungswert bleibt bei dem hohen Wert stehen. Ich löse das Problem folgendermaßen:

Zur Berechnung der Leistung verwende ich eine Maxauswahl aus der Zeit zwischen dem letzten und dem vorletzten Impuls und der Zeit seit dem letzten Impuls. Die Berechnung erfolgt dann zyklisch.

Gruß.
 
Es wundert mich, dass niemand den Prozessalarm ins Spiel bringt.
Nun ja, ich wollte den TE nicht gleich mit einer allzu großen Welle an Info überrollen.
Und wie gesagt man braucht einen passenden DI.

Bei deinem Code musst du (wie zuvor schon geschrieben) auf den Überlauf von SFC64 achten!
Teilweise sogar auf hochspardische Fehler von SFC64 wenn man es genau nimmt.
Ich glaube Onkel Dagobert hatte mal hier einen Beitrag dazu... <EDIT> Gefunden! </EDIT>

....dass bei P=0kW keine Impulse mehr kommen, d.h. dein Leistungswert bleibt ... stehen.
Ich löse das Problem folgendermaßen... Maxauswahl...
Klar, aber wie gesagt wollte ich die Thread-Wurst nich noch länger machen. Habe ich dann auch noch mit Onkel besprochen.
Mit Maxauswahl... meinst du vermutlich dass selbe wie ich oder missverstehe ich dich da?
So ähnlich mach ich's auch. Solange der laufende Zeitmesswert kleiner als der letzte Zeitmesswert ist, bleibt der Energie-Messwert unverändert. Kehrt sich dieses
Verhältnis (z.B.: sinkender Messwert) wird der Energie-Messwert dynamisch aktualisiert bis entweder eine neuer Impuls kommt oder eine Max-Zeit abläuft.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

hab momentan das gleiche Problem und bin grad am Basteln.
Also bei meinem Stromzähler:

Zählimpulse: 1000imp/1KWh -> 1imp/1Wh
Impulslänge: 90ms

Nun messe ich die Zeit zwischen zwei Impulsen und rechnen dies dann hoch.
Hab den FC angehängt und wollte mal von euch drüber schauen lassen ob ich da falsch liege
oder wie ich es noch verbessern könnte.
Wäre super wenn ich euch das kurz anschauen könntet :wink:.

Gruß

http://imageshack.com/a/img856/8552/x4bp.jpg
http://imageshack.com/a/img163/8427/8bk3.jpg
http://imageshack.com/a/img191/976/wqpy.jpg
 
Hallo RONIN,

..Jetzt hast du mich neugierig gemacht, könntest du mir ein genaueres Beispiel nennen...

Die ermittelte Zeit wandle ich in einen REAL-Wert [ms] und dämpfe ihn. Möglichkeiten zur Dämpfung findest du zur Genüge hier im Form. Eben so gut kann man natürlich auch das Endergebnis [kW] dämpfen, so wie jeden anderen Messwert.


Gruß, Onkel
 
Hi,
oder wie ich es noch verbessern könnte.
Wäre super wenn ich euch das kurz anschauen könntet
Na gut, <EDIT> lieber Hannibal </EDIT> ;), da gebe es doch so einiges.

1) Bei der Sache mit den beiden Zählern denkst du komplizierter als nötig
Soweit ich das richtig sehe: Der erste Zähler schlägt an beim ersten Impuls,
der Zweite beim zweiten Impuls. Z1 hält den TON am laufen und Z2 startet ihn dann neu.
Hier wäre es zum Beispiel einfacher wenn du statt dem ganzen Konstrukt einen TOF nehmen würdest
und den direkt mit "Flanke Positiv - Ipulssignal" beschalten würdest. Dann hast du automatisch einen
Timer mit ET-Ausgang der bei jeder Flanke neu startet. Den ET-Wert sicherst du bei einer Impulsflanke
dann noch ein Netzwerk vor dem TOF-Baustein weg.​

2) Das manuelle abziehen der Impulslänge brauchst du doch nicht oder?
So weit ich weiß reagiert CTU am Eingang CU eh nur auf eine positive Flanke oder? Wo spielt die Impulslänge da rein?
Oder verstehe ich da was nicht richtig? :confused:
Geschweige denn ist die Impulslänge auch nie ein garantierter/perfekter Wert. Oder schon mal was von Verzögerungen an
Digitaleingängen gehört? Bei der 1200 kann man die Zeiten wenigstens verstellen.
Solche Annahmen killen deine Genauigkeit komplett!

3.) Ich sehe an deinem Timer nur T#1s
Was passiert eigentlich wenn der Impulsabstand > 1s wird?​

4.) Der Einsatz von Bausteinen wie TON, TOF birgt ein Problem.
Wenn der zweite Impuls (Zweiter Zähler) kommt wird die Eingangsbedingung am Timer 0 -> Timer-Reset.
Dann wird der Timer aber erst wieder im nächsten Zyklus/Durchlauf neu-gestartet.
Du verlierst bei deiner Zeitmessung also einen ganzen Zyklus.

Auf Grund deiner Timer-Einstellung von T#1s muss ich davon ausgehen dass deine Impulse im Abstand < 1s daherkommen.
Wenn du meine vorigen Beträge hier liest kannst du sehen was das mit deiner Genauigkeit anrichten kann.
OK, du hast vermutlich keine hohen Zyklszeiten... Aber trotzdem.

Abhilfe: Einen Rücksprung setzen damit der Timer im selben Zyklus neu gestartet wird (tu das bitte nicht!) oder du
verwendest die Methode zur Zeitabstandsmessung via SFC64 die ich HIER schon früher gepostet habe. Liest dass den keiner?​

5.) Willst du den FC mehrmals im Programm verwenden?
Dann sind die direkten Zuweisungen der Timer, Merker und Instanzdaten vielleicht auch nicht gerade das beste.

Abschließend muss ich leider sagen dass deine Messung vermutlich nicht viel mit der Realität zu tun haben wird. Leider.
Viellicht liest du dir das ganze Thema nochmal durch, da sind durchaus gute Tipps versteckt. ;)


-------------------------------------------------------------------------
@Onkel: OK mach ich auch. Ich dachte vielleicht du hast noch einen spektakulären Trick im Ärmel. :cool:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich mach das immer so: die zeit zwischen 2 impulsen messen, dazu aqddiere ich die zykluszeit auf. das ganze läuft dann über mehrere impulse. damit ist's dann gleich mal glatt gezogen.
 
Na gut, Herr Knidlberger ;), da gebe es doch so einiges.

1) Bei der Sache mit den beiden Zählern denkst du komplizierter als nötig
Soweit ich das richtig sehe: Der erste Zähler schlägt an beim ersten Impuls,
der Zweite beim zweiten Impuls. Z1 hält den TON am laufen und Z2 startet ihn dann neu.
Hier wäre es zum Beispiel einfacher wenn du statt dem ganzen Konstrukt einen TOF nehmen würdest
und den direkt mit "Flanke Positiv - Ipulssignal" beschalten würdest. Dann hast du automatisch einen
Timer mit ET-Ausgang der bei jeder Flanke neu startet. Den ET-Wert sicherst du bei einer Impulsflanke
dann noch ein Netzwerk vor dem TOF-Baustein weg.​

2) Das manuelle abziehen der Impulslänge brauchst du doch nicht oder?
So weit ich weiß reagiert CTU am Eingang CU eh nur auf eine positive Flanke oder? Wo spielt die Impulslänge da rein?
Oder verstehe ich da was nicht richtig? :confused:
Geschweige denn ist die Impulslänge auch nie ein garantierter/perfekter Wert. Oder schon mal was von Verzögerungen an
Digitaleingängen gehört? Bei der 1200 kann man die Zeiten wenigstens verstellen.
Solche Annahmen killen deine Genauigkeit komplett!

3.) Ich sehe an deinem Timer nur T#1s
Was passiert eigentlich wenn der Impulsabstand > 1s wird?​

4.) Der Einsatz von Bausteinen wie TON, TOF birgt ein Problem.
Wenn der zweite Impuls (Zweiter Zähler) kommt wird die Eingangsbedingung am Timer 0 -> Timer-Reset.
Dann wird der Timer aber erst wieder im nächsten Zyklus/Durchlauf neu-gestartet.
Du verlierst bei deiner Zeitmessung also einen ganzen Zyklus.

Auf Grund deiner Timer-Einstellung von T#1s muss ich davon ausgehen dass deine Impulse im Abstand < 1s daherkommen.
Wenn du meine vorigen Beträge hier liest kannst du sehen was das mit deiner Genauigkeit anrichten kann.
OK, du hast vermutlich keine hohen Zyklszeiten... Aber trotzdem.

Abhilfe: Einen Rücksprung setzen damit der Timer im selben Zyklus neu gestartet wird (tu das bitte nicht!) oder du
verwendest die Methode zur Zeitabstandsmessung via SFC64 die ich HIER schon früher gepostet habe. Liest dass den keiner?​

5.) Willst du den FC mehrmals im Programm verwenden?
Dann sind die direkten Zuweisungen der Timer, Merker und Instanzdaten vielleicht auch nicht gerade das beste.

Abschließend muss ich leider sagen dass deine Messung vermutlich nicht viel mit der Realität zu tun haben wird. Leider.
Viellicht liest du dir das ganze Thema nochmal durch, da sind durchaus gute Tipps versteckt. ;)


-------------------------------------------------------------------------
@Onkel: OK mach ich auch. Ich dachte vielleicht du hast noch einen spektakulären Trick im Ärmel. :cool:


Ok danke dir für die Tipps, werde das nochmal überarbeiten. ;)
 
2) Das manuelle abziehen der Impulslänge brauchst du doch nicht oder?
So weit ich weiß reagiert CTU am Eingang CU eh nur auf eine positive Flanke oder? Wo spielt die Impulslänge da rein?
Oder verstehe ich da was nicht richtig? :confused:
Geschweige denn ist die Impulslänge auch nie ein garantierter/perfekter Wert. Oder schon mal was von Verzögerungen an
Digitaleingängen gehört? Bei der 1200 kann man die Zeiten wenigstens verstellen.
Solche Annahmen killen deine Genauigkeit komplett!​


Also wenn dich den ersten Impuls aufnehme und warte bis die positive Flanke des zweiten Impuls kommt, dann hab ich normal doch die ganze Impulslänge des ersten Impulses in der Messung dachte ich?
 
Zurück
Oben