Hinweise zur Dokumentation

Diese Beschreibung wendet sich ausschließlich an ausgebildetes Fachpersonal der Steuerungs- und Automatisierungstechnik, das mit den geltenden nationalen Normen vertraut ist.
Zur Installation und Inbetriebnahme der Komponenten ist die Beachtung der Dokumentation und der nachfolgenden Hinweise und Erklärungen unbedingt notwendig.
Das Fachpersonal ist verpflichtet, für jede Installation und Inbetriebnahme die zu dem Zeitpunkt veröffentlichte Dokumentation zu verwenden.

Das Fachpersonal hat sicherzustellen, dass die Anwendung bzw. der Einsatz der beschriebenen Produkte alle Sicherheitsanforderungen, einschließlich sämtlicher anwendbaren Gesetze, Vorschriften, Bestimmungen und Normen erfüllt.

Disclaimer

Diese Dokumentation wurde sorgfältig erstellt. Die beschriebenen Produkte werden jedoch ständig weiter entwickelt.
Wir behalten uns das Recht vor, die Dokumentation jederzeit und ohne Ankündigung zu überarbeiten und zu ändern.
Aus den Angaben, Abbildungen und Beschreibungen in dieser Dokumentation können keine Ansprüche auf Änderung bereits gelieferter Produkte geltend gemacht werden.

Marken

Beckhoff®, TwinCAT®, EtherCAT®, EtherCAT G®, EtherCAT G10®, EtherCAT P®, Safety over EtherCAT®, TwinSAFE®, XFC®, XTS® und XPlanar® sind eingetragene und lizenzierte Marken der Beckhoff Automation GmbH.
Die Verwendung anderer in dieser Dokumentation enthaltenen Marken oder Kennzeichen durch Dritte kann zu einer Verletzung von Rechten der Inhaber der entsprechenden Bezeichnungen führen.

Patente

Die EtherCAT Technologie ist patentrechtlich geschützt, insbesondere durch folgende Anmeldungen und Patente:
EP1590927, EP1789857, EP1456722, EP2137893, DE102015105702
mit den entsprechenden Anmeldungen und Eintragungen in verschiedenen anderen Ländern.

EtherCAT® ist eine eingetragene Marke und patentierte Technologie lizenziert durch die Beckhoff Automation GmbH, Deutschland.

Copyright

© Beckhoff Automation GmbH & Co. KG, Deutschland.
Weitergabe sowie Vervielfältigung dieses Dokuments, Verwertung und Mitteilung seines Inhalts sind verboten, soweit nicht ausdrücklich gestattet.
Zuwiderhandlungen verpflichten zu Schadenersatz. Alle Rechte für den Fall der Patent-, Gebrauchsmuster- oder Geschmacksmustereintragung vorbehalten.


Übersicht

Die TwinCAT PLC Bibliothek Solar Position Algorithm (SPA) bietet die Möglichkeit, den Sonnenstand zu einem nahezu beliebigen Zeitpunkt exakt zu ermitteln.
Ebenfalls können die Zeiten für Sonnenaufgang, Sonnenhöchststand und Sonnenuntergang ermittelt werden.
Zusätzlich zu den Sonnenstandswinkeln kann ein Einfallswinkel ausgegeben werden, falls der Bezugspunkt eine bestimmte Neigung aufweisen soll. Die Sonnenstandswinkel selbst beziehen sich dann weiterhin auf die horizontale Ebene am Bezugspunkt.

Dem Algorithmus liegt ein technischer Bericht des National Renewable Energy Laboratory (NREL) aus den USA zugrunde. Dort wird eine theoretische Ungenauigkeit von +/-0,0003 ° der Sonnenstandswinkel in einem Zeitraum vom Jahr -2000 bis zum Jahr 6000 angegeben.
Darauf aufbauend geht der vorliegende Funktionsbaustein der TwinCAT Solar Position Algorithm Bibliothek von einer Ungenauigkeit von +/-0,001 ° der Sonnenstandswinkel aus.

Sonnenstandswinkel

Der Stand der Sonne an einem festen Beobachtungsort wird normalerweise mit zwei Winkelangaben bestimmt.
Um diese Sonnenstandswinkel mit Hilfe der TwinCAT Bibliothek Solar Position Algorithm zu bestimmen, wird die Angabe von Datum, Uhrzeit, geographischer Länge, geographischer Breite und weiteren Parametern je nach gewünschter Genauigkeit vorausgesetzt.
Die Grafik illustriert die Bedeutung der wichtigsten Begriffe in diesem Zusammenhang:

