<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[SDS PLC/PAC: Měření Energie & OnlineTechnology.cz - Opakovené časované spouštění funkcí]]></title>
	<link rel="self" href="https://forum.sds.an-d.cz/extern.php?action=feed&amp;tid=130&amp;type=atom" />
	<updated>2011-11-19T11:33:22Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.sds.an-d.cz/viewtopic.php?id=130</id>
		<entry>
			<title type="html"><![CDATA[Opakovené časované spouštění funkcí]]></title>
			<link rel="alternate" href="https://forum.sds.an-d.cz/viewtopic.php?pid=686#p686" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[adamn]]></name>
				<uri>https://forum.sds.an-d.cz/profile.php?id=7</uri>
			</author>
			<updated>2011-11-19T11:33:22Z</updated>
			<id>https://forum.sds.an-d.cz/viewtopic.php?pid=686#p686</id>
		</entry>
</feed>
