easy-forum
Deutsch - Software => XSoft-CoDeSys => Thema gestartet von: radar17892 am Mai 12, 2012, 15:45:58 Nachmittag
-
Hallo
Kann man so einen superremanenten Zähler schreiben, oder ist eine Speicherung auf Speicherkarte unumgänglich?
Eventuell hat jemand ein Beispiel.
Meine bisherige Lösung:
FUNCTION_BLOCK WM_Zaehler
VAR_INPUT
Takt: BOOL; (*Zähltakt*)
END_VAR
VAR_OUTPUT
QV: DWORD; (*Zählerwert in kWh*)
END_VAR
VAR
TR1: R_TRIG; (* 1000kW Flanke *)
TR2: R_TRIG; (* 1000MW Flanke *)
END_VAR
VAR RETAIN PERSISTENT
C1: CTU; (*kW Zähler*)
C2: CTU; (*MW Zähler*)
C3: CTU; (*GW Zähler*)
END_VAR
VAR
_ImpVar_422_21: DWORD;
_ImpVar_422_23: DWORD;
_ImpVar_422_7: DWORD;
_ImpVar_422_9: DWORD;
_ImpVar_422_11: DWORD;
_ImpVar_422_12: DWORD;
END_VAR
Programmteil
CAL C1(CU := Takt, RESET := TR1.Q, PV := 1000)
CAL TR1(CLK := C1.Q)
CAL C2(CU := TR1.Q, RESET := TR2.Q, PV := 1000)
CAL C3(CU := TR2.Q)
CAL TR2(CLK := C2.Q)
LD C3.CV
WORD_TO_DWORD
ST _ImpVar_422_21
LD _ImpVar_422_21
MUL 1000000
ST _ImpVar_422_23
LD C2.CV
WORD_TO_DWORD
ST _ImpVar_422_7
LD _ImpVar_422_7
MUL 1000
ST _ImpVar_422_9
LD _ImpVar_422_23
ADD _ImpVar_422_9
ADD _ImpVar_422_12
ST _ImpVar_422_11
LD _ImpVar_422_11
ST QV
LD C1.CV
WORD_TO_DWORD
ST _ImpVar_422_12
LD TRUE
Gruß Thomas
-
Hallo
Nach ein bisschen überlegen und testen hab ich es nun so gelöst:
FUNCTION_BLOCK Zaehler
(* Z_Wert ist in GLOBAL_VAR persistent remenent
Takt von Janitza 1Imp / kWh *)
VAR_INPUT
Takt: BOOL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
Z_Flanke: F_TRIG;
END_VAR
_______________________________________________
CAL Z_Flanke(CLK := Takt)
LD Z_Flanke.Q
NOT
JMPC Sprung
LD Z_Wert
ADD 1
ST Z_Wert
Sprung:
return
-
Ich denke die Speicherung auf die Speicherkarte ist unumgänglich, da die Aufgezeichneten Daten bei CPU Tausch so verloren gehen.
Allerdings müssen die Daten dann von der Speicherkarte wieder zurück gelesen werden.
Hat dafür jemand ein Beispiel?
-
Hallo Ole,
das ständige schreiben auf die Karte sollte vermieden werden. Man könnte den Wert um 24:00 Uhr jeweils abspeichern.
Den aktuellen Zählerstand vom eigentlichen Zähler, nach CPU-Tausch, wieder im Programm zu hinterlegen ist das kleinste Problem. Bei meiner Lösung force ich die Variable Z_Wert kurz mit dem richtigen Wert vom Janitza und fertig ist der Abgleich.
Ein zurücklesen von der Karte macht da keinen Sinn, weil wärend des CPU Ausfalls der eigentliche Zähler weiter läuft und die Werte nicht mehr übereinstimmen.
Gruß Thomas
-
Hallo radar17892,
Das Programm hört sich gut an, meine Frage da ich mich nicht so gut aus kenne .
Mit welcher Easy funktioniert das?
Funktioniert das auch mit dem Gaszähler (Reedkontakt 100 imp =1m³ Gas hab ich schon)
Danke für die Hilfe!
Gruß
E-Herry
-
Hallo E-Herry,
das sollte mit jeder Codesys Steuerung funktionieren. es sind keine Speziellen Bausteine verwendet.
Beachten sollte man die Impulslänge, sie sollte länger als die Zykluszeit sein.
Gruß Thomas