Der Sonnenstand wird durch zwei Winkel repräsentiert.

Zenith Winkel | Der Zenitwinkel der Sonne bezeichnet den Winkel, welcher durch das senkrechte Lot über dem Beobachter und der Verbindung zwischen Beobachter und Sonne begrenzt wird. Teilweise ist auch der Sonnenhöhenwinkel (SunElevation bzw. Altitude) gebräuchlich. Dabei gilt: 90° - Zenitwinkel = Altitude
Azimuth Winkel | 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°)

Geographischer Längen- und Breitengrad

Die geographische Breite ist die im Winkelmaß (also in Grad) angegebene nördliche oder südliche Entfernung eines Ortes der Erdoberfläche vom Äquator. Die Breite kann Werte von 0° (am Äquator) bis ±90° (an den Polen) annehmen. Dabei gibt ein positives Vorzeichen die nördliche Richtung und ein negatives Vorzeichens die südliche Richtung an. Die geographische Länge ist ein Winkel, der ausgehend vom Nullmeridian 0° (künstlich festgelegte Nord-Süd-Linie) Werte bis ±180° annehmen kann. Ein positives Vorzeichen gibt die Länge in östlicher Richtung und ein negatives Vorzeichen in westlicher Richtung an. Beispiele:

Ort | geographische Länge | geographische Breite
Syndey, Australien | 151,2° | -33,9°
New York, USA | -74,0° | 40,7°
London, England | -0,1° | 51,5°
Moskau, Russland | 37,6° | 55,7°
Peking, China | 116,3° | 39,9°
Dubai, Vereinigte Arabische Emirate | 55,3° | 25,4°
Rio de Janeiro, Brasilien | -43,2° | -22,9°
Hawai, USA | -155,8° | 20,2°
Verl, Deutschland | 8,5° | 51,9°

Zeitskala

Von besonderer Wichtigkeit ist zudem die korrekte Zeitangabe. Es bestehen unterschiedliche Zeitskalen auf unserer Erde. Der Solar Position Algorithm basiert auf der Universal Time (UT1).

Universal Time (UT1)

Von 1928 bis 1968 war die UT die anerkannte Weltzeit. Sie wird auch Universelle Sonnenzeit genannt. Sie wird durch astronomische Beobachtung des Drehwinkels der Erde gewonnen und entspricht der mittleren Ortszeit der Sternwarte von Greenwich (Nullmeridian). Diese von der Erdrotation abgeleitete Größe beinhaltet deren Fluktuationen sowie langfristige Verlangsamung und ist somit kein strikt gleichförmiges Zeitmaß. Andererseits ist sie immer mit dem reellen Tag-Nacht-Wechsel synchronisiert.

International Atomic Time (TAI)

Die Internationale Atomzeit wird durch weltweit über 50 Zeitinstitute und deren Atomuhren festgelegt. Eine Atomzeit basiert auf einem atomaren Zeitnormal, welches als exakt gleichmäßig angenommen werden kann.

Coordinated Universal Time (UTC)

Die koordinierte Weltzeit UTC ist seit 1968 die gültige Weltzeit. Diese Zeit ist gemeint, wenn im Alltag von GMT die Rede ist. Greenwich Mean Time (GMT) war die ursprüngliche Weltzeit vor 1928.
Auch die UTC hat die Sternwarte von Greenwich (Nullmeridian) weiterhin als Bezugspunkt. Von der koordinierten Weltzeit sind die Zeitzonen, in welche die Erde unterteilt ist, abgeleitet (UTC+1 = Mitteleuropäische Zeit). Ihr Sekundentakt ist, anders als bei der UT1, dem exakt gleichmäßigen Sekundentakt der internationalen Atomzeit (TAI) gleich. Die entstehende Differenz zwischen UTC und UT1 wird mittels Schaltsekunden (Leap Seconds) ausgeglichen. Zu der Referenzzeit UT1 wird immer eine maximale Differenz von kleiner einer Sekunde eingehalten.
Die koordinierte Weltzeit UTC ist demnach ein Kompromiss zwischen UT1 und TAI.
Um eine vorliegende Zeit von UTC umzuwandeln in UT1 bedarf es folgender Formel: UT1 = UTC + DUT1

Terrestrial Time (TT)

