sun_time umrechnen in Lokalzeit mit Sommerzeit

Begonnen von ChristophB, 29. März 2009, 14:28:06

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

ChristophB

Hallo,

ich verwende sun_time zur Rolladensteuerung. Sonnenaufgang und Sonnenuntergang konvertiere ich mittels TOD_TO_DT und UTC_TO_LTIME (DST_ENABLE:TRUE, TIME_ZONE_OFFSET:60) zur Lokalzeit. Jedoch nach der Zeitumstellung auf Sommerzeit wird nicht die Stunde für die Sommerzeit dazuaddiert. In der Anleitung zur Oscat LIB
steht:

Damit SUN_TIME unabhängig vom Einsatzort funktioniert werden alle Zeiten in UTC (Weltzeit) berechnet und können bei Bedarf wieder in Lokalzeit umgerechnet werden.

Hab ich aber bisher nicht hinbekommen. SysRtcGetTime -> UTC_TO_LTIME funktioniert prima. bei sun_time fehlt aber das Datum, daher erkennt UTC_TO_LTIME die Sommerzeit nicht. Wie bekomme ich das hin?

Christoph

hugo

ein tod_to_dt erzeugt dir zawr ein dt (dateTime format) aber das datum des erzeugten wertes ist 1.1.1970 da ja im tod kein datum steckt.

um aus einem tod ein dt mit aktueller zeit / datum zu erzeugen musst du wie folgt vorgehen:

1. erzeuge ein dt mit sonnenaufgang
dt_sunrise := dt_to_date(utc) + sunrise;

2. dann wandle es in lokalzeit um



ChristophB

Will nicht so recht:

dt_sunrise := Datum + TOD_TO_DT(Sonnenaufgang);

Datum liegt schon DATE vor
Sonnenaufgang ist TOD (von sun_time)
dt_sunrise ist DT

Fehlermeldung: Unzulässiger Typ in Parameter 2 von "+": Kann DT nicht in DATE konvertieren
und Unverträgliche Typen: Kann DATE nicht in DT konvertieren

Folgendes habe ich auch probiert:
dt_sunrise := DATE_TO_DT(Datum) + TOD_TO_DT(Sonnenaufgang);
Fehlermeldung: Unzulässiger Typ in Parameter 2 von "+": Kann DT nicht in DT konvertieren

wo ist mein Denkfehler

hugo

du sollst ja auch nicht die tod in ein dt umwandelt, denn dt + dt geht nicht.

du sollst date + tod machen das geht und ergibt eine dt

hugo

sorry ich hab dir schmarrn erzählt.
folgendes funktioniert bei mir:
zu einem dt kannst du eine zeit addieren
vorsicht. aber das dt muss auf 0:00 lauten also ein datum verwenden und in ein dt wandeln sonst addiert der die zeit zur aktuellen tageszeit

dtx := DATE_TO_DT(D#2009-1-1) + TOD_TO_TIME(TOD#13:33);

ChristophB

Ja danke für die Hilfe. Jetzt klappts:

dt_Sonnenaufgang := DATE_TO_DT(Datum) + TOD_TO_TIME(Sonnenaufgang);

Mit den Zeit Variablentypen hab ich immer so meine Probs.

Christoph

firsteleven

Guten Morgen zusammen,
ich bin Neuling also bitte nicht schimpfen ;)
folgendes habe ich programmiert aber versehe das ergebnis nicht, denn es wird doch nicht um 18Uhr Lokalzeit dunkel, geschweige den wird es um 4Uhr30 hell  ???

Der Baustein liefert schon die richtigen Werte:
Zitat von: hugo in 17. April 2007, 09:29:27
hi habe gerade folgenden fall geprüft:

baustein sun_time
- latitude 52.5
- longitude 13.5
- utc dt#2007-04-17-09:00
ergibt folgende ergebnisse
- sun_midday 12:00:50
- sun_rise 4:02
- sun_set 18:08

vergleich internet (volker quaschning) sun_rise 4:30 und sun_set 18:05
vergleich mit geoastro sun_rise 4:05 und sun_set 18:08

Dachte ich, ok umrechnen auf Lokalzeit:

Zitat von: hugo in 29. März 2009, 22:15:41
sorry ich hab dir schmarrn erzählt.
folgendes funktioniert bei mir:
zu einem dt kannst du eine zeit addieren
vorsicht. aber das dt muss auf 0:00 lauten also ein datum verwenden und in ein dt wandeln sonst addiert der die zeit zur aktuellen tageszeit

dtx := DATE_TO_DT(D#2009-1-1) + TOD_TO_TIME(TOD#13:33);

Der Syntax habe ich probiert, aber hat nicht funktioniert da ich nicht weiss wo hin damit.
Dies ist doch eine deklaration also dachte ich in den oberen Teil?

ChristophB

Hallo,

dort wird das Datum mit der Zeit addiert. Kommt also in den Programmteil und nicht in den Deklarationsteil. Die Variable dtx muß aber als DT deklariert werden.

Christoph

firsteleven

Danke, hab das Prinzip nun verstanden, aber ich weiss nicht mit welchem Baustein ich DT und TOD addieren kann: (manchmal ist st wohl doch einfacher)


Mein Hauptproblem liegt aber eigentlich an der errechneten Zeit:
Zitat von: firsteleven in 12. April 2009, 06:56:32
versehe das ergebnis nicht, denn es wird doch nicht um 18Uhr Lokalzeit dunkel, geschweige den wird es um 4Uhr30 hell


hugo

um tod zu dt zu addieren musst du zuerst tod in time wandeln mit tod_to_time
und dann kannst du mittels add dt und time adieren

firsteleven

#10
Danke, die Umrechnung funktioniert nun.
Aber: Mein Hauptproblem liegt an der errechneten Zeit!
Ich versehe einfach nicht, warum es laut dem Programm um 4:30 hell und um18:30 dunkel wird.
liegt es an der Lichtbrechung?


VeronaFeldbusch

Hallo,

du must ja die 2 Stunden dazu rechnen UTC + 2h = MESZ

also 4:39 ist 6:39 MESZ für Sonnenaufgang

und 18:15 ist 20:15 MESZ für Sonnenuntergang

Gruß Verona

firsteleven

Zitat von: VeronaFeldbusch in 15. April 2009, 13:40:56
Hallo,

du must ja die 2 Stunden dazu rechnen UTC + 2h = MESZ

also 4:39 ist 6:39 MESZ für Sonnenaufgang

und 18:15 ist 20:15 MESZ für Sonnenuntergang

Gruß Verona

Ja richtig, danke verona

gravieren