1

Téma: Opakovené časované spouštění funkcí

Často je potřeba spouště různé funkce, vždy co XXX sekund nebo minut nebo hodin nebo dní atd.

Příkladem může být regulace topení - každých 5 vteřin potřebujeme aktualizovat teplotu, každých 15 minut odeslat data na portál, každých 5 minut aktualizovat display, každý den zapnout čerpadlo aby se protočilo a tak dále.

Následující příklad ukazuje kostru programu, který toto řeší. Jsou zde uvedeny tři funkce, které se spouští vždy co 5, 8 a 15 sekund.

Samozřejmě pokud potřebujete dobu v hodinách a né v sekundách, pak jednoduše použijete pravidlo že 1 hodina = 3600 sekund.

Počet funkcí lze samozřejmě rozšířit i na více než tři uvedené v příkladu. Z programu je to více než zřejmé, jak to udělat.

Dejte si však pozor, aby kód vykonávaný v jednotlivých funkcích netrval příliš dlouho. Pokud to bude do jedné vteřiny, tak není problém, ale pokud by jste tam dali nějaké dlouhé čekání a podobně, tak to pak celé nebude z principu fungovat. Program musíte navrhnout tak, aby všechny funkce byly neblokující. To znamená vykonat akci a na nic nečekat.

Program využívá sys[4], což je NTP čas (proměnná která zvyšuje svou hodnotu každou sekundu). Pokud zařízení SDS nemá kontakt s NTP serverem, i přesto je tento program funkční, protože zařízení SDS automaticky zvyšuje čas každou sekundu samo.

#define F1_OPAKOVAT_SEC 5
funkce_1
{
  echo('FUNKCE 1');
}

#define F2_OPAKOVAT_SEC 15
funkce_2
{
  echo('FUNKCE 2');
}

#define F3_OPAKOVAT_SEC 8
funkce_3
{
  echo('FUNKCE 3');
}


var next_F1, next_F2, next_F3;

main
{

 // inicializace sem atd...

 // zacnu
 next_F1 = sys[4] + F1_OPAKOVAT_SEC;
 next_F2 = sys[4] + F2_OPAKOVAT_SEC;
 next_F3 = sys[4] + F3_OPAKOVAT_SEC;

 main_loop:

 if (sys[4] > next_F1) { next_F1 = sys[4] + F1_OPAKOVAT_SEC; funkce_1(); }
 if (sys[4] > next_F2) { next_F2 = sys[4] + F2_OPAKOVAT_SEC; funkce_2(); }
 if (sys[4] > next_F3) { next_F3 = sys[4] + F3_OPAKOVAT_SEC; funkce_3(); }

 goto main_loop;

}
Pochlubte se - popište jak využíváte své zařízení SDS zde ! Můžete si bezplatně přidat svou reklamu !