Stromzähler mit Wago auslesen

Also ich glaube Rene seine Lösung ist mir etwas zu aufwändig, vor allem weil ich da eher noch der Neuling in Sachen Wago Programmierung bin.

Wenn ich jetzt den Baustein FB_ImpulseCounter nehme, dann habe ich doch am Ausgang (dwCounterValue) einen Wert. Ist das die Anzahl der gezählten Impulse oder schon ein errechneter/gezählter Verbrauchswert … gleich dem normalen Stromzähler?
Und was fange ich mit dwInitCounterValue an, was ist mit Initialwert gemeint? Kann ich damit z.B. den aktuellen Zählerstand vom Stromzähler vor geben und der ImpulseCounter rechnet dann die gezählten Impulse dazu und gibt mir dann quasi den gleichen Zählerwert aus wie der normale Zähler??

Könnte sich da mal jemand erbarmen und mir ein Beispiel aufzeigen? Ich möchte doch nur den Zählerstand nach IPS bekommen … :confused:

Gruß
Jens

auf CodeSys Seite ist das wohl alles so, wie Du es beschrieben hast
den Eingang dwInitCounterValue habe ich auf 0 gelegt, aber lt. Beschreibung würde ich den genauso verstehen, wie Du es siehst

in IPS habe ich das dann wie im Anhamg zu sehen eingebaut

und hier noch mein Skript

<?
 $val = GetValue(50457 /*[Energie\Counter 1\Value]*/);
 $com = GetValue(49004 /*[Energie\Comma 1\Value]*/);
 $all = $val + $com;
 if($all > 1) {
  SetValue(49729 /*[Energie\Gesamtverbrauch 1\Value]*/,$all);}
?>

Gruß
auch Jens

Ähm … vielleicht ne blöde Frage, aber die 3 Ausgangswerte … wie mache ich das in Codesys, so das ich die dann von IPS aus lesen kann? Schreibe ich die Werte auf einen Merker? Und muss ich die irgendwie umwandeln bzw. wie muss ich die deklarieren??

Jens

ja, alle auf einen Merker
wie du in meinem Screenshot vom Objektbaum siehst, sind dort drei Instanzen vom Typ Modbus Adresse
die lesen die drei Merker aus

@Jensen

Ich glaube du hasst mich falsch verstanden, ich meinte + und - am Zähler (S0-Bus). Habe ich dich richtig verstanden, das ich dann einfach an + vom Zähler 24V anschließe und mit dem - dann an die Wago klemme gehe.

mfg
Waeze

Ich habe hier 10 S0 Zähler an DI Klemmen. Für jede Klemme läuft ein Task, der Eventgesteuert einen Merker hochzählt, wenn der DI auf AN geht.
Die Merker werden dann vom PC Programm ausgelesen und wieder zurückgesetzt.
Der Task merkt sich noch die Zeit die zwischen zwei Impulsen vergangen ist und berechnet so den momentanen Verbrauch in W.
Man muss nur bei den S0s darauf achten, dass die möglichst viele Impulse ausgeben, dass das gescheit funktioniert. Habe die Zähler von Eltako im Einsatz und bin damit sehr zufrieden.
Die Wago S0 Bausteine waren mir auch zu teuer.

Hab ich das richtig verstanden, ihr geht mit den vollen 24 Volt über den S0 Ausgang?
Sind die nicht eingentlich für 5V ausgelegt? Oder ist der S0 Ausgang verschiedener Geräte nicht gleich, und ihr habt welche die das abkönnen, also S0 nicht genormt?

Danke und Gruß

Jan

wenn man wikipedia glauben kann ist der S0 in der DIN43864 genormt.

als Transistor bzw. Optokopplerausgang (Flußrichtung beachten, deshalb auch + und - Anschluß)

U max. 27V DC
I max 30 mA

Sicherer ist ein potentialfreier Kontakt z.B. Reedsensor

René

@waeze
richtig - einfach an + 24V anschließen und mit - dann an die Wago klemme gehen
ich war mir auch nicht sicher, aber die DI Klemme scheint einen hohen Innenwiderstand zu haben, der den Strom ausreichend begrenzt

wie rene ausführt, dürfen die 30mA nicht überschritten werden

hab’ erst einen Zähler angeschlossen, aber der funktioniert seit einer Woche prima

@Andiadm
Kannst Du dazu eine CodeSys Projektdatei hochladen, daß man sich das mal anschauen kann ? Ich bin kein Experte bei der SPS-Programmierung, aber ist ein eigener Task für jeden Zähler nicht etwas Overkill ? Der Fb_ImpulseCounter müßte ja eigentlich alles machen, was Du beschreibst, oder fehlt da was?

Gruß Jens

Ich kenne diesen Collector nicht, deswegen kann ich dazu nix sagen.
Ob ein Task Overkill ist, hängtvon Deiner Zykluslänge ab, ich finde das so eben hübscher.
Habe mein Projekt mal angehängt.

Wendel_Garten_Verbr_HKEGOG_PUMP_WW_1_Strom6_ALLNET.rar (19.3 KB)

Hallo andiadm,
also wenn ich mir das so anschaue, dann gefällt mir die ereignisgesteuerte Lösung immer besser, ein Programm für alle Zähler, sehr übersichtlich.
Die Ausnahmen bei 6, 12 und 18 und die wBaseline Variable habe ich noch nicht verstanden.
Gruß Jens

