Hallo,
ich bekomme es einfach nicht hin das mein METER_STAT die Werte nach einem Neutart behalten.
Ich denke das das Problem im Bereich des ONTIME Bausteins liegt. Ich bastel schon länger an dem Problem rum und komme einfach nicht weiter. Ich denke ich habe auch die relevanten Forenbeiträge gelesen. Aber.....
Das Problem mit dem Datum ...1970 bei dem METER_STAT Baustein habe ich, so denke ich wenigstens, gelöst.
Ich habe Euch mal die Var. Deklaration und eine Teil des Programms angehängt.
Wäre super wenn jemand eine Tip hätte.
PROGRAM Betriebsstunden
VAR
Betriebsstunden_Brenner: BOOL;
B_Betriebsstunden_Heizungspumpe1requested: BOOL;
Betriebsstunden_Brenner_MIN: UDINT;
Betriebsstunden_Zirkulationspumpe_MIN: UDINT;
ONTIME_Betriebsstunden_Brenner: ONTIME;
ONTIME_Betriebsstunden_Zirkulationspumpe: ONTIME;
ONTIME_Betriebsstunden_Heizungsspumpe1: ONTIME;
ONTIME_Betriebsstunden_Heizungsspumpe1requested: ONTIME;
METER_STAT_Betriebsstunden_Brenner: METER_STAT;
METER_STAT_Betriebsstunden_Zirkulationspumpe: METER_STAT;
B_Heizungspumpe1_Freigabe: BOOL;
Betriebsstunden_Heizungspumpe1_DIV: UDINT;
END_VAR
VAR RETAIN PERSISTENT
Betriebsstunden_Brenner_SEC: UDINT;
Zyklen_Brenner: UDINT;
Betriebsstunden_Zirkulationspumpe_SEC: UDINT;
Zyklen_Zirkulationspumpe: UDINT;
Betriebsstunden_Heizungspumpe1_SEC: UDINT;
Zyklen_Heizungspumpe1: UDINT;
Betriebsstunden_Heizungspumpe1requested_SEC: UDINT;
Zyklen_Heizungspumpe1requested: UDINT;
Betriebsstunden_Brenner_Last_Day : REAL;
Betriebsstunden_Brenner_Current_Day : REAL;
Betriebsstunden_Brenner_Last_Week: REAL;
Betriebsstunden_Brenner_Current_Week : REAL;
Betriebsstunden_Brenner_Last_Month : REAL;
Betriebsstunden_Brenner_Current_Month : REAL;
Betriebsstunden_Brenner_Last_Year: REAL;
Betriebsstunden_Brenner_Current_Year: REAL;
Betriebsstunden_Zirkulationspumpe_Last_Day: REAL;
Betriebsstunden_Zirkulationspumpe_Current_Day: REAL;
Betriebsstunden_Zirkulationspumpe_Last_Week: REAL;
Betriebsstunden_Zirkulationspumpe_Current_Week: REAL;
Betriebsstunden_Zirkulationspumpe_Last_Month: REAL;
Betriebsstunden_Zirkulationspumpe_Current_Month: REAL;
Betriebsstunden_Zirkulationspumpe_Last_Year: REAL;
Betriebsstunden_Zirkulationspumpe_Current_Year: REAL;
END_VAR
ONTIME_Betriebsstunden_Brenner(
IN:=Betriebsstunden_Brenner ,
RST:= FALSE,
SECONDS:=Betriebsstunden_Brenner_SEC ,
CYCLES:=Zyklen_Brenner);
Betriebsstunden_Brenner_MIN:=
Betriebsstunden_Brenner_SEC/60;
METER_STAT_Betriebsstunden_Brenner(
IN:=UDINT_TO_REAL(Betriebsstunden_Brenner_MIN) ,
DI:=SDT_TO_DATE(TimeSTD) ,
RST:=FALSE,
Last_Day:=Betriebsstunden_Brenner_Last_Day ,
Current_Day:=Betriebsstunden_Brenner_Current_Day ,
Last_Week:=Betriebsstunden_Brenner_Last_Week ,
Current_Week:=Betriebsstunden_Brenner_Current_Week ,
Last_Month:=Betriebsstunden_Brenner_Last_Month ,
Current_Month:=Betriebsstunden_Brenner_Current_Month ,
Last_Year:=Betriebsstunden_Brenner_Last_Year ,
Current_Year:=Betriebsstunden_Brenner_Current_Year );
METER_STAT_Betriebsstunden_Brenner_Current_Day_global:=
Betriebsstunden_Brenner_Current_Day;
ONTIME_Betriebsstunden_Zirkulationspumpe(
IN:=Zirkulationspumpe_laeuft_global ,
RST:=FALSE ,
SECONDS:=Betriebsstunden_Zirkulationspumpe_SEC ,
CYCLES:=Zyklen_Zirkulationspumpe);
Betriebsstunden_Zirkulationspumpe_MIN:=
Betriebsstunden_Zirkulationspumpe_SEC/60;
METER_STAT_Betriebsstunden_Zirkulationspumpe(
IN:=UDINT_TO_REAL(Betriebsstunden_Zirkulationspumpe_MIN) ,
DI:=SDT_TO_DATE(TimeSTD) ,
RST:=FALSE ,
Last_Day:=Betriebsstunden_Zirkulationspumpe_Last_Day ,
Current_Day:=Betriebsstunden_Zirkulationspumpe_Current_Day ,
Last_Week:=Betriebsstunden_Zirkulationspumpe_Last_Week ,
Current_Week:=Betriebsstunden_Zirkulationspumpe_Current_Week ,
Last_Month:=Betriebsstunden_Zirkulationspumpe_Last_Month ,
Current_Month:=Betriebsstunden_Zirkulationspumpe_Current_Month ,
Last_Year:=Betriebsstunden_Zirkulationspumpe_Last_Year ,
Current_Year:=Betriebsstunden_Zirkulationspumpe_Current_Year );
METER_STAT_Betriebsstunden_Zirkulationspumpe_Current_Day_global:=
Betriebsstunden_Zirkulationspumpe_Current_Day;
du musst deine bausteine persistent remanent deklarieren
var remanent
xxx : ontime;
end_var
Das Problem beim ONTIME liegt am init-Teil, dort werden beim Start die Zähler genullt. Man könnte doch den Teil so ändern:
IF NOT init THEN
init := TRUE;
last := tx;
cycles := cycles + BOOL_TO_UINT(in);
ms := 0;
ELSIF rst THEN
SECONDS := 0;
CYCLES := BOOL_TO_UINT(in);
ELSIF IN THEN
...
das ist eine guter vorschlag, wir werden das im nächtes release so einbauen