Hallo Lugge,
uiuiui, da ist aber einiges durcheinander geraten:
[ol]- Du hast einen eigenen Datentyp “HOLIDAY_DATA” deklariert, in dem du dann wiederum als ein Element ein Array des Typs HOLIDAY_DATA deklarierst. Daher der Rekursionsfehler (HOLIDAY_DATA verweist damit auf sich selbst).
- Das Element HOLIDAY innerhalb der Struktur ist das, was du eigentlich als globale Variablen anlegen musst. Allerdings nicht als zwei, sondern als eindimensionales Array. Warum deklarierst du mit [1..3, 0..29] und nicht - wie in der Doku beschrieben - mit [0..29]?
- Der von dir deklarierte Datentyp ist überhaupt nicht erforderlich, die Struktur ist bereits in der OSCAT_BASIC komplett deklariert. → Löschen
- Dasselbe gilt für alle anderen von dir deklarierten Datentypen (CALENDAR, CONSTANTS_*, SDT) → Ebenfalls löschen
- Eine Deklaration von GVL.HOLIDAYS kann ich auf deinen Screenshots nicht finden. Ich vermute, sie verweist auf deinen eigenen Datentyp HOLIDAY_DATA, und der erste Screenshot ist veraltet?![/ol]
Richtig wäre:
[ol]- Eine Deklaration GVL.HOLIDAY (oder wie auch immer du die Variable nennen willst) als ARRAY [0..29] of HOLIDAY_DATA. Siehe Beispiel unten für Bayern. Für andere Bundesländer einfach entsprechend anpassen.
- Die übergibst du dann an CALENDAR_CALC.HOLIDAYS.
- Die Typkonvertierungsfehler (TIME vs. DATE_AND_TIME) wirst du auch noch beheben müssen. Irgendwo in den vielen Kopieraktionen werden die beiden Typen vermischt, das bemängelt das eCOCKPIT dann zurecht.
- Parameterdaten wie Länge und Breite würde ich als Initialwerte bei der Deklaration übergeben. Sie ändern sich nie und müssen daher nicht zyklisch auf die Variable geschrieben werden. Wie das geht, siehe ebenfalls unten.[/ol]
Deklaration von GVL.HOLIDAY:
HOLIDAY : 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)];
Iniitalwert bei Deklaration übergeben:
MyNewInt : INT := 123; // Variable wird nach einem Kaltstart der Steuerung mit 123 initialisiert
Gruß,
mattsches