ONTIME und METER_STAT PERSISTENT

Begonnen von good_mike, 29. März 2010, 20:41:45

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

good_mike

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;


hugo

du musst deine bausteine persistent remanent deklarieren

var remanent
   xxx : ontime;
end_var

Tom

#2
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
...


hugo

das ist eine guter vorschlag, wir werden das im nächtes release so einbauen