# Tages,Vortages,Monats,Jahreszähler programmieren



## Bosga (15 Oktober 2008)

Halli Hallo,
ich bin gerade dabei eine Aufsummierung in Abhängigkeit von der Sys_CLK zu programmieren. (Aufsummierung eines Gewichtes)
Soweit auch alles gut, nur hab ich nun an der Stelle Monatswert das Problem das ich keine festen "Konstanten" wie 24h oder 60sek pro min habe...Es gibt ja Monate mit mehr oder wenige Taage.
Wenn ich nun z.B. den Monat 1 aufsummiere(alle 30 sek) muss ja der aufsummierte Wert wieder auf 0.0 gestellt werden, sobald die Sys_CLK einen neuen Monat meldet. --> Bsp: Monat 2. Dies auch bei Monat 3 usw..
Aber irgendwie hab ich im Moment eine Denkblockade und komm einfach nicht weiter.
Hier mal mein Code 




> FUNCTION_BLOCK FB200  //Aufsummierung Tageswert ->Vortag Monatswert -> Jahreswert
> 
> VAR_INPUT
> Bandwaage {S7_m_c:='true'} :    REAL      ;
> ...


----------



## SPSKILLER (15 Oktober 2008)

hallo,

ich denke das ist so zu umständlich.

Warum liest du nicht DATE&TIME aus?
Da hast du Bytes für Tag, Monat und Jahr.

Diese Bytes kannst du auf Änderung überwachen, und dann deine Aktionen ausführen.

Was für ne CPU benutzt du denn?
Evtl. kannst du das auch über Uhrzeitalarme machen.
Das ist das allereinfachste.

Gruß Micha


----------



## Bosga (15 Oktober 2008)

Hi,
danke für deine Antwort 

Aber schau mal oben, genau das mach ich mit den Bytes. 
Die Bytes sind auf einem DB und von dort aus greife ich dann zu und wandle  in  INT um .  BYTE_TO_INT.DB(X)....
(Int wegen Vergleichsfunktion.Geht ja mit Byte nicht so einfach)
Das funktioniert auch alles super.Bekomme alle Werte.Sekunde,Minute usw...
Nur irgendwie komm ich nicht weiter wie ich Monatsweise aufsummiere und danach bei jedem neuem Monatsanfang den Wert neu auf 0.0 setze..

LG
Bosga


----------



## MSB (15 Oktober 2008)

Willst du am Ende des Jahres auch die 12 Monatswerte?

Ansonsten in etwa so:
IF Monat <> Monat_Last_Cycle THEN
Monatswert:= 0.0 ;
END_IF;

Monat_Last_Cycle := Monat ;

Damit wird bei einem Monatswechsel dein Zähler entsprechend 0 ...

Mfg
Manuel


----------



## SPSKILLER (15 Oktober 2008)

so mein ich das auch.

Wenn im Byte Monat z.B. 3 steht (März) dann ändert sich dieser Wert bis zum 1.April NICHT.

Du brauchst keine Tage zählen.

Genauso beim Tag usw.
Du musst nur die Änderungen der 3 Bytes überwachen, und dann deine Berechnungen ausführen...


----------



## MSB (15 Oktober 2008)

Eine Anmerkung meinerseits noch:
Da du deine Zähler mit Real rechnest, halte ich das bei einem Tageszähler,
spätestens aber Monats / Jahreszähler für relativ ungenau,
das solltest du evtl. noch bedenken und u.U. auf DINT umsteigen, da hast du dann immerhin 10 nutzbare Zahlen, und nicht nur 7 wie bei Real ...

Mfg
Manuel


----------



## hugo (16 Oktober 2008)

in der freien OSCAT libraray findest du verbrauchszähler und verbrauchsstatistik (meter und meter_stat) die genau das machen was du suchst.
die lib ist auch open source schaus dir dort einfach mal an


----------

