SunRiseSet, sunrise and sunset calculator

  1. Home
  2. Knowledge Base
  3. Manualistica
  4. Programmazione IEC 61131-3
  5. Libreria matematica
  6. SunRiseSet, sunrise and sunset calculator

Questo blocco funzione permette di calcolare l'orario dell'alba e del tramonto in un determinato giorno in una qualsiasi posizione geografica, è un blocco funzione protetto per utilizzarlo occorre richiedere il codice di protezione, vedi protezione funzioni e blocchi funzione. E' comunque possibile utilizzarlo liberamente in modo test per 15 Min.

In JDate occorre indicare la data giuliana di cui si vuole calcolare gli orari di alba e tramonto. In Latitude e Longitude le coordinate geografiche della posizione in cui si vuole calcolare gli orari di alba e tramonto.

Eseguendo il FB verrà ritornato in JRise la data giuliana con indicazione dell'ora dell'alba, in JSet la data giuliana con indicazione dell'ora del tramonto ed in JTransit la data giuliana con indicazione del mezzogiorno. Ricordo che le ore sono sempre riferite all'orario solare.

Function block
CODESYS: Non disponibile
LogicLab: eLLabMathsLib

JDate (LREAL) Valore giorno giuliano di cui calcolare alba e tramonto. Fissare ora alle 12:00:00.

Latitude (LREAL) Valore di latitudine espressa in gradi della posizione geografica.

Longitude (LREAL) Valore di longitudine espressa in gradi della posizione geografica.

Fault (BOOL) Attivo in caso di errore nella gestione.

JTransit (LREAL) Valore giorno giuliano con ora in cui il sole transita per il mezzogiorno.

JRise (LREAL) Valore giorno giuliano con ora dell'alba.

JSet (LREAL) Valore giorno giuliano con ora del tramonto.

Errori

In caso di errore eseguendo immediatamente dopo la funzione SysGetLastError è possibile rilevare il codice di errore. Fare riferimento alla tabella seguente per la descrizione.

Esempi

Come utilizzare gli esempi.
Nel seguente esempio è eseguito il calcolo dell'ora di alba e di tramonto e di mezzogiorno alla posizione di Elsist al giorno 9 di settembre del 2020.

LogicLab (Ptp179)
PROGRAM ST_SunRiseSet
VAR
    i : UDINT; (* Auxiliary variable *)
    Sun : SunRiseSet; (* SunRiseSet FB instance *)
    DateTime : ARRAY[0..3] OF DATETIMESTRUCT; (* Date/Time structure *)
END_VAR

// *****************************************************************************
// PROGRAM "ST_SunRiseSet"
// *****************************************************************************
// Calculates the values on Elsist location at the 9 of september 2020.
// -----------------------------------------------------------------------------

    // Date: 09/09/2020 12:00:00 is Giulian day:2459102.000.

    IF (SysFirstLoop) THEN
        DateTime[0].Day:=11; DateTime[0].Month:=9; DateTime[0].Year:=2020; DateTime[0].Hour:=12; DateTime[0].Minute:=0; DateTime[0].Second:=0;
        Sun.JDate:=DateTimeToJDay(ADR(DateTime)); //Julian date

        // Set geographical coordinates.

        Sun.Latitude:=LREAL#45.137161;
        Sun.Longitude:=LREAL#8.450890;
    END_IF;

    // Execute calculation.

    Sun();

    // Converts Julian dates on Gregorian.

   i:=JDayToDateTime(Sun.JTransit, ADR(DateTime[1]));
   i:=JDayToDateTime(Sun.JRise, ADR(DateTime[2]));
   i:=JDayToDateTime(Sun.JSet, ADR(DateTime[3]));

// [End of file]

Ti è stato utile questo articolo ?

Ultimo aggiornamento: 16 Settembre 2020