auch Terrestrial Dynamical Time (TDT) genannt. Sie dient als Basis für die Berechnung astronomischer Ereignisse und basiert auf den exakt gleichmäßigen Sekunden der internationalen Atomzeit (TAI). Allerdings gilt: TT = TAI + 32,184

Leap Seconds

Um die koordinierte Weltzeit UTC an die UT1 zu synchronisieren wird bei Bedarf eine Schaltsekunde eingefügt. Diese zusätzlich eingefügte Sekunde wird vom Internationalen Dienst für Erdrotation und Referenzsysteme (IERS) in unregelmäßigen, nicht vorhersagbaren, Zeiträumen festgelegt. So wird sichergestellt, dass die Differenz zwischen den zwei Zeitskalen immer kleiner als eine Sekunde ist. (Bislang wurden solche zusätzlichen Schaltsekunden immer am 31. Dezember oder 30. Juni nach 23:59:59 UTC eingefügt.)
DUT1 bezeichnet die noch bestehende Differenz. Es gilt: DUT1 = UT1 - UTC
Dieser Wert wird von Beobachtungen abgeleitet, welche in diesem Bericht laufend gemeldet werden.

Delta T

Delta T bezeichnet die Differenz zwischen Terrestrial Time und Universal Time. Es gilt: Delta_t = TT - UT1
Diese Größe kann als fDelta_t am Eingang des Funktionsbausteines FB_SPA angegeben werden. Sie wird von Beobachtungen abgeleitet, welche in diesem Bericht laufend gemeldet werden. Ein Standardwert ist hierfür: 66 Sekunden.

Ähnliche Produkte

  • Zeitschaltfunktionen mit geringerer Genauigkeit wie FB_CalcSunPosition und FB_CalcSunriseSunset aus der Bibliothek TwinCAT Building Automation

Stand der Dokumentation: 08.11.2011


Systemvoraussetzungen

  • Programmierumgebung:
    • XP, XPe;
    • TwinCAT Installation Level: TwinCAT PLC oder höher;
    • TwinCAT System Version 2.10.0 Build 1320 oder höher;
    • TcSPA.Lib Diese PLC Bibliothek muss in dem SPS-Projekt eingebunden sein. Alle anderen Bibliotheken werden automatisch hinzugefügt. ( Standard.Lib; TcMath.Lib; TcBaseMath.Lib; TcSystem.Lib; TcBase.Lib werden automatisch eingebunden )
  • Zielplattform:
    • PC oder CX (x86): XP, XPe, CE;
    • CX (ARM): CE (image v2.18 oder höher);
    • Hinweis: Auf Systemen ohne Gleitkommaeinheit ( Floating Point Unit ) ist die Performance aufgrund der internen komplexen Berechnungen eingeschränkt. Bei Auffälligkeiten ist eine Überprüfung der Zykluszeit anzuraten.
    • TwinCAT SPS-Laufzeitsystem Version 2.10.0 Build 1320 oder höher;


Copyright

Dem Algorithmus liegt der technische Bericht "Solar Position Algorithm for Solar Radiation Application" von I. Reda & A. Andreas des National Renewable Energy Laboratory (NREL) aus den USA zugrunde. (Überarbeitung 14-JAN-2009)

NOTICE
Copyright (C) 2007 Alliance for Sustainable Energy, LLC, All Rights Reserved

This computer software was developed by the Alliance for Sustainable Energy, LLC,
hereinafter the Contractor, under Contract DE-AC36-08GO28308 (Contract) with the Department
of Energy (DOE). The United States Government has been granted for itself and others acting
on its behalf a paid-up, non-exclusive, irrevocable, worldwide license in the Software to
reproduce, prepare derivative works, and perform publicly and display publicly. Beginning
five (5) years after the date permission to assert copyright is obtained from the DOE, and
subject to any subsequent five (5) year renewals, the United States Government is granted
for itself and others acting on its behalf a paid-up, non-exclusive, irrevocable, worldwide
license in the Software to reproduce, prepare derivative works, distribute copies to the
public, perform publicly and display publicly, and to permit others to do so. If the
Contractor ceases to make this computer software available, it may be obtained from DOE's
Office of Scientific and Technical Information's Energy Science and Technology Software Center
(ESTSC) at P.O.Box 62, 1 Science Gov Way, Oak Ridge, TN 37831-1020. THIS SOFTWARE IS PROVIDED
BY THE CONTRACTOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE CONTRACTOR OR THE U.S. GOVERNMENT BE LIABLE FOR ANY SPECIAL, INDIRECT
OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER, INCLUDING BUT NOT LIMITED TO CLAIMS
ASSOCIATED WITH THE LOSS OF DATA OR PROFITS, WHICH MAY RESULT FROM AN ACTION IN CONTRACT,
NEGLIGENCE OR OTHER TORTIOUS CLAIM THAT ARISES OUT OF OR IN CONNECTION WITH THE ACCESS, USE
OR PERFORMANCE OF THIS SOFTWARE.


