<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[SDS PLC/PAC: Měření Energie & OnlineTechnology.cz - Opakovené časované spouštění funkcí]]></title>
		<link>https://forum.sds.an-d.cz/viewtopic.php?id=130</link>
		<atom:link href="https://forum.sds.an-d.cz/extern.php?action=feed&amp;tid=130&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Nejnovější příspěvky v Opakovené časované spouštění funkcí.]]></description>
		<lastBuildDate>Sat, 19 Nov 2011 11:33:22 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Opakovené časované spouštění funkcí]]></title>
			<link>https://forum.sds.an-d.cz/viewtopic.php?pid=686#p686</link>
			<description><![CDATA[<p>Často je potřeba spouště různé funkce, vždy co XXX sekund nebo minut nebo hodin nebo dní atd.</p><p>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.</p><p>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. </p><p>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. </p><p>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.</p><p>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.</p><p>Program využívá <strong>sys[4]</strong>, 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. </p><div class="codebox"><pre><code>#define F1_OPAKOVAT_SEC 5
funkce_1
{
  echo(&#039;FUNKCE 1&#039;);
}

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

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


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] &gt; next_F1) { next_F1 = sys[4] + F1_OPAKOVAT_SEC; funkce_1(); }
 if (sys[4] &gt; next_F2) { next_F2 = sys[4] + F2_OPAKOVAT_SEC; funkce_2(); }
 if (sys[4] &gt; next_F3) { next_F3 = sys[4] + F3_OPAKOVAT_SEC; funkce_3(); }

 goto main_loop;

}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (adamn)]]></author>
			<pubDate>Sat, 19 Nov 2011 11:33:22 +0000</pubDate>
			<guid>https://forum.sds.an-d.cz/viewtopic.php?pid=686#p686</guid>
		</item>
	</channel>
</rss>
