diff options
Diffstat (limited to 'fhunit.pas')
-rw-r--r-- | fhunit.pas | 91 |
1 files changed, 85 insertions, 6 deletions
@@ -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; |