Step 7 Wandlung DT to

ziede

Level-1
Beiträge
44
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
aich (woltte) den angehaengten Wandlungsbaustein nutzen, musste jetzt aber leider Feststellen das er aktuell nicht korrekt rechnet.
IN_Date: 12076
Jahr: 2022
Monat: 16
Tag: 12076
Wochentag: 3
Schaltjahr: 0
Jahrestag: 389
Kalenderwoche: 56

Durch versuche herausgefunden, dass ab einem IN_Date von 12077 wieder richtig anzeigt.

Koennt ihr mir sagen, wo das Problem liegt?

Mfg
Bjoern Funk
 

Anhänge

  • DT_TO_DA.TXT
    2,6 KB · Aufrufe: 58
Moin,

ohne jetzt weiter überprüft zu haben, liegt der Fehler denke ich direkt in Zeile 2. Ein Jahr hat nur 365 Tage. Schaltjahre werden ja extra betrachtet
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich kann das jetzt gerade nicht überprüfen (obwohl es ja ein Baustein ist den ich mal erstellt habe).
Wenn du dir allerdings den Code anschaust dann wirst du feststellen, dass es keine Möglichkeit gibt dass als Monat 16 errechnet werden kann. Auch für Tag gibt es in dem Code keine Möglichkeit den Wert auszugeben den du übergibst ...
Das macht mich "ein wenig" stutzig ...
Welches Datum ist den 12076 ?
 
12076 / 365 = 33,08. also Jahr 1990 + 33J = 2023
12076 / 366 = 32,99, also Jahr 1990 + 32J = 2022

Da fängt der Fehler an. Habs grad mal in PLCSim gehauen, dann passt das
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn es dann jetzt funktioniert ist es erstmal gut ... trotzdem bin ich mir sicher, nicht ohne Grund durch 366 dividiert zu haben.
Ich nehme also mal an, dass ich da etwas noch nicht korrekt berücksichtigt hatte (über das du früher oder später wieder stolpern wirst).
 
12076 / 365 = 33,08
Ich denke die 366 waren eine Näherung um die zusätzlichen Tage der vergangenen Schaltjahre zu kompensieren, und die war wahrscheinlich "gut genug" für denjenigen der das damals gemacht hat. Natürlich läuft das auch immer weiter auseinander mit größerwerdenem Abstand vom 1.1.1990

Eine Näherung ist nur das - "nahe". Richtig sauber, wärs nur die Tage mitsamt den Schalttagen zu zählen und abzuziehen.

EDIT:
hab nochmal 'n bisschen mit Excel gespielt und wenn die Gleitkommaartithmetik die gleiche wie in deiner S7 ist könnte es so funktionieren:
Wenn du den FC so umänderst, dass er mit den Tagen ab dem 1.1. eines Schaltjahres (z.B. 1992 (-=730)) arbeitet, diese Zahl durch 365,25 mittlere Tage pro 4 Jahre teilst, so würde der FC erst im Jahre 2101 (jeweils mit 1.1. und 31.12. getestet) entgleisen, weil 2100 kein Schaltjahr sein wird. Damit könnte ich leben.

Wahrscheinlich hat's was mit der Unstetigkeit der Tage im Jahr zu tun und dass man mit dem 2 Jahre Offset die Kurve in X Richtung so hinschiebt, dass die Näherung wieder besser passt, aber vielleicht liest ja jemand mit der in Mathematik besser war/ist. ;)
 
Zuletzt bearbeitet:
Das Problem dürfte wirklich die /366 sein, da das eine Näherung ist. Man müsste eigentlich mit einem 4-Jahreszyklus
3 Jahre+ 1 Schaltjahr rechnen, d.h. (4x365)+1 = 1461 Tage, das ist aber weit komplizierter.

Probier mal, die Tage mit 2 Kommastellen als Festpunkt zu rechnen!

Diff_J := DINT_TO_INT(c_Date *100/ 36525) // da 1 Jahr im Mittel 365,25 Tage hat
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nun Ja...
Da gibt's noch ein Problemchen: Das Jahr 2000 war ein "Sonderjahr", da ist das Schaltjahr ausgefallen. Das nächste wäre dann erst wieder 2400.
 
Zurück
Oben