-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Beiträge - TomB

#1
Bei einer DST Änderung werden die Aufgang- und Untergangszeiten falsch kalkuliert, weil sie um Mitternacht berechnet werden. Sie sollten aber nach dem Zeitwechsel neu aktualisiert werden. Ich schlage folgende Lösung vor:

On DST change the sunrise and sunset times are wrong calculated, because they are computed at midnight. They should be updated after the local time change. I suggest following solution:

FUNCTION_BLOCK CALENDAR_CALC
...
VAR_TEMP
  ...
  old_DST_ON : BOOL;
END_VAR

...
  (* run once per hour *)
  tmp := HOUR(txcal.LTOD);
  IF  tmp <> last_hour THEN
    old_DST_ON := tXCAL.DST_ON;
    tXCAL.DST_ON := DST(tXCAL.UTC) AND txcal.DST_EN;
    IF tXCAL.DST_ON <> old_DST_ON THEN
        // update sun times on DST change
        tXCAL.SUN_RISE := DINT_TO_TOD(TOD_TO_DINT(sun.sun_rise) + tXCAL.OFFSET * 60000 + SEL(G:=tXCAL.DST_ON,IN0:=DINT#0,IN1:=3600000));
        tXCAL.SUN_SET := DINT_TO_TOD(TOD_TO_DINT(sun.sun_set) + tXCAL.OFFSET * 60000 + SEL(G:=tXCAL.DST_ON,IN0:=DINT#0,IN1:=3600000));
        tXCAL.SUN_MIDDAY := DINT_TO_TOD(TOD_TO_DINT(sun.MIDDAY) + tXCAL.OFFSET * 60000 + SEL(G:=tXCAL.DST_ON,IN0:=DINT#0,IN1:=3600000));
    END_IF;
    last_hour := tmp;
  END_IF;
...



Ich benutze OSCAT schon länger und bei jedem DST Wechsel musste ich manuell eingreifen. Hoffentlich kann meine Änderung jemanden hilfreich sein.
I use OSCAT for a long time and at every DST change I had to take a manual action. Hopefully my change can be helpful for someone.