FB_SPA

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.
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.

Hinweis: 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);

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10 Build >= 1320 | PC oder CX (x86, ARM) | TcSPA.Lib


F_GetVersionTcSPA

Mit dieser Funktion können Versionsinformationen der SPS-Bibliothek ausgelesen werden.

FUNCTION F_GetVersionTcSPA: UINT

VAR_INPUT
    nVersionElement : INT;
END_VAR

nVersionElement : Versionselement, das gelesen werden soll. Mögliche Parameter:

  • 1 : major number;
  • 2 : minor number;
  • 3 : revision number;

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10 Build >= 1320 | PC oder CX (x86, ARM) | TcSPA.Lib


ST_SPA_TIMESTRUCT

TYPE ST_SPA_TIMESTRUCT :
STRUCT
    iYear		:INT(-2000..6000);	(* 4-digit year, valid range: -2000 TO 6000, error code: 1	*)
    iMonth		:INT(1..12); 	(* 2-digit month, valid range: 1 to 12 (Jan.= 1), error code: 2	*)
    iDay		:INT(1..31);	(* 2-digit day, valid range: 1 to 31, error code: 3		*)
    iHour		:INT(0..24); 	(* Observer local hour, valid range: 0 to 24, error code: 4	*)
    iMinute		:INT(0..59); 	(* Observer local minute, valid range: 0 to 59, error code: 5	*)
    iSecond		:INT(0..59);	(* Observer local second, valid range: 0 TO 59, error code: 6	*)
END_STRUCT
END_TYPE

Die Struktur ST_SPA_TIMESTRUCT enthält Informationen zum Datum und zur Zeit. Sie wird am Eingang des Funktionsbausteins FB_SPA genutzt, um die lokale Zeit des Standortes anzugeben. Diese Ortszeit hat als kleinste Einheit Sekunden.

Es existieren unterschiedliche Zeitskalen auf unserer Erde. Bei der Zeitangabe in ST_SPA_TIMESTRUCT zur Sonnenstandsberechnung wird die Universal Time (UT1) verwendet. Sofern eine Ungenauigkeit von +/-0,005 ° der Sonnenstandswinkel akzeptabel ist, kann auch die koordinierte Weltzeit (UTC) für die Zeitangabe verwendet werden. Erläuterungen hierzu finden sich auf der Übersichtsseite.

Hinweis: Bei der Zeitangabe muss auf die Sommer-/Winterzeit Umstellung verzichtet werden. Die Einführung der Sommerzeit im 20.Jahrhundert dient nur dem Zweck die Stundenzahl mit nutzbarem Tageslicht zu vergrößern. Zur Berechnung der Sonnenstandswinkel mit dieser Bibliothek muss die Normalzeit (engl.'Standard Time') verwendet werden. Die Normalzeit entspricht in Deutschland der Winterzeit.


E_SPA_FunctionCode

TYPE E_SPA_FunctionCode :(
(* enumeration for function codes to select desired final outputs from SPA *)
    eSPA_ZA, 			(*calculate zenith AND azimuth		[default setting]	*)
    eSPA_ZA_INC,		(*calculate zenith, azimuth, AND incidence			*)
    eSPA_ZA_RTS,		(*calculate zenith, azimuth, AND sun rise/transit/set values	*)
    eSPA_ALL			(*calculate all SPA output values				*)
);
END_TYPE

Die Enumeration E_SPA_FunctionCode definiert konstante Werte für die unterschiedlichen Funktionen, welche mit dem Funktionsbaustein FB_SPA durchgeführt werden können. Je nach Wahl werden neben den Sonnenstandswinkeln unter anderem auch Sonnenauf- und untergang berechnet. Eine detaillierte Erläuterung der Begriffe findet sich auf der Übersichtsseite.

