# Mit Wago SPS und codesys Stromzähler auslesen



## linsenpago (5 Februar 2013)

*[gelöst] Mit Wago SPS und codesys Stromzähler auslesen*

Hallo!

Ich stehe vor einer für euch Profis sicher leicht lösbaren Aufgabe.

Ich habe in für mein Einfamilienhaus einen Doppeltarifzähler, der einfach nur Hochtarif und Niedertarif trennt. Das gesamt Haus inkl. Wärmepumpe hängen drauf. 

Ich habe nun einen Drehstromzähler mit S0 Ausgang vor die Wärmepumpe gehängt um den Verbrauch der WP aufzuzeichnen und zu überwachen.

Die Impulse werden per DI ausgelesen und mit dem Baustein "Impulszähler (Fb_ImpulseCounter)" der Wago Lib "Building HVAC" bereits erfolgreich eingelesen und weiterverarbeitet...

Ich würde nun gerne diesen Baustein nochmals einsetzen um getrennt den HT und NT zählen zu können die jeweils von 22 - 06 (NT) und 06 - 22 Uhr (HT) laufen. 

Wie kann ich das Signal zu den Zeiten entweder auf den einen und dann wieder auf den anderen Umschalten?

Ich habe irgendwie keinen Baustein dazu gefunden der das macht. Bausteine kann ich verweden und einbauen, aber was eigenes schreiben, da haperts. ;-)

Ich bedanke schon mal im Voraus für eure Hilfe! 

Lg
Alex


----------



## Nost (5 Februar 2013)

Bau den Baustein doch einfach 2 mal ein. Umschalten kannst du dann mit einem SEL Baustein. De je nach Uhrzeit den Impuls an Baustein 1 oder 2 weiter gibt.


----------



## linsenpago (5 Februar 2013)

Genau das habe ich ja geschrieben...

Ich würde den Impulszähler gerne ein zweites mal einbauen um HT und NT getrennt zählen zu können.

Um den Impuls dann zu der bestimmten Uhrzeit an Zähler 1 oder Zähler 2 weiterzuleiten fehlt mir der passende Baustein.

OK -  mit einem select Baustein umzuschalten - ist irgendwie klar... wie würde die Schaltung dazu aussehen, damit er immer um 22 oder 06 Uhr umschaltet?

LG
Alex


----------



## Mobi (5 Februar 2013)

So in etwa. Ich weiß jetzt nicht ob du String dafür verwendest oder Int.


----------



## linsenpago (5 März 2013)

Um das Thema abzuschließen:

Ich habe das mit dem Umschalten nun so gelöst indem ich mit dem Baustein "Timecheck" aus der Oscat Bibliothek die Zeit überprüfe und mit einem "AND" einfach die Impulse nur auf einer Seite durchlasse.

Anbei noch ein Screenshot zum ansehen.


----------



## SPS_A (13 Juli 2013)

Hallo zusammen,

da der Thread noch nicht wirklich alt ist und meine Thema in die gleiche Richtung geht, nutze ich einfach mal diesen Thread.

Und zwar möchte ich auch gerne eine Anzahl an Impulszählern in der CoDeSys auswerten. Dazu habe ich die Wago Lib "Building HVAC" runtergeladen und in das Projekt eingefügt. Jetzt bin ich mir bei der Programmierung nicht ganz sicher. Der Impulszähler gibt für 2000 Impulse eine Energie von 1 kWh aus. Ein Impuls dauert 50 ms. Folgende Parameter müssen ja in dem Impulszähler (Fb_ImpulseCounter) belegt werden:

xPulseInput: Hier habe ich die Eingangsvariable der Klemme draufgelegt, zB "Impuls_1"
Impulses per Value: Das wären in dem Fall ja 2000
InitCounterValue: Hier habe ich schon Probleme, eigentlich soll der Counter ja bei Null starten, könnte man dann einfach auf 0 setzen!?
InitPostComma: zB. 2 Nachkommastellen
xInit: Zweites Problem, wie definiere ich denn hier den "Start"!? Eigentlich soll der Counter ja sofort loslegen, wenn eingeloggt und gestartet ist. Hier habe ich die Variable BOOL einfach mal auf True voreingestellt.

