oscat.lib > oscat.lib fuer CoDeSys 3

Holiday Array

<< < (5/6) > >>

Marvelous:
Ich finde es auch sehr merkwürdig.

bResult ist True.

Und bei d#2018-04-01 wird mir kein Feiertag mehr angezeigt.
last_activ und ostern wird in dem Holiday Baustein aber mit D#2018-04-01 beschrieben.

mattsches:
Und was kommt raus, wenn du z. B. dResult als Date deklarierst und


--- Code: ---dResult := DATE_ADD(d#2018-04-01, 0, 0, 0, 0);

--- Ende Code ---

ausführst?

Kannst Du bitte mal den Code von DATE_ADD posten? Oder einen Export anhängen. Wie gesagt, ich habe hier nur CODESYS V2.3 am Start.

Welche Steuerung setzt du denn ein?

mattsches:
Hier mal zum Vergleich der Code von DATE_ADD in der Lib für CODESYS V2.3:


--- Code: ---DATE_ADD := UDINT_TO_DATE(DATE_TO_UDINT(IDATE) + INT_TO_UDINT(D + W * 7) * UDINT#86400);
yr := Y + YEAR_OF_DATE(DATE_ADD);
mo := M + MONTH_OF_DATE(DATE_ADD);
dm := DAY_OF_MONTH(DATE_ADD);
WHILE mo > 12 DO
mo := mo - 12;
yr := yr + 1;
END_WHILE;
WHILE mo < 1 DO
mo := mo + 12;
yr := yr - 1;
END_WHILE;
DATE_ADD := SET_DATE(yr, mo, dm);

--- Ende Code ---

DATE_ADD ist eine Funktion und kann daher nicht beobachtet werden (jedenfalls in V2.3). Ich würde daher den Code mal in einen FB oder ein Programm kopieren, mit dem 01.04.2018 füttern und beobachten, was als Ergebnis rauskommt. Wenn das Ergebnis immer noch d#2018-04-01 ist, würde ich das mal mit d#2018-06-30 vergleichen lassen und checken, ob das Ergebnis True ist.

Alles etwas umständlich. Aber mir fällt keine andere Vorgehensweise ein, als das Schritt für Schritt einzugrenzen. Irgendwo muss der Hase ja im Pfeffer liegen.

Marvelous:
Bei
dResult := DATE_ADD(d#2018-04-01, 0, 0, 0, 0);
kommt als Ergebnis
dResult := D#2018-6-30

Bis Zeile 61 in meinem Screenshot müsste alles passen.

DAY_OF_YEAR in Zeile 62 gibt 91 aus.
Sodass bei SET_DATE(2018,4,91) gegeben ist...

[gelöscht durch Administrator]

mattsches:
Logisch, das kann nicht gehen, wenn bei SET_DATE der Monat schon passt aber dann der Tag bezogen auf das Jahr noch draufaddiert wird. Offenbar ist der Code von DATE_ADD in der Lib für CODESYS V3.5 ein anderer als in der für V2.3.  Steht am Ende des Bausteins eine Versions- und Datumsangabe? Bei der Version für 2.3 ist das 1.8/22.03.2011.

Am besten änderst du mal in der Lib den DATE_ADD wie folgt:


--- Code: ---DATE_ADD := UDINT_TO_DATE(DATE_TO_UDINT(IDATE) + INT_TO_UDINT(D + W * 7) * UDINT#86400);
yr := Y + YEAR_OF_DATE(DATE_ADD);
mo := M + MONTH_OF_DATE(DATE_ADD);
dm := DAY_OF_MONTH(DATE_ADD);
WHILE mo > 12 DO
mo := mo - 12;
yr := yr + 1;
END_WHILE;
WHILE mo < 1 DO
mo := mo + 12;
yr := yr - 1;
END_WHILE;
DATE_ADD := SET_DATE(yr, mo, dm);


--- Ende Code ---

Das ist die Version, wie sie in der Lib für V2.3 enthalten ist und bei mir problemlos funktioniert. Wenn das dann tut, sollten wir peewit Bescheid geben, damit die Bibliothek korriert wird.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln