ich habe 2 Variablen vom Typ DATE für "Beginn Frostperiode" und "Ende Frostperiode".
Ich suche jetzt eine Funktion welche schaut ob das aktuelle Datum in diesem Bereich fällt. Habe in OSCAT nichts passendes gefunden. Oder schreibt man solche "einfache" Funktionen besser selber ?
Grüsse,
Dieter
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
nun ich denke das problem ist das die funktion ja für ein beliebiges jahr funktionieren soll, also ein einfach vcergeich mit datumswerten eben nicht funktioniert oder??
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Jahr:=STRING_TO_INT((MID(DT_TO_STRING(DatumUhrzeit), 4, 4)));
Schaltjahraktiv:=NOT Jahr.1 AND NOT Jahr.0 ;
```
Paßt von 1904 bis 2096, 2100 ist bekanntlich eine Ausnahme, falls Du damit rechnest daß das Teil bis dahin noch laufen muß kannst Du ja entsprechende Ausnahmen von Hand rein setzen (1700, 1800, 1900, 2100, 2200, 2300, 2500, 2600....)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich habe 2 Variablen vom Typ DATE für "Beginn Frostperiode" und "Ende Frostperiode".
Ich suche jetzt eine Funktion welche schaut ob das aktuelle Datum in diesem Bereich fällt. Habe in OSCAT nichts passendes gefunden. Oder schreibt man solche "einfache" Funktionen besser selber ?
Grüsse,
Dieter
Hallo Dieter
Vergleich die werte doch miteinander
z.B.
IF IstDate >= StartDate AND IstDate < EndDate THEN
( Aktion ) ;
END_IF
mfG
Jochen
nun ich denke das problem ist das die funktion ja für ein beliebiges jahr funktionieren soll, also ein einfach vcergeich mit datumswerten eben nicht funktioniert oder??
die funktion temp_ext in der oscat lib hat diesen periodenvergleich auch mit drin, macht aber vieles mehr. schau dir mal dort den source code an
in der 2.0 wird hierfür eine funktion angeboten
folgender source code
FUNCTION period : BOOL
VAR_INPUT
END_VAR
VAR
END_VAR
period := (date_add(d1,0,0,0,year(dx)-year(d1)) <= dx) AND (date_add(d2,0,0,0,year(dx)-year(d2)) >= dx);
sorry das war etwas zu schnell gescossen
es muss natürlich noch berücksichtigt werden das die periode über den 1.1 verläuft.
hier der code der funktioniert:
FUNCTION period : BOOL
VAR_INPUT
END_VAR
VAR
END_VAR
(*
version 1.0 19 sep 2007
programmer hugo
tested by tobias
PERIOD checks if a given date is between two dates (d1 and d2) d1 is the starting date and d2 the last date for the period.
the years of the dates are ignored, so the function period cheks for a time period within a year independet of the year.
*)
p1 := day_of_year(D1);
p2 := day_of_year(D2);
px := day_of_year(DX);
IF p2 >= p1 THEN
ELSE
END_IF;
(* revision history
hm 19. sep 2007
*)
ja super, danke hugo
das hilft mir erstmal weiter, vor allem weil jahresunabhängig
Ist diese Funktion auch in der neuen oscat.lib drin ?
Grüsse,
Dieter
ja sie wird in der 2.0 drin sein, sie wird heute nacht online gestellt
hallo hugo,
wie sieht das bei einem schaltjahr aus ?
d1 und d2 haben ja immer die gleiche Jahreszahl, z.B. 2007.
dx wird aber irgendwann mal ein Schaltjahr, dann ist day_of_year dann doch ein Tag daneben, oder ?
Grüsse,
Dieter
ja das isr richtig.
hallo dieter leider hast du recht.
in einem schaltjahr schaltet die funktion einen tag zu früh falls das datum nach dem 28. feb liegt.
wir werden das in der nächsten release verbessern.
es wird ein prüfung auf schaltjahr mit eingebaut.
wow, ich bin fassungslos
was ist das denn für ein Service - klasse
ich bedanke mich
Schaltjahr:```
Jahr:=STRING_TO_INT((MID(DT_TO_STRING(DatumUhrzeit), 4, 4)));
Schaltjahraktiv:=NOT Jahr.1 AND NOT Jahr.0 ;
```
Paßt von 1904 bis 2096, 2100 ist bekanntlich eine Ausnahme, falls Du damit rechnest daß das Teil bis dahin noch laufen muß kannst Du ja entsprechende Ausnahmen von Hand rein setzen (1700, 1800, 1900, 2100, 2200, 2300, 2500, 2600....)