Vielleicht zu Anfang die Frage, ob die Parameter so passen? Ich hatte das mal so eingeloggt und geschaut, ob etwas passiert. Leider blieben alle Counter auf 0, auch rPower, der ja zumindest die Momentanleistung anzeigen müsste.

Vielen Dank schon mal für die Hilfe, viele Grüße


----------



## linsenpago (13 Juli 2013)

Hi SPS_A!

Wenn der Impulszähler 2000/kwh ausgibt, dann stimmt der Wert 2000 bei Impulses per Value.

InitCounterValue und InitPostComma sind nur dazu da um den Zähler von einem bestimmten Wert weglaufen zu lassen. (falls du mal dein Projekt gelöscht und neu aufgespielt hast z.b.)

"Start" setzt nur die Werte die du bei den beiden Init Eingängen vorgegeben hast. (der muss nur einmal kurz gepulst werden damit die Werte übernommen werden)

Es könnte sein, da du "Start" auf TRUE gesetzt hast, dass er deswegen nicht zählt, da er ja ständig auf 0 stellen möchte.

Stell "Start" mal auf false, dann müsste es funktionieren.

greets
Alex


----------



## SPS_A (13 Juli 2013)

Hallo, vielen Dank für deine schnelle und ausführliche Antwort.

Ich habe gerade die Start mal überall auf false gesetzt und die Kiste laufen lassen, leider passiert da noch nichts bei den Ausgangsvariablen. Müssen denn noch irgendwelche Sachen dafür programmiert werden prinzipiell? Ich hatte gehofft mit dem Baustein die Programmierung von Taks zu "umgehen" und über den Block alles laufen zu lassen. Oder erfordert der Block noch weitere Sachen die in der Beschreibung nicht drinstehen?

Viele Grüße


----------



## linsenpago (13 Juli 2013)

eigentlich muss diesem baustein nur angegeben werden wieviele impulse eine kwh hat und vorne die impulse reinbekommen...

du bist dir sicher, dass impulse beim baustein ankommen? 

falls nicht könntest du mal einen pulsgenerator (baustein) ranhängen und abwarten was passiert..

wenn ich wieder bei meinem rechner bin, dann kann ich dir ja mal einen screenshot meiner schaltung posten...


----------



## linsenpago (13 Juli 2013)

ich hab mal per handyfernwartung einen screenshot gemacht... ich hoffe man kann etwas erkennen... falls nicht musst du leider bis morgen warten...
	

		
			
		

		
	





Sent from my iPhone using Tapatalk


----------



## SPS_A (13 Juli 2013)

Hi, vielen Dank für die schnelle Antwort wieder und den Screenshot! Ich hatte gerade mal aus der Oscat lib den Pulsgenerator reingepackt, damit hats geklappt. Das scheint ja, als ob dann echt wie du sagst keine Impulse ankommen. Ich kann leider heute und morgen nicht an die Anlage dran um nachzuschauen. Ich hab heute mittag aber auf jeden Fall die LEDs hin und wieder blinken gesehen. Jetzt lief die Messung mehrere Stunden und alle Zähler waren auf 0, aber auf jeden Fall wurde an manchen Stellen Energie verbraucht da die Anlage läuft. Ich habe dazu einfach in der Klemmenkonfiguration der DI-Klemme (16fach) die Variablen "Impuls1", "Impuls2" usw. gegeben. Diese müssten dann doch direkt als globale Variablen erkannt werden, oder? Jetzt versteh ich echt gar nicht woran das liegen kann.....

Viele Grüße


----------



## linsenpago (13 Juli 2013)

also ich habe den DI direkt dem Baustein übergeben. Ich habe keine Variable verwendet.


Sent from my iPhone using Tapatalk


----------



## SPS_A (13 Juli 2013)

Hi, meinst du direkt über die Adresse, was zB. "%IX17.0" für den ersten DI auf meiner Klemme wäre?


----------



## SPS_A (23 Juli 2013)

Hallo,

es hat mittlerweile geklappt, das Problem lag hardwareseitig bei der Klemmenkonfiguration.  Vielen Dank nochmal für die Hilfe.