Hallo Jens,
das sind die Sicherungen wo keine Dauerverbraucher dranhängen. Um die Leistung korrekt anzuzeigen muss sich das Ding merken, dass das Sicherungen sind, wo es 0 Verbrauch geben kann. Da die Leistung bei jedem Impuls neu berechnet wird würde sie wenn 1 Tag kein Impuls käme falsch sein. Hat aber mit der Verbrauchsaufzeichnung nix zu tun, nur mit der Leistungsanzeige.
Wenn mann sich mit dem Codesys ein wenig beschäftigt stellt man fest, dass das unheimlich mächtig ist.

aha, das ist damit auch geklärt, danke.
apropos unheimlich mächtig, da hast du wohl Recht, ich fühle mich meistens unheimlich mächtig überfordert, bei den vielen Möglichkeiten :confused:
aber es ist schön, wenn man immer wieder Neues lernen kann

Ich muss das hier noch mal hoch holen … zur Zeit versuche ich mal wieder meinen S0 Zähler über die Wago einzulesen.
Mit dem FB_Impulsecounter Baustein scheint das auch teilweise zu funktionieren … allerdings verliere ich regelmäßig Impulse …

Mein Zähler liefert 100 Impule pro kwh … und als kleinsten Wert habe ich jetzt 0.1 vorgegeben … ist das so richtig oder muss ich auf 0.001 gehen?

Gruß
Jens

Ich habe als kleinsten Wert 0.001 eingestellt.

aus Doku:
Minimalwert für die Anzeige der Leistung
am Ausgang “rPower”
Wertebereich: 0.001 W – 1 W
Voreinstellung = 0.001 W

Eigentlich hatte ich den Wert so verstanden, daß bei Berechnung eines kleineren Werts als dem eingestellten an rPower 0 ausgegeben wird.
Sicher bin ich mir allerdings nicht.

Wie stellst Du fest, daß Du Impulse verlierst ?

Gruß
auch Jens

Moin :wink:

Wie ich das fest stelle?
In dem ich meine Werte in IPS und auf dem Zähler vergleiche …
Irgendwie zählt IPS nicht richitg weiter.

So … ich noch einmal …

Möglicherweise läuft es jetzt, nachdem ich den Baustein mal neu eingefügt habe … irgendwie hat der alte Baustein rumgezickt !?

Hallo Tetrapack

folgende Einstellungen solltest du drin haben :

wImpulsesPerValue :100 ( 100 Ipule pro KW )
rSmallestPerformance :0.001 ( Für 3 Stellen nach dem Komma 0.000KW )

Wie kann man die Zählerstände eigentlich zwischenspeichern um nach einem Reload oder Stromausfall nicht die Zählerstände zu verlieren ?
Sind ja 2 Variabeln da :
dwInitCounterValue
rInitPostComma

Hat da einer ne Idee ?
Gruß Sascha

Damit die Variablen einen Neustart und einen Programmload überleben, diese als Retain Persistent deklarieren.
Ich hab’ meinen Funktionsblock zum Impulse zählen mal angehangen.
Gruß
Jens

IMPULSECOUNTER.zip (791 Bytes)

Öhm … wie deklariert man die denn??
Ich dachte das laut Beschreibung des Bausteins die Werte eh gespeichert werden!?

Die 100 Impulse und auch die 0.001 habe ich soweit konfiguriert … komischerweise gehen aber Impulse verloren… denn nach 1 Tag unterscheiden sie die Werte vom normalen Zähler bzw. S0 Zähler deutlich von den Werten die aus der Wago ausgelesen werden. Ich habe jetzt erst einmal den DI gegen einen nagelneuen ausgetauscht … falls das auch nicht klappen sollte muss ich wohl mal einen weiteren S0 Zähler testen … :confused:

Das hier ist der Funktionsbaustein aus der Bibliothek:

FUNCTION_BLOCK Fb_ImpulseCounter
(*************************************************************************************
WAGO Kontakttechnik GmbH & Co. KG Hansastr. 27 32423 Minden(Westf.)
Tel. +49571/887-0

Function: The Fb evaluate the impulses of a meter.
(Auswertung der Impulse von Verbrauchszählern)

Version: 1.0
Date: 30.01.2007
**************************************************************************************)
VAR_INPUT
xImpulse : BOOL; (Impulse input || Impulseingang)
dwImpulsesPerValue : DWORD:=1000; (Counter constant || Zählerkonstante)
rSmallestPerformance : REAL:=0.001; (Minimum value for the display of the power at the output „rPower“ || Minimalwert für die Anzeige der Leistung am Ausgang „rPower“)
dwInitCounterValue : DWORD; (Initial value for the output „dwCounterValue“ || Initialwert für den Ausgang „dwCounterValue“)
rInitPostComma : REAL; (Initial value for the output „rPostComma“ || Initialwert für den Ausgang „rPostComma“)
xInit : BOOL; (Initialization of the counter (positive edge) || Initialisierung des Zählers (positive Flanke))
END_VAR
VAR_OUTPUT RETAIN
dwCounterValue : DWORD:=0; (Calculated consumption||Berechneter Verbrauchswert)
rPostComma : REAL:=0; (Value of the calculated consumption after the comma || Nachkommawert des berechneten Verbrauchswertes)
END_VAR
VAR_OUTPUT
rPower : REAL; (Currently needed power || Aktuell benötigte Leistung)
END_VAR

VAR RETAIN
Impulszaehler : REAL;
END_VAR
VAR
Pulsgeber : TON;
t_Max_laufzeit : TIME;
r_Max_laufzeit : REAL;
rZeitZwischen2Impulse : REAL;
Init : R_TRIG;
Impuls : R_TRIG;
END_VAR

Jens