oscat.lib > oscat.lib fuer CoDeSys 3

Holiday Array

<< < (4/6) > >>

mattsches:
Reproduzieren kann ich das bei mir nicht, allerdings habe ich TwinCAT 2/CODESYS V2.3 und nicht V3.5. Aber ich gehe davon aus, dass der Code identisch ist.

Frage: Warum beschreibst Du das Array HOLIDAYS im Laufzeitprogramm und nicht einfach bei der Deklaration, wie z. B. in der Doku beschrieben?


--- Code: ---HOLIDAY_DE : ARRAY[0..29] OF HOLIDAY_DATA := (name := 'Neujahr', day := 1, month := 1, use := 1),
(name := 'Heilig Drei Könige', day := 6, month := 1, use := 1),
(name := 'Karfreitag', day := -2, month := 0, use := 1),
(name := 'Ostersonntag', day := 0, month := 0, use := 1),
(name := 'Ostermontag', day := 1, month := 0, use := 1),
(name := 'Tag der Arbeit', day := 1, month := 5, use := 1),
(name := 'Christi Himmelfahrt', day := 39, month := 0, use := 1),
(name := 'Pfingstsonntag', day := 49, month := 0, use := 1),
(name := 'Pfingstmontag', day := 50, month := 0, use := 1),
(name := 'Fronleichnam', day := 60, month := 0, use := 1),
(name := 'Augsburger Friedensfest', day := 8, month := 8, use := 0),
(name := 'Maria Himmelfahrt', day := 15, month := 8, use := 1),
(name := 'Tag der Deutschen Einheit', day := 3, month := 10, use := 1),
(name := 'Reformationstag', day := 31, month := 10, use := 0),
(name := 'Allerheiligen', day := 1, month := 11, use := 1),
(name := 'Buss und Bettag', day := 23, month := 11, use := 0),
(name := '1. Weihnachtstag', day := 25, month := 12, use := 1),
(name := '2. Weihnachtstag', day := 26, month := 12, use := 1)

--- Ende Code ---

Das muss jetzt nichts mit Deinem Fehler zu tun haben. War nur ein Unterschied, der mir zu meinem Programm aufgefallen ist.

Kannst Du den Deklarationsteil von HOLIDAYS und eine Ansicht mit den Daten des Arrays zur Laufzeit mal posten?

Marvelous:
Danke erstmal für deine Mühen.
Ich habe Holidays Global Deklariert und aus Übersichtsgründen im Laufzeitprogramm beschrieben.
Sollte grundsätzlich jedoch keine Rolle spielen oder?



--- Code: ---VAR_GLOBAL
DateTime: stDateTime;
PULS : stZeit;
TAKT : stZeit;
Kalendar: OSCAT_BASIC.CALENDAR;
Calc_Kalender : OSCAT_BASIC.CALENDAR_CALC;
plrNight : R_TRIG;
plfNight : F_TRIG;
Holidays : ARRAY[0..29] OF OSCAT_BASIC.HOLIDAY_DATA;

END_VAR

--- Ende Code ---

--- Code: ---FOR iDay := 0 TO 29 DO
Holidays[iDay].name := '';
Holidays[iDay].DAY := 0;
Holidays[iDay].month := 0;
Holidays[iDay].use := 0;
END_FOR


iDay := 0;
Holidays[iDay].name := 'Neujahr';
Holidays[iDay].DAY := 1;
Holidays[iDay].month := 1;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Heilig Drei Könige';
Holidays[iDay].day := 6;
Holidays[iDay].month := 1;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Karfreitag';
Holidays[iDay].day := -2;
Holidays[iDay].month := 0;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Ostersonntag';
Holidays[iDay].day := 0;
Holidays[iDay].month := 0;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Ostermontag';
Holidays[iDay].day := 1;
Holidays[iDay].month := 0;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Tag der Arbeit';
Holidays[iDay].day := 1;
Holidays[iDay].month := 5;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Christi Himmelfahrt';
Holidays[iDay].day := 39;
Holidays[iDay].month := 0;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Pfingstsonntag';
Holidays[iDay].day := 49;
Holidays[iDay].month := 0;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Pfingstmontag';
Holidays[iDay].day := 50;
Holidays[iDay].month := 0;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Fronleichnam';
Holidays[iDay].day := 60;
Holidays[iDay].month := 0;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Maria Himmelfahrt';
Holidays[iDay].day := 15;
Holidays[iDay].month := 8;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Tag der Deutschen Einheit';
Holidays[iDay].day := 3;
Holidays[iDay].month := 10;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Reformationstag';
Holidays[iDay].day := 31;
Holidays[iDay].month := 10;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Allerheiligen';
Holidays[iDay].day := 1;
Holidays[iDay].month := 11;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := 'Heiligabend';
Holidays[iDay].day := 24;
Holidays[iDay].month := 12;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := '1. Weihnachtstag';
Holidays[iDay].day := 25;
Holidays[iDay].month := 12;
Holidays[iDay].use := 1;
iDay := iDay + 1;
Holidays[iDay].name := '2. Weihnachtstag';
Holidays[iDay].day := 26;
Holidays[iDay].month := 12;
Holidays[iDay].use := 1;

--- Ende Code ---

[gelöscht durch Administrator]

mattsches:
Ok, das schaut alles in Ordnung aus. Und du hast Recht, das zyklische Befüllen ist kein Problem. Ich mache das nur nicht, um nicht unnötig CPU-Zeit zu verschenken. Aber für dein Problem ist das nicht der Grund, das HOLIDAY-Array ist ja korrekt initialisiert und befüllt.

Hast du mal testweise den HOLIDAY-Baustein separat aufgerufen? EASTER gibt ja das korrekte Datum zurück, wie du schreibst. Aber was macht der HOLIDAY, wenn du ihn zyklisch aufrufst, mit denselben Parametern wie im CALENDAR_CALC?

Marvelous:
Ich habe eine Bedingung beim Holiday_Data  damit nicht in jeden Zyklus beschrieben wird.

Habe nun mal test weise Holiday aufgerufen und mit dem fix Datum 30.06.18 beschrieben ansonsten wie in CALENDAR_CALC.
Da kann man auch ganz gut sehen, dass "last_active" und "ostern" verschieden Daten haben..



[gelöscht durch Administrator]

mattsches:
Wirklich seltsam. Zumindest laut deinem Screenshot schaut es so aus, als würde die Bedingung in Zeile 30 feuern und der Baustein mit Zeile 33 dann abgebrochen. Mit dem Ergebnis Ostersonntag.


Kannst du mal bResult als BOOL deklarieren und folgenden Aufruf testweise mit einbauen?


--- Code: ---bResult := (DATE_ADD(d#2018-04-01, 0, 0, 0, 0) = d#2018-06-30);

--- Ende Code ---

Und was sagt der Holidaytest-FB zu DATE_IN := d#2018-04-01?

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln