ich besitze diese Baugruppe zwar nicht, möchte mich aber an der Problemlösung beteiligen.
Unter WAGO.COM>Gebäudetechnik-Portal>Downloads>Dokumentation>WAGO-System750>Sonderklemmen findest du das Handbuch zu dieser Baugruppe.
Unter Punkt 2.1.1.7 Datentransfer ist zu lesen:
Mit dem Steuer- und Statusbyte erfolgt die Steuerung des Zählers.
• Zähler setzen:
Wird Bit 5 im Steuerbyte gesetzt, wird der Zähler mit dem 16 Bit Wert der Ausgangsbytes 0 und 1 geladen. Solange das Bit gesetzt ist, wird der Zähler angehalten und der Ladewert bleibt erhalten. Das erfolgreiche Laden des Zählers wird mit Bit 5 im Status-byte gemeldet.
Damit zu deinem Problem:
if IMPZ1 >= 30 then
summe:=summe+1;
Bis dahin OK.
Der Zähler 1 wird innerhalb der IF-Abfrage über das Steuerbyte C0 durch "Zähler setzen" auf Aktualwert-30 gesetzt. Damit dürften dann keine Impulse mehr verloren gehen.
Den neuen Zählersetzwert in die Ausgangsdaten D0, D1 von Zähler 1 eintragen.
D1 D0 (neu) := D1 D0 (alt) minus 30
Weil immer nur Byte D0 verändert wird, reicht es, nur dieses zu aktualisieren.
D0 := D0 – 30;
Im Steuerbyte C0 mit Bit 5 (Zähler setzen) das Setzen anstoßen. Alle anderen Bit sind 0 und damit ist zu programmieren
C0 := 32; ( entspricht 0010 0000 )
END_IF;
Im Statusbyte S0 Bit 5 erfolgt nun die Rückmeldung der Zählerklemme (Zähler 1 gesetzt).
Danach Bit 5 (Zähler setzen) im Steuerbyte C0 zurücksetzen.
Programm hierfĂĽr:
IF S0 = 32 then C0 := 0; END_IF; ( entspricht RĂĽckmeldung 0010 0000 )
Der gesetzte Zählerwert erscheint nun als Startwert, von dem aus weitergezählt wird, bis das ganze Spielchen neu beginnt.
Damit ergibt sich das Gesamtprogramm zu:
if IMPZ1 >= 30 then
summe:=summe+1;D0:=D0–30;C0:=32;
END_IF;
IF S0 = 32 then C0 := 0; END_IF;
Ob und wie die Variablen C0, D0, D1 und S0 anders zu bezeichnen sind, weiss ich leider nicht. Notfalls WAGO fragen.
Ansonsten toi, toi, toi
GruĂź Norbert
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich werde sie alle in aller Ruhe mal durchspielen.
Die Endloszählvariante ist wahrscheinlich eine gute Idee.
if IMPZ1 >= 30 then
summe:=summe+1;
Dabei ist mir noch aufgefallen, dass diese Anweisung Quatsch ist. Denn wenn die Abfrage erst bei Zählerstand 33 erfolgt, hat die Erfassung 3 Impule unterschlagen.
Der Mitarbeiter bei der WAGO Hotline konnte mir ĂĽbrigens auch nicht weiterhelfen.
Es wäre viel einfacher gewesen, wenn die Baugruppe nur bei einer steigende Flanke ein Nullstellen durchführt.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich möchte die Impule einer Durchflussmessung erfassen. Dazu verwende ich die Baugruppe 750-638.
Bei 30 Impulsen soll eine Variable um einen Liter erhöht werden.
if IMPZ1 >= 30 then
summe:=summe+1;
end_if
Das funktioniert soweit ganz gut, nur muss ich anschlieĂźend einen RĂĽcksetzimpuls auf die Impulsbaugruppe geben. Und hier habe ich ein Problem.
Folgende Anweisung funktioniert so natĂĽrlich nicht, da nur der letzte Befehl ĂĽbernommen wird.:
RESETZĂ„HLER:=TRUE;
RESETZĂ„HLER:=FALSE;
jedoch möchte ich keinen weiteren Zyklus mit einer resetteten Zählbaugruppe abwarten, da mir Impulse verlohren gehen.
Ich bin fĂĽr jede Idee dankbar
wie siehts aus, wenn du den IMP zähler direkt nach der anweisung resettest?
if IMPZ1 >= 30 then
summe:=summe+1;
IMPZ1 := 0;
end_if
oder möchtest du ihn auch wischendurch resetten können?
Vielen Dank fĂĽr die schnelle Antwort.
"IMPZ1" ist das Ausgangsbyte der Zählbaugruppe.
D.h. eine Zuweisung von "0" ist nicht möglich.
Anstatt den Zähler zurückzusetzen, kannst du ja auch den letzten Wert abspeichern und diesen dann mit dem aktuellen Wert vergleichen.
IF (IMPZ1 - ImpzAlt) >= 30 THEN
summe = summe +1;
ImpAlt := IMPZ1;
END_IF
NatĂĽrlich musst du dann noch den Fall eines WertĂĽberlaufs abfangen.
Der Code könnte dann so aussehen:
IF IMPZ1 >= ImpAlt THEN (kein Ăśberlauf)
diff := IMPZ1 - ImpzAlt;
ELSE (Impulszähler ist Übergelaufen)
diff := 65535 - ImpzAlt + IMPZ1;
END_IF
IF diff >= 30 THEN
summe := summe +1;
ImpAlt = IMPZ1;
END_IF
ACHTUNG!
Diesen Ausschnitt habe ich nur schnell heruntergehackt, ohne
getestet zu werden
die Baugruppe zu kennen
oder sowas schon einmal verwendet zu haben.
MFG
Benjamin
Hallo,
ich besitze diese Baugruppe zwar nicht, möchte mich aber an der Problemlösung beteiligen.
Unter WAGO.COM>Gebäudetechnik-Portal>Downloads>Dokumentation>WAGO-System750>Sonderklemmen findest du das Handbuch zu dieser Baugruppe.
Unter Punkt 2.1.1.7 Datentransfer ist zu lesen:
Mit dem Steuer- und Statusbyte erfolgt die Steuerung des Zählers.
• Zähler setzen:
Wird Bit 5 im Steuerbyte gesetzt, wird der Zähler mit dem 16 Bit Wert der Ausgangsbytes 0 und 1 geladen. Solange das Bit gesetzt ist, wird der Zähler angehalten und der Ladewert bleibt erhalten. Das erfolgreiche Laden des Zählers wird mit Bit 5 im Status-byte gemeldet.
Damit zu deinem Problem:
if IMPZ1 >= 30 then
Bis dahin OK.
Der Zähler 1 wird innerhalb der IF-Abfrage über das Steuerbyte C0 durch "Zähler setzen" auf Aktualwert-30 gesetzt. Damit dürften dann keine Impulse mehr verloren gehen.
D1 D0 (neu) := D1 D0 (alt) minus 30
Weil immer nur Byte D0 verändert wird, reicht es, nur dieses zu aktualisieren.
D0 := D0 – 30;
C0 := 32; ( entspricht 0010 0000 )
END_IF;
Im Statusbyte S0 Bit 5 erfolgt nun die Rückmeldung der Zählerklemme (Zähler 1 gesetzt).
Danach Bit 5 (Zähler setzen) im Steuerbyte C0 zurücksetzen.
Programm hierfĂĽr:
IF S0 = 32 then C0 := 0; END_IF; ( entspricht RĂĽckmeldung 0010 0000 )
Der gesetzte Zählerwert erscheint nun als Startwert, von dem aus weitergezählt wird, bis das ganze Spielchen neu beginnt.
Damit ergibt sich das Gesamtprogramm zu:
if IMPZ1 >= 30 then
END_IF;
IF S0 = 32 then C0 := 0; END_IF;
Ob und wie die Variablen C0, D0, D1 und S0 anders zu bezeichnen sind, weiss ich leider nicht. Notfalls WAGO fragen.
Ansonsten toi, toi, toi
GruĂź Norbert
Danke für die Lösungen!!
ich werde sie alle in aller Ruhe mal durchspielen.
Die Endloszählvariante ist wahrscheinlich eine gute Idee.
if IMPZ1 >= 30 then
summe:=summe+1;
Dabei ist mir noch aufgefallen, dass diese Anweisung Quatsch ist. Denn wenn die Abfrage erst bei Zählerstand 33 erfolgt, hat die Erfassung 3 Impule unterschlagen.
Der Mitarbeiter bei der WAGO Hotline konnte mir ĂĽbrigens auch nicht weiterhelfen.
Es wäre viel einfacher gewesen, wenn die Baugruppe nur bei einer steigende Flanke ein Nullstellen durchführt.
Hallo,
nochmal zu deinem Problem:
Ich gehe mal davon aus, dass mit Übertrag gezählt wird.
Unter diesen Voraussetzungen dürfte dein Problem mit folgendem Code gelöst sein:
IF IMPZ1>IMPZ1alt THEN
ELSE
END_IF;
Vorteil: Es geht kein Impuls verloren!
GruĂź Norbert