Hallo,
- Ich habe irgendwo gelesen SETUP_HOLIDAY sei gar kein so richtig offizieller OSCAT Baustein - speziell für PC_WORX-Programmierung der Phoenix ILC 1xx ist er aber sehr praktisch.
- HOLIDAY scheint mir etwas schwer zu nutzen, da mir keine wirklich praktische Erzeugung passender Osterfeiertagstermine (logisch, mit Karfreitag, Himmelfahrt, Pfingsten) einfällt.
Mein Anliegen: wenn man den
SETUP_HOLIDAY mit einem passenden Eingang für die Berechnung von
EASTER ausstatten würde, die Datumsteile der Variablen HD[03] aus diesen Eingängen berechnen und die Datumsanteile von HD[02], HD[04], HD[06], HD[07], HD[08] ebenso generieren würde (Ist nicht völlig trivial aus HD[03] zu berechnen, die Monatsfindung ist lästig), dann wäre der Einsatz von
HOLIDAY eine richtig runde Sache. In der gegenwärtigen Form finde ich die Verwendung nicht wirklich praktisch, da alle "interessanten" Feiertage doch wieder händisch berechnet werden müssen. Oder habe ich etwas übersehen?
Gruß
Rainer
setup holiday macht genau das was bei anderen plattformen über die globalen bibliothek variablen gemacht wird.
letztendlich erreicht man damit gleiches verhalten
dein problem habe ich trotzdem nicht verstanden
mit den setup daten werden die feiertage des jweiligen landes eingetragen
somit können das die verschiedenen bausteine damit arbeiten und ostern wird auch erkannt bzw. berechnet
Zitat von: peewit in 05. Oktober 2013, 13:45:48
... und ostern wird auch erkannt bzw. berechnet
Hallo,
Wo denn? Ich habe eine Kombination aus
SETUP_HOLIDAY_DE (Definiert die Feiertage, bei mir im Beispiel Variablenstruktur
HOLIDAYS) und FB
HOLIDAY (Setzt an Feiertagen ein Bool auf TRUE, wenn aktueller Tag ein in
HOLIDAYS definierter Feiertag). Funktioniert für alle festen Feiertage zauberhaft, aber nicht für die per Distanz zu Ostersonntag festgelegten. Dafür kann es in
SETUP_HOLIDAY_DE ja keine gültige statische Definition geben:
HD[02].NAME := STRING#'Karfreitag';
HD[02].DAY := SINT#-2;
HD[02].MONTH := SINT#00;
HD[02].USE := SINT#01;
HD[03].NAME := STRING#'Ostersonntag';
HD[03].DAY := SINT#00;
HD[03].MONTH := SINT#00;
HD[03].USE := SINT#01;
Vergessen wir mal aus meinem Ursprungsposting die Gedanken über
SETUP_HOLIDAY_DE, Meine Kernfrage ist derzeit
Woher bekomme ich die Ostertermine für
HOLIDAY? Ich hatte mir nun gedacht, das würde vielleicht durch FB
CALENDAR_CALC erledigt. Einen anderen Sinn, da die Struktur
HOLIDAYS durchzuschleifen, kann ich nicht erkennen. Das passiert aber nicht, der Karfreitag hat weiterhin die Werte wie aus dem Codeschnipsel oben ersichtlich.
Habe ich vielleicht
CALENDAR_CALC unvollständig initialisiert? Bisher habe ich nur cXCAL.UTC := DT
Mein Test für Tag der Einheit: 03.10.2014:
Im Programm ist ein entsprechendes
EVENT definiert
HOLIDAYS ist mit Definition aus
SETUP_HOLIDAY_DE versorgt
Programm gestartet
Ich setze Datum/Zeit der SPS auf Vortag 23:59:00 und warte was passiert:
FB
EVENT und FB
HOLIDAY zeigen Feiertag :-)
Nun Fortsetzung des Tests für Karfreitag: 18.04.2014:
Im Programm ist ein entsprechendes
EVENT definiert
HOLIDAYS ist mid Definition aus
SETUP_HOLIDAY_DE versorgt
Programm läuft noch
Ich setze Datum/Zeit der SPS auf Vortag 17.04.2013 23:59:00 und warte was passiert:
FB
EVENT zeigt Feiertag :-)
FB
HOLIDAY zeigt KEINEN Feiertag :-(
Was mache ich falsch?
Gruß
Rainer
[gelöscht durch Administrator]
hi
1. der baustein setup_holiday_xx trägt dir die wichtigsten feiertage ein
2. die bausteine calendar_calc und holiday arbeiten auch damit völlig korrekt
3. der baustein event kann aber nur mit absolut definierten tagen umgehen, und ist somit ein "sonderding"
man muss auch extra für diesen baustein eigene definitionen anlegen
nun zu deinen problem:
im baustein holiday wird intern die function DATE_ADD verwendet und in deinem anwendungsfall mit "Karfreitag" wird das ostersonntag datum minus zwei tage berechnet also (-2 tage)
hier gibt es einen fehler im baustein date_add der die vorzeichen hier nicht korrekt weitergibt
habe den fehler behoben (siehe anhang)
du musst den baustein in der oscat_basic 3.33 gegen den neuen austauschen
[gelöscht durch Administrator]
Super, vielen Dank, ich probiere das heute Nachmittag aus und berichte hier!
Hallo,
mit dem Fix funktioniert's, habe getestet für Osterfeiertage 2014, Himmelfahrt 2015, Pfingstmontag 2016, alles problemlos und korrekt.
Vielleicht wäre eine Hotfixseite im Forum praktisch, wo solche reparierten Bausteine heruntergeladen werden können, bis die Reparatur in das nächste Release übernommen werden?
Gruß
Rainer