Zahlen in Datum

4Josh

Level-1
Beiträge
54
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo,

kurze frage ich möchte zahlen 1 bis 365 (entsprechen die anzahl von tagen im jahr) den entsprechenden datum zuorden. also ist zum bsp. der 1.1.2011 = 1 und so weiter...

Die zahlen (1 bis 365) kann ich mittels eines sliders verändern. dies dient dazu das ich werte die gemessen wurden mittels sliders anzeigen kann und das entprechende datum!

hoffe ich konnte es einigermaßen gut erklären und das mir wer helfen kann :)

mfg 4Josh
 
bräuchte eigentlich nur den umgekehrten baustein (DAY_OF_YEAR) aus der oscat321.lib wenn es so einen gibt ! den der wandelt das datum in eine Zahl (INT)

hoffe mir kann wer helfen :)

mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist der Code von Oscat, villeicht hilft es dir...


Code:
DAY_OF_YEAR := UDINT_TO_INT((DATE_TO_UDINT(idate) / UDINT#86400) MOD UDINT#1461);
IF DAY_OF_YEAR > 729 THEN
    IF DAY_OF_YEAR > 1095 THEN DAY_OF_YEAR := DAY_OF_YEAR - 1095; ELSE DAY_OF_YEAR := DAY_OF_YEAR - 729; END_IF;
ELSIF DAY_OF_YEAR > 364 THEN
    DAY_OF_YEAR := DAY_OF_YEAR - 364;
ELSE
    DAY_OF_YEAR := DAY_OF_YEAR + 1;
END_IF;


(*
DAY_OF_YEAR := DWORD_TO_INT((DATE_TO_DWORD(idate) - DATE_TO_DWORD(YEAR_BEGIN(YEAR_OF_DATE(idate)))) / 86400) + 1;
*)
 
Das ist der Code von Oscat, villeicht hilft es dir...


Code:
DAY_OF_YEAR := UDINT_TO_INT((DATE_TO_UDINT(idate) / UDINT#86400) MOD UDINT#1461);
IF DAY_OF_YEAR > 729 THEN
    IF DAY_OF_YEAR > 1095 THEN DAY_OF_YEAR := DAY_OF_YEAR - 1095; ELSE DAY_OF_YEAR := DAY_OF_YEAR - 729; END_IF;
ELSIF DAY_OF_YEAR > 364 THEN
    DAY_OF_YEAR := DAY_OF_YEAR - 364;
ELSE
    DAY_OF_YEAR := DAY_OF_YEAR + 1;
END_IF;


(*
DAY_OF_YEAR := DWORD_TO_INT((DATE_TO_DWORD(idate) - DATE_TO_DWORD(YEAR_BEGIN(YEAR_OF_DATE(idate)))) / 86400) + 1;
*)
 
mh... naja brauche genau diesen baustein anders herum ! also ich geben eine zahl und der baustein wandelt es mir in ein datum um !

mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
jaja, scho klar... Es sollte dir nur als Denkanstoss herhalten. Hier nochmals ein umgekehrtes Beispiel...

codesys speichert die datentypen DATE und DT als 32 wert in sekunden seit 1.1.1970.
TIME und TOD wird in millisekunden als 32 Bit wert gespeichert.
Mathematische operationen sind mit diesen datentypen nur bedingt möglich.

du kannst aber alle datentypen entsprechend wandeln:
time_to_udint macht dir aus T#1s exakt den wert 1000 den du dann als udint beliebig teilen oder multiplizieren kannst.

nehmen wir nun an du möchtest die tage aus TIME berechnen dann:
tage := time_to_udint(tx) / 86400000;
ein tag hat 24*60*60 sekunden und nochmals 100 wegen den millisekunden.
das ganze mit auflösung in gleitpunktzahl wäre:
tage := time_to_real(tx) / 86400000.0;

beispiel dt in tage:
tage := dt_to_real(tx) / 86400.0;
ein tag sind 86400 sekunden
(http://www.sps-forum.de/archive/index.php/t-42265.html) -> letzter Post...
 
jo also hab gestern noch bis halb 12 dran earbeitet am ende ... kann es kaum glauben hat es funktioniert hab einfach den baustein date_ADD geommen!
dort bei idate den ersten ersten 2011 eingetragen und bei days den slider von 0 bis 365 eingetragen!
Damit sich das Jahr mit ändert hab ich mir einen kleinen Baustein geschrieben der ein signal gibt wenn ein jahreswechsel stadtgefunden hat. Dieses signal wird durch ein ctu gezählt und der cv wert des bausteins an den date_add weitergegeben !

*ACK*:p
Danke nochmal
 
Zurück
Oben