Verbesserungsvorschlag für SETUP_HOLIDAY und HOLIDAY

Begonnen von rrbd, 05. Oktober 2013, 13:37:35

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

rrbd

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

peewit

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

rrbd

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]

peewit

#3
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]

rrbd

Super, vielen Dank, ich probiere das heute Nachmittag aus und berichte hier!

rrbd

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