Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Sonnenauf- und untergang Kategorie: Programmierung (von Hansi - 22.12.2004 22:30)
Als Antwort auf Sonnenauf- und untergang von Thomas - 15.12.2004 17:14
Ich nutze:
C-Control II Unit, C-Control II Station, CC2-Application-Board, OSOPT_V2
Hallo Thomas,

ich habe zwar Formel noch nicht kontrolliert, aber eine Genauigkeit von +/- 5 Minuten sollte jedem
reichen, ich werde Deinen Source bei mir zur Steuerung meiner Rolladaden verwenden.

Danke!

GruĂ? Hansi



> Hallo zusammen,
>
> fĂĽr die eigene Haussteuerung mussten, damit die Rolladen bei Abwesenheit auf- und abfahren, die
> Zeitpunkte der Morgen- und Abenddämmerung bestimmt werden.
>
> Angeregt durch das Programm zu Jalusie-Steuerung von Axel Rathey sowie der Formeldarstellung
> unter http://lexikon.astronomie.info/zeitgleichung/ habe ich die Funktionen zur Berechnung von
> Sonnenauf und -untergang sowie der verschiedenen Dämmerungszeitpunkte in ein Modul zusammen-
> gefasst.
>
> sun.c2
>
> Aufruf: sun.rise_set (int day, float breitengrad, float laengengrad)
>
> day ist eine Zahl von 1 (1.Januar) bis 365 (31.Dezember) - wir als day Null ĂĽbergeben, so werden
> die Werte fĂĽr den aktuellen Tag berechnet.
>
> Da in c2 keine komlexen Type als Return-Wert möglich sind, werden die Ergebnisse in sun.rs[]
> gespeichert.
>
> Vielleicht kann es jemand gebrauchen.
>
> Beste GrĂĽĂ?e
> Thomas
>
> Hier ein Testprogramm und nachfolgend das Modul:
>
> thread main {
>   float Laenge, Breite;
>   int Tage;
>
>   // Berechnung fuer heute
>   Tage = 0;
>
>   // Koordinaten fuer Dortmund
>   Laenge = 7.45;
>   Breite = 51.53;
>
>   // Aufruf der Berechnung
>   sun.rise_set (Tage, Breite, Laenge);
>
>   float auf, ab;
>   int aufStd, aufMin, abStd, abMin;
>   int i;
>
>
>   // Die Ergebnisse stehen in sun.rs[i] fĂĽr
>   // i=sun.tranit =  Transit,
>   // i=civil = bĂĽrgerliche Dämmerung
>   // i=nautical = nautische Dämmerung
>   // i=astronomical = astronomische Dämmerung
>  
>   for i = sun.transit ... sun.astronomical {
>     auf     = sun.rs[i].riseTime;
>     ab      = sun.rs[i].setTime;
>     aufStd  = sun.rs[i].riseHour;
>     aufMin  = sun.rs[i].riseMinute;
>     abStd   = sun.rs[i].setHour;
>     abMin   = sun.rs[i].setMinute;
>   }
> }
>

>
> Hier nur das Modul sun.c2:
>
> /********************************************************************
>
>     sun.c2
>
>     release    : 2004/12/15
>     author     : Thomas Wahle
>     based on : Axel Rathey, Dr. Roland Brobeck)
>     requires   : math.c2, system.c2, myconst.c2
>     version    : 0.1
>     contents  : routine to calculate transit and twilight
>    
>     input:   day 1 = 01.01 ... 356 = 31.12
>              current date is used if day is eq. 0
>              latitude (grad)
>              longitude (grad)
>
>     output:  sun.rs[i].riseTime   = sunrise as float
>              sun.rs[i].setTime    = sunset as float
>              sun.rs[i].riseHour   = sunrise hour as int
>              sun.rs[i].riseMinute = sunrise minute as int
>              sun.rs[i].setHour    = sunset hour as int
>              sun.rs[i].setMinute  = sunset minute as int
>              
>              where i may be:
>              sun.transit to get the transit
>              sun.civil to get the civil twilight
>              sun.nautical to get the nautical twilight
>              sun.astronomical to get the astronomical twilight
> ********************************************************************/

>
> // Constants for transit and twilight definitions
> const transit = 0;
> const civil = 1;
> const nautical = 2;
> const astronomical = 3;
> const h[] = -0.0145444,  // transit
>             -0.1047197,   // civil twilight
>             -0.2094395,   // nautical twilight
>             -0.3141592;   // astronomical twilight
>
> // Type to return sunset and sunrise
> type stimeType {
>   float riseTime;
>   int riseHour;
>   int riseMinute;
>   float setTime;
>   int setHour;
>   int setMinute;
> }
>
> stimeType rs[4];
>
> function rise_set (int day, float latitude, float longitude){
>
>   if day == 0 {
>     int mcnt;
>     for mcnt = 1 ... system.month()-1
>       day = day + myconst.DOM[mcnt];
>     day = day + system.day()+1;
>   }
>   // convert latizude from grad into rad
>   latitude = latitude * constant.PI/180.0;
>   float decl, eqTime, deltaTime;
>   decl = 0.40954*math.sin(0.0172*(day-79.35));
>   eqTime = -0.1752*math.sin(0.033430*day+0.5474)-0.1340*math.sin(0.018234*day-0.1939);
>
>   int time2utc;
>   if system.dst() == 0
>     time2utc = 1;
>   else
>     time2utc = 2;
>  
>   int i;
>   for i = transit ... astronomical {
>     deltaTime = 12*math.acos((math.sin(h[i])-math.sin(latitude)*math.sin(decl))/(math.cos(latitude)
>        *math.cos(decl)))/constant.PI;
>     rs[i].riseTime = 12 - deltaTime - eqTime - longitude /15 + time2utc;
>     rs[i].setTime = 12 + deltaTime - eqTime - longitude /15 + time2utc;
>     rs[i].riseHour = rs[i].riseTime;
>     rs[i].riseMinute = (rs[i].riseTime-rs[i].riseHour)*60;
>     rs[i].setHour = rs[i].setTime;
>     rs[i].setMinute = (rs[i].setTime-rs[i].setHour)*60;
>   }
> }
>

>


    Antwort schreiben


Antworten:

Re: Sonnenauf- und untergang (von Michael - 15.01.2005 19:26)