Mit Wago SPS und codesys Stromzähler auslesen

linsenpago

Level-1
Beiträge
37
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
[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
 
Zuletzt bearbeitet:
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:
So in etwa. Ich weiß jetzt nicht ob du String dafür verwendest oder Int.
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    14,6 KB · Aufrufe: 229
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.

Zeitumschalter.JPG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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...
 
ich hab mal per handyfernwartung einen screenshot gemacht... ich hoffe man kann etwas erkennen... falls nicht musst du leider bis morgen warten...ImageUploadedByTapatalk1373743023.965644.jpg


Sent from my iPhone using Tapatalk
 
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
 
Hi, meinst du direkt über die Adresse, was zB. "%IX17.0" für den ersten DI auf meiner Klemme wäre?
 
Hallo,

es hat mittlerweile geklappt, das Problem lag hardwareseitig bei der Klemmenkonfiguration. :ROFLMAO: 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
 
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?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
ja, ich würde auch davon ausgehen.. ich hab zwar auch schon was in ST geschrieben, aber da sind meine Kenntnisse sehr begrenzt...
 
Alles klar, hab den Fehler gefunden. In den globalen Variablen war der Gesamtverbrauch einfach noch als DWORD deklariert.
 
Zurück
Oben