Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Funkuhr Sommerzeit/Winterzeit Kategorie: C-Control I V1.1 (von Dietmar, Homepage - 4.03.2006 19:18)
 Als Antwort auf Re: Funkuhr Sommerzeit/Winterzeit von Peter Grzeschik - 3.03.2006 13:44
Dietmar nutzt:  CC1-M-Unit V1.1, Advanced CC1-Unit, Open-Micro, Open-Mini
Hallo miteinander

Soweit ich das erkennen kann, arbeitet der Algorithmus in der Tat nur teilweise korrekt. Die mitteleuropÀische Sommerzeit beginnt jeweils am letzten Sonntag im MÀrz um 2 Uhr mitteleuropÀischer Zeit (MEZ). Deshalb werden mittels

IF ((MONTH = 3) AND ((DAY-DOW)<25)) THEN RETURN

alle Tage im Monat MĂ€rz ausgefiltert, die noch Normalzeit haben. Um zu prĂŒfen, ob der Algorithmus bis hierhin korrekt arbeitet, reicht es, die letzten zwei Wochen im MĂ€rz zu betrachten. Der letzte Sonntag im MĂ€rz kann auf den 25. bis 31. Tag fallen. Im Folgenden sind alle Tage mit Sommerzeit durch eckige Klammern "[]" eingeschlossen. Alle Tage außerhalb dieser Klammern haben Normalzeit und deshalb sollte die Subroutine an diesen Tagen mit dem RETURN im einzeiligen IF beendet werden.

Betrachtung der letzten Tage im Monat MĂ€rz:

 Mo Di Mi Do Fr Sa So   Mo Di Mi Do Fr Sa So
 24 25 26 27 28 29[30   31]
 23 24 25 26 27 28[29   30 31]
 22 23 24 25 26 27[28   29 30 31]
 21 22 23 24 25 26[27   28 29 30 31]
 20 21 22 23 24 25[26   27 28 29 30 31]
 19 20 21 22 23 24[25   26 27 28 29 30 31]
 18 19 20 21 22 23 24   25 26 27 28 29 30[31]

  1  2  3  4  5  6  0    1  2  3  4  5  6  0   DOW nach MOD 7
  1  2  3  4  5  6  7    1  2  3  4  5  6  7   DOW im DCF77-Signal

Die nĂ€chste Umstellung auf Sommerzeit findet am Sonntag, dem 26. MĂ€rz 2006, um 2 Uhr MEZ statt: Die Uhren werden eine Stunde vorgestellt auf 3 Uhr MESZ. DOW sollte an diesem Tag 0 sein und DAY gleich 26. (DAY-DOW) ist gleich 26 und (DAY-DOW)<25 ist korrekterweise nicht erfĂŒllt. Das gleiche Ergebnis erhĂ€lt man an allen folgenden Tagen bis zum Freitag, dem 31. MĂ€rz. Am Samstag zuvor, dem 25. MĂ€rz ist (DAY-DOW) = (25-6) gleich 19, weshalb die Subroutine korrekt mit dem RETURN beendet wird. Das gleiche Ergebnis an den Tagen zuvor.

Problematisch könnten höchstens die ersten Tage im MÀrz sein: Am Samstag, dem 4. MÀrz, ist (DAY-DOW) = (4-6) gleich -2, also negativ. Alle Micro-Versionen können aber nur mit positiven 8-Bit-Zahlen operieren. Deshalb ergibt sich hier der Wert 254.

Um anschließend nur den Sonntag zu betrachten, wird mittels

IF ((MONTH = 3) AND ((DAY-DOW)=25) AND (HOUR<3)) THEN RETURN

auf (DAY-DOW)=25 abgefragt. Das ist offensichtlich nicht richtig, denn um ein korrektes Ergebnis am 26. MĂ€rz 2006 zu erhalten, mĂŒĂŸte die DOW-Variable an diesem Sonntag den Wert 1 und nicht 0 haben.

Ansonsten sollte man niemals direkt mit den Zeitvariablen arbeiten, sondern sie in eigenen Variablen zwischenspeichern. Denn die Zeitvariablen können sich wÀhrend der Abfrage verÀndern, da die Uhr weiterlÀuft.

Viele GrĂŒĂŸe
Dietmar

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten:

Re: Funkuhr Sommerzeit/Winterzeit (von Peter Grzeschik - 4.03.2006 20:11)