Gibt es jemand, der im S7 schon eine Stromzählerauswertung macht?
Habe hier mehrere Stromzähler mit S0-Bus (Halbleiter-Schalter mit z.B. 400 imp/kWh).
Zur Zeit mache ich die Auswertung mit einem Zähler, welche die Impulse/Minute zählt und daraus die Energie entsprechend berechnet. Ist leider etwas ungenau.
Schöner wäre es, wenn im Niedrig-Energie-Bereich nicht die Impulse, sondern der Abstand der Impulse zueinander ausgewertet werden. Im Hoch-Energie-Bereich sollten dann die Impulse gezählt werden. Die Umschaltung von Impuls-Abstand auf Impuls-Anzahl sollte natürlich automatisch erfolgen.
Hat jemand sowas schon? Gibt´s sowas in der Bibliothek? Kann jemand das entwickeln?
Danke vorab
Gruß
TMHEINE
Hi,
habe mir vor kurzem einen für meinen Minizähler gebaut, allerdings in ST fürTwincat.
Sollte aber sehr leicht zu konvertieren sein...
Gruss
Shrimps
FUNCTION_BLOCK _fbStromzaehler
(* Einen S0-Impuls eines Strommessers lesen:
Liefert 1000 Impulse / KWh, 1Imp= 1Wh *)
VAR_INPUT
bSignal : BOOL; (* Unser S0-Impuls *)
END_VAR
VAR_OUTPUT
rLeistung : REAL; (* Die Momentanleistung zw. 2 Messungen *)
dVerbrauch : DWORD; (* Saldierter Verbrauch in Wh *)
dSignalPeriode : DWORD; (* Zeit in ms zwischen zwei Impulsen *)
dSignalDauer : DWORD; (* Laufzeit des Impulses *)
END_VAR
VAR
tx : TIME; (* Aktuelle Systemzeit in ms *)
tStart : TIME; (* Impulsbeginn *)
tEnde1 : TIME; (* Ende einer Periode *)
tEnde2 : TIME; (* Ende eine einzelnen Impulses *)
bInit : BOOL := TRUE; (* Aller Anfang *)
bFlanke : BOOL; (* Flankenmerker als Ersatz für RTRIG *)
END_VAR
(* @END_DECLARATION := '0' *)
tx := TIME(); (* Zeit merken *)
IF bInit THEN (* Am Anfang: *)
tStart := tx; (* Startzeit einmalig Init *)
bInit := FALSE; (* Init Fertig ! *)
END_IF
IF bSignal AND NOT bFlanke THEN (* Wenn Signal kommt *)
dVerbrauch := dVerbrauch +1; (* Summenverbrauch *)
tEnde1 := tx; (* Periodendauer-Endezeit merken *)
dSignalPeriode := TIME_TO_DWORD(tEnde1) - TIME_TO_DWORD(tStart); (* Delta bilden *)
rLeistung := 3600000.0 / dSignalPeriode; (* Leistung auf WattStunden skalieren *)
rLeistung := DINT_TO_REAL(REAL_TO_DINT(rLeistung * 10)) / 10; (* 1 Stelle nach dem Komma runden *)
tStart := tx; (* Neue Startzeit merken *)
END_IF
IF NOT bSignal AND bFlanke THEN (* Signal fällt ab *)
tEnde2 := tx; (* Endezeit merken *)
dSignalDauer := TIME_TO_DWORD(tEnde2) - TIME_TO_DWORD(tStart);
END_IF
bFlanke := bSignal; (* Merker für Signalflanke *)
END_FUNCTION_BLOCK
Hallo,
soweit ich das erkannt habe, wertest du die Zeit zwischen den Impulsen aus.
Das ergibt bei vielen Impulsen aber eine hohe Fehlerquote (zumindest auf Nicht-Echtzeit-Systemen).
Ich werte es aktuell mit Impulszählern aus, was im hohen Impuls-Bereich genauer ist.
Bei niedrigem Verbrauch und wenig impulsen wäre aber das Impuls-Pausenverhältnis besser und genauer.
Schön wäre es, wenn es einen Baustein geben würde, der beides vereint.
Also bei wenig Verbrauch die Leistung über das Impuls-Pausen-Verhältnis zur rechnen, und bei höherem Verbrauch über die Impulsanzahl/Zeiteinheit.
Daher meine Anfrage...
GRuß
TMHEINE
Den Baustein gibt es direkt von Wago. Er heißt "Fb_ImpulseCounter". Dieser ist zu finden in der Lib Building_HVAC_01.lib.
Viel Erfolg damit.
Hallo,
wäre ja prima, wenn der eine oder andere das zusätzlich implemtiert.
Bei mir kam nur die Impulszeitmessung zum tragen, da mein Testsystem viel zu wenig Impulse pro Minute bringt,
ggf. alle paar Minuten einen Impuls...
Gerne Feedback
PS: Wago-Lib gut und schön aber wenn man (ich) kein Wago hat ist es wenig prickelnd
LG
Shrimps
@shrimps: Schau mal hier: http://www.wago.de/service/downloads/download-suche/index.jsp?q=hvac&x=0&y=0&action=search&frontendId=frontendDownload_cms_de-de&nav=top%2Fdocuments%2Fkategoriede%3Asearch_downloadsDe_label%C7%81f%2Fsearch_downloadsDe_label%2Fbibliotheken%C7%81search_downloadsDe_label%C7%81Bibliotheken&lang=de#appnotedetails1406432852674328993 (http://www.wago.de/service/downloads/download-suche/index.jsp?q=hvac&x=0&y=0&action=search&frontendId=frontendDownload_cms_de-de&nav=top%2Fdocuments%2Fkategoriede%3Asearch_downloadsDe_label%C7%81f%2Fsearch_downloadsDe_label%2Fbibliotheken%C7%81search_downloadsDe_label%C7%81Bibliotheken&lang=de#appnotedetails1406432852674328993)
Danke !
Schau ich mir alles mal in Ruhe an...
BTW: Funktioniert eine LIB von Wago/Codesys auch unter Twincat ?
Ich glaube nicht...
Zitat von: mattsches in 21. April 2016, 13:12:04
@shrimps: Schau mal hier: http://www.wago.de/service/downloads/download-suche/index.jsp?q=hvac&x=0&y=0&action=search&frontendId=frontendDownload_cms_de-de&nav=top%2Fdocuments%2Fkategoriede%3Asearch_downloadsDe_label%C7%81f%2Fsearch_downloadsDe_label%2Fbibliotheken%C7%81search_downloadsDe_label%C7%81Bibliotheken&lang=de#appnotedetails1406432852674328993 (http://www.wago.de/service/downloads/download-suche/index.jsp?q=hvac&x=0&y=0&action=search&frontendId=frontendDownload_cms_de-de&nav=top%2Fdocuments%2Fkategoriede%3Asearch_downloadsDe_label%C7%81f%2Fsearch_downloadsDe_label%2Fbibliotheken%C7%81search_downloadsDe_label%C7%81Bibliotheken&lang=de#appnotedetails1406432852674328993)
Das wird davon abhängen, ob hardwarespezifische Funktionen genutzt werden. Sobald Netzwerkfunktionen mit im Spiel sind, gehe ich nicht davon aus. Aber ein Zählerbaustein? Warum nicht.
Hallo.
Ich muss dieses Thema nochmal aufrollen, da es mich aktuell beschäftigt.
In den Bibliotheken gibt´s ja nix dafür und das o.g. Beispiel von shrimps arbeitet nicht zuverlässig.
Da ist der Verbrauchszähler "Meter" genauer, aber ich würde gerne S0-Signale auswerten.