Problem mit CALENDAR_CALC

Begonnen von matt, 05. April 2011, 21:30:42

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

matt

Bibliothek: oscat_basic_331_codesys2.lib
calendar_calc Version 1.5 (2.Februar 2011)

Hallo zusammen,
die Berechnung von calendar.night in CALENDAR_CALC scheint nicht korrekt zu funktionieren. Dies wird gemacht:

   utod := DT_TO_TOD(xcal.UTC);
.
.
   xcal.night := utod < xcal.SUN_RISE OR utod > xcal.SUN_SET;

Soweit ich das sehe, liegen SUN_RISE und SUN_SET aber in der lokalen Zeit vor.

Gruß
matt

hugo

ja du hast völlig recht, das werden wir im nächsten release anpassen

D-Platoon

Auch wenn das Thema schon fast 10 Jahre alt ist, habe ich soeben auch einen Bug entdeckt:
Es steht da in Zeile 32 folgendes
sun(latitude := XCAL.LATITUDE, longitude := xcal.LONGITUDE, utc := DT_TO_DATE(xcal.UTC), H := H);

Der Programmcode wird beim Tageswechsel ausgeführt. Da wir ja aber hier in Deutschland den neuen Tag früher beginnen als UTC, werden die Werte vom Vortag berechnet. Wir hinken also immer um einen Tag hinterher.

Ich hab das bei mir schon geändert. Wäre aber auf jeden Fall auch ein Thema für ein nächstes Release. Dabei die Frage: ist da in absehbarer Zeit was geplant?

peewit

ok

hast du bei UTC dann dein LOKAL-DATE angegeben ?

kannst du auch deine änderung-vorschlag posten



mattsches

Änderungsvorschlag:

SUN_TIME, Zeile 5 der Klarheit halber ändern von
UTC : DATE; (* world time *)
in
DAY : DATE; (* date of day to calculate times for *)

und Zeile 32 in CALENDAR_CALC von
sun(latitude := XCAL.LATITUDE, longitude := xcal.LONGITUDE, utc := DT_TO_DATE(xcal.UTC), H := H);
in
sun(latitude := XCAL.LATITUDE, longitude := xcal.LONGITUDE, day := xcal.LDATE, H := H);

Dann wird der Baustein weiterhin um Mitternacht Lokalzeit getriggert, rechnet aber die Sonnenstandszeiten für den aktuellen Tag und nicht für den Vortag.

D-Platoon

Sorry, hab einige Tage nicht hier rein geschaut.
Aber mattsches hat die Lösung, welche ich auch benutzt hab.
Dann gibt es nur noch zwei Tage im Jahr, an denen die Berechnung um eine Stunde nicht stimmt. Und das sind dann die Tage der Zeitumstellung. Da um Mitternacht berechnet wird und die Zeitumstellung erst später erfolgt, wird dies nicht mehr berücksichtigt.
Das hab ich durch folgenden Code in Zeile 22..24 angepasst:
IF dtemp <> last_day OR XCAL.DST_ON <> bDSTOn THEN
last_day := dtemp;
bDSTOn := XCAL.DST_ON;