summaryrefslogtreecommitdiff
path: root/fhunit.pas
diff options
context:
space:
mode:
Diffstat (limited to 'fhunit.pas')
-rw-r--r--fhunit.pas91
1 files changed, 85 insertions, 6 deletions
diff --git a/fhunit.pas b/fhunit.pas
index fcfa1b6..bfd6899 100644
--- a/fhunit.pas
+++ b/fhunit.pas
@@ -85,21 +85,27 @@ type
procedure achsenZeichnen(zuZeichnen: tMessGroeszenSet; startZeit,stopZeit: extended);
procedure graphenZeichnen(zuZeichnen: tMessGroeszenSet; startZeit,stopZeit: extended);
procedure mutBeenden;
+ function sonnigkeit: extended;
+ function maxWind: extended;
+ function gesRegen: extended;
+ function hintInfo: string;
+ function mehrInfos(was: tMessGroeszenSet): string;
end;
procedure uZeit2mZeit(uZ: extended; out mZ: tZeit); inline;
+procedure mZeit2uZeit(mZ: tZeit; out uZ: extended); inline;
function strZuMZeit(s: string; out mZ: tZeit): boolean;
const
- messNamen: array[tMessgroesze] of string =
+ messNamen: array[tMessGroesze] of string =
('Temperatur','Luftfeuchte','Windgeschwindigkeit','Windrichtung',
'Niederschlag','Globalstrahlung','Luftdruck');
- maszEinheit: array[tMessgroesze] of string =
+ maszEinheit: array[tMessGroesze] of string =
('°C','%','m/s','°','mm','W/m²','mbar');
monatsNamen: array[1..12] of string =
('Januar','Februar','M'#$e4'rz','April','Mai','Juni','Juli',
'August','September','Oktober','November','Dezember');
- farben: array[tMessgroesze] of tColor =
+ farben: array[tMessGroesze] of tColor =
($0000DF,$CFAF7F,$007FFF,$FF00FF,$FFAF3F,$3FAFAF,$AFAFAF);
implementation
@@ -128,9 +134,7 @@ end;
procedure tMessPunkt.setzeUZeit;
begin
- _uZeit:=
- encodeDate(_mZeit[zgJahr],_mZeit[zgMonat],_mZeit[zgTag])+
- encodeTime(_mZeit[zgStunde],_mZeit[zgMin10]*10,0,0)
+ mZeit2uZeit(_mZeit,_uZeit);
end;
procedure tMessPunkt.setzeZeit;
@@ -549,6 +553,74 @@ begin
muts[i].beenden:=true;
end;
+function tMessPunkte.sonnigkeit: extended;
+var
+ i: longint;
+ a,e,fA: extended;
+ fAZ: tZeit;
+begin
+ result:=0;
+ i:=werte.bisekt(werte.last.zeit-1);
+ while i<werte.count do begin
+ result:=result+werte[i].mW[mgGlobalStrahlung]*(werte[i].zeit-werte[i-1].zeit);
+ inc(i);
+ end;
+ uZeit2mZeit(werte.last.zeit,fAZ);
+ fAZ[zgTag]:=21; // Frühlingsanfang
+ fAZ[zgMonat]:=3;
+ mZeit2uZeit(fAZ,fA);
+ a:=50/180*pi; // Breitengrad
+ e:=23.15/180*pi*sin((werte.last.zeit-fA)*2*pi/365); // eff. Neigung
+ result:=result/(1367/pi*(sin(a)*sin(e)*arccos(-tan(a)*tan(e))+cos(a)*cos(e)*sqrt(1-sqr(tan(a)*tan(e)))));
+end;
+
+function tMessPunkte.maxWind: extended;
+var
+ i: longint;
+begin
+ result:=0;
+ i:=werte.bisekt(werte.last.zeit-1/24*2);
+ while i<werte.count do begin
+ result:=max(result,werte[i].mW[mgWindGeschwindigkeit]);
+ inc(i);
+ end;
+end;
+
+function tMessPunkte.gesRegen: extended;
+var
+ i: longint;
+begin
+ result:=0;
+ i:=werte.bisekt(werte.last.zeit-1/24*14);
+ while i<werte.count do begin
+ result:=result+werte[i].mW[mgNiederschlag]*(werte[i].zeit-werte[i-1].zeit);
+ inc(i);
+ end;
+end;
+
+function tMessPunkte.hintInfo: string;
+var
+ sk: extended;
+begin
+ result:=dateTimeToStr(werte.last.zeit)+' ';
+ sk:=sonnigkeit*100;
+ result:=result+inttostr(floor(sk))+',';
+ sk:=(sk-floor(sk))*10;
+ result:=result+char(ord('0')+floor(sk));
+ sk:=(sk-floor(sk))*10;
+ result:=result+char(ord('0')+floor(sk))+'%';
+end;
+
+function tMessPunkte.mehrInfos(was: tMessGroeszenSet): string;
+var
+ mG: tMessGroesze;
+begin
+ result:='';
+ for mG:=high(mG) downto low(mG) do
+ if mG in was then
+ result:=result+#13+floattostr(werte.last.mW[mG])+maszEinheit[mG];
+end;
+
// allgemeine Funktionen *******************************************************
procedure uZeit2mZeit(uZ: extended; out mZ: tZeit); inline;
@@ -560,6 +632,13 @@ begin
mZ[zgMin10]:=round(mi/10);
end;
+procedure mZeit2uZeit(mZ: tZeit; out uZ: extended); inline;
+begin
+ uZ:=
+ encodeDate(mZ[zgJahr],mZ[zgMonat],mZ[zgTag])+
+ encodeTime(mZ[zgStunde],mZ[zgMin10]*10,0,0)
+end;
+
function strZuMZeit(s: string; out mZ: tZeit): boolean;
var
t: string;