FB a knihovny Mosaic FB, meteo, programování 04.03.2021 12:41 04.03.2021 12:41

1 Základní informace

Předpovědní služba PV Forecast poskytuje předpověď osvitu na následujících 24 až 48 hodin pro libovolný bod v České republice s hodinovým nebo denním krokem. Data jsou poskytována jako průměrný osvit W/m2 v danou hodinu nebo jako celková denní suma ve Wh/m2. Hodnoty osvitu jsou vztaženy k vodorovné rovině. Pro předávání informací registrovaným uživatelům se používá rozhraní přístupné přes http protokol (web).

2 Princip získání dat

Pro získání dat je zapotřebí sestavit dotaz s klientským klíčem a polohou, která byla zadána při registraci. V dotazu je také možné zvolit požadovaný formát a délku dat. Předpovídaný osvit se aktualizuje dvakrát denně před 12. a 24. hodinou. Je třeba vzít v úvahu, že s každým dalším výpočtem se předpověď zpřesňuje. I přesto, že po 12. i po 24. hodině jsou poskytována data na stejné období, po 24. hodině je předpověď přesnější. Z toho důvodu je dobré provádět dotazování dvakrát denně.

 

Jako doplňková informace je poskytována předpověď teploty a srážkového úhrnu. Teplota je poskytována ve °C s hodinovým krokem nebo jako denní minimum a maximum. Srážkový úhrn je uveden v milimetrech za hodinu případně v milimetrech za celý den.

Pro předávání informací registrovaným uživatelům se používá rozhraní přístupné přes http protokol. 

 

3 Nastavení komunikačního kanálu

Pro komunikaci se využívá ethernetového rozhraní v PLC. Velikost přijímací i vysílací zóny je 512 bytů, protokol je nastaven na TCP Client a vzdálený port je 80.

 

4 Funkční blok PVF_Forecast

Funkční blok slouží k získání předpovědi solárního osvitu na horizontální plochu, teploty a srážkového úhrnu pro 48 hodin v hodinovém intervalu. Předpověď se aktualizuje před 12. a 24. hodinou, od 12. hodiny je k dispozici předpověď na další den, která je dále zpřesněna předpovědí vydanou před půlnocí.

 

4.1 VAR_INPUT

Proměnná

Typ

Popis

enable

BOOL

Aktivace stažení dat

chanCode

UINT

Kód komunikačního kanálu (např. konstanta ETH1_uni0)

key

STRING[20]

Klíč obdržený při registraci

lat

REAL

Zeměpisná šířka

lon

REAL

Zeměpisná délka

 

4.2 VAR_IN_OUT

Proměnná

Typ

Popis

data

T_PVF_Prediction

Struktura obsahující předpověď pro 48 hodin


 

4.3 VAR_OUTPUT

Proměnná

Typ

Popis

done

BOOL

Indikace dokončení stahování předpovědi

busy

BOOL

Indikace, že právě probíhá stahování předpovědi

error

USINT

Kód chyby

errorMsg

STRING[255]

Popis chyby

 

 

5 Funkční blok PVF_GetPower

Funkční blok přepočítá hodnotu slunečního osvitu na horizontální rovině na energii generovanou fotovoltaickými panely, které mají definovaný náklon, azimut, špičkový výkon kilowatt-peak a účinnost.

 

5.1 VAR_INPUT

Proměnná

Typ

Popis

Minimum Maximum

enable

BOOL

Aktivací proměnné se provede přepočet

   

lat

REAL

Zeměpisná šířka

48,5 51

lon

REAL

Zeměpisná délka

12 19

inclination

REAL

Náklon, °

0 90

azimuth

REAL

Azimut, °

-90 90

kiloWattPeak

REAL

kWp fotovoltaické elektrárny

0,01 100

efficiency

REAL

Účinnost

10 100


 

5.2 VAR_IN_OUT

Proměnná

Typ

Popis

data

T_PVF_Prediction

Struktura obsahující předpověď pro 48 hodin

 

5.3 VAR_OUTPUT

Proměnná

Typ

Popis

done

BOOL

Indikace dokončení stahování předpovědi

busy

BOOL

Indikace, že právě probíhá stahování předpovědi

error

USINT

Kód chyby

errorMsg

STRING[255]

Popis chyby

 

6 Příklad použití

 

6.1 Program

V příkladu se využívají funkční bloky pro stažení předpovědi PVF_Forecast a přepočet na vyrobenou energii PVF_GetPower. V příkladu je také použit funkční blok pro vykreslování tří časových průběhů do jednoho grafu. Ten není součástí knihovny, ale v projektu je možno i upravit zdrojový kód tohoto funkčního bloku.

VAR_GLOBAL RETAIN
    key         : string[20];
    irrad       : real;
    lat         : real;
    lon         : real;
    inclination : real;
    azimuth     : real;
    kWp         : real;
    efficiency  : real;
END_VAR

VAR_GLOBAL
  graph_data : ARRAY [0..2, 0..PVF_PRED_MAX_SIZE] OF REAL;
END_VAR

PROGRAM prgMain
  VAR_INPUT
  END_VAR
  VAR_OUTPUT
  END_VAR
  VAR
      busy : BOOL;
      downloadEnable : BOOL;

      Forecast : PVF_Forecast;
      PowerFromIrradiation : PVF_GetPower;
      forecast_data : T_PVF_Prediction;

      errorForecast : string[255];
      errorPower : string[255];

// Graphs
      Graph : fbGraph3;
      Graph_Names : T3xSTRING8 := ['irr.','power','temp.'];
      Graph_Enabled : T8BitArray := [true, true, true];
      Graph_CanvasData : TCanvasData2048;
  END_VAR
  VAR_TEMP
      i    : UINT;
  END_VAR

    forecast(
        enable := downloadEnable AND NOT busy,
        chanCode := ETH1_uni0,
        key := key,
        lat := lat,
        lon := lon,
        data := forecast_data,
        errorMsg => errorForecast);


    PowerFromIrradiation(
        enable := forecast.done,
        lat := lat,
        lon := lon,
        inclination := inclination,
        azimuth := azimuth,
        kiloWattPeak := kWp,
        efficiency := efficiency,
        data := forecast_data,
        errorMsg => errorPower);

    IF PowerFromIrradiation.done THEN
        FOR i := 0 TO (PVF_PRED_MAX_SIZE - 1) DO
            graph_data[0,i] := forecast_data.irradiance[i].value;
            graph_data[1,i] := forecast_data.power[i].value;
            graph_data[2,i] := forecast_data.temperature[i].value;
        END_FOR;
    END_IF;

    busy := forecast.busy or PowerFromIrradiation.busy;

    IF not busy THEN
        downloadEnable := false;
    END_IF;

    Graph(
        autoSize := 1,
        ratio := 1.8,
        minX := 0,
        maxX := 47,
        numPoints := UINT_TO_UDINT(PVF_PRED_MAX_SIZE),
        valid := UINT_TO_UDINT(PVF_PRED_MAX_SIZE),
        data := graph_data[0,0],
        enabled := Graph_Enabled,
        c := void(Graph_CanvasData),
        names := Graph_Names);
END_PROGRAM

 

6.2 Grafy

Grafy ukazují tři různé průběhy, kdy je možno mezi nimi přepínat anebo zobrazovat všechny najednou, ale využívá se jedna osa Y, což způsobí, že se především průběhy teploty a generované energie v grafu vizuálně téměř ztratí. Při kliknutí na některé místo v grafu se vypíší hodnoty průběhů v konkrétním bodě.

 

Připojené dokumenty