Jetzt würde ich gerne den Energieverbrauch in eine Variable schreiben. Bei "dwCounterValue" kommt ja der Energieverbrauch an. Diesen kann man dann ja in REAL umwandeln. Ich würde aber natürlich auch ganz gerne die Nachkommastellen mitnehmen, die ja anscheinend in "rPostComma" gespeichert werden. Wie könnte man denn vorgehen, um die beiden "unabhänigen" Real Werte in eine REAL-Zahl mit zB. 3 Nachkommastellen zu wandeln?

Viele Grüße


----------



## linsenpago (23 Juli 2013)

nach dem umwandeln in real einfach mit einem "add" zusammenrechnen.. so habs ich gemacht...


Sent from my iPhone using Tapatalk


----------



## SPS_A (24 Juli 2013)

Hi, vielen Dank für die Antwort. Ich habe folgendes versucht:

Umwandlung DoubleWord in Real:

Impuls_1_1 := DWORD_TO_REAL ( Impuls_1.dwCounterValue) ; (Das ist dann die Stelle vor dem Komma in REAL)

Impuls_1_gesamt := Impuls_1_1 + Impuls_1.rPostComma ; (Also die Stelle vor dem Komma in REAL plus die Nachkommastelle in REAL)

Dabei kommt folgende Fehlermeldung:

"Unverträgliche Typen: Kann REAL nicht in DWORD konvertieren." Da verstehe ich nicht wieso er das wieder konvertieren will? Oder ist bei Impuls_1_gesamt der ADD Befehl so nicht richtig?


----------



## linsenpago (24 Juli 2013)

Hi!

Also bei mir sieht das ganze so aus und funktioniert einwandfrei... (siehe screenshot)


----------



## SPS_A (24 Juli 2013)

Hallo, vielen Dank für die Antwort. Ich muss das ganze leider in ST schreiben, wahrscheinlich liegt dort dann mein Fehler. Die Variable "WP_Verbrauch_HT_kWh" ist bei dir dann auch vom Typ REAL oder? Dann müsste mein Vorgehen doch deinem gleich sein, nur halt in einer anderen Sprache.


----------



## linsenpago (24 Juli 2013)

ja, ich würde auch davon ausgehen.. ich hab zwar auch schon was in ST geschrieben, aber da sind meine Kenntnisse sehr begrenzt...


----------



## SPS_A (24 Juli 2013)

Alles klar, hab den Fehler gefunden. In den globalen Variablen war der Gesamtverbrauch einfach noch als DWORD deklariert.


----------



## SPS_A (24 Juli 2013)

Ein kleiner Nachtrag noch:

Ich möchte natürlich gerne, dass der Gesamtenergieverbrauch auch nach dem Ausloggen und Neustarten etc. erhalten bleibt und weiter aufsummiert wird. Dazu habe ich den Gesamtverbrauch als "VAR_GLOBAL RETAIN PERSISTENT" deklariert. Wenn ich nun aber etwas an dem Projekt änder und neu übersetze etc. sind die Werte wieder resettet. Ich habe nun testweise auch den "dw.CounterValue" und "r.PostComma" als "VAR_GLOBAL RETAIN PERSISTENT" deklariert und den Gesamtenergieverbrauch daraus berechnend. Trotzdem werden wie Werte teilweise wieder resettet. Daher die Frage wie du das gelöst hast?


----------



## D4K!ZZ4 (1 Juni 2014)

Hallo Gemeinde,

ich wollte nicht extra einen neuen Thread dafür aufmachen da meine Frage in Richtung des FB_ImpulesCounter geht.

Und zwar verstehe ich die Logik hinter dem Baustein noch nicht ganz.

Ich verwende die neuere Version davon. Screenshot im Anhang.

Meine beiden Zähler haben die Werte 250 Imps / Kwh und 1000 Imp / Kwh.
Mit welchen Werten muss ich dann den FB versorgen?

Ändern die 250 Impulse was an der .wBaseTimePeriod?
Bzw. was sagt die .wBaseTimePeriod überhaupt genau aus?

Welche Formel steckt hinter der Berrechnung?

Gibt es eine Möglichkeit den Code des Fb's anzuschaun oder ist der KnowHow geschützt?
Mit Codesys und Wago arbeite ich erst seit ein paar Tagen an meinem Privatprojekt hier.

Vielen Dank schon mal.

Grüße Chris


----------

