FB_SPA

FB_SPA 1:

 

Am Eingang werden alle verfügbaren Werte zur Standortdefinition und Art der Berechnung angegeben.

Die Berechnung wird in einem Durchlauf des Funktionsbausteines durchgeführt. Die Ergebnisse liegen sofort am Ausgang an.
Aufgrund der internen komplexen Rechenschritte benötigt diese Bearbeitung Systemperformanz.

VAR_INPUT

VAR_INPUT
    stTime      :ST_SPA_TIMESTRUCT;     (* local date and time (year, month, day, hour, minute, second) *)
    fTimezone           :LREAL;         (* Observer time zone (negative west of Greenwich)          *)
                        (* valid range: -18 TO 18 hours, error code: 8      *)
    fDelta_t        :LREAL:=66;         (* Difference between earth rotation time and terrestrial time  *)
                        (* It is derived from observation only and is reported in this  *)
                        (* bulletin: http://maia.usno.navy.mil/ser7/ser7.dat,       *)
                        (* where delta_t = 32.184 + (TAI-UTC) + DUT1            *)
                        (* valid range: -8000 to 8000 seconds, error code: 7        *)
    fLongitude      :LREAL;         (* Observer longitude (negative west of Greenwich)          *)
                        (* valid range: -180 to 180 degrees, error code: 9          *)
    fLatitude           :LREAL;         (* Observer latitude (negative south of equator)        *)
                        (* valid range: -90 to 90 degrees, error code: 10           *)
    fElevation      :LREAL;         (* Observer elevation [meters]              *)
                        (* valid range: -6500000 or higher meters, error code: 11       *)
    fPressure           :LREAL:=1000;       (* Annual average local pressure [millibars]            *)
                        (* valid range: 0 to 5000 millibars, error code: 12         *)
    fTemperature    :LREAL;         (* Annual average local temperature [degrees Celsius]       *)
                        (* valid range: -273 to 6000 degrees Celsius, error code; 13    *)
    fSlope      :LREAL;         (* Surface slope (measured from the horizontal plane)       *)
                        (* valid range: -360 to 360 degrees, error code: 14         *)
    fAzm_rotation   :LREAL;         (* Surface azimuth rotation (measured from south to projection of       *)
                        (* surface normal on horizontal plane, negative west)       *)
                        (* valid range: -360 to 360 degrees, error code: 15         *)
    fAtmos_refract  :LREAL:=0.5667;     (* Atmospheric refraction at sunrise and sunset (0.5667 deg is typ.)*)
                        (* valid range: -5 to 5 degrees, error code: 16     *)
    eFunction           :E_SPA_FunctionCode:=eSPA_ZA;(* Switch to choose functions for desired output       *)
END_VAR

 

stTime

Das Datum und die lokale Zeit des Standortes wird mittels stTime angegeben. Diese Struktur ist vom Typ ST_SPA_TIMESTRUCT.

fTimezone       

Das gewünschte Datum mit zugehöriger Zeit kann über obige Variable in lokaler Zeit angegeben werden. Die entsprechende Zeitzone wird über fTimezone hinzugefügt. Die Zeitzone richtet sich dabei immer nach Greenwich, einem Stadtteil von London (Großbritannien). (Durch Greenwich führt ebenfalls der Nullmeridian 0° der geografischen Länge.) Bezogen auf die koordinierte Weltzeit gilt: UTC+1 = Mitteleuropäische Zeit; UTC+2 = Mitteleuropäische Sommerzeit.

fDelta_t            

Die Eingangsvariable fDelta_t dient dem Ausgleich der verwendeten Zeitskalen. Ein Standardwert ist hierfür: 66. Eine detailliertere Beschreibung der unterschiedlichen bestehenden Zeitskalen findet sich auf der Übersichtsseite.

fLongitude       

fLongitude gibt die geographische Länge (Längengrad) in Grad [°] an. Diese wird in positiver Weise von Greenwich aus in Richtung Osten gemessen.

fLatitude          

fLatitude gibt die geographische Breite (Breitengrad) in Grad [°] an. Nördlich des Äquators ist diese positiv und südlich ist sie negativ.

fElevation         

Die Höhe des Standortes hat ebenfalls geringen Einfluss auf die Berechnung der Sonnenstandswinkel. Mit fElevation wird angegeben in welcher Höhe in Meter [m] sich der Beobachter über dem mittleren Meeresspiegel befindet.

fPressure        

Der Luftdruck am Standort wird über die Eingangsvariable fPressure in Millibar [mBar] angegeben. Es wird der Jahresdurchschnitt angegeben.

fTemperature 

Die Temperatur am Standort wird über die Eingangsvariable fTemperature in °C angegeben. Es wird der Jahresdurchschnitt angegeben.

fSlope               

Mittels fSlope kann eine Neigung des Untergrundes in Winkelgrad [°] angegeben werden. Diese wird zur Berechnung des speziellen Einfallswinkels fIncidence verwendet. Ist fSlope null Grad, so ist der Einfallswinkel gleich dem Zenitwinkel.

fAzm_rotation

Mittels fAzm_rotation kann die Ausrichtung in Winkelgrad [°] des Beobachters bzw. des um fSlope geneigten Untergrundes geändert werden. Eine Ausrichtung gegen Norden entspricht dem Wert 0°. Der Ausrichtungswinkel wächst von dort im Uhrzeigersinn positiv an (ebenso wie der Azimuth der Sonnenstandswinkel). Dies wird ebenfalls zur Berechnung des speziellen Einfallswinkels fIncidence verwendet.  Ist fSlope null Grad, so ist der Einfallswinkel, unabhängig von fAzm_rotation, gleich dem Zenitwinkel. Falls fAzm_rotation gleich dem Sonnenwinkel fAzimuth ist, so gilt: fIncidence = fZenith + fSlope. Dieser Fall ist auf der folgenden Grafik in 2D Darstellung illustriert.

FB_SPA 2:

fAtmos_refract

Insbesondere wenn die Sonne flach am Himmel steht, hat die Lichtbrechung in der Atmosphäre große Auswirkung auf den Zenitwinkel der Sonne. Als Korrekturfaktor für diese atmosphärische Ablenkung zum Sonnenaufgang und -untergang wurde die Eingangsvariable fAtmos_refract vorgesehen. Ein Standardwert ist hierfür: 0,5667.

eFunction         

Über diesen Enumerationswert (E_SPA_FunctionCode) kann eine Auswahl getroffen werden, welche Berechnungen angestellt werden sollen. So können beispielsweise nur die Sonnenstandswinkel ausgerechnet werden, falls keine Informationen zu Sonnenaufgang etc. benötigt werden.

 

VAR_OUTPUT

VAR_OUTPUT
    fZenith     :LREAL;     (* topocentric zenith angle [degrees]               *)
    fAzimuth        :LREAL;     (* topocentric azimuth angle (eastward from north) [ 0 to 360 degrees]  *)
    fAzimuth180     :LREAL;     (* topocentric azimuth angle (westward from south) [-180 to 180 degrees]    *)
    fIncidence      :LREAL;     (* surface incidence angle [degrees]                    *)

    fSuntransit     :LREAL;     (* local sun transit time (or solar noon) [fractional hour]         *)
    fSunrise        :LREAL;     (* local sunrise time (+/- 30 seconds) [fractional hour]        *)
    fSunset     :LREAL;     (* local sunset TIME (+/- 30 seconds) [fractional hour]     *)

    bError      :BOOL;      (* error flag   *)
    iErrorCode      :UINT;      (* error code   *)
END_VAR

 

fZenith          

Der Zenitwinkel der Sonne bezeichnet den Winkel welcher durch das senkrechte Lot über dem Beobachter (Zenit) und der Verbindung zwischen Beobachter und Sonne begrenzt wird. Steht die Sonne absolut senkrecht über dem Beobachter, so ist der Zenitwinkel 0°.
Teilweise ist auch der Sonnenhöhenwinkel (SunElevation bzw. Altitude) gebräuchlich. Dabei gilt: 90° - Zenitwinkel = Altitude

fAzimuth      

Der Azimuth liegt genau auf der Horizontfläche. Dabei wird ihm im Norden der Wert 0° zugeordnet und er wächst im Uhrzeigersinn an. (Osten = 90°, Süden=180°, Westen=270°) Eine graphische Darstellung der Sonnenstandswinkel findet sich auf der Übersichtsseite.

fAzimuth180

Dieser Wert entspricht von der Bedeutung her dem Azimuth. Dem Azimuth180 wird allerdings im Süden der Wert 0° zugeordnet. Von dort aus wächst er im Uhrzeigersinn positiv und gegen den Uhrzeigersinn negativ. (Azimuth-180° = Azimuth180)

fIncidence   

fIncidence gibt den Einfallwinkel der Sonnenstrahlen bezogen auf den am Eingang parametrierten Untergrund an. Ist der Untergrund horizontal entspricht fIncidence dem Wert von fZenith.

fSuntransit  

fSuntransit gibt den Zeitpunkt des Sonnenhöchststandes an. Dieser ist in Stunden angegeben und verwendet die am Eingang angelegte Zeitzone.

fSunrise       

fSunrise gibt den Zeitpunkt des Sonnenaufganges an. Dieser ist in Stunden angegeben und verwendet die am Eingang angelegte Zeitzone.

fSunset        

fSunset gibt den Zeitpunkt des Sonnenunterganges an. Dieser ist in Stunden angegeben und verwendet die am Eingang angelegte Zeitzone.

bError          

bError ist TRUE, falls ein Fehler aufgetreten ist. In diesem Fall wird mit iErrorCode der jeweilige Fehlercode ausgegeben.

iErrorCode  

iErrorCode gibt den Fehlerwert der Berechnung aus. Ist ein Fehler aufgetreten, so ist dieser Wert ungleich null. Alle möglichen Fehlerwerte sind in der Enumeration E_SPA_ErrorCode zusammengefasst.

 

FB_SPA 3:

Zur Konvertierung der Variablen fSunrise (analog ebenso fSuntransit und fSunset) in das Format TIME, kann folgende Typkonvertierung verwendet werden:

tSunrise    := LREAL_TO_TIME(fbSPA.fSunrise*60*60*1000);

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS Bibliotheken

TwinCAT v2.10 Build >= 1320

PC oder CX (x86, ARM)

TcSPA.Lib