<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?action=history&amp;feed=atom&amp;title=SDS-C%3A_sdsc_rsvdf</id>
	<title>SDS-C: sdsc rsvdf - Historie editací</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?action=history&amp;feed=atom&amp;title=SDS-C%3A_sdsc_rsvdf"/>
	<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_rsvdf&amp;action=history"/>
	<updated>2026-06-13T18:01:45Z</updated>
	<subtitle>Historie editací této stránky</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_rsvdf&amp;diff=113&amp;oldid=prev</id>
		<title>Adamn: Založena nová stránka s textem „ Tato stránka popisuje programovací jazyk '''SDS-C''', který je dostupný na vybraných zařízeních SDS.   Některá zařízení používají FULL-C,…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_rsvdf&amp;diff=113&amp;oldid=prev"/>
		<updated>2021-03-18T19:36:30Z</updated>

		<summary type="html">&lt;p&gt;Založena nová stránka s textem „ Tato stránka popisuje programovací jazyk &amp;#039;&amp;#039;&amp;#039;SDS-C&amp;#039;&amp;#039;&amp;#039;, který je dostupný na vybraných zařízeních SDS.   Některá zařízení používají FULL-C,…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt; Tato stránka popisuje programovací jazyk '''SDS-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají FULL-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
Jazyk SDS-C má vyhrazené proměnné a příkazy. Přes tyto proměnné a příkazy ovládá váš SDS-C program zařízení SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce ==&lt;br /&gt;
&lt;br /&gt;
'''Seznam systémových funkcí (které poskytuje zařízení SDS-C) naleznete [[SDS-C: sdsc sysf|zde]].'''&lt;br /&gt;
&lt;br /&gt;
Samozřejmě že si můžete definovat své vlastní uživatelské funkce (pokud jejich název nebude kolidovat s vyhrazenými slovy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== #define ==&lt;br /&gt;
&lt;br /&gt;
Můžete si zpřehlednit program a především centralizovat řadu funkcí, a to pomocí deklarace '''#define'''.&lt;br /&gt;
&lt;br /&gt;
Zejména pokud máte často se opakující odkaz v celém programu (např. často ovládáte např. třetí relé z mnoha míst v programu), pak je výborné si program zpřehlednit, a zejména, pokud se pak rozhodnete ve zmíněném příkladu přejít z třetího na první relé, mít možnost tuto změnu provést jediným zásahem na jediném místě.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define RELE sys[231]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takto teď kdekoliv v programu, kam napíšete '''RELE''' (pozn. kromě ohraničených textů a komentářů), bude automaticky vloženo '''sys[231]''' (nebo cokoli jiného co si pak sami definujete).&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
RELE = 1; //zapne rele&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Všechny názvy musí být kompletně velkými písmeny.&lt;br /&gt;
&lt;br /&gt;
Pozor - lze použít jen jednu úroveň (tzn. nelze vnořit define do define).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhrazené proměnné SDS-C ==&lt;br /&gt;
&lt;br /&gt;
Vyhrazené proměnné v SDS-C jsou tzv. ''systémové proměnné''. Jejich obsah odpovídá aktuálnímu fyzickému stavu systému, tj. HW zařízení.&lt;br /&gt;
Stejně tak lze pomocí specifických systémových proměnných zasahovat i do konfigurace, měnit textové údaje ve webovém rozhraní atd.&lt;br /&gt;
&lt;br /&gt;
'''Kompletní seznam naleznete [[SDS-C: sdsc_sysp|zde]].'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uživatelské proměnné ==&lt;br /&gt;
&lt;br /&gt;
Programátor si může v SDS-C definovat své vlastní proměnné.&lt;br /&gt;
&lt;br /&gt;
Použije se pro tento účel klíčové slovo ''var''. Toto je jediný možný definiční typ pro proměnnou, akceptovaný v SDS-C.&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 var pocet;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Definuje proměnnou ''pocet'', typ 32-bitů signed (to znamená: 1 bit pro znaménko a 31 bitů pro číslo).&lt;br /&gt;
&lt;br /&gt;
V této verzi je možné používat pouze 32-bit/signed. Proto se do programu nepíše typ proměnné, ale jen ''var'' a zvolený název.&lt;br /&gt;
&lt;br /&gt;
Co a jak když chcete pracovat s desetinnými čísly? Snadná pomoc:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
var a,b,x, celaCast, desetinnaCast, preciznost;&lt;br /&gt;
 &lt;br /&gt;
a = 5;&lt;br /&gt;
b = 2;&lt;br /&gt;
&lt;br /&gt;
// ted chci x = a/b, tj x=5/2, tj. x=2.5&lt;br /&gt;
// ale mam jen celociselne deleni...&lt;br /&gt;
&lt;br /&gt;
preciznost = 10; // nebo 100, 1000, ... jak moc je potreba&lt;br /&gt;
&lt;br /&gt;
x = (a * preciznost) / b;  // posuneme tedy desetinnou carku nasobenim &lt;br /&gt;
&lt;br /&gt;
// x je ted 25, takze&lt;br /&gt;
&lt;br /&gt;
celaCast = x / preciznost;&lt;br /&gt;
desetinnaCast = x % preciznost;&lt;br /&gt;
&lt;br /&gt;
// vysledek -&amp;gt; celaCast = 2, desetinnaCast = 5  &lt;br /&gt;
&lt;br /&gt;
echo('vysledek = ',celaCast,'.',desetinnaCast);   //-&amp;gt; vypise: vysledek = 2.5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Texty ==&lt;br /&gt;
&lt;br /&gt;
Jazyk SDS-C umožňuje pracovat pouze s pevně definovanými, konstantními (tj. dále neměnnými) texty. &lt;br /&gt;
&lt;br /&gt;
Jazyk SDS-C má tedy z hlediska práce s texty řadu omezení, vůči jazyku FULL-C.&lt;br /&gt;
&lt;br /&gt;
Všechny texty (jako konstanty) si definuje programátor. Definice lze provést kdekoliv.&lt;br /&gt;
&lt;br /&gt;
Např.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
smtp_send('joe@foo.bar', 'subject', 'Další definovaný text, hodnota i=', i, ' a další text...');&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Texty lze předat pouze jako parametry funkcí a do některých systémových proměnných, a dále už nikam jinam.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhrazené klíčové slova ==&lt;br /&gt;
&lt;br /&gt;
V jazyku SDS-C je řada vyhrazených slov, které mají pevně přiřazenou funkci. Jejich znalost je pro&lt;br /&gt;
programovaní v SDS-C naprosto '''nezbytná'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''return'''&lt;br /&gt;
&lt;br /&gt;
Umožňuje předčasný návrat ze zavolané funkce.&lt;br /&gt;
Příklad:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (i % j == 0) return;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pokud zavoláte '''return''' přímo v ''main'', pak je ''main'' předčasně ukončen a vzápětí znovu spuštěn od svého začátku.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''label'''&lt;br /&gt;
&lt;br /&gt;
Definuje bod v programu (návěstí), kam je možné odkudkoliv odjinud skočit. V současné verzi SDS-C není vyžadován (byl to původně vyžadováno v prvních starých verzích).&lt;br /&gt;
&lt;br /&gt;
Využívá se např. pro vytváření smyček.&lt;br /&gt;
&lt;br /&gt;
Definice cílového bodu (tj. kam lze skočit):&lt;br /&gt;
&lt;br /&gt;
lze použít dvě varianty:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 -název-:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 label -název-:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Všimněte si, že si můžete zvýšit přehlednost programu tím, že před samotný název návěstí dáte slovo '''label'''. Pak lze v editoru snadněji najít pohledem místa, kam se bude skákat (pozn. jiný význam to prakticky nemá).&lt;br /&gt;
&lt;br /&gt;
Skok se provede takto:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 goto -název-;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pozor! Definice bodu návěstí lze provést pouze '''nad''' všemi skoky (goto) na konkrétní návěst.&lt;br /&gt;
Pokud bude tedy skok (goto) nad místem definice cíle (label), bude to bráno jako chyba.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''if'''&lt;br /&gt;
&lt;br /&gt;
Pomocí ''if'' se provádí větvení programu dle aktuálního stavu.&lt;br /&gt;
Provede se test zadané podmínky, a na základě výsledku (pravda/nepravda) se provede příslušná zadaná akce.&lt;br /&gt;
Lze provést pouze jediné volání funkce nebo jediný skok (label), přičemž pro pravdivý výsledek lze definovat takovouto akci a stejně tak i pro nepravdivý výsledek.&lt;br /&gt;
&lt;br /&gt;
'''POZOR''' Vždy jsou vykonány kompletně '''všechny''' testované vstupy v podmínce '''if''' - ať pak nejste překvapeni !&lt;br /&gt;
&lt;br /&gt;
Příklad:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (sys[24] &amp;lt; 23) posliSMS();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (i % 10 == 0) goto neni10 else jinaFunkce();    //pokud i je nasobek 10, pak se skoci na label neni10, jinak se vola jinaFunkce&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (q &amp;amp; 2 &amp;amp;&amp;amp; z != u) neco() else necoJineho();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (teplota &amp;lt; 10 &amp;amp;&amp;amp; chci_alarm != 0) hlas_alarm() else return;  //priklad vyuziti return&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takže viz poslední příklad - i když bude platit, že teplota &amp;lt; 10, vždy bude otestován i chci_alarm != 0, a až pak na základě všech výsledků se rozhodne, který příkaz se provede. &lt;br /&gt;
&lt;br /&gt;
Jak pomocí '''if''' pracovat s bloky kódu, když nechcete volat funkce:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (i != 0) &lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
  echo(' i neni nula ');&lt;br /&gt;
  // atd...&lt;br /&gt;
 &lt;br /&gt;
} else&lt;br /&gt;
 &lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
 echo(' i je nula ');&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
 // dalsi kod...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''var'''&lt;br /&gt;