eSPA_ZA : Bei Auswahl des Funktionscodes eSPA_ZA werden nur die Sonnenstandswinkel (Zenith, Azimuth, Azimuth180) berechnet [DEFAULT].

eSPA_ZA_INC : Zusätzlich zu den Sonnenstandswinkeln wird der Sonneneinfallswinkel bezogen auf den angegebenen Untergrund ausgegeben.

eSPA_ZA_RTS : Zusätzlich zu den Sonnenstandswinkeln werden Sonnenaufgang, Sonnenhöchststand und Sonnenuntergang berechnet.

eSPA_ALL : Alle angebotenen Daten werden berechnet und am Ausgang angezeigt.

Hinweis: Die benötigte Zeitdauer einer Berechnung hängt stark von der Auswahl des Funktionscodes ab.


E_SPA_ErrorCode

TYPE E_SPA_ErrorCode :(
(* enumeration for error codes returned as iErrorCode output of FB_SPA
////////////////////////////////////////////////////////////////////////
//   Note: A non-zero return error code indicates that one of the     //
//         input values did not pass simple bounds tests.             //
//////////////////////////////////////////////////////////////////////// *)
    eSPA_ERR_NoError			:= 0,
    eSPA_ERR_InvalidYear,
    eSPA_ERR_InvalidMonth,
    eSPA_ERR_InvalidDay,
    eSPA_ERR_InvalidHour,
    eSPA_ERR_InvalidMinute,
    eSPA_ERR_InvalidSecond,
    eSPA_ERR_InvalidDeltaT,
    eSPA_ERR_InvalidTimezone,
    eSPA_ERR_InvalidLongitude,
    eSPA_ERR_InvalidLatitude,
    eSPA_ERR_InvalidElevation,
    eSPA_ERR_InvalidPressure,
    eSPA_ERR_InvalidTemperature,
    eSPA_ERR_InvalidSlope,
    eSPA_ERR_InvalidAZMRotation,
    eSPA_ERR_InvalidAtmosRefract,
    eSPA_ERR_InvalidFunctionCode
);
END_TYPE

Die Enumeration E_SPA_ErrorCode definiert konstante Werte für die unterschiedlichen Fehler, welche bibliotheksintern generiert werden können.
Diese Werte finden sich in der Ausgangsvariablen iErrorCode wieder, welche im Fehlerfall am Ausgang des PLC SPA Funktionsbausteines FB_SPA den entsprechenden Integerwert anzeigt.


V_SPA_OVERVIEW

In der TwinCAT Solar Position Algorithm Bibliothek wird eine Visualisierung bereits mitgeliefert, welche eine schnelle Übersicht über die aktuellen Ein- und Ausgänge des Funktionsbausteines FB_SPA liefert. Sie kann somit ideal für Testzwecke genutzt werden.

Um die Visualisierung zu nutzen, muss im Projekt eine neue Visualisierung angelegt werden. In diese wird die V_SPA_OVERVIEW eingefügt über den Button 'Visualisierung'.

Per Doppelklick auf die eingefügte frei skalierbare Visualisierung gelangt man zu deren Einstellungen und zu der Liste der Platzhalter (Placeholder).
Hier wird die Instanz des Funktionsbausteines FB_SPA aus der Bibliothek angegeben. Bei Bedarf kann ebenfalls eine eigene Bool Variable mit dem Button 'Calculate' verbunden werden, um per Knopfdruck eine Berechnung auszuführen.

Siehe ebenfalls das Beispielprojekt.


Beispiel

Dieses Beispiel bietet eine Einführung in die Handhabung des Funktionsbausteines FB_SPA welcher mit der TwinCAT Solar Position Algorithm Bibliothek zur Verfügung steht.

Ziel ist in diesem Beispiel den Sonnenstand am 04.März 2010 um 14:27:00 Uhr an der Cheops Pyramide in Ägypten herauszufinden.
Zeitzone: UTC + 2 Stunden
Latitude, Breitengrad: 29,979, [°]
Longitude, Längengrad: 31,134 [°]
Höhe: 70 [m]
Jahresdurchschnittstemperatur: 21,7 [°C]
Die Abfrage anderer Standorte und Zeiten findet analog zu diesem Beispiel statt.

Übersicht

Folgende Schritte werden nun durchgeführt:

1. Installation der PLC Bibliothek

2. Programmstruktur

3. Test

1. Installation der PLC Bibliothek

Starten Sie TwinCAT PLC Control.

Mit 'Datei > Neu' legen Sie ein neues PLC/SPS Projekt an.

Wählen Sie Ihre Zielplattform PC und CX (x86) oder CX (ARM).

Ihre erste POU ist ein Programm namens MAIN und in der Programmiersprache ST (Strukturierter Text).

Öffnen Sie den Karteireiter Ressourcen und den Bibliotheksverwalter.

Fügen Sie wie im Bild unten dargestellt mit 'Einfügen > Weitere Bibliothek' die Bibliothek TcSPA.lib ein.

Jetzt stehen Ihnen alle SPS Bausteine der TwinCAT PLC SPA Bibliothek zur Verfügung. Alle weiteren implizit benötigten Bibliotheken wurden automatisch mit der TcSPA.lib eingebunden.

2. Programmstruktur

Zur Durchführung der Sonnenstandsberechnungen deklarieren Sie eine Instanz des Funktionsbausteines FB_SPA.
Ebenso deklarieren Sie für die Zuweisung der benötigten Ergebniswerte lokale Variablen.

Die Eingangsparameter der Berechnung können den Eingängen des Funktionsbausteines direkt zugewiesen werden.
Weil neben den Sonnenstandswinkeln auch der Sonnenaufgang und -untergang ausgegeben werden soll, benötigen Sie den erweiterten Funktionsumfang und geben dies mit dem Enumerationswert eSPA_ZA_RTS des Types E_SPA_FunctionCode an.
Ihren lokalen Variablen werden die Ausgangswerte des Funktionsbausteines zugewiesen.

Der Programmteil sollte nun folgendermaßen aussehen:

PROGRAM MAIN
VAR
    fbSPA		: FB_SPA;
    fSunZenith	: LREAL;
    fSunAzimuth	: LREAL;
    tSunrise		: TIME;
    tSunset		: TIME;
    eErrorCode	: E_SPA_ErrorCode;
    bExecute		: BOOL;
END_VAR
fbSPA.stTime.iYear		:= 2010;
fbSPA.stTime.iMonth	:= 3;
fbSPA.stTime.iDay		:= 4;
fbSPA.stTime.iHour		:= 14;
fbSPA.stTime.iMinute	:= 27;
fbSPA.fTimezone		:= 2;
fbSPA.fLongitude		:= 31.134;
fbSPA.fLatitude		:= 29.979;
fbSPA.fElevation		:= 70;
fbSPA.fTemperature		:= 21.7;
fbSPA.eFunction		:= eSPA_ZA_RTS;

IF bExecute THEN
    fbSPA();
    eErrorCode	:= fbSPA.iErrorCode;

    fSunZenith	:= fbSPA.fZenith;
    fSunAzimuth	:= fbSPA.fAzimuth;
    tSunrise		:= LREAL_TO_TIME(fbSPA.fSunrise*60*60*1000);
    tSunset		:= LREAL_TO_TIME(fbSPA.fSunset*60*60*1000);
END_IF

Wie im Kapitel Visualisierung beschrieben, können Sie die in der Bibliothek enthaltene Visualisierung Ihrem Projekt hinzufügen. Den Platzhaltern weisen Sie, wie im Screenshot dargestellt, Ihre zuvor deklarierten Variablen zu.

3. Test

Kompilieren Sie das erstellte PLC-Programm.
Stellen Sie sicher, dass sich TwinCAT auf dem gewählten Zielsystem im Run Modus befindet.
Führen Sie von TwinCAT PLC Control aus einen Login auf dem gewünschten Laufzeitsystem durch. Starten Sie das SPS-Programm.

Indem Sie die lokale Variable bExecute auf TRUE setzen, wird die Berechnung ausgeführt. Dies ist beispielsweise über 'online write' oder den Button in der Visualisierung möglich.
Die Visualisierung sollte Ihnen nun folgende Ergebnisse präsentieren:

Auf analoge Weise lassen sich die Sonnenstandswinkel anderer Standorte zu anderen Zeiten innerhalb der gegebenen Wertebereiche berechnen. Sollte ein Eingangsparameter ungültig sein, so wird an eErrorCode der entsprechende Enumerationswert des Fehlers angezeigt.

Zum Speichern dieses Beispielprogramms hier klicken:
TcPlcSPA_Sample.zip.

Entwicklungsumgebung | Zielplattform | Einzubindende SPS Bibliotheken
TwinCAT v2.10 Build >= 1320 | PC oder CX (x86, ARM) | TcSPA.Lib