&lt;br /&gt;
Pomocí ''var'' se definují uživatelské proměnné.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce v SDS-C ==&lt;br /&gt;
&lt;br /&gt;
Funkce jsou ohraničené části programu, které mají svůj specifický název, zadaný programátorem.&lt;br /&gt;
&lt;br /&gt;
Všechny tyto funkce nevracejí hodnotu, lze je pouze zavolat. &lt;br /&gt;
Po svém provedení pokračuje běh programu v místě, odkud byla funkce zavolána.&lt;br /&gt;
&lt;br /&gt;
Využití funkcí - nejčastěji pro opakované kusy programu, aby se nemuselo plýtvat s volným místem pro zápis programu.&lt;br /&gt;
&lt;br /&gt;
Příklad definice funkce ''test'' a jejího zavolání z jiné funkce ''funkceX'':&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
test&lt;br /&gt;
{&lt;br /&gt;
  i += 10;  //nejaky obsah funkce...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
funkceX&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    //zavolame test()&lt;br /&gt;
    test();&lt;br /&gt;
&lt;br /&gt;
    //...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Všimněte si rozdílu definice funkce v SDS-C, ve srovnání s FULL-C. Pro SDS-C funkce nevrací hodnoty a nepřebírá parametry.&lt;br /&gt;
&lt;br /&gt;
Takže pro SDS-C je definice: ''test { . . . };'' kdežto pro FULL-C je odpovídající definice: ''void test(void) { . . . };''&lt;br /&gt;
&lt;br /&gt;
Funkce lze volat odkudkoliv, včetně klíčového slova ''if'' (pouze jako reakci na vyhodnocení podmínky, nikoliv v podmínce samotné).&lt;br /&gt;
&lt;br /&gt;
Některé funkce jsou definovány jako vyhrazené, a některé jsou definovány jako interní pro daný výrobek SDS - viz seznam. Nesmíte použít názvy těchto funkcí pro své vlastní (uživatelské). Celkový počet funkcí je omezen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhrazené funkce v SDS-C ==&lt;br /&gt;
&lt;br /&gt;
Jsou definovány tři základní vyhrazené funkce, které lze použít jedině k definovánému účelu.&lt;br /&gt;
&lt;br /&gt;
Funkce '''main''' obsahuje hlavní program. Pokud si nevytvoříte vlastní smyčku, je po provedení všech instrukcí v ''main'' tato opět spuštěna od začátku (toto se dějě stále dokola po celou dobu kdy je zařízení zapnuto). Z této funkce lze volat jakékoliv podfunkce.&lt;br /&gt;
'''Je povinnost mít funkci ''main'' v programu definovanou.'''&lt;br /&gt;
&lt;br /&gt;
Funkce '''init''' je zavolána jen při resetu zařízení. Není povinnost mít funkci ''init'' v programu definovanou. &lt;br /&gt;
Pozn. funkci ''init'' je možné znovu zavolat odkudkoliv.&lt;br /&gt;
&lt;br /&gt;
Příkaz '''return''' je speciální funkce/příkaz - jedná se pouze o návrat (viz zásobník, tj. předčasné ukončení funkce ve které je ''return'' zavolán). ''return'' se nikde v programu nedefinuje, je to totiž vyhrazené slovo, které se jen používá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Další poznámky ==&lt;br /&gt;
&lt;br /&gt;
Návod pro SDS-C je rozdělen do více stránek na této WiKi.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
</feed>