<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
	<id>https://wiki.merenienergie.cz/subdom/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Adamn</id>
	<title>SDS: Síťový Dohledový Systém - Příspěvky uživatele [cs]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.merenienergie.cz/subdom/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Adamn"/>
	<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Speci%C3%A1ln%C3%AD:P%C5%99%C3%ADsp%C4%9Bvky/Adamn"/>
	<updated>2026-11-03T13:42:05Z</updated>
	<subtitle>Příspěvky uživatele</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG&amp;diff=991</id>
		<title>SDS BIG</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG&amp;diff=991"/>
		<updated>2026-10-31T16:19:41Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka platí pro SDS Druhé Produktové Řady (viz [[Seznam Všech SDS]])&lt;br /&gt;
&lt;br /&gt;
== SDS BIG / BIG2 : 64 / 128 / 512 ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
* jednodeskový Ethernetový modul - Plug &amp;amp; Play &lt;br /&gt;
* komunikace: nativně Ethernet 100 MBit/sec MDI/MDIX &lt;br /&gt;
* webové rozhraní&lt;br /&gt;
* programovatelnost&lt;br /&gt;
* autonomní provoz&lt;br /&gt;
* bezpečnost&lt;br /&gt;
* výrobek SDS BIG nebo SDS BIG2 - každý s výlučnými subvariantami: 64 / 128 / 512&lt;br /&gt;
* a s doplňujícími variantami: +DP, +DS84&lt;br /&gt;
* varianta napájení Active PoE IEEE802.3af Class 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Toto SDS je aktuálně v prodeji.&lt;br /&gt;
&lt;br /&gt;
Původní produkt SDS-BIG byl postupně inovován, a je tedy k dispozici jako SDS-BIG2, který je plně zpětně kompatibilní ve všech vlastnostech, a současně přidává nové.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;'''Jak toto SDS koupit ?''' Na oficiálním eShopu '''www.onlinetechnology.cz'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Modul ==&lt;br /&gt;
&lt;br /&gt;
Modul SDS-BIG, respektive jeho '''aktualizace''' s názvem SDS-BIG2, je k dispozici v DIN plastové krabičce, určené pro montáž do rozvaděče.&lt;br /&gt;
&lt;br /&gt;
Modul je možné spojit (uvnitř stejné DIN krabičky) se sandwich deskou, a tak rozšířit SDS-BIG o např.: grafický display, klávesnici, DALI sběrnici (master), GSM/LTE modul, LoRA síť, CAN, RS232, M-BUS  atd.&lt;br /&gt;
&lt;br /&gt;
Modul pracuje na základě jednoprocesorového SoC (System on Chip), kde vykonává výrobcem nahraný firmware, a tento firmware dále vykonává uživatelem nahraný program (jazyk FULL-C). Firmware je napsán dle vývojových pravidel pro FW Safety, a je založen na bezpečném (Safety) RTOS.&lt;br /&gt;
&lt;br /&gt;
Rozlišení BIG a BIG2 lze provést přečtením typu vypsaného ve webovém rozhraní výrobku, nebo prohlédnutím základní desky (potisk):&lt;br /&gt;
&lt;br /&gt;
SDS-BIG 512 je téměř ve všem cca 3,5x rychlejší než SDS-BIG 128 či 64.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS BIG rev1&amp;lt;/div&amp;gt;&lt;br /&gt;
Základní deska SDS-BIG, bez DIN krabičky (ve které je celý modul umístěn):&lt;br /&gt;
&lt;br /&gt;
[[Soubor:SDS_BIG_rev1_FULL.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS BIG2 DP&amp;lt;/div&amp;gt;&lt;br /&gt;
Základní deska SDS-BIG2-DP, bez DIN krabičky (ve které je celý modul umístěn):&lt;br /&gt;
&lt;br /&gt;
[[Soubor:BIG2-DP-rev1-foto.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS BIG2 DP DS84&amp;lt;/div&amp;gt;&lt;br /&gt;
Základní deska SDS-BIG2-DP-DS84, bez DIN krabičky (ve které je celý modul umístěn):&lt;br /&gt;
&lt;br /&gt;
DOPLNIT OBRÁZEK&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS BIG2 DP DS84 PoE&amp;lt;/div&amp;gt;&lt;br /&gt;
Základní deska SDS-BIG2-DP-DS84-PoE, bez DIN krabičky (ve které je celý modul umístěn):&lt;br /&gt;
&lt;br /&gt;
DOPLNIT OBRÁZEK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Základní prvky a připojení pro všechny varianty SDS-BIG, BIG2 ==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS BIG rev1&amp;lt;/div&amp;gt;&lt;br /&gt;
Obrázek znázorňuje základní prvky modulu SDS-BIG rev1:&lt;br /&gt;
&lt;br /&gt;
[[Soubor:SDS_BIG_rev1_intro.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS BIG2-DP / SDS BIG2-DP-DS84&amp;lt;/div&amp;gt;&lt;br /&gt;
Obrázek znázorňuje základní prvky modulu SDS-BIG2-DP resp. SDS-BIG2-DP-DS84:&lt;br /&gt;
&lt;br /&gt;
[[Soubor:SDS_BIG2_rev1_intro.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS BIG2-DP-DS84-PoE&amp;lt;/div&amp;gt;&lt;br /&gt;
Obrázek znázorňuje základní prvky modulu SDS-BIG2-DP-DS84-PoE:&lt;br /&gt;
&lt;br /&gt;
DOPLNIT OBRÁZEK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zapojení svorek a konektorů ===&lt;br /&gt;
&lt;br /&gt;
Konektor '''SDS-1''':&lt;br /&gt;
{| class=&amp;quot;filehistory&amp;quot; width=&amp;quot;99%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''PIN'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''Funkce'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''Detaily'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| RS485 A+&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Datový vodič sběrnice RS485 (viz [[SDS_BIG:_RS485|návod]])&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| RS485 B-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Datový vodič sběrnice RS485 (viz [[SDS_BIG:_RS485|návod]]),&amp;lt;br&amp;gt; '''pozor, BIG vždy vyžaduje externí rezistor na RS845-BUS-GND'''&amp;lt;br&amp;gt; (ale to už neplatí pro BIG2)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 3&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| RS485 BUS GND (bus ground)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Společný nulový vodič (pozor: GND, nikoliv PE !) sběrnice RS485 - použijte pro vzájemné propojení zařízení na vaší sběrnici&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 4&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| PWM1 OUT&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Výstup PWM1 modulace, tento PIN-4 je spínán (v rytmu PWM1) pomocí BS170 na PIN-5 (PWM1-GND)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 5&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| PWM1 GND&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Nulový vodič spínače PWM1 modulace (tzn. PIN-4 spíná vůči PIN-5)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 6&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Analogový vstup č. 1&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Základní rozsah je 0V až max 33V, měření je vždy vůči PIN-11&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 7&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Analogový vstup č. 2&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Základní rozsah je 0V až max 33V, měření je vždy vůči PIN-11&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 8&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Analogový vstup č. 3&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Základní rozsah je 0V až max 33V, měření je vždy vůči PIN-11&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 9&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Analogový vstup č. 4&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Základní rozsah je 0V až max 33V, měření je vždy vůči PIN-11&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 10&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Analogový vstup č. 5&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Základní rozsah je 0V až max 33V, měření je vždy vůči PIN-11&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 11&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Společný nulový vodič všech analogových vstupů&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Vůči tomuto pinu je prováděno měření napětí na analogových vstupech, sem připojte společný 0V vodič všech A/D vstupů&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 12&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Analogový vstup pro odporové (teplotní) čidlo (obecné napájené měření odporu)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Analogový vstup pro odporové čidlo, vyžadující napájení při měření. Měření PIN-12 je provedeno vůči PIN-13.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 13&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Nulový vodič pro analogový vstup pro odporové čidlo&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Čidlo zapojte vždy mezi PIN-12 a PIN-13&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 14&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Datový vodič 1-Wire sběrnice &amp;quot;A&amp;quot; &lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Pracovní napětí 5V (toto jsou DATA - tj. 1-W sběrnice - zapojte vůči PIN-15)&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 15&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Nulový vodič 1-Wire sběrnice &amp;quot;A&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Vše na 1-Wire sběrnici &amp;quot;A&amp;quot; má GND na PIN-15&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 16&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Napájecí vodič 1-Wire sběrnice &amp;quot;A&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Napájení pro prvky na 1-W sběrnici, napětí +5V&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konektor '''SDS-2''':&lt;br /&gt;
{| class=&amp;quot;filehistory&amp;quot; width=&amp;quot;99%&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''PIN'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''Funkce'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''Detaily'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 1&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 8 minus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Katoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 2&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 8 plus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 3&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 7 minus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Katoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 4&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 7 plus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 5&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 6 minus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Katoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 6&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 6 plus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 7&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 5 minus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Katoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 8&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 5 plus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 9&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 4 minus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Katoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 10&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 4 plus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 11&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 3 minus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Katoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 12&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 3 plus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 13&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 2 minus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Katoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 14&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 2 plus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 15&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 1 minus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Katoda LED v optočlenu&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| 16&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| OPTO 1 plus&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;| Anoda LED v optočlenu&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Konektory '''SC1''' a '''SC2''' a '''SC3''' jsou určeny pro připojení doplňující sandwich desky. Různé doplňující desky mohou využívat různé tyto konektory (tedy nezbytně ne všechny).&lt;br /&gt;
&lt;br /&gt;
PWM2, PWM3 a PWM4 jsou dostupné jen pro BIG2. Pozn. pozor - PWM2 není vyvedena na hlavní svorky.&lt;br /&gt;
&lt;br /&gt;
BIG2 má, oproti BIG, vylepšené reléové výstupy. BIG2 poskytuje 6x přepínací kontakt (zatímco BIG pouze 6x spínací). BIG2 je také navrženo s většími a robustnějšími relé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Napájení modulu ===&lt;br /&gt;
&lt;br /&gt;
Napájení lze použít stejnosměrné (DC) nebo střídavé (AC), a napájecí napětí se vždy připojuje na svorkový konektor označený '''X2'''. V případě varianty výrobku, která podporuje Active PoE, lze celý modul napájet přes LAN připojení (dle normy IEEE802.3af) - v tomto případě SDS poskytuje i externí výstup 12Vdc nebo 24Vdc (dle typu), získaný z PoE vstupu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pouze BIG''' (není na BIG2): Výstupní (modulem zpracované) napájení (usměrněné na DC a jištěné pojistkou) je k dispozici na svorkovém konektoru označeném '''X4'''. Tento konektor poskytuje pouze výstup (nelze přes něj modul SDS napájet), a právě tento výstup se především používá pro externí napájení jednotlivých optických vstupů.&lt;br /&gt;
&lt;br /&gt;
'''Pouze BIG2''' (není na BIG): konektor X5 poskytuje dva PWM výstupy a jejich společnou zem (PWMGND), a to specificky pro PWM3 a PWM4 výstupy.&lt;br /&gt;
&lt;br /&gt;
'''Pouze BIG2 PoE''' - napájení přes Active PoE (LAN konektor) nebo AC/DC přes svorky na konektoru X11.&lt;br /&gt;
&lt;br /&gt;
Měření napájecího napětí - je kalibrováno tak, aby ukazovalo napětí na vstupních svorkách. Měření je interně provedeno přes napěťový (rezistivní) dělič, který má rozdílné hodnoty pro BIG a pro BIG2. Firmware typ desky pozná a použije tu správnou kalibraci.&lt;br /&gt;
&lt;br /&gt;
'''Pouze BIG2''' - v případě, že neodpovídá zobrazovaná hodnota měření napájecího napětí, zkontrolujte na desce BIG2 rezistor R48, který musí být osazen o hodnotě 220k. Je možné že (pouze) u prototypové série mohlo dojít k záměně za hodnotu 180k, která je platná pouze pro variantu BIG. Všechny nově vyrobené kusy už to mají správně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zapojení optických vstupů ==&lt;br /&gt;
&lt;br /&gt;
Obrázek ukazuje celkové (vnější a vnitřní zapojení) optického vstupu. Protože modul SDS-BIG má osm zcela samostatných optických vstupů, je toto zapojení patřičně opakováno.&lt;br /&gt;
&lt;br /&gt;
[[Soubor:SDS_BIG_rev1_optoinput_schematic.gif]]&lt;br /&gt;
&lt;br /&gt;
Všechny optické vstupy jsou pasivní (&amp;quot;DRY&amp;quot;), to znamená že '''nejsou''' vnitřně napájeny uvnitř modulu SDS-BIG. Napětí pro aktivaci optického vstupu je potřeba přivést (z venku) na konkrétní svorky. Zde lze s výhodou využít výstupní vedlejší svorkový konektor '''X4''', který poskytuje DC napětí například právě pro tento účel.&lt;br /&gt;
&lt;br /&gt;
Všechny opto-vstupy (a vstup LOGIC-S0) lze, kromě základní detekce zap/vyp, využít k připojení měřičů energií (s rozhraním S0). Konfigurace se provádí přes webové rozhraní SDS.&lt;br /&gt;
&lt;br /&gt;
Optické vstupy lze externě napájet, i v případě provozu SDS modulu z Active PoE - a to díky tomu, že v takovém případě SDS modul poskytuje (interně generované) výstupní napětí 12Vdc nebo 24Vdc (jednu z těchto hodnot si vyberte při objednávce)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zapojení analogových vstupů 1 až 5 ==&lt;br /&gt;
&lt;br /&gt;
Moduly SDS-BIG a BIG2 nabízí pět samostatných analogových vstupů, které jsou k dispozici uživateli (jsou vyvedeny na konektor). '''Všechny vstupy měří vůči společné svorce GND (pozor při připojování)'''.&lt;br /&gt;
&lt;br /&gt;
Rozsah měření lze změnit tak, že se buď vymění rezistory v odporovém děliči na desce modulu SDS-BIG (BIG2), nebo (v případě potřeby zvýšit horní hranici měření) stačí zapojit vnější sériový rezistor mezi zdroj napětí a vstup modulu.&lt;br /&gt;
&lt;br /&gt;
Moduly SDS-BIG a BIG2 mají několik dalších interních měřících bodů, které jsou zapojeny napevno a uživatel toto zapojení nemůže změnit. Tyto body měří např. vstupní napájecí napětí, více viz tabulka všech vstupů.&lt;br /&gt;
&lt;br /&gt;
Pozor, vstup pro měření odporu má navíc přivedené vnitřní napájení, ovládané modulem SDS-BIG (BIG2).&lt;br /&gt;
&lt;br /&gt;
Pozor, tak jako u všech ostatních vstupů a výstupů - piny označené jako GND nejsou přímo spojeny se svorkami napájecích konektorů (X2 a nebo X4), protože tyto konektory jsou odděleny od vnitřních GND přes diody, ale určité '''spojení tam je (přes diodu)''' - pozor na to !&lt;br /&gt;
&lt;br /&gt;
Obrázek ukazuje zapojení jednoho z pěti základních vstupů pro měření napětí:&lt;br /&gt;
&lt;br /&gt;
[[Soubor:SDS_BIG_rev1_analoginput_schematic.gif]]&lt;br /&gt;
&lt;br /&gt;
Při změně rozsahu je potřeba změnit kalibraci zařízení SDS - to je úkol uživatele, viz viz [[SDS_2PR:_ADC_vstupy_a_kalibrace|návod]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zapojení vstupu pro měření odporu ==&lt;br /&gt;
&lt;br /&gt;
Jako další vstup (mimo už popsané AI1 až AI5 vstupy), je k dispozici vstup pro měření odporu. &lt;br /&gt;
&lt;br /&gt;
Tento vstup se '''od ostatních vstupů liší''' ve dvou věcech: (1.) je napájen zevnitř SDS a také (2.) napájení je přerušovaně řízeno, aby nedocházelo k ohřevu odporu a tím k chybnému měření.&lt;br /&gt;
&lt;br /&gt;
Odporový vstup je určen pro připojení teplotních čidel (KTY81, Pt100/1000, Ni100/1000 atd.).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě odporový vstup lze obecně použít pro měření pasivního odporu, např. vnějšího rezistoru, potenciometru, a tak dále.&lt;br /&gt;
&lt;br /&gt;
Opět opakuji, tento '''jediný''' vstup má vnitřní napájení, které SDS automaticky (bez zásahu uživatele) připojuje na tento vstup automaticky - to znamená, že na svorkách je už napětí, takže nesmíte přivést vnější napětí na tento vstup sami.&lt;br /&gt;
&lt;br /&gt;
Ve webovém rozhraní SDS lze provést kalibraci naměřených hodnot (převod digitální hodnoty na fyzikální veličinu - odpor, teplotu, atd.). Kalibraci zadává uživatel, viz [[SDS_2PR:_ADC_vstupy_a_kalibrace|návod]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Udržení reálného času ==&lt;br /&gt;
&lt;br /&gt;
Všechny SDS jsou vybaveny interním obvodem RTC (Real Time Clock), a ten je vždy využit. Čas, udržovaný obvodem RTC, je automaticky průběžně aktualizován prostřednictvím NTP protokolu. Dojde-li např. k restartu SDS (např. z důvodu aktualizace firmware atd.), tak je platný a aktuální čas díky RTC obvodu stále k dispozici (i dříve než se provede NTP dotaz).&lt;br /&gt;
&lt;br /&gt;
POZOR - pouze některé vybrané moduly SDS, udržují čas i v době, kdy je modul plně '''odpojen od napájení''' - jedná se HW záležitost. Zvažte tuto potřebu při výběru vhodného typu SDS modulu.&lt;br /&gt;
&lt;br /&gt;
Pro ty SDS moduly, které neudržují čas v době bez napájení, je u takového požadavku potřeba externí RTC obvod (viz doplněk SW-RTC-COM-O6).&lt;br /&gt;
&lt;br /&gt;
SDS moduly, které umožňují připojení externího RTC obvodu:&lt;br /&gt;
* SDS-BIG : přes konektor SC2&lt;br /&gt;
* SDS-BIG2-DP : přes konektor SC2&lt;br /&gt;
* SDS-BIG2-DP-DS84 : přes konektor SC2&lt;br /&gt;
&lt;br /&gt;
Toto ale není nutné pro SDS moduly, které to už nativně umí samy ve svém základu:&lt;br /&gt;
&lt;br /&gt;
SDS moduly, které '''umí udržet čas i při odpojeném napájení''', '''bez''' potřeby externího RTC obvodu, jen za pomocí záložní baterie (mají rozšířenou funkci interního RTC):&lt;br /&gt;
* SDS-BIG2-DP-DS84-64&lt;br /&gt;
* SDS-BIG2-DP-DS84-PoE-64&lt;br /&gt;
* SDS-BIG2-DP-DS84-128 &lt;br /&gt;
* SDS-BIG2-DP-DS84-PoE-128 &lt;br /&gt;
* SDS-BIG2-DP-DS84-512&lt;br /&gt;
* SDS-BIG2-DP-DS84-PoE-512&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozšíření v rámci sestavy výrobku ==&lt;br /&gt;
&lt;br /&gt;
Základní modul lze přímo rozšířit pomocí specifických sandwich desek. To znamená, že v rámci jednoho fyzického zařízení SDS-BIG (BIG2) lze umístit jak základní desku SDS-BIG (BIG2), tak do ní připojit SANDWICH doplňkovou desku a obě tyto desky mít ve společné DIN krabičce.&lt;br /&gt;
&lt;br /&gt;
'''Některé z uvedených sandwich desek vyžadují napájení 24V DC''' (jen tuto hladinu a ne jinou) - tomu musíte přizpůsobit napájení SDS. V případě varianty SDS musíte při objednávce specifikovat, že chcete verzi která interně pracuje na 24V.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Lze si vybrat z následujících doplňkových sandwich desek:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[SDS BIG: DALI|LCD+KEY+DALI]] - poskytuje grafické LCD plně ovladatelné z FULL-C programu, klávesnici s pěti tlačítky (stisk přenášen do FULL-C programu ke zpracování) a DALI master pro řízení světel a jiných DALI slave modulů&lt;br /&gt;
&lt;br /&gt;
* LCD+KEY+CANCOM - poskytuje LCD, klávesnici, a rozhraní sběrnice CAN 2.0 A,B a rozhraní RS232 (COM6), vse přímo přístupné z FULL-C programu&lt;br /&gt;
&lt;br /&gt;
* [[SDS BIG: LoRA|LCD+KEY+LORA]] - poskytuje LCD, klávesnici a připojení k LoRa WAN 868 síti (nebo FSK komunikaci přímo mezi více SDS moduly v rámci lokální rádiové sítě)&lt;br /&gt;
&lt;br /&gt;
* [[SDS BIG: LoRA|SW-LORA]] - poskytuje pouze LoRa WAN 868 připojení (ekonomická varianta)&lt;br /&gt;
&lt;br /&gt;
* SW-GSM - poskytuje pouze GSM připojení (držák SIM na desce) (ekonomická varianta)&lt;br /&gt;
&lt;br /&gt;
* [[SDS BIG: MBUS|LCD+KEY+MBUS]] - poskytuje MBUS (MeterBus) MASTER rozhraní&lt;br /&gt;
&lt;br /&gt;
* [[SDS_BIG: SW-RELE6|SW-RELE6]] - poskytuje 4 silové SPDT relé, dvě signálové SPDT relé, tři N-FET spínače jako výstupy, a současně 4 opticky izolované binární vstupy (jen stavové zap/vyp vstupy, pozor: tyto nemají funkci počítače pulsů), plus jedno uživatelské tlačítko a dvě uživatelské LED&lt;br /&gt;
&lt;br /&gt;
* [[SDS_BIG:_SW-RTC-COM-O6|SW-RTC-COM-O6]] - poskytuje zálohovaný RTC obvod, výstup rozhraní RS232, pět N-FET spínačů jako výstupy, dvě uživatelské LED, jedno uživatelské tlačítko&lt;br /&gt;
&lt;br /&gt;
* [[SDS_BIG:_SW-IN24S7AI2|SW-IN24-S7-AI2]] - poskytuje 24 digitálních vstupů, 7 výstupů, a 2 samostatné vstupy pro měření proudu smyčky 4-20 mA&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Například sestavou BIG + RELE6 získáte v jedné DIN krabičce 12 reléových výstupů a další doplňující vstupy a výstupy.&lt;br /&gt;
&lt;br /&gt;
Komunikace s doplňující deskou se provádí výhradně přes FULL-C program. Příklady a hotové programy k dispozici u výrobce, nebo dle návodu zde na wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zapojení konektoru SC3 je zde:&lt;br /&gt;
&lt;br /&gt;
[[Soubor:Sds_big_rev1_com_port_conn.png]]&lt;br /&gt;
&lt;br /&gt;
Pozor! ač tento konektor vypadá fyzicky stejně jako podobný konektor na výrobku SDS-MINI, je zapojen '''jinak''' - tzn. zapojení mezi SDS-BIG (BIG2) a SDS-MINI je '''rozdílné'''.&lt;br /&gt;
&lt;br /&gt;
Lze si samozřejmě navrhnout a vyrobit i vaši vlastní rozšiřovací desku. Kontaktuje nás ohledně detailů, vše poskytneme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Další detaily ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Některé vybrané body:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Výkonný Procesor''' (64/128: 0.2GHz ARM) (512: 0.5GHz ARM)&lt;br /&gt;
&lt;br /&gt;
Použití nového procesoru umožňuje rozšířit funkce zařízení, zejména možnosti programování ve '''FULL-C''' (nová generace SDS-C).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Administrační Webové Rozhraní'''&lt;br /&gt;
&lt;br /&gt;
SDS-BIG (BIG2) nabízí webové rozhraní, které je vůči První Produktové Řadě SDS inovováno. K dispozici jsou i M2M protokoly a [[M2M:_Druhá_Produktová_Řada|speciální webové stránky (XML, CSV)]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Uživatelské Webové Rozhraní'''&lt;br /&gt;
&lt;br /&gt;
Uživatel může do SDS nahrát UserWEB projekt (do paměti DF) a také může využít SD kartu, na které je možnost mít nahrány webové stránky a další soubory. Detaily viz [[User_Web_Page]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''SD karta'''&lt;br /&gt;
&lt;br /&gt;
Do zařízení lze vložit mikroSD kartu, prakticky bez omezení velikosti. &lt;br /&gt;
Na tuto kartu lze přistupovat pomocí specifických funkcí FULL-C (čtení a zápis do souboru). Samozřejmostí je možnost zobrazení obsahu SD karty přes HTTP server. Takto lze i např. přes FULL-C program měnit statické webové stránky (soubory uložené na SD kartě) a nechat je uživatele si je zobrazit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''A/D převod: 64/128 ADC: 12 bitů , 512 ADC: 16 bitů'''&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS-BIG (BIG2) nabízí pět samostatných vstupů pro měření napětí a ještě k tomu jeden napájený vstup pro měření odporu.&lt;br /&gt;
&lt;br /&gt;
Vzhledem k technice oversamplingu je ENOB dostatečně vysoký.&lt;br /&gt;
&lt;br /&gt;
Měření odporu umožňuje přímé dvoudrátové připojení Pt100/Pt1000/Ni1000/KTY81 a tak dále, nebo lze např. připojit potenciometr.&lt;br /&gt;
Doplňkově je možnost SDS-BIG (BIG2) rozšířit o multiplexní kartu, která nabízí osm dalších vstupů pro měření odporu. &lt;br /&gt;
Měření odporu je řízeno interně (bez zásahu uživatele) v SDS tak, že napájení pro měření (měřící proud) je spínán jen v okamžiku měření - nedochází tak k parazitnímu ohřevu měřeného odporu.&lt;br /&gt;
&lt;br /&gt;
Na desce SDS-BIG (BIG2) je osazen zdroj precizní reference pro A/D převodník (externí reference). Tím je dosaženo zvýšení přesnosti a stability (dlouhodobá a teplotní stabilita) převodu napětí na digitální hodnotu.&lt;br /&gt;
&lt;br /&gt;
Všechny externí vstupy jsou odděleny operačním zesilovačem, takže je možnost zvolit i velmi malý proud ve vstupním děliči napětí. Toho se s výhodou dá využít pro měření napětí článků baterií, kdy se dá snížit vybíjecí proud (způsobený vstupním děličem) na minimum.&lt;br /&gt;
&lt;br /&gt;
Deska SDS-BIG  dále měří své napájecí napětí (ze svorek), což je využito např. pro zablokování zápisu na SD kartu při poklesu napájení.&lt;br /&gt;
Dále se měří ještě napětí ve vnitřní větvi +5V, použité pro napájení vnitřních analogových obvodů, a tak lze kompenzovat chybu měření na všech ostatních vstupech.&lt;br /&gt;
&lt;br /&gt;
Vstupní napěťový dělič je k dispozici přímo na desce SDS-BIG (BIG2). Rozšíření (nebo zmenšení) rozsahu je možné změnou hodnoty jednotlivých rezistorů, nebo připojením externího rezistoru do série (tak jak je tomu i u ostatních modulů SDS).&lt;br /&gt;
&lt;br /&gt;
Všechny SDS poskytují digitální rozsahy v rozsahu 12bitů (efektivní bitová šířka). U modulu varianty 512 je možné (navíc) číst raw hodnotu i v rozsahu 16bitů (ENOB). Dosažené ENOB hodnoty jsou dány matematickým zpracováním (decimace) spolu s určenou výslednou šířkou pásma dostupných dat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Binární vstupy'''&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS-BIG (BIG2) nabízí osm samostatných opticky oddělených vstupů. Vstupy jsou zapojeny tak, že vyžadují určitý minimální proud a určité minimální napětí, aby došlo k jejich aktivaci. Hodnota minimálního napětí se dá snadno změnit pro každý vstup zvlášť (změnou jedné součástky u konkrétního vstupu). Tento &amp;quot;filtr&amp;quot; je výhodný zejména v případě připojení dlouhých vedení, které mají souběhy se silovým vedením, a ve kterých se indukuje rušivé napětí (což by způsobovalo např. falešné S0 impulsy, které jsou zapojením SDS-BIG (BIG2) potlačeny). Pozn. podobně jsou zapojeny i vstupy na SDS-TTCPRO modulu.&lt;br /&gt;
&lt;br /&gt;
Vstupy nejsou vnitřně napájeny. Zařízení SDS-BIG nabízí samostatné výstupní svorky s napájecím napětím (které lze přímo použít pro napájení vstupů), pokud nebudete chtít použít externí zdroj pro optické vstupy.&lt;br /&gt;
&lt;br /&gt;
Optické vstupy lze využít pro připojení k S0 měřičům (elektroměry atd.), nebo je lze použít jako zap/vyp (binární) signalizaci. Dále je ještě navíc k dispozici LOGIC-S0 vstup v RJ konektoru.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''PWM výstupy'''&lt;br /&gt;
&lt;br /&gt;
SDS-BIG: K dispozici je '''jeden''' PWM výstup, kde MOSFET tranzistor (uvnitř SDS) spíná svorku PWMout na svorku GND. Připojení externího pull-up je možné (to už je vaše část zapojení, mimo SDS).&lt;br /&gt;
&lt;br /&gt;
SDS-BIG2: K dispozici jsou '''čtyři''' PWM výstupy (z toho ale jen '''tři''' vyvedené na hlavní svorky), každý se svým MOSFET tranzistorem (uvnitř SDS), který spíná příslušnou výstupní svorku na společné GND.&lt;br /&gt;
&lt;br /&gt;
Dbejte na nepřekročení limitů (napětí, proud, výkon) které má PWMout spínat - viz SOA pro tranzistor BS170.&lt;br /&gt;
&lt;br /&gt;
PWM výstup lze použít k libovolným účelům, nebo pro připojení k modulu SDS-PWM10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''RS485 master'''&lt;br /&gt;
&lt;br /&gt;
Na desce SDS-BIG (BIG2) je k dispozici RS485-master, včetně zakončovacího rezistoru 120R.&lt;br /&gt;
&lt;br /&gt;
Rezistor 120R lze odpojit (vypájet), pokud je SDS-BIG (BIG2) umístěn uprostřed sběrnice (a ne okraji sběrnice).&lt;br /&gt;
&lt;br /&gt;
POUZE '''SDS-BIG''': '''Vždy je nutné vodič B- sběrnice spojit na BUS-GND vodič přes (externí) rezistor 390R''', jinak v klidu bude sběrnice v neurčeném stavu a budou se ztrácet data. Toto zapojení závisí na všech konkrétních prvcích na sběrnici, a pokud nějaký už tento rezistor v sobě má, pak se samozřejmě dvakrát nesmí zapojit ! Nicméně většinou je nutné z vaší strany tento rezistor dodatečně připojit - zkontrolujte si to.&lt;br /&gt;
&lt;br /&gt;
'''SDS-BIG2''': Není potřeba zapojovat externí rezistor 390R, ten už je na SDS-BIG2 zapojen přímo uvnitř SDS (naopak u původního SDS-BIG chyběl a musí se doplnit externě).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Návod viz [[SDS_BIG:_RS485]].&lt;br /&gt;
&lt;br /&gt;
Přístup k RS485 lince má FULL-C program, a RS485 lze také (pokud máte nainstalován vhodný firmware ve vašem SDS) použít jak Virtual COM Port (serial-over-Ethernet), tak jak je tomu u ostatních modulů SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Reléové výstupy'''&lt;br /&gt;
&lt;br /&gt;
K dispozici je šest samostatných reléových výstupů. Relé mohou být osazeny se spínacím nebo rozpínacím kontaktem (toto se určuje při objednávce). Podle napájecího napětí zařízení SDS-BIG se určí typ relé (cívka 12V nebo 24V - '''toto musíte určit při objednávce'''). Pro varianty BIG2 jsou cívky relé interně zapojeny jinak (a jsou vždy na 5V), a proto už není potřeba cokoliv specifikovat jako u původních prvních verzí BIG.&lt;br /&gt;
&lt;br /&gt;
Relé mohou svými kontakty spínat AC i DC napětí. POZOR ALE NA OMEZENÍ (kombinované omezení max. proud/napětí/zátěž), viz parametry konkrétního relé.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Napájení: AC nebo DC'''&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS-BIG (BIG2) lze napájet střídavým nebo stejnosměrným proudem. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BIG: Rozsah je 9V až 35V stejnosměrných (pozor při napájení střídavým proudem, ať se nepřekročí vnitřní maximální napětí, tedy max 28Vac). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BIG2 a BIG2-PoE: Rozsah je 9V až 40V stejnosměrných (pozor při napájení střídavým proudem, ať se nepřekročí vnitřní maximální napětí, tedy max 28Vac). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BIG a BIG2-PoE: K dispozici je také výstup stejnosměrného proudu pro napájení např. optických vstupů (jedná se usměrněné a pojistkou jištěné napájecí napětí modulu SDS-BIG). Pozor, toto není k dispozici na SDS-BIG2, pouze na SDS-BIG2-PoE. Vždy se pro jistotu podívejte na popis pinů na konektorech, je-li patřičný výstup k dispozici !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Horní hodnota přípustného napětí (35Vdc / 40Vdc / 28Vac) je dána vnitřní konstrukcí SDS-BIG (BIG2). Pokud chcete SDS-BIG (BIG2) napájet z vyššího napětí, musíte předřadit externí DC/DC měnič.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''1-W (OneWire) vstupy'''&lt;br /&gt;
&lt;br /&gt;
K dispozici jsou dvě zcela samostatné 1-W sběrnice, jedna je dostupná na svorkách, druhá přes RJ konektor.&lt;br /&gt;
&lt;br /&gt;
Napájení sběrnic je 5V (zvýšeno oproti ostatním výrobkům SDS), takže je možné zapojit delší kabeláž pro sběrnici. &lt;br /&gt;
Obě sběrnice jsou řízeny speciálními chipy, takže je na nich přesné časování - tím pádem je SDS-BIG (BIG2) odolnější a kvalitnější ve srovnání s ostatními zařízeními SDS, které speciální chip pro 1-W nepoužívají.&lt;br /&gt;
&lt;br /&gt;
Varianta SDS BIG/BIG2 označená DS84 obsahuje modernější komunikační chip (master) pro sběrnici 1-W, a vylepšuje tak schopnosti SDS s touto sběrnicí pracovat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Ethernet: 100Mbit/s'''&lt;br /&gt;
&lt;br /&gt;
Zařízení má nativní 100Mbit/s Ethernetové kabelové rozhraní. Toto rozhraní je možné připojit do 10/100/1000 Mbit/s switche. Rozhraní má také automatické přizpůsobení pro křížené a nekřížené kabely.&lt;br /&gt;
&lt;br /&gt;
Komunikace se domlouvá pomocí Auto Negotiation - vybírá se automaticky rychlost 10 nebo 100 Mbit/s , automaticky se také určí režim provozu Full Duplex nebo Half Duplex.&lt;br /&gt;
&lt;br /&gt;
Varianta &amp;quot;DP&amp;quot; má inovované rozhraní Ethernet, které umožňuje maximální délku ethernetového kabelu o maximální délce 150 metrů (varianty bez &amp;quot;DP&amp;quot; mají maximálně 100m).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Zálohovací baterie'''&lt;br /&gt;
&lt;br /&gt;
Použitím 3V Lithiové knoflíkové zálohovací baterie zaručuje udržení obsahu záložní paměti i při (náhodném či dlouhodobém) výpadku napájení.&lt;br /&gt;
&lt;br /&gt;
Záložní paměť udržuje provozní data jako jsou stavy počítadel.&lt;br /&gt;
&lt;br /&gt;
Vámi nahraný FULL-C program není uložen v záložní paměti, ale v pevné paměti (DF), která nepotřebuje zálohu, protože udrží svůj obsah i bez napájení. Přítomnost záložní baterie tedy nemá vliv na udržení nahraného FULL-C programu (a UserWeb projektu a dalšího nastavení zařízení), tyto všechny věci se při odstranění napájení neztratí a zůstávají.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Srovnání ==&lt;br /&gt;
&lt;br /&gt;
Varianty BIG:&lt;br /&gt;
* &amp;quot;BIG 64&amp;quot; - první existující varianta&lt;br /&gt;
* &amp;quot;BIG 128&amp;quot; - rozšířená varianta 64 na dvojnásobek programové paměti pro FULL-C program (jinak beze změn vůči 64)&lt;br /&gt;
* &amp;quot;BIG 512&amp;quot; - rozšířená varianta 128 na čtyřnásobek programové paměti pro FULL-C program, přidána funkce udržení RTC, několikanásobně rychlejší procesor, zvětšená FC konzole atd.&lt;br /&gt;
&lt;br /&gt;
Varianty BIG2:&lt;br /&gt;
* &amp;quot;BIG2 64&amp;quot; (tzn. bez DP, bez DS84) - není vyráběno&lt;br /&gt;
* &amp;quot;BIG2 128 DP DS84&amp;quot; - na vyžádání&lt;br /&gt;
* &amp;quot;BIG2 512 DP DS84&amp;quot; - standardní varianta ve výrobě (512 DP DS84).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Z hlediska rozměrů, zapojení vstupů a výstupů, obecného použití atd. - jsou všechny varianty BIG stejné. To samé platí i mezi všemi variantami BIG2.&lt;br /&gt;
&lt;br /&gt;
BIG lze nahradit BIG2 bez nutnosti cokoliv zásadního měnit (pouze pozor na svorky relé, a chybějící X4 u BIG2), nebo přepisovat FULL-C program atd. - kompatibilita a záměnnost mezi BIG a BIG2 byla plně zachována.&lt;br /&gt;
&lt;br /&gt;
Primárně se jednotlivé BIG (a BIG2) mezi sebou liší velikostí dostupné programové paměti (pro váš FULL-C program), tzn. výlučné varianty 64, 128 nebo 512.&lt;br /&gt;
&lt;br /&gt;
Varianta 512 však má (oproti 64/128) ještě jednu výhodu, a to je výrazně novější a rychlejší procesor. &lt;br /&gt;
&lt;br /&gt;
FULL-C program, který lze spustit na zařízení varianty 64, bude bez jakýchkoliv potřebných změn fungovat i na variantě 128 a také na variantě 512.&lt;br /&gt;
&lt;br /&gt;
FULL-C program, který lze spustit na zařízení varianty 128, bude bez jakýchkoliv potřebných změn fungovat i na variantě 512.&lt;br /&gt;
&lt;br /&gt;
PoE variatna je plně záměnná s ne-PoE variantou, není tam zásadní funkční rozdíl (respektive, PoE přidává navíc tuto funkčnost, a nic víc).&lt;br /&gt;
&lt;br /&gt;
V rámci BIG2 jsou zavedeny dvě kombinovatelné varianty - a to DP a DS84. V prodeji bude pouze plná kombinace, tedy &amp;quot;SDS BIG2 xxx DP DS84&amp;quot;. Tyto varianty označují interní HW změny v rámci výrobku SDS BIG2. Jedná se o reakci na nové požadavky a také reagujeme na dostupnost modernějších součástek, které umožní zachovat původní funkce a rozšířit je.&lt;br /&gt;
&lt;br /&gt;
* DP = aktualizovaný HW (SDS BIG2) v oblasti Ethernetu, zejména ve zvýšeném maximálním dosahu ETH kabelu (až 150m)&lt;br /&gt;
* DS84 = aktualizovaný HW (SDS BIG2) v oblasti sběrnic OneWire (1-W), kdy je použit modernější ovladač sběrnice s novými možnostmi uživatelské konfigurace&lt;br /&gt;
&lt;br /&gt;
Samozřejmě základní společnou vlastností BIG2 je rozšíření počtu PWM výstupů (čtyři PWM, z toho tři jsou vyvedeny na hlavní svorky modulu).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dostupnost ==&lt;br /&gt;
&lt;br /&gt;
SDS moduly jsou v prodeji - objednávejte na eShopu. &lt;br /&gt;
&lt;br /&gt;
Diskuse a podpora je k dispozici na našem fóru: forum.merenienergie.cz .&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_tips_and_tricks&amp;diff=990</id>
		<title>FULL-C: tips and tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_tips_and_tricks&amp;diff=990"/>
		<updated>2026-10-31T16:18:37Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Důležité poznámky k práci s FULL-C ==&lt;br /&gt;
&lt;br /&gt;
Zde jsou neseřazené tipy a triky, tak, vytvořené tak, jak jak postupem času dostáváme různé dotazy od uživatelů.&lt;br /&gt;
&lt;br /&gt;
Současně (na konci stránky) naleznete kritické tipy a postupy, jak efektivně zapsat váš program tak, aby byl co nejvíce rychlý. Je důležité si to přečíst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Dbejte na to''', aby verze FC byla '''stejná''' jak pro překladač (FULLC.EXE) tak i pro vaše SDS. Pokud má vaše SDS starší firmware (a tedy starší verzi FC, například 0x06), zatímco překladač je novější (například FULLC.exe s verzí FC 0x08), tak SDS odmítne novější FC program spustit. Toto se řeší velmi snadno, a to aktualizací firmware ve vašem SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* I když proběhne překlad ve FULLC.EXE v pořádku, '''stále může váš FULL-C program obsahovat chyby''' - to se dozvíte '''teprve''' z konzole (web zařízení SDS: typicky 192.168.1.250/echo.htm), proto ji '''vždy průběžně kontrolujte''' !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pozor na ''signed'' a ''unsigned''  typy a jejich používání. FULL-C se chová dle standardu C, a detaily standardu vás mohou zmást.&lt;br /&gt;
&lt;br /&gt;
Např. '''char''' je signed ! (pokud jej explicitně nedefinujeme jako '''unsigned char''').&lt;br /&gt;
&lt;br /&gt;
Příklad - chceme vypsat HEX kód pro jednobajtový znak.&lt;br /&gt;
&lt;br /&gt;
Toto ale neudělá to co &amp;quot;chceme&amp;quot;: vypíše to '''FFFFFFDB''' - přesně podle specifikace jazyka C, kdy dojde nejprve k převodu na int32 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char ch = 0xDB;&lt;br /&gt;
printf(&amp;quot;%x&amp;quot;, ch);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad správného zápisu: vypíše to '''DB''' tak jak chceme, a to proto že jsme správně uvedli že to chceme zpracovat jako '''unsigned char'''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char ch = 0xDB;&lt;br /&gt;
printf(&amp;quot;%x&amp;quot;, (unsigned char)ch);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Další příklad velkého problému je následující kus programu pro výpis obsahu textového pole jako HEX znaků:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char pole[32];&lt;br /&gt;
char * ch;&lt;br /&gt;
&lt;br /&gt;
ch = (char *)&amp;amp;pole;&lt;br /&gt;
for (i = 0; i &amp;lt; 32; i++)&lt;br /&gt;
{&lt;br /&gt;
  printf(&amp;quot;%02x&amp;quot;, *ch++); // &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; WARNING !!!! *ch is signed char !!!&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opět, správné řešení je ve správném přetypování: &amp;lt;pre&amp;gt; printf(&amp;quot;%02x&amp;quot;, (unsigned char)*ch++); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Před provedením jakékoliv síťové komunikace ve FULL-C (např. odeslání emailu), '''vždy zkontrolujte''' stav, a to pomocí: ''status = SDS_get_u(27);'' (když je ''status==0'' tak SDS nemá připojení - nezačínejte komunikaci, čekejte a testuje stav).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pole pro uchování textů můžete přímo deklarovat, např. na zásobníku (stack) jako ''char text[128];'' - nebo na haldě (heap), pro což využijte ''text = (char *)malloc(128);'' a ''free(text);text=0;'' funkce. Výběr z těchto možností je na vás (malé pole / malé texty jdou dát na zásobník, velké už patří do haldy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Využijte 64-bitových proměnných (int64_t nebo uint64_t) tam, kde vám 32 bitů nestačí. Například pro počítadla, nebo výpočty s velkými čísly (nebo jen stačí že by měl být velký mezivýsledek a při použití 32-bit čísel by jste o něj &amp;quot;přišli&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pro zjištění, jaký největší blok paměti (heap) lze v danou chvíli alokovat pomocí ''malloc()'' funkce, využijte funkci ''SDS_heap_stats()'' . Ačkoliv může být celková hodnota volné heap pamět velká, toto celkové volné místo je vždy roztroušeno na různé malé oddělené bloky (fragmentace) - a vždy lze alokovat jen po jednom bloku, a jeho největší možná velikost je zjistitelná právě ze zmíněné funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Vždy když uvolníte paměť, nezapomeňte ihned ručně vynulovat daný uvolněný ukazatel. Zabrání to chybám ve vašem programu. Příklad: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definice ukazatale&lt;br /&gt;
void *ptr; &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
// alokujeme si pamet, pro priklad 32 bajtu&lt;br /&gt;
ptr = malloc(32);&lt;br /&gt;
&lt;br /&gt;
// pamet na kterou ukazuje ptr lze ted pouzivat (pozor at nepristupujete mimo alokovany rozsah)&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
// uz pamet nepotrebujeme, tak ji uvolnime:&lt;br /&gt;
free(ptr); &lt;br /&gt;
ptr = 0;   // vzdy ihned za zavolanim free() nastavte ptr do nuly !!!&lt;br /&gt;
&lt;br /&gt;
... &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Funkce ''printf()'' a ''puts()'' a ''putchar()'' zapisují do konzole (web zařízení SDS, typicky: 192.168.1.250/echo.htm), čehož lze využít pro ladění programu, nebo pro dálkový monitoring zařízení. Nicméně pro průběžné spolehlivé získávání hodnot a údajů z SDS nebo vašeho programu, je vhodně použít systém sdílených proměnných, nebo SNMP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* FULL-C používá právě přesně 32-bitů pro datový typ ''float''. Počítejte s touto informací pro správné pochopení přesnosti práce s desetinnými čísly (omezené rozlišení dané 32bity). Pro většinu aplikací toto nepředstavuje problém, pokud ale chcete provádět složité výpočty s desetinnými čísly, je potřeba znát tato omezení. Přesné vysvětlení viz např. [https://en.wikipedia.org/wiki/Single-precision_floating-point_format|&amp;quot;Single-precision floating-point format&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Funkce ''printf()'' a ''sprintf()'' umí zpracovat ''float'' proměnné (%f), ale neumí je uživatelský formátovat (neumí např. %0.2f - ale umí jen základní %f, to znamená že vypíše úplně celou délku čísla se všemi pozicemi za tečkou, což může být i dost dlouhý text). Toto je aktualizováno v nové verzi FULL-C (tam už to jde).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Nepoužívejte prázdný string''' (tj. &amp;quot;&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
Tři příklady '''zakázaného kódu''' pro FULL-C:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// do not do any of the following:&lt;br /&gt;
//&lt;br /&gt;
char text1[10] = &amp;quot;&amp;quot;;  // spatne !&lt;br /&gt;
//&lt;br /&gt;
strncpy(text2,&amp;quot;&amp;quot;,10); // spatne !&lt;br /&gt;
//&lt;br /&gt;
sprintf(text2,&amp;quot;&amp;quot;);    // spatne !&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Před použitím některé z funkcí, které přistupují k serveru na Internetu, je vhodné provést volání ''dns_resolv()'' pro zjištění aktuální IP adresy (IP0.IP1.IP2.IP3) daného serveru, vždy před zavoláním konkrétní funkce (např. ''http_get()'' ). Určitě není vhodné používat přímo natvrdo zapsané číselné adresy (ty se mohou změnit např. při přesunu serveru).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud některá z FULL-C funkcí selže (např. ''smtp_send()'' ohlásí přes ''smtp_send_status()'' chybu), tak je vhodné mít FULL-C program napsán tak, aby chvíli počkal, a pak to celé zkusil znovu. Při více selháních je pak potřeba provést další akci (oznámit chybu, zjistit stav připojení k síti, atd.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Přes FULL-C lze '''pouze číst''' kalibrační konstanty pro analogové vstupy. Pokud je chcete hromadně nastavit, použijte s výhodou 192.168.1.250/cgi_cfg_adc?xxxx volání (uživatel musí být přihlášen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Každý FULL-C program může nastavit tzv. &amp;quot;brand&amp;quot; (uživatelskou značku / popisek) pro zařízení SDS, na kterém je spuštěn. Protože SDS je často dodáváno v rámci OEM pro další zástavbu do většího celku, může si finální systémový integrátor nastavit své doplňující texty (název firmy, odkazy na web, telefonní čísla na podporu, doplňující texty, informace o sériovém čísle atd.), které jsou pak zobrazeny v rámci stránek webové administrace zařízení SDS (login, welcome, atd.). Toto nastavení provádí FULL-C program zavolání ''SDS_set_a()'' s příslušným indexem a textem. Typicke se takový FULL-C kód dává na úplný začátek programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* FULL-C program lze nachystat a vydat tak, že je &amp;quot;zablokován&amp;quot; tak aby fungoval pouze na jediném konkrétním vybraném SDS zařízení. Každé SDS má své unikátní sériové číslo (viz tabulka indexů pro ''SDSget_u()'' ), a FULL-C program může tuto hodnotu porovnat (s tím, co do FULL-C programu vloží autor programu). Toto uživatelské zablokování programu může předejít chybám, kdy by se např. nevhodný program nahrál omylem na jiný hardware. Pokud vydáváte FULL-C program prostřednictvím .FC souboru, kam zvolíte nepřiložit zdrojový .C kód, pak máte neprůstřelnou možnost zamezit použití programu na jakémkoliv jiném SDS než jaké sami určíte (zdrojový kód nebude cílovému uživateli k dispozici, a navíc váš program otestuje sériové číslo daného SDS na shodu). Samozřejmě to znamená, že musíte zmíněné sériové číslo daného SDS zjistit předem, než vydáte program, aby jste to číslo mohli do programu vložit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud ve svém programu využíváte sériovou sběrnici RS485, dbejte na správné zapojení sběrnice. Naše fórum je plné příkladů, kdy autor programu řešil problém s RS485 a nakonec se ukázalo, že sběrnice byla špatně zapojená (přehozené A/B dráty, nezakončená rezistory, neuvedená do známého klidového stavu přes rezistory atd.). Pro ověření programu je vždy dobré vzít pasivní &amp;quot;odposlech&amp;quot; sběrnice (osciloskop, osobní počítač) a zkontrolovat &amp;quot;překryv&amp;quot; (kdy více zařízení vysílá najednou, což je na RS485 kolize a poškození dat). Právě &amp;quot;překryv&amp;quot; je nejčastějším problémem způsobující poškození komunikace, hned po špatném nastavení komunikační rychlosti v programu. Vždy zkontrolujte svůj hardware, tj. celou sběrnici, je-li správně impedančně zakončena (nejvzdálenější konce) a zda-li jste správně zapojili oba klidové rezistory (pozor, na SDS-BIG tyto nejsou a musí se ručně doplnit &amp;quot;zvenku&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud chcete přes sdílené proměnné (sv) přenášet čísla datového typu ''float'' (desetinná čísla), a pak je chcete například zobrazit na UserWEB webové stránce (a nebo přenést na server atd.), použijte následující trik. Vytiskněte obsah float čísla do Txx[] proměnné, pomocí sprintf(), nikoiv však s využitím %f - ale právě přes následující kód:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si sdilenou promennou T00&lt;br /&gt;
char T00[32];&lt;br /&gt;
&lt;br /&gt;
void FloatToT00(void)&lt;br /&gt;
{&lt;br /&gt;
 // vstupni float&lt;br /&gt;
 float xf;&lt;br /&gt;
&lt;br /&gt;
 // pomocna promenna (presne 4 bajty, protoze &amp;quot;float&amp;quot; je ve FULL-C reprezentovan jako 32-bit)&lt;br /&gt;
 unsigned int xw;&lt;br /&gt;
&lt;br /&gt;
 // zapiseme vzorovou hodnotu&lt;br /&gt;
 xf = 12.34;&lt;br /&gt;
&lt;br /&gt;
 // ziskej 32bit obsah xf (= cteni 4 bajtu dat ktere reprezentuji dany float)&lt;br /&gt;
 xw = *(unsigned int *)&amp;amp;xf;&lt;br /&gt;
 // a zapis do T00, zarovnej vzdy na osm mist (at se to da pozdeji spravne zpracovat - prevest zpet na float)&lt;br /&gt;
 sprintf((char *)T00, &amp;quot;%08X&amp;quot;, xw);&lt;br /&gt;
&lt;br /&gt;
 // T00[] ted obsahuje &amp;quot;414570A4&amp;quot; (coz je hex reprezentace puvodni float hodnoty 12.34)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pokud se po spuštění tohoto kódu pak podíváte např. na 192.168.1.250/shared.txt , tak tam uvidíte toto: &amp;quot;T00|414570A4|&amp;quot; (krom jiného textu). S tím už pak v JavaScriptu není problém pracovat (převést zpět na float a korektně zobrazit nebo dále zpracovat). Řada přímých příkladu je k dispozici, stačí hledat na Internetu podle klíčových slov &amp;quot;javascript convert hex to float&amp;quot;. &lt;br /&gt;
Toto se řeší právě z důvodu že FULL-C printf funkce (a další podobné) umí jen %f ale bez dalších parametrů, takže tisknou float čísla na všechny místa za desetinnou tečkou, což je ve většině případů nežádoucí (při zobrazování na webových stránkách a podobně).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Přistupovat ke všem údajům ze sběrnic 1-Wire, ve FULL-C, je samozřejmě možné, je však potřeba vědět jak. Detaily viz stránka [[FULL-C: OneWire]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pamatujte, že varianta '''SDS-64''' (viz [[SDS BIG|varianty]]) má k diposozi pouze celkem 64kB programové paměti (a SDS-128 má jen 128kB této paměti, a SDS-512 jen 512kB celkové FULL-C paměti) - do které '''se musí vlézt celý''' váš přeložený FULL-C program, a k tomu také celý STACK a všechna potřebná paměť HEAP. Toto omezení není dáno programově, ale právě použitým hardware v SDS, takže jej nelze jednoduše &amp;quot;obejít&amp;quot; - pokud se vám to nevleze do varianty 64 tak musíte použít variantu 128 (nebo 512), to je jediné řešení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Vždy '''správně nastavte velikost''' STACKu - číselnou hodnotu nastavte v okně editoru zdrojového textu FULL-C. Pokud nastavíte hodnotu pro váš program jako moc malou, program nebude fungovat (při volání více funkcí může být pro nedostatek stacku ukončen). Příliš velká hodnota snižuje volnou paměť heap (pokud heap nepoužíváte, nastavte stack na vyšší hodnotu pro klid). Správnou hodnotu zjistíte určitým odhadem (podle velikosti a složitosti programu, podle toho kolik proměnných používáte a kolik parametrů se předává při volání funkcí, a kolik funkcí se v sobě volá). Nastavení je možné nechat automaticky odhadnou překladač, nebo jej můžete ručně zadat (odhad není přesný).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Inicializaci proměnných '''provádějte v kódu, nikoliv při deklaraci'''. Jde o to, že při inicializaci hodnot v proměnné či poli, provedené kódem, se spotřebuje zlomek stack paměti, oproti inicializace přímo při deklaraci. Stack paměti je vždy málo a je potřeba jí šetřit. Je to vlastnost FULL-C.&lt;br /&gt;
&lt;br /&gt;
Příklad inicializace při deklaraci: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  unsigned int numbers[5] = {0,1,2,3,4}; // toto spotřebuje hodně stacku - TAKHLE TEDY NE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Příklad identické inicializace kódem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// toto řešení je doporučené, nespotřebovává stack&lt;br /&gt;
unsigned int numbers[5];&lt;br /&gt;
number[0] = 0;&lt;br /&gt;
number[1] = 1;&lt;br /&gt;
number[2] = 2;&lt;br /&gt;
number[3] = 3;&lt;br /&gt;
number[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nebo, příklad odpovídající inicializace kódem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  // toto řešení je doporučené, nespotřebovává stack&lt;br /&gt;
  unsigned int numbers[5];&lt;br /&gt;
  unsigned int i;&lt;br /&gt;
  for (i = 0; i &amp;lt; 5; i++) { number[0] = i; };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Následující informace je platná pouze pro firmware starší než 10.7.2017&lt;br /&gt;
&lt;br /&gt;
* SDS ukazuje aktuální využití své 64kB programové paměti, na webové stránce v administraci.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAP STATS: curalloc=1892, totfree=58632 maxfree=58632, nget=12 nrel=0&lt;br /&gt;
HEAP STATS: bc_locked=1120, stackTop=2984 (of 5000)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jak to dékódovat: první řádek ukazuje celkové využití paměti a počet alokací a uvolnění:&lt;br /&gt;
 curalloc  = celkem alokovaná paměť (heap malloc, a všechny interní FULL-C funkce a interní data v SDS)&lt;br /&gt;
 totfree   = celkem zbývající volná (alokovatelná) heap pamět (součet všech volných heap fragmentů)&lt;br /&gt;
 maxfree   = největší volný heap fragment, který je možné alokovat v jednom kuse&lt;br /&gt;
 nget      = celkový počet alokací (volání malloc/calloc) (včetně vnitřních volání interních FULL-C funkcí v SDS)&lt;br /&gt;
 nrel      = celkový počet uvolnění předchozích alokací (volání free() funkce)&lt;br /&gt;
Druhý řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 bc_locked = kolik bajtů paměti je využito (uzamčeno) pro 'bytecode' vašeho FULL-C (kolik si vzal samotný kód FULL-C programu v paměti)&lt;br /&gt;
 stackTop  = kolik bajtů zásobníku (stacku) je v tento okamžik využito (pokud je to na limitu, víte, že musíte upravit nastavení při překladu)&lt;br /&gt;
 (of X)    = kolik bajtů může nejvíce zásobník (stack) zabrat z celé paměti (nastaveno uživatelem před překladem)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Následující informace je platná pouze pro firmware 10.7.2017 (včetně) a novější (viz také [[SDS BIG|varianty]])&lt;br /&gt;
&lt;br /&gt;
* SDS ukazuje aktuální využití své 64kB nebo 128kB nebo 512kB programové paměti, na webové stránce v administraci.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FC: VER 0x08, PROGMEM 128kB&lt;br /&gt;
MEM STATS:&lt;br /&gt;
- HEAP: used=(492 of 120675), totfree=120164 (biggest=65396), num(get=11,rel=0)&lt;br /&gt;
- STACK: used=(364 of 10004)&lt;br /&gt;
- BC: locked=(264+128+388)&lt;br /&gt;
- SYS: free=280&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jak to dékodovat: první řádek ukazuje informace o SDS:&lt;br /&gt;
 VER        = verze FC&lt;br /&gt;
 PROGMEM    = varianta hardware (64kB nebo 128kB nebo 512kB celkové paměti pro program a data)&lt;br /&gt;
Druhý řádek ukazuje celkové využití paměti a počet alokací a uvolnění:&lt;br /&gt;
 HEAP used  = celkem alokovaná paměť (heap malloc, a všechny interní FULL-C funkce a interní data v SDS)&lt;br /&gt;
 totfree    = celkem zbývající volná (alokovatelná) heap pamět (součet všech volných heap fragmentů)&lt;br /&gt;
 biggest    = největší volný heap fragment, který je možné alokovat v jednom kuse&lt;br /&gt;
 nget       = celkový počet alokací (volání malloc/calloc) (včetně vnitřních volání interních FULL-C funkcí v SDS)&lt;br /&gt;
 nrel       = celkový počet uvolnění předchozích alokací (volání free() funkce)&lt;br /&gt;
Druhý řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 STACK used = kolik bajtů zásobníku (stacku) je v tento okamžik využito (pokud je to na limitu, víte, že musíte upravit nastavení při překladu)&lt;br /&gt;
Třetí řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 BC locked  = kolik bajtů paměti je využito (uzamčeno) pro 'bytecode' vašeho FULL-C (kolik si vzal samotný kód FULL-C programu v paměti)&lt;br /&gt;
Čtvrtý řádek nemá pro FULL-C význam:&lt;br /&gt;
 SYS        = interní hodnota&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Jak funguje FULL-C v SDS ==&lt;br /&gt;
&lt;br /&gt;
Zde jsou popsány hlubší technologické detaily popisující princip FULL-C. Zajímat budou zejména ty, kteří pracují na složitých programech.&lt;br /&gt;
&lt;br /&gt;
Program je uživatelem zadán jako '''jeden jediný textový soubor - zdrojový kód v jazyce FULL-C'''. Tento zdrojový kód (text) je zpracován v naší Windows aplikaci (FULLC.exe, k dispozici ke stažení na této WiKi) do formy výsledného souboru, který primárně obsahuje tzv. ''bytecode''. Tento soubor je následně přes síť nahrán do konkrétního zařízení SDS, kde je trvale uložen (až do nahrání jiného souboru) a je zařízením SDS spouštěn.&lt;br /&gt;
&lt;br /&gt;
== Komprese ==&lt;br /&gt;
&lt;br /&gt;
Program je přenášen z FULLC.exe do SDS přes počítačovou síť. Aby se nemuselo přenášet tolik dat, je bytecode komprimován. Typická úspora je 25% původního objemu.&lt;br /&gt;
&lt;br /&gt;
S touto informací je potřeba plánovat při navrhování rozložení paměti - aby se tam vše vešlo. To že komprimovaný program (výstup FULLC.exe) se do paměti SDS na první pohled &amp;quot;vleze&amp;quot;, ještě neznamená, že se program i podaří spustit (stále se může &amp;quot;vlézt&amp;quot;, ale nezbude místo na zásobník nebo haldu - a to je konec).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ZÁKLADNÍ OMEZENÍ''':&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS je k dispozici ve třech základních variantách: varianta &amp;quot;64&amp;quot; má k dispozici 64kB paměti pro celkové potřeby programu, a varianta &amp;quot;128&amp;quot; má k dispozici 2x64kB (tj. 128kB) paměti pro celkové potřeby programu. Varianta &amp;quot;512&amp;quot; nabízí největší dostupnou paměť pro program a data.&lt;br /&gt;
&lt;br /&gt;
Do celé této celkové paměti se musí vlézt nejen surový ''bytecode'' ale i všechny provozní záležitostí (zásobník - stack, proměnné, halda - heap).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;64&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + instrukce programu (bytecode)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + halda (heap)&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-64kB BLOKU)&lt;br /&gt;
&lt;br /&gt;
Další paměť (více než 1x 64kB) už není ve variantě &amp;quot;64&amp;quot; k dispozici - vše se tedy musí vlézt do jednoho 64kB velkého bloku.  Pokud to pro vaše potřeby nestačí, musíte použít variantu s pamětí 128kB nebo 512kB, které jsou popsány dále.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;128&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + první část haldy (heap-1)&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 (START II-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + instrukce programu (bytecode)&lt;br /&gt;
               ...&lt;br /&gt;
             + druhá část haldy (heap-2), jen pokud nezabere program celý II-64kB blok&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec&lt;br /&gt;
 &lt;br /&gt;
 (KONEC II-64kB BLOKU)&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, varianta &amp;quot;128&amp;quot; nabízí dva bloky po 64kB. Tyto bloky na sebe sice lineárně nenavazují (tj. součtem je to sice 128kB, ale ne v celku), nicméně přináší významnou úlevu předchozímu omezení původní varianty &amp;quot;64&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pro použití varianty &amp;quot;128&amp;quot; je ovšem potřeba mít správný hardware (SDS), tzn. SDS výrobní varianty &amp;quot;64&amp;quot; nelze programově změnit na variantu &amp;quot;128&amp;quot; - to lze jedině použitím vhodného SDS hardware. Samozřejmě program původně určený pro &amp;quot;64&amp;quot; lze na SDS &amp;quot;128&amp;quot; spustit, bez jakýchkoliv omezení (ale naopak, program 128 nelze na 64 spustit, protože varianta 64 nemá dost paměti pro program varianty 128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;512&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-504kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + první část haldy (heap-1)&lt;br /&gt;
               ...&lt;br /&gt;
       504kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-504kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 (START II-8kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + druhá část haldy (heap-2)&lt;br /&gt;
               ...&lt;br /&gt;
         8kB + konec&lt;br /&gt;
 &lt;br /&gt;
 (KONEC II-8kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 SOUČET: celková dostupná paměť 504+8 = 512kB&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, varianta &amp;quot;512&amp;quot; nabízí dva bloky, jeden 504kB a druhý 8kB. V součtu je k dispozici 512kB paměti, která je (dle rozpisu uvedeného výše) rozdělena na jednotlivé dynamické části - skutečně použité velikosti každé části už pak závisí na obsahu vašeho FULL-C programu a vašem nastavení (vámi určená velikost zásobníku).&lt;br /&gt;
&lt;br /&gt;
Programy určené pro variantu 512 lze spustit pouze na správném typu hardware - SDS varianty 512.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Další informace:'''&lt;br /&gt;
&lt;br /&gt;
Velikost programu (bytecode + stringblob) a proměnných (variables) je pevná, a je přímo dána vámi tj. programátorem (podle toho, jaký napíšete program, tak bude tato oblast velká).&lt;br /&gt;
&lt;br /&gt;
Zbytek je použit pro haldu (heap), což je různě veliký paměťový prostor který má program k dispozici (funkce: malloc, realloc, free), pokud jej tedy potřebuje. Pokud bude váš program moc velký, pak se může stát že halda nemusí existovat - a systém nebude schopen takový program vůbec spustit ! Vždy je potřeba mít haldo o velikosti alespoň hodnoty 1/8 velikosti programu.&lt;br /&gt;
&lt;br /&gt;
Zásobník (stack) je vždy umístěn na začátku paměťového prostoru, a jeho velikost je opět jednorázově určena programátorem (podle odhadu nebo aktuální měření). Pokud je zásobník příliš malý, může být program předčasně ukončen (řešením je zvětšení velikosti zásobníku (na úkor velikosti heapu) a nové nahraní programu do zařízení). Toto je zřejmě nejčastější problém u většiny FULL-C programů - špatně nastavená velikost zásobníku.&lt;br /&gt;
&lt;br /&gt;
Informace o aktuálním vyžití celého paměťového prostoru je k dispozici ve webovém rozhraní SDS (Menu, FULL-C). Odsud lze také přečíst skutečné využití zásobníku (nejvyšší dosažená velikost).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Heap ==&lt;br /&gt;
&lt;br /&gt;
Typický FULL-C program v zařízení SDS nemá potřebu používat haldu (heap) - typicky všechny proměnné (i velká pole) lze bez problému staticky deklarovat.&lt;br /&gt;
&lt;br /&gt;
Pokud však potřebujete dynamickou alokaci paměti, tak je k dispozici ten zbytek paměťového prostoru, který zůstane &amp;quot;volný&amp;quot; po nahrání programu (a vyhrazení zásobníku).&lt;br /&gt;
&lt;br /&gt;
Informace o velikosti volného heapu a fragmentaci lze opět nalézt ve webovém rozhraní SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Opakování varování ==&lt;br /&gt;
&lt;br /&gt;
Velikost programu je omezena takto:&lt;br /&gt;
&lt;br /&gt;
* varianta SDS 64kB: vše se musí vlézt do 64kB (bytecode, proměnné, zásobník) &lt;br /&gt;
* varianta SDS 128kB: vše se musí vlézt do 2x 64kB (128kB s danými omezeními, především bytecode omezen na 64kB protože se musí celý vlézt do jednoho bloku)&lt;br /&gt;
* varianta SDS 512kB: vše se musí vlézt do 512kB, přičemž součet velikosti (bytecode, všechny proměnné, zásobník) je do velikosti 504kB (vše další je dostupné jako heap)&lt;br /&gt;
* Zásobník (stack) musí mít dostatečnou velikost pro provoz programu (všechny vnořené volání funkcí, rekurze, atd.).&lt;br /&gt;
* Halda (heap) musí být k dispozici o dostatečné velikosti, jinak se jakýkoliv program nespustí.&lt;br /&gt;
&lt;br /&gt;
Pokud by váš přeložený program byl moc velký, a to tak že se spolu s ním do paměti nevlezou další potřebné věci (zásobník atd.), nebudete moct program na zařízení SDS spustit.&lt;br /&gt;
&lt;br /&gt;
Vždy můžete kontrolovat stav programu (a využití paměti) na stránce &amp;quot;FULL-C&amp;quot; ve webové administraci zařízení SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak programovat ==&lt;br /&gt;
&lt;br /&gt;
FULL-C program musí vždy mít definovanou funkci '''main()''', která je první spuštěnou funkcí v rámci spuštění programu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 void main(void)&lt;br /&gt;
 {&lt;br /&gt;
   ;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je úkolem programátora, aby funkce '''main()''' nebyla opuštěna (potom je program &amp;quot;ukončen&amp;quot; protože nemá kam dál pokračovat) = v takovém případě je program ukončen, a znovu bude spuštěn až po restartu SDS (nebo když by byl nahrán nový program, tak je pak spuštěn ten).&lt;br /&gt;
&lt;br /&gt;
FULL-C program tedy vždy začíná jako první provádět instrukce ve funkci '''main()'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V základu lze činnosti provádět na základě těchto vstupů:&lt;br /&gt;
&lt;br /&gt;
* čas (např. každou vteřinu)&lt;br /&gt;
* hardware (např. čtení vstupů)&lt;br /&gt;
* hodnoty [[FULL-C: sharing|sdílených proměnných]] (např. změnou proměnné z uživatelské webové stránky)&lt;br /&gt;
&lt;br /&gt;
Výstupy programu mohou být:&lt;br /&gt;
&lt;br /&gt;
* ovládání hardware (např. spínání relé)&lt;br /&gt;
* změna hodnot sdílených proměnných (např. pro dynamické zobrazení na uživatelské webové stránce)&lt;br /&gt;
* odesílání stavů přes síť (např. HTTP-GET nebo SNMP-TRAP)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro všechny tyto vypsané činnosti je potřeba znát [[FULL-C: functions|funkce a příkazy]], které programu umožní právě takovéto činnosti vykonávat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OPTIMALIZACE KÓDU a jak je SDS vůbec rychlé ? ==&lt;br /&gt;
&lt;br /&gt;
Bylo provedeno detailní měření na SDS-BIG 128 a SDS-BIG 512, a postupy jsou použitelné pro všechna BIG a BIG2 zařízení.&lt;br /&gt;
&lt;br /&gt;
Pokud není uvedeno jinak, měřilo se při nezatížené síti. U SDS-BIG 64 lze očekávat prakticky stejné hodnoty jako u SDS-BIG 128, protože má stejnou frekvenci CPU.&lt;br /&gt;
&lt;br /&gt;
'''Časy uvedené v textu platí pro SDS-BIG 64/128.''' SDS-BIG 512 je téměř ve všem cca 3,5x rychlejší (viz tabulka). Jedinou výjimkou jsou makra s parametry. Všechny tipy platí pro obě varianty stejně.&lt;br /&gt;
&lt;br /&gt;
=== Základní orientace ===&lt;br /&gt;
&lt;br /&gt;
* Jeden jednoduchý příkaz (např. &amp;lt;code&amp;gt;x = y + z;&amp;lt;/code&amp;gt;) trvá cca '''60–150 µs''', tj. řádově 10 000 jednoduchých příkazů za sekundu. Hlavní smyčka se 100 příkazy tak trvá cca 10 ms na jeden průchod.&lt;br /&gt;
* Samotný výpočet je zanedbatelný: &amp;lt;code&amp;gt;+ - * / %&amp;lt;/code&amp;gt;, 64bitová i float aritmetika trvají stejně. O rychlosti rozhoduje počet příkazů a způsob zápisu programu (viz tipy níže).&lt;br /&gt;
* Výsledky měření jsou velmi opakovatelné (±0,1 %). Při nezatížené síti spotřebuje ostatní činnost SDS jen cca 2 % výkonu.&lt;br /&gt;
&lt;br /&gt;
=== Naměřené časy ===&lt;br /&gt;
Platí pro SDS-BIG, BIG2 a všechny varianty (SMALL atd.) odvozené od BIG a BIG2.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zápis !! SDS-BIG 64/128 !! SDS-BIG 512&lt;br /&gt;
|-&lt;br /&gt;
| prázdný cyklus &amp;lt;code&amp;gt;for (i = 0; i &amp;lt; n; i++) { }&amp;lt;/code&amp;gt;, jeden průchod || 109 µs || 31 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;for (i = n; i--; ) { }&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;while (i--) { }&amp;lt;/code&amp;gt;, jeden průchod || 52 / 46 µs || 15 / 13 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x = 5;&amp;lt;/code&amp;gt; (x je lokální proměnná) || cca 60 µs || cca 17 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x = y + z;&amp;lt;/code&amp;gt; || cca 105 µs || cca 31 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x++;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;++x;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;x += 1;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;x = x + 1;&amp;lt;/code&amp;gt; || 57 / 49 / 70 / 102 µs || 17 / 14 / 20 / 30 µs&lt;br /&gt;
|-&lt;br /&gt;
| konstanta: číslo / enum / &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; (definované těsně před použitím) || +0 / +7 / +21 µs || +0 / +2 / +6 µs&lt;br /&gt;
|-&lt;br /&gt;
| konstanta: enum / &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; (definované na začátku velkého programu) || +47 / +62 µs || +15 / +19 µs&lt;br /&gt;
|-&lt;br /&gt;
| globální proměnná, čtení / zápis (deklarovaná na začátku programu), oproti lokální || +32 / +90 µs || +11 / +31 µs&lt;br /&gt;
|-&lt;br /&gt;
| globální proměnná, čtení / zápis (deklarovaná těsně před použitím), oproti lokální || +7 / +13 µs || +2 / +4 µs&lt;br /&gt;
|-&lt;br /&gt;
| makro s parametry, např. &amp;lt;code&amp;gt;SQR(y)&amp;lt;/code&amp;gt; || 870–1600 µs (!) || cca 3550 µs (!)&lt;br /&gt;
|-&lt;br /&gt;
| totéž jako funkce &amp;lt;code&amp;gt;sqr(y)&amp;lt;/code&amp;gt; / rozepsané &amp;lt;code&amp;gt;y * y&amp;lt;/code&amp;gt; || cca 195 / 105 µs || cca 60 / 31 µs&lt;br /&gt;
|-&lt;br /&gt;
| volání prázdné funkce bez parametrů || cca 105 µs || cca 36 µs&lt;br /&gt;
|-&lt;br /&gt;
| každý parametr funkce / každá lokální proměnná ve volané funkci, na každé volání || +35 / +65 µs || +10 / +18 µs&lt;br /&gt;
|-&lt;br /&gt;
| příkaz, který se neprovede (uvnitř nesplněné podmínky &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;) || cca 80 µs || cca 25 µs&lt;br /&gt;
|-&lt;br /&gt;
| volání funkce, které se neprovede (bez ohledu na velikost funkce) || cca 20 µs || cca 6 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; nebo řetězec &amp;lt;code&amp;gt;if – else if&amp;lt;/code&amp;gt;, na každou větev (bez ohledu na to, která platí) || cca 80–100 µs || cca 25–35 µs&lt;br /&gt;
|-&lt;br /&gt;
| tabulka hodnot &amp;lt;code&amp;gt;x = tab[k];&amp;lt;/code&amp;gt; || cca 120 µs || cca 35 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_get_u32()&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;SDS_set_u32()&amp;lt;/code&amp;gt; || cca 155 / 250 µs || cca 48 / 79 µs&lt;br /&gt;
|-&lt;br /&gt;
| 8 vstupů: 8x &amp;lt;code&amp;gt;SDS_get_u32()&amp;lt;/code&amp;gt; / 1x &amp;lt;code&amp;gt;SDS_get_a()&amp;lt;/code&amp;gt; || 1400 / 320 µs || 416 / 98 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcmp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strlen&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atoi&amp;lt;/code&amp;gt;, ... (jedno volání) || 200–340 µs || 60–110 µs&lt;br /&gt;
|-&lt;br /&gt;
| kopie 64 bajtů vlastním cyklem / pomocí &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; || 11–18 ms / 0,34 ms || 3,1–5,2 ms / 0,11 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;printf()&amp;lt;/code&amp;gt; || cca 360 µs + 2,7 µs na znak || cca 110 µs + 1,1 µs na znak&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;putchar()&amp;lt;/code&amp;gt;, na každý znak || cca 375 µs || cca 115 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; || 0,6 ms / N ms + 0,5–0,7 ms || 0,19 ms / N ms + 0,1–0,15 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;echoclear()&amp;lt;/code&amp;gt; || cca 1 ms || cca 0,5 ms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Proměnné a konstanty ===&lt;br /&gt;
&lt;br /&gt;
* '''Nejčastěji používané proměnné funkce (čítače cyklů, mezisoučty) deklarujte jako poslední''' v seznamu deklarací. Proměnná deklarovaná později je rychlejší: čítač cyklu deklarovaný jako první z 27 lokálních proměnných zpomalí každý průchod cyklem o 38 µs, deklarovaný jako poslední nezpomalí nic.&lt;br /&gt;
* '''Konstanty, globální proměnné a enum deklarujte co nejblíže místu použití''', např. těsně před funkcí, která je používá, nebo těsně před &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt; pro hlavní smyčku. Totéž definované na začátku velkého programu je výrazně pomalejší (viz tabulka). Navíc je to i čitelnější: definice je hned u použití.&lt;br /&gt;
* '''Méně globálních položek = rychlejší program.''' Každá další globální proměnná, funkce nebo konstanta mírně zpomalí přístup ke všemu, co je v programu deklarováno před ní, včetně volání funkcí SDS.&lt;br /&gt;
** Související globální proměnné spojte do jedné struktury (&amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt;). Přístup k položce struktury stojí jen cca +14 µs.&lt;br /&gt;
** Nevytvářejte zbytečně mnoho drobných globálních pomocných funkcí.&lt;br /&gt;
* '''Používejte lokální proměnné.''' Na začátku funkce si zkopírujte globální proměnné a nastavení do lokálních proměnných, v cyklu pracujte s lokálními a výsledek zapište do globální proměnné jen jednou na konci.&lt;br /&gt;
* '''Pro pojmenované konstanty používejte &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; místo &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt;.''' &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; je o cca 14 µs pomalejší než enum na stejném místě v programu. &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; použijte jen tam, kde ho FULL-C vyžaduje (velikost pole).&lt;br /&gt;
* '''Nepoužívejte makra s parametry''' (&amp;lt;code&amp;gt;#define SQR(a) ((a)*(a))&amp;lt;/code&amp;gt;) v často prováděném kódu.&lt;br /&gt;
** Stojí 870–1600 µs na každé použití a jejich rychlost se mění s velikostí programu a stavem paměti.&lt;br /&gt;
** Na SDS-BIG 512 jsou dokonce pomalejší než na SDS-BIG 128 (cca 3550 µs).&lt;br /&gt;
** Použijte funkci (cca 195 µs, na SDS-BIG 512 cca 60 µs) nebo výraz rozepište.&lt;br /&gt;
* Nastavení, které uživatel mění, může zůstat na začátku programu jako &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; nebo globální proměnná. Často prováděný kód si ale tyto hodnoty na začátku funkce zkopíruje do lokálních proměnných.&lt;br /&gt;
* '''Nedeklarujte proměnné uvnitř těla cyklu''' (&amp;lt;code&amp;gt;for (...) { int t; ... }&amp;lt;/code&amp;gt;). Funguje to, ale deklarace se provádí při každém průchodu (+25 µs, na SDS-BIG 512 +8 µs). Deklarujte na začátku funkce.&lt;br /&gt;
&lt;br /&gt;
=== Cykly ===&lt;br /&gt;
&lt;br /&gt;
* '''Cyklus směrem dolů je dvakrát rychlejší:''' &amp;lt;code&amp;gt;for (i = n; i--; ) { ... }&amp;lt;/code&amp;gt; trvá 52 µs na průchod, &amp;lt;code&amp;gt;for (i = 0; i &amp;lt; n; i++)&amp;lt;/code&amp;gt; 109 µs. V těle cyklu má i hodnoty n-1 ... 0. &amp;lt;code&amp;gt;while (i--)&amp;lt;/code&amp;gt; je stejně rychlý.&lt;br /&gt;
* &amp;lt;code&amp;gt;while (i &amp;lt; n) { ...; i++; }&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;do { } while ()&amp;lt;/code&amp;gt; nejsou rychlejší než &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;++i&amp;lt;/code&amp;gt; je o něco rychlejší než &amp;lt;code&amp;gt;i++&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i += 1&amp;lt;/code&amp;gt; je pomalejší.&lt;br /&gt;
* '''Nikdy nepoužívejte globální proměnnou jako čítač cyklu''' (+113 µs na každý průchod).&lt;br /&gt;
* Mez cyklu jako číslo nebo lokální proměnná nic nestojí. Jako globální proměnná stojí +29 µs na průchod, jako &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; +56 µs na průchod. Zkopírujte ji předem do lokální proměnné.&lt;br /&gt;
* Nejvíc ušetříte tím, co z cyklu vyjmete: každý příkaz uvnitř cyklu stojí cca 100 µs na každý průchod.&lt;br /&gt;
&lt;br /&gt;
=== Podmínky a kód, který se neprovede ===&lt;br /&gt;
&lt;br /&gt;
* '''I kód, který se neprovede, zabírá čas.''' Příkaz uvnitř nesplněné podmínky stojí cca 80 µs, skoro stejně jako provedený (cca 100 µs).&lt;br /&gt;
* '''Velké, zřídka prováděné bloky přesuňte do samostatné funkce.''' Neprovedené volání funkce stojí jen cca 20 µs, bez ohledu na to, jak je funkce velká.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; čas neušetří.''' Volání funkce trvá úměrně délce celé funkce, ne jen té části, která se provedla. Často volané funkce udržujte krátké.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; i řetězec &amp;lt;code&amp;gt;if – else if&amp;lt;/code&amp;gt; stojí cca 80–100 µs na každou větev''', bez ohledu na to, která větev platí: 2 větve cca 270 µs, 8 větví cca 770–940 µs.&lt;br /&gt;
* '''Kde to jde, použijte tabulku hodnot''' místo dlouhého &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; nebo řetězce &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;x = tab[k];&amp;lt;/code&amp;gt; cca 120 µs). Tabulku naplňte kódem na začátku programu, protože FULL-C nepovoluje inicializaci pole v deklaraci.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; pravou stranu sice neprovede, ale i tak stojí čas.&lt;br /&gt;
* Ternární operátor &amp;lt;code&amp;gt;?:&amp;lt;/code&amp;gt; trvá stejně jako &amp;lt;code&amp;gt;if / else&amp;lt;/code&amp;gt; a vždy vyhodnotí obě strany. '''Používejte ho jen s čísly''': s řetězci (&amp;lt;code&amp;gt;ok ? &amp;quot;OK&amp;quot; : &amp;quot;CHYBA&amp;quot;&amp;lt;/code&amp;gt;) se program zastaví s chybou &amp;quot;first argument to '?' should be a number&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Výrazy a příkazy ===&lt;br /&gt;
&lt;br /&gt;
* Méně příkazů je rychlejší: jeden výraz &amp;lt;code&amp;gt;x = ((y+z)*(y-z))/3;&amp;lt;/code&amp;gt; trvá 233 µs, totéž rozdělené do 4 příkazů 393 µs.&lt;br /&gt;
* Používejte zkrácené zápisy: &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; 57 µs, &amp;lt;code&amp;gt;x += 1&amp;lt;/code&amp;gt; 70 µs, &amp;lt;code&amp;gt;x = x + 1&amp;lt;/code&amp;gt; 102 µs.&lt;br /&gt;
* Bitový posun a násobení / dělení trvají stejně, &amp;lt;code&amp;gt;* 8&amp;lt;/code&amp;gt; není třeba nahrazovat zápisem &amp;lt;code&amp;gt;&amp;lt;&amp;lt; 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Datové typy ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;int64_t&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; nejsou pomalejší než &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, používejte je bez obav.&lt;br /&gt;
* &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;short&amp;lt;/code&amp;gt; nejsou rychlejší než &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;ftoi()&amp;lt;/code&amp;gt; je pomalejší než přetypování &amp;lt;code&amp;gt;(int)&amp;lt;/code&amp;gt; (199 µs proti 146 µs).&lt;br /&gt;
&lt;br /&gt;
=== Funkce ===&lt;br /&gt;
&lt;br /&gt;
* '''Funkce jsou dost rychlé na to, abyste mohli psát přehledný kód:''' volání stojí cca 100 µs, tedy zhruba jako jeden příkaz. Rozdělte program do funkcí podle úkolů.&lt;br /&gt;
* Každý parametr prodlouží volání o cca 35 µs, každá lokální proměnná deklarovaná ve volané funkci o cca 65 µs, každá další úroveň vnoření volání o cca 90 µs.&lt;br /&gt;
* Malé, často volané funkce by měly pracovat jen se svými parametry, bez vlastních lokálních proměnných.&lt;br /&gt;
* Pro předání většího množství dat předejte ukazatel na strukturu místo mnoha parametrů.&lt;br /&gt;
* Vyhněte se řetězcům drobných obalových funkcí a rekurzi (stojí čas i místo v zásobníku).&lt;br /&gt;
* Velikost zásobníku (STACK) nastavená ve FULLC.exe musí pokrýt nejhlubší vnoření volání.&lt;br /&gt;
&lt;br /&gt;
=== Řetězce a paměť ===&lt;br /&gt;
&lt;br /&gt;
* '''Vždy používejte knihovní funkce''' (&amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;memset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strlen&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcmp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atoi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strtoul&amp;lt;/code&amp;gt;, ...). Jedno volání stojí 200–340 µs bez ohledu na délku dat. Totéž vlastním cyklem je 20–50x pomalejší: kopie 64 bajtů v cyklu trvá 11–18 ms.&lt;br /&gt;
* &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt; včetně formátu &amp;lt;code&amp;gt;%0.2f&amp;lt;/code&amp;gt; funguje a stojí cca 260–340 µs.&lt;br /&gt;
* '''Nepoužívejte &amp;lt;code&amp;gt;malloc&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;free&amp;lt;/code&amp;gt; v cyklech.''' Fragmentace haldy (heap) zpomaluje program a může způsobit selhání síťových funkcí. Paměť alokujte jednou na začátku programu, nebo použijte pevná pole. Nechte dostatek volné haldy pro síťové funkce.&lt;br /&gt;
&lt;br /&gt;
=== Funkce SDS (set a get) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_get_*()&amp;lt;/code&amp;gt; stojí cca 155 µs, &amp;lt;code&amp;gt;SDS_set_u32()&amp;lt;/code&amp;gt; cca 250 µs.&lt;br /&gt;
* '''Kde to tabulka indexů umožňuje (označení &amp;quot;(a)&amp;quot;), čtěte bloky pomocí &amp;lt;code&amp;gt;SDS_get_a()&amp;lt;/code&amp;gt;''': 8 vstupů jedním voláním za 320 µs místo 1400 µs. Pro optovstupy jen na firmware, kde je opravena známá chyba 5 (viz níže).&lt;br /&gt;
* Hodnotu přečtěte jednou za průchod do lokální proměnné a dál používejte tu.&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_get_a()&amp;lt;/code&amp;gt; vyplní jen tolik položek, kolik jich daný hardware má. Požadujete-li víc, funkce nevyplní nic a nehlásí chybu. Proto vždy žádejte jen skutečný počet položek. Např. SDS-BIG 512 (BIG2): 9 optovstupů, 6 relé, 8 A/D vstupů, 9 S0 vstupů.&lt;br /&gt;
&lt;br /&gt;
=== Konzole (printf) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;printf()&amp;lt;/code&amp;gt; stojí cca 360 µs + 2,7 µs na znak. &amp;lt;code&amp;gt;putchar()&amp;lt;/code&amp;gt; stojí cca 375 µs '''na každý znak''', proto nikdy netiskněte po znacích.&lt;br /&gt;
* Celý řádek si připravte pomocí &amp;lt;code&amp;gt;snprintf()&amp;lt;/code&amp;gt; a vytiskněte ho jedním voláním.&lt;br /&gt;
* Plná konzole tisk nezablokuje ani nezpomalí, ale její kapacita je omezená (BIG: pod cca 14 kB výstupu). Tiskněte stručně.&lt;br /&gt;
* Konzole (echo.htm) je HTML stránka: znak &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, za kterým následuje písmeno nebo číslice, se bere jako HTML značka a část textu se nezobrazí. Ve výpisech se znaku &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt; vyhněte.&lt;br /&gt;
&lt;br /&gt;
=== wait() a měření času ===&lt;br /&gt;
&lt;br /&gt;
* '''SDS-BIG 64/128:''' &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; trvá N ms + cca 0,5–0,7 ms, &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; 0,6 ms. Při silném zatížení sítě může &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; trvat až o cca 1,7 ms déle.&lt;br /&gt;
* '''SDS-BIG 512:''' &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; trvá N ms + cca 0,1–0,15 ms, &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; 0,19 ms.&lt;br /&gt;
* &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; nepoužívejte jen pro &amp;quot;uvolnění&amp;quot; procesoru.&lt;br /&gt;
* Pro měření času použijte index 45 (uptime v ms).&lt;br /&gt;
* Pro přesná měření lze použít index 137 (čítač cyklů CPU). Na SDS-BIG 64/128 má 168 kroků na 1 µs a přeteče cca po 25 s, na SDS-BIG 512 má 480 kroků na 1 µs a přeteče cca po 9 s.&lt;br /&gt;
&lt;br /&gt;
=== Sériová linka (UART) ===&lt;br /&gt;
&lt;br /&gt;
Měřeno na COM6 s propojeným TX a RX, při rychlostech 9600–460800 Bd. Ve všech testech, i při silném zatížení sítě, proběhl přenos bez jediné chyby. RS485 na COM1 nebyla měřena.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !! SDS-BIG 64/128 !! SDS-BIG 512&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_serial_writeCH()&amp;lt;/code&amp;gt;, na každý bajt || cca 0,5 ms || cca 0,16 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt;, jedno volání || cca 0,85 ms + 1,6 µs na bajt || cca 0,37 ms + 0,6 µs na bajt&lt;br /&gt;
|-&lt;br /&gt;
| vysílací buffer (&amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt; se vrací ihned) || cca 600 B || nejméně 1024 B&lt;br /&gt;
|-&lt;br /&gt;
| přijímací buffer || nejméně 1024 B || nejméně 1024 B&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_serial_read()&amp;lt;/code&amp;gt;, když žádná data nečekají || cca 0,35 ms || cca 0,11 ms&lt;br /&gt;
|-&lt;br /&gt;
| nejkratší dotaz – odpověď (zápis až přečtení), kromě doby přenosu po lince || cca 4 ms (pod zátěží sítě až 6 ms) || cca 1,2 ms (pod zátěží sítě až 2,6 ms)&lt;br /&gt;
|-&lt;br /&gt;
| data lze přečíst po příchodu posledního bajtu za || cca 2,5 ms || cca 0,7–0,8 ms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* '''Data odesílejte jedním voláním &amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt;''', nikdy po znacích pomocí &amp;lt;code&amp;gt;SDS_serial_writeCH()&amp;lt;/code&amp;gt; v cyklu: 64 bajtů po znacích trvá 33–40 ms na SDS-BIG 128 a 10 ms na SDS-BIG 512, při jakékoliv rychlosti linky.&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt; se vrací ihned, aniž čeká na odvysílání, pokud se data vejdou do vysílacího bufferu. Při větším objemu čeká, dokud se zbytek do bufferu nevejde: na SDS-BIG 128 čekalo 1024 B při 115200 Bd 34 ms.&lt;br /&gt;
* Přijímací buffer pojme nejméně 1024 B, takže program nemusí číst nepřetržitě.&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_serial_read()&amp;lt;/code&amp;gt; nevolejte v rychlé smyčce, protože stojí čas i bez dat. Stačí jednou za průchod hlavní smyčkou nebo po &amp;lt;code&amp;gt;wait()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Přijatá data jsou programu k dispozici se zpožděním (viz tabulka). U krátkých zpráv při vysokých rychlostech toto pevné zpoždění převažuje, takže vyšší rychlost linky pomůže hlavně u velkých bloků dat.&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
&lt;br /&gt;
* '''Nevolejte další funkci &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt;, dokud předchozí není dokončena''': u publish, subscribe a unsubscribe sledujte &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt;, u connect a disconnect &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt;. Ve FW starším než 31.10.2026 takové volání poruší stav spojení (viz Známé chyby níže).&lt;br /&gt;
* '''Stav spojení &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; kontrolujte při každém průchodu hlavní smyčkou''' a v případě potřeby spojení obnovte postupem uvedeným v části Známé chyby. Po každém novém připojení je potřeba znovu provést subscribe, protože se tabulka přihlášení maže.&lt;br /&gt;
* Po normálním &amp;lt;code&amp;gt;mqtt_disconnect()&amp;lt;/code&amp;gt; skončí &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; na hodnotě −2, ne 0. Považujte 0 i −2 za &amp;quot;odpojeno&amp;quot;.&lt;br /&gt;
* Kontrola stavu v čekací smyčce stojí čas (cca 0,3 ms na SDS-BIG 128). Do takové smyčky dejte &amp;lt;code&amp;gt;wait(10)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !! SDS-BIG 128, FW starší než 10.2026 !! SDS-BIG 128, FW od 31.10.2026 včetně !! SDS-BIG 512, FW od 31.10.2026 včetně&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; || cca 0,2–0,45 s || cca 0,45 s || cca 2 ms&lt;br /&gt;
|-&lt;br /&gt;
| publish (do potvrzení brokerem) || cca 0,3–0,65 s (průměr 0,5 s) || cca 3–6 ms || cca 0,9 ms&lt;br /&gt;
|-&lt;br /&gt;
| nejvyšší počet publish za sekundu || cca 2 || cca 250 || cca 1000&lt;br /&gt;
|-&lt;br /&gt;
| zpráva přes broker a zpět || cca 0,5 s || cca 6 ms || cca 1,7 ms&lt;br /&gt;
|-&lt;br /&gt;
| subscribe / unsubscribe / disconnect || cca 0,3–0,65 s || cca 3–4 ms || cca 1 ms&lt;br /&gt;
|-&lt;br /&gt;
| při silném zatížení sítě || beze změny (cca 0,5 s) || většina publish 7–15 ms, některé až cca 1,5 s || publish cca 1,3–1,9 ms, výjimečně až cca 50 ms, cca 600 zpráv za sekundu&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Pro FW starší než 10/2026: délka operace nezávisí na velikosti dat, a protože každá operace trvá cca 0,5 s:&lt;br /&gt;
** na dokončení publish v hlavní smyčce nečekejte. Zavolejte &amp;lt;code&amp;gt;mqtt_publish()&amp;lt;/code&amp;gt;, pokračujte v jiné práci a &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt; zkontrolujte při dalším průchodu;&lt;br /&gt;
** '''posílejte více hodnot v jedné zprávě''' (např. JSON, celkem do cca 1465 znaků včetně názvu položky): publish s 1024 B trvá stejně dlouho jako s 8 B.&lt;br /&gt;
* '''Firmware od 31.10.2026 včetně:''' čekat na dokončení publish lze, jedna operace trvá jednotky ms. Vždy ale používejte časový limit alespoň 3–5 s, protože při zatížení sítě může operace výjimečně trvat i cca 1,5 s.&lt;br /&gt;
&lt;br /&gt;
==== Známé chyby firmware (MQTT) ====&lt;br /&gt;
&lt;br /&gt;
'''1. Volání &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt; dříve, než skončila předchozí operace, poruší stav spojení''' (FW starší než 31.10.2026)&lt;br /&gt;
* Zavoláte-li např. &amp;lt;code&amp;gt;mqtt_publish()&amp;lt;/code&amp;gt; ve chvíli, kdy předchozí publish ještě probíhá, zapíše se chybový kód −3 do &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; (místo do &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; pak zůstane trvale na −3, přestože spojení ve skutečnosti funguje, a program se tak jeví jako odpojený.&lt;br /&gt;
* Následné přímé zavolání &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; selže s výsledkem −7 (při CONNACK 0).&lt;br /&gt;
* Ochrana: nikdy nevolejte další funkci &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt; před dokončením předchozí (viz MQTT výše).&lt;br /&gt;
* Obnova spojení, která funguje ve všech verzích firmware:&lt;br /&gt;
*# pokud &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; není 4, 0 ani −2, zavolejte &amp;lt;code&amp;gt;mqtt_disconnect()&amp;lt;/code&amp;gt;;&lt;br /&gt;
*# počkejte, až bude &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; rovno 0 nebo −2 (cca 0,3 s);&lt;br /&gt;
*# počkejte dalších 500 ms;&lt;br /&gt;
*# zavolejte &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; a počkejte na hodnotu 4;&lt;br /&gt;
*# znovu proveďte subscribe všech položek.&lt;br /&gt;
&lt;br /&gt;
'''2. Po &amp;lt;code&amp;gt;mqtt_disconnect()&amp;lt;/code&amp;gt; skončí &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; na −2 místo 0''' (všechny testované verze firmware)&lt;br /&gt;
* Hodnota −2 v tomto případě neznamená chybu: považujte 0 i −2 za &amp;quot;odpojeno&amp;quot;. Příklad, který po odpojení čeká pomocí &amp;lt;code&amp;gt;if (sys[2200] &amp;lt;= 0) goto error;&amp;lt;/code&amp;gt;, by normální odpojení vyhodnotil jako chybu.&lt;br /&gt;
&lt;br /&gt;
=== Zatížení sítě a rezerva výkonu ===&lt;br /&gt;
&lt;br /&gt;
* '''SDS-BIG 64/128:'''&lt;br /&gt;
** Při nezatížené síti spotřebuje ostatní činnost SDS cca 2 % výkonu a program není nikdy přerušen na déle než cca 0,6 ms.&lt;br /&gt;
** Při silném zatížení (ping a HTTP dotazy z jednoho PC) spotřebuje 15–19 % výkonu. Program pak běží o cca 18–20 % pomaleji a je často přerušován, ale nikdy na déle než cca 1,5 ms.&lt;br /&gt;
* '''SDS-BIG 512:'''&lt;br /&gt;
** Při nezatížené síti spotřebuje ostatní činnost SDS cca 1 % výkonu a program není přerušen na déle než cca 0,03 ms.&lt;br /&gt;
** Při silném zatížení (ping a HTTP dotazy z jednoho PC) spotřebuje ostatní činnost cca 45 % výkonu a program běží cca 1,8x pomaleji. I tak je ale stále cca 2x rychlejší než SDS-BIG 128 bez zátěže.&lt;br /&gt;
** Občas, pravděpodobně při otevření stránky webového rozhraní přes HTTPS, se objeví jednotlivá pauza cca 10–25 ms. Programy s krátkými časovými limity (např. sériové protokoly) musí takovou pauzu snést.&lt;br /&gt;
* '''U zařízení se silným síťovým provozem počítejte s rezervou výkonu''': cca 25 % na SDS-BIG 64/128, cca 50 % na SDS-BIG 512. Poměry mezi časy i všechny tipy výše platí i pod zátěží.&lt;br /&gt;
&lt;br /&gt;
=== Sběrnice 1-Wire ===&lt;br /&gt;
&lt;br /&gt;
* '''Pokud sběrnici 1-Wire nepoužíváte, zavolejte hned na začátku programu &amp;lt;code&amp;gt;SDS_disable_onewire()&amp;lt;/code&amp;gt;.'''&lt;br /&gt;
* Na SDS-BIG 512 s firmwarem starším než 31.10.2026 může odpojené čidlo 1-Wire program extrémně zpomalit (určitě si aktualizujte firmware!).&lt;br /&gt;
* Stav 1-Wire masteru lze zkontrolovat čtením indexu 2998: 1 = detekce, 2 nebo 4 = chyba, 8 = v provozu, 16 = vypnuto.&lt;br /&gt;
&lt;br /&gt;
=== Známé chyby ve starším firmware (starší než 31.10.2026) ===&lt;br /&gt;
&lt;br /&gt;
'''1. Odpojené čidlo 1-Wire zpomalí program cca 125x''' (opraveno ve FW od 31.10.2026 včetně)&lt;br /&gt;
* Pokud je v SDS evidováno dříve nalezené čidlo 1-Wire, které je fyzicky odpojené, zpomalí se FULL-C program cca 125x. Zpomalení začne, jakmile se 1-Wire master rozběhne (cca 7 s po startu SDS, index 2998 = 8), a program se už nezotaví.&lt;br /&gt;
** Program pak dostane méně než 1 % výkonu: smyčka, která běžně trvá 54 µs na průchod, trvá 6,6–9,3 ms.&lt;br /&gt;
* Ochrana: pokud 1-Wire nepoužíváte, zavolejte na začátku programu &amp;lt;code&amp;gt;SDS_disable_onewire()&amp;lt;/code&amp;gt;. S ním běží program trvale plnou rychlostí.&lt;br /&gt;
* Ochrana pro starší firmware, pokud 1-Wire používáte: zajistěte, aby všechna evidovaná čidla byla připojena, nebo aktualizujte firmware.&lt;br /&gt;
&lt;br /&gt;
'''2. Blokové čtení optovstupů &amp;lt;code&amp;gt;SDS_get_a(151, ...)&amp;lt;/code&amp;gt; vrací chybné hodnoty''' (opraveno ve FW od 31.10.2026 včetně)&lt;br /&gt;
* SDS-BIG 512 se starším firmware: volání může způsobit restart celého SDS.&lt;br /&gt;
* Ve FW od 31.10.2026 opraveno: blokové čtení vrací stejné hodnoty jako &amp;lt;code&amp;gt;SDS_get_u32(151 + n)&amp;lt;/code&amp;gt; (0 = aktivní, 1 = neaktivní).&lt;br /&gt;
* Ochrana pro starší firmware: čtěte optovstupy jednotlivě pomocí &amp;lt;code&amp;gt;SDS_get_u32(151 + n)&amp;lt;/code&amp;gt;, nebo aktualizujte firmware.&lt;br /&gt;
&lt;br /&gt;
=== Co rychlost neovlivní (pište přehledně) ===&lt;br /&gt;
&lt;br /&gt;
* Komentáře, i uvnitř cyklů a v neprováděných blocích.&lt;br /&gt;
* Dlouhé, výstižné názvy proměnných.&lt;br /&gt;
* Závorky navíc.&lt;br /&gt;
* Rozdělení programu do funkcí podle úkolů (cca jeden příkaz na každé volání).&lt;br /&gt;
* 64bitové a float typy.&lt;br /&gt;
* Odsazení, prázdné řádky, formátování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Příklad ===&lt;br /&gt;
&lt;br /&gt;
Pomalý, ale běžný zápis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OPTO_FIRST  151&lt;br /&gt;
#define NUM_INPUTS  8&lt;br /&gt;
#define WEIGHT(a)   ((a)*(a))&lt;br /&gt;
&lt;br /&gt;
unsigned int g_weight;&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int i;&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    g_weight = 0;&lt;br /&gt;
    for (i = 0; i &amp;lt; NUM_INPUTS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      if (SDS_get_u32(OPTO_FIRST + i) == 0) g_weight = g_weight + WEIGHT(i + 1);&lt;br /&gt;
    }&lt;br /&gt;
    wait(100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Totéž zapsané podle tipů výše (stejně čitelné):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define NUM_INPUTS  8                              // velikost pole: zde je #define nutny&lt;br /&gt;
&lt;br /&gt;
unsigned int g_weight;                             // vysledek pro zbytek programu&lt;br /&gt;
&lt;br /&gt;
enum inputs { OPTO_FIRST = 151 };                  // definovano tesne pred pouzitim&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int opto[NUM_INPUTS];&lt;br /&gt;
  unsigned int w;&lt;br /&gt;
  unsigned int i;                                  // nejpouzivanejsi promenna deklarovana posledni&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    SDS_get_a(OPTO_FIRST, (void *)opto, NUM_INPUTS * 4);   // 1 volani misto 8&lt;br /&gt;
    w = 0;&lt;br /&gt;
    for (i = NUM_INPUTS; i--; )                    // cyklus dolu: i = 7 .. 0&lt;br /&gt;
    {&lt;br /&gt;
      if (opto[i] == 0) w += (i + 1) * (i + 1);   // bez makra s parametry&lt;br /&gt;
    }&lt;br /&gt;
    g_weight = w;                                  // globalni promenna zapsana jen jednou&lt;br /&gt;
    wait(100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Změny oproti první verzi:&lt;br /&gt;
* jedno blokové čtení místo 8 volání;&lt;br /&gt;
* žádné makro s parametry;&lt;br /&gt;
* mezisoučet v lokální proměnné místo globální;&lt;br /&gt;
* cyklus směrem dolů;&lt;br /&gt;
* konstanta definovaná těsně před použitím;&lt;br /&gt;
* čítač cyklu deklarovaný jako poslední.&lt;br /&gt;
&lt;br /&gt;
Podle naměřených časů trvá jeden průchod první verze na SDS-BIG 128 cca 8–15 ms (podle počtu aktivních vstupů), druhé verze cca 2–3 ms. Na SDS-BIG 512 je to cca 3,5x méně u obou verzí; u první verze je rozdíl ještě větší, protože makra s parametry jsou na SDS-BIG 512 pomalejší.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_tips_and_tricks&amp;diff=989</id>
		<title>FULL-C: tips and tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_tips_and_tricks&amp;diff=989"/>
		<updated>2026-10-31T16:16:35Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Důležité poznámky k práci s FULL-C ==&lt;br /&gt;
&lt;br /&gt;
Zde jsou neseřazené tipy a triky, tak, vytvořené tak, jak jak postupem času dostáváme různé dotazy od uživatelů.&lt;br /&gt;
&lt;br /&gt;
Současně (na konci stránky) naleznete kritické tipy a postupy, jak efektivně zapsat váš program tak, aby byl co nejvíce rychlý. Je důležité si to přečíst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Dbejte na to''', aby verze FC byla '''stejná''' jak pro překladač (FULLC.EXE) tak i pro vaše SDS. Pokud má vaše SDS starší firmware (a tedy starší verzi FC, například 0x06), zatímco překladač je novější (například FULLC.exe s verzí FC 0x08), tak SDS odmítne novější FC program spustit. Toto se řeší velmi snadno, a to aktualizací firmware ve vašem SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* I když proběhne překlad ve FULLC.EXE v pořádku, '''stále může váš FULL-C program obsahovat chyby''' - to se dozvíte '''teprve''' z konzole (web zařízení SDS: typicky 192.168.1.250/echo.htm), proto ji '''vždy průběžně kontrolujte''' !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pozor na ''signed'' a ''unsigned''  typy a jejich používání. FULL-C se chová dle standardu C, a detaily standardu vás mohou zmást.&lt;br /&gt;
&lt;br /&gt;
Např. '''char''' je signed ! (pokud jej explicitně nedefinujeme jako '''unsigned char''').&lt;br /&gt;
&lt;br /&gt;
Příklad - chceme vypsat HEX kód pro jednobajtový znak.&lt;br /&gt;
&lt;br /&gt;
Toto ale neudělá to co &amp;quot;chceme&amp;quot;: vypíše to '''FFFFFFDB''' - přesně podle specifikace jazyka C, kdy dojde nejprve k převodu na int32 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char ch = 0xDB;&lt;br /&gt;
printf(&amp;quot;%x&amp;quot;, ch);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad správného zápisu: vypíše to '''DB''' tak jak chceme, a to proto že jsme správně uvedli že to chceme zpracovat jako '''unsigned char'''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char ch = 0xDB;&lt;br /&gt;
printf(&amp;quot;%x&amp;quot;, (unsigned char)ch);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Další příklad velkého problému je následující kus programu pro výpis obsahu textového pole jako HEX znaků:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char pole[32];&lt;br /&gt;
char * ch;&lt;br /&gt;
&lt;br /&gt;
ch = (char *)&amp;amp;pole;&lt;br /&gt;
for (i = 0; i &amp;lt; 32; i++)&lt;br /&gt;
{&lt;br /&gt;
  printf(&amp;quot;%02x&amp;quot;, *ch++); // &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; WARNING !!!! *ch is signed char !!!&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opět, správné řešení je ve správném přetypování: &amp;lt;pre&amp;gt; printf(&amp;quot;%02x&amp;quot;, (unsigned char)*ch++); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Před provedením jakékoliv síťové komunikace ve FULL-C (např. odeslání emailu), '''vždy zkontrolujte''' stav, a to pomocí: ''status = SDS_get_u(27);'' (když je ''status==0'' tak SDS nemá připojení - nezačínejte komunikaci, čekejte a testuje stav).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pole pro uchování textů můžete přímo deklarovat, např. na zásobníku (stack) jako ''char text[128];'' - nebo na haldě (heap), pro což využijte ''text = (char *)malloc(128);'' a ''free(text);text=0;'' funkce. Výběr z těchto možností je na vás (malé pole / malé texty jdou dát na zásobník, velké už patří do haldy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Využijte 64-bitových proměnných (int64_t nebo uint64_t) tam, kde vám 32 bitů nestačí. Například pro počítadla, nebo výpočty s velkými čísly (nebo jen stačí že by měl být velký mezivýsledek a při použití 32-bit čísel by jste o něj &amp;quot;přišli&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pro zjištění, jaký největší blok paměti (heap) lze v danou chvíli alokovat pomocí ''malloc()'' funkce, využijte funkci ''SDS_heap_stats()'' . Ačkoliv může být celková hodnota volné heap pamět velká, toto celkové volné místo je vždy roztroušeno na různé malé oddělené bloky (fragmentace) - a vždy lze alokovat jen po jednom bloku, a jeho největší možná velikost je zjistitelná právě ze zmíněné funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Vždy když uvolníte paměť, nezapomeňte ihned ručně vynulovat daný uvolněný ukazatel. Zabrání to chybám ve vašem programu. Příklad: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definice ukazatale&lt;br /&gt;
void *ptr; &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
// alokujeme si pamet, pro priklad 32 bajtu&lt;br /&gt;
ptr = malloc(32);&lt;br /&gt;
&lt;br /&gt;
// pamet na kterou ukazuje ptr lze ted pouzivat (pozor at nepristupujete mimo alokovany rozsah)&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
// uz pamet nepotrebujeme, tak ji uvolnime:&lt;br /&gt;
free(ptr); &lt;br /&gt;
ptr = 0;   // vzdy ihned za zavolanim free() nastavte ptr do nuly !!!&lt;br /&gt;
&lt;br /&gt;
... &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Funkce ''printf()'' a ''puts()'' a ''putchar()'' zapisují do konzole (web zařízení SDS, typicky: 192.168.1.250/echo.htm), čehož lze využít pro ladění programu, nebo pro dálkový monitoring zařízení. Nicméně pro průběžné spolehlivé získávání hodnot a údajů z SDS nebo vašeho programu, je vhodně použít systém sdílených proměnných, nebo SNMP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* FULL-C používá právě přesně 32-bitů pro datový typ ''float''. Počítejte s touto informací pro správné pochopení přesnosti práce s desetinnými čísly (omezené rozlišení dané 32bity). Pro většinu aplikací toto nepředstavuje problém, pokud ale chcete provádět složité výpočty s desetinnými čísly, je potřeba znát tato omezení. Přesné vysvětlení viz např. [https://en.wikipedia.org/wiki/Single-precision_floating-point_format|&amp;quot;Single-precision floating-point format&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Funkce ''printf()'' a ''sprintf()'' umí zpracovat ''float'' proměnné (%f), ale neumí je uživatelský formátovat (neumí např. %0.2f - ale umí jen základní %f, to znamená že vypíše úplně celou délku čísla se všemi pozicemi za tečkou, což může být i dost dlouhý text). Toto je aktualizováno v nové verzi FULL-C (tam už to jde).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Nepoužívejte prázdný string''' (tj. &amp;quot;&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
Tři příklady '''zakázaného kódu''' pro FULL-C:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// do not do any of the following:&lt;br /&gt;
//&lt;br /&gt;
char text1[10] = &amp;quot;&amp;quot;;  // spatne !&lt;br /&gt;
//&lt;br /&gt;
strncpy(text2,&amp;quot;&amp;quot;,10); // spatne !&lt;br /&gt;
//&lt;br /&gt;
sprintf(text2,&amp;quot;&amp;quot;);    // spatne !&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Před použitím některé z funkcí, které přistupují k serveru na Internetu, je vhodné provést volání ''dns_resolv()'' pro zjištění aktuální IP adresy (IP0.IP1.IP2.IP3) daného serveru, vždy před zavoláním konkrétní funkce (např. ''http_get()'' ). Určitě není vhodné používat přímo natvrdo zapsané číselné adresy (ty se mohou změnit např. při přesunu serveru).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud některá z FULL-C funkcí selže (např. ''smtp_send()'' ohlásí přes ''smtp_send_status()'' chybu), tak je vhodné mít FULL-C program napsán tak, aby chvíli počkal, a pak to celé zkusil znovu. Při více selháních je pak potřeba provést další akci (oznámit chybu, zjistit stav připojení k síti, atd.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Přes FULL-C lze '''pouze číst''' kalibrační konstanty pro analogové vstupy. Pokud je chcete hromadně nastavit, použijte s výhodou 192.168.1.250/cgi_cfg_adc?xxxx volání (uživatel musí být přihlášen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Každý FULL-C program může nastavit tzv. &amp;quot;brand&amp;quot; (uživatelskou značku / popisek) pro zařízení SDS, na kterém je spuštěn. Protože SDS je často dodáváno v rámci OEM pro další zástavbu do většího celku, může si finální systémový integrátor nastavit své doplňující texty (název firmy, odkazy na web, telefonní čísla na podporu, doplňující texty, informace o sériovém čísle atd.), které jsou pak zobrazeny v rámci stránek webové administrace zařízení SDS (login, welcome, atd.). Toto nastavení provádí FULL-C program zavolání ''SDS_set_a()'' s příslušným indexem a textem. Typicke se takový FULL-C kód dává na úplný začátek programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* FULL-C program lze nachystat a vydat tak, že je &amp;quot;zablokován&amp;quot; tak aby fungoval pouze na jediném konkrétním vybraném SDS zařízení. Každé SDS má své unikátní sériové číslo (viz tabulka indexů pro ''SDSget_u()'' ), a FULL-C program může tuto hodnotu porovnat (s tím, co do FULL-C programu vloží autor programu). Toto uživatelské zablokování programu může předejít chybám, kdy by se např. nevhodný program nahrál omylem na jiný hardware. Pokud vydáváte FULL-C program prostřednictvím .FC souboru, kam zvolíte nepřiložit zdrojový .C kód, pak máte neprůstřelnou možnost zamezit použití programu na jakémkoliv jiném SDS než jaké sami určíte (zdrojový kód nebude cílovému uživateli k dispozici, a navíc váš program otestuje sériové číslo daného SDS na shodu). Samozřejmě to znamená, že musíte zmíněné sériové číslo daného SDS zjistit předem, než vydáte program, aby jste to číslo mohli do programu vložit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud ve svém programu využíváte sériovou sběrnici RS485, dbejte na správné zapojení sběrnice. Naše fórum je plné příkladů, kdy autor programu řešil problém s RS485 a nakonec se ukázalo, že sběrnice byla špatně zapojená (přehozené A/B dráty, nezakončená rezistory, neuvedená do známého klidového stavu přes rezistory atd.). Pro ověření programu je vždy dobré vzít pasivní &amp;quot;odposlech&amp;quot; sběrnice (osciloskop, osobní počítač) a zkontrolovat &amp;quot;překryv&amp;quot; (kdy více zařízení vysílá najednou, což je na RS485 kolize a poškození dat). Právě &amp;quot;překryv&amp;quot; je nejčastějším problémem způsobující poškození komunikace, hned po špatném nastavení komunikační rychlosti v programu. Vždy zkontrolujte svůj hardware, tj. celou sběrnici, je-li správně impedančně zakončena (nejvzdálenější konce) a zda-li jste správně zapojili oba klidové rezistory (pozor, na SDS-BIG tyto nejsou a musí se ručně doplnit &amp;quot;zvenku&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud chcete přes sdílené proměnné (sv) přenášet čísla datového typu ''float'' (desetinná čísla), a pak je chcete například zobrazit na UserWEB webové stránce (a nebo přenést na server atd.), použijte následující trik. Vytiskněte obsah float čísla do Txx[] proměnné, pomocí sprintf(), nikoiv však s využitím %f - ale právě přes následující kód:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si sdilenou promennou T00&lt;br /&gt;
char T00[32];&lt;br /&gt;
&lt;br /&gt;
void FloatToT00(void)&lt;br /&gt;
{&lt;br /&gt;
 // vstupni float&lt;br /&gt;
 float xf;&lt;br /&gt;
&lt;br /&gt;
 // pomocna promenna (presne 4 bajty, protoze &amp;quot;float&amp;quot; je ve FULL-C reprezentovan jako 32-bit)&lt;br /&gt;
 unsigned int xw;&lt;br /&gt;
&lt;br /&gt;
 // zapiseme vzorovou hodnotu&lt;br /&gt;
 xf = 12.34;&lt;br /&gt;
&lt;br /&gt;
 // ziskej 32bit obsah xf (= cteni 4 bajtu dat ktere reprezentuji dany float)&lt;br /&gt;
 xw = *(unsigned int *)&amp;amp;xf;&lt;br /&gt;
 // a zapis do T00, zarovnej vzdy na osm mist (at se to da pozdeji spravne zpracovat - prevest zpet na float)&lt;br /&gt;
 sprintf((char *)T00, &amp;quot;%08X&amp;quot;, xw);&lt;br /&gt;
&lt;br /&gt;
 // T00[] ted obsahuje &amp;quot;414570A4&amp;quot; (coz je hex reprezentace puvodni float hodnoty 12.34)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pokud se po spuštění tohoto kódu pak podíváte např. na 192.168.1.250/shared.txt , tak tam uvidíte toto: &amp;quot;T00|414570A4|&amp;quot; (krom jiného textu). S tím už pak v JavaScriptu není problém pracovat (převést zpět na float a korektně zobrazit nebo dále zpracovat). Řada přímých příkladu je k dispozici, stačí hledat na Internetu podle klíčových slov &amp;quot;javascript convert hex to float&amp;quot;. &lt;br /&gt;
Toto se řeší právě z důvodu že FULL-C printf funkce (a další podobné) umí jen %f ale bez dalších parametrů, takže tisknou float čísla na všechny místa za desetinnou tečkou, což je ve většině případů nežádoucí (při zobrazování na webových stránkách a podobně).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Přistupovat ke všem údajům ze sběrnic 1-Wire, ve FULL-C, je samozřejmě možné, je však potřeba vědět jak. Detaily viz stránka [[FULL-C: OneWire]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pamatujte, že varianta '''SDS-64''' (viz [[SDS BIG|varianty]]) má k diposozi pouze celkem 64kB programové paměti (a SDS-128 má jen 128kB této paměti, a SDS-512 jen 512kB celkové FULL-C paměti) - do které '''se musí vlézt celý''' váš přeložený FULL-C program, a k tomu také celý STACK a všechna potřebná paměť HEAP. Toto omezení není dáno programově, ale právě použitým hardware v SDS, takže jej nelze jednoduše &amp;quot;obejít&amp;quot; - pokud se vám to nevleze do varianty 64 tak musíte použít variantu 128 (nebo 512), to je jediné řešení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Vždy '''správně nastavte velikost''' STACKu - číselnou hodnotu nastavte v okně editoru zdrojového textu FULL-C. Pokud nastavíte hodnotu pro váš program jako moc malou, program nebude fungovat (při volání více funkcí může být pro nedostatek stacku ukončen). Příliš velká hodnota snižuje volnou paměť heap (pokud heap nepoužíváte, nastavte stack na vyšší hodnotu pro klid). Správnou hodnotu zjistíte určitým odhadem (podle velikosti a složitosti programu, podle toho kolik proměnných používáte a kolik parametrů se předává při volání funkcí, a kolik funkcí se v sobě volá). Nastavení je možné nechat automaticky odhadnou překladač, nebo jej můžete ručně zadat (odhad není přesný).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Inicializaci proměnných '''provádějte v kódu, nikoliv při deklaraci'''. Jde o to, že při inicializaci hodnot v proměnné či poli, provedené kódem, se spotřebuje zlomek stack paměti, oproti inicializace přímo při deklaraci. Stack paměti je vždy málo a je potřeba jí šetřit. Je to vlastnost FULL-C.&lt;br /&gt;
&lt;br /&gt;
Příklad inicializace při deklaraci: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  unsigned int numbers[5] = {0,1,2,3,4}; // toto spotřebuje hodně stacku - TAKHLE TEDY NE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Příklad identické inicializace kódem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// toto řešení je doporučené, nespotřebovává stack&lt;br /&gt;
unsigned int numbers[5];&lt;br /&gt;
number[0] = 0;&lt;br /&gt;
number[1] = 1;&lt;br /&gt;
number[2] = 2;&lt;br /&gt;
number[3] = 3;&lt;br /&gt;
number[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nebo, příklad odpovídající inicializace kódem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  // toto řešení je doporučené, nespotřebovává stack&lt;br /&gt;
  unsigned int numbers[5];&lt;br /&gt;
  unsigned int i;&lt;br /&gt;
  for (i = 0; i &amp;lt; 5; i++) { number[0] = i; };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Následující informace je platná pouze pro firmware starší než 10.7.2017&lt;br /&gt;
&lt;br /&gt;
* SDS ukazuje aktuální využití své 64kB programové paměti, na webové stránce v administraci.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAP STATS: curalloc=1892, totfree=58632 maxfree=58632, nget=12 nrel=0&lt;br /&gt;
HEAP STATS: bc_locked=1120, stackTop=2984 (of 5000)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jak to dékódovat: první řádek ukazuje celkové využití paměti a počet alokací a uvolnění:&lt;br /&gt;
 curalloc  = celkem alokovaná paměť (heap malloc, a všechny interní FULL-C funkce a interní data v SDS)&lt;br /&gt;
 totfree   = celkem zbývající volná (alokovatelná) heap pamět (součet všech volných heap fragmentů)&lt;br /&gt;
 maxfree   = největší volný heap fragment, který je možné alokovat v jednom kuse&lt;br /&gt;
 nget      = celkový počet alokací (volání malloc/calloc) (včetně vnitřních volání interních FULL-C funkcí v SDS)&lt;br /&gt;
 nrel      = celkový počet uvolnění předchozích alokací (volání free() funkce)&lt;br /&gt;
Druhý řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 bc_locked = kolik bajtů paměti je využito (uzamčeno) pro 'bytecode' vašeho FULL-C (kolik si vzal samotný kód FULL-C programu v paměti)&lt;br /&gt;
 stackTop  = kolik bajtů zásobníku (stacku) je v tento okamžik využito (pokud je to na limitu, víte, že musíte upravit nastavení při překladu)&lt;br /&gt;
 (of X)    = kolik bajtů může nejvíce zásobník (stack) zabrat z celé paměti (nastaveno uživatelem před překladem)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Následující informace je platná pouze pro firmware 10.7.2017 (včetně) a novější (viz také [[SDS BIG|varianty]])&lt;br /&gt;
&lt;br /&gt;
* SDS ukazuje aktuální využití své 64kB nebo 128kB nebo 512kB programové paměti, na webové stránce v administraci.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FC: VER 0x08, PROGMEM 128kB&lt;br /&gt;
MEM STATS:&lt;br /&gt;
- HEAP: used=(492 of 120675), totfree=120164 (biggest=65396), num(get=11,rel=0)&lt;br /&gt;
- STACK: used=(364 of 10004)&lt;br /&gt;
- BC: locked=(264+128+388)&lt;br /&gt;
- SYS: free=280&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jak to dékodovat: první řádek ukazuje informace o SDS:&lt;br /&gt;
 VER        = verze FC&lt;br /&gt;
 PROGMEM    = varianta hardware (64kB nebo 128kB nebo 512kB celkové paměti pro program a data)&lt;br /&gt;
Druhý řádek ukazuje celkové využití paměti a počet alokací a uvolnění:&lt;br /&gt;
 HEAP used  = celkem alokovaná paměť (heap malloc, a všechny interní FULL-C funkce a interní data v SDS)&lt;br /&gt;
 totfree    = celkem zbývající volná (alokovatelná) heap pamět (součet všech volných heap fragmentů)&lt;br /&gt;
 biggest    = největší volný heap fragment, který je možné alokovat v jednom kuse&lt;br /&gt;
 nget       = celkový počet alokací (volání malloc/calloc) (včetně vnitřních volání interních FULL-C funkcí v SDS)&lt;br /&gt;
 nrel       = celkový počet uvolnění předchozích alokací (volání free() funkce)&lt;br /&gt;
Druhý řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 STACK used = kolik bajtů zásobníku (stacku) je v tento okamžik využito (pokud je to na limitu, víte, že musíte upravit nastavení při překladu)&lt;br /&gt;
Třetí řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 BC locked  = kolik bajtů paměti je využito (uzamčeno) pro 'bytecode' vašeho FULL-C (kolik si vzal samotný kód FULL-C programu v paměti)&lt;br /&gt;
Čtvrtý řádek nemá pro FULL-C význam:&lt;br /&gt;
 SYS        = interní hodnota&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Jak funguje FULL-C v SDS ==&lt;br /&gt;
&lt;br /&gt;
Zde jsou popsány hlubší technologické detaily popisující princip FULL-C. Zajímat budou zejména ty, kteří pracují na složitých programech.&lt;br /&gt;
&lt;br /&gt;
Program je uživatelem zadán jako '''jeden jediný textový soubor - zdrojový kód v jazyce FULL-C'''. Tento zdrojový kód (text) je zpracován v naší Windows aplikaci (FULLC.exe, k dispozici ke stažení na této WiKi) do formy výsledného souboru, který primárně obsahuje tzv. ''bytecode''. Tento soubor je následně přes síť nahrán do konkrétního zařízení SDS, kde je trvale uložen (až do nahrání jiného souboru) a je zařízením SDS spouštěn.&lt;br /&gt;
&lt;br /&gt;
== Komprese ==&lt;br /&gt;
&lt;br /&gt;
Program je přenášen z FULLC.exe do SDS přes počítačovou síť. Aby se nemuselo přenášet tolik dat, je bytecode komprimován. Typická úspora je 25% původního objemu.&lt;br /&gt;
&lt;br /&gt;
S touto informací je potřeba plánovat při navrhování rozložení paměti - aby se tam vše vešlo. To že komprimovaný program (výstup FULLC.exe) se do paměti SDS na první pohled &amp;quot;vleze&amp;quot;, ještě neznamená, že se program i podaří spustit (stále se může &amp;quot;vlézt&amp;quot;, ale nezbude místo na zásobník nebo haldu - a to je konec).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ZÁKLADNÍ OMEZENÍ''':&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS je k dispozici ve třech základních variantách: varianta &amp;quot;64&amp;quot; má k dispozici 64kB paměti pro celkové potřeby programu, a varianta &amp;quot;128&amp;quot; má k dispozici 2x64kB (tj. 128kB) paměti pro celkové potřeby programu. Varianta &amp;quot;512&amp;quot; nabízí největší dostupnou paměť pro program a data.&lt;br /&gt;
&lt;br /&gt;
Do celé této celkové paměti se musí vlézt nejen surový ''bytecode'' ale i všechny provozní záležitostí (zásobník - stack, proměnné, halda - heap).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;64&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + instrukce programu (bytecode)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + halda (heap)&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-64kB BLOKU)&lt;br /&gt;
&lt;br /&gt;
Další paměť (více než 1x 64kB) už není ve variantě &amp;quot;64&amp;quot; k dispozici - vše se tedy musí vlézt do jednoho 64kB velkého bloku.  Pokud to pro vaše potřeby nestačí, musíte použít variantu s pamětí 128kB nebo 512kB, které jsou popsány dále.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;128&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + první část haldy (heap-1)&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 (START II-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + instrukce programu (bytecode)&lt;br /&gt;
               ...&lt;br /&gt;
             + druhá část haldy (heap-2), jen pokud nezabere program celý II-64kB blok&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec&lt;br /&gt;
 &lt;br /&gt;
 (KONEC II-64kB BLOKU)&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, varianta &amp;quot;128&amp;quot; nabízí dva bloky po 64kB. Tyto bloky na sebe sice lineárně nenavazují (tj. součtem je to sice 128kB, ale ne v celku), nicméně přináší významnou úlevu předchozímu omezení původní varianty &amp;quot;64&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pro použití varianty &amp;quot;128&amp;quot; je ovšem potřeba mít správný hardware (SDS), tzn. SDS výrobní varianty &amp;quot;64&amp;quot; nelze programově změnit na variantu &amp;quot;128&amp;quot; - to lze jedině použitím vhodného SDS hardware. Samozřejmě program původně určený pro &amp;quot;64&amp;quot; lze na SDS &amp;quot;128&amp;quot; spustit, bez jakýchkoliv omezení (ale naopak, program 128 nelze na 64 spustit, protože varianta 64 nemá dost paměti pro program varianty 128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;512&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-504kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + první část haldy (heap-1)&lt;br /&gt;
               ...&lt;br /&gt;
       504kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-504kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 (START II-8kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + druhá část haldy (heap-2)&lt;br /&gt;
               ...&lt;br /&gt;
         8kB + konec&lt;br /&gt;
 &lt;br /&gt;
 (KONEC II-8kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 SOUČET: celková dostupná paměť 504+8 = 512kB&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, varianta &amp;quot;512&amp;quot; nabízí dva bloky, jeden 504kB a druhý 8kB. V součtu je k dispozici 512kB paměti, která je (dle rozpisu uvedeného výše) rozdělena na jednotlivé dynamické části - skutečně použité velikosti každé části už pak závisí na obsahu vašeho FULL-C programu a vašem nastavení (vámi určená velikost zásobníku).&lt;br /&gt;
&lt;br /&gt;
Programy určené pro variantu 512 lze spustit pouze na správném typu hardware - SDS varianty 512.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Další informace:'''&lt;br /&gt;
&lt;br /&gt;
Velikost programu (bytecode + stringblob) a proměnných (variables) je pevná, a je přímo dána vámi tj. programátorem (podle toho, jaký napíšete program, tak bude tato oblast velká).&lt;br /&gt;
&lt;br /&gt;
Zbytek je použit pro haldu (heap), což je různě veliký paměťový prostor který má program k dispozici (funkce: malloc, realloc, free), pokud jej tedy potřebuje. Pokud bude váš program moc velký, pak se může stát že halda nemusí existovat - a systém nebude schopen takový program vůbec spustit ! Vždy je potřeba mít haldo o velikosti alespoň hodnoty 1/8 velikosti programu.&lt;br /&gt;
&lt;br /&gt;
Zásobník (stack) je vždy umístěn na začátku paměťového prostoru, a jeho velikost je opět jednorázově určena programátorem (podle odhadu nebo aktuální měření). Pokud je zásobník příliš malý, může být program předčasně ukončen (řešením je zvětšení velikosti zásobníku (na úkor velikosti heapu) a nové nahraní programu do zařízení). Toto je zřejmě nejčastější problém u většiny FULL-C programů - špatně nastavená velikost zásobníku.&lt;br /&gt;
&lt;br /&gt;
Informace o aktuálním vyžití celého paměťového prostoru je k dispozici ve webovém rozhraní SDS (Menu, FULL-C). Odsud lze také přečíst skutečné využití zásobníku (nejvyšší dosažená velikost).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Heap ==&lt;br /&gt;
&lt;br /&gt;
Typický FULL-C program v zařízení SDS nemá potřebu používat haldu (heap) - typicky všechny proměnné (i velká pole) lze bez problému staticky deklarovat.&lt;br /&gt;
&lt;br /&gt;
Pokud však potřebujete dynamickou alokaci paměti, tak je k dispozici ten zbytek paměťového prostoru, který zůstane &amp;quot;volný&amp;quot; po nahrání programu (a vyhrazení zásobníku).&lt;br /&gt;
&lt;br /&gt;
Informace o velikosti volného heapu a fragmentaci lze opět nalézt ve webovém rozhraní SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Opakování varování ==&lt;br /&gt;
&lt;br /&gt;
Velikost programu je omezena takto:&lt;br /&gt;
&lt;br /&gt;
* varianta SDS 64kB: vše se musí vlézt do 64kB (bytecode, proměnné, zásobník) &lt;br /&gt;
* varianta SDS 128kB: vše se musí vlézt do 2x 64kB (128kB s danými omezeními, především bytecode omezen na 64kB protože se musí celý vlézt do jednoho bloku)&lt;br /&gt;
* varianta SDS 512kB: vše se musí vlézt do 512kB, přičemž součet velikosti (bytecode, všechny proměnné, zásobník) je do velikosti 504kB (vše další je dostupné jako heap)&lt;br /&gt;
* Zásobník (stack) musí mít dostatečnou velikost pro provoz programu (všechny vnořené volání funkcí, rekurze, atd.).&lt;br /&gt;
* Halda (heap) musí být k dispozici o dostatečné velikosti, jinak se jakýkoliv program nespustí.&lt;br /&gt;
&lt;br /&gt;
Pokud by váš přeložený program byl moc velký, a to tak že se spolu s ním do paměti nevlezou další potřebné věci (zásobník atd.), nebudete moct program na zařízení SDS spustit.&lt;br /&gt;
&lt;br /&gt;
Vždy můžete kontrolovat stav programu (a využití paměti) na stránce &amp;quot;FULL-C&amp;quot; ve webové administraci zařízení SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak programovat ==&lt;br /&gt;
&lt;br /&gt;
FULL-C program musí vždy mít definovanou funkci '''main()''', která je první spuštěnou funkcí v rámci spuštění programu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 void main(void)&lt;br /&gt;
 {&lt;br /&gt;
   ;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je úkolem programátora, aby funkce '''main()''' nebyla opuštěna (potom je program &amp;quot;ukončen&amp;quot; protože nemá kam dál pokračovat) = v takovém případě je program ukončen, a znovu bude spuštěn až po restartu SDS (nebo když by byl nahrán nový program, tak je pak spuštěn ten).&lt;br /&gt;
&lt;br /&gt;
FULL-C program tedy vždy začíná jako první provádět instrukce ve funkci '''main()'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V základu lze činnosti provádět na základě těchto vstupů:&lt;br /&gt;
&lt;br /&gt;
* čas (např. každou vteřinu)&lt;br /&gt;
* hardware (např. čtení vstupů)&lt;br /&gt;
* hodnoty [[FULL-C: sharing|sdílených proměnných]] (např. změnou proměnné z uživatelské webové stránky)&lt;br /&gt;
&lt;br /&gt;
Výstupy programu mohou být:&lt;br /&gt;
&lt;br /&gt;
* ovládání hardware (např. spínání relé)&lt;br /&gt;
* změna hodnot sdílených proměnných (např. pro dynamické zobrazení na uživatelské webové stránce)&lt;br /&gt;
* odesílání stavů přes síť (např. HTTP-GET nebo SNMP-TRAP)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro všechny tyto vypsané činnosti je potřeba znát [[FULL-C: functions|funkce a příkazy]], které programu umožní právě takovéto činnosti vykonávat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OPTIMALIZACE KÓDU a jak je SDS vůbec rychlé ? ==&lt;br /&gt;
&lt;br /&gt;
Bylo provedeno detailní měření na SDS-BIG 128 a SDS-BIG 512, a postupy jsou použitelné pro všechna BIG a BIG2 zařízení.&lt;br /&gt;
&lt;br /&gt;
Pokud není uvedeno jinak, měřilo se při nezatížené síti. U SDS-BIG 64 lze očekávat prakticky stejné hodnoty jako u SDS-BIG 128, protože má stejnou frekvenci CPU.&lt;br /&gt;
&lt;br /&gt;
'''Časy uvedené v textu platí pro SDS-BIG 64/128.''' SDS-BIG 512 je téměř ve všem cca 3,5x rychlejší (viz tabulka). Jedinou výjimkou jsou makra s parametry. Všechny tipy platí pro obě varianty stejně.&lt;br /&gt;
&lt;br /&gt;
=== Základní orientace ===&lt;br /&gt;
&lt;br /&gt;
* Jeden jednoduchý příkaz (např. &amp;lt;code&amp;gt;x = y + z;&amp;lt;/code&amp;gt;) trvá cca '''60–150 µs''', tj. řádově 10 000 jednoduchých příkazů za sekundu. Hlavní smyčka se 100 příkazy tak trvá cca 10 ms na jeden průchod.&lt;br /&gt;
* Samotný výpočet je zanedbatelný: &amp;lt;code&amp;gt;+ - * / %&amp;lt;/code&amp;gt;, 64bitová i float aritmetika trvají stejně. O rychlosti rozhoduje počet příkazů a způsob zápisu programu (viz tipy níže).&lt;br /&gt;
* Výsledky měření jsou velmi opakovatelné (±0,1 %). Při nezatížené síti spotřebuje ostatní činnost SDS jen cca 2 % výkonu.&lt;br /&gt;
&lt;br /&gt;
=== Naměřené časy ===&lt;br /&gt;
Platí pro SDS-BIG, BIG2 a všechny varianty (SMALL atd.) odvozené od BIG a BIG2.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zápis !! SDS-BIG 64/128 !! SDS-BIG 512&lt;br /&gt;
|-&lt;br /&gt;
| prázdný cyklus &amp;lt;code&amp;gt;for (i = 0; i &amp;lt; n; i++) { }&amp;lt;/code&amp;gt;, jeden průchod || 109 µs || 31 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;for (i = n; i--; ) { }&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;while (i--) { }&amp;lt;/code&amp;gt;, jeden průchod || 52 / 46 µs || 15 / 13 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x = 5;&amp;lt;/code&amp;gt; (x je lokální proměnná) || cca 60 µs || cca 17 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x = y + z;&amp;lt;/code&amp;gt; || cca 105 µs || cca 31 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x++;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;++x;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;x += 1;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;x = x + 1;&amp;lt;/code&amp;gt; || 57 / 49 / 70 / 102 µs || 17 / 14 / 20 / 30 µs&lt;br /&gt;
|-&lt;br /&gt;
| konstanta: číslo / enum / &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; (definované těsně před použitím) || +0 / +7 / +21 µs || +0 / +2 / +6 µs&lt;br /&gt;
|-&lt;br /&gt;
| konstanta: enum / &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; (definované na začátku velkého programu) || +47 / +62 µs || +15 / +19 µs&lt;br /&gt;
|-&lt;br /&gt;
| globální proměnná, čtení / zápis (deklarovaná na začátku programu), oproti lokální || +32 / +90 µs || +11 / +31 µs&lt;br /&gt;
|-&lt;br /&gt;
| globální proměnná, čtení / zápis (deklarovaná těsně před použitím), oproti lokální || +7 / +13 µs || +2 / +4 µs&lt;br /&gt;
|-&lt;br /&gt;
| makro s parametry, např. &amp;lt;code&amp;gt;SQR(y)&amp;lt;/code&amp;gt; || 870–1600 µs (!) || cca 3550 µs (!)&lt;br /&gt;
|-&lt;br /&gt;
| totéž jako funkce &amp;lt;code&amp;gt;sqr(y)&amp;lt;/code&amp;gt; / rozepsané &amp;lt;code&amp;gt;y * y&amp;lt;/code&amp;gt; || cca 195 / 105 µs || cca 60 / 31 µs&lt;br /&gt;
|-&lt;br /&gt;
| volání prázdné funkce bez parametrů || cca 105 µs || cca 36 µs&lt;br /&gt;
|-&lt;br /&gt;
| každý parametr funkce / každá lokální proměnná ve volané funkci, na každé volání || +35 / +65 µs || +10 / +18 µs&lt;br /&gt;
|-&lt;br /&gt;
| příkaz, který se neprovede (uvnitř nesplněné podmínky &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;) || cca 80 µs || cca 25 µs&lt;br /&gt;
|-&lt;br /&gt;
| volání funkce, které se neprovede (bez ohledu na velikost funkce) || cca 20 µs || cca 6 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; nebo řetězec &amp;lt;code&amp;gt;if – else if&amp;lt;/code&amp;gt;, na každou větev (bez ohledu na to, která platí) || cca 80–100 µs || cca 25–35 µs&lt;br /&gt;
|-&lt;br /&gt;
| tabulka hodnot &amp;lt;code&amp;gt;x = tab[k];&amp;lt;/code&amp;gt; || cca 120 µs || cca 35 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_get_u32()&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;SDS_set_u32()&amp;lt;/code&amp;gt; || cca 155 / 250 µs || cca 48 / 79 µs&lt;br /&gt;
|-&lt;br /&gt;
| 8 vstupů: 8x &amp;lt;code&amp;gt;SDS_get_u32()&amp;lt;/code&amp;gt; / 1x &amp;lt;code&amp;gt;SDS_get_a()&amp;lt;/code&amp;gt; || 1400 / 320 µs || 416 / 98 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcmp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strlen&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atoi&amp;lt;/code&amp;gt;, ... (jedno volání) || 200–340 µs || 60–110 µs&lt;br /&gt;
|-&lt;br /&gt;
| kopie 64 bajtů vlastním cyklem / pomocí &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; || 11–18 ms / 0,34 ms || 3,1–5,2 ms / 0,11 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;printf()&amp;lt;/code&amp;gt; || cca 360 µs + 2,7 µs na znak || cca 110 µs + 1,1 µs na znak&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;putchar()&amp;lt;/code&amp;gt;, na každý znak || cca 375 µs || cca 115 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; || 0,6 ms / N ms + 0,5–0,7 ms || 0,19 ms / N ms + 0,1–0,15 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;echoclear()&amp;lt;/code&amp;gt; || cca 1 ms || cca 0,5 ms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Proměnné a konstanty ===&lt;br /&gt;
&lt;br /&gt;
* '''Nejčastěji používané proměnné funkce (čítače cyklů, mezisoučty) deklarujte jako poslední''' v seznamu deklarací. Proměnná deklarovaná později je rychlejší: čítač cyklu deklarovaný jako první z 27 lokálních proměnných zpomalí každý průchod cyklem o 38 µs, deklarovaný jako poslední nezpomalí nic.&lt;br /&gt;
* '''Konstanty, globální proměnné a enum deklarujte co nejblíže místu použití''', např. těsně před funkcí, která je používá, nebo těsně před &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt; pro hlavní smyčku. Totéž definované na začátku velkého programu je výrazně pomalejší (viz tabulka). Navíc je to i čitelnější: definice je hned u použití.&lt;br /&gt;
* '''Méně globálních položek = rychlejší program.''' Každá další globální proměnná, funkce nebo konstanta mírně zpomalí přístup ke všemu, co je v programu deklarováno před ní, včetně volání funkcí SDS.&lt;br /&gt;
** Související globální proměnné spojte do jedné struktury (&amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt;). Přístup k položce struktury stojí jen cca +14 µs.&lt;br /&gt;
** Nevytvářejte zbytečně mnoho drobných globálních pomocných funkcí.&lt;br /&gt;
* '''Používejte lokální proměnné.''' Na začátku funkce si zkopírujte globální proměnné a nastavení do lokálních proměnných, v cyklu pracujte s lokálními a výsledek zapište do globální proměnné jen jednou na konci.&lt;br /&gt;
* '''Pro pojmenované konstanty používejte &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; místo &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt;.''' &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; je o cca 14 µs pomalejší než enum na stejném místě v programu. &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; použijte jen tam, kde ho FULL-C vyžaduje (velikost pole).&lt;br /&gt;
* '''Nepoužívejte makra s parametry''' (&amp;lt;code&amp;gt;#define SQR(a) ((a)*(a))&amp;lt;/code&amp;gt;) v často prováděném kódu.&lt;br /&gt;
** Stojí 870–1600 µs na každé použití a jejich rychlost se mění s velikostí programu a stavem paměti.&lt;br /&gt;
** Na SDS-BIG 512 jsou dokonce pomalejší než na SDS-BIG 128 (cca 3550 µs).&lt;br /&gt;
** Použijte funkci (cca 195 µs, na SDS-BIG 512 cca 60 µs) nebo výraz rozepište.&lt;br /&gt;
* Nastavení, které uživatel mění, může zůstat na začátku programu jako &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; nebo globální proměnná. Často prováděný kód si ale tyto hodnoty na začátku funkce zkopíruje do lokálních proměnných.&lt;br /&gt;
* '''Nedeklarujte proměnné uvnitř těla cyklu''' (&amp;lt;code&amp;gt;for (...) { int t; ... }&amp;lt;/code&amp;gt;). Funguje to, ale deklarace se provádí při každém průchodu (+25 µs, na SDS-BIG 512 +8 µs). Deklarujte na začátku funkce.&lt;br /&gt;
&lt;br /&gt;
=== Cykly ===&lt;br /&gt;
&lt;br /&gt;
* '''Cyklus směrem dolů je dvakrát rychlejší:''' &amp;lt;code&amp;gt;for (i = n; i--; ) { ... }&amp;lt;/code&amp;gt; trvá 52 µs na průchod, &amp;lt;code&amp;gt;for (i = 0; i &amp;lt; n; i++)&amp;lt;/code&amp;gt; 109 µs. V těle cyklu má i hodnoty n-1 ... 0. &amp;lt;code&amp;gt;while (i--)&amp;lt;/code&amp;gt; je stejně rychlý.&lt;br /&gt;
* &amp;lt;code&amp;gt;while (i &amp;lt; n) { ...; i++; }&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;do { } while ()&amp;lt;/code&amp;gt; nejsou rychlejší než &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;++i&amp;lt;/code&amp;gt; je o něco rychlejší než &amp;lt;code&amp;gt;i++&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i += 1&amp;lt;/code&amp;gt; je pomalejší.&lt;br /&gt;
* '''Nikdy nepoužívejte globální proměnnou jako čítač cyklu''' (+113 µs na každý průchod).&lt;br /&gt;
* Mez cyklu jako číslo nebo lokální proměnná nic nestojí. Jako globální proměnná stojí +29 µs na průchod, jako &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; +56 µs na průchod. Zkopírujte ji předem do lokální proměnné.&lt;br /&gt;
* Nejvíc ušetříte tím, co z cyklu vyjmete: každý příkaz uvnitř cyklu stojí cca 100 µs na každý průchod.&lt;br /&gt;
&lt;br /&gt;
=== Podmínky a kód, který se neprovede ===&lt;br /&gt;
&lt;br /&gt;
* '''I kód, který se neprovede, zabírá čas.''' Příkaz uvnitř nesplněné podmínky stojí cca 80 µs, skoro stejně jako provedený (cca 100 µs).&lt;br /&gt;
* '''Velké, zřídka prováděné bloky přesuňte do samostatné funkce.''' Neprovedené volání funkce stojí jen cca 20 µs, bez ohledu na to, jak je funkce velká.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; čas neušetří.''' Volání funkce trvá úměrně délce celé funkce, ne jen té části, která se provedla. Často volané funkce udržujte krátké.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; i řetězec &amp;lt;code&amp;gt;if – else if&amp;lt;/code&amp;gt; stojí cca 80–100 µs na každou větev''', bez ohledu na to, která větev platí: 2 větve cca 270 µs, 8 větví cca 770–940 µs.&lt;br /&gt;
* '''Kde to jde, použijte tabulku hodnot''' místo dlouhého &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; nebo řetězce &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;x = tab[k];&amp;lt;/code&amp;gt; cca 120 µs). Tabulku naplňte kódem na začátku programu, protože FULL-C nepovoluje inicializaci pole v deklaraci.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; pravou stranu sice neprovede, ale i tak stojí čas.&lt;br /&gt;
* Ternární operátor &amp;lt;code&amp;gt;?:&amp;lt;/code&amp;gt; trvá stejně jako &amp;lt;code&amp;gt;if / else&amp;lt;/code&amp;gt; a vždy vyhodnotí obě strany. '''Používejte ho jen s čísly''': s řetězci (&amp;lt;code&amp;gt;ok ? &amp;quot;OK&amp;quot; : &amp;quot;CHYBA&amp;quot;&amp;lt;/code&amp;gt;) se program zastaví s chybou &amp;quot;first argument to '?' should be a number&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Výrazy a příkazy ===&lt;br /&gt;
&lt;br /&gt;
* Méně příkazů je rychlejší: jeden výraz &amp;lt;code&amp;gt;x = ((y+z)*(y-z))/3;&amp;lt;/code&amp;gt; trvá 233 µs, totéž rozdělené do 4 příkazů 393 µs.&lt;br /&gt;
* Používejte zkrácené zápisy: &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; 57 µs, &amp;lt;code&amp;gt;x += 1&amp;lt;/code&amp;gt; 70 µs, &amp;lt;code&amp;gt;x = x + 1&amp;lt;/code&amp;gt; 102 µs.&lt;br /&gt;
* Bitový posun a násobení / dělení trvají stejně, &amp;lt;code&amp;gt;* 8&amp;lt;/code&amp;gt; není třeba nahrazovat zápisem &amp;lt;code&amp;gt;&amp;lt;&amp;lt; 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Datové typy ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;int64_t&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; nejsou pomalejší než &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, používejte je bez obav.&lt;br /&gt;
* &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;short&amp;lt;/code&amp;gt; nejsou rychlejší než &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;ftoi()&amp;lt;/code&amp;gt; je pomalejší než přetypování &amp;lt;code&amp;gt;(int)&amp;lt;/code&amp;gt; (199 µs proti 146 µs).&lt;br /&gt;
&lt;br /&gt;
=== Funkce ===&lt;br /&gt;
&lt;br /&gt;
* '''Funkce jsou dost rychlé na to, abyste mohli psát přehledný kód:''' volání stojí cca 100 µs, tedy zhruba jako jeden příkaz. Rozdělte program do funkcí podle úkolů.&lt;br /&gt;
* Každý parametr prodlouží volání o cca 35 µs, každá lokální proměnná deklarovaná ve volané funkci o cca 65 µs, každá další úroveň vnoření volání o cca 90 µs.&lt;br /&gt;
* Malé, často volané funkce by měly pracovat jen se svými parametry, bez vlastních lokálních proměnných.&lt;br /&gt;
* Pro předání většího množství dat předejte ukazatel na strukturu místo mnoha parametrů.&lt;br /&gt;
* Vyhněte se řetězcům drobných obalových funkcí a rekurzi (stojí čas i místo v zásobníku).&lt;br /&gt;
* Velikost zásobníku (STACK) nastavená ve FULLC.exe musí pokrýt nejhlubší vnoření volání.&lt;br /&gt;
&lt;br /&gt;
=== Řetězce a paměť ===&lt;br /&gt;
&lt;br /&gt;
* '''Vždy používejte knihovní funkce''' (&amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;memset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strlen&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcmp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atoi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strtoul&amp;lt;/code&amp;gt;, ...). Jedno volání stojí 200–340 µs bez ohledu na délku dat. Totéž vlastním cyklem je 20–50x pomalejší: kopie 64 bajtů v cyklu trvá 11–18 ms.&lt;br /&gt;
* &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt; včetně formátu &amp;lt;code&amp;gt;%0.2f&amp;lt;/code&amp;gt; funguje a stojí cca 260–340 µs.&lt;br /&gt;
* '''Nepoužívejte &amp;lt;code&amp;gt;malloc&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;free&amp;lt;/code&amp;gt; v cyklech.''' Fragmentace haldy (heap) zpomaluje program a může způsobit selhání síťových funkcí. Paměť alokujte jednou na začátku programu, nebo použijte pevná pole. Nechte dostatek volné haldy pro síťové funkce.&lt;br /&gt;
&lt;br /&gt;
=== Funkce SDS (set a get) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_get_*()&amp;lt;/code&amp;gt; stojí cca 155 µs, &amp;lt;code&amp;gt;SDS_set_u32()&amp;lt;/code&amp;gt; cca 250 µs.&lt;br /&gt;
* '''Kde to tabulka indexů umožňuje (označení &amp;quot;(a)&amp;quot;), čtěte bloky pomocí &amp;lt;code&amp;gt;SDS_get_a()&amp;lt;/code&amp;gt;''': 8 vstupů jedním voláním za 320 µs místo 1400 µs. Pro optovstupy jen na firmware, kde je opravena známá chyba 5 (viz níže).&lt;br /&gt;
* Hodnotu přečtěte jednou za průchod do lokální proměnné a dál používejte tu.&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_get_a()&amp;lt;/code&amp;gt; vyplní jen tolik položek, kolik jich daný hardware má. Požadujete-li víc, funkce nevyplní nic a nehlásí chybu. Proto vždy žádejte jen skutečný počet položek. Např. SDS-BIG 512 (BIG2): 9 optovstupů, 6 relé, 8 A/D vstupů, 9 S0 vstupů.&lt;br /&gt;
&lt;br /&gt;
=== Konzole (printf) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;printf()&amp;lt;/code&amp;gt; stojí cca 360 µs + 2,7 µs na znak. &amp;lt;code&amp;gt;putchar()&amp;lt;/code&amp;gt; stojí cca 375 µs '''na každý znak''', proto nikdy netiskněte po znacích.&lt;br /&gt;
* Celý řádek si připravte pomocí &amp;lt;code&amp;gt;snprintf()&amp;lt;/code&amp;gt; a vytiskněte ho jedním voláním.&lt;br /&gt;
* Plná konzole tisk nezablokuje ani nezpomalí, ale její kapacita je omezená (BIG: pod cca 14 kB výstupu). Tiskněte stručně.&lt;br /&gt;
* Konzole (echo.htm) je HTML stránka: znak &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, za kterým následuje písmeno nebo číslice, se bere jako HTML značka a část textu se nezobrazí. Ve výpisech se znaku &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt; vyhněte.&lt;br /&gt;
&lt;br /&gt;
=== wait() a měření času ===&lt;br /&gt;
&lt;br /&gt;
* '''SDS-BIG 64/128:''' &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; trvá N ms + cca 0,5–0,7 ms, &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; 0,6 ms. Při silném zatížení sítě může &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; trvat až o cca 1,7 ms déle.&lt;br /&gt;
* '''SDS-BIG 512:''' &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; trvá N ms + cca 0,1–0,15 ms, &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; 0,19 ms.&lt;br /&gt;
* &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; nepoužívejte jen pro &amp;quot;uvolnění&amp;quot; procesoru.&lt;br /&gt;
* Pro měření času použijte index 45 (uptime v ms).&lt;br /&gt;
* Pro přesná měření lze použít index 137 (čítač cyklů CPU). Na SDS-BIG 64/128 má 168 kroků na 1 µs a přeteče cca po 25 s, na SDS-BIG 512 má 480 kroků na 1 µs a přeteče cca po 9 s.&lt;br /&gt;
&lt;br /&gt;
=== Sériová linka (UART) ===&lt;br /&gt;
&lt;br /&gt;
Měřeno na COM6 s propojeným TX a RX, při rychlostech 9600–460800 Bd. Ve všech testech, i při silném zatížení sítě, proběhl přenos bez jediné chyby. RS485 na COM1 nebyla měřena.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !! SDS-BIG 64/128 !! SDS-BIG 512&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_serial_writeCH()&amp;lt;/code&amp;gt;, na každý bajt || cca 0,5 ms || cca 0,16 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt;, jedno volání || cca 0,85 ms + 1,6 µs na bajt || cca 0,37 ms + 0,6 µs na bajt&lt;br /&gt;
|-&lt;br /&gt;
| vysílací buffer (&amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt; se vrací ihned) || cca 600 B || nejméně 1024 B&lt;br /&gt;
|-&lt;br /&gt;
| přijímací buffer || nejméně 1024 B || nejméně 1024 B&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_serial_read()&amp;lt;/code&amp;gt;, když žádná data nečekají || cca 0,35 ms || cca 0,11 ms&lt;br /&gt;
|-&lt;br /&gt;
| nejkratší dotaz – odpověď (zápis až přečtení), kromě doby přenosu po lince || cca 4 ms (pod zátěží sítě až 6 ms) || cca 1,2 ms (pod zátěží sítě až 2,6 ms)&lt;br /&gt;
|-&lt;br /&gt;
| data lze přečíst po příchodu posledního bajtu za || cca 2,5 ms || cca 0,7–0,8 ms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* '''Data odesílejte jedním voláním &amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt;''', nikdy po znacích pomocí &amp;lt;code&amp;gt;SDS_serial_writeCH()&amp;lt;/code&amp;gt; v cyklu: 64 bajtů po znacích trvá 33–40 ms na SDS-BIG 128 a 10 ms na SDS-BIG 512, při jakékoliv rychlosti linky.&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt; se vrací ihned, aniž čeká na odvysílání, pokud se data vejdou do vysílacího bufferu. Při větším objemu čeká, dokud se zbytek do bufferu nevejde: na SDS-BIG 128 čekalo 1024 B při 115200 Bd 34 ms.&lt;br /&gt;
* Přijímací buffer pojme nejméně 1024 B, takže program nemusí číst nepřetržitě.&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_serial_read()&amp;lt;/code&amp;gt; nevolejte v rychlé smyčce, protože stojí čas i bez dat. Stačí jednou za průchod hlavní smyčkou nebo po &amp;lt;code&amp;gt;wait()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Přijatá data jsou programu k dispozici se zpožděním (viz tabulka). U krátkých zpráv při vysokých rychlostech toto pevné zpoždění převažuje, takže vyšší rychlost linky pomůže hlavně u velkých bloků dat.&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
&lt;br /&gt;
* '''Nevolejte další funkci &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt;, dokud předchozí není dokončena''': u publish, subscribe a unsubscribe sledujte &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt;, u connect a disconnect &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt;. Ve FW 0x0019080B takové volání poruší stav spojení (viz Známé chyby níže).&lt;br /&gt;
* '''Stav spojení &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; kontrolujte při každém průchodu hlavní smyčkou''' a v případě potřeby spojení obnovte postupem uvedeným v části Známé chyby. Po každém novém připojení je potřeba znovu provést subscribe, protože se tabulka přihlášení maže.&lt;br /&gt;
* Po normálním &amp;lt;code&amp;gt;mqtt_disconnect()&amp;lt;/code&amp;gt; skončí &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; na hodnotě −2, ne 0. Považujte 0 i −2 za &amp;quot;odpojeno&amp;quot;.&lt;br /&gt;
* Kontrola stavu v čekací smyčce stojí čas (cca 0,3 ms na SDS-BIG 128). Do takové smyčky dejte &amp;lt;code&amp;gt;wait(10)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! !! SDS-BIG 128, FW starší než 10.2026 !! SDS-BIG 128, FW od 31.10.2026 včetně !! SDS-BIG 512, FW od 31.10.2026 včetně&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; || cca 0,2–0,45 s || cca 0,45 s || cca 2 ms&lt;br /&gt;
|-&lt;br /&gt;
| publish (do potvrzení brokerem) || cca 0,3–0,65 s (průměr 0,5 s) || cca 3–6 ms || cca 0,9 ms&lt;br /&gt;
|-&lt;br /&gt;
| nejvyšší počet publish za sekundu || cca 2 || cca 250 || cca 1000&lt;br /&gt;
|-&lt;br /&gt;
| zpráva přes broker a zpět || cca 0,5 s || cca 6 ms || cca 1,7 ms&lt;br /&gt;
|-&lt;br /&gt;
| subscribe / unsubscribe / disconnect || cca 0,3–0,65 s || cca 3–4 ms || cca 1 ms&lt;br /&gt;
|-&lt;br /&gt;
| při silném zatížení sítě || beze změny (cca 0,5 s) || většina publish 7–15 ms, některé až cca 1,5 s || publish cca 1,3–1,9 ms, výjimečně až cca 50 ms, cca 600 zpráv za sekundu&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Pro FW starší než 10/2026: délka operace nezávisí na velikosti dat, a protože každá operace trvá cca 0,5 s:&lt;br /&gt;
** na dokončení publish v hlavní smyčce nečekejte. Zavolejte &amp;lt;code&amp;gt;mqtt_publish()&amp;lt;/code&amp;gt;, pokračujte v jiné práci a &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt; zkontrolujte při dalším průchodu;&lt;br /&gt;
** '''posílejte více hodnot v jedné zprávě''' (např. JSON, celkem do cca 1465 znaků včetně názvu položky): publish s 1024 B trvá stejně dlouho jako s 8 B.&lt;br /&gt;
* '''Firmware od 31.10.2026 včetně:''' čekat na dokončení publish lze, jedna operace trvá jednotky ms. Vždy ale používejte časový limit alespoň 3–5 s, protože při zatížení sítě může operace výjimečně trvat i cca 1,5 s.&lt;br /&gt;
&lt;br /&gt;
==== Známé chyby firmware (MQTT) ====&lt;br /&gt;
&lt;br /&gt;
'''1. Volání &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt; dříve, než skončila předchozí operace, poruší stav spojení''' (FW 0x0019080B, ve FW od ''&amp;lt;doplnit&amp;gt;'' opraveno)&lt;br /&gt;
* Zavoláte-li např. &amp;lt;code&amp;gt;mqtt_publish()&amp;lt;/code&amp;gt; ve chvíli, kdy předchozí publish ještě probíhá, zapíše se chybový kód −3 do &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; (místo do &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; pak zůstane trvale na −3, přestože spojení ve skutečnosti funguje, a program se tak jeví jako odpojený.&lt;br /&gt;
* Následné přímé zavolání &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; selže s výsledkem −7 (při CONNACK 0).&lt;br /&gt;
* Ochrana: nikdy nevolejte další funkci &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt; před dokončením předchozí (viz MQTT výše).&lt;br /&gt;
* Obnova spojení, která funguje ve všech verzích firmware:&lt;br /&gt;
*# pokud &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; není 4, 0 ani −2, zavolejte &amp;lt;code&amp;gt;mqtt_disconnect()&amp;lt;/code&amp;gt;;&lt;br /&gt;
*# počkejte, až bude &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; rovno 0 nebo −2 (cca 0,3 s);&lt;br /&gt;
*# počkejte dalších 500 ms;&lt;br /&gt;
*# zavolejte &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; a počkejte na hodnotu 4;&lt;br /&gt;
*# znovu proveďte subscribe všech položek.&lt;br /&gt;
&lt;br /&gt;
'''2. Po &amp;lt;code&amp;gt;mqtt_disconnect()&amp;lt;/code&amp;gt; skončí &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; na −2 místo 0''' (všechny testované verze firmware)&lt;br /&gt;
* Hodnota −2 v tomto případě neznamená chybu: považujte 0 i −2 za &amp;quot;odpojeno&amp;quot;. Příklad, který po odpojení čeká pomocí &amp;lt;code&amp;gt;if (sys[2200] &amp;lt;= 0) goto error;&amp;lt;/code&amp;gt;, by normální odpojení vyhodnotil jako chybu.&lt;br /&gt;
&lt;br /&gt;
=== Zatížení sítě a rezerva výkonu ===&lt;br /&gt;
&lt;br /&gt;
* '''SDS-BIG 64/128:'''&lt;br /&gt;
** Při nezatížené síti spotřebuje ostatní činnost SDS cca 2 % výkonu a program není nikdy přerušen na déle než cca 0,6 ms.&lt;br /&gt;
** Při silném zatížení (ping a HTTP dotazy z jednoho PC) spotřebuje 15–19 % výkonu. Program pak běží o cca 18–20 % pomaleji a je často přerušován, ale nikdy na déle než cca 1,5 ms.&lt;br /&gt;
* '''SDS-BIG 512:'''&lt;br /&gt;
** Při nezatížené síti spotřebuje ostatní činnost SDS cca 1 % výkonu a program není přerušen na déle než cca 0,03 ms.&lt;br /&gt;
** Při silném zatížení (ping a HTTP dotazy z jednoho PC) spotřebuje ostatní činnost cca 45 % výkonu a program běží cca 1,8x pomaleji. I tak je ale stále cca 2x rychlejší než SDS-BIG 128 bez zátěže.&lt;br /&gt;
** Občas, pravděpodobně při otevření stránky webového rozhraní přes HTTPS, se objeví jednotlivá pauza cca 10–25 ms. Programy s krátkými časovými limity (např. sériové protokoly) musí takovou pauzu snést.&lt;br /&gt;
* '''U zařízení se silným síťovým provozem počítejte s rezervou výkonu''': cca 25 % na SDS-BIG 64/128, cca 50 % na SDS-BIG 512. Poměry mezi časy i všechny tipy výše platí i pod zátěží.&lt;br /&gt;
&lt;br /&gt;
=== Sběrnice 1-Wire ===&lt;br /&gt;
&lt;br /&gt;
* '''Pokud sběrnici 1-Wire nepoužíváte, zavolejte hned na začátku programu &amp;lt;code&amp;gt;SDS_disable_onewire()&amp;lt;/code&amp;gt;.'''&lt;br /&gt;
* Na SDS-BIG 512 s firmwarem starším než 31.10.2026 může odpojené čidlo 1-Wire program extrémně zpomalit (určitě si aktualizujte firmware!).&lt;br /&gt;
* Stav 1-Wire masteru lze zkontrolovat čtením indexu 2998: 1 = detekce, 2 nebo 4 = chyba, 8 = v provozu, 16 = vypnuto.&lt;br /&gt;
&lt;br /&gt;
=== Známé chyby ve starším firmware (starší než 31.10.2026) ===&lt;br /&gt;
&lt;br /&gt;
'''1. Odpojené čidlo 1-Wire zpomalí program cca 125x''' (opraveno ve FW od 31.10.2026 včetně)&lt;br /&gt;
* Pokud je v SDS evidováno dříve nalezené čidlo 1-Wire, které je fyzicky odpojené, zpomalí se FULL-C program cca 125x. Zpomalení začne, jakmile se 1-Wire master rozběhne (cca 7 s po startu SDS, index 2998 = 8), a program se už nezotaví.&lt;br /&gt;
** Program pak dostane méně než 1 % výkonu: smyčka, která běžně trvá 54 µs na průchod, trvá 6,6–9,3 ms.&lt;br /&gt;
* Ochrana: pokud 1-Wire nepoužíváte, zavolejte na začátku programu &amp;lt;code&amp;gt;SDS_disable_onewire()&amp;lt;/code&amp;gt;. S ním běží program trvale plnou rychlostí.&lt;br /&gt;
* Ochrana pro starší firmware, pokud 1-Wire používáte: zajistěte, aby všechna evidovaná čidla byla připojena, nebo aktualizujte firmware.&lt;br /&gt;
&lt;br /&gt;
'''2. Blokové čtení optovstupů &amp;lt;code&amp;gt;SDS_get_a(151, ...)&amp;lt;/code&amp;gt; vrací chybné hodnoty''' (opraveno ve FW od 31.10.2026 včetně)&lt;br /&gt;
* SDS-BIG 512: volání může způsobit restart celého SDS.&lt;br /&gt;
* ''&amp;lt;doplnit po ověření na SDS-BIG 64/128: vrací nesmyslné hodnoty místo stavu vstupů&amp;gt;''&lt;br /&gt;
* Ve FW od ''&amp;lt;doplnit&amp;gt;'' opraveno: blokové čtení vrací stejné hodnoty jako &amp;lt;code&amp;gt;SDS_get_u32(151 + n)&amp;lt;/code&amp;gt; (0 = aktivní, 1 = neaktivní).&lt;br /&gt;
* Ochrana pro starší firmware: čtěte optovstupy jednotlivě pomocí &amp;lt;code&amp;gt;SDS_get_u32(151 + n)&amp;lt;/code&amp;gt;, nebo aktualizujte firmware.&lt;br /&gt;
&lt;br /&gt;
=== Co rychlost neovlivní (pište přehledně) ===&lt;br /&gt;
&lt;br /&gt;
* Komentáře, i uvnitř cyklů a v neprováděných blocích.&lt;br /&gt;
* Dlouhé, výstižné názvy proměnných.&lt;br /&gt;
* Závorky navíc.&lt;br /&gt;
* Rozdělení programu do funkcí podle úkolů (cca jeden příkaz na každé volání).&lt;br /&gt;
* 64bitové a float typy.&lt;br /&gt;
* Odsazení, prázdné řádky, formátování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Příklad ===&lt;br /&gt;
&lt;br /&gt;
Pomalý, ale běžný zápis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OPTO_FIRST  151&lt;br /&gt;
#define NUM_INPUTS  8&lt;br /&gt;
#define WEIGHT(a)   ((a)*(a))&lt;br /&gt;
&lt;br /&gt;
unsigned int g_weight;&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int i;&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    g_weight = 0;&lt;br /&gt;
    for (i = 0; i &amp;lt; NUM_INPUTS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      if (SDS_get_u32(OPTO_FIRST + i) == 0) g_weight = g_weight + WEIGHT(i + 1);&lt;br /&gt;
    }&lt;br /&gt;
    wait(100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Totéž zapsané podle tipů výše (stejně čitelné):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define NUM_INPUTS  8                              // velikost pole: zde je #define nutny&lt;br /&gt;
&lt;br /&gt;
unsigned int g_weight;                             // vysledek pro zbytek programu&lt;br /&gt;
&lt;br /&gt;
enum inputs { OPTO_FIRST = 151 };                  // definovano tesne pred pouzitim&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int opto[NUM_INPUTS];&lt;br /&gt;
  unsigned int w;&lt;br /&gt;
  unsigned int i;                                  // nejpouzivanejsi promenna deklarovana posledni&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    SDS_get_a(OPTO_FIRST, (void *)opto, NUM_INPUTS * 4);   // 1 volani misto 8&lt;br /&gt;
    w = 0;&lt;br /&gt;
    for (i = NUM_INPUTS; i--; )                    // cyklus dolu: i = 7 .. 0&lt;br /&gt;
    {&lt;br /&gt;
      if (opto[i] == 0) w += (i + 1) * (i + 1);   // bez makra s parametry&lt;br /&gt;
    }&lt;br /&gt;
    g_weight = w;                                  // globalni promenna zapsana jen jednou&lt;br /&gt;
    wait(100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Změny oproti první verzi:&lt;br /&gt;
* jedno blokové čtení místo 8 volání;&lt;br /&gt;
* žádné makro s parametry;&lt;br /&gt;
* mezisoučet v lokální proměnné místo globální;&lt;br /&gt;
* cyklus směrem dolů;&lt;br /&gt;
* konstanta definovaná těsně před použitím;&lt;br /&gt;
* čítač cyklu deklarovaný jako poslední.&lt;br /&gt;
&lt;br /&gt;
Podle naměřených časů trvá jeden průchod první verze na SDS-BIG 128 cca 8–15 ms (podle počtu aktivních vstupů), druhé verze cca 2–3 ms. Na SDS-BIG 512 je to cca 3,5x méně u obou verzí; u první verze je rozdíl ještě větší, protože makra s parametry jsou na SDS-BIG 512 pomalejší.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_tips_and_tricks&amp;diff=988</id>
		<title>FULL-C: tips and tricks</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_tips_and_tricks&amp;diff=988"/>
		<updated>2026-10-31T11:01:42Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Důležité poznámky k práci s FULL-C ==&lt;br /&gt;
&lt;br /&gt;
Zde jsou neseřazené tipy a triky, tak, vytvořené tak, jak jak postupem času dostáváme různé dotazy od uživatelů.&lt;br /&gt;
&lt;br /&gt;
Současně (na konci stránky) naleznete kritické tipy a postupy, jak efektivně zapsat váš program tak, aby byl co nejvíce rychlý. Je důležité si to přečíst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Dbejte na to''', aby verze FC byla '''stejná''' jak pro překladač (FULLC.EXE) tak i pro vaše SDS. Pokud má vaše SDS starší firmware (a tedy starší verzi FC, například 0x06), zatímco překladač je novější (například FULLC.exe s verzí FC 0x08), tak SDS odmítne novější FC program spustit. Toto se řeší velmi snadno, a to aktualizací firmware ve vašem SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* I když proběhne překlad ve FULLC.EXE v pořádku, '''stále může váš FULL-C program obsahovat chyby''' - to se dozvíte '''teprve''' z konzole (web zařízení SDS: typicky 192.168.1.250/echo.htm), proto ji '''vždy průběžně kontrolujte''' !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pozor na ''signed'' a ''unsigned''  typy a jejich používání. FULL-C se chová dle standardu C, a detaily standardu vás mohou zmást.&lt;br /&gt;
&lt;br /&gt;
Např. '''char''' je signed ! (pokud jej explicitně nedefinujeme jako '''unsigned char''').&lt;br /&gt;
&lt;br /&gt;
Příklad - chceme vypsat HEX kód pro jednobajtový znak.&lt;br /&gt;
&lt;br /&gt;
Toto ale neudělá to co &amp;quot;chceme&amp;quot;: vypíše to '''FFFFFFDB''' - přesně podle specifikace jazyka C, kdy dojde nejprve k převodu na int32 &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char ch = 0xDB;&lt;br /&gt;
printf(&amp;quot;%x&amp;quot;, ch);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad správného zápisu: vypíše to '''DB''' tak jak chceme, a to proto že jsme správně uvedli že to chceme zpracovat jako '''unsigned char'''.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char ch = 0xDB;&lt;br /&gt;
printf(&amp;quot;%x&amp;quot;, (unsigned char)ch);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Další příklad velkého problému je následující kus programu pro výpis obsahu textového pole jako HEX znaků:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
char pole[32];&lt;br /&gt;
char * ch;&lt;br /&gt;
&lt;br /&gt;
ch = (char *)&amp;amp;pole;&lt;br /&gt;
for (i = 0; i &amp;lt; 32; i++)&lt;br /&gt;
{&lt;br /&gt;
  printf(&amp;quot;%02x&amp;quot;, *ch++); // &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; WARNING !!!! *ch is signed char !!!&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opět, správné řešení je ve správném přetypování: &amp;lt;pre&amp;gt; printf(&amp;quot;%02x&amp;quot;, (unsigned char)*ch++); &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Před provedením jakékoliv síťové komunikace ve FULL-C (např. odeslání emailu), '''vždy zkontrolujte''' stav, a to pomocí: ''status = SDS_get_u(27);'' (když je ''status==0'' tak SDS nemá připojení - nezačínejte komunikaci, čekejte a testuje stav).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pole pro uchování textů můžete přímo deklarovat, např. na zásobníku (stack) jako ''char text[128];'' - nebo na haldě (heap), pro což využijte ''text = (char *)malloc(128);'' a ''free(text);text=0;'' funkce. Výběr z těchto možností je na vás (malé pole / malé texty jdou dát na zásobník, velké už patří do haldy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Využijte 64-bitových proměnných (int64_t nebo uint64_t) tam, kde vám 32 bitů nestačí. Například pro počítadla, nebo výpočty s velkými čísly (nebo jen stačí že by měl být velký mezivýsledek a při použití 32-bit čísel by jste o něj &amp;quot;přišli&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pro zjištění, jaký největší blok paměti (heap) lze v danou chvíli alokovat pomocí ''malloc()'' funkce, využijte funkci ''SDS_heap_stats()'' . Ačkoliv může být celková hodnota volné heap pamět velká, toto celkové volné místo je vždy roztroušeno na různé malé oddělené bloky (fragmentace) - a vždy lze alokovat jen po jednom bloku, a jeho největší možná velikost je zjistitelná právě ze zmíněné funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Vždy když uvolníte paměť, nezapomeňte ihned ručně vynulovat daný uvolněný ukazatel. Zabrání to chybám ve vašem programu. Příklad: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definice ukazatale&lt;br /&gt;
void *ptr; &lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
// alokujeme si pamet, pro priklad 32 bajtu&lt;br /&gt;
ptr = malloc(32);&lt;br /&gt;
&lt;br /&gt;
// pamet na kterou ukazuje ptr lze ted pouzivat (pozor at nepristupujete mimo alokovany rozsah)&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
// uz pamet nepotrebujeme, tak ji uvolnime:&lt;br /&gt;
free(ptr); &lt;br /&gt;
ptr = 0;   // vzdy ihned za zavolanim free() nastavte ptr do nuly !!!&lt;br /&gt;
&lt;br /&gt;
... &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Funkce ''printf()'' a ''puts()'' a ''putchar()'' zapisují do konzole (web zařízení SDS, typicky: 192.168.1.250/echo.htm), čehož lze využít pro ladění programu, nebo pro dálkový monitoring zařízení. Nicméně pro průběžné spolehlivé získávání hodnot a údajů z SDS nebo vašeho programu, je vhodně použít systém sdílených proměnných, nebo SNMP.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* FULL-C používá právě přesně 32-bitů pro datový typ ''float''. Počítejte s touto informací pro správné pochopení přesnosti práce s desetinnými čísly (omezené rozlišení dané 32bity). Pro většinu aplikací toto nepředstavuje problém, pokud ale chcete provádět složité výpočty s desetinnými čísly, je potřeba znát tato omezení. Přesné vysvětlení viz např. [https://en.wikipedia.org/wiki/Single-precision_floating-point_format|&amp;quot;Single-precision floating-point format&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Funkce ''printf()'' a ''sprintf()'' umí zpracovat ''float'' proměnné (%f), ale neumí je uživatelský formátovat (neumí např. %0.2f - ale umí jen základní %f, to znamená že vypíše úplně celou délku čísla se všemi pozicemi za tečkou, což může být i dost dlouhý text). Toto je aktualizováno v nové verzi FULL-C (tam už to jde).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Nepoužívejte prázdný string''' (tj. &amp;quot;&amp;quot;).&amp;lt;br&amp;gt;&lt;br /&gt;
Tři příklady '''zakázaného kódu''' pro FULL-C:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// do not do any of the following:&lt;br /&gt;
//&lt;br /&gt;
char text1[10] = &amp;quot;&amp;quot;;  // spatne !&lt;br /&gt;
//&lt;br /&gt;
strncpy(text2,&amp;quot;&amp;quot;,10); // spatne !&lt;br /&gt;
//&lt;br /&gt;
sprintf(text2,&amp;quot;&amp;quot;);    // spatne !&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Před použitím některé z funkcí, které přistupují k serveru na Internetu, je vhodné provést volání ''dns_resolv()'' pro zjištění aktuální IP adresy (IP0.IP1.IP2.IP3) daného serveru, vždy před zavoláním konkrétní funkce (např. ''http_get()'' ). Určitě není vhodné používat přímo natvrdo zapsané číselné adresy (ty se mohou změnit např. při přesunu serveru).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud některá z FULL-C funkcí selže (např. ''smtp_send()'' ohlásí přes ''smtp_send_status()'' chybu), tak je vhodné mít FULL-C program napsán tak, aby chvíli počkal, a pak to celé zkusil znovu. Při více selháních je pak potřeba provést další akci (oznámit chybu, zjistit stav připojení k síti, atd.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Přes FULL-C lze '''pouze číst''' kalibrační konstanty pro analogové vstupy. Pokud je chcete hromadně nastavit, použijte s výhodou 192.168.1.250/cgi_cfg_adc?xxxx volání (uživatel musí být přihlášen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Každý FULL-C program může nastavit tzv. &amp;quot;brand&amp;quot; (uživatelskou značku / popisek) pro zařízení SDS, na kterém je spuštěn. Protože SDS je často dodáváno v rámci OEM pro další zástavbu do většího celku, může si finální systémový integrátor nastavit své doplňující texty (název firmy, odkazy na web, telefonní čísla na podporu, doplňující texty, informace o sériovém čísle atd.), které jsou pak zobrazeny v rámci stránek webové administrace zařízení SDS (login, welcome, atd.). Toto nastavení provádí FULL-C program zavolání ''SDS_set_a()'' s příslušným indexem a textem. Typicke se takový FULL-C kód dává na úplný začátek programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* FULL-C program lze nachystat a vydat tak, že je &amp;quot;zablokován&amp;quot; tak aby fungoval pouze na jediném konkrétním vybraném SDS zařízení. Každé SDS má své unikátní sériové číslo (viz tabulka indexů pro ''SDSget_u()'' ), a FULL-C program může tuto hodnotu porovnat (s tím, co do FULL-C programu vloží autor programu). Toto uživatelské zablokování programu může předejít chybám, kdy by se např. nevhodný program nahrál omylem na jiný hardware. Pokud vydáváte FULL-C program prostřednictvím .FC souboru, kam zvolíte nepřiložit zdrojový .C kód, pak máte neprůstřelnou možnost zamezit použití programu na jakémkoliv jiném SDS než jaké sami určíte (zdrojový kód nebude cílovému uživateli k dispozici, a navíc váš program otestuje sériové číslo daného SDS na shodu). Samozřejmě to znamená, že musíte zmíněné sériové číslo daného SDS zjistit předem, než vydáte program, aby jste to číslo mohli do programu vložit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud ve svém programu využíváte sériovou sběrnici RS485, dbejte na správné zapojení sběrnice. Naše fórum je plné příkladů, kdy autor programu řešil problém s RS485 a nakonec se ukázalo, že sběrnice byla špatně zapojená (přehozené A/B dráty, nezakončená rezistory, neuvedená do známého klidového stavu přes rezistory atd.). Pro ověření programu je vždy dobré vzít pasivní &amp;quot;odposlech&amp;quot; sběrnice (osciloskop, osobní počítač) a zkontrolovat &amp;quot;překryv&amp;quot; (kdy více zařízení vysílá najednou, což je na RS485 kolize a poškození dat). Právě &amp;quot;překryv&amp;quot; je nejčastějším problémem způsobující poškození komunikace, hned po špatném nastavení komunikační rychlosti v programu. Vždy zkontrolujte svůj hardware, tj. celou sběrnici, je-li správně impedančně zakončena (nejvzdálenější konce) a zda-li jste správně zapojili oba klidové rezistory (pozor, na SDS-BIG tyto nejsou a musí se ručně doplnit &amp;quot;zvenku&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pokud chcete přes sdílené proměnné (sv) přenášet čísla datového typu ''float'' (desetinná čísla), a pak je chcete například zobrazit na UserWEB webové stránce (a nebo přenést na server atd.), použijte následující trik. Vytiskněte obsah float čísla do Txx[] proměnné, pomocí sprintf(), nikoiv však s využitím %f - ale právě přes následující kód:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si sdilenou promennou T00&lt;br /&gt;
char T00[32];&lt;br /&gt;
&lt;br /&gt;
void FloatToT00(void)&lt;br /&gt;
{&lt;br /&gt;
 // vstupni float&lt;br /&gt;
 float xf;&lt;br /&gt;
&lt;br /&gt;
 // pomocna promenna (presne 4 bajty, protoze &amp;quot;float&amp;quot; je ve FULL-C reprezentovan jako 32-bit)&lt;br /&gt;
 unsigned int xw;&lt;br /&gt;
&lt;br /&gt;
 // zapiseme vzorovou hodnotu&lt;br /&gt;
 xf = 12.34;&lt;br /&gt;
&lt;br /&gt;
 // ziskej 32bit obsah xf (= cteni 4 bajtu dat ktere reprezentuji dany float)&lt;br /&gt;
 xw = *(unsigned int *)&amp;amp;xf;&lt;br /&gt;
 // a zapis do T00, zarovnej vzdy na osm mist (at se to da pozdeji spravne zpracovat - prevest zpet na float)&lt;br /&gt;
 sprintf((char *)T00, &amp;quot;%08X&amp;quot;, xw);&lt;br /&gt;
&lt;br /&gt;
 // T00[] ted obsahuje &amp;quot;414570A4&amp;quot; (coz je hex reprezentace puvodni float hodnoty 12.34)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pokud se po spuštění tohoto kódu pak podíváte např. na 192.168.1.250/shared.txt , tak tam uvidíte toto: &amp;quot;T00|414570A4|&amp;quot; (krom jiného textu). S tím už pak v JavaScriptu není problém pracovat (převést zpět na float a korektně zobrazit nebo dále zpracovat). Řada přímých příkladu je k dispozici, stačí hledat na Internetu podle klíčových slov &amp;quot;javascript convert hex to float&amp;quot;. &lt;br /&gt;
Toto se řeší právě z důvodu že FULL-C printf funkce (a další podobné) umí jen %f ale bez dalších parametrů, takže tisknou float čísla na všechny místa za desetinnou tečkou, což je ve většině případů nežádoucí (při zobrazování na webových stránkách a podobně).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Přistupovat ke všem údajům ze sběrnic 1-Wire, ve FULL-C, je samozřejmě možné, je však potřeba vědět jak. Detaily viz stránka [[FULL-C: OneWire]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Pamatujte, že varianta '''SDS-64''' (viz [[SDS BIG|varianty]]) má k diposozi pouze celkem 64kB programové paměti (a SDS-128 má jen 128kB této paměti, a SDS-512 jen 512kB celkové FULL-C paměti) - do které '''se musí vlézt celý''' váš přeložený FULL-C program, a k tomu také celý STACK a všechna potřebná paměť HEAP. Toto omezení není dáno programově, ale právě použitým hardware v SDS, takže jej nelze jednoduše &amp;quot;obejít&amp;quot; - pokud se vám to nevleze do varianty 64 tak musíte použít variantu 128 (nebo 512), to je jediné řešení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Vždy '''správně nastavte velikost''' STACKu - číselnou hodnotu nastavte v okně editoru zdrojového textu FULL-C. Pokud nastavíte hodnotu pro váš program jako moc malou, program nebude fungovat (při volání více funkcí může být pro nedostatek stacku ukončen). Příliš velká hodnota snižuje volnou paměť heap (pokud heap nepoužíváte, nastavte stack na vyšší hodnotu pro klid). Správnou hodnotu zjistíte určitým odhadem (podle velikosti a složitosti programu, podle toho kolik proměnných používáte a kolik parametrů se předává při volání funkcí, a kolik funkcí se v sobě volá). Nastavení je možné nechat automaticky odhadnou překladač, nebo jej můžete ručně zadat (odhad není přesný).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Inicializaci proměnných '''provádějte v kódu, nikoliv při deklaraci'''. Jde o to, že při inicializaci hodnot v proměnné či poli, provedené kódem, se spotřebuje zlomek stack paměti, oproti inicializace přímo při deklaraci. Stack paměti je vždy málo a je potřeba jí šetřit. Je to vlastnost FULL-C.&lt;br /&gt;
&lt;br /&gt;
Příklad inicializace při deklaraci: &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  unsigned int numbers[5] = {0,1,2,3,4}; // toto spotřebuje hodně stacku - TAKHLE TEDY NE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Příklad identické inicializace kódem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// toto řešení je doporučené, nespotřebovává stack&lt;br /&gt;
unsigned int numbers[5];&lt;br /&gt;
number[0] = 0;&lt;br /&gt;
number[1] = 1;&lt;br /&gt;
number[2] = 2;&lt;br /&gt;
number[3] = 3;&lt;br /&gt;
number[4] = 4;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Nebo, příklad odpovídající inicializace kódem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
  // toto řešení je doporučené, nespotřebovává stack&lt;br /&gt;
  unsigned int numbers[5];&lt;br /&gt;
  unsigned int i;&lt;br /&gt;
  for (i = 0; i &amp;lt; 5; i++) { number[0] = i; };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Následující informace je platná pouze pro firmware starší než 10.7.2017&lt;br /&gt;
&lt;br /&gt;
* SDS ukazuje aktuální využití své 64kB programové paměti, na webové stránce v administraci.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HEAP STATS: curalloc=1892, totfree=58632 maxfree=58632, nget=12 nrel=0&lt;br /&gt;
HEAP STATS: bc_locked=1120, stackTop=2984 (of 5000)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jak to dékódovat: první řádek ukazuje celkové využití paměti a počet alokací a uvolnění:&lt;br /&gt;
 curalloc  = celkem alokovaná paměť (heap malloc, a všechny interní FULL-C funkce a interní data v SDS)&lt;br /&gt;
 totfree   = celkem zbývající volná (alokovatelná) heap pamět (součet všech volných heap fragmentů)&lt;br /&gt;
 maxfree   = největší volný heap fragment, který je možné alokovat v jednom kuse&lt;br /&gt;
 nget      = celkový počet alokací (volání malloc/calloc) (včetně vnitřních volání interních FULL-C funkcí v SDS)&lt;br /&gt;
 nrel      = celkový počet uvolnění předchozích alokací (volání free() funkce)&lt;br /&gt;
Druhý řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 bc_locked = kolik bajtů paměti je využito (uzamčeno) pro 'bytecode' vašeho FULL-C (kolik si vzal samotný kód FULL-C programu v paměti)&lt;br /&gt;
 stackTop  = kolik bajtů zásobníku (stacku) je v tento okamžik využito (pokud je to na limitu, víte, že musíte upravit nastavení při překladu)&lt;br /&gt;
 (of X)    = kolik bajtů může nejvíce zásobník (stack) zabrat z celé paměti (nastaveno uživatelem před překladem)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Následující informace je platná pouze pro firmware 10.7.2017 (včetně) a novější (viz také [[SDS BIG|varianty]])&lt;br /&gt;
&lt;br /&gt;
* SDS ukazuje aktuální využití své 64kB nebo 128kB nebo 512kB programové paměti, na webové stránce v administraci.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FC: VER 0x08, PROGMEM 128kB&lt;br /&gt;
MEM STATS:&lt;br /&gt;
- HEAP: used=(492 of 120675), totfree=120164 (biggest=65396), num(get=11,rel=0)&lt;br /&gt;
- STACK: used=(364 of 10004)&lt;br /&gt;
- BC: locked=(264+128+388)&lt;br /&gt;
- SYS: free=280&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jak to dékodovat: první řádek ukazuje informace o SDS:&lt;br /&gt;
 VER        = verze FC&lt;br /&gt;
 PROGMEM    = varianta hardware (64kB nebo 128kB nebo 512kB celkové paměti pro program a data)&lt;br /&gt;
Druhý řádek ukazuje celkové využití paměti a počet alokací a uvolnění:&lt;br /&gt;
 HEAP used  = celkem alokovaná paměť (heap malloc, a všechny interní FULL-C funkce a interní data v SDS)&lt;br /&gt;
 totfree    = celkem zbývající volná (alokovatelná) heap pamět (součet všech volných heap fragmentů)&lt;br /&gt;
 biggest    = největší volný heap fragment, který je možné alokovat v jednom kuse&lt;br /&gt;
 nget       = celkový počet alokací (volání malloc/calloc) (včetně vnitřních volání interních FULL-C funkcí v SDS)&lt;br /&gt;
 nrel       = celkový počet uvolnění předchozích alokací (volání free() funkce)&lt;br /&gt;
Druhý řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 STACK used = kolik bajtů zásobníku (stacku) je v tento okamžik využito (pokud je to na limitu, víte, že musíte upravit nastavení při překladu)&lt;br /&gt;
Třetí řádek se vztahuje na FULL-C program samotný a jeho běh:&lt;br /&gt;
 BC locked  = kolik bajtů paměti je využito (uzamčeno) pro 'bytecode' vašeho FULL-C (kolik si vzal samotný kód FULL-C programu v paměti)&lt;br /&gt;
Čtvrtý řádek nemá pro FULL-C význam:&lt;br /&gt;
 SYS        = interní hodnota&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Jak funguje FULL-C v SDS ==&lt;br /&gt;
&lt;br /&gt;
Zde jsou popsány hlubší technologické detaily popisující princip FULL-C. Zajímat budou zejména ty, kteří pracují na složitých programech.&lt;br /&gt;
&lt;br /&gt;
Program je uživatelem zadán jako '''jeden jediný textový soubor - zdrojový kód v jazyce FULL-C'''. Tento zdrojový kód (text) je zpracován v naší Windows aplikaci (FULLC.exe, k dispozici ke stažení na této WiKi) do formy výsledného souboru, který primárně obsahuje tzv. ''bytecode''. Tento soubor je následně přes síť nahrán do konkrétního zařízení SDS, kde je trvale uložen (až do nahrání jiného souboru) a je zařízením SDS spouštěn.&lt;br /&gt;
&lt;br /&gt;
== Komprese ==&lt;br /&gt;
&lt;br /&gt;
Program je přenášen z FULLC.exe do SDS přes počítačovou síť. Aby se nemuselo přenášet tolik dat, je bytecode komprimován. Typická úspora je 25% původního objemu.&lt;br /&gt;
&lt;br /&gt;
S touto informací je potřeba plánovat při navrhování rozložení paměti - aby se tam vše vešlo. To že komprimovaný program (výstup FULLC.exe) se do paměti SDS na první pohled &amp;quot;vleze&amp;quot;, ještě neznamená, že se program i podaří spustit (stále se může &amp;quot;vlézt&amp;quot;, ale nezbude místo na zásobník nebo haldu - a to je konec).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ZÁKLADNÍ OMEZENÍ''':&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS je k dispozici ve třech základních variantách: varianta &amp;quot;64&amp;quot; má k dispozici 64kB paměti pro celkové potřeby programu, a varianta &amp;quot;128&amp;quot; má k dispozici 2x64kB (tj. 128kB) paměti pro celkové potřeby programu. Varianta &amp;quot;512&amp;quot; nabízí největší dostupnou paměť pro program a data.&lt;br /&gt;
&lt;br /&gt;
Do celé této celkové paměti se musí vlézt nejen surový ''bytecode'' ale i všechny provozní záležitostí (zásobník - stack, proměnné, halda - heap).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;64&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + instrukce programu (bytecode)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + halda (heap)&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-64kB BLOKU)&lt;br /&gt;
&lt;br /&gt;
Další paměť (více než 1x 64kB) už není ve variantě &amp;quot;64&amp;quot; k dispozici - vše se tedy musí vlézt do jednoho 64kB velkého bloku.  Pokud to pro vaše potřeby nestačí, musíte použít variantu s pamětí 128kB nebo 512kB, které jsou popsány dále.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;128&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + první část haldy (heap-1)&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 (START II-64kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + instrukce programu (bytecode)&lt;br /&gt;
               ...&lt;br /&gt;
             + druhá část haldy (heap-2), jen pokud nezabere program celý II-64kB blok&lt;br /&gt;
               ...&lt;br /&gt;
        64kB + konec&lt;br /&gt;
 &lt;br /&gt;
 (KONEC II-64kB BLOKU)&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, varianta &amp;quot;128&amp;quot; nabízí dva bloky po 64kB. Tyto bloky na sebe sice lineárně nenavazují (tj. součtem je to sice 128kB, ale ne v celku), nicméně přináší významnou úlevu předchozímu omezení původní varianty &amp;quot;64&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pro použití varianty &amp;quot;128&amp;quot; je ovšem potřeba mít správný hardware (SDS), tzn. SDS výrobní varianty &amp;quot;64&amp;quot; nelze programově změnit na variantu &amp;quot;128&amp;quot; - to lze jedině použitím vhodného SDS hardware. Samozřejmě program původně určený pro &amp;quot;64&amp;quot; lze na SDS &amp;quot;128&amp;quot; spustit, bez jakýchkoliv omezení (ale naopak, program 128 nelze na 64 spustit, protože varianta 64 nemá dost paměti pro program varianty 128).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skladba paměti - varianta &amp;quot;512&amp;quot;:'''&lt;br /&gt;
&lt;br /&gt;
 (START I-504kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + zásobník (stack)&lt;br /&gt;
               ...&lt;br /&gt;
             + řetězce programu (string blob)&lt;br /&gt;
               ...&lt;br /&gt;
             + nevyužitelná rezerva systému (zhruba 260 bajtů)&lt;br /&gt;
               ...&lt;br /&gt;
             + proměnné programu (variables)&lt;br /&gt;
               ...&lt;br /&gt;
             + první část haldy (heap-1)&lt;br /&gt;
               ...&lt;br /&gt;
       504kB + konec &lt;br /&gt;
 &lt;br /&gt;
 (KONEC I-504kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 (START II-8kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
           0 + druhá část haldy (heap-2)&lt;br /&gt;
               ...&lt;br /&gt;
         8kB + konec&lt;br /&gt;
 &lt;br /&gt;
 (KONEC II-8kB BLOKU)&lt;br /&gt;
 &lt;br /&gt;
 SOUČET: celková dostupná paměť 504+8 = 512kB&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, varianta &amp;quot;512&amp;quot; nabízí dva bloky, jeden 504kB a druhý 8kB. V součtu je k dispozici 512kB paměti, která je (dle rozpisu uvedeného výše) rozdělena na jednotlivé dynamické části - skutečně použité velikosti každé části už pak závisí na obsahu vašeho FULL-C programu a vašem nastavení (vámi určená velikost zásobníku).&lt;br /&gt;
&lt;br /&gt;
Programy určené pro variantu 512 lze spustit pouze na správném typu hardware - SDS varianty 512.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Další informace:'''&lt;br /&gt;
&lt;br /&gt;
Velikost programu (bytecode + stringblob) a proměnných (variables) je pevná, a je přímo dána vámi tj. programátorem (podle toho, jaký napíšete program, tak bude tato oblast velká).&lt;br /&gt;
&lt;br /&gt;
Zbytek je použit pro haldu (heap), což je různě veliký paměťový prostor který má program k dispozici (funkce: malloc, realloc, free), pokud jej tedy potřebuje. Pokud bude váš program moc velký, pak se může stát že halda nemusí existovat - a systém nebude schopen takový program vůbec spustit ! Vždy je potřeba mít haldo o velikosti alespoň hodnoty 1/8 velikosti programu.&lt;br /&gt;
&lt;br /&gt;
Zásobník (stack) je vždy umístěn na začátku paměťového prostoru, a jeho velikost je opět jednorázově určena programátorem (podle odhadu nebo aktuální měření). Pokud je zásobník příliš malý, může být program předčasně ukončen (řešením je zvětšení velikosti zásobníku (na úkor velikosti heapu) a nové nahraní programu do zařízení). Toto je zřejmě nejčastější problém u většiny FULL-C programů - špatně nastavená velikost zásobníku.&lt;br /&gt;
&lt;br /&gt;
Informace o aktuálním vyžití celého paměťového prostoru je k dispozici ve webovém rozhraní SDS (Menu, FULL-C). Odsud lze také přečíst skutečné využití zásobníku (nejvyšší dosažená velikost).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Heap ==&lt;br /&gt;
&lt;br /&gt;
Typický FULL-C program v zařízení SDS nemá potřebu používat haldu (heap) - typicky všechny proměnné (i velká pole) lze bez problému staticky deklarovat.&lt;br /&gt;
&lt;br /&gt;
Pokud však potřebujete dynamickou alokaci paměti, tak je k dispozici ten zbytek paměťového prostoru, který zůstane &amp;quot;volný&amp;quot; po nahrání programu (a vyhrazení zásobníku).&lt;br /&gt;
&lt;br /&gt;
Informace o velikosti volného heapu a fragmentaci lze opět nalézt ve webovém rozhraní SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Opakování varování ==&lt;br /&gt;
&lt;br /&gt;
Velikost programu je omezena takto:&lt;br /&gt;
&lt;br /&gt;
* varianta SDS 64kB: vše se musí vlézt do 64kB (bytecode, proměnné, zásobník) &lt;br /&gt;
* varianta SDS 128kB: vše se musí vlézt do 2x 64kB (128kB s danými omezeními, především bytecode omezen na 64kB protože se musí celý vlézt do jednoho bloku)&lt;br /&gt;
* varianta SDS 512kB: vše se musí vlézt do 512kB, přičemž součet velikosti (bytecode, všechny proměnné, zásobník) je do velikosti 504kB (vše další je dostupné jako heap)&lt;br /&gt;
* Zásobník (stack) musí mít dostatečnou velikost pro provoz programu (všechny vnořené volání funkcí, rekurze, atd.).&lt;br /&gt;
* Halda (heap) musí být k dispozici o dostatečné velikosti, jinak se jakýkoliv program nespustí.&lt;br /&gt;
&lt;br /&gt;
Pokud by váš přeložený program byl moc velký, a to tak že se spolu s ním do paměti nevlezou další potřebné věci (zásobník atd.), nebudete moct program na zařízení SDS spustit.&lt;br /&gt;
&lt;br /&gt;
Vždy můžete kontrolovat stav programu (a využití paměti) na stránce &amp;quot;FULL-C&amp;quot; ve webové administraci zařízení SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak programovat ==&lt;br /&gt;
&lt;br /&gt;
FULL-C program musí vždy mít definovanou funkci '''main()''', která je první spuštěnou funkcí v rámci spuštění programu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 void main(void)&lt;br /&gt;
 {&lt;br /&gt;
   ;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je úkolem programátora, aby funkce '''main()''' nebyla opuštěna (potom je program &amp;quot;ukončen&amp;quot; protože nemá kam dál pokračovat) = v takovém případě je program ukončen, a znovu bude spuštěn až po restartu SDS (nebo když by byl nahrán nový program, tak je pak spuštěn ten).&lt;br /&gt;
&lt;br /&gt;
FULL-C program tedy vždy začíná jako první provádět instrukce ve funkci '''main()'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V základu lze činnosti provádět na základě těchto vstupů:&lt;br /&gt;
&lt;br /&gt;
* čas (např. každou vteřinu)&lt;br /&gt;
* hardware (např. čtení vstupů)&lt;br /&gt;
* hodnoty [[FULL-C: sharing|sdílených proměnných]] (např. změnou proměnné z uživatelské webové stránky)&lt;br /&gt;
&lt;br /&gt;
Výstupy programu mohou být:&lt;br /&gt;
&lt;br /&gt;
* ovládání hardware (např. spínání relé)&lt;br /&gt;
* změna hodnot sdílených proměnných (např. pro dynamické zobrazení na uživatelské webové stránce)&lt;br /&gt;
* odesílání stavů přes síť (např. HTTP-GET nebo SNMP-TRAP)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pro všechny tyto vypsané činnosti je potřeba znát [[FULL-C: functions|funkce a příkazy]], které programu umožní právě takovéto činnosti vykonávat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OPTIMALIZACE KÓDU a jak je SDS vůbec rychlé ? ==&lt;br /&gt;
&lt;br /&gt;
Bylo provedeno detailní měření na SDS-BIG, a postupy jsou použitelné pro všechna BIG a BIG2 zařízení.&lt;br /&gt;
&lt;br /&gt;
=== Základní orientace ===&lt;br /&gt;
&lt;br /&gt;
* Jeden jednoduchý příkaz (např. &amp;lt;code&amp;gt;x = y + z;&amp;lt;/code&amp;gt;) trvá cca '''60–150 µs''', tj. řádově 10 000 jednoduchých příkazů za sekundu. Hlavní smyčka se 100 příkazy tak trvá cca 10 ms na jeden průchod.&lt;br /&gt;
* Samotný výpočet je zanedbatelný: &amp;lt;code&amp;gt;+ - * / %&amp;lt;/code&amp;gt;, 64bitová i float aritmetika trvají stejně. O rychlosti rozhoduje počet příkazů a způsob zápisu programu (viz tipy níže).&lt;br /&gt;
* Výsledky měření jsou velmi opakovatelné (±0,1 %). Při nezatížené síti spotřebuje ostatní činnost SDS jen cca 2 % výkonu.&lt;br /&gt;
&lt;br /&gt;
=== Naměřené časy (SDS-BIG 128) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zápis !! Čas&lt;br /&gt;
|-&lt;br /&gt;
| prázdný cyklus &amp;lt;code&amp;gt;for (i = 0; i &amp;lt; n; i++) { }&amp;lt;/code&amp;gt;, jeden průchod || 109 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;for (i = n; i--; ) { }&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;while (i--) { }&amp;lt;/code&amp;gt;, jeden průchod || 52 / 46 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x = 5;&amp;lt;/code&amp;gt; (x je lokální proměnná) || cca 60 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x = y + z;&amp;lt;/code&amp;gt; || cca 105 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x++;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;++x;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;x += 1;&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;x = x + 1;&amp;lt;/code&amp;gt; || 57 / 49 / 70 / 102 µs&lt;br /&gt;
|-&lt;br /&gt;
| konstanta: číslo / enum / &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; (definované těsně před použitím) || +0 / +7 / +21 µs&lt;br /&gt;
|-&lt;br /&gt;
| konstanta: enum / &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; (definované na začátku velkého programu) || +47 / +62 µs&lt;br /&gt;
|-&lt;br /&gt;
| globální proměnná, čtení / zápis (deklarovaná na začátku programu) || +32 / +90 µs oproti lokální&lt;br /&gt;
|-&lt;br /&gt;
| globální proměnná, čtení / zápis (deklarovaná těsně před použitím) || +7 / +13 µs oproti lokální&lt;br /&gt;
|-&lt;br /&gt;
| makro s parametry, např. &amp;lt;code&amp;gt;SQR(y)&amp;lt;/code&amp;gt; || 870–1600 µs (!)&lt;br /&gt;
|-&lt;br /&gt;
| totéž jako funkce &amp;lt;code&amp;gt;sqr(y)&amp;lt;/code&amp;gt; / rozepsané &amp;lt;code&amp;gt;y * y&amp;lt;/code&amp;gt; || cca 195 / 105 µs&lt;br /&gt;
|-&lt;br /&gt;
| volání prázdné funkce bez parametrů || cca 105 µs&lt;br /&gt;
|-&lt;br /&gt;
| každý parametr funkce / každá lokální proměnná ve volané funkci || +35 / +65 µs na každé volání&lt;br /&gt;
|-&lt;br /&gt;
| příkaz, který se neprovede (uvnitř nesplněné podmínky &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt;) || cca 80 µs (provedený: cca 100 µs)&lt;br /&gt;
|-&lt;br /&gt;
| volání funkce, které se neprovede || cca 20 µs, bez ohledu na velikost funkce&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; nebo řetězec &amp;lt;code&amp;gt;if – else if&amp;lt;/code&amp;gt;, na každou větev || cca 80–100 µs, bez ohledu na to, která větev platí&lt;br /&gt;
|-&lt;br /&gt;
| tabulka hodnot &amp;lt;code&amp;gt;x = tab[k];&amp;lt;/code&amp;gt; || cca 120 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;SDS_get_u32()&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;SDS_set_u32()&amp;lt;/code&amp;gt; || cca 155 / 250 µs&lt;br /&gt;
|-&lt;br /&gt;
| 8 vstupů: 8x &amp;lt;code&amp;gt;SDS_get_u32()&amp;lt;/code&amp;gt; / 1x &amp;lt;code&amp;gt;SDS_get_a()&amp;lt;/code&amp;gt; || 1400 / 320 µs&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcmp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strlen&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atoi&amp;lt;/code&amp;gt;, ... || 200–340 µs na jedno volání&lt;br /&gt;
|-&lt;br /&gt;
| kopie 64 bajtů vlastním cyklem / pomocí &amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt; || 11–18 ms / 0,34 ms&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;printf()&amp;lt;/code&amp;gt; || cca 330 µs + 2,7 µs na každý znak&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;putchar()&amp;lt;/code&amp;gt; || cca 375 µs na každý znak&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; || 0,6 ms / N ms + 0,5–0,7 ms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Proměnné a konstanty ===&lt;br /&gt;
&lt;br /&gt;
* '''Nejčastěji používané proměnné funkce (čítače cyklů, mezisoučty) deklarujte jako poslední''' v seznamu deklarací. Proměnná deklarovaná později je rychlejší: čítač cyklu deklarovaný jako první z 27 lokálních proměnných zpomalí každý průchod cyklem o 38 µs, deklarovaný jako poslední nezpomalí nic.&lt;br /&gt;
* '''Konstanty, globální proměnné a enum deklarujte co nejblíže místu použití''', např. těsně před funkcí, která je používá, nebo těsně před &amp;lt;code&amp;gt;main()&amp;lt;/code&amp;gt; pro hlavní smyčku. Totéž definované na začátku velkého programu je výrazně pomalejší (viz tabulka). Navíc je to i čitelnější: definice je hned u použití.&lt;br /&gt;
* '''Méně globálních položek = rychlejší program.''' Každá další globální proměnná, funkce nebo konstanta mírně zpomalí přístup ke všemu, co je v programu deklarováno před ní, včetně volání funkcí SDS.&lt;br /&gt;
** Související globální proměnné spojte do jedné struktury (&amp;lt;code&amp;gt;struct&amp;lt;/code&amp;gt;). Přístup k položce struktury stojí jen cca +14 µs.&lt;br /&gt;
** Nevytvářejte zbytečně mnoho drobných globálních pomocných funkcí.&lt;br /&gt;
* '''Používejte lokální proměnné.''' Na začátku funkce si zkopírujte globální proměnné a nastavení do lokálních proměnných, v cyklu pracujte s lokálními a výsledek zapište do globální proměnné jen jednou na konci.&lt;br /&gt;
* '''Pro pojmenované konstanty používejte &amp;lt;code&amp;gt;enum&amp;lt;/code&amp;gt; místo &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt;.''' &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; je o cca 14 µs pomalejší než enum na stejném místě v programu. &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; použijte jen tam, kde ho FULL-C vyžaduje (velikost pole).&lt;br /&gt;
* '''Nepoužívejte makra s parametry''' (&amp;lt;code&amp;gt;#define SQR(a) ((a)*(a))&amp;lt;/code&amp;gt;) v často prováděném kódu. Stojí 870–1600 µs na každé použití a jejich rychlost se mění s velikostí programu a stavem paměti. Použijte funkci (cca 195 µs) nebo výraz rozepište.&lt;br /&gt;
* Nastavení, které uživatel mění, může zůstat na začátku programu jako &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; nebo globální proměnná. Často prováděný kód si ale tyto hodnoty na začátku funkce zkopíruje do lokálních proměnných.&lt;br /&gt;
* '''Nedeklarujte proměnné uvnitř těla cyklu''' (&amp;lt;code&amp;gt;for (...) { int t; ... }&amp;lt;/code&amp;gt;). Funguje to, ale deklarace se provádí při každém průchodu (+25 µs). Deklarujte na začátku funkce.&lt;br /&gt;
&lt;br /&gt;
=== Cykly ===&lt;br /&gt;
&lt;br /&gt;
* '''Cyklus směrem dolů je dvakrát rychlejší:''' &amp;lt;code&amp;gt;for (i = n; i--; ) { ... }&amp;lt;/code&amp;gt; trvá 52 µs na průchod, &amp;lt;code&amp;gt;for (i = 0; i &amp;lt; n; i++)&amp;lt;/code&amp;gt; 109 µs. V těle cyklu má i hodnoty n-1 ... 0. &amp;lt;code&amp;gt;while (i--)&amp;lt;/code&amp;gt; je stejně rychlý.&lt;br /&gt;
* &amp;lt;code&amp;gt;while (i &amp;lt; n) { ...; i++; }&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;do { } while ()&amp;lt;/code&amp;gt; nejsou rychlejší než &amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;++i&amp;lt;/code&amp;gt; je o něco rychlejší než &amp;lt;code&amp;gt;i++&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;i += 1&amp;lt;/code&amp;gt; je pomalejší.&lt;br /&gt;
* '''Nikdy nepoužívejte globální proměnnou jako čítač cyklu''' (+113 µs na každý průchod).&lt;br /&gt;
* Mez cyklu jako číslo nebo lokální proměnná nic nestojí. Jako globální proměnná stojí +29 µs na průchod, jako &amp;lt;code&amp;gt;#define&amp;lt;/code&amp;gt; +56 µs na průchod. Zkopírujte ji předem do lokální proměnné.&lt;br /&gt;
* Nejvíc ušetříte tím, co z cyklu vyjmete: každý příkaz uvnitř cyklu stojí cca 100 µs na každý průchod.&lt;br /&gt;
&lt;br /&gt;
=== Podmínky a kód, který se neprovede ===&lt;br /&gt;
&lt;br /&gt;
* '''I kód, který se neprovede, zabírá čas.''' Příkaz uvnitř nesplněné podmínky stojí cca 80 µs, skoro stejně jako provedený (cca 100 µs).&lt;br /&gt;
* '''Velké, zřídka prováděné bloky přesuňte do samostatné funkce.''' Neprovedené volání funkce stojí jen cca 20 µs, bez ohledu na to, jak je funkce velká.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;return&amp;lt;/code&amp;gt; čas neušetří.''' Volání funkce trvá úměrně délce celé funkce, ne jen té části, která se provedla. Často volané funkce udržujte krátké.&lt;br /&gt;
* '''&amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; i řetězec &amp;lt;code&amp;gt;if – else if&amp;lt;/code&amp;gt; stojí cca 80–100 µs na každou větev''', bez ohledu na to, která větev platí: 2 větve cca 270 µs, 8 větví cca 770–940 µs.&lt;br /&gt;
* '''Kde to jde, použijte tabulku hodnot''' místo dlouhého &amp;lt;code&amp;gt;switch&amp;lt;/code&amp;gt; nebo řetězce &amp;lt;code&amp;gt;if&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;x = tab[k];&amp;lt;/code&amp;gt; cca 120 µs). Tabulku naplňte kódem na začátku programu, protože FULL-C nepovoluje inicializaci pole v deklaraci.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;&amp;amp;&amp;lt;/code&amp;gt; pravou stranu sice neprovede, ale i tak stojí čas.&lt;br /&gt;
* Ternární operátor &amp;lt;code&amp;gt;?:&amp;lt;/code&amp;gt; trvá stejně jako &amp;lt;code&amp;gt;if / else&amp;lt;/code&amp;gt; a vždy vyhodnotí obě strany. '''Používejte ho jen s čísly''': s řetězci (&amp;lt;code&amp;gt;ok ? &amp;quot;OK&amp;quot; : &amp;quot;CHYBA&amp;quot;&amp;lt;/code&amp;gt;) se program zastaví s chybou &amp;quot;first argument to '?' should be a number&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Výrazy a příkazy ===&lt;br /&gt;
&lt;br /&gt;
* Méně příkazů je rychlejší: jeden výraz &amp;lt;code&amp;gt;x = ((y+z)*(y-z))/3;&amp;lt;/code&amp;gt; trvá 233 µs, totéž rozdělené do 4 příkazů 393 µs.&lt;br /&gt;
* Používejte zkrácené zápisy: &amp;lt;code&amp;gt;x++&amp;lt;/code&amp;gt; 57 µs, &amp;lt;code&amp;gt;x += 1&amp;lt;/code&amp;gt; 70 µs, &amp;lt;code&amp;gt;x = x + 1&amp;lt;/code&amp;gt; 102 µs.&lt;br /&gt;
* Bitový posun a násobení / dělení trvají stejně, &amp;lt;code&amp;gt;* 8&amp;lt;/code&amp;gt; není třeba nahrazovat zápisem &amp;lt;code&amp;gt;&amp;lt;&amp;lt; 3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Datové typy ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;int64_t&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;uint64_t&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; nejsou pomalejší než &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, používejte je bez obav.&lt;br /&gt;
* &amp;lt;code&amp;gt;char&amp;lt;/code&amp;gt; ani &amp;lt;code&amp;gt;short&amp;lt;/code&amp;gt; nejsou rychlejší než &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;ftoi()&amp;lt;/code&amp;gt; je pomalejší než přetypování &amp;lt;code&amp;gt;(int)&amp;lt;/code&amp;gt; (199 µs proti 146 µs).&lt;br /&gt;
&lt;br /&gt;
=== Funkce ===&lt;br /&gt;
&lt;br /&gt;
* '''Funkce jsou dost rychlé na to, abyste mohli psát přehledný kód:''' volání stojí cca 100 µs, tedy zhruba jako jeden příkaz. Rozdělte program do funkcí podle úkolů.&lt;br /&gt;
* Každý parametr prodlouží volání o cca 35 µs, každá lokální proměnná deklarovaná ve volané funkci o cca 65 µs, každá další úroveň vnoření volání o cca 90 µs.&lt;br /&gt;
* Malé, často volané funkce by měly pracovat jen se svými parametry, bez vlastních lokálních proměnných.&lt;br /&gt;
* Pro předání většího množství dat předejte ukazatel na strukturu místo mnoha parametrů.&lt;br /&gt;
* Vyhněte se řetězcům drobných obalových funkcí a rekurzi (stojí čas i místo v zásobníku).&lt;br /&gt;
* Velikost zásobníku (STACK) nastavená ve FULLC.exe musí pokrýt nejhlubší vnoření volání.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Řetězce a paměť ===&lt;br /&gt;
&lt;br /&gt;
* '''Vždy používejte knihovní funkce''' (&amp;lt;code&amp;gt;memcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;memset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcpy&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strlen&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strcmp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;atoi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;strtoul&amp;lt;/code&amp;gt;, ...). Jedno volání stojí 200–340 µs bez ohledu na délku dat. Totéž vlastním cyklem je 20–50x pomalejší: kopie 64 bajtů v cyklu trvá 11–18 ms.&lt;br /&gt;
* &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt; včetně formátu &amp;lt;code&amp;gt;%0.2f&amp;lt;/code&amp;gt; funguje a stojí cca 260–340 µs.&lt;br /&gt;
* '''Nepoužívejte &amp;lt;code&amp;gt;malloc&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;free&amp;lt;/code&amp;gt; v cyklech.''' Fragmentace haldy (heap) zpomaluje program a může způsobit selhání síťových funkcí. Paměť alokujte jednou na začátku programu, nebo použijte pevná pole. Nechte dostatek volné haldy pro síťové funkce.&lt;br /&gt;
&lt;br /&gt;
=== Funkce SDS (set a get) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_get_*()&amp;lt;/code&amp;gt; stojí cca 155 µs, &amp;lt;code&amp;gt;SDS_set_u32()&amp;lt;/code&amp;gt; cca 250 µs.&lt;br /&gt;
* '''Kde to tabulka indexů umožňuje (označení &amp;quot;(a)&amp;quot;), čtěte bloky pomocí &amp;lt;code&amp;gt;SDS_get_a()&amp;lt;/code&amp;gt;''': 8 vstupů jedním voláním za 320 µs místo 1400 µs.&lt;br /&gt;
* Hodnotu přečtěte jednou za průchod do lokální proměnné a dál používejte tu.&lt;br /&gt;
&lt;br /&gt;
=== Konzole (printf) ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;printf()&amp;lt;/code&amp;gt; stojí cca 330 µs + 2,7 µs na znak. &amp;lt;code&amp;gt;putchar()&amp;lt;/code&amp;gt; stojí cca 375 µs '''na každý znak''', proto nikdy netiskněte po znacích.&lt;br /&gt;
* Celý řádek si připravte pomocí &amp;lt;code&amp;gt;snprintf()&amp;lt;/code&amp;gt; a vytiskněte ho jedním voláním.&lt;br /&gt;
* Plná konzole tisk nezablokuje ani nezpomalí, ale její kapacita je omezená. Tiskněte stručně.&lt;br /&gt;
* Konzole (echo.htm) je HTML stránka: znak &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt;, za kterým následuje písmeno nebo číslice, se bere jako HTML značka a část textu se nezobrazí. Ve výpisech se znaku &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt; vyhněte.&lt;br /&gt;
* &amp;lt;code&amp;gt;echoclear()&amp;lt;/code&amp;gt; trvá cca 1 ms.&lt;br /&gt;
&lt;br /&gt;
=== wait() a měření času ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; trvá N ms + cca 0,5–0,7 ms, &amp;lt;code&amp;gt;wait(0)&amp;lt;/code&amp;gt; trvá 0,6 ms. Nepoužívejte ho jen pro &amp;quot;uvolnění&amp;quot; procesoru.&lt;br /&gt;
* Při silném zatížení sítě může &amp;lt;code&amp;gt;wait(N)&amp;lt;/code&amp;gt; trvat až o cca 1,7 ms déle.&lt;br /&gt;
* Pro měření času použijte index 45 (uptime v ms). Pro přesná měření lze použít index 137 (čítač cyklů CPU, na SDS-BIG 64/128 168 kroků na 1 µs), který přeteče cca po 25 s.&lt;br /&gt;
&lt;br /&gt;
=== Sériová linka (UART) ===&lt;br /&gt;
&lt;br /&gt;
Měřeno na COM6 s propojeným TX a RX, při rychlostech 9600–460800 Bd. Ve všech testech, i při silném zatížení sítě, proběhl přenos bez jediné chyby.&lt;br /&gt;
&lt;br /&gt;
* '''Data odesílejte jedním voláním &amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt;''', nikdy po znacích pomocí &amp;lt;code&amp;gt;SDS_serial_writeCH()&amp;lt;/code&amp;gt; v cyklu. writeCH stojí cca 0,5 ms na každý bajt (pod zátěží sítě 0,6 ms), takže 64 bajtů trvá 33–40 ms při jakékoliv rychlosti linky.&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_serial_write()&amp;lt;/code&amp;gt; stojí cca 0,85 ms + 1,6 µs na bajt a vrací se ihned, aniž čeká na odvysílání, pokud se data vejdou do vysílacího bufferu (cca 600 B). Při větším objemu funkce čeká, dokud se zbytek do bufferu nevejde: 1024 B při 115200 Bd čekalo 34 ms.&lt;br /&gt;
* Přijímací buffer pojme nejméně 1024 B, takže program nemusí číst nepřetržitě.&lt;br /&gt;
* &amp;lt;code&amp;gt;SDS_serial_read()&amp;lt;/code&amp;gt; stojí cca 0,35 ms i tehdy, když žádná data nečekají. Nevolejte ho v rychlé smyčce. Stačí jednou za průchod hlavní smyčkou nebo po &amp;lt;code&amp;gt;wait()&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Přijatá data jsou programu k dispozici se zpožděním: dotaz a odpověď trvají nejméně cca 4 ms plus doba přenosu po lince. Data lze přečíst cca 2,5 ms po příchodu posledního bajtu. Při silném zatížení sítě se to prodlouží na cca 4,3–6 ms.&lt;br /&gt;
* Nad cca 115200 Bd u krátkých zpráv převažuje toto pevné zpoždění. Vyšší rychlost linky pomůže jen u velkých bloků dat.&lt;br /&gt;
&lt;br /&gt;
=== MQTT ===&lt;br /&gt;
&lt;br /&gt;
* '''Nevolejte další funkci &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt;, dokud předchozí není dokončena''': u publish, subscribe a unsubscribe sledujte &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt;, u connect a disconnect &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt;. Ve FW 0x0019080B takové volání poruší stav spojení (viz Známé chyby níže).&lt;br /&gt;
* '''Stav spojení &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; kontrolujte při každém průchodu hlavní smyčkou''' a v případě potřeby spojení obnovte postupem uvedeným v části Známé chyby. Po každém novém připojení je potřeba znovu provést subscribe, protože se tabulka přihlášení maže.&lt;br /&gt;
* Po normálním &amp;lt;code&amp;gt;mqtt_disconnect()&amp;lt;/code&amp;gt; skončí &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; na hodnotě −2, ne 0. Považujte 0 i −2 za &amp;quot;odpojeno&amp;quot;.&lt;br /&gt;
* PRO FIRMWARE STARŠÍ NEŽ 31.10.2026 platí, že každá operace publish, subscribe, unsubscribe i disconnect trvá cca 0,3–0,65 s (v průměru 0,5 s) bez ohledu na velikost dat, tj. nejvýše cca 2 zprávy za sekundu.&lt;br /&gt;
** Na dokončení publish v hlavní smyčce nečekejte. Zavolejte &amp;lt;code&amp;gt;mqtt_publish()&amp;lt;/code&amp;gt;, pokračujte v jiné práci a &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt; zkontrolujte při dalším průchodu.&lt;br /&gt;
** '''Posílejte více hodnot v jedné zprávě''' (např. JSON, celkem do cca 1465 znaků včetně názvu položky): publish s 1024 B trvá stejně dlouho jako s 8 B.&lt;br /&gt;
* pouze pro '''FW 31.10.2026 a novější:''' publish, subscribe, unsubscribe i disconnect trvají cca 3–6 ms (cca 250 zpráv za sekundu), cesta zprávy přes broker a zpět cca 6 ms. Při silném zatížení sítě trvá většina publish 7–15 ms, některé ale až cca 1,5 s. Proto vždy používejte časový limit alespoň 3–5 s.&lt;br /&gt;
* &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; trvá v obou verzích firmware cca 0,2–0,45 s.&lt;br /&gt;
* Kontrola stavu v čekací smyčce stojí cca 0,3 ms na každé čtení. Do takové smyčky dejte &amp;lt;code&amp;gt;wait(10)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== Známé chyby firmware (MQTT) ====&lt;br /&gt;
&lt;br /&gt;
'''1. Volání &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt; dříve, než skončila předchozí operace, poruší stav spojení''' (opraveno teprve od FW verze 31.10.2026)&lt;br /&gt;
* Zavoláte-li např. &amp;lt;code&amp;gt;mqtt_publish()&amp;lt;/code&amp;gt; ve chvíli, kdy předchozí publish ještě probíhá, zapíše se chybový kód −3 do &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; (místo do &amp;lt;code&amp;gt;[12202]&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; pak zůstane trvale na −3, přestože spojení ve skutečnosti funguje, a program se tak jeví jako odpojený.&lt;br /&gt;
* Následné přímé zavolání &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; selže s výsledkem −7 (při CONNACK 0).&lt;br /&gt;
* Ochrana: nikdy nevolejte další funkci &amp;lt;code&amp;gt;mqtt_*()&amp;lt;/code&amp;gt; před dokončením předchozí (viz MQTT výše).&lt;br /&gt;
* Obnova spojení, která funguje v obou verzích firmware (původní i opravené od 31.10.2026):&lt;br /&gt;
*# pokud &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; není 4, 0 ani −2, zavolejte &amp;lt;code&amp;gt;mqtt_disconnect()&amp;lt;/code&amp;gt;;&lt;br /&gt;
*# počkejte, až bude &amp;lt;code&amp;gt;[12200]&amp;lt;/code&amp;gt; rovno 0 nebo −2 (cca 0,3 s);&lt;br /&gt;
*# počkejte dalších 500 ms;&lt;br /&gt;
*# zavolejte &amp;lt;code&amp;gt;mqtt_connect()&amp;lt;/code&amp;gt; a počkejte na hodnotu 4;&lt;br /&gt;
*# znovu proveďte subscribe všech položek.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Zatížení sítě a rezerva výkonu ===&lt;br /&gt;
&lt;br /&gt;
* Při nezatížené síti spotřebuje ostatní činnost SDS cca 2 % výkonu, program přitom není nikdy přerušen na déle než cca 0,6 ms.&lt;br /&gt;
* Při silném zatížení (ping a HTTP dotazy z jednoho PC) spotřebuje 15–19 % výkonu. Program pak běží o cca 18–20 % pomaleji a je často přerušován, ale nikdy na déle než cca 1,5 ms.&lt;br /&gt;
* '''U zařízení se silným síťovým provozem počítejte s rezervou cca 25 % výkonu.''' Poměry mezi časy i všechny tipy výše platí i pod zátěží.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Co rychlost neovlivní (pište přehledně) ===&lt;br /&gt;
&lt;br /&gt;
* Komentáře, i uvnitř cyklů a v neprováděných blocích.&lt;br /&gt;
* Dlouhé, výstižné názvy proměnných.&lt;br /&gt;
* Závorky navíc.&lt;br /&gt;
* Rozdělení programu do funkcí podle úkolů (cca jeden příkaz na každé volání).&lt;br /&gt;
* 64bitové a float typy.&lt;br /&gt;
* Odsazení, prázdné řádky, formátování.&lt;br /&gt;
&lt;br /&gt;
=== Příklad ===&lt;br /&gt;
&lt;br /&gt;
Pomalý, ale běžný zápis:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define OPTO_FIRST  151&lt;br /&gt;
#define NUM_INPUTS  8&lt;br /&gt;
#define WEIGHT(a)   ((a)*(a))&lt;br /&gt;
&lt;br /&gt;
unsigned int g_weight;&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int i;&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    g_weight = 0;&lt;br /&gt;
    for (i = 0; i &amp;lt; NUM_INPUTS; i++)&lt;br /&gt;
    {&lt;br /&gt;
      if (SDS_get_u32(OPTO_FIRST + i) == 0) g_weight = g_weight + WEIGHT(i + 1);&lt;br /&gt;
    }&lt;br /&gt;
    wait(100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Totéž zapsané podle tipů výše (stejně čitelné):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define NUM_INPUTS  8                              // velikost pole: zde je #define nutny&lt;br /&gt;
&lt;br /&gt;
unsigned int g_weight;                             // vysledek pro zbytek programu&lt;br /&gt;
&lt;br /&gt;
enum inputs { OPTO_FIRST = 151 };                  // definovano tesne pred pouzitim&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  unsigned int opto[NUM_INPUTS];&lt;br /&gt;
  unsigned int w;&lt;br /&gt;
  unsigned int i;                                  // nejpouzivanejsi promenna deklarovana posledni&lt;br /&gt;
&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    SDS_get_a(OPTO_FIRST, (void *)opto, NUM_INPUTS * 4);   // 1 volani misto 8&lt;br /&gt;
    w = 0;&lt;br /&gt;
    for (i = NUM_INPUTS; i--; )                    // cyklus dolu: i = 7 .. 0&lt;br /&gt;
    {&lt;br /&gt;
      if (opto[i] == 0) w += (i + 1) * (i + 1);   // bez makra s parametry&lt;br /&gt;
    }&lt;br /&gt;
    g_weight = w;                                  // globalni promenna zapsana jen jednou&lt;br /&gt;
    wait(100);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Změny oproti první verzi:&lt;br /&gt;
* jedno blokové čtení místo 8 volání;&lt;br /&gt;
* žádné makro s parametry;&lt;br /&gt;
* mezisoučet v lokální proměnné místo globální;&lt;br /&gt;
* cyklus směrem dolů;&lt;br /&gt;
* konstanta definovaná těsně před použitím;&lt;br /&gt;
* čítač cyklu deklarovaný jako poslední.&lt;br /&gt;
&lt;br /&gt;
Podle naměřených časů trvá jeden průchod první verze cca 8–15 ms (podle počtu aktivních vstupů), druhé verze cca 2–3 ms.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_MQTT_functions&amp;diff=987</id>
		<title>FULL-C: MQTT functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_MQTT_functions&amp;diff=987"/>
		<updated>2026-10-31T10:08:42Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FULL-C&lt;br /&gt;
&lt;br /&gt;
== Síťové funkce: komunikace MQTT (klient) ve FULL-C ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Zařízení SDS umožňuje komunikovat s MQTT brokerem, tedy SDS lze  provozovat jako MQTT klienta.&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem jsou k dispozici tyto funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
         void mqtt_connect(unsigned int IP0, unsigned int IP1, unsigned int IP2, unsigned int IP3, unsigned int TCPport, char *ClientID, char *username, char *password, unsigned int KeepAliveSec);&lt;br /&gt;
         void mqtt_disconnect(void);&lt;br /&gt;
         void mqtt_publish(char *FullTopicName, char *Value);&lt;br /&gt;
         void mqtt_subscribe(unsigned int TableIndex, char *FullTopicName);&lt;br /&gt;
         void mqtt_unsubscribe_index(unsigned int TableIndex);&lt;br /&gt;
         void mqtt_unsubscribe_name(char *FullTopicName);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proměnné IP0 až IP3 skládají (po částech) dohromady konkrétní IP adresu (IP0.IP1.IP2.IP3), ke které se SDS (MQTT klient) připojí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
 [[MQTT|Veškerý popis využití MQTT je na této stránce (odkaz je zde).]]&lt;br /&gt;
&lt;br /&gt;
Implementace ve FULL-C odpovídá implementaci v SDS-C, jediný rozdíl je popsán zde:&lt;br /&gt;
* SDS-C: přístup k údajům se provádí přes systémovou proměnnou sys[2199] až sys[2321] &lt;br /&gt;
* FULL-C: přístup k údajům se provádí přes [[FULL-C: set_and_get|SDS_get_i32() respektive SDS_get_u32()]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příklady ==&lt;br /&gt;
&lt;br /&gt;
Základní připojení k brokeru, publikování položky a odpojení:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
. &lt;br /&gt;
 // *** CONNECT&lt;br /&gt;
 &lt;br /&gt;
 // connect on start&lt;br /&gt;
 printf(&amp;quot;connecting to MQTT broker...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 //           ip   ip   ip ip   port  client-id          username   password    reserved&lt;br /&gt;
 mqtt_connect(192, 168, 1, 253, 1883, &amp;quot;sds-client-1234&amp;quot;, &amp;quot;sds1234&amp;quot;, &amp;quot;password&amp;quot;, 0);&lt;br /&gt;
 &lt;br /&gt;
 // now wait for a complete connection:&lt;br /&gt;
 &lt;br /&gt;
 // done - connected ?&lt;br /&gt;
 while (SDS_get_i32(12200) != 4) &lt;br /&gt;
 {&lt;br /&gt;
   // any error - did it fail ?&lt;br /&gt;
   if (SDS_get_i32(12200) &amp;lt; 0) goto mqtt_conn_fail;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // OK, done, so now:&lt;br /&gt;
 // test the CONNACK result - see &amp;quot;3.2.2.3 Connect Return code&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if (SDS_get_i32(12201) != 0) goto mqtt_conn_fail;&lt;br /&gt;
 &lt;br /&gt;
 // CONNECTED OK ! (result is 0x00)&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;connected to broker OK, result in 12200=%d\n&amp;quot;, SDS_get_i32(12200));&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // *** PUBLISH&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;publishing...&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 mqtt_publish(&amp;quot;sds/temps/value1&amp;quot;, &amp;quot;123456&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 // wait until done&lt;br /&gt;
 while (SDS_get_i32(12202) == 1)&lt;br /&gt;
 {&lt;br /&gt;
   // disconnected ?&lt;br /&gt;
   if (SDS_get_i32(12200) &amp;lt; 0) goto mqtt_conn_fail;    &lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 // was it success ?&lt;br /&gt;
 if (SDS_get_i32(12202) != 2)&lt;br /&gt;
 { &lt;br /&gt;
   // it FAILED&lt;br /&gt;
   printf(&amp;quot;publish error = %d\n&amp;quot;, SDS_get_i32(12202)); &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;OK\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // *** DISCONNECT&lt;br /&gt;
 &lt;br /&gt;
 mqtt_disconnect();&lt;br /&gt;
 &lt;br /&gt;
 // todo: wait for disconnection result !!!&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 mqtt_conn_fail:&lt;br /&gt;
 &lt;br /&gt;
  printf(&amp;quot;connection to broker - FAILED \n&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samozřejmě si z příkladu vyberete jednotlivé části tak, jak zapadají do vašeho programu. Připojení je potřeba provést &amp;quot;jen jednou&amp;quot; na začátku, a SDS automaticky udržuje spojení (MQTT PING, tedy formou protokolového keep alive) až do buď (1.) uzavření spojení nebo (2.) výpadku síťového připojení (např. odpojení ETH kabelu z SDS) nebo (3.) specifické závažné chybě při komunikace mezi SDS a brokerem/serverem. Pokud by došlo ke ztrátě spojení (což se může stát), je toto předáno formou chybového hlášení (čtení patřičného indexu pomoci SDS_get funkce), a celý proces připojení a subscribe je potřeba samozřejmě zopakovat. Je proto nezbytné trvale kontrolovat příslušné systémové indexy.&lt;br /&gt;
&lt;br /&gt;
Je-li SDS připojeno, lze provádět neomezené publikování hodnot, a také se lze přihlásit k odběru (subscribe).&lt;br /&gt;
&lt;br /&gt;
SDS nabízí možnost využít svou tabulku přihlášení (subscribe table), kam si vložíte položky které vás zajímají (každou pod jiným indexem) a SDS bude pro tyto položky trvale udržovat jejich aktuální hodnoty (values), tak jak je bude broker do SDS posílat. Váš program se pak kdykoliv do tabulky může podívat a přečíst si aktuální stav. Samozřejmě použití tabulky není nutnost, ale bez ní můžete přijít o aktualizaci, pokud ji svým programem nezachytíte.&lt;br /&gt;
&lt;br /&gt;
Příklad přihlášení k odběru:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // note. SDS shall be connected to a broker, at this point&lt;br /&gt;
 &lt;br /&gt;
 // *** let us subscribe to a topic:&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;subscribing...&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 // for this example, we choose index '1':&lt;br /&gt;
 mqtt_subscribe(1, &amp;quot;ha/output/q1/state&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 // wait for result&lt;br /&gt;
 while (SDS_get_i32(12202) == 4)&lt;br /&gt;
 {&lt;br /&gt;
   // disconnected ?&lt;br /&gt;
   if (SDS_get_i32(12200) &amp;lt; 0) goto mqtt_conn_fail;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // success ?&lt;br /&gt;
 if (SDS_get_i32(12202) != 8)&lt;br /&gt;
 { &lt;br /&gt;
   // failed...&lt;br /&gt;
   printf(&amp;quot;sub error = %d\n&amp;quot;, SDS_get_i32(12202)); &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 // OK we ARE subscribed !&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;OK\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // *** example: watch for updates coming from broker, and print it to console&lt;br /&gt;
 &lt;br /&gt;
 unsigned int last1;&lt;br /&gt;
 char tn[32+1];&lt;br /&gt;
 char tv[32+1];&lt;br /&gt;
 &lt;br /&gt;
 last1 = 0;&lt;br /&gt;
 &lt;br /&gt;
 while(1)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   // any change ? (any new message from broker, processed by SDS ?)&lt;br /&gt;
   if (last1 != SDS_get_u32(12291))  // 12291 is a timestamp for index #1&lt;br /&gt;
   {&lt;br /&gt;
      // store so we can compare it later, again&lt;br /&gt;
      last1 = SDS_get_u32(12291);&lt;br /&gt;
 &lt;br /&gt;
      // read Topic Name (tn) and the new Value (tv)&lt;br /&gt;
      SDS_get_a(12211, &amp;amp;tn, 32);&lt;br /&gt;
      SDS_get_a(12251, &amp;amp;tv, 32);&lt;br /&gt;
 &lt;br /&gt;
      // print to console&lt;br /&gt;
      printf(&amp;quot;TOPIC #1: %s update to: %s \n&amp;quot;, tn, tv);&lt;br /&gt;
  };&lt;br /&gt;
 &lt;br /&gt;
  // always check the connection state&lt;br /&gt;
  if (SDS_get_i32(12200) &amp;lt; 0)&lt;br /&gt;
  {  &lt;br /&gt;
    // disconnected&lt;br /&gt;
    printf(&amp;quot;disconn\n&amp;quot;); break;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 // continue loop&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 // *** unsubscribe&lt;br /&gt;
 mqtt_unsubscribe_index(1);&lt;br /&gt;
 &lt;br /&gt;
 // todo: wait for result !&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Další příklady budou eventuálně doplněny, požadavky na ně předejte přes forum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Udržování spojení ===&lt;br /&gt;
&lt;br /&gt;
PŘÍKLAD VE FULL-C:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// MQTT: make sure the broker is connected, reconnect if needed (blocks up to ~20 s)&lt;br /&gt;
// returns 1 = connected, 2 = freshly reconnected (subscribe again!), 0 = failed&lt;br /&gt;
int mq_link(void)&lt;br /&gt;
{&lt;br /&gt;
  int st;&lt;br /&gt;
  unsigned int t0;&lt;br /&gt;
&lt;br /&gt;
  st = SDS_get_i32(12200);&lt;br /&gt;
  if (st == 4) return 1;&lt;br /&gt;
&lt;br /&gt;
  // not connected or status damaged (e.g. -3 after a too-early call): clean up first&lt;br /&gt;
  if ((st != 0) &amp;amp;&amp;amp; (st != -2))&lt;br /&gt;
  {&lt;br /&gt;
    mqtt_disconnect();&lt;br /&gt;
    t0 = SDS_get_u32(45);&lt;br /&gt;
    for (;;)&lt;br /&gt;
    {&lt;br /&gt;
      st = SDS_get_i32(12200);&lt;br /&gt;
      if ((st == 0) || (st == -2)) break;&lt;br /&gt;
      if ((SDS_get_u32(45) - t0) &amp;gt; 5000) break;&lt;br /&gt;
      wait(10);&lt;br /&gt;
    }&lt;br /&gt;
    wait(500);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  mqtt_connect(192, 168, 3, 99, 1883, &amp;quot;my-sds&amp;quot;, &amp;quot;user&amp;quot;, &amp;quot;password&amp;quot;, 60);&lt;br /&gt;
  t0 = SDS_get_u32(45);&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    st = SDS_get_i32(12200);&lt;br /&gt;
    if (st == 4) break;&lt;br /&gt;
    if (st &amp;lt; 0) return 0;&lt;br /&gt;
    if ((SDS_get_u32(45) - t0) &amp;gt; 15000) return 0;&lt;br /&gt;
    wait(10);&lt;br /&gt;
  }&lt;br /&gt;
  if (SDS_get_i32(12201) != 0) { mqtt_disconnect(); return 0; }&lt;br /&gt;
  return 2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hodnoty v systémových indexech ==&lt;br /&gt;
&lt;br /&gt;
Pomocí SDS_set_u32() lze zapsat následující hodnoty (a pomoci SDS_get_u32() je zpátky přečíst):&lt;br /&gt;
&lt;br /&gt;
 SDS_get_u32(11198)    hodnota zapsaná do MQTT PUBLISH Fixed Header&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
  0b0011dqqr : d=DUP, qq=QOS, r=RETAIN   ( výchozí hodnota je 0b00110001 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Významy údajů vrácených funkcí SDS_get_i32() pro MQTT klienta: '''Hodnoty jsou jen pro čtení (read-only).'''&lt;br /&gt;
&lt;br /&gt;
 SDS_get_i32(12200)    stav průběhu mqtt_connect()&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
                   -7 = obdrželi jsme CONNACK, ale negativní = nepřipojeno ( výsledek viz 12201 )&lt;br /&gt;
                   -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                   -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                   -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                   -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                   -2 = pokus o TCP připojení selhal&lt;br /&gt;
                   -1 = nepoužito&lt;br /&gt;
                    0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                    1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                    2 = TCP připojeno a odeslán CONNECT požadavek&lt;br /&gt;
                    4 = obdrželi jsme CONNACK, připojeno ( výsledek viz 12201 )&lt;br /&gt;
                    8 = probíhá odpojování, čekáme na výsledek (na odpojení)&lt;br /&gt;
&lt;br /&gt;
 SDS_get_i32(12201)    výsledek mqtt_connect() = hodnota &amp;quot;CONNACK Connect Return&amp;quot;&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
                   -7 = nepoužito&lt;br /&gt;
                   -6 = timeout při čekání na CONNACK, nepřipojeno&lt;br /&gt;
                   -5 = nepoužito&lt;br /&gt;
                   -4 = nepoužito&lt;br /&gt;
                   -3 = nepoužito&lt;br /&gt;
                   -2 = probíhá připojování, čekáme na CONNACK (zatím nepřišel)&lt;br /&gt;
                   -1 = idle, nepřipojeno&lt;br /&gt;
                    0 = (výsledek:) MQTT 0x00: broker akceptoval připojení - LZE POKRAČOVAT (provádět Publish, Subscribe)&lt;br /&gt;
                    1 = MQTT 0x01: Connection Refused, unacceptable protocol version&lt;br /&gt;
                    2 = MQTT 0x02: Connection Refused, identifier rejected&lt;br /&gt;
                    3 = MQTT 0x03: Connection Refused, Server unavailable&lt;br /&gt;
                    4 = MQTT 0x04: Connection Refused, bad user name or password&lt;br /&gt;
                    5 = MQTT 0x05: Connection Refused, not authorized&lt;br /&gt;
&lt;br /&gt;
 SDS_get_i32(12202)    výsledek pro tyto funkce: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
                   -8 = SUBACK dorazil z Broker ale s indikovanou chybou (Failure Bit), můžete volat další funkci&lt;br /&gt;
                   -7 = vybraná položka (řádek) subscribe tabulky je prázdná, není co odhlašovat&lt;br /&gt;
                   -6 = timeout (možnosti: publish neprovedeno, nebo: SUBACK vůbec nedorazil, nebo: UNSUBACK vůbec nedorazil), můžete volat další funkci&lt;br /&gt;
                   -5 = nespravne parametry (hodnoty, např. index) např. jejich celková délka se nevleze do paketu&lt;br /&gt;
                   -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                   -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                   -2 = SDS není připojeno k brokeru (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                   -1 = bez aktivity&lt;br /&gt;
                    0 = nepoužito&lt;br /&gt;
                    1 = mqtt_publish() probíhá&lt;br /&gt;
                    2 = mqtt_publish() hotovo (OK - obdržen TCP ACK), můžete volat další funkci&lt;br /&gt;
                    4 = mqtt_subscribe() probíhá - čekám na SUBACK&lt;br /&gt;
                    8 = SUBACK dorazil z Broker, bez chyby (OK), můžete volat další funkci&lt;br /&gt;
                   16 = čekám na UNSUBACK (pouze pro unsubscribe funkce)&lt;br /&gt;
                   32 = UNSUBACK dorazil z Brokera, můžete volat další funkce&lt;br /&gt;
&lt;br /&gt;
 SDS_get_i32(12203)    počet chyb v přijatých datech MQTT protokolu (data z Brokeru) (chyba způsobí zavření spojení)&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Známé chyby ve firmware ===&lt;br /&gt;
&lt;br /&gt;
V průběhu provozu řady SDS bylo mnoha uživateli testováno, jak se MQTT v SDS chová. Byly nalezeny různé záležitosti, které se průběžně v nových vydáních firmware řeši a opravují.&lt;br /&gt;
&lt;br /&gt;
Pokud však máte starší firmware, nebo ještě pokud nebyl vůbec opravený firmware vydán, musíte tato omezení znát a použít opravné postupy ve vlastním FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
'''Délka odeslání MQTT dat do brokeru'''&lt;br /&gt;
&lt;br /&gt;
Původní firmware může mít až půl sekundy zpoždění mezi zavoláním funkce mqtt_publish() a skutečným odesláním příslušného paketu do sítě. To je řešeno v novém firmware, ale pokud jej nemáte, musíte svůj FC program psát tak, aby s tímto uměl správně pracovat. &lt;br /&gt;
&lt;br /&gt;
'''Špatné předání chybových stavů'''&lt;br /&gt;
&lt;br /&gt;
Je-li zavoláno mqtt_publish() nebo mqtt_subscribe() nebo mqtt_unsubscribe_*(), zapíše to -3 do indexu [12200] namísto správného indexu [12202].&lt;br /&gt;
Takže [12200] zůstane s obsahem -3, i když tam ta hodnota nemá co dělat. Toto má pak důsledek v tom, že pokud váš program testuje [12200] na hodnotu 4 tak ji tam neuvidí a bude si nesprávně myslet, že došlo k odpojení SDS od brokeru.&amp;lt;br&amp;gt;&lt;br /&gt;
''Toto je opraveno v novém firmware (11/2026 a novější).''&lt;br /&gt;
&lt;br /&gt;
Správně to má být: &amp;lt;br&amp;gt;&lt;br /&gt;
* [12200] a [12201] = pouze pro mqtt_connect a mqtt_disconnect&amp;lt;br&amp;gt;&lt;br /&gt;
* [12202] = pouze pro mqtt_publish, mqtt_subscribe, mqtt_unsubscribe_* atd.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ve starším firmware byla chyba, kdy místo do [12202] se některé chybové stavy (záporné hodnoty např. -3, -5, -7 atd.) zapsaly nesprávně do [12200].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Po odpojení přes mqtt_disconnect() občas dojde k předání chyby výpadku TCP spojení'''&lt;br /&gt;
&lt;br /&gt;
Toto je vlastnost, která se týká sítě, a nelze ji vždy vyloučit.&lt;br /&gt;
&lt;br /&gt;
Po zavolání mqtt_disconnect() může postupně dojít k zápisu hodnoty -2 do [12200] (ihned po zavolání je zapsáno 32 do [12200], a pak proběhne ukončení TCP spojení, které může ve svém postupu zapsat -2).&lt;br /&gt;
&lt;br /&gt;
Proto pozor při použití testu &amp;lt;pre&amp;gt;SDS_get_i32(12200) != 4&amp;lt;/pre&amp;gt; , protože to může vyhodnotit v podstatě správné ukončení spojení jako chybu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konec stránky.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_MQTT_functions&amp;diff=986</id>
		<title>FULL-C: MQTT functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_MQTT_functions&amp;diff=986"/>
		<updated>2026-10-31T10:07:49Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FULL-C&lt;br /&gt;
&lt;br /&gt;
== Síťové funkce: komunikace MQTT (klient) ve FULL-C ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
Zařízení SDS umožňuje komunikovat s MQTT brokerem, tedy SDS lze  provozovat jako MQTT klienta.&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem jsou k dispozici tyto funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.&lt;br /&gt;
         void mqtt_connect(unsigned int IP0, unsigned int IP1, unsigned int IP2, unsigned int IP3, unsigned int TCPport, char *ClientID, char *username, char *password, unsigned int KeepAliveSec);&lt;br /&gt;
         void mqtt_disconnect(void);&lt;br /&gt;
         void mqtt_publish(char *FullTopicName, char *Value);&lt;br /&gt;
         void mqtt_subscribe(unsigned int TableIndex, char *FullTopicName);&lt;br /&gt;
         void mqtt_unsubscribe_index(unsigned int TableIndex);&lt;br /&gt;
         void mqtt_unsubscribe_name(char *FullTopicName);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Proměnné IP0 až IP3 skládají (po částech) dohromady konkrétní IP adresu (IP0.IP1.IP2.IP3), ke které se SDS (MQTT klient) připojí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
 [[MQTT|Veškerý popis využití MQTT je na této stránce (odkaz je zde).]]&lt;br /&gt;
&lt;br /&gt;
Implementace ve FULL-C odpovídá implementaci v SDS-C, jediný rozdíl je popsán zde:&lt;br /&gt;
* SDS-C: přístup k údajům se provádí přes systémovou proměnnou sys[2199] až sys[2321] &lt;br /&gt;
* FULL-C: přístup k údajům se provádí přes [[FULL-C: set_and_get|SDS_get_i32() respektive SDS_get_u32()]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příklady ==&lt;br /&gt;
&lt;br /&gt;
Základní připojení k brokeru, publikování položky a odpojení:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
. &lt;br /&gt;
 // *** CONNECT&lt;br /&gt;
 &lt;br /&gt;
 // connect on start&lt;br /&gt;
 printf(&amp;quot;connecting to MQTT broker...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 //           ip   ip   ip ip   port  client-id          username   password    reserved&lt;br /&gt;
 mqtt_connect(192, 168, 1, 253, 1883, &amp;quot;sds-client-1234&amp;quot;, &amp;quot;sds1234&amp;quot;, &amp;quot;password&amp;quot;, 0);&lt;br /&gt;
 &lt;br /&gt;
 // now wait for a complete connection:&lt;br /&gt;
 &lt;br /&gt;
 // done - connected ?&lt;br /&gt;
 while (SDS_get_i32(12200) != 4) &lt;br /&gt;
 {&lt;br /&gt;
   // any error - did it fail ?&lt;br /&gt;
   if (SDS_get_i32(12200) &amp;lt; 0) goto mqtt_conn_fail;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // OK, done, so now:&lt;br /&gt;
 // test the CONNACK result - see &amp;quot;3.2.2.3 Connect Return code&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 if (SDS_get_i32(12201) != 0) goto mqtt_conn_fail;&lt;br /&gt;
 &lt;br /&gt;
 // CONNECTED OK ! (result is 0x00)&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;connected to broker OK, result in 12200=%d\n&amp;quot;, SDS_get_i32(12200));&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // *** PUBLISH&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;publishing...&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 mqtt_publish(&amp;quot;sds/temps/value1&amp;quot;, &amp;quot;123456&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 // wait until done&lt;br /&gt;
 while (SDS_get_i32(12202) == 1)&lt;br /&gt;
 {&lt;br /&gt;
   // disconnected ?&lt;br /&gt;
   if (SDS_get_i32(12200) &amp;lt; 0) goto mqtt_conn_fail;    &lt;br /&gt;
 }&lt;br /&gt;
  &lt;br /&gt;
 // was it success ?&lt;br /&gt;
 if (SDS_get_i32(12202) != 2)&lt;br /&gt;
 { &lt;br /&gt;
   // it FAILED&lt;br /&gt;
   printf(&amp;quot;publish error = %d\n&amp;quot;, SDS_get_i32(12202)); &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;OK\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // *** DISCONNECT&lt;br /&gt;
 &lt;br /&gt;
 mqtt_disconnect();&lt;br /&gt;
 &lt;br /&gt;
 // todo: wait for disconnection result !!!&lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 return;&lt;br /&gt;
 &lt;br /&gt;
 //&lt;br /&gt;
 mqtt_conn_fail:&lt;br /&gt;
 &lt;br /&gt;
  printf(&amp;quot;connection to broker - FAILED \n&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samozřejmě si z příkladu vyberete jednotlivé části tak, jak zapadají do vašeho programu. Připojení je potřeba provést &amp;quot;jen jednou&amp;quot; na začátku, a SDS automaticky udržuje spojení (MQTT PING, tedy formou protokolového keep alive) až do buď (1.) uzavření spojení nebo (2.) výpadku síťového připojení (např. odpojení ETH kabelu z SDS) nebo (3.) specifické závažné chybě při komunikace mezi SDS a brokerem/serverem. Pokud by došlo ke ztrátě spojení (což se může stát), je toto předáno formou chybového hlášení (čtení patřičného indexu pomoci SDS_get funkce), a celý proces připojení a subscribe je potřeba samozřejmě zopakovat. Je proto nezbytné trvale kontrolovat příslušné systémové indexy.&lt;br /&gt;
&lt;br /&gt;
Je-li SDS připojeno, lze provádět neomezené publikování hodnot, a také se lze přihlásit k odběru (subscribe).&lt;br /&gt;
&lt;br /&gt;
SDS nabízí možnost využít svou tabulku přihlášení (subscribe table), kam si vložíte položky které vás zajímají (každou pod jiným indexem) a SDS bude pro tyto položky trvale udržovat jejich aktuální hodnoty (values), tak jak je bude broker do SDS posílat. Váš program se pak kdykoliv do tabulky může podívat a přečíst si aktuální stav. Samozřejmě použití tabulky není nutnost, ale bez ní můžete přijít o aktualizaci, pokud ji svým programem nezachytíte.&lt;br /&gt;
&lt;br /&gt;
Příklad přihlášení k odběru:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // note. SDS shall be connected to a broker, at this point&lt;br /&gt;
 &lt;br /&gt;
 // *** let us subscribe to a topic:&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;subscribing...&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 // for this example, we choose index '1':&lt;br /&gt;
 mqtt_subscribe(1, &amp;quot;ha/output/q1/state&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 // wait for result&lt;br /&gt;
 while (SDS_get_i32(12202) == 4)&lt;br /&gt;
 {&lt;br /&gt;
   // disconnected ?&lt;br /&gt;
   if (SDS_get_i32(12200) &amp;lt; 0) goto mqtt_conn_fail;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 // success ?&lt;br /&gt;
 if (SDS_get_i32(12202) != 8)&lt;br /&gt;
 { &lt;br /&gt;
   // failed...&lt;br /&gt;
   printf(&amp;quot;sub error = %d\n&amp;quot;, SDS_get_i32(12202)); &lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 // OK we ARE subscribed !&lt;br /&gt;
 &lt;br /&gt;
 printf(&amp;quot;OK\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 // *** example: watch for updates coming from broker, and print it to console&lt;br /&gt;
 &lt;br /&gt;
 unsigned int last1;&lt;br /&gt;
 char tn[32+1];&lt;br /&gt;
 char tv[32+1];&lt;br /&gt;
 &lt;br /&gt;
 last1 = 0;&lt;br /&gt;
 &lt;br /&gt;
 while(1)&lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
   // any change ? (any new message from broker, processed by SDS ?)&lt;br /&gt;
   if (last1 != SDS_get_u32(12291))  // 12291 is a timestamp for index #1&lt;br /&gt;
   {&lt;br /&gt;
      // store so we can compare it later, again&lt;br /&gt;
      last1 = SDS_get_u32(12291);&lt;br /&gt;
 &lt;br /&gt;
      // read Topic Name (tn) and the new Value (tv)&lt;br /&gt;
      SDS_get_a(12211, &amp;amp;tn, 32);&lt;br /&gt;
      SDS_get_a(12251, &amp;amp;tv, 32);&lt;br /&gt;
 &lt;br /&gt;
      // print to console&lt;br /&gt;
      printf(&amp;quot;TOPIC #1: %s update to: %s \n&amp;quot;, tn, tv);&lt;br /&gt;
  };&lt;br /&gt;
 &lt;br /&gt;
  // always check the connection state&lt;br /&gt;
  if (SDS_get_i32(12200) &amp;lt; 0)&lt;br /&gt;
  {  &lt;br /&gt;
    // disconnected&lt;br /&gt;
    printf(&amp;quot;disconn\n&amp;quot;); break;&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 // continue loop&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 ...&lt;br /&gt;
 &lt;br /&gt;
 // *** unsubscribe&lt;br /&gt;
 mqtt_unsubscribe_index(1);&lt;br /&gt;
 &lt;br /&gt;
 // todo: wait for result !&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Další příklady budou eventuálně doplněny, požadavky na ně předejte přes forum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Udržování spojení ===&lt;br /&gt;
&lt;br /&gt;
PŘÍKLAD VE FULL-C:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// MQTT: make sure the broker is connected, reconnect if needed (blocks up to ~20 s)&lt;br /&gt;
// returns 1 = connected, 2 = freshly reconnected (subscribe again!), 0 = failed&lt;br /&gt;
int mq_link(void)&lt;br /&gt;
{&lt;br /&gt;
  int st;&lt;br /&gt;
  unsigned int t0;&lt;br /&gt;
&lt;br /&gt;
  st = SDS_get_i32(12200);&lt;br /&gt;
  if (st == 4) return 1;&lt;br /&gt;
&lt;br /&gt;
  // not connected or status damaged (e.g. -3 after a too-early call): clean up first&lt;br /&gt;
  if ((st != 0) &amp;amp;&amp;amp; (st != -2))&lt;br /&gt;
  {&lt;br /&gt;
    mqtt_disconnect();&lt;br /&gt;
    t0 = SDS_get_u32(45);&lt;br /&gt;
    for (;;)&lt;br /&gt;
    {&lt;br /&gt;
      st = SDS_get_i32(12200);&lt;br /&gt;
      if ((st == 0) || (st == -2)) break;&lt;br /&gt;
      if ((SDS_get_u32(45) - t0) &amp;gt; 5000) break;&lt;br /&gt;
      wait(10);&lt;br /&gt;
    }&lt;br /&gt;
    wait(500);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  mqtt_connect(192, 168, 3, 99, 1883, &amp;quot;my-sds&amp;quot;, &amp;quot;user&amp;quot;, &amp;quot;password&amp;quot;, 60);&lt;br /&gt;
  t0 = SDS_get_u32(45);&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    st = SDS_get_i32(12200);&lt;br /&gt;
    if (st == 4) break;&lt;br /&gt;
    if (st &amp;lt; 0) return 0;&lt;br /&gt;
    if ((SDS_get_u32(45) - t0) &amp;gt; 15000) return 0;&lt;br /&gt;
    wait(10);&lt;br /&gt;
  }&lt;br /&gt;
  if (SDS_get_i32(12201) != 0) { mqtt_disconnect(); return 0; }&lt;br /&gt;
  return 2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hodnoty v systémových indexech ==&lt;br /&gt;
&lt;br /&gt;
Pomocí SDS_set_u32() lze zapsat následující hodnoty (a pomoci SDS_get_u32() je zpátky přečíst):&lt;br /&gt;
&lt;br /&gt;
 SDS_get_u32(11198)    hodnota zapsaná do MQTT PUBLISH Fixed Header&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
  0b0011dqqr : d=DUP, qq=QOS, r=RETAIN   ( výchozí hodnota je 0b00110001 )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Významy údajů vrácených funkcí SDS_get_i32() pro MQTT klienta: '''Hodnoty jsou jen pro čtení (read-only).'''&lt;br /&gt;
&lt;br /&gt;
 SDS_get_i32(12200)    stav průběhu mqtt_connect()&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
                   -7 = obdrželi jsme CONNACK, ale negativní = nepřipojeno ( výsledek viz 12201 )&lt;br /&gt;
                   -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                   -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                   -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                   -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                   -2 = pokus o TCP připojení selhal&lt;br /&gt;
                   -1 = nepoužito&lt;br /&gt;
                    0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                    1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                    2 = TCP připojeno a odeslán CONNECT požadavek&lt;br /&gt;
                    4 = obdrželi jsme CONNACK, připojeno ( výsledek viz 12201 )&lt;br /&gt;
                    8 = probíhá odpojování, čekáme na výsledek (na odpojení)&lt;br /&gt;
&lt;br /&gt;
 SDS_get_i32(12201)    výsledek mqtt_connect() = hodnota &amp;quot;CONNACK Connect Return&amp;quot;&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
                   -7 = nepoužito&lt;br /&gt;
                   -6 = timeout při čekání na CONNACK, nepřipojeno&lt;br /&gt;
                   -5 = nepoužito&lt;br /&gt;
                   -4 = nepoužito&lt;br /&gt;
                   -3 = nepoužito&lt;br /&gt;
                   -2 = probíhá připojování, čekáme na CONNACK (zatím nepřišel)&lt;br /&gt;
                   -1 = idle, nepřipojeno&lt;br /&gt;
                    0 = (výsledek:) MQTT 0x00: broker akceptoval připojení - LZE POKRAČOVAT (provádět Publish, Subscribe)&lt;br /&gt;
                    1 = MQTT 0x01: Connection Refused, unacceptable protocol version&lt;br /&gt;
                    2 = MQTT 0x02: Connection Refused, identifier rejected&lt;br /&gt;
                    3 = MQTT 0x03: Connection Refused, Server unavailable&lt;br /&gt;
                    4 = MQTT 0x04: Connection Refused, bad user name or password&lt;br /&gt;
                    5 = MQTT 0x05: Connection Refused, not authorized&lt;br /&gt;
&lt;br /&gt;
 SDS_get_i32(12202)    výsledek pro tyto funkce: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
                   -8 = SUBACK dorazil z Broker ale s indikovanou chybou (Failure Bit), můžete volat další funkci&lt;br /&gt;
                   -7 = vybraná položka (řádek) subscribe tabulky je prázdná, není co odhlašovat&lt;br /&gt;
                   -6 = timeout (možnosti: publish neprovedeno, nebo: SUBACK vůbec nedorazil, nebo: UNSUBACK vůbec nedorazil), můžete volat další funkci&lt;br /&gt;
                   -5 = nespravne parametry (hodnoty, např. index) např. jejich celková délka se nevleze do paketu&lt;br /&gt;
                   -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                   -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                   -2 = SDS není připojeno k brokeru (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                   -1 = bez aktivity&lt;br /&gt;
                    0 = nepoužito&lt;br /&gt;
                    1 = mqtt_publish() probíhá&lt;br /&gt;
                    2 = mqtt_publish() hotovo (OK - obdržen TCP ACK), můžete volat další funkci&lt;br /&gt;
                    4 = mqtt_subscribe() probíhá - čekám na SUBACK&lt;br /&gt;
                    8 = SUBACK dorazil z Broker, bez chyby (OK), můžete volat další funkci&lt;br /&gt;
                   16 = čekám na UNSUBACK (pouze pro unsubscribe funkce)&lt;br /&gt;
                   32 = UNSUBACK dorazil z Brokera, můžete volat další funkce&lt;br /&gt;
&lt;br /&gt;
 SDS_get_i32(12203)    počet chyb v přijatých datech MQTT protokolu (data z Brokeru) (chyba způsobí zavření spojení)&lt;br /&gt;
 --------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Známé chyby ve firmware ===&lt;br /&gt;
&lt;br /&gt;
V průběhu provozu řady SDS bylo mnoha uživateli testováno, jak se MQTT v SDS chová. Byly nalezeny různé záležitosti, které se průběžně v nových vydáních firmware řeši a opravují.&lt;br /&gt;
&lt;br /&gt;
Pokud však máte starší firmware, nebo ještě pokud nebyl vůbec opravený firmware vydán, musíte tato omezení znát a použít opravné postupy ve vlastním FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
'''Délka odeslání MQTT dat do brokeru'''&lt;br /&gt;
&lt;br /&gt;
Původní firmware může mít až půl sekundy zpoždění mezi zavoláním funkce mqtt_publish() a skutečným odesláním příslušného paketu do sítě. To je řešeno v novém firmware, ale pokud jej nemáte, musíte svůj FC program psát tak, aby s tímto uměl správně pracovat. &lt;br /&gt;
&lt;br /&gt;
'''Špatné předání chybových stavů'''&lt;br /&gt;
&lt;br /&gt;
Je-li zavoláno mqtt_publish() nebo mqtt_subscribe() nebo mqtt_unsubscribe_*(), zapíše to -3 do indexu [12200] namísto správného indexu [12202].&lt;br /&gt;
Takže [12200] zůstane s obsahem -3, i když tam ta hodnota nemá co dělat. Toto má pak důsledek v tom, že pokud váš program testuje [12200] na hodnotu 4 tak ji tam neuvidí a bude si nesprávně myslet, že došlo k odpojení SDS od brokeru.&amp;lt;br&amp;gt;&lt;br /&gt;
''Toto je opraveno v novém firmware (11/2026 a novější).''&lt;br /&gt;
&lt;br /&gt;
Správně to má být: &amp;lt;br&amp;gt;&lt;br /&gt;
* [12200] a [12201] = pouze pro mqtt_connect a mqtt_disconnect&amp;lt;br&amp;gt;&lt;br /&gt;
* [12202] = pouze pro mqtt_publish, mqtt_subscribe, mqtt_unsubscribe_* atd.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ve starším firmware byla chyba, kdy místo do [12202] se některé chybové stavy (záporné hodnoty např. -3, -5, -7 atd.) zapsaly nesprávně do [12200].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Po odpojení přes mqtt_disconnect() občas dojde k předání chyby výpadku TCP spojení'''&lt;br /&gt;
&lt;br /&gt;
Toto je vlastnost, která se týká sítě, a nelze ji vždy vyloučit.&lt;br /&gt;
&lt;br /&gt;
Po zavolání mqtt_disconnect() může postupně dojít k zápisu hodnoty -2 do [12200] (ihned po zavolání je zapsáno 32 do [12200], a pak proběhne ukončení TCP spojení, které může ve svém postupu zapsat -2).&lt;br /&gt;
&lt;br /&gt;
Proto pozor při použití testu &amp;lt;pre&amp;gt;if (sys[2200] &amp;lt;= 0) goto error;&amp;lt;/pre&amp;gt; , protože to může vyhodnotit v podstatě správné ukončení spojení jako chybu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Konec stránky.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=MQTT&amp;diff=985</id>
		<title>MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=MQTT&amp;diff=985"/>
		<updated>2026-10-31T10:07:38Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
 MQTT klient je dostupný pro První i Druhou Produktovou Řadu zařízení SDS.  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MQTT is a Client Server publish/subscribe messaging transport protocol.&lt;br /&gt;
&lt;br /&gt;
MQTT je tedy jednou z možných variant jak přenášet údaje mezi SDS (&amp;quot;MQTT client&amp;quot;) a centrálním serverem (&amp;quot;MQTT broker&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
SDS podporují MQTT komunikaci za předpokladu, že máte nainstalován aktuální firmware.&lt;br /&gt;
&lt;br /&gt;
MQTT komunikace se provádí pomocí příslušných SDS-C / FULL-C funkcí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== K čemu je MQTT dobré ===&lt;br /&gt;
&lt;br /&gt;
Postupem času se MQTT ustálilo jako nejjednodušší řešení centrálního bodu pro sběr a distribuci jednoduchých dat a údajů. &lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro složitější aplikace už není vhodný, ale např. pro malou domácí automatizaci, v rámci domácí sítě, je to akorát.&lt;br /&gt;
&lt;br /&gt;
Modelový příklad: máte doma řadu chytrých zařízení které chceta navzájem provázat a to ideálně bez přidaných nákladů. Pokud tato zařízení umí komunikovat pomocí MQTT přes TCP protokol, pak vám stačí spustit MQTT Broker (např. na rPI) a všechna zařízení v tu chvíli mohou spolu instantně komunikovat stylem postupného předávání hodnot.&lt;br /&gt;
&lt;br /&gt;
MQTT pracuje na principu &amp;quot;položka - hodnota&amp;quot; (TOPIC - VALUE). Je to takový neomezený seznam o dvou sloupcích a mnoha řádcích (tolik řádků kolik různyćh položek). Do tohoto seznamu můžete odkudkoliv zapisovat a tím měnit jednotlivé hodnoty nebo přidávat nové položky. A také se můžete jako klient přihlásit k odběru změn (jiný klient zapíše novou hodnotu a připojení přihlášení klienti ji dostanou).&lt;br /&gt;
&lt;br /&gt;
Každou položku je potřeba založit - to se stane automaticky při prvním zápisu (klient vždy zapisuje ten pár Topic-Value). Pokud už položka existuje, tak se při zápisu jen změní její hodnota.&lt;br /&gt;
&lt;br /&gt;
Zpátky k příkladu.&lt;br /&gt;
&lt;br /&gt;
Mějme spoustu modulů SDS které jsou všichni MQTT klienti, připojení ke společnému MQTT brokeru (server spuštěný např. na rPI). První SDS měří teplotu a pravidelně publikuje její hodnotu na MQTT broker, do položky &amp;quot;teplota1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Deset dalších SDS je přihlášeno k odběru (subscribe) této položky &amp;quot;teplota1&amp;quot;, a každé toto přihlášené SDS obdrží všechny nové zapsané hodnoty do této položky (které tam píše to první SDS) a na základě této hodnoty mohou provádět nějakou regulační činnost.&lt;br /&gt;
&lt;br /&gt;
Tím se elegantně vyřešení komunikace z prvního SDS do dalších deseti, aniž by se muselo řešit jak to složitě bez MQTT provádět.&lt;br /&gt;
&lt;br /&gt;
Samozřejmě toto je jen jednoduchý příklad, protože typicky MQTT systém bývá mnohem složitější - ale stále stejně snadno realizovatelný (univerzální princip Publish/Subscribe).&lt;br /&gt;
&lt;br /&gt;
Vždy je potřeba, aby v SDS byl nahrán aktuální FW, který MQTT podporuje - pro SDS-C to lze ověřit přes sys[2199].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Příklad: SDS a Node-RED ===&lt;br /&gt;
&lt;br /&gt;
Node-RED je jedním z velice oblíbených nástrojů pro beznákladovou realizaci složitější automatizace.&lt;br /&gt;
&lt;br /&gt;
Ze systému [[https://cookbook.nodered.org/mqtt/connect-to-broker Node-RED]] lze SDS plně ovládat - a to formou obousměrné komunikace přes MQTT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Příklad: SDS a SolPIPlog ===&lt;br /&gt;
&lt;br /&gt;
SolPIPlog je program pro monitorování FVE měničů (MPP Solar). SDS umí s tímto programem komunikovat přes MQTT. Příkladem je např. přepínání režimu (SOL/BAT) podle stavu HDO (který SDS zjistí přes svůj optovstup, kam se připojí kontajt relé od HDO).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě MQTT má neomezené možnosti a dva zmíněné příklady jsou opravdu jen nástřelem toho, co se dá realizovat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Specifikace ==&lt;br /&gt;
&lt;br /&gt;
SDS podporuje základní MQTT 3.1.1 protokol (Level4), nad TCP; toto je současný průmyslový standard. Implementace odpovídá http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html .&lt;br /&gt;
&lt;br /&gt;
Klíčové funkcionality protokolu, které lze vyvolat z SDS programu:&lt;br /&gt;
* CONNECT&lt;br /&gt;
* DISCONNECT&lt;br /&gt;
* PUBLISH&lt;br /&gt;
* SUBSCRIBE (+ ACK)&lt;br /&gt;
* UNSUBSCRIBE (+ ACK)&lt;br /&gt;
* PINGREQ (+ PINGRESP)&lt;br /&gt;
&lt;br /&gt;
Interně SDS automaticky provándí MQTT PING směrem do Broker.&lt;br /&gt;
&lt;br /&gt;
Všechny texty jsou přenášeny ve formátu UTF-8.&lt;br /&gt;
&lt;br /&gt;
V tuto chvíli není implementováno WILL MESSAGE.&lt;br /&gt;
&lt;br /&gt;
QoS je v režimu 0x00.&lt;br /&gt;
&lt;br /&gt;
Keep-Alive je ve výchozím nastavení 120 sekund a odesílání PINGREQ tedy co 96 sekund. Toto nastavení lze změnit při připojení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Použití ==&lt;br /&gt;
&lt;br /&gt;
Použití MQTT máte v rámci SDS plně pod svou kontrolou, tím, že si vše ovládnete ve svém programu. MQTT tedy v rámci SDS není uzavřeno do webového rozhraní apod., právě naopak, je plně k dispozici.&lt;br /&gt;
&lt;br /&gt;
Standardní postup je následující:&lt;br /&gt;
* 1. otevřete spojení z SDS (klient) na MQTT server (broker)  &lt;br /&gt;
* 2. - podle potřeby odešlete data z SDS na server (funkce PUBLISH)&lt;br /&gt;
* 3. - podle potřeby se přihlásíte k odběru dat ze serveru (funkce SUBSCRIBE)&lt;br /&gt;
* 4. až nebude spojení na server potřeba, odpojíte se&lt;br /&gt;
&lt;br /&gt;
Všechny čtyři body se ovládají voláním patřičných funkcí v programu, s vhodnými parametry, a se správným zpracováním výsledných hodnot.&lt;br /&gt;
&lt;br /&gt;
Dokud není zavolaná funkce hotová (to si musí program hlídat čtením patřičného sys[]), nesmí být zavolána další !&lt;br /&gt;
&lt;br /&gt;
'''Pozor:''' při každém novém startu SDS-C programu je MQTT Broker odpojen. Váš SDS-C program se tedy musí vždy nejprve připojit, aby mohl využívat další funkce pro komunikaci s brokerem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak vyvíjet a testovat ==&lt;br /&gt;
&lt;br /&gt;
Vývoj a testování vždy předchází plnému nasazení - je dobré si svůj program nejprve odladit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulátor SDSC.exe ===&lt;br /&gt;
&lt;br /&gt;
V okně &amp;quot;NETWORK&amp;quot; otevřete kartu &amp;quot;MQTT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zde lze simulovat chyby (neprovedené připojení, odmítnutí hesla) a tak odzkoušet robustnost svého SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Dále je zde seznam položek (Topics) které jednak SDS-C program publikoval, a také ke kterým je SDS-C program přihlášen (subscribe).&lt;br /&gt;
&lt;br /&gt;
Přihlášené položky jsou označeny číslem indexu do tabulky (#1 .. #31 - pozor, počet je různý pro různé SDS moduly).&lt;br /&gt;
&lt;br /&gt;
Změna hodnoty (value) pro každou položku je možná (buď poklepáním na řádek v seznamu, nebo tlačítkem &amp;quot;broker publish&amp;quot;). Ve všech těchto případech, po provedení změny, dojde k odeslání nové hodnoty do SDS-C programu (ale to samozřejmě jen za předpokladu že program je na daný topic přihlášen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Skutečné SDS ===&lt;br /&gt;
&lt;br /&gt;
Fyzický modul SDS lze samozřejmě připojit k reálnému MQTT brokeru.&lt;br /&gt;
&lt;br /&gt;
Při vývoji se může hodit pomocná stránka: 192.168.1.250/cgi_mqtt .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT Broker snadno a rychle ==&lt;br /&gt;
&lt;br /&gt;
Nainstalujte si Mosquitto MQTT broker na svůj počítač (Windows / Linux). Ověřeno to máme na Win7, Win10, a také na rPI a odroid.&lt;br /&gt;
&lt;br /&gt;
 https://mosquitto.org/download/&lt;br /&gt;
&lt;br /&gt;
Pro Windows, pak stačí spustit &amp;quot;C:\Program Files\mosquitto\mosquitto.exe&amp;quot;, který (při spuštění bez parametrů = výchozí stav) otevře prázdné konzolové okno a zůstane aktivní. V tuto chvíli máte na svém Win PC aktivní MQTT broker, a to na &amp;quot;localhost:1883&amp;quot; (dejte si pozor na firewall).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro Linux, rPI atd. platí jiný vhodný postup, ale výsledek je stejný.&lt;br /&gt;
&lt;br /&gt;
SDS pak lze na tento broker (server) připojit a provádět Publish a Subscribe.&lt;br /&gt;
&lt;br /&gt;
Pro kontrolu toho, jak se server chová a co vše v něm je (co tam SDS nebo jiní klienti poslali), tak je k dispozici vynikající nástroj MQTT Explorer.&lt;br /&gt;
 &lt;br /&gt;
 http://mqtt-explorer.com/&lt;br /&gt;
&lt;br /&gt;
Je opět zdarma a důrazně doporučuji se s ním seznámit a používat to.&lt;br /&gt;
&lt;br /&gt;
Umožňuje jednak plnou kontrolu položek (Topics) a jejich hodnot, ale také umí tyto položky ručně vytvořit nebo do nich zapsat (což se pak přenese do klientů kteří mají Subscribe na danou položku). Zkrátka ideální pro vývoj a testování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT broker v Internetu ==&lt;br /&gt;
&lt;br /&gt;
Pro bezpečnost je ideální mít svůj vlastní MQTT broker ve své síti. Stačí koupit malý Linuxový počítač (např. rPI) a tam MQTT broker nainstalovat a je to.&lt;br /&gt;
&lt;br /&gt;
Pokud si provedete vhodné nastavení své sítě a firewallu, lze k tomuto brokeru přistupovat i z Internetu.&lt;br /&gt;
&lt;br /&gt;
Toto je často žádoucí, např. máte-li svou domácí automatizaci která běží na MQTT a chcete ji dálkově ovládat a kontrolovat, např. z mobilní aplikace.&lt;br /&gt;
&lt;br /&gt;
Druhá možnost je využít nějaký veřejný MQTT broker, je jich plný Internet - ale toto přináší řadu bezpečnostních rizik a nedoporučujeme to. Když už mít broker na Internetu, tak na svém vlastním serveru.&lt;br /&gt;
&lt;br /&gt;
Důležité je, že SDS (MQTT klient) používá připojení k MQTT brokeru jako plain TCP, tedy nepoužívá v této verzi SSL/TLS (to až v budoucnu SDS třetí produktové řady).&lt;br /&gt;
&lt;br /&gt;
Proto je důležité umístit MQTT broker do vnitřní sítě (stejná síť na které jsou SDS), která je oddělena od sítě Internet bezpečným a spravně nastaveným firewallem.&lt;br /&gt;
&lt;br /&gt;
Takový MQTT broker pak může snadno obsluhovat všechny SDS a další klienty přes plain TCP spoje, a do Internetu může mít dodatečně zabezpečený TLS MQTT spoj. Takhle to nastavit jde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementace v SDS-C a FULL-C ==&lt;br /&gt;
&lt;br /&gt;
Názvy funkcí a postupy jsou pro oba programovací jazyky shodné.&lt;br /&gt;
&lt;br /&gt;
'''Rozdíl''' je v indexech:&lt;br /&gt;
* SDS-C má informace a údaje v sys[2199] až sys[2321]&lt;br /&gt;
* FULL-C má informace a údaje dostupné přes get funkci od indexu 12199 až 12321.&lt;br /&gt;
&lt;br /&gt;
Všimněte si, že význam indexů pro SDS-C (2199 až 2321) je 1:1 namapován na FULL-C indexy (12199 až 12321 - tedy FULL-C má pouze aplikováno pevné posunutí o 10000).&lt;br /&gt;
&lt;br /&gt;
 [[FULL-C: MQTT_functions|Detaily pro implementaci ve FULL-C (a příklady) naleznete zde.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vzorový program SDS-C - připojení a Publish ==&lt;br /&gt;
&lt;br /&gt;
Následující program je pro SDS První Produktové Řady, které se programují jazykem SDS-C.&lt;br /&gt;
&lt;br /&gt;
MQTT Broker je spuštěn (např. na rPI) na adrese 192.168.4.249 (a TCP portu 1883). Náš klient (SDS) se přihlásí jako uživatel &amp;quot;sds1234&amp;quot; s heslem &amp;quot;password&amp;quot;, a následně provede 2x PUBLISH a nakonec se odpojí.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // network communication shall be started only after the SDS is connected to network (ethernet is up)&lt;br /&gt;
 echo('waiting for network availability');&lt;br /&gt;
 &lt;br /&gt;
waiting_ethernet:&lt;br /&gt;
 if (sys[24] == 0) goto waiting_ethernet; // 0 = no ethernet&lt;br /&gt;
 if (sys[27] == 0) goto waiting_ethernet; // 0 = no IP address&lt;br /&gt;
 &lt;br /&gt;
 // OK, now we have an ethernet connection up and running&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 // EXAMPLE START:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // connect on start&lt;br /&gt;
 echo('connecting to MQTT Broker...');&lt;br /&gt;
&lt;br /&gt;
 //           ip   ip   ip ip   port  client-id          username   password    keepalive(sec)&lt;br /&gt;
 mqtt_connect(192, 168, 4, 249, 1883, 'sds-client-1234', 'sds1234', 'password', 120);&lt;br /&gt;
&lt;br /&gt;
 // wait for a complete connection&lt;br /&gt;
 label waiting_for_mqqt_conn:&lt;br /&gt;
  &lt;br /&gt;
 // error - failed ?&lt;br /&gt;
 if (sys[2200] &amp;lt;= 0) goto mqtt_conn_fail; // error ? (any negative number is error code)&lt;br /&gt;
&lt;br /&gt;
 // done - connected ?&lt;br /&gt;
 if (sys[2200] != 4) goto waiting_for_mqqt_conn; // success ? (yes only if == 4)&lt;br /&gt;
&lt;br /&gt;
 // test the CONNACK result - see &amp;quot;3.2.2.3 Connect Return code&amp;quot; - we expect &amp;quot;0&amp;quot; as OK&lt;br /&gt;
&lt;br /&gt;
 if (sys[2201] != 0) goto mqtt_conn_fail; // is broker's result code OK ? (OK only if == 0)&lt;br /&gt;
&lt;br /&gt;
 // connected (CONNACK result is 0x00)&lt;br /&gt;
&lt;br /&gt;
 echo('connected to broker: OK');&lt;br /&gt;
&lt;br /&gt;
 //&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 // example: let us publish three various topics&lt;br /&gt;
&lt;br /&gt;
 mqtt_publish('sds/teploty/cidlo1', sys[310]); &lt;br /&gt;
 w1: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w1;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 mqtt_publish('sds/teploty/cidlo2', sys[311]);&lt;br /&gt;
 w2: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w2;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
 &lt;br /&gt;
 mqtt_publish('sds/teploty/text_xyz', 'hello:', 1234, 'there');  // &amp;lt;- you can pass more than one parameter (all params will get joined together)&lt;br /&gt;
 w3: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w3;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 // ...&lt;br /&gt;
&lt;br /&gt;
 // and let us subscribe to a topic&lt;br /&gt;
 &lt;br /&gt;
 mqtt_subscribe(1, 'ha/output/q1/state');&lt;br /&gt;
 w4:&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;   // disconnected ?&lt;br /&gt;
 if (sys[2202] == 4) goto w4;              // still working ? &lt;br /&gt;
 if (sys[2202] != 8)                       // success ?&lt;br /&gt;
  { echo('sub error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 //...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // finally, once done - close the connection &lt;br /&gt;
&lt;br /&gt;
 // go&lt;br /&gt;
 mqtt_disconnect();&lt;br /&gt;
&lt;br /&gt;
 // we shall wait until the connection is properly closed&lt;br /&gt;
wait_for_disconnect:&lt;br /&gt;
 if (sys[2200] &amp;lt;= 0) goto error;                // error ?&lt;br /&gt;
 if (sys[2200] == 8) goto wait_for_disconnect;  // success, or still working ?&lt;br /&gt;
&lt;br /&gt;
 // done !&lt;br /&gt;
 echo('DISCONNECTED from broker');&lt;br /&gt;
&lt;br /&gt;
 wait(250);&lt;br /&gt;
&lt;br /&gt;
 // EXIT the example - we are DONE&lt;br /&gt;
 return;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // error handling&lt;br /&gt;
 label mqtt_conn_fail:&lt;br /&gt;
 echo('unable to connect... error=', sys[2200],' connack=', sys[2201]);&lt;br /&gt;
&lt;br /&gt;
 // error handling&lt;br /&gt;
 label error:&lt;br /&gt;
 echo('error');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pozn. mqtt_connect() - parametry:&lt;br /&gt;
* keepalive - hodnota 0 použije výchozí nastavení (120 sec), další platné hodnoty jsou 15 až 600 (sekund).&lt;br /&gt;
* client-id - vždy by to měla být unikátní identifikace vašeho SDS, typicky přidělena správcem MQTT Broker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vzorový program FULL-C - připojení a Publish ==&lt;br /&gt;
&lt;br /&gt;
Příklady pro FULL-C jsou na samostatné stránce: [[FULL-C: MQTT_functions]].&lt;br /&gt;
&lt;br /&gt;
Princip použití MQTT klient ve FULL-C je identický jako pro SDS-C, jen pozor na pevně posunuté indexy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Odesílání hodnot do Brokeru ==&lt;br /&gt;
&lt;br /&gt;
Je-li SDS úspěšně připojeno, pak lze odeslat libovolnou hodnotu libovolné položky (Topic) z SDS do Brokeru, který si ji uschová a který ji také předá všem dalším připojeným zařízením, které jsou k dané položce (Topic) přihlášeny (subscribed).&lt;br /&gt;
&lt;br /&gt;
Názvy položek musí být centrálně koordinované, aby celá akce dávala smysl. To už je na vás.&lt;br /&gt;
&lt;br /&gt;
'''Omezení je na současnou velikost (společnou délku) názvu položky (Topic Name) a její hodnoty (Value), což se spolu musí vlézt do nejvíce cca 1465 znaků.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
POZOR - před, a po zavolání funkce mqtt_publish() je žádoucí testovat stav sys[2202] ( respektive pro FULL-C: get(12202) ), a dokud tam nebude očekávaný výsledek nebo chybový kód, tak nevolat další mqtt_xxx funkce !&lt;br /&gt;
&lt;br /&gt;
Vždy musíte ve svém programu správně reagovat na všechny chybové stavy ve sys[2202] (respektive get 12202), je to váš úkol, SDS to za vás řešit nebude (a tím vám svazovat ruce).&lt;br /&gt;
&lt;br /&gt;
Funkce mqtt_publish() umožňuje skládání parametrů - první parametr je vždy název položky (topic name), a všechny zbylé jsou převedeny na společnou hodnotu (value).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   // you can use multiple parameters for the VALUE&lt;br /&gt;
   // only the very first parameter represents a TOPIC NAME&lt;br /&gt;
&lt;br /&gt;
   mqtt_publish('topicname', '1234', 'abcd', 'efgh', 'xyz');&lt;br /&gt;
&lt;br /&gt;
   // result: 'topicname' gets a new VALUE of '1234abcdefghxyz'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příjem hodnot z Brokeru ==&lt;br /&gt;
&lt;br /&gt;
SDS se umí přihlásit na odběr hodnot pro různé položky. Pokud je SDS takto přihlášeno, tak jakákoliv změna hodnoty na straně Brokera (např. způsobena zápisem jiného zařízení, aplikace, atd.), se prakticky ihned přenese do SDS, kde si aktualizovanou hodnotu může váš program zpracovat dle potřeby.&lt;br /&gt;
&lt;br /&gt;
Přihlášení se provádí pomocí funkce mqtt_subscribe(). Aby se to povedlo, musíte být úspěšně připojeni k Brokeru.&lt;br /&gt;
&lt;br /&gt;
Přihlásit se lze k libovolné položce (Topicu), jejíž celý textový název musíte samozřejmě znát.&lt;br /&gt;
&lt;br /&gt;
Pozor - všechny názvy položek jsou citlivé na malé a velké písmena (nejsou záměnné).&lt;br /&gt;
&lt;br /&gt;
Pozor - platné indexy jsou 1 až N (protože index 0 je vyhrazený pro aktuálně interně zpracovávanou položku, nelze jej využít pro program).&lt;br /&gt;
&lt;br /&gt;
'''PŘÍKLAD V SDS-C:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // SDS-C&lt;br /&gt;
&lt;br /&gt;
 // expectation: broker has to be already connected (see the previous example)&lt;br /&gt;
&lt;br /&gt;
 // let us:&lt;br /&gt;
 //  subscribe to a topic named: &amp;quot;control/rele1&amp;quot;, and let us assigned it a local index of 1&lt;br /&gt;
&lt;br /&gt;
 mqtt_subscribe(1, 'control/rele1');&lt;br /&gt;
&lt;br /&gt;
 // wait for the successful subscribe &lt;br /&gt;
 wS: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail; // disconnected (if any negative number)&lt;br /&gt;
 if (sys[2202] == 4) goto wS;            // still working... (done when != 4)&lt;br /&gt;
 if (sys[2202] != 8)                     // success ? (only if == 8, otherwise error or failure)&lt;br /&gt;
 { &lt;br /&gt;
   // FAILED -&amp;gt; not subscribed !&lt;br /&gt;
   echo('sub error = ', sys[2202]); &lt;br /&gt;
   return;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 // now, as we are subscribed, we will watch for any incoming update (value change), as in the following example:&lt;br /&gt;
&lt;br /&gt;
 var last1;&lt;br /&gt;
 last1 = 0;&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
&lt;br /&gt;
 // any change ? (any new message?)&lt;br /&gt;
 if (last1 != sys[2291])  // sys[2291] is a timestamp for index #1&lt;br /&gt;
  {&lt;br /&gt;
    // store so we can compare it later, again&lt;br /&gt;
    last1 = sys[2291];&lt;br /&gt;
&lt;br /&gt;
    // use the new value!&lt;br /&gt;
    echo('TOPIC #1: &amp;quot;',sys[2211],'&amp;quot; update to: &amp;quot;',sys[2251],'&amp;quot; ');&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto error; // disconnected&lt;br /&gt;
&lt;br /&gt;
 // continue loop&lt;br /&gt;
 goto loop;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 // ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // once we are not interesed in the topic any more, we can unsubscribe&lt;br /&gt;
 mqtt_unsubscribe_index(1);&lt;br /&gt;
&lt;br /&gt;
 // handle the job&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto error; // disconnected&lt;br /&gt;
 wU: &lt;br /&gt;
 if (sys[2202] &amp;lt; 0) goto error; // error (if any negative number)&lt;br /&gt;
 if (sys[2202] == 16) goto wU;  // waiting until done (done when result == 32)&lt;br /&gt;
&lt;br /&gt;
 echo('unsubscribed');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad přehledně ukazuje, jak systém funguje. Pro jednoduchost je zde hrubá nekonečná smyčka (loop) ale každý jistě vidí i své, jiné řešení vhodnější pro svůj vlastní program.&lt;br /&gt;
&lt;br /&gt;
Základní princip je v používání SDS indexů #1 až #31, kterým přiřazujeme jednotlivé přihlášené položky (subscribed topics).&lt;br /&gt;
&lt;br /&gt;
Je na tvůrci programu, jak indexy využije a kterému indexu přiřadí jaký název položky (topic name). A konkrétní názvy položek vždy záleží na celém systémovém návrhu, kde SDS je zcela transparentní.&lt;br /&gt;
&lt;br /&gt;
Z principu MQTT protokolu, jsou hodnoty vždy uvedeny jako textový řetězec. Např. pomocí SDS-C funkce atoi to ale snadno převedete na číslo, se kterým lze dále pracovat, je-li to potřeba.&lt;br /&gt;
&lt;br /&gt;
Funkce umožňuje skládání parametrů - první parametr je vždy index, a všechny zbylé jsou převedeny na název položky (topic name).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
POZOR - před, a po zavolání funkce mqtt_subscribe() je žádoucí testovat stav sys[2202] (respektive get 12202), a dokud tam nebude očekávaný výsledek nebo chybový kód, tak nevolat další mqtt_xxx funkce !&lt;br /&gt;
&lt;br /&gt;
Vždy musíte ve svém SDS-C programu správně reagovat na všechny chybové stavy ve sys[2202] (respektive get 12202), je to váš úkol, SDS to za vás řešit nebude (a tím vám svazovat ruce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Délka odeslání MQTT dat do brokeru ===&lt;br /&gt;
&lt;br /&gt;
Původní firmware může mít až půl sekundy zpoždění mezi zavoláním funkce mqtt_publish() a skutečným odesláním příslušného paketu do sítě. To je řešeno v novém firmware, ale pokud jej nemáte, musíte svůj FC program psát tak, aby s tímto uměl správně pracovat. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Maximální velikosti (položky subscribe tabulky) ===&lt;br /&gt;
&lt;br /&gt;
'''Stav 06/2020'''&lt;br /&gt;
&lt;br /&gt;
Maximální délka názvu položky (Topic Name) pro přihlášené položky je 128 znaků.&lt;br /&gt;
&lt;br /&gt;
Maximální délka obsahu hodnoty (Value) pro přihlášené položky je 384 znaků.&lt;br /&gt;
&lt;br /&gt;
''Informace'': &lt;br /&gt;
&lt;br /&gt;
Chystáme úpravu aby byl aplikován jen celkový limit (512 znaků) a ne tyto dva samostatné limity. V současném FW ale zatím stále platí.&lt;br /&gt;
&lt;br /&gt;
Toto omezení se vztahuje jen na Subscribe Tabulku a neplatí pro PUBLISH (tam jsou omezení jiná viz text výše).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Volba indexů ===&lt;br /&gt;
&lt;br /&gt;
Je čistě na vás zvolit si každý použitý index do tabulky (tzn. první parametr do funkce mqtt_subscribe).&lt;br /&gt;
&lt;br /&gt;
Pokud provedete přihlášení s jedním stejným indexem na více různých položek (topics), tak SDS daný požadavek do Brokeru odešle (pro každou žádost). Nicméně SDS si uschová ve své paměti jen tu nejposlednější pro každý index.&lt;br /&gt;
&lt;br /&gt;
Takže si dejte pozor, aby jste si pro každý index provedli přihlášení (subscribe) jen a právě jednou.&lt;br /&gt;
&lt;br /&gt;
Tabulka je vždy vyčištena při odpojení od Brokeru.&lt;br /&gt;
&lt;br /&gt;
Nechcete-li využívat této pomocné tabulky, nemusíte; ale ztrácíte výhodu uchování poslední zaslané hodnoty pro každou položku v této tabulce uschovanou.&lt;br /&gt;
&lt;br /&gt;
SDS samozřejmě dává programu k dispozici všechny příchozí zprávy z Brokeru, nicméně pokud jich přijde více za sebou v rychlém sledu, nemusíte je zdaleka stačit programem zpracovat. A právě proto je zde na pomoc tento systém s tabulkou, kam SDS zaručeně zařadí poslední přijaté hodnoty pro každou položku (Topic), která vás zajímá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pozor ===&lt;br /&gt;
&lt;br /&gt;
Každé SDS má k dispozici jinak velkou tabulku pro Subscribe - tedy jsou SDS, které mají k dispozici méně indexů než plných 32. S tím musíte počítat, a můžete využívat jen tolik indexů (řádků v tabulce), kolik jich cílové SDS poskytuje.&lt;br /&gt;
&lt;br /&gt;
Přesnou hodnotu si může SDS-C program zjistit čtením sys[2209] (respektive get 12209).&lt;br /&gt;
&lt;br /&gt;
Pokud se stane, že by vám počet dostupných indexů nestačil, lze si snadno pomoct - lepším návrhem využití jednotlivých Topic. Můžete např. neplýtvat a použít jeden Topic na řízení více věcí (příklad: ovládání jednotlivých relé přes jednotlivé bity ve společném čísle, přenášeném v rámci jediného Topicu).&lt;br /&gt;
&lt;br /&gt;
Při každém PŘIPOJENÍ k MQTT Brokeru dojde ke smazání celé tabulky (celého obsahu). Tzn. pokaždé když zavoláte mqtt_connect() tak dojde k vyčistění obsahu tabulky - a také ke zrušení všech přihlášení.&lt;br /&gt;
&lt;br /&gt;
Při každém připojení tedy musíte vždy poslat všechny požadavky na přihlášení, které vás aktuálně zajímají, bez ohledu na to, k čemu jste byli přihlášeni v případném předchozím připojení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Velikosti ==&lt;br /&gt;
&lt;br /&gt;
Co můžete v rámci svého programu využít:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''SDS'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| MQTT klient &lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| FW verze &lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;ClientID&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;username&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;password&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;Topic Name&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;Value&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| počet položek ve&amp;lt;br&amp;gt;Subscribe tabulce&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: První Produktová Řada&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MICRO LM (LIGHT, E)'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|není&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS IO6 LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|96&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|192&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MACRO LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|není&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS UPS ONEDPS LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;jen EN verze&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|3&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: První Produktová Řada - verze ST&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MICRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MACRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|19.10.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|96&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|256&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS IO6 ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS TTCPRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MINI ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: Druhá Produktová Řada&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS BIG 512'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|20&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS BIG 64/128'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS SMALL 64/128'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS STSW''' (OEM)&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=MQTT&amp;diff=984</id>
		<title>MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=MQTT&amp;diff=984"/>
		<updated>2026-10-31T10:06:32Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
 MQTT klient je dostupný pro První i Druhou Produktovou Řadu zařízení SDS.  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MQTT is a Client Server publish/subscribe messaging transport protocol.&lt;br /&gt;
&lt;br /&gt;
MQTT je tedy jednou z možných variant jak přenášet údaje mezi SDS (&amp;quot;MQTT client&amp;quot;) a centrálním serverem (&amp;quot;MQTT broker&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
SDS podporují MQTT komunikaci za předpokladu, že máte nainstalován aktuální firmware.&lt;br /&gt;
&lt;br /&gt;
MQTT komunikace se provádí pomocí příslušných SDS-C / FULL-C funkcí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== K čemu je MQTT dobré ===&lt;br /&gt;
&lt;br /&gt;
Postupem času se MQTT ustálilo jako nejjednodušší řešení centrálního bodu pro sběr a distribuci jednoduchých dat a údajů. &lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro složitější aplikace už není vhodný, ale např. pro malou domácí automatizaci, v rámci domácí sítě, je to akorát.&lt;br /&gt;
&lt;br /&gt;
Modelový příklad: máte doma řadu chytrých zařízení které chceta navzájem provázat a to ideálně bez přidaných nákladů. Pokud tato zařízení umí komunikovat pomocí MQTT přes TCP protokol, pak vám stačí spustit MQTT Broker (např. na rPI) a všechna zařízení v tu chvíli mohou spolu instantně komunikovat stylem postupného předávání hodnot.&lt;br /&gt;
&lt;br /&gt;
MQTT pracuje na principu &amp;quot;položka - hodnota&amp;quot; (TOPIC - VALUE). Je to takový neomezený seznam o dvou sloupcích a mnoha řádcích (tolik řádků kolik různyćh položek). Do tohoto seznamu můžete odkudkoliv zapisovat a tím měnit jednotlivé hodnoty nebo přidávat nové položky. A také se můžete jako klient přihlásit k odběru změn (jiný klient zapíše novou hodnotu a připojení přihlášení klienti ji dostanou).&lt;br /&gt;
&lt;br /&gt;
Každou položku je potřeba založit - to se stane automaticky při prvním zápisu (klient vždy zapisuje ten pár Topic-Value). Pokud už položka existuje, tak se při zápisu jen změní její hodnota.&lt;br /&gt;
&lt;br /&gt;
Zpátky k příkladu.&lt;br /&gt;
&lt;br /&gt;
Mějme spoustu modulů SDS které jsou všichni MQTT klienti, připojení ke společnému MQTT brokeru (server spuštěný např. na rPI). První SDS měří teplotu a pravidelně publikuje její hodnotu na MQTT broker, do položky &amp;quot;teplota1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Deset dalších SDS je přihlášeno k odběru (subscribe) této položky &amp;quot;teplota1&amp;quot;, a každé toto přihlášené SDS obdrží všechny nové zapsané hodnoty do této položky (které tam píše to první SDS) a na základě této hodnoty mohou provádět nějakou regulační činnost.&lt;br /&gt;
&lt;br /&gt;
Tím se elegantně vyřešení komunikace z prvního SDS do dalších deseti, aniž by se muselo řešit jak to složitě bez MQTT provádět.&lt;br /&gt;
&lt;br /&gt;
Samozřejmě toto je jen jednoduchý příklad, protože typicky MQTT systém bývá mnohem složitější - ale stále stejně snadno realizovatelný (univerzální princip Publish/Subscribe).&lt;br /&gt;
&lt;br /&gt;
Vždy je potřeba, aby v SDS byl nahrán aktuální FW, který MQTT podporuje - pro SDS-C to lze ověřit přes sys[2199].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Příklad: SDS a Node-RED ===&lt;br /&gt;
&lt;br /&gt;
Node-RED je jedním z velice oblíbených nástrojů pro beznákladovou realizaci složitější automatizace.&lt;br /&gt;
&lt;br /&gt;
Ze systému [[https://cookbook.nodered.org/mqtt/connect-to-broker Node-RED]] lze SDS plně ovládat - a to formou obousměrné komunikace přes MQTT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Příklad: SDS a SolPIPlog ===&lt;br /&gt;
&lt;br /&gt;
SolPIPlog je program pro monitorování FVE měničů (MPP Solar). SDS umí s tímto programem komunikovat přes MQTT. Příkladem je např. přepínání režimu (SOL/BAT) podle stavu HDO (který SDS zjistí přes svůj optovstup, kam se připojí kontajt relé od HDO).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě MQTT má neomezené možnosti a dva zmíněné příklady jsou opravdu jen nástřelem toho, co se dá realizovat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Specifikace ==&lt;br /&gt;
&lt;br /&gt;
SDS podporuje základní MQTT 3.1.1 protokol (Level4), nad TCP; toto je současný průmyslový standard. Implementace odpovídá http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html .&lt;br /&gt;
&lt;br /&gt;
Klíčové funkcionality protokolu, které lze vyvolat z SDS programu:&lt;br /&gt;
* CONNECT&lt;br /&gt;
* DISCONNECT&lt;br /&gt;
* PUBLISH&lt;br /&gt;
* SUBSCRIBE (+ ACK)&lt;br /&gt;
* UNSUBSCRIBE (+ ACK)&lt;br /&gt;
* PINGREQ (+ PINGRESP)&lt;br /&gt;
&lt;br /&gt;
Interně SDS automaticky provándí MQTT PING směrem do Broker.&lt;br /&gt;
&lt;br /&gt;
Všechny texty jsou přenášeny ve formátu UTF-8.&lt;br /&gt;
&lt;br /&gt;
V tuto chvíli není implementováno WILL MESSAGE.&lt;br /&gt;
&lt;br /&gt;
QoS je v režimu 0x00.&lt;br /&gt;
&lt;br /&gt;
Keep-Alive je ve výchozím nastavení 120 sekund a odesílání PINGREQ tedy co 96 sekund. Toto nastavení lze změnit při připojení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Použití ==&lt;br /&gt;
&lt;br /&gt;
Použití MQTT máte v rámci SDS plně pod svou kontrolou, tím, že si vše ovládnete ve svém programu. MQTT tedy v rámci SDS není uzavřeno do webového rozhraní apod., právě naopak, je plně k dispozici.&lt;br /&gt;
&lt;br /&gt;
Standardní postup je následující:&lt;br /&gt;
* 1. otevřete spojení z SDS (klient) na MQTT server (broker)  &lt;br /&gt;
* 2. - podle potřeby odešlete data z SDS na server (funkce PUBLISH)&lt;br /&gt;
* 3. - podle potřeby se přihlásíte k odběru dat ze serveru (funkce SUBSCRIBE)&lt;br /&gt;
* 4. až nebude spojení na server potřeba, odpojíte se&lt;br /&gt;
&lt;br /&gt;
Všechny čtyři body se ovládají voláním patřičných funkcí v programu, s vhodnými parametry, a se správným zpracováním výsledných hodnot.&lt;br /&gt;
&lt;br /&gt;
Dokud není zavolaná funkce hotová (to si musí program hlídat čtením patřičného sys[]), nesmí být zavolána další !&lt;br /&gt;
&lt;br /&gt;
'''Pozor:''' při každém novém startu SDS-C programu je MQTT Broker odpojen. Váš SDS-C program se tedy musí vždy nejprve připojit, aby mohl využívat další funkce pro komunikaci s brokerem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak vyvíjet a testovat ==&lt;br /&gt;
&lt;br /&gt;
Vývoj a testování vždy předchází plnému nasazení - je dobré si svůj program nejprve odladit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulátor SDSC.exe ===&lt;br /&gt;
&lt;br /&gt;
V okně &amp;quot;NETWORK&amp;quot; otevřete kartu &amp;quot;MQTT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zde lze simulovat chyby (neprovedené připojení, odmítnutí hesla) a tak odzkoušet robustnost svého SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Dále je zde seznam položek (Topics) které jednak SDS-C program publikoval, a také ke kterým je SDS-C program přihlášen (subscribe).&lt;br /&gt;
&lt;br /&gt;
Přihlášené položky jsou označeny číslem indexu do tabulky (#1 .. #31 - pozor, počet je různý pro různé SDS moduly).&lt;br /&gt;
&lt;br /&gt;
Změna hodnoty (value) pro každou položku je možná (buď poklepáním na řádek v seznamu, nebo tlačítkem &amp;quot;broker publish&amp;quot;). Ve všech těchto případech, po provedení změny, dojde k odeslání nové hodnoty do SDS-C programu (ale to samozřejmě jen za předpokladu že program je na daný topic přihlášen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Skutečné SDS ===&lt;br /&gt;
&lt;br /&gt;
Fyzický modul SDS lze samozřejmě připojit k reálnému MQTT brokeru.&lt;br /&gt;
&lt;br /&gt;
Při vývoji se může hodit pomocná stránka: 192.168.1.250/cgi_mqtt .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT Broker snadno a rychle ==&lt;br /&gt;
&lt;br /&gt;
Nainstalujte si Mosquitto MQTT broker na svůj počítač (Windows / Linux). Ověřeno to máme na Win7, Win10, a také na rPI a odroid.&lt;br /&gt;
&lt;br /&gt;
 https://mosquitto.org/download/&lt;br /&gt;
&lt;br /&gt;
Pro Windows, pak stačí spustit &amp;quot;C:\Program Files\mosquitto\mosquitto.exe&amp;quot;, který (při spuštění bez parametrů = výchozí stav) otevře prázdné konzolové okno a zůstane aktivní. V tuto chvíli máte na svém Win PC aktivní MQTT broker, a to na &amp;quot;localhost:1883&amp;quot; (dejte si pozor na firewall).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro Linux, rPI atd. platí jiný vhodný postup, ale výsledek je stejný.&lt;br /&gt;
&lt;br /&gt;
SDS pak lze na tento broker (server) připojit a provádět Publish a Subscribe.&lt;br /&gt;
&lt;br /&gt;
Pro kontrolu toho, jak se server chová a co vše v něm je (co tam SDS nebo jiní klienti poslali), tak je k dispozici vynikající nástroj MQTT Explorer.&lt;br /&gt;
 &lt;br /&gt;
 http://mqtt-explorer.com/&lt;br /&gt;
&lt;br /&gt;
Je opět zdarma a důrazně doporučuji se s ním seznámit a používat to.&lt;br /&gt;
&lt;br /&gt;
Umožňuje jednak plnou kontrolu položek (Topics) a jejich hodnot, ale také umí tyto položky ručně vytvořit nebo do nich zapsat (což se pak přenese do klientů kteří mají Subscribe na danou položku). Zkrátka ideální pro vývoj a testování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT broker v Internetu ==&lt;br /&gt;
&lt;br /&gt;
Pro bezpečnost je ideální mít svůj vlastní MQTT broker ve své síti. Stačí koupit malý Linuxový počítač (např. rPI) a tam MQTT broker nainstalovat a je to.&lt;br /&gt;
&lt;br /&gt;
Pokud si provedete vhodné nastavení své sítě a firewallu, lze k tomuto brokeru přistupovat i z Internetu.&lt;br /&gt;
&lt;br /&gt;
Toto je často žádoucí, např. máte-li svou domácí automatizaci která běží na MQTT a chcete ji dálkově ovládat a kontrolovat, např. z mobilní aplikace.&lt;br /&gt;
&lt;br /&gt;
Druhá možnost je využít nějaký veřejný MQTT broker, je jich plný Internet - ale toto přináší řadu bezpečnostních rizik a nedoporučujeme to. Když už mít broker na Internetu, tak na svém vlastním serveru.&lt;br /&gt;
&lt;br /&gt;
Důležité je, že SDS (MQTT klient) používá připojení k MQTT brokeru jako plain TCP, tedy nepoužívá v této verzi SSL/TLS (to až v budoucnu SDS třetí produktové řady).&lt;br /&gt;
&lt;br /&gt;
Proto je důležité umístit MQTT broker do vnitřní sítě (stejná síť na které jsou SDS), která je oddělena od sítě Internet bezpečným a spravně nastaveným firewallem.&lt;br /&gt;
&lt;br /&gt;
Takový MQTT broker pak může snadno obsluhovat všechny SDS a další klienty přes plain TCP spoje, a do Internetu může mít dodatečně zabezpečený TLS MQTT spoj. Takhle to nastavit jde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementace v SDS-C a FULL-C ==&lt;br /&gt;
&lt;br /&gt;
Názvy funkcí a postupy jsou pro oba programovací jazyky shodné.&lt;br /&gt;
&lt;br /&gt;
'''Rozdíl''' je v indexech:&lt;br /&gt;
* SDS-C má informace a údaje v sys[2199] až sys[2321]&lt;br /&gt;
* FULL-C má informace a údaje dostupné přes get funkci od indexu 12199 až 12321.&lt;br /&gt;
&lt;br /&gt;
Všimněte si, že význam indexů pro SDS-C (2199 až 2321) je 1:1 namapován na FULL-C indexy (12199 až 12321 - tedy FULL-C má pouze aplikováno pevné posunutí o 10000).&lt;br /&gt;
&lt;br /&gt;
 [[FULL-C: MQTT_functions|Detaily pro implementaci ve FULL-C (a příklady) naleznete zde.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vzorový program SDS-C - připojení a Publish ==&lt;br /&gt;
&lt;br /&gt;
Následující program je pro SDS První Produktové Řady, které se programují jazykem SDS-C.&lt;br /&gt;
&lt;br /&gt;
MQTT Broker je spuštěn (např. na rPI) na adrese 192.168.4.249 (a TCP portu 1883). Náš klient (SDS) se přihlásí jako uživatel &amp;quot;sds1234&amp;quot; s heslem &amp;quot;password&amp;quot;, a následně provede 2x PUBLISH a nakonec se odpojí.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // network communication shall be started only after the SDS is connected to network (ethernet is up)&lt;br /&gt;
 echo('waiting for network availability');&lt;br /&gt;
 &lt;br /&gt;
waiting_ethernet:&lt;br /&gt;
 if (sys[24] == 0) goto waiting_ethernet; // 0 = no ethernet&lt;br /&gt;
 if (sys[27] == 0) goto waiting_ethernet; // 0 = no IP address&lt;br /&gt;
 &lt;br /&gt;
 // OK, now we have an ethernet connection up and running&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 // EXAMPLE START:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // connect on start&lt;br /&gt;
 echo('connecting to MQTT Broker...');&lt;br /&gt;
&lt;br /&gt;
 //           ip   ip   ip ip   port  client-id          username   password    keepalive(sec)&lt;br /&gt;
 mqtt_connect(192, 168, 4, 249, 1883, 'sds-client-1234', 'sds1234', 'password', 120);&lt;br /&gt;
&lt;br /&gt;
 // wait for a complete connection&lt;br /&gt;
 label waiting_for_mqqt_conn:&lt;br /&gt;
  &lt;br /&gt;
 // error - failed ?&lt;br /&gt;
 if (sys[2200] &amp;lt;= 0) goto mqtt_conn_fail; // error ? (any negative number is error code)&lt;br /&gt;
&lt;br /&gt;
 // done - connected ?&lt;br /&gt;
 if (sys[2200] != 4) goto waiting_for_mqqt_conn; // success ? (yes only if == 4)&lt;br /&gt;
&lt;br /&gt;
 // test the CONNACK result - see &amp;quot;3.2.2.3 Connect Return code&amp;quot; - we expect &amp;quot;0&amp;quot; as OK&lt;br /&gt;
&lt;br /&gt;
 if (sys[2201] != 0) goto mqtt_conn_fail; // is broker's result code OK ? (OK only if == 0)&lt;br /&gt;
&lt;br /&gt;
 // connected (CONNACK result is 0x00)&lt;br /&gt;
&lt;br /&gt;
 echo('connected to broker: OK');&lt;br /&gt;
&lt;br /&gt;
 //&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 // example: let us publish three various topics&lt;br /&gt;
&lt;br /&gt;
 mqtt_publish('sds/teploty/cidlo1', sys[310]); &lt;br /&gt;
 w1: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w1;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 mqtt_publish('sds/teploty/cidlo2', sys[311]);&lt;br /&gt;
 w2: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w2;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
 &lt;br /&gt;
 mqtt_publish('sds/teploty/text_xyz', 'hello:', 1234, 'there');  // &amp;lt;- you can pass more than one parameter (all params will get joined together)&lt;br /&gt;
 w3: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w3;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 // ...&lt;br /&gt;
&lt;br /&gt;
 // and let us subscribe to a topic&lt;br /&gt;
 &lt;br /&gt;
 mqtt_subscribe(1, 'ha/output/q1/state');&lt;br /&gt;
 w4:&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;   // disconnected ?&lt;br /&gt;
 if (sys[2202] == 4) goto w4;              // still working ? &lt;br /&gt;
 if (sys[2202] != 8)                       // success ?&lt;br /&gt;
  { echo('sub error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 //...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // finally, once done - close the connection &lt;br /&gt;
&lt;br /&gt;
 // go&lt;br /&gt;
 mqtt_disconnect();&lt;br /&gt;
&lt;br /&gt;
 // we shall wait until the connection is properly closed&lt;br /&gt;
wait_for_disconnect:&lt;br /&gt;
 if (sys[2200] &amp;lt;= 0) goto error;                // error ?&lt;br /&gt;
 if (sys[2200] == 8) goto wait_for_disconnect;  // success, or still working ?&lt;br /&gt;
&lt;br /&gt;
 // done !&lt;br /&gt;
 echo('DISCONNECTED from broker');&lt;br /&gt;
&lt;br /&gt;
 wait(250);&lt;br /&gt;
&lt;br /&gt;
 // EXIT the example - we are DONE&lt;br /&gt;
 return;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // error handling&lt;br /&gt;
 label mqtt_conn_fail:&lt;br /&gt;
 echo('unable to connect... error=', sys[2200],' connack=', sys[2201]);&lt;br /&gt;
&lt;br /&gt;
 // error handling&lt;br /&gt;
 label error:&lt;br /&gt;
 echo('error');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pozn. mqtt_connect() - parametry:&lt;br /&gt;
* keepalive - hodnota 0 použije výchozí nastavení (120 sec), další platné hodnoty jsou 15 až 600 (sekund).&lt;br /&gt;
* client-id - vždy by to měla být unikátní identifikace vašeho SDS, typicky přidělena správcem MQTT Broker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vzorový program FULL-C - připojení a Publish ==&lt;br /&gt;
&lt;br /&gt;
Příklady pro FULL-C jsou na samostatné stránce: [[FULL-C: MQTT_functions]].&lt;br /&gt;
&lt;br /&gt;
Princip použití MQTT klient ve FULL-C je identický jako pro SDS-C, jen pozor na pevně posunuté indexy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Odesílání hodnot do Brokeru ==&lt;br /&gt;
&lt;br /&gt;
Je-li SDS úspěšně připojeno, pak lze odeslat libovolnou hodnotu libovolné položky (Topic) z SDS do Brokeru, který si ji uschová a který ji také předá všem dalším připojeným zařízením, které jsou k dané položce (Topic) přihlášeny (subscribed).&lt;br /&gt;
&lt;br /&gt;
Názvy položek musí být centrálně koordinované, aby celá akce dávala smysl. To už je na vás.&lt;br /&gt;
&lt;br /&gt;
'''Omezení je na současnou velikost (společnou délku) názvu položky (Topic Name) a její hodnoty (Value), což se spolu musí vlézt do nejvíce cca 1465 znaků.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
POZOR - před, a po zavolání funkce mqtt_publish() je žádoucí testovat stav sys[2202] ( respektive pro FULL-C: get(12202) ), a dokud tam nebude očekávaný výsledek nebo chybový kód, tak nevolat další mqtt_xxx funkce !&lt;br /&gt;
&lt;br /&gt;
Vždy musíte ve svém programu správně reagovat na všechny chybové stavy ve sys[2202] (respektive get 12202), je to váš úkol, SDS to za vás řešit nebude (a tím vám svazovat ruce).&lt;br /&gt;
&lt;br /&gt;
Funkce mqtt_publish() umožňuje skládání parametrů - první parametr je vždy název položky (topic name), a všechny zbylé jsou převedeny na společnou hodnotu (value).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   // you can use multiple parameters for the VALUE&lt;br /&gt;
   // only the very first parameter represents a TOPIC NAME&lt;br /&gt;
&lt;br /&gt;
   mqtt_publish('topicname', '1234', 'abcd', 'efgh', 'xyz');&lt;br /&gt;
&lt;br /&gt;
   // result: 'topicname' gets a new VALUE of '1234abcdefghxyz'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příjem hodnot z Brokeru ==&lt;br /&gt;
&lt;br /&gt;
SDS se umí přihlásit na odběr hodnot pro různé položky. Pokud je SDS takto přihlášeno, tak jakákoliv změna hodnoty na straně Brokera (např. způsobena zápisem jiného zařízení, aplikace, atd.), se prakticky ihned přenese do SDS, kde si aktualizovanou hodnotu může váš program zpracovat dle potřeby.&lt;br /&gt;
&lt;br /&gt;
Přihlášení se provádí pomocí funkce mqtt_subscribe(). Aby se to povedlo, musíte být úspěšně připojeni k Brokeru.&lt;br /&gt;
&lt;br /&gt;
Přihlásit se lze k libovolné položce (Topicu), jejíž celý textový název musíte samozřejmě znát.&lt;br /&gt;
&lt;br /&gt;
Pozor - všechny názvy položek jsou citlivé na malé a velké písmena (nejsou záměnné).&lt;br /&gt;
&lt;br /&gt;
Pozor - platné indexy jsou 1 až N (protože index 0 je vyhrazený pro aktuálně interně zpracovávanou položku, nelze jej využít pro program).&lt;br /&gt;
&lt;br /&gt;
'''PŘÍKLAD V SDS-C:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // SDS-C&lt;br /&gt;
&lt;br /&gt;
 // expectation: broker has to be already connected (see the previous example)&lt;br /&gt;
&lt;br /&gt;
 // let us:&lt;br /&gt;
 //  subscribe to a topic named: &amp;quot;control/rele1&amp;quot;, and let us assigned it a local index of 1&lt;br /&gt;
&lt;br /&gt;
 mqtt_subscribe(1, 'control/rele1');&lt;br /&gt;
&lt;br /&gt;
 // wait for the successful subscribe &lt;br /&gt;
 wS: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail; // disconnected (if any negative number)&lt;br /&gt;
 if (sys[2202] == 4) goto wS;            // still working... (done when != 4)&lt;br /&gt;
 if (sys[2202] != 8)                     // success ? (only if == 8, otherwise error or failure)&lt;br /&gt;
 { &lt;br /&gt;
   // FAILED -&amp;gt; not subscribed !&lt;br /&gt;
   echo('sub error = ', sys[2202]); &lt;br /&gt;
   return;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 // now, as we are subscribed, we will watch for any incoming update (value change), as in the following example:&lt;br /&gt;
&lt;br /&gt;
 var last1;&lt;br /&gt;
 last1 = 0;&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
&lt;br /&gt;
 // any change ? (any new message?)&lt;br /&gt;
 if (last1 != sys[2291])  // sys[2291] is a timestamp for index #1&lt;br /&gt;
  {&lt;br /&gt;
    // store so we can compare it later, again&lt;br /&gt;
    last1 = sys[2291];&lt;br /&gt;
&lt;br /&gt;
    // use the new value!&lt;br /&gt;
    echo('TOPIC #1: &amp;quot;',sys[2211],'&amp;quot; update to: &amp;quot;',sys[2251],'&amp;quot; ');&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto error; // disconnected&lt;br /&gt;
&lt;br /&gt;
 // continue loop&lt;br /&gt;
 goto loop;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 // ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // once we are not interesed in the topic any more, we can unsubscribe&lt;br /&gt;
 mqtt_unsubscribe_index(1);&lt;br /&gt;
&lt;br /&gt;
 // handle the job&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto error; // disconnected&lt;br /&gt;
 wU: &lt;br /&gt;
 if (sys[2202] &amp;lt; 0) goto error; // error (if any negative number)&lt;br /&gt;
 if (sys[2202] == 16) goto wU;  // waiting until done (done when result == 32)&lt;br /&gt;
&lt;br /&gt;
 echo('unsubscribed');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad přehledně ukazuje, jak systém funguje. Pro jednoduchost je zde hrubá nekonečná smyčka (loop) ale každý jistě vidí i své, jiné řešení vhodnější pro svůj vlastní program.&lt;br /&gt;
&lt;br /&gt;
Základní princip je v používání SDS indexů #1 až #31, kterým přiřazujeme jednotlivé přihlášené položky (subscribed topics).&lt;br /&gt;
&lt;br /&gt;
Je na tvůrci programu, jak indexy využije a kterému indexu přiřadí jaký název položky (topic name). A konkrétní názvy položek vždy záleží na celém systémovém návrhu, kde SDS je zcela transparentní.&lt;br /&gt;
&lt;br /&gt;
Z principu MQTT protokolu, jsou hodnoty vždy uvedeny jako textový řetězec. Např. pomocí SDS-C funkce atoi to ale snadno převedete na číslo, se kterým lze dále pracovat, je-li to potřeba.&lt;br /&gt;
&lt;br /&gt;
Funkce umožňuje skládání parametrů - první parametr je vždy index, a všechny zbylé jsou převedeny na název položky (topic name).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
POZOR - před, a po zavolání funkce mqtt_subscribe() je žádoucí testovat stav sys[2202] (respektive get 12202), a dokud tam nebude očekávaný výsledek nebo chybový kód, tak nevolat další mqtt_xxx funkce !&lt;br /&gt;
&lt;br /&gt;
Vždy musíte ve svém SDS-C programu správně reagovat na všechny chybové stavy ve sys[2202] (respektive get 12202), je to váš úkol, SDS to za vás řešit nebude (a tím vám svazovat ruce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Známé chyby ve firmware ===&lt;br /&gt;
&lt;br /&gt;
V průběhu provozu řady SDS bylo mnoha uživateli testováno, jak se MQTT v SDS chová. Byly nalezeny různé záležitosti, které se průběžně v nových vydáních firmware řeši a opravují.&lt;br /&gt;
&lt;br /&gt;
Pokud však máte starší firmware, nebo ještě pokud nebyl vůbec opravený firmware vydán, musíte tato omezení znát a použít opravné postupy ve vlastním FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
'''Délka odeslání MQTT dat do brokeru'''&lt;br /&gt;
&lt;br /&gt;
Původní firmware může mít až půl sekundy zpoždění mezi zavoláním funkce mqtt_publish() a skutečným odesláním příslušného paketu do sítě. To je řešeno v novém firmware, ale pokud jej nemáte, musíte svůj FC program psát tak, aby s tímto uměl správně pracovat. &lt;br /&gt;
&lt;br /&gt;
'''Špatné předání chybových stavů'''&lt;br /&gt;
&lt;br /&gt;
Je-li zavoláno mqtt_publish() nebo mqtt_subscribe() nebo mqtt_unsubscribe_*(), zapíše to -3 do indexu [12200] namísto správného indexu [12202].&lt;br /&gt;
Takže [12200] zůstane s obsahem -3, i když tam ta hodnota nemá co dělat. Toto má pak důsledek v tom, že pokud váš program testuje [12200] na hodnotu 4 tak ji tam neuvidí a bude si nesprávně myslet, že došlo k odpojení SDS od brokeru.&amp;lt;br&amp;gt;&lt;br /&gt;
''Toto je opraveno v novém firmware (11/2026 a novější).''&lt;br /&gt;
&lt;br /&gt;
Správně to má být: &amp;lt;br&amp;gt;&lt;br /&gt;
* [12200] a [12201] = pouze pro mqtt_connect a mqtt_disconnect&amp;lt;br&amp;gt;&lt;br /&gt;
* [12202] = pouze pro mqtt_publish, mqtt_subscribe, mqtt_unsubscribe_* atd.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ve starším firmware byla chyba, kdy místo do [12202] se některé chybové stavy (záporné hodnoty např. -3, -5, -7 atd.) zapsaly nesprávně do [12200].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Po odpojení přes mqtt_disconnect() občas dojde k předání chyby výpadku TCP spojení'''&lt;br /&gt;
&lt;br /&gt;
Toto je vlastnost, která se týká sítě, a nelze ji vždy vyloučit.&lt;br /&gt;
&lt;br /&gt;
Po zavolání mqtt_disconnect() může postupně dojít k zápisu hodnoty -2 do [12200] (ihned po zavolání je zapsáno 32 do [12200], a pak proběhne ukončení TCP spojení, které může ve svém postupu zapsat -2).&lt;br /&gt;
&lt;br /&gt;
Proto pozor při použití testu &amp;lt;pre&amp;gt;if (sys[2200] &amp;lt;= 0) goto error;&amp;lt;/pre&amp;gt; , protože to může vyhodnotit v podstatě správné ukončení spojení jako chybu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Maximální velikosti (položky subscribe tabulky) ===&lt;br /&gt;
&lt;br /&gt;
'''Stav 06/2020'''&lt;br /&gt;
&lt;br /&gt;
Maximální délka názvu položky (Topic Name) pro přihlášené položky je 128 znaků.&lt;br /&gt;
&lt;br /&gt;
Maximální délka obsahu hodnoty (Value) pro přihlášené položky je 384 znaků.&lt;br /&gt;
&lt;br /&gt;
''Informace'': &lt;br /&gt;
&lt;br /&gt;
Chystáme úpravu aby byl aplikován jen celkový limit (512 znaků) a ne tyto dva samostatné limity. V současném FW ale zatím stále platí.&lt;br /&gt;
&lt;br /&gt;
Toto omezení se vztahuje jen na Subscribe Tabulku a neplatí pro PUBLISH (tam jsou omezení jiná viz text výše).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Volba indexů ===&lt;br /&gt;
&lt;br /&gt;
Je čistě na vás zvolit si každý použitý index do tabulky (tzn. první parametr do funkce mqtt_subscribe).&lt;br /&gt;
&lt;br /&gt;
Pokud provedete přihlášení s jedním stejným indexem na více různých položek (topics), tak SDS daný požadavek do Brokeru odešle (pro každou žádost). Nicméně SDS si uschová ve své paměti jen tu nejposlednější pro každý index.&lt;br /&gt;
&lt;br /&gt;
Takže si dejte pozor, aby jste si pro každý index provedli přihlášení (subscribe) jen a právě jednou.&lt;br /&gt;
&lt;br /&gt;
Tabulka je vždy vyčištena při odpojení od Brokeru.&lt;br /&gt;
&lt;br /&gt;
Nechcete-li využívat této pomocné tabulky, nemusíte; ale ztrácíte výhodu uchování poslední zaslané hodnoty pro každou položku v této tabulce uschovanou.&lt;br /&gt;
&lt;br /&gt;
SDS samozřejmě dává programu k dispozici všechny příchozí zprávy z Brokeru, nicméně pokud jich přijde více za sebou v rychlém sledu, nemusíte je zdaleka stačit programem zpracovat. A právě proto je zde na pomoc tento systém s tabulkou, kam SDS zaručeně zařadí poslední přijaté hodnoty pro každou položku (Topic), která vás zajímá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pozor ===&lt;br /&gt;
&lt;br /&gt;
Každé SDS má k dispozici jinak velkou tabulku pro Subscribe - tedy jsou SDS, které mají k dispozici méně indexů než plných 32. S tím musíte počítat, a můžete využívat jen tolik indexů (řádků v tabulce), kolik jich cílové SDS poskytuje.&lt;br /&gt;
&lt;br /&gt;
Přesnou hodnotu si může SDS-C program zjistit čtením sys[2209] (respektive get 12209).&lt;br /&gt;
&lt;br /&gt;
Pokud se stane, že by vám počet dostupných indexů nestačil, lze si snadno pomoct - lepším návrhem využití jednotlivých Topic. Můžete např. neplýtvat a použít jeden Topic na řízení více věcí (příklad: ovládání jednotlivých relé přes jednotlivé bity ve společném čísle, přenášeném v rámci jediného Topicu).&lt;br /&gt;
&lt;br /&gt;
Při každém PŘIPOJENÍ k MQTT Brokeru dojde ke smazání celé tabulky (celého obsahu). Tzn. pokaždé když zavoláte mqtt_connect() tak dojde k vyčistění obsahu tabulky - a také ke zrušení všech přihlášení.&lt;br /&gt;
&lt;br /&gt;
Při každém připojení tedy musíte vždy poslat všechny požadavky na přihlášení, které vás aktuálně zajímají, bez ohledu na to, k čemu jste byli přihlášeni v případném předchozím připojení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Velikosti ==&lt;br /&gt;
&lt;br /&gt;
Co můžete v rámci svého programu využít:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''SDS'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| MQTT klient &lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| FW verze &lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;ClientID&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;username&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;password&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;Topic Name&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;Value&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| počet položek ve&amp;lt;br&amp;gt;Subscribe tabulce&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: První Produktová Řada&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MICRO LM (LIGHT, E)'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|není&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS IO6 LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|96&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|192&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MACRO LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|není&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS UPS ONEDPS LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;jen EN verze&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|3&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: První Produktová Řada - verze ST&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MICRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MACRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|19.10.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|96&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|256&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS IO6 ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS TTCPRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MINI ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: Druhá Produktová Řada&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS BIG 512'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|20&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS BIG 64/128'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS SMALL 64/128'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS STSW''' (OEM)&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=MQTT&amp;diff=983</id>
		<title>MQTT</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=MQTT&amp;diff=983"/>
		<updated>2026-10-31T10:05:35Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
 MQTT klient je dostupný pro První i Druhou Produktovou Řadu zařízení SDS.  &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MQTT is a Client Server publish/subscribe messaging transport protocol.&lt;br /&gt;
&lt;br /&gt;
MQTT je tedy jednou z možných variant jak přenášet údaje mezi SDS (&amp;quot;MQTT client&amp;quot;) a centrálním serverem (&amp;quot;MQTT broker&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
SDS podporují MQTT komunikaci za předpokladu, že máte nainstalován aktuální firmware.&lt;br /&gt;
&lt;br /&gt;
MQTT komunikace se provádí pomocí příslušných SDS-C / FULL-C funkcí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== K čemu je MQTT dobré ===&lt;br /&gt;
&lt;br /&gt;
Postupem času se MQTT ustálilo jako nejjednodušší řešení centrálního bodu pro sběr a distribuci jednoduchých dat a údajů. &lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro složitější aplikace už není vhodný, ale např. pro malou domácí automatizaci, v rámci domácí sítě, je to akorát.&lt;br /&gt;
&lt;br /&gt;
Modelový příklad: máte doma řadu chytrých zařízení které chceta navzájem provázat a to ideálně bez přidaných nákladů. Pokud tato zařízení umí komunikovat pomocí MQTT přes TCP protokol, pak vám stačí spustit MQTT Broker (např. na rPI) a všechna zařízení v tu chvíli mohou spolu instantně komunikovat stylem postupného předávání hodnot.&lt;br /&gt;
&lt;br /&gt;
MQTT pracuje na principu &amp;quot;položka - hodnota&amp;quot; (TOPIC - VALUE). Je to takový neomezený seznam o dvou sloupcích a mnoha řádcích (tolik řádků kolik různyćh položek). Do tohoto seznamu můžete odkudkoliv zapisovat a tím měnit jednotlivé hodnoty nebo přidávat nové položky. A také se můžete jako klient přihlásit k odběru změn (jiný klient zapíše novou hodnotu a připojení přihlášení klienti ji dostanou).&lt;br /&gt;
&lt;br /&gt;
Každou položku je potřeba založit - to se stane automaticky při prvním zápisu (klient vždy zapisuje ten pár Topic-Value). Pokud už položka existuje, tak se při zápisu jen změní její hodnota.&lt;br /&gt;
&lt;br /&gt;
Zpátky k příkladu.&lt;br /&gt;
&lt;br /&gt;
Mějme spoustu modulů SDS které jsou všichni MQTT klienti, připojení ke společnému MQTT brokeru (server spuštěný např. na rPI). První SDS měří teplotu a pravidelně publikuje její hodnotu na MQTT broker, do položky &amp;quot;teplota1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Deset dalších SDS je přihlášeno k odběru (subscribe) této položky &amp;quot;teplota1&amp;quot;, a každé toto přihlášené SDS obdrží všechny nové zapsané hodnoty do této položky (které tam píše to první SDS) a na základě této hodnoty mohou provádět nějakou regulační činnost.&lt;br /&gt;
&lt;br /&gt;
Tím se elegantně vyřešení komunikace z prvního SDS do dalších deseti, aniž by se muselo řešit jak to složitě bez MQTT provádět.&lt;br /&gt;
&lt;br /&gt;
Samozřejmě toto je jen jednoduchý příklad, protože typicky MQTT systém bývá mnohem složitější - ale stále stejně snadno realizovatelný (univerzální princip Publish/Subscribe).&lt;br /&gt;
&lt;br /&gt;
Vždy je potřeba, aby v SDS byl nahrán aktuální FW, který MQTT podporuje - pro SDS-C to lze ověřit přes sys[2199].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Příklad: SDS a Node-RED ===&lt;br /&gt;
&lt;br /&gt;
Node-RED je jedním z velice oblíbených nástrojů pro beznákladovou realizaci složitější automatizace.&lt;br /&gt;
&lt;br /&gt;
Ze systému [[https://cookbook.nodered.org/mqtt/connect-to-broker Node-RED]] lze SDS plně ovládat - a to formou obousměrné komunikace přes MQTT.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Příklad: SDS a SolPIPlog ===&lt;br /&gt;
&lt;br /&gt;
SolPIPlog je program pro monitorování FVE měničů (MPP Solar). SDS umí s tímto programem komunikovat přes MQTT. Příkladem je např. přepínání režimu (SOL/BAT) podle stavu HDO (který SDS zjistí přes svůj optovstup, kam se připojí kontajt relé od HDO).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě MQTT má neomezené možnosti a dva zmíněné příklady jsou opravdu jen nástřelem toho, co se dá realizovat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Specifikace ==&lt;br /&gt;
&lt;br /&gt;
SDS podporuje základní MQTT 3.1.1 protokol (Level4), nad TCP; toto je současný průmyslový standard. Implementace odpovídá http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html .&lt;br /&gt;
&lt;br /&gt;
Klíčové funkcionality protokolu, které lze vyvolat z SDS programu:&lt;br /&gt;
* CONNECT&lt;br /&gt;
* DISCONNECT&lt;br /&gt;
* PUBLISH&lt;br /&gt;
* SUBSCRIBE (+ ACK)&lt;br /&gt;
* UNSUBSCRIBE (+ ACK)&lt;br /&gt;
* PINGREQ (+ PINGRESP)&lt;br /&gt;
&lt;br /&gt;
Interně SDS automaticky provándí MQTT PING směrem do Broker.&lt;br /&gt;
&lt;br /&gt;
Všechny texty jsou přenášeny ve formátu UTF-8.&lt;br /&gt;
&lt;br /&gt;
V tuto chvíli není implementováno WILL MESSAGE.&lt;br /&gt;
&lt;br /&gt;
QoS je v režimu 0x00.&lt;br /&gt;
&lt;br /&gt;
Keep-Alive je ve výchozím nastavení 120 sekund a odesílání PINGREQ tedy co 96 sekund. Toto nastavení lze změnit při připojení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Použití ==&lt;br /&gt;
&lt;br /&gt;
Použití MQTT máte v rámci SDS plně pod svou kontrolou, tím, že si vše ovládnete ve svém programu. MQTT tedy v rámci SDS není uzavřeno do webového rozhraní apod., právě naopak, je plně k dispozici.&lt;br /&gt;
&lt;br /&gt;
Standardní postup je následující:&lt;br /&gt;
* 1. otevřete spojení z SDS (klient) na MQTT server (broker)  &lt;br /&gt;
* 2. - podle potřeby odešlete data z SDS na server (funkce PUBLISH)&lt;br /&gt;
* 3. - podle potřeby se přihlásíte k odběru dat ze serveru (funkce SUBSCRIBE)&lt;br /&gt;
* 4. až nebude spojení na server potřeba, odpojíte se&lt;br /&gt;
&lt;br /&gt;
Všechny čtyři body se ovládají voláním patřičných funkcí v programu, s vhodnými parametry, a se správným zpracováním výsledných hodnot.&lt;br /&gt;
&lt;br /&gt;
Dokud není zavolaná funkce hotová (to si musí program hlídat čtením patřičného sys[]), nesmí být zavolána další !&lt;br /&gt;
&lt;br /&gt;
'''Pozor:''' při každém novém startu SDS-C programu je MQTT Broker odpojen. Váš SDS-C program se tedy musí vždy nejprve připojit, aby mohl využívat další funkce pro komunikaci s brokerem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jak vyvíjet a testovat ==&lt;br /&gt;
&lt;br /&gt;
Vývoj a testování vždy předchází plnému nasazení - je dobré si svůj program nejprve odladit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulátor SDSC.exe ===&lt;br /&gt;
&lt;br /&gt;
V okně &amp;quot;NETWORK&amp;quot; otevřete kartu &amp;quot;MQTT&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Zde lze simulovat chyby (neprovedené připojení, odmítnutí hesla) a tak odzkoušet robustnost svého SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Dále je zde seznam položek (Topics) které jednak SDS-C program publikoval, a také ke kterým je SDS-C program přihlášen (subscribe).&lt;br /&gt;
&lt;br /&gt;
Přihlášené položky jsou označeny číslem indexu do tabulky (#1 .. #31 - pozor, počet je různý pro různé SDS moduly).&lt;br /&gt;
&lt;br /&gt;
Změna hodnoty (value) pro každou položku je možná (buď poklepáním na řádek v seznamu, nebo tlačítkem &amp;quot;broker publish&amp;quot;). Ve všech těchto případech, po provedení změny, dojde k odeslání nové hodnoty do SDS-C programu (ale to samozřejmě jen za předpokladu že program je na daný topic přihlášen).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Skutečné SDS ===&lt;br /&gt;
&lt;br /&gt;
Fyzický modul SDS lze samozřejmě připojit k reálnému MQTT brokeru.&lt;br /&gt;
&lt;br /&gt;
Při vývoji se může hodit pomocná stránka: 192.168.1.250/cgi_mqtt .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT Broker snadno a rychle ==&lt;br /&gt;
&lt;br /&gt;
Nainstalujte si Mosquitto MQTT broker na svůj počítač (Windows / Linux). Ověřeno to máme na Win7, Win10, a také na rPI a odroid.&lt;br /&gt;
&lt;br /&gt;
 https://mosquitto.org/download/&lt;br /&gt;
&lt;br /&gt;
Pro Windows, pak stačí spustit &amp;quot;C:\Program Files\mosquitto\mosquitto.exe&amp;quot;, který (při spuštění bez parametrů = výchozí stav) otevře prázdné konzolové okno a zůstane aktivní. V tuto chvíli máte na svém Win PC aktivní MQTT broker, a to na &amp;quot;localhost:1883&amp;quot; (dejte si pozor na firewall).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro Linux, rPI atd. platí jiný vhodný postup, ale výsledek je stejný.&lt;br /&gt;
&lt;br /&gt;
SDS pak lze na tento broker (server) připojit a provádět Publish a Subscribe.&lt;br /&gt;
&lt;br /&gt;
Pro kontrolu toho, jak se server chová a co vše v něm je (co tam SDS nebo jiní klienti poslali), tak je k dispozici vynikající nástroj MQTT Explorer.&lt;br /&gt;
 &lt;br /&gt;
 http://mqtt-explorer.com/&lt;br /&gt;
&lt;br /&gt;
Je opět zdarma a důrazně doporučuji se s ním seznámit a používat to.&lt;br /&gt;
&lt;br /&gt;
Umožňuje jednak plnou kontrolu položek (Topics) a jejich hodnot, ale také umí tyto položky ručně vytvořit nebo do nich zapsat (což se pak přenese do klientů kteří mají Subscribe na danou položku). Zkrátka ideální pro vývoj a testování.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT broker v Internetu ==&lt;br /&gt;
&lt;br /&gt;
Pro bezpečnost je ideální mít svůj vlastní MQTT broker ve své síti. Stačí koupit malý Linuxový počítač (např. rPI) a tam MQTT broker nainstalovat a je to.&lt;br /&gt;
&lt;br /&gt;
Pokud si provedete vhodné nastavení své sítě a firewallu, lze k tomuto brokeru přistupovat i z Internetu.&lt;br /&gt;
&lt;br /&gt;
Toto je často žádoucí, např. máte-li svou domácí automatizaci která běží na MQTT a chcete ji dálkově ovládat a kontrolovat, např. z mobilní aplikace.&lt;br /&gt;
&lt;br /&gt;
Druhá možnost je využít nějaký veřejný MQTT broker, je jich plný Internet - ale toto přináší řadu bezpečnostních rizik a nedoporučujeme to. Když už mít broker na Internetu, tak na svém vlastním serveru.&lt;br /&gt;
&lt;br /&gt;
Důležité je, že SDS (MQTT klient) používá připojení k MQTT brokeru jako plain TCP, tedy nepoužívá v této verzi SSL/TLS (to až v budoucnu SDS třetí produktové řady).&lt;br /&gt;
&lt;br /&gt;
Proto je důležité umístit MQTT broker do vnitřní sítě (stejná síť na které jsou SDS), která je oddělena od sítě Internet bezpečným a spravně nastaveným firewallem.&lt;br /&gt;
&lt;br /&gt;
Takový MQTT broker pak může snadno obsluhovat všechny SDS a další klienty přes plain TCP spoje, a do Internetu může mít dodatečně zabezpečený TLS MQTT spoj. Takhle to nastavit jde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementace v SDS-C a FULL-C ==&lt;br /&gt;
&lt;br /&gt;
Názvy funkcí a postupy jsou pro oba programovací jazyky shodné.&lt;br /&gt;
&lt;br /&gt;
'''Rozdíl''' je v indexech:&lt;br /&gt;
* SDS-C má informace a údaje v sys[2199] až sys[2321]&lt;br /&gt;
* FULL-C má informace a údaje dostupné přes get funkci od indexu 12199 až 12321.&lt;br /&gt;
&lt;br /&gt;
Všimněte si, že význam indexů pro SDS-C (2199 až 2321) je 1:1 namapován na FULL-C indexy (12199 až 12321 - tedy FULL-C má pouze aplikováno pevné posunutí o 10000).&lt;br /&gt;
&lt;br /&gt;
 [[FULL-C: MQTT_functions|Detaily pro implementaci ve FULL-C (a příklady) naleznete zde.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vzorový program SDS-C - připojení a Publish ==&lt;br /&gt;
&lt;br /&gt;
Následující program je pro SDS První Produktové Řady, které se programují jazykem SDS-C.&lt;br /&gt;
&lt;br /&gt;
MQTT Broker je spuštěn (např. na rPI) na adrese 192.168.4.249 (a TCP portu 1883). Náš klient (SDS) se přihlásí jako uživatel &amp;quot;sds1234&amp;quot; s heslem &amp;quot;password&amp;quot;, a následně provede 2x PUBLISH a nakonec se odpojí.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // network communication shall be started only after the SDS is connected to network (ethernet is up)&lt;br /&gt;
 echo('waiting for network availability');&lt;br /&gt;
 &lt;br /&gt;
waiting_ethernet:&lt;br /&gt;
 if (sys[24] == 0) goto waiting_ethernet; // 0 = no ethernet&lt;br /&gt;
 if (sys[27] == 0) goto waiting_ethernet; // 0 = no IP address&lt;br /&gt;
 &lt;br /&gt;
 // OK, now we have an ethernet connection up and running&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
 // EXAMPLE START:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // connect on start&lt;br /&gt;
 echo('connecting to MQTT Broker...');&lt;br /&gt;
&lt;br /&gt;
 //           ip   ip   ip ip   port  client-id          username   password    keepalive(sec)&lt;br /&gt;
 mqtt_connect(192, 168, 4, 249, 1883, 'sds-client-1234', 'sds1234', 'password', 120);&lt;br /&gt;
&lt;br /&gt;
 // wait for a complete connection&lt;br /&gt;
 label waiting_for_mqqt_conn:&lt;br /&gt;
  &lt;br /&gt;
 // error - failed ?&lt;br /&gt;
 if (sys[2200] &amp;lt;= 0) goto mqtt_conn_fail; // error ? (any negative number is error code)&lt;br /&gt;
&lt;br /&gt;
 // done - connected ?&lt;br /&gt;
 if (sys[2200] != 4) goto waiting_for_mqqt_conn; // success ? (yes only if == 4)&lt;br /&gt;
&lt;br /&gt;
 // test the CONNACK result - see &amp;quot;3.2.2.3 Connect Return code&amp;quot; - we expect &amp;quot;0&amp;quot; as OK&lt;br /&gt;
&lt;br /&gt;
 if (sys[2201] != 0) goto mqtt_conn_fail; // is broker's result code OK ? (OK only if == 0)&lt;br /&gt;
&lt;br /&gt;
 // connected (CONNACK result is 0x00)&lt;br /&gt;
&lt;br /&gt;
 echo('connected to broker: OK');&lt;br /&gt;
&lt;br /&gt;
 //&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 // example: let us publish three various topics&lt;br /&gt;
&lt;br /&gt;
 mqtt_publish('sds/teploty/cidlo1', sys[310]); &lt;br /&gt;
 w1: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w1;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 mqtt_publish('sds/teploty/cidlo2', sys[311]);&lt;br /&gt;
 w2: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w2;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
 &lt;br /&gt;
 mqtt_publish('sds/teploty/text_xyz', 'hello:', 1234, 'there');  // &amp;lt;- you can pass more than one parameter (all params will get joined together)&lt;br /&gt;
 w3: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;    // disconnected ?&lt;br /&gt;
 if (sys[2202] == 1) goto w3;               // still working ?&lt;br /&gt;
 if (sys[2202] != 2)                        // success ?&lt;br /&gt;
  { echo('publish error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 // ...&lt;br /&gt;
&lt;br /&gt;
 // and let us subscribe to a topic&lt;br /&gt;
 &lt;br /&gt;
 mqtt_subscribe(1, 'ha/output/q1/state');&lt;br /&gt;
 w4:&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail;   // disconnected ?&lt;br /&gt;
 if (sys[2202] == 4) goto w4;              // still working ? &lt;br /&gt;
 if (sys[2202] != 8)                       // success ?&lt;br /&gt;
  { echo('sub error = ', sys[2202]); };&lt;br /&gt;
&lt;br /&gt;
 //...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // finally, once done - close the connection &lt;br /&gt;
&lt;br /&gt;
 // go&lt;br /&gt;
 mqtt_disconnect();&lt;br /&gt;
&lt;br /&gt;
 // we shall wait until the connection is properly closed&lt;br /&gt;
wait_for_disconnect:&lt;br /&gt;
 if (sys[2200] &amp;lt;= 0) goto error;                // error ?&lt;br /&gt;
 if (sys[2200] == 8) goto wait_for_disconnect;  // success, or still working ?&lt;br /&gt;
&lt;br /&gt;
 // done !&lt;br /&gt;
 echo('DISCONNECTED from broker');&lt;br /&gt;
&lt;br /&gt;
 wait(250);&lt;br /&gt;
&lt;br /&gt;
 // EXIT the example - we are DONE&lt;br /&gt;
 return;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // error handling&lt;br /&gt;
 label mqtt_conn_fail:&lt;br /&gt;
 echo('unable to connect... error=', sys[2200],' connack=', sys[2201]);&lt;br /&gt;
&lt;br /&gt;
 // error handling&lt;br /&gt;
 label error:&lt;br /&gt;
 echo('error');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pozn. mqtt_connect() - parametry:&lt;br /&gt;
* keepalive - hodnota 0 použije výchozí nastavení (120 sec), další platné hodnoty jsou 15 až 600 (sekund).&lt;br /&gt;
* client-id - vždy by to měla být unikátní identifikace vašeho SDS, typicky přidělena správcem MQTT Broker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vzorový program FULL-C - připojení a Publish ==&lt;br /&gt;
&lt;br /&gt;
Příklady pro FULL-C jsou na samostatné stránce: [[FULL-C: MQTT_functions]].&lt;br /&gt;
&lt;br /&gt;
Princip použití MQTT klient ve FULL-C je identický jako pro SDS-C, jen pozor na pevně posunuté indexy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Odesílání hodnot do Brokeru ==&lt;br /&gt;
&lt;br /&gt;
Je-li SDS úspěšně připojeno, pak lze odeslat libovolnou hodnotu libovolné položky (Topic) z SDS do Brokeru, který si ji uschová a který ji také předá všem dalším připojeným zařízením, které jsou k dané položce (Topic) přihlášeny (subscribed).&lt;br /&gt;
&lt;br /&gt;
Názvy položek musí být centrálně koordinované, aby celá akce dávala smysl. To už je na vás.&lt;br /&gt;
&lt;br /&gt;
'''Omezení je na současnou velikost (společnou délku) názvu položky (Topic Name) a její hodnoty (Value), což se spolu musí vlézt do nejvíce cca 1465 znaků.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
POZOR - před, a po zavolání funkce mqtt_publish() je žádoucí testovat stav sys[2202] ( respektive pro FULL-C: get(12202) ), a dokud tam nebude očekávaný výsledek nebo chybový kód, tak nevolat další mqtt_xxx funkce !&lt;br /&gt;
&lt;br /&gt;
Vždy musíte ve svém programu správně reagovat na všechny chybové stavy ve sys[2202] (respektive get 12202), je to váš úkol, SDS to za vás řešit nebude (a tím vám svazovat ruce).&lt;br /&gt;
&lt;br /&gt;
Funkce mqtt_publish() umožňuje skládání parametrů - první parametr je vždy název položky (topic name), a všechny zbylé jsou převedeny na společnou hodnotu (value).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
   // you can use multiple parameters for the VALUE&lt;br /&gt;
   // only the very first parameter represents a TOPIC NAME&lt;br /&gt;
&lt;br /&gt;
   mqtt_publish('topicname', '1234', 'abcd', 'efgh', 'xyz');&lt;br /&gt;
&lt;br /&gt;
   // result: 'topicname' gets a new VALUE of '1234abcdefghxyz'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příjem hodnot z Brokeru ==&lt;br /&gt;
&lt;br /&gt;
SDS se umí přihlásit na odběr hodnot pro různé položky. Pokud je SDS takto přihlášeno, tak jakákoliv změna hodnoty na straně Brokera (např. způsobena zápisem jiného zařízení, aplikace, atd.), se prakticky ihned přenese do SDS, kde si aktualizovanou hodnotu může váš program zpracovat dle potřeby.&lt;br /&gt;
&lt;br /&gt;
Přihlášení se provádí pomocí funkce mqtt_subscribe(). Aby se to povedlo, musíte být úspěšně připojeni k Brokeru.&lt;br /&gt;
&lt;br /&gt;
Přihlásit se lze k libovolné položce (Topicu), jejíž celý textový název musíte samozřejmě znát.&lt;br /&gt;
&lt;br /&gt;
Pozor - všechny názvy položek jsou citlivé na malé a velké písmena (nejsou záměnné).&lt;br /&gt;
&lt;br /&gt;
Pozor - platné indexy jsou 1 až N (protože index 0 je vyhrazený pro aktuálně interně zpracovávanou položku, nelze jej využít pro program).&lt;br /&gt;
&lt;br /&gt;
'''PŘÍKLAD V SDS-C:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 // SDS-C&lt;br /&gt;
&lt;br /&gt;
 // expectation: broker has to be already connected (see the previous example)&lt;br /&gt;
&lt;br /&gt;
 // let us:&lt;br /&gt;
 //  subscribe to a topic named: &amp;quot;control/rele1&amp;quot;, and let us assigned it a local index of 1&lt;br /&gt;
&lt;br /&gt;
 mqtt_subscribe(1, 'control/rele1');&lt;br /&gt;
&lt;br /&gt;
 // wait for the successful subscribe &lt;br /&gt;
 wS: &lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto mqtt_conn_fail; // disconnected (if any negative number)&lt;br /&gt;
 if (sys[2202] == 4) goto wS;            // still working... (done when != 4)&lt;br /&gt;
 if (sys[2202] != 8)                     // success ? (only if == 8, otherwise error or failure)&lt;br /&gt;
 { &lt;br /&gt;
   // FAILED -&amp;gt; not subscribed !&lt;br /&gt;
   echo('sub error = ', sys[2202]); &lt;br /&gt;
   return;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
 // now, as we are subscribed, we will watch for any incoming update (value change), as in the following example:&lt;br /&gt;
&lt;br /&gt;
 var last1;&lt;br /&gt;
 last1 = 0;&lt;br /&gt;
&lt;br /&gt;
loop:&lt;br /&gt;
&lt;br /&gt;
 // any change ? (any new message?)&lt;br /&gt;
 if (last1 != sys[2291])  // sys[2291] is a timestamp for index #1&lt;br /&gt;
  {&lt;br /&gt;
    // store so we can compare it later, again&lt;br /&gt;
    last1 = sys[2291];&lt;br /&gt;
&lt;br /&gt;
    // use the new value!&lt;br /&gt;
    echo('TOPIC #1: &amp;quot;',sys[2211],'&amp;quot; update to: &amp;quot;',sys[2251],'&amp;quot; ');&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto error; // disconnected&lt;br /&gt;
&lt;br /&gt;
 // continue loop&lt;br /&gt;
 goto loop;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 // ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 // once we are not interesed in the topic any more, we can unsubscribe&lt;br /&gt;
 mqtt_unsubscribe_index(1);&lt;br /&gt;
&lt;br /&gt;
 // handle the job&lt;br /&gt;
 if (sys[2200] &amp;lt; 0) goto error; // disconnected&lt;br /&gt;
 wU: &lt;br /&gt;
 if (sys[2202] &amp;lt; 0) goto error; // error (if any negative number)&lt;br /&gt;
 if (sys[2202] == 16) goto wU;  // waiting until done (done when result == 32)&lt;br /&gt;
&lt;br /&gt;
 echo('unsubscribed');&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad přehledně ukazuje, jak systém funguje. Pro jednoduchost je zde hrubá nekonečná smyčka (loop) ale každý jistě vidí i své, jiné řešení vhodnější pro svůj vlastní program.&lt;br /&gt;
&lt;br /&gt;
Základní princip je v používání SDS indexů #1 až #31, kterým přiřazujeme jednotlivé přihlášené položky (subscribed topics).&lt;br /&gt;
&lt;br /&gt;
Je na tvůrci programu, jak indexy využije a kterému indexu přiřadí jaký název položky (topic name). A konkrétní názvy položek vždy záleží na celém systémovém návrhu, kde SDS je zcela transparentní.&lt;br /&gt;
&lt;br /&gt;
Z principu MQTT protokolu, jsou hodnoty vždy uvedeny jako textový řetězec. Např. pomocí SDS-C funkce atoi to ale snadno převedete na číslo, se kterým lze dále pracovat, je-li to potřeba.&lt;br /&gt;
&lt;br /&gt;
Funkce umožňuje skládání parametrů - první parametr je vždy index, a všechny zbylé jsou převedeny na název položky (topic name).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
POZOR - před, a po zavolání funkce mqtt_subscribe() je žádoucí testovat stav sys[2202] (respektive get 12202), a dokud tam nebude očekávaný výsledek nebo chybový kód, tak nevolat další mqtt_xxx funkce !&lt;br /&gt;
&lt;br /&gt;
Vždy musíte ve svém SDS-C programu správně reagovat na všechny chybové stavy ve sys[2202] (respektive get 12202), je to váš úkol, SDS to za vás řešit nebude (a tím vám svazovat ruce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Udržování spojení ===&lt;br /&gt;
&lt;br /&gt;
PŘÍKLAD VE FULL-C:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// MQTT: make sure the broker is connected, reconnect if needed (blocks up to ~20 s)&lt;br /&gt;
// returns 1 = connected, 2 = freshly reconnected (subscribe again!), 0 = failed&lt;br /&gt;
int mq_link(void)&lt;br /&gt;
{&lt;br /&gt;
  int st;&lt;br /&gt;
  unsigned int t0;&lt;br /&gt;
&lt;br /&gt;
  st = SDS_get_i32(12200);&lt;br /&gt;
  if (st == 4) return 1;&lt;br /&gt;
&lt;br /&gt;
  // not connected or status damaged (e.g. -3 after a too-early call): clean up first&lt;br /&gt;
  if ((st != 0) &amp;amp;&amp;amp; (st != -2))&lt;br /&gt;
  {&lt;br /&gt;
    mqtt_disconnect();&lt;br /&gt;
    t0 = SDS_get_u32(45);&lt;br /&gt;
    for (;;)&lt;br /&gt;
    {&lt;br /&gt;
      st = SDS_get_i32(12200);&lt;br /&gt;
      if ((st == 0) || (st == -2)) break;&lt;br /&gt;
      if ((SDS_get_u32(45) - t0) &amp;gt; 5000) break;&lt;br /&gt;
      wait(10);&lt;br /&gt;
    }&lt;br /&gt;
    wait(500);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  mqtt_connect(192, 168, 3, 99, 1883, &amp;quot;my-sds&amp;quot;, &amp;quot;user&amp;quot;, &amp;quot;password&amp;quot;, 60);&lt;br /&gt;
  t0 = SDS_get_u32(45);&lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
    st = SDS_get_i32(12200);&lt;br /&gt;
    if (st == 4) break;&lt;br /&gt;
    if (st &amp;lt; 0) return 0;&lt;br /&gt;
    if ((SDS_get_u32(45) - t0) &amp;gt; 15000) return 0;&lt;br /&gt;
    wait(10);&lt;br /&gt;
  }&lt;br /&gt;
  if (SDS_get_i32(12201) != 0) { mqtt_disconnect(); return 0; }&lt;br /&gt;
  return 2;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Známé chyby ve firmware ===&lt;br /&gt;
&lt;br /&gt;
V průběhu provozu řady SDS bylo mnoha uživateli testováno, jak se MQTT v SDS chová. Byly nalezeny různé záležitosti, které se průběžně v nových vydáních firmware řeši a opravují.&lt;br /&gt;
&lt;br /&gt;
Pokud však máte starší firmware, nebo ještě pokud nebyl vůbec opravený firmware vydán, musíte tato omezení znát a použít opravné postupy ve vlastním FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
'''Délka odeslání MQTT dat do brokeru'''&lt;br /&gt;
&lt;br /&gt;
Původní firmware může mít až půl sekundy zpoždění mezi zavoláním funkce mqtt_publish() a skutečným odesláním příslušného paketu do sítě. To je řešeno v novém firmware, ale pokud jej nemáte, musíte svůj FC program psát tak, aby s tímto uměl správně pracovat. &lt;br /&gt;
&lt;br /&gt;
'''Špatné předání chybových stavů'''&lt;br /&gt;
&lt;br /&gt;
Je-li zavoláno mqtt_publish() nebo mqtt_subscribe() nebo mqtt_unsubscribe_*(), zapíše to -3 do indexu [12200] namísto správného indexu [12202].&lt;br /&gt;
Takže [12200] zůstane s obsahem -3, i když tam ta hodnota nemá co dělat. Toto má pak důsledek v tom, že pokud váš program testuje [12200] na hodnotu 4 tak ji tam neuvidí a bude si nesprávně myslet, že došlo k odpojení SDS od brokeru.&amp;lt;br&amp;gt;&lt;br /&gt;
''Toto je opraveno v novém firmware (11/2026 a novější).''&lt;br /&gt;
&lt;br /&gt;
Správně to má být: &amp;lt;br&amp;gt;&lt;br /&gt;
* [12200] a [12201] = pouze pro mqtt_connect a mqtt_disconnect&amp;lt;br&amp;gt;&lt;br /&gt;
* [12202] = pouze pro mqtt_publish, mqtt_subscribe, mqtt_unsubscribe_* atd.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ve starším firmware byla chyba, kdy místo do [12202] se některé chybové stavy (záporné hodnoty např. -3, -5, -7 atd.) zapsaly nesprávně do [12200].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Po odpojení přes mqtt_disconnect() občas dojde k předání chyby výpadku TCP spojení'''&lt;br /&gt;
&lt;br /&gt;
Toto je vlastnost, která se týká sítě, a nelze ji vždy vyloučit.&lt;br /&gt;
&lt;br /&gt;
Po zavolání mqtt_disconnect() může postupně dojít k zápisu hodnoty -2 do [12200] (ihned po zavolání je zapsáno 32 do [12200], a pak proběhne ukončení TCP spojení, které může ve svém postupu zapsat -2).&lt;br /&gt;
&lt;br /&gt;
Proto pozor při použití testu &amp;lt;pre&amp;gt;if (sys[2200] &amp;lt;= 0) goto error;&amp;lt;/pre&amp;gt; , protože to může vyhodnotit v podstatě správné ukončení spojení jako chybu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Maximální velikosti (položky subscribe tabulky) ===&lt;br /&gt;
&lt;br /&gt;
'''Stav 06/2020'''&lt;br /&gt;
&lt;br /&gt;
Maximální délka názvu položky (Topic Name) pro přihlášené položky je 128 znaků.&lt;br /&gt;
&lt;br /&gt;
Maximální délka obsahu hodnoty (Value) pro přihlášené položky je 384 znaků.&lt;br /&gt;
&lt;br /&gt;
''Informace'': &lt;br /&gt;
&lt;br /&gt;
Chystáme úpravu aby byl aplikován jen celkový limit (512 znaků) a ne tyto dva samostatné limity. V současném FW ale zatím stále platí.&lt;br /&gt;
&lt;br /&gt;
Toto omezení se vztahuje jen na Subscribe Tabulku a neplatí pro PUBLISH (tam jsou omezení jiná viz text výše).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Volba indexů ===&lt;br /&gt;
&lt;br /&gt;
Je čistě na vás zvolit si každý použitý index do tabulky (tzn. první parametr do funkce mqtt_subscribe).&lt;br /&gt;
&lt;br /&gt;
Pokud provedete přihlášení s jedním stejným indexem na více různých položek (topics), tak SDS daný požadavek do Brokeru odešle (pro každou žádost). Nicméně SDS si uschová ve své paměti jen tu nejposlednější pro každý index.&lt;br /&gt;
&lt;br /&gt;
Takže si dejte pozor, aby jste si pro každý index provedli přihlášení (subscribe) jen a právě jednou.&lt;br /&gt;
&lt;br /&gt;
Tabulka je vždy vyčištena při odpojení od Brokeru.&lt;br /&gt;
&lt;br /&gt;
Nechcete-li využívat této pomocné tabulky, nemusíte; ale ztrácíte výhodu uchování poslední zaslané hodnoty pro každou položku v této tabulce uschovanou.&lt;br /&gt;
&lt;br /&gt;
SDS samozřejmě dává programu k dispozici všechny příchozí zprávy z Brokeru, nicméně pokud jich přijde více za sebou v rychlém sledu, nemusíte je zdaleka stačit programem zpracovat. A právě proto je zde na pomoc tento systém s tabulkou, kam SDS zaručeně zařadí poslední přijaté hodnoty pro každou položku (Topic), která vás zajímá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pozor ===&lt;br /&gt;
&lt;br /&gt;
Každé SDS má k dispozici jinak velkou tabulku pro Subscribe - tedy jsou SDS, které mají k dispozici méně indexů než plných 32. S tím musíte počítat, a můžete využívat jen tolik indexů (řádků v tabulce), kolik jich cílové SDS poskytuje.&lt;br /&gt;
&lt;br /&gt;
Přesnou hodnotu si může SDS-C program zjistit čtením sys[2209] (respektive get 12209).&lt;br /&gt;
&lt;br /&gt;
Pokud se stane, že by vám počet dostupných indexů nestačil, lze si snadno pomoct - lepším návrhem využití jednotlivých Topic. Můžete např. neplýtvat a použít jeden Topic na řízení více věcí (příklad: ovládání jednotlivých relé přes jednotlivé bity ve společném čísle, přenášeném v rámci jediného Topicu).&lt;br /&gt;
&lt;br /&gt;
Při každém PŘIPOJENÍ k MQTT Brokeru dojde ke smazání celé tabulky (celého obsahu). Tzn. pokaždé když zavoláte mqtt_connect() tak dojde k vyčistění obsahu tabulky - a také ke zrušení všech přihlášení.&lt;br /&gt;
&lt;br /&gt;
Při každém připojení tedy musíte vždy poslat všechny požadavky na přihlášení, které vás aktuálně zajímají, bez ohledu na to, k čemu jste byli přihlášeni v případném předchozím připojení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Velikosti ==&lt;br /&gt;
&lt;br /&gt;
Co můžete v rámci svého programu využít:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| '''SDS'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| MQTT klient &lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| FW verze &lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;ClientID&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;username&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;password&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;Topic Name&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#bbcdcd;&amp;quot;| max délka &amp;lt;br&amp;gt;Value&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| počet položek ve&amp;lt;br&amp;gt;Subscribe tabulce&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: První Produktová Řada&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MICRO LM (LIGHT, E)'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|není&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS IO6 LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|96&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|192&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|2&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MACRO LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|není&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|0&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS UPS ONEDPS LM'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;jen EN verze&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|3&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: První Produktová Řada - verze ST&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MICRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MACRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|19.10.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|96&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|256&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|3&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS IO6 ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS TTCPRO ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS MINI ST'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (SDS-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|26.6.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;9&amp;quot; style=&amp;quot;text-align: center;&amp;quot;|&amp;lt;br&amp;gt;SDS: Druhá Produktová Řada&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS BIG 512'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|20&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS BIG 64/128'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS SMALL 64/128'''&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|'''SDS STSW''' (OEM)&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#55ee55;&amp;quot;|ano (FULL-C)&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|9.8.2020&amp;lt;br&amp;gt;a novější&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|64&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|128&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|384&lt;br /&gt;
| style=&amp;quot;padding: 5px;&amp;quot;|7&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_MBUS&amp;diff=982</id>
		<title>SDS BIG: MBUS</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_MBUS&amp;diff=982"/>
		<updated>2026-10-26T19:37:31Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sběrnice M-Bus (MBUS, MBus, MeterBus) je určena pro sběrnicové dvoudrátové připojení měřičů energií a veličin, např. elektroměrů, vodoměrů, měřičů tepla atd.&lt;br /&gt;
&lt;br /&gt;
Výhodou je že je pouze dvoudrátová a umožňuje obousměrný přenos dat; protokol je standardizován a prakticky všichni výrobci měřidel poskytují možnost použít MBUS.&lt;br /&gt;
&lt;br /&gt;
SDS může fungovat jako centrální řídící bod (master) pro všechny k němu připojené MBUS prvky.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
1. MBUS sběrnici lze připojit v rámci [[SDS_BIG|SDS-BIG]] (nebo jiného SDS) a to osazením doplňující desky LCD-KEY-MBUS.&lt;br /&gt;
&lt;br /&gt;
2. Lze také alternativě využít samostatný [[SDS_MBGW|SDS-MBGW]], který integruje sběrnici MBUS spolu s SDS-STSW (a řadou dalších prvků) do jednoho výrobku.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SDS-BIG (BIG2) ===&lt;br /&gt;
&lt;br /&gt;
Následující informace se týkají rozšiřující &amp;quot;sandwich&amp;quot; desce (modulu) pro SDS-BIG, která tedy umožní SDS-BIG komunikovat rozhraním MBUS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;'''Jak tento modul koupit ?''' Na oficiálním eShopu '''www.onlinetechnology.cz'''&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sandwich modul pro BIG / BIG2:&lt;br /&gt;
[[Soubor:foto-BIG-sandwich-MBUS.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zapojení sandwich desky z hlediska uživatele ==&lt;br /&gt;
&lt;br /&gt;
Display a klávesnici na sandwich desce řídí kontrolér, který je na sandwich desce umístěn. Tento kontrolér má v sobě svůj program (firmware), který je připraven od výrobce a uživatel jej nemá důvod měnit (vše je dodáno hotové a funkční).&lt;br /&gt;
&lt;br /&gt;
Kontrolér interně komunikuje se základní deskou (SDS-BIG) přes vyhrazené sériové rozhraní (SDS-BIG má několik samostatných sériových rozhraní pro různé účely).&lt;br /&gt;
&lt;br /&gt;
Protokol, který je zde použit, je do detailu popsán a je určen pro uživatele, kteří si pomocí tohoto protokolu celou sandwich desku ovládají, ze svého FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
Pokud není v SDS-BIG nahrán uživatelský FULL-C program, jeho úlohu zastoupí SDS-BIG sám, a do sandwich desky posílá své vlastní údaje (takže na LCD se zobrazují hodnoty ze všech měřených vstupů) - tím je v takovém připadě ale pouze ošetřeno zobrazení informací na displayi, nic víc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Deska LCD-KEY-MBUS poskytuje tyto funkce:&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grafické LCD - výpis textu, grafika&lt;br /&gt;
* Tlačítka - dvě samostatná tlačítka&lt;br /&gt;
* MBUS master - viz popis dále&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MBUS master - deska LCD-KEY-MBUS ==&lt;br /&gt;
&lt;br /&gt;
Sběrnice MBUS je průmyslový standard pro komunikaci mezi MASTER (zde SDS) a SLAVEs (měřiče energií, veličin, atd.). Prakticky je to univerzální sběrnice pro obousměrný přenos dat.&lt;br /&gt;
&lt;br /&gt;
Sběrnice má jednoho řídícího (master), což je SDS-BIG, a řadu podřízených (slave).&lt;br /&gt;
&lt;br /&gt;
Nejčastěji je sběrnice MBUS využita pro odečet měřičů energií.&lt;br /&gt;
&lt;br /&gt;
Délka kabelu sběrnice a počet podřízených na sběrnici je omezen především průřezem propojovacích vodičů v rámci rozvodu MBUS signálu, a také především jejich počtem (každý slave prvek má určitý odběr, a součet odběru všech připojených slave prvků nesmí přesáhnout maximální hodnotu napájecího zdroje - master).&lt;br /&gt;
&lt;br /&gt;
Potřebné jsou dva vodiče (pro MBUS signál), často se vede i třetí vodič navíc jako společné PE (uzemnění - z bezpečnostních a ochranných důvodů).&lt;br /&gt;
&lt;br /&gt;
MBUS master může na sběrnici vysílat příkazy, a přijímat odpovědi od jednotlivých připojených zařízení. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Napájení ==&lt;br /&gt;
&lt;br /&gt;
Napájení celého MBUS rozhraní musí být provedeno napětím 24V stejnosměrných - nelze použít jiné napětí !&lt;br /&gt;
&lt;br /&gt;
Napájení pro MBUS rozhraní SDS je zcela izolováno od zbytku SDS, a musí se tedy přivést na samostatné svorky.&lt;br /&gt;
&lt;br /&gt;
Celá část rozhraní MBUS je galvanicky izolována od SDS-BIG.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání ==&lt;br /&gt;
&lt;br /&gt;
MBUS je v rámci SDS reprezentován jako sériové rozhraní (RX+TX), ke kterému máte plný přístup jako k rozhraní COM6 (na SDS-BIG), pomocí vašeho FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
Váš FULL-C program tak přimo posílá příkazy do slaves a zpracovává jejich odpovědi.&lt;br /&gt;
&lt;br /&gt;
Vzorový FULL-C program je k dispozici (napište si o něj).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zatížitelnost ==&lt;br /&gt;
&lt;br /&gt;
Ve výchozím stavu lze např. společně na MBUS sběrnici připojit 1x PRO380-Mb a k tomu ještě 1x PRO1-Mb. V okamžiku, kdy se připojí více MBUS slave zařízení (stoupne klidová proudová zátěź sběrnice), trvale se rozsvítí LED &amp;quot;MBUS&amp;quot; na modulu. Tím poznáte přetížení.&lt;br /&gt;
&lt;br /&gt;
Jak rozšířit zatížitelnost: je potřeba snížit hodnotu R28, což je rezistor zapájený zespodu na desce, o výchozí hodnotě 100 ohmů. Paralelním připojením vhodného dalšího rezistoru se dosáhne zmenšeí celkového odporu v tomto místě, a tím zvýšení hranice, kde modul detekuje data na sběrnici (tzn. posun bodu indikace přetížení sběrnice). Přidávejte postupně rezistory cca 470 až 220 ohmů, podle toho, jakou zátěž očekáváte. Princip je v tom, že napětí na R28 musí být menší než cca 0.8V, ale v podstatě je to potřeba určit experimentálně na míru vaší konkrétní sběrnice a připojených zařízení. Lze dosáhnout úpravy, která umožňuje připojit i desítky MBUS slaves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dostupnost ==&lt;br /&gt;
&lt;br /&gt;
Sandwich desku LCD-KEY-MBUS získáte zakoupením specifické varianty zařízení SDS-BIG (dodáno je celé sestavené zařízení) v eshopu.&lt;br /&gt;
&lt;br /&gt;
Lze také zakoupit alternativní samostatné řešení, tedy SDS-MBGW, které může být pro některé instalace vhodnější (především z rozsahu a možnosti napájení).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MBUS slave (měřící) zařízení ==&lt;br /&gt;
&lt;br /&gt;
Nejčastěji je u nás používán MBUS elektroměr '''PRO-1Mb'''. &lt;br /&gt;
&lt;br /&gt;
Pozor na omezení maximálního počtu připojených zařízení na sběrnici MBus. Omezení je dáno schopností master (SDS) napájet jen určitý počet zařízení (cca 48 zařízení).&lt;br /&gt;
&lt;br /&gt;
Na MBUS sběrnici není nutné připojovat pouze vstupní (měřící) zařízení. Lze totiž připojit i výstupní prvky (např. reléové výstupy) - pro více informací kontaktujte výrobce. Takto lze elegantně vyřešit vzdálené vstupy (měření) i výstupy, přičemž vše je řízeno jedním SDS.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=S%C3%AD%C5%A5ov%C3%BD_Dohledov%C3%BD_Syst%C3%A9m&amp;diff=981</id>
		<title>Síťový Dohledový Systém</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=S%C3%AD%C5%A5ov%C3%BD_Dohledov%C3%BD_Syst%C3%A9m&amp;diff=981"/>
		<updated>2025-12-23T17:54:44Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;warningbox&amp;quot;&amp;gt;Výrobky SDS jsou navrženy a vyrobeny v EU, děkujeme za jejich nákup a využívání.&amp;lt;br&amp;gt;Pomáháte tak i správné věci, jakou je finanční a morální pomoc napadené Ukraině při její obraně.&amp;lt;br&amp;gt; Přispět můžete ještě více, přímo na [https://u24.gov.ua u24.gov.ua] nebo [https://www.zbraneproukrajinu.cz České nadaci].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;row&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;small-2 large-4 columns&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;První Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
Řada '''ST''': ''aktuální''&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS MICRO: ST]] / [[SDS MICRO: ST DP|ST-DP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS IO6: ST]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS MACRO: ST]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS TTCPRO: ST]] (+[[SDS TTCPRO: GSM|GSM]], +[[SDS TTCPRO: 8in2out|8in2out]])&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS MINI: ST]] ([[SDS MINI: LoRa|+ LoRA]])&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
Řada '''LM''':&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS MICRO: LM]] &amp;lt;br&amp;gt;varianty: LIGHT / E (DIN)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS IO6: LM]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS MACRO: LM]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS UPS: LM]] varianta: ONEDPS&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Druhá Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS BIG|SDS BIG / BIG2]] (DP, DS84) : 64 / 128 / 512&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; [[SDS BIG: DALI|+DALI]] [[SDS BIG: MBUS|+MBUS]] [[SDS BIG: LoRA|+LoRA]] [[SDS_BIG:_SW-RELE6|+RELE6]] [[SDS_BIG:_SW-RTC-COM-O6|+RTC/O6]] [[SDS_BIG:_SW-IN24S7AI2|+IN24S7AI2]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS SMALL]] : 64 / 128 / 512&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS STSW]] : 64 / 128 / 512&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS MBGW|SDS ENERGO MBGW]] : 512&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS Doplňkové Moduly&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;li&amp;gt; [[SDS 1W T-RH]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;li&amp;gt; [[SDS ANALOG RH]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;li&amp;gt; [[SDS PWM10]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;small-4 large-4 columns&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;SDS-C&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: intro|úvod]] a [[SDS-C: popis jazyka|popis jazyka]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: sdsc_sysp|systémové proměnné]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: sdsc_rsvdf|vyhrazené funkce]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: sdsc_sysf|systémové funkce]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[OSI7 status code|OSI stavové hodnoty]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: examples|příklady]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: DataFlash|paměť DataFlash]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: rychlost|rychlost]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: sharing|sdílené proměnné]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS-C: program upload|způsoby nahrání SDS-C do SDS]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;FULL-C&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: intro|úvod]] a [[FULL-C: popis jazyka|popis jazyka]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: tips and tricks|důležité postupy, triky, tipy]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: set and get|systémové proměnné]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: functions|systémové funkce]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: examples|příklady]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: sharing|sdílené proměnné]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: SD card|použití SD karty]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: 64 bit|64-bitové proměnné a programování]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[FULL-C: program upload|způsoby nahrání FC do SDS]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Webové Rozhraní&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[HTTPS, TLS]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; 1PŘ [[Webové Rozhraní: První Produktová Řada|web]], 2PŘ [[Webové Rozhraní: Druhá Produktová Řada|web]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; 1PŘ [[M2M: První Produktová Řada|M2M]], 2PŘ [[M2M: Druhá Produktová Řada|M2M]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[User Web Page]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS Audit Log]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[Config Status]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;small-6 large-4 columns&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Aktualizace&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[Seznam Všech SDS]] - co si vybrat&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; '''[[Firmware|&amp;gt; &amp;gt; &amp;gt; Nový Firmware &amp;lt; &amp;lt; &amp;lt;]]'''&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[Konfigurace Zařízení SDS]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Kontakty&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://forum.merenienergie.cz Live Podpora: Fórum] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[Přímý kontakt na vývojáře SDS]] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://www.onlinetechnology.cz E-SHOP OnlineTechnology.cz] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [http://energycloud.merenienergie.cz Portál Měření Energií] &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [https://vati.cz/zakazkove-programovani Zakázková tvorba programů pro SDS]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Technologie&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS v síti: tipy, příklady, nastavení]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[HW Vstupy]] a [[HW Výstupy]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS: Měření energie]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[S0|Odečet rozhraní S0]], a [[S0 Algoritmus]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[MQTT]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[MODBUS-TCP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SNMP]] + [[SNMP: TRAP|TRAP]] , [[SNMP:_OIDs|seznam OID]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SMTP]] (email)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; SDS: 1PŘ [[M2M: UDP protocol|UDP]], 2PŘ [[M2M: S-UDP protocol|S-UDP]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; GET/POST:&amp;lt;br&amp;gt;1PŘ [[HTTP Klient: První Produktová Řada|HTTP klient]], 2PŘ [[FULL-C:_http_client_functions|HTTP klient]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[SD karta]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[LoRA]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[OneWire]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[DALI]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[I2C]], [[CAN]], [[RS485, RS422, RS232]], [[MODBUS-RTU]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[MBUS]]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Síťový Dohledový Systém - OnlineTechnology.cz ===&lt;br /&gt;
&lt;br /&gt;
Vítejte v aktualizované wiki pro výrobky SDS, vyvíjené a vyráběné v České Republice.&lt;br /&gt;
&lt;br /&gt;
Tento web poskytuje dokumentaci k jednotlivým výrobkům řady SDS (Síťový Dohledový Systém): návody, výkresy, odkazy na nový firmware, a řada dalších důležitých informací.&lt;br /&gt;
&lt;br /&gt;
 PROČ KOUPIT PRÁVĚ NAŠE VÝROBKY SDS?&lt;br /&gt;
 * vynikající poměr cena / výkon&lt;br /&gt;
 * nejlepší poměr přepočítané ceny na jeden vstup/výstup, bez kompromisu v návrhu a realizaci výrobku&lt;br /&gt;
 * plná uživatelská programovatelnost, žádná omezení&lt;br /&gt;
 * trvalá osobní technická podpora, bez ohledu na datum prodeje nebo typ či počet zařízeni&lt;br /&gt;
 * trvalá podpora naprosto všech prodaných výrobků (stále vydáváme nový firmware, a to i pro ty nejstarší výrobky)&lt;br /&gt;
 * trvalá aktualizace hardware (vydáváme nové lepší moduly, a stále podporujeme i ty předchozí)&lt;br /&gt;
 * integrace i do systémů jako je Node-RED a další&lt;br /&gt;
 * živé diskusní fórum a návody na wiki&lt;br /&gt;
&lt;br /&gt;
 PLC/PAC SDS&lt;br /&gt;
 * Programmable Logic Controller / Programmable Automation Controller - to je SDS&lt;br /&gt;
 * Programování v jazyce SDS-C nebo FULL-C bez omezení, možnost sledování a změna parametrů za běhu&lt;br /&gt;
 * Velké množství I/O a komunikačních rozhraní&lt;br /&gt;
 * SDS je bezpečné a stabilní - nezaloženo na Linuxu, naopak: SDS běží na profesionálně napsaném a testovaném firmware&lt;br /&gt;
&lt;br /&gt;
 AN-D označuje skupinu odpovědnou za vývoj a design výrobku - prodej je v režii výrobce. &lt;br /&gt;
 Designed in Czech Republic, Europe. Made in Czech Republic, Europe.&lt;br /&gt;
 &lt;br /&gt;
 VAROVÁNÍ - POZOR NA KLONY NAŠEHO VÝROBKU (např. LK3) - klony nejsou oficiální, mají chyby a nemají od nás podporu ! nenechte se podvést !&lt;br /&gt;
&lt;br /&gt;
 Chcete integrovat SDS do svého výrobku ? Nabízíme možnost OEM zástavby.&lt;br /&gt;
&lt;br /&gt;
=== Prodej ===&lt;br /&gt;
&lt;br /&gt;
SDS okamžitě zakoupíte na oficiálním eshopu: www.onlinetechnology.cz&lt;br /&gt;
&lt;br /&gt;
Pro přeprodej a velkobchod nabízíme (nejen množstevní) slevy. Pro OEM a partnery (integrátoři SDS do projektů) také nabízíme ceny dohodou.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=980</id>
		<title>Firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=980"/>
		<updated>2025-11-23T10:25:07Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nový Firmware ==&lt;br /&gt;
&lt;br /&gt;
Aktualizujte si své SDS - nahrejte do něj nový firmware, který získáte na této stránce - '''naskrolujte dolů''' kde naleznete odkaz na BIN soubor pro vaše zařízení.&lt;br /&gt;
&lt;br /&gt;
Postup a řešení problémů: [[Manual_Firmware_Update|Návod pro aktualizaci Firmware v SDS]].&lt;br /&gt;
&lt;br /&gt;
Důležité první kroky, které je nutné provést s každým novým zakoupeným modulem: [[New_Device_First_Setup_Steps|První nutné kroky pro nově zakoupené zařízení SDS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Odkazy ke stáhnutí ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pro aktualizaci firmware ve vašem zařízení (nebo pro zápis SDS-C respektive FULL-C programu), potřebujete jednu z následujících aplikací (Win32 EXE program), vyberte ten správný podle typu zařízení.&amp;lt;br&amp;gt;Následně si pak stáhnete soubor se samotným novým firmware, který přes tuto aplikaci do připojeného zařízení pošlete. Úplný návod je na jiné stránce na této wiki.&amp;lt;br&amp;gt;Vybraná aplikace současně slouží pro vývoj a nahrání SDS-C respektive FULL-C programu (a webu, a dalších) do zařízení SDS.&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;PC Software&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_sdsc_winexe.jpg]] '''Program SDSC.exe''' (programovací jazyk SDS-C, aktualizace firmware pro SDS '''první řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; stáhnout WinEXE pro SDS-C [https://sds.an-d.cz/firmware/SDSC_310123.exe zápis/simulace/upload SDS-C (SDS-C '''verze 09''') a UWEB, ze dne 31.1.2023]&amp;lt;br&amp;gt;SHA-256: daf1095f206404e33223f675f5d0bc09d4fc5dfd7d9f79f4f735af88f5ff1e6a&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program FULLC.exe''' (programovací jazyk FULL-C, aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; (FC verze '''0x12''' - '''aktuální'''): stáhnout WinEXE pro FULL-C [https://sds.an-d.cz/firmware/FULLC_220724.exe zápis/upload FULL-C a UWEB, ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro Firmware od 9.3.2023 včetně, pro všechny varianty SDS (64kB a 128kB a 512kB)&amp;lt;br&amp;gt;SHA-256: b4cb95d8ec8a6e844a3a4c9a2e9fc50ece60ccf44e8043f8c10f46b2294cae0b&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program SDSLOAD.exe''' (&amp;quot;jednokrokový&amp;quot; upload .FC souborů a aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; ('''aktuální''' verze, pro FW od 10.7.2017 včetně a dále) stáhnout WinEXE [https://sds.an-d.cz/firmware/SDSLOAD_220724.exe program SDSLOAD ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro všechny SDS varianty 64kB a 128kB a 512kB, (subvarianty DP a DS84)&amp;lt;br&amp;gt;SHA-256: ded5bf1aca2e04e22c33899a0976deccc8ff76eb88f53ecd9769788b7daa25a7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_empty.jpg]] '''Program SDS LOG'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; Program '''[[SDS LOG: intro|SDS LOG]]''' - verze 0.1 ze dne 26.8.2011 - [https://sds.an-d.cz/firmware/SDS_LOG.exe stáhnout EXE program]&lt;br /&gt;
&amp;lt;li&amp;gt; Zdrojové kódy programu SDS LOG (Creative Commons Licence) [[SDS LOG: source code|ke stáhnutí zde]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS LOG: changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;První Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMICROE.jpg]]  [[Soubor:Thumbnail_SDSMICRO.jpg]] [[Soubor:Thumbnail_SDS_DIN.jpg]] '''D0000001''' MICRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: LM]] varianty '''LIGHT''', '''LIGHT 2''' a '''E (DIN)'''.&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny varianty a revize SDS MICRO LM.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_151125_CZ.bin SDS-MICRO-LM-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_151125_EN.bin SDS-MICRO-LM-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B0000057''' MICRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_151125_CZ.bin SDS-MICRO-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_151125_EN.bin SDS-MICRO-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B000D957''' MICRO ST DP&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST DP]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST DP.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_151125_CZ.bin SDS-MICRO-ST-DP-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_151125_EN.bin SDS-MICRO-ST-DP-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MINI_1.png]] [[Soubor:Thumbnail_SDS_MINI_2.png]] '''B0000020''' MINI ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MINI: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MINI ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MINI_151125_CZ.bin SDS-MINI-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MINI_151125_EN.bin SDS-MINI-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[SDS MINI: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMACRO.jpg]] '''C0000001''' MACRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: LM]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_151125_CZ.bin SDS-MACRO-LM-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_151125_EN.bin SDS-MACRO-LM-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MACRO_ST_rev1.png]] '''C0000057''' MACRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_151125_CZ.bin SDS-MACRO-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_151125_EN.bin SDS-MACRO-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSTTCPRO.jpg]] '''B0000001''' TTCPRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS TTCPRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_151125_CZ.bin SDS-TTCPRO-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_151125_EN.bin SDS-TTCPRO-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS TTCPRO ST má shodný Change Log se SDS MINI ST, a to zde: [[SDS MINI: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSIO6.jpg|160px]] '''D0000006''' IO6 LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: LM]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_151125_CZ.bin SDS-IO6-LM-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_151125_EN.bin SDS-IO6-LM-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 LM má shodný Change Log se SDS MICRO LM, a to zde: [[SDS MICRO: LM: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_empty.jpg]] '''D0000011''' IO6 ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_151125_CZ.bin SDS-IO6-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_151125_EN.bin SDS-IO6-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 ST má shodný Change Log se SDS MICRO ST, a to zde: [[SDS MICRO: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_FTP_rev1.png]] '''F0000001''' FTP LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS FTP: LM]], výchozí firmware.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Firmware: ''SDS FTP ze dne 7.9.2010'' už nahrán ve výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS FTP: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_ONEDPS.jpg]] '''E000AAA1''' UPS ONEDPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: ONEDPS]], finální jednodesková verze (aktuální) (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stáhnout firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_CZ.bin (Česká lokalizace) SDS-UPS-ONEDPS-LM ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;Download firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_EN.bin (English language version) SDS-UPS-ONEDPS-LM released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS UPS: LM: ONEDPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_TWODPS.jpg]] '''C00xxxxx''' UPS TWODPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: TWODPS]], HW rev3u - DVOUDESKOVÁ (UŽ NEPRODÁVANÁ) varianta.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je zaslán na požádání (pošlete email), aktuální verze je z 1.3.2011 (dále aktualizováno na specifické požádání, raději proto přejděte na nový HW).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Každá deska má svou kalibraci, proto každá deska má svůj vlastní FW, proto musíte uvést S/N svého výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HISTORIE: [[SDS UPS: LM: TWODPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Druhá Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSBIG.jpg]] [[Soubor:Thumbnail_SDSSMALL.jpg]] '''B1900001''' / '''B1900002''' / '''B1900004''' : BIG, BIG2, SMALL, STSW, MBGW&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Společný firmware pro výrobky [[SDS BIG]], [[SDS SMALL]] a [[SDS STSW]] a [[SDS MBGW]]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je jednotný pro všechny varianty '''SDS Druhé Produktové Řady''', nutné je rozlišení dle varianty 64kB/128kB/512kB. Rozlišení podle dalších subvariant (DP, DS84) se neprovádí.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je společný pro BIG a BIG2, rozlišení je pouze dle varianty 64/128/512.&lt;br /&gt;
&amp;lt;li&amp;gt;Pozn. Modul SMALL a modul MBGW interně obsahuje modul STSW, nahrává se tam tedy stejný FW.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware vždy vyžaduje použití odpovídající, aktuální verze FULLC.EXE programu. &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS BIG/SMALL/STSW: [[SDS BIG: firmware changelog|firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;64kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 64kB) [https://sds.an-d.cz/firmware/SDS_BIG_64K_251025_EN.bin firmware &amp;quot;64kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;128kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 128kB) [https://sds.an-d.cz/firmware/SDS_BIG_128K_251025_EN.bin firmware &amp;quot;128kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;512kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [[firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 12.4.2022|informace pokud máte SDS512 s FW &amp;lt;b&amp;gt;starším&amp;lt;/b&amp;gt; než 12.4.2022]]&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [https://sds.an-d.cz/firmware/SDS_BIG_512K_251025_EN.bin firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;Informace: SDS BIG/SMALL/STSW 512 se starším FW než 12.4.2022 vyžaduje přeprogramování u výrobce.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| POZOR&lt;br /&gt;
'''Aktualizujte''' své doplňkové sandwich desky, tzn. [[SDS BIG: DALI]], [[SDS BIG: LORA]] - na verzi FW 5.12.2016 '''nebo novější'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Aktualizaci lze provést jen fyzicky u výrobce, ten ji provede bezplatně (zašlete výrobci vaše SDS pro jeho aktualizaci). Se starým FW nebude tento HW plně fungovat.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Informace ===&lt;br /&gt;
&lt;br /&gt;
 VŽDY MĚJTE VE SVÉM ZAŘÍZENÍ NEJNOVĚJŠÍ FIRMWARE, A POUŽÍVEJTE TAKÉ NEJNOVĚJŠÍ SDS-C EXE / FULL-C EXE PROGRAM.&lt;br /&gt;
 V opačném případě vám budou chybět nové funkce, které neustále přidáváme, a také nebudete mít opravené nalezené chyby.&lt;br /&gt;
 V případě že chcete získat podporu, musíte mít instalovaný nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historický Software ===&lt;br /&gt;
&lt;br /&gt;
Za účelem aktualizace takových SDS, kde už dlouho nebyl aktualizován firmware, je potřeba použít odpovídající EXE program pro aktualizaci takovéhoto zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== První Produktová Řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro SDS-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_151119.exe ze dne '''15.11.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 08, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020118.exe ze dne '''2.1.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 07, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020317.exe ze dne '''2.3.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 8.8.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_060216.exe ze dne '''6.2.2016''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které nemají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 24.1.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_231111.exe ze dne '''23.11.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 04&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_170211.exe ze dne '''17.2.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''února 2011''')&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro ''SDS-C verze č. 03'' (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_140511.exe ze dne '''14.5.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''konce května 2011''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Druhá Produktová řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro FULL-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_070323.exe ze dne '''7.3.2023''']&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_311222.exe ze dne '''31.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 11, (firmware od 9.1.2023 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_071222.exe ze dne '''7.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 10, (firmware od 18.11.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_161022.exe ze dne '''16.10.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0F, (firmware od 16.10.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_110722.exe ze dne '''11.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0E, (firmware od 11.7.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010722.exe ze dne '''1.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0D, (firmware od 6.8.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030422.exe ze dne '''3.4.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0C, (firmware od 23.3.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010322.exe ze dne '''1.3.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0B, (firmware od 6.8.2020 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030119.exe ze dne '''3.1.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0A, (firmware od 3.1.2019 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010718.exe ze dne '''1.7.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 09, (firmware od 27.6.2018 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_100717.exe ze dne '''10.7.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 08, (firmware od 10.7.2017 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_080617.exe ze dne '''8.6.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 06, (firmware starší než Červenec-2017, a pouze pro variantu SDS 64kB)&lt;br /&gt;
&lt;br /&gt;
* (historická verze) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_201022.exe ze dne 20.10.2022]&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_120417.exe ze dne 12.4.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB která používá ''starý'' firmware (2017 nebo starší)&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_100717.exe ze dne 10.7.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB a 128kB (nepodporuje variantu 512kB tak jako aktuální stáhnutelná verze aplikace)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beta Testing ==&lt;br /&gt;
&lt;br /&gt;
Než vydáme novou verzi, je potřeba změny a novinky otestovat.&lt;br /&gt;
&lt;br /&gt;
Pokud jste ochotní se testu zúčastnit, pak se podívejte [https://forum.sds.an-d.cz/viewtopic.php?id=129 na tento odkaz]. Zde jsou uveřejněny vždy nejnovější beta verze firmware.&lt;br /&gt;
&lt;br /&gt;
Diskuse s vývojem k aktuálnímu Firmware je k dispozici na našem fóru.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MACRO:_ST:_firmware_changelog&amp;diff=979</id>
		<title>SDS MACRO: ST: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MACRO:_ST:_firmware_changelog&amp;diff=979"/>
		<updated>2025-11-15T14:25:10Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-MACRO ST ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS-MACRO ST.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15.11.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* SDS-C: přidány indexy 303 a 304 a 305&lt;br /&gt;
* SDS-C: přidán index 2198&lt;br /&gt;
&lt;br /&gt;
== 2.11.2023 ==&lt;br /&gt;
* oprava SNMP (způsob předávání chybových hodnot)&lt;br /&gt;
* opraveno: LOGIC-S0 lze použít pro výběr Tarifu&lt;br /&gt;
&lt;br /&gt;
== 29.11.2022 ==&lt;br /&gt;
* SDS-C: přidán index 137&lt;br /&gt;
* dns_resolv hlásí chybu sítě (resp. odpojený ethernet) dříve&lt;br /&gt;
* oprava možného problému na sériové lince, kdy mohlo dojít k náhodnému malému zpoždění odeslání dat&lt;br /&gt;
&lt;br /&gt;
== 26.11.2022 ==&lt;br /&gt;
* SDS-C: oprava možného teoretického problému u funkce serialX_write při odesílání z pole ram[] (ostatní zdroje dat/pole problém neměly)&lt;br /&gt;
* SDS-C: přidány indexy 2811...2816 a 2861...2866 (statistiky COMx)&lt;br /&gt;
&lt;br /&gt;
== 4.8.2022 ==&lt;br /&gt;
* zlepšení funkce OneWire - další doplnění pro counterfeit čidla&lt;br /&gt;
* zlepšení funkce OneWire - odstranění náhodných výpadků pro čidla vlhkosti&lt;br /&gt;
* zlepšení funkce OneWire - širší prohledávání sběrnice (velká saturace neznámými čidly nevyčerpá počet kroků při hledání)&lt;br /&gt;
* opraveno hlášení o stavu (chybějící) konfigurace na úvodní webové stránce&lt;br /&gt;
* malá bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* SDS umí číst teplotu i z counterfeit teplotních čidel (pozná je a přizpůsobí se jejich poškozené komunikaci)&lt;br /&gt;
* opravena chyba při výpisu teplot na webu (jinde to bylo OK), kdy v rozmezí -0.99 degC až 0.00 degC chyběl znak mínus&lt;br /&gt;
* funkční autorizovaný HTTP POST pro nahrání nového FW, SDSC, UserWeb, konfigurace a sdílených proměnných&lt;br /&gt;
* další drobné úpravy a opravy&lt;br /&gt;
&lt;br /&gt;
== 27.12.2021 ==&lt;br /&gt;
* opraveno: nastavení názvu relé 2 až 6 se teď správně ukládá (funguje)&lt;br /&gt;
* HW: při poruše hlavního zdroje hodin (krystal) se použije záložní zdroj&lt;br /&gt;
* HW: využíváme RTC pro udržení času při přechodu přes reset (drží čas dokud zase nepřijde NTP)&lt;br /&gt;
* aktualizován bootloader (vyžaduje fyzické přeprogramování u výrobce) - umí znovu nahrát FW pokud se v SoC poškodí&lt;br /&gt;
&lt;br /&gt;
== 3.5.2021 ==&lt;br /&gt;
* oprava nastavování frekvence PWM1 přes webové rozhraní&lt;br /&gt;
&lt;br /&gt;
== 14.4.2021 ==&lt;br /&gt;
* oprava hodnot v sys 39 (0 vyp, 3 zap)&lt;br /&gt;
&lt;br /&gt;
== 13.4.2021 ==&lt;br /&gt;
* možnost ručního řízení (zap-vyp) aplikace automatiky LČ (zápis do sys 39) když je vypnutý NTP&lt;br /&gt;
&lt;br /&gt;
== 11.4.2021 ==&lt;br /&gt;
* možnost uživatelsky vypnout NTP klient a nastavovat čas přes SDS-C (sys 38 nebo sys 4), vhodné pro jiné zdroje času (LoRA, GSM, sběrnice, atd.).&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* SDS-C: oprava chování wait() v režimu sys[63]=128 (teď už čeká po správnou dobu, ne po kratší)&lt;br /&gt;
&lt;br /&gt;
== 12.3.2021 ==&lt;br /&gt;
* oprava COM1 a COM6 - chybně aktivní parita i když nebyla uživatelem nastavena; opraveno&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* SDS-C: oprava TID v MODBUS-TCP&lt;br /&gt;
* MBTC výpis rozšířen&lt;br /&gt;
* SDS-C: drobná úspora heap (více dostupného místa)&lt;br /&gt;
* SDS-C: dns resolv drobný fix&lt;br /&gt;
* SDS-C: http_get a http_post důležitý fix&lt;br /&gt;
* SDS-C: nová funkce http_close&lt;br /&gt;
* SDS-C: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
* vylepšený algoritmus S0, rozšířené možnosti nastavení detektoru S0 (nastavení přidáno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 10.1.2021 ==&lt;br /&gt;
* web: ruční přepnutí CBY pro relé (tzn. &amp;quot;kdo ovládá relé&amp;quot;), na &amp;quot;SDS-C&amp;quot;, dané relé nevypne (off) ale ponechá jeho stávající stav (on, off) &lt;br /&gt;
&lt;br /&gt;
== 5.1.2021 ==&lt;br /&gt;
* SDS-C: oprava textcmp()&lt;br /&gt;
* bezpečnostní oprava&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení &lt;br /&gt;
&lt;br /&gt;
== 20.11.2020 ==&lt;br /&gt;
* changelog založen&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MACRO:_LM:_firmware_changelog&amp;diff=978</id>
		<title>SDS MACRO: LM: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MACRO:_LM:_firmware_changelog&amp;diff=978"/>
		<updated>2025-11-15T14:24:59Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-MACRO LM ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS-MACRO LM.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15.11.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* SDS-C: přidány indexy 303 a 304 a 305&lt;br /&gt;
* SDS-C: přidán index 2198&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* opravena chyba při výpisu teplot na webu (jinde to bylo OK), kdy v rozmezí -0.99 degC až 0.00 degC chyběl znak mínus&lt;br /&gt;
* obsluha času: možnost zápisu do sys[4], sys[39]&lt;br /&gt;
* doplněny další možné vstupní typy do funkcí itoa/itoh&lt;br /&gt;
* možnost zakázat NTP&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* zásadní změna: &amp;lt;b&amp;gt;zrušen systém virtuálních S0 vstupů a zaveden systém mapování 1:1 (optovstupy na S0 vstupy)&amp;lt;/b&amp;gt;&lt;br /&gt;
* zaveden inovovaný algoritmus detekce S0 impulsů (stejný jako pro řadu ST), tedy s možností bohaté uživatelské konfigurace detektoru&lt;br /&gt;
* SDS-C: oprava chování wait() v režimu sys[63]=128 (teď už čeká po správnou dobu, ne po kratší)&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* SDS-C: dns resolv drobný fix&lt;br /&gt;
* SDS-C: http_get a http_post drobný fix&lt;br /&gt;
* SDS-C: nová funkce http_close&lt;br /&gt;
* SDS-C: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
&lt;br /&gt;
== 5.1.2021 ==&lt;br /&gt;
* SDS-C: oprava textcmp()&lt;br /&gt;
* bezpečnostní oprava&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení &lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* SDS-C: oprava http_get/post: správná vyplnění výsledů i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* SNMP fix - správná hodnota ve .5.13 až .5.16&lt;br /&gt;
* drobné opravy a optimalizace&lt;br /&gt;
&lt;br /&gt;
== 18.7.2020 ==&lt;br /&gt;
* SDS-C: SMTP klient správně zvládne i servery které (chybně) nereagují potvrzením na předání těla emailu&lt;br /&gt;
* SDS-C: http klient upraven (zvýšena odolnost na výpadky spojení se serverem, upraveny timeouty)&lt;br /&gt;
&lt;br /&gt;
== 26.6.2020 ==&lt;br /&gt;
* různé drobky/opravy dle hlášení uživatelů a testů&lt;br /&gt;
&lt;br /&gt;
== 15.5.2020 ==&lt;br /&gt;
* SDS-C 09: přidáno http_post()&lt;br /&gt;
&lt;br /&gt;
== 14.5.2020 ==&lt;br /&gt;
* oprava pro některé sys[] pro S0 vstupy (které se automaticky neaktualizovaly)&lt;br /&gt;
&lt;br /&gt;
== 11.5.2020 ==&lt;br /&gt;
* oprava Content-Length pro CSS soubor (problém s Chrome)&lt;br /&gt;
* oprava chování při odpojeném SDS-1W-T-RH&lt;br /&gt;
&lt;br /&gt;
== 20.4.2020 ==&lt;br /&gt;
* podpora pro modul SDS-1W-T-RH (rovnice pro HIH-5031)&lt;br /&gt;
* implementován SDS Audit Log&lt;br /&gt;
* zvýšená ochrana proti brute-force hledání vstupního hesla&lt;br /&gt;
&lt;br /&gt;
== 14.11.2019 ==&lt;br /&gt;
* oprava chyby v zobrazování výkonu u S0 vstupů (mohlo se stát při více logických vstupech, které měli navíc jiné logické pořadí vůči fyzickému vstupu)&lt;br /&gt;
* relé lze z webového rozhraní aktivovat i v režimu OneShot &lt;br /&gt;
* SDS-C: emailový klient odesílá i platný datum v hlavičce emailu (je-li v SDS k dispozici platný čas)&lt;br /&gt;
&lt;br /&gt;
== 5.3.2019 ==&lt;br /&gt;
* oprava chyby v konfiguraci S0 vstupů (webová administrace), dále jsou tam také doplněny lepší popisy aktuálního obsazení optovstupů (mapování na tarif a virtuální S0)&lt;br /&gt;
&lt;br /&gt;
== 12.1.2019 ==&lt;br /&gt;
* optimalizace webového serveru (množství přenášenyćh dat sníženo až o polovinu, bez změny funkce) - ocení se to zejména při přenosu po úzkých linkách (např. gprs, modemy) &lt;br /&gt;
&lt;br /&gt;
== 4.1.2019 ==&lt;br /&gt;
* překlopena beta do oficiálního vydání&lt;br /&gt;
* SDS-C: verze 08 (pole share[], nové položky v sys[], nové sds-c funkce)&lt;br /&gt;
* watchdog sds-c programu&lt;br /&gt;
&lt;br /&gt;
== 1.7.2018 ==&lt;br /&gt;
* SDS-C: přidán sys 183 poskytující datum vydání FW který je právě nahrán v SDS &lt;br /&gt;
* M2M: hodnota okamžitého výkonu pro S0 vstupy je vždy číslo+jednotka, zatímco text 'čekám...' je už jen pouze na s0.htm &lt;br /&gt;
&lt;br /&gt;
== 27.3.2018 ==&lt;br /&gt;
* oprava funkce zápisu prázdného řetězce do názvu 1-Wire teploměru (&amp;quot;smazání názvu&amp;quot; uživatelem)&lt;br /&gt;
* SNMP: sdsS0translatedUnitT0,1 je poskytováno jako hodnota od odečtu (ne od úplného začátku měření, jak to bylo předtím)&lt;br /&gt;
* oprava někdy vynechaného načtení konfigurace (okrajové případy, ale přece)&lt;br /&gt;
&lt;br /&gt;
== 12.3.2018 ==&lt;br /&gt;
* oprava měření na S0 vstupech (některé vstupy se starším FW nemusely být, v určitých okrajových situacích, plně funkční)&lt;br /&gt;
&lt;br /&gt;
== 8.3.2018 ==&lt;br /&gt;
* oprava používání zámku (lock) v administraci 1-Wire sběrnice BUS-B&lt;br /&gt;
* oprava echo.htm - zobrazuje se&lt;br /&gt;
* oprava echo.htm - správně wrapuje obsah, a nejsou tam nadbytečné 0x00&lt;br /&gt;
* vhodnější řešení rexmitu částí webových stránek a dynamických dat (ocení to zejména uživatelé s mobilním připojením pro SDS)&lt;br /&gt;
&lt;br /&gt;
== 2.3.2018 ==&lt;br /&gt;
* aktulizace a oprava ve výpočtu &amp;quot;aktuálního výkonu&amp;quot; pro okrajové situace (např. krajní hodnoty impulsní konstanty)&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
* možnost automického přepínání &amp;quot;letní/zimní&amp;quot; čas (CEST/CET time) byla při &amp;quot;změně času&amp;quot; ověřena a je funkční jak má být&lt;br /&gt;
* SDS-C: přidán sys[4], sys[11], sys[38], sys[39]&lt;br /&gt;
* SDS-C: sys[4] = local-time&lt;br /&gt;
* SDS-C: sys[11] = vždy &amp;quot;správné&amp;quot; číslo dne v týdnu&lt;br /&gt;
* SDS-C: sys[38] = utc-time&lt;br /&gt;
* SDS-C: sys[39] = stav automatiky přepínání CEST/CET času &lt;br /&gt;
* správný zápis pouze do T0 pro všechny S0 vstupy, které nemají aktivované tarifní rozdělení (bez ohledu na stav tarifního vstupu)&lt;br /&gt;
* zámek 1-W pozice se ukládá do pevné paměti (při stisku tlačítka na webovém rozhraní)&lt;br /&gt;
* vylepšení v oblasti VCP (telnet pro sériovou linku) - spolehlivější&lt;br /&gt;
* zpřesněny prvky ochrany S0 stránek heslem (SDS lépe volí kdy a jak blokovat přístup na jednotlivé eX a S0 stránky)&lt;br /&gt;
* UserWEB projekt má opravenu chybu, kdy nebylo možno použít delší Name Chain tabulku (tedy lze už vložit mnohem více souborů)&lt;br /&gt;
&lt;br /&gt;
== 10.8.2017 ==&lt;br /&gt;
* SDS-C: zvýšena verze na hodnotu 07&lt;br /&gt;
* SDS-C: přidány nové sys[] položky (indexy 1792 až 2047)&lt;br /&gt;
* SDS-C: optimalizovaná cache pro velké programy&lt;br /&gt;
* SDS-C: maximální počet proměnných zvýšen na 144&lt;br /&gt;
* SDS-C: maximální počet procesů (procedur) zvýšen na 96&lt;br /&gt;
* SDS-C: hloubka zásobníku (stacku) zvýšena na 24&lt;br /&gt;
* vydán nový odpovídající SDSC.exe&lt;br /&gt;
&lt;br /&gt;
== 3.8.2017 ==&lt;br /&gt;
* oprava chyby kdy se po každém spuštění systému mohla ztratit část S0 konfigurace (nastavení tarifního vstupu)&lt;br /&gt;
&lt;br /&gt;
== 18.4.2017 ==&lt;br /&gt;
* (nová funkčnost) použití UserWEB Projektu&lt;br /&gt;
* oprava v echo() pro zápis do sériové linky (uart)&lt;br /&gt;
* drobné ale důležité fixy v html stránkách (texty, vzhled)&lt;br /&gt;
* nové NTP dotazy lze aktivovat i z SDS-C programu (viz aktualizovaný seznam sys)&lt;br /&gt;
&lt;br /&gt;
== 24.11.2016 ==&lt;br /&gt;
* opraven chybně zpracovaný vstup při zadávání nastavení parametrů S0 vstupu (hodnota &amp;quot;minimální délka impulsu&amp;quot; byla špatně zpracována a uložena)&lt;br /&gt;
* SDS-C: přidán přímý přístup do LCD Frame Bufferu přes sys[1024] až sys[1551]&lt;br /&gt;
&lt;br /&gt;
== 28.3.2016 ==&lt;br /&gt;
* impulse counter lze z webu zadat do plných 32 bitů, původně jen 31 bitů&lt;br /&gt;
* další drobné opravy&lt;br /&gt;
* oprava zpracování nastavení baudrate při komunikaci RFC2217&lt;br /&gt;
&lt;br /&gt;
== 23.2.2016 ==&lt;br /&gt;
* oprava nefunkčního zápisu pomocí SNMP (několik předchozích verzí, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 5.2.2016 ==&lt;br /&gt;
* oprava funkce RSTD - rozšíření funkce RSTD: krátký zkrat (approx 1 sec) po zapnutí spustí BL (zařízení čeká na nový firmware), zatímco dlouhý zkrat (déle než 3 sec) spustí aplikaci a současně vymaže nastavení (set to Factory Defaults)&lt;br /&gt;
* možnost vyhledávat všechny zařízení SDS na subnetu pomocí rozšířené funkce (Find a SDS) v EXE aplikaci (např. když ztratíte IP adresu do webového rozhraní a potřebujete se na SDS připojit)&lt;br /&gt;
&lt;br /&gt;
== 15.11.2015 ==&lt;br /&gt;
* důležité opravy&lt;br /&gt;
&lt;br /&gt;
== 3.7.2015 ==&lt;br /&gt;
* vylepšený DHCP client&lt;br /&gt;
* řada oprav podle průběžného testování&lt;br /&gt;
&lt;br /&gt;
== 2.4.2015 ==&lt;br /&gt;
* srovnáno s SDS-MICRO 2.4.2015 (opravy chyb a nové funkce)&lt;br /&gt;
&lt;br /&gt;
== 9.9.2014 ==&lt;br /&gt;
* opravena chyba pro sys[64]==1 (vnitřním zaokrouhlením to skočilo na nulu)&lt;br /&gt;
&lt;br /&gt;
== 17.8.2014 ==&lt;br /&gt;
* srovnáno se stejnou verzí firmware SDS-MICRO&lt;br /&gt;
&lt;br /&gt;
== 8.7.2014 ==&lt;br /&gt;
* opravy v oblasti obsluhy sériového rozhraní (RS485)&lt;br /&gt;
* do webové administrace přidána možnost vzájemného přehození pozic dvou 1-Wire záznamů&lt;br /&gt;
* další drobné opravy z průběžných beta testů&lt;br /&gt;
&lt;br /&gt;
== 1.3.2014 ==&lt;br /&gt;
* SDS-C: nová funkce serial_write()&lt;br /&gt;
* SDS-C: nový timeout pro smtp_send() - zamezí specifickému možnému zaseknutí programu, když SMTP server přestane odpovída uprostřed transkace po více než 50sec&lt;br /&gt;
* SDS-C: lcd_setpixel() má nové možné parametry, které umožní změnu jen RAM bufferu bez překlopení do LCD (významné zrychlení, při kreslení více pixelů stačí překlopit buffer do LCD jen jednou nakonec)&lt;br /&gt;
* SDS-C: opravena funkce snmp_send_trap() - horní část seznamu trapů byla předtím chybně neodeslatená (teď už je vše OK)&lt;br /&gt;
* vylepšení odolnosti při výpadku a při obnovení připojení k Ethernetu&lt;br /&gt;
* různé drobné důležité opravy (viz beta testy)&lt;br /&gt;
&lt;br /&gt;
== 25.1.2014 ==&lt;br /&gt;
* opravy a nové funkce, srovnáno s firmware SDS MICRO&lt;br /&gt;
&lt;br /&gt;
== 30.11.2013 ==&lt;br /&gt;
* opravy a nové funkce, srovnáno s firmware SDS MICRO&lt;br /&gt;
&lt;br /&gt;
== 3.10.2013 ==&lt;br /&gt;
* celá řada drobných oprav&lt;br /&gt;
* login html stránka upravena (w3c valid)&lt;br /&gt;
* možnost nastavit MTD pro S0 měření&lt;br /&gt;
* nový SDSC.exe program&lt;br /&gt;
* SDS-C: přidána funkce lcd_setpixel()&lt;br /&gt;
&lt;br /&gt;
== 24.3.2013 ==&lt;br /&gt;
* opravena chyba kdy nebylo možné ručně zadat více než hodnotu 32767 do impulsního počítadla z webového rozhraní&lt;br /&gt;
&lt;br /&gt;
== 16.3.2013 ==&lt;br /&gt;
Všechny změny ze všech vydaných BETA firmware verzí, od června do března, tj. především následující položky:&lt;br /&gt;
* zápis výpadku a znovu-připojení Ethernetu do logu historie&lt;br /&gt;
* při odpojení a následném znovu-připojení Ethernetu dojde od teď záměrně ke smazání celé ARP tabulky, takže všechny MAC-IP páry jsou vyžádány znovu (pro případ že se např. vyměnil router atd.)&lt;br /&gt;
* SDS-C: get_txt[xxx] (vypíše pole text od indexu xxx až do znaku 0x00 na některém z následujících indexů v tomto poli)&lt;br /&gt;
* get_sys[xxx] vrací i text pro textové položky (vyzkoušejte všechny sys[] které jsou textové)&lt;br /&gt;
* SDS-C: přidáno sys[900] až sys[931] (text ROM CODE pro 1-W čidla)&lt;br /&gt;
* upraveno zpracování ARP tabulky (více bezpečné pro dlouhodobý provoz)&lt;br /&gt;
* možnost řízení tarifního signálu pro S0 prostřednictvím SDS-C programu&lt;br /&gt;
* funkce &amp;quot;odečet&amp;quot; pro S0 (viz nastavení S0 vstupů ve webové administraci)&lt;br /&gt;
* SDS-C: funkce smtp_send() akceptuje text[] nejen pro obsah zprávy, ale i pro adresu příjemce a subject&lt;br /&gt;
* SDS-C: funkce http_get() akceptuje text[] nejen pro obsah zprávy, ale i pro nastavení HTTP HOST parametru&lt;br /&gt;
&lt;br /&gt;
== 29.5.2012 ==&lt;br /&gt;
* funkce http_get() nuluje svou interní položku &amp;quot;host&amp;quot; před zapsáním nové hodnoty do této položky, takže pokud se funkce volá opakovaně s kratším textem, je použit právě jen ten kratší text&lt;br /&gt;
&lt;br /&gt;
== 7.5.2012 ==&lt;br /&gt;
* opravena funkčnost PWM výstupu - lze správné nastavit střídu v rozmezí 0 až 100% viz návod na WiKi&lt;br /&gt;
&lt;br /&gt;
== 18.3.2012 ==&lt;br /&gt;
* finální podoba SNMP MIB (stáhněte si aktualizovaný MIB soubor)&lt;br /&gt;
&lt;br /&gt;
== 12.3.2012 ==&lt;br /&gt;
* řada důležitých oprav, aktualizujte !&lt;br /&gt;
* všechny nové funkce dostupné v SDS MICRO jsou dostupné i pro SDS MACRO (srovnání firmware)&lt;br /&gt;
&lt;br /&gt;
== 22.1.2012 ==&lt;br /&gt;
* všechny nové funkce z BETA testu přidány do dostupného firmware (pozn. podpora pro čtyři S0 vstupy)&lt;br /&gt;
&lt;br /&gt;
== 27.10.2011 ==&lt;br /&gt;
* do webového rozhraní přidáno tlačítko: možnost nastavení střídy PWM &amp;quot;na zkoušku&amp;quot; (bez uložení do pevné paměti)&lt;br /&gt;
* web: funkce /get_sys a /get_ram může vrátit řadu proměnných za sebou&lt;br /&gt;
&lt;br /&gt;
== 2.10.2011 ==&lt;br /&gt;
* přidán sys[26]&lt;br /&gt;
* přidán sys[63]&lt;br /&gt;
* přidán sys[78]&lt;br /&gt;
* doplněn UDP protokol o čtyři nové funkce (čtení / zápis polí sys[] a ram[])&lt;br /&gt;
&lt;br /&gt;
== 6.9.2011 ==&lt;br /&gt;
* pouze úpravy pro RS485 výstup - přepracovaný kód pro výstup dat (serial_text_out nepřevádí konstanty na text)&lt;br /&gt;
&lt;br /&gt;
== 31.7.2011 ==&lt;br /&gt;
* opraven problém s UDP protokolem - příkaz '''write''' (už funguje vždy ok)&lt;br /&gt;
* nový SDSC.exe program - doplňuje správnou HTML serverovou hlavičku pro uživatelskou stránku&lt;br /&gt;
&lt;br /&gt;
== 29.7.2011 ==&lt;br /&gt;
* možnost zápis z SDS-C programu do systémových proměnných sys[559] až sys[561]&lt;br /&gt;
* nová funkce pro UDP protokol - funkce '''write''' umožňuje hromadný zápis do sys[] systémových proměnných&lt;br /&gt;
&lt;br /&gt;
== 25.7.2011 ==&lt;br /&gt;
* IP watchdog už umí ovládat i zbylé dvě relé (původně jen RE1 a RE2, teď RE1 až RE4)&lt;br /&gt;
&lt;br /&gt;
== 24.7.2011 ==&lt;br /&gt;
* opravena chyba v telnet připojení, kdy se při pokusu odeslat znak na sériovou linku zařízení resetovalo, teď už je to ok&lt;br /&gt;
&lt;br /&gt;
== 10.7.2011 ==&lt;br /&gt;
* možnost změnit číslo TCP portu webového serveru webového rozhraní výrobku (změna stejným způsobem jako je změna IP nebo MAC adresy...) &lt;br /&gt;
* přidán IP Watchdog do hlavní nabídky ve webovém rozhraní&lt;br /&gt;
&lt;br /&gt;
* doplněny funkce, které jsou v SDS MICRO (viz changelog MICRO ze dne 16.6.2011)&lt;br /&gt;
** řada doplňků v SDS-C, webovém rozhraní, atd.&lt;br /&gt;
&lt;br /&gt;
== 21.5.2011 ==&lt;br /&gt;
* od této verze jsou k dispozici dvě jazykové varianty - plně Česká varianta a plně Anglická varianta&lt;br /&gt;
* varianty se liší pouze texty ve webovém rozhraní, jejich funkčnost je ale zcela shodná (bez rozdílů)&lt;br /&gt;
&lt;br /&gt;
== 14.5.2011 ==&lt;br /&gt;
* vydána pouze nová EXE aplikace pro nahrávání SDS-C&lt;br /&gt;
* od této verze umožňuje použít složité kostrukce s IF, např.: if (test) { kus programu; } else { kus programu; };&lt;br /&gt;
&lt;br /&gt;
== 1.5.2011 ==&lt;br /&gt;
* stránka /usys.xml&lt;br /&gt;
&lt;br /&gt;
== 17.3.2011 ==&lt;br /&gt;
* možnost nahrát si vlastní webovou stránku (pomocí stejného EXE jakým se nahrává SDS-C)&lt;br /&gt;
* možnost změnit port HTTP klienta (funkce http_get)&lt;br /&gt;
&lt;br /&gt;
== 6.3.2011 ==&lt;br /&gt;
* přechod na novou verzi SDS-C (verze 03)&lt;br /&gt;
&lt;br /&gt;
== 17.2.2011 ==&lt;br /&gt;
* SDS-C doplněno o funkce: lcd_echo, lcd_clear, lcd_newline  (použijte nový EXE pro SDS-C)&lt;br /&gt;
&lt;br /&gt;
== 6.2.2011 ==&lt;br /&gt;
* přemístěn výpis teplot z teplotních čidel na konec status stránky&lt;br /&gt;
* dalši úvodní drobnosti...&lt;br /&gt;
&lt;br /&gt;
== 11.1.2011 ==&lt;br /&gt;
* založena tato stránka&lt;br /&gt;
&lt;br /&gt;
== starší verze ==&lt;br /&gt;
* changelog pro verze starší než 2011 není k dispozici&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MICRO:_LM:_firmware_changelog&amp;diff=977</id>
		<title>SDS MICRO: LM: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MICRO:_LM:_firmware_changelog&amp;diff=977"/>
		<updated>2025-11-15T14:24:49Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-MICRO LM / SDS-IO6 LM ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS MICRO LM (všechny jeho varianty) a SDS IO6 LM.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15.11.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* SDS-C: přidány indexy 303 a 304 a 305&lt;br /&gt;
* SDS-C: přidán index 2198&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* opravena chyba při výpisu teplot na webu (jinde to bylo OK), kdy v rozmezí -0.99 degC až 0.00 degC chyběl znak mínus&lt;br /&gt;
* obsluha času: možnost zápisu do sys[4], sys[39]&lt;br /&gt;
* IO6: doplněny další možné vstupní typy do funkcí itoa/itoh (MICRO už to mělo)&lt;br /&gt;
* IO6: možnost zakázat NTP (MICRO už to mělo)&lt;br /&gt;
&lt;br /&gt;
== 28.6.2021 ==&lt;br /&gt;
* IO6: web: oprava oneshotreset&lt;br /&gt;
* IO6: web: přepnutí relé (CBY) na SDS-C ponechá stav relé (zap/vyp) (předtím to natvrdo dalo vyp, což nebylo správně)&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* SDS-C: oprava chování wait() v režimu sys[63]=128 (teď už čeká po správnou dobu, ne po kratší)&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* SDS-C: dns resolv drobný fix&lt;br /&gt;
* SDS-C: http_get a http_post drobný fix&lt;br /&gt;
* SDS-C: nová funkce http_close&lt;br /&gt;
* SDS-C: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
&lt;br /&gt;
== 5.1.2021 ==&lt;br /&gt;
* SDS-C: oprava textcmp()&lt;br /&gt;
* bezpečnostní oprava&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení &lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* SDS-C: oprava http_get/post: správná vyplnění výsledů i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* SNMP fix - správná hodnota ve .5.13 až .5.16&lt;br /&gt;
* drobné opravy a optimalizace&lt;br /&gt;
&lt;br /&gt;
== 18.7.2020 ==&lt;br /&gt;
* SDS-C: SMTP klient správně zvládne i servery které (chybně) nereagují potvrzením na předání těla emailu&lt;br /&gt;
* SDS-C: http klient upraven (zvýšena odolnost na výpadky spojení se serverem, upraveny timeouty)&lt;br /&gt;
&lt;br /&gt;
== 27.6.2020 (jen MICRO) ==&lt;br /&gt;
* oprava nestartování předchozí verze FW na některých specifických typech HW varianty SDS-MICRO-x&lt;br /&gt;
&lt;br /&gt;
== 26.6.2020 ==&lt;br /&gt;
* SDS-C 09: http_post()&lt;br /&gt;
* MQTT klient&lt;br /&gt;
* různé drobky/opravy dle hlášení uživatelů a testů&lt;br /&gt;
&lt;br /&gt;
== 11.5.2020 ==&lt;br /&gt;
* oprava Content-Length pro CSS soubor (problém s Chrome)&lt;br /&gt;
* oprava chování při odpojeném SDS-1W-T-RH&lt;br /&gt;
&lt;br /&gt;
== 20.4.2020 ==&lt;br /&gt;
* podpora pro modul SDS-1W-T-RH (rovnice pro HIH-5031)&lt;br /&gt;
&lt;br /&gt;
== 15.4.2020 ==&lt;br /&gt;
* implementován SDS Audit Log&lt;br /&gt;
* zvýšená ochrana proti brute-force hledání vstupního hesla&lt;br /&gt;
&lt;br /&gt;
== 14.11.2019 ==&lt;br /&gt;
* drobný bugfix pro S0 (způsob zobrazování aktuálního výkonu)&lt;br /&gt;
* relé lze z webového rozhraní aktivovat i v režimu OneShot&lt;br /&gt;
* SDS-C: emailový klient odesílá i platný datum v hlavičce emailu (je-li v SDS k dispozici platný čas) &lt;br /&gt;
&lt;br /&gt;
== 17.1.2019 ==&lt;br /&gt;
* bugfix SDS-C watchdogu&lt;br /&gt;
&lt;br /&gt;
== 12.1.2019 ==&lt;br /&gt;
* optimalizace webového serveru (množství přenášenyćh dat sníženo až o polovinu, bez změny funkce) - ocení se to zejména při přenosu po úzkých linkách (např. gprs, modemy) &lt;br /&gt;
&lt;br /&gt;
== 4.1.2019 ==&lt;br /&gt;
* překlopena beta do oficiálního vydání&lt;br /&gt;
* SDS-C: verze 08 (pole share[], nové položky v sys[], nové sds-c funkce)&lt;br /&gt;
* watchdog sds-c programu&lt;br /&gt;
&lt;br /&gt;
== 1.7.2018 ==&lt;br /&gt;
* SDS-C: přidán sys 183 poskytující datum vydání FW který je právě nahrán v SDS&lt;br /&gt;
&lt;br /&gt;
== 30.3.2018 ==&lt;br /&gt;
* oprava funkce zápisu prázdného řetězce do názvu 1-Wire teploměru (&amp;quot;smazání názvu&amp;quot; uživatelem) &lt;br /&gt;
* M2M: hodnota okamžitého výkonu pro S0 vstupy je vždy číslo+jednotka, zatímco text 'čekám...' je už jen pouze na s0.htm&lt;br /&gt;
* SNMP: sdsS0translatedUnitT0,1 je poskytováno jako hodnota od odečtu (ne od úplného začátku měření, jak to bylo předtím)&lt;br /&gt;
* drobná oprava při změně nastavení S0, teď se to ihned provede (v okrajových případech bylo někdy potřeba pro načtení změn SDS restartovat, teď už ne).&lt;br /&gt;
&lt;br /&gt;
== 12.3.2018 ==&lt;br /&gt;
* oprava měření na S0 vstupech (některé vstupy se starším FW nemusely být, v určitých okrajových situacích, plně funkční)&lt;br /&gt;
&lt;br /&gt;
== 8.3.2018 ==&lt;br /&gt;
* oprava echo.htm - zobrazuje se&lt;br /&gt;
* oprava echo.htm - správně wrapuje obsah, a nejsou tam nadbytečné 0x00&lt;br /&gt;
* vhodnější řešení rexmitu částí webových stránek a dynamických dat (ocení to zejména uživatelé s mobilním připojením pro SDS)&lt;br /&gt;
&lt;br /&gt;
== 2.3.2018 ==&lt;br /&gt;
* aktulizace a oprava ve výpočtu &amp;quot;aktuálního výkonu&amp;quot; pro okrajové situace (např. krajní hodnoty impulsní konstanty)&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
* možnost automického přepínání &amp;quot;letní/zimní&amp;quot; čas (CEST/CET time) byla při &amp;quot;změně času&amp;quot; ověřena a je funkční jak má být&lt;br /&gt;
* správný zápis pouze do T0 pro všechny S0 vstupy, které nemají aktivované tarifní rozdělení (bez ohledu na stav tarifního vstupu)&lt;br /&gt;
* zámek 1-W pozice se ukládá do pevné paměti (při stisku tlačítka na webovém rozhraní)&lt;br /&gt;
* vylepšení v oblasti VCP (telnet pro sériovou linku) - spolehlivější&lt;br /&gt;
* zpřesněny prvky ochrany S0 stránek heslem (SDS lépe volí kdy a jak blokovat přístup na jednotlivé eX a S0 stránky)&lt;br /&gt;
* UserWEB projekt má opravenu chybu, kdy nebylo možno použít delší Name Chain tabulku (tedy lze už vložit mnohem více souborů)&lt;br /&gt;
&lt;br /&gt;
== 23.10.2017 ==&lt;br /&gt;
* hlavní nová funkce: přidána volitelná funkce (checkbox ve webovém rozhraní) pro plně automatickou volbu Letního Času (SELČ - aplikovatelné napříč Evropou)&lt;br /&gt;
* další podstatná úprava: doplnění dalších testů na timeout při OSI7 funkcích (např. http_get) - tzn. test na více místech, který má zabránít zablokování funkce (1029) když selže spojení na server (vyhlásí novou chybu 1030 a odblokuje se).&lt;br /&gt;
* přidány SNMP položky (OID) pro text &amp;quot;ADC jednotka&amp;quot; (pro každý AD vstup).&lt;br /&gt;
* drobné bugfixy a zvýšení spolehlivosti, podle průběžných hlášení uživatelů (např. mírně zvětšeny RX a TX vyrovnávací paměti pro COM1 sériový port, atd.).&lt;br /&gt;
* SDS-C: přidán sys[4], sys[11], sys[38], sys[39]&lt;br /&gt;
* SDS-C: sys[4] = local-time&lt;br /&gt;
* SDS-C: sys[11] = vždy &amp;quot;správné&amp;quot; číslo dne v týdnu&lt;br /&gt;
* SDS-C: sys[38] = utc-time&lt;br /&gt;
* SDS-C: sys[39] = stav automatiky přepínání CEST/CET času&lt;br /&gt;
&lt;br /&gt;
== 10.8.2017 ==&lt;br /&gt;
* SDS-C: zvýšena verze na hodnotu 07 (funguje i pro výrobky s EEPROM tak pro výrobky s NVM-DF)&lt;br /&gt;
* SDS-C: přidány nové sys[] položky (indexy 1792 až 2047)&lt;br /&gt;
* SDS-C: optimalizovaná cache pro velké programy&lt;br /&gt;
* SDS-C: maximální počet proměnných zvýšen na 144&lt;br /&gt;
* SDS-C: maximální počet procesů (procedur) zvýšen na 96&lt;br /&gt;
* SDS-C: hloubka zásobníku (stacku) zvýšena na 24&lt;br /&gt;
* vydán nový odpovídající SDSC.exe&lt;br /&gt;
&lt;br /&gt;
== 3.8.2017 ==&lt;br /&gt;
* oprava chyby kdy se po každém spuštění systému mohla ztratit část S0 konfigurace (nastavení tarifního vstupu)&lt;br /&gt;
&lt;br /&gt;
== 18.4.2017 ==&lt;br /&gt;
* (nová funkčnost) použití UserWEB Projektu&lt;br /&gt;
* oprava v echo() pro zápis do sériové linky (uart)&lt;br /&gt;
* drobné ale důležité fixy v html stránkách (texty, vzhled)&lt;br /&gt;
* nové NTP dotazy lze aktivovat i z SDS-C programu (viz aktualizovaný seznam sys)&lt;br /&gt;
&lt;br /&gt;
== 24.11.2016 ==&lt;br /&gt;
* opraven chybně zpracovaný vstup při zadávání nastavení parametrů S0 vstupu (hodnota &amp;quot;minimální délka impulsu&amp;quot; byla špatně zpracována a uložena)&lt;br /&gt;
&lt;br /&gt;
== 28.3.2016 ==&lt;br /&gt;
* impulse counter lze z webu zadat do plných 32 bitů, původně jen 31 bitů&lt;br /&gt;
* další drobné opravy&lt;br /&gt;
&lt;br /&gt;
== 26.3.2016 ==&lt;br /&gt;
* oprava chybného zpracování RFC2217 příkazu pro změnu BaudRate (zpracoval se jen poslední byte místo celého dwordu, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 23.2.2016 ==&lt;br /&gt;
* oprava nefunkčního zápisu pomocí SNMP (několik předchozích verzí, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 5.2.2016 ==&lt;br /&gt;
* oprava funkce RSTD - rozšíření funkce RSTD: krátký zkrat (approx 1 sec) po zapnutí spustí BL (zařízení čeká na nový firmware), zatímco dlouhý zkrat (déle než 3 sec) spustí aplikaci a současně vymaže nastavení (set to Factory Defaults)&lt;br /&gt;
* možnost vyhledávat všechny zařízení SDS na subnetu pomocí rozšířené funkce (Find a SDS) v EXE aplikaci (např. když ztratíte IP adresu do webového rozhraní a potřebujete se na SDS připojit)&lt;br /&gt;
&lt;br /&gt;
== 15.11.2015 ==&lt;br /&gt;
* důležité opravy&lt;br /&gt;
&lt;br /&gt;
== 3.7.2015 ==&lt;br /&gt;
* vylepšený DHCP client&lt;br /&gt;
* řada oprav podle průběžného testování&lt;br /&gt;
&lt;br /&gt;
== 2.4.2015 ==&lt;br /&gt;
* veškeré opravy od posledního vydání (viz průběh BETA testů)&lt;br /&gt;
* významně zvýšena spolehlivost a stabilita při síťové zátěži (Eth. komunikace)&lt;br /&gt;
* SDS-C: přidáno sys[193]&lt;br /&gt;
* SDS-C: přidáno sys[37]&lt;br /&gt;
* SDS-C: přidáno sys[139]&lt;br /&gt;
* SDS-C: možnost zápisu do sys[4]&lt;br /&gt;
* SNMP TRAP předává plný OID (dosud dával jen OID useknutný za E.ID)&lt;br /&gt;
&lt;br /&gt;
== 9.9.2014 ==&lt;br /&gt;
* opravena chyba pro sys[64]==1 (vnitřním zaokrouhlením to skočilo na nulu)&lt;br /&gt;
&lt;br /&gt;
== 17.8.2014 ==&lt;br /&gt;
* přidána možnost použít get_var[index] pro čtení vnitřních proměnných v SDS-C přes web&lt;br /&gt;
* SNMP: umožňuje zápis do všech položek přes &amp;quot;Counter32&amp;quot; (nová záležitost) a původní &amp;quot;Integer&amp;quot; typ&lt;br /&gt;
* SNMP: přidána možnost zápisu do položek S0-impulse-counter (T0 a T1)&lt;br /&gt;
* RS485: při vysílání je budič aktivní max 1msec (nebo méně) od posledního znaku&lt;br /&gt;
&lt;br /&gt;
== 8.7.2014 ==&lt;br /&gt;
* opravy v oblasti obsluhy sériového rozhraní (RS485)&lt;br /&gt;
* do webové administrace přidána možnost vzájemného přehození pozic dvou 1-Wire záznamů&lt;br /&gt;
* další drobné opravy z průběžných beta testů&lt;br /&gt;
&lt;br /&gt;
== 8.3.2014 ==&lt;br /&gt;
* SDS-C: opraveno chyba omezující možný rozsah sys[78] (bylo omezeno na 0xFF, už není - teď správně vezme max velikost pole ram[] nebo text[])&lt;br /&gt;
&lt;br /&gt;
== 1.3.2014 ==&lt;br /&gt;
* SDS-C: nová funkce serial_write()&lt;br /&gt;
* SDS-C: nový timeout pro smtp_send() - zamezí specifickému možnému zaseknutí programu, když SMTP server přestane odpovídat uprostřed transkace po více než 50sec&lt;br /&gt;
* SDS-C: opravena funkce snmp_send_trap() - horní část seznamu trapů byla předtím chybně neodeslatená (teď už je vše OK)&lt;br /&gt;
* vylepšení odolnosti při výpadku a při obnovení připojení k Ethernetu&lt;br /&gt;
* různé drobné důležité opravy (viz beta testy)&lt;br /&gt;
&lt;br /&gt;
== 23.1.2014 ==&lt;br /&gt;
* překlopená beta-verze (po ukončené ověřovací sérii testů)&lt;br /&gt;
* SDS-C: úpravy (spolehlivost) v http_get(), dns_resolve()&lt;br /&gt;
* rozšířena 1-W funkcionality (další chipy)&lt;br /&gt;
* možnost &amp;quot;zrušit odečet&amp;quot; tlačítkem ve webovém rozhraní&lt;br /&gt;
* možnost nastavit minimální akceptovanou délku S0 impulsu pro každý vstup samostatně&lt;br /&gt;
* maximální velikost user.htm je zvětšena (teď lze vyplnit celou DF)&lt;br /&gt;
&lt;br /&gt;
== 30.11.2013 ==&lt;br /&gt;
* celá řada drobných oprav (nalezené v rámci testování od poslední verze)&lt;br /&gt;
* S0.htm: všechny hodnoty zobrazují údaje od posledního odpočtu (chybělo pro T0/T1 kWh)&lt;br /&gt;
* web: /get_dfi[x]&lt;br /&gt;
* SDS-C: čtení a zápis celé stránky z/do paměti DataFlash&lt;br /&gt;
&lt;br /&gt;
== 3.10.2013 ==&lt;br /&gt;
* celá řada drobných oprav&lt;br /&gt;
* login html stránka upravena (w3c valid)&lt;br /&gt;
* možnost nastavit MTD pro S0 měření&lt;br /&gt;
* nový SDSC.exe program&lt;br /&gt;
&lt;br /&gt;
== 16.3.2013 ==&lt;br /&gt;
* zápis výpadku a znovu-připojení Ethernetu do logu historie&lt;br /&gt;
* při odpojení a následném znovu-připojení Ethernetu dojde od teď záměrně ke smazání celé ARP tabulky, takže všechny MAC-IP páry jsou vyžádány znovu (pro případ že se např. vyměnil router atd.)&lt;br /&gt;
* SDS-C: get_txt[xxx] (vypíše pole text od indexu xxx až do znaku 0x00 na některém z následujících indexů v tomto poli)&lt;br /&gt;
* get_sys[xxx] vrací i text pro textové položky (vyzkoušejte všechny sys[] které jsou textové)&lt;br /&gt;
* SDS-C: přidáno sys[900] až sys[931] (text ROM CODE pro 1-W čidla)&lt;br /&gt;
* upraveno zpracování ARP tabulky (více bezpečné pro dlouhodobý provoz)&lt;br /&gt;
* možnost řízení tarifního signálu pro S0 prostřednictvím SDS-C programu&lt;br /&gt;
* funkce &amp;quot;odečet&amp;quot; pro S0 (viz nastavení S0 vstupů ve webové administraci)&lt;br /&gt;
* SDS-C: funkce smtp_send() akceptuje text[] nejen pro obsah zprávy, ale i pro adresu příjemce a subject&lt;br /&gt;
* SDS-C: funkce http_get() akceptuje text[] nejen pro obsah zprávy, ale i pro nastavení HTTP HOST parametru&lt;br /&gt;
&lt;br /&gt;
== 4.2.2013 ==&lt;br /&gt;
* při zobrazení echo.htm, když je konzole plná textu, nedojde k resetu zařízení&lt;br /&gt;
* opraveno časování pro 1-Wire sběrnici (vráceno na původní stav před úpravou v 20.12), uptime počítá také správně&lt;br /&gt;
* SDS-C: přidáno sys[45]&lt;br /&gt;
* SDS-C: přidáno sys[46]&lt;br /&gt;
* SDS-C: přidáno sys[98]&lt;br /&gt;
* SDS-C: echoinline() funguje správně&lt;br /&gt;
&lt;br /&gt;
== 20.12.2012 ==&lt;br /&gt;
Významné vydání, oprava řady drobných chyb průběžně hlášených od uživatelů, celá řada nových funkcí&lt;br /&gt;
* DHCP CLIENT&lt;br /&gt;
* SNMP write&lt;br /&gt;
* rychlejší boot loader&lt;br /&gt;
* rychlejší webová administrace&lt;br /&gt;
* přesnější udržování aktuálního času v zařízení (dvojnásobná kontrola přesnosti a korekce)&lt;br /&gt;
* přepracované úložiště v pevné paměti - SDS s eeprom ukládá všech 16 názvů pro teploměry&lt;br /&gt;
* možnost změny portu &amp;quot;UDP protokolu&amp;quot; (výchozí port 280)&lt;br /&gt;
* SDS-C: konzole zvětšena o zhruba 400 znaků&lt;br /&gt;
* délky textů pro (názvy) S0 jsou 32 bajtů, což je až 32 znaků (české znaky v UTF-8 berou 2 bajty), nicméně vše se v defaultu už vleze&lt;br /&gt;
* pro každý S0 vstup lze nastavit rozdílnou cenu pro T0 a T1 (stav tarifu)&lt;br /&gt;
* SDS-C: funkce send_udp()&lt;br /&gt;
* SDS-C: přidáno sys[61]&lt;br /&gt;
* SDS-C: přidáno sys[27]&lt;br /&gt;
* SDS-C: funkce echoinline()&lt;br /&gt;
* správné zpracování LOGIC S0 u zařízení SDS MICRO, které tento vstup nemají&lt;br /&gt;
* upraven CSV soubor (vypisuje detaily pro S0)&lt;br /&gt;
* upraven xml.xml a s0.xml (vše funguje jak má i při plném osazení, typicky pro SDS MACRO 8)&lt;br /&gt;
* SDS-C: sprintf dává 0x00 na konec textu (tohle chybělo)&lt;br /&gt;
* SDS-C: http_get() zapisuje 0x00 na &amp;quot;konec&amp;quot; text[], když se do text[] ukládá přijatá odpověď.&lt;br /&gt;
* SDS-C: oprava která má zajistit nevyvolání chyby 1029 pro http_get() funkci &lt;br /&gt;
* rozšířený MIB (položky pro S0 hodnoty)&lt;br /&gt;
* SDS-C: SNMP TRAP (odesílání TRAPů z SDS-C programu)&lt;br /&gt;
* a řada drobných obrav a vylepšení&lt;br /&gt;
&lt;br /&gt;
== 7.5.2012 ==&lt;br /&gt;
* opravena funkčnost PWM výstupu - lze správné nastavit střídu v rozmezí 0 až 100% viz návod na WiKi&lt;br /&gt;
&lt;br /&gt;
== 29.3.2012 ==&lt;br /&gt;
* firmware funguje správně i v historických zařízeních SDS MICRO LIGHT (1) používajících 24C16/24C256&lt;br /&gt;
&lt;br /&gt;
== 27.3.2012 ==&lt;br /&gt;
* spolehlivé načítání prvních osmi uložených pozic teploměrů z pevné paměti po resetu&lt;br /&gt;
* automaticky umístí nadbývající připojené teploměr na pozice 9 až 16&lt;br /&gt;
* zamykání pozic teploměrů funguje správně&lt;br /&gt;
* předělaná SDS-C funkce smtp_send() - má větší pracovní buffer, zvládne náročnější SMTP servery&lt;br /&gt;
&lt;br /&gt;
== 18.3.2012 ==&lt;br /&gt;
* finální podoba SNMP MIB (stáhněte si aktualizovaný MIB soubor)&lt;br /&gt;
&lt;br /&gt;
== 11.3.2012 ==&lt;br /&gt;
* malá změna v SNMP MIB (srovnání MIBů mezi MICRO/MACRO)&lt;br /&gt;
* další drobné opravy nahlášené po testování firmware z 8.3.&lt;br /&gt;
&lt;br /&gt;
== 8.3.2012 ==&lt;br /&gt;
* odstraněno zpoždění v převodníku Ethernet-Serial (Virtual COM port)&lt;br /&gt;
&lt;br /&gt;
== 4.3.2012 ==&lt;br /&gt;
Řada oprav a vylepšení, pocházející z BETA testování (viz forum)&lt;br /&gt;
* správný výpočet data od 29.2.2012&lt;br /&gt;
* možnost uzamknout pozice 1-Wire zařízení (teploměry)&lt;br /&gt;
* rozšířené SNMP&lt;br /&gt;
* SDS-C verze č. 06&lt;br /&gt;
* pole text[] a funkce atoi(), sprintf()&lt;br /&gt;
* uživatelská stránka může být i jako přímo indexová stránka webového rozhraní&lt;br /&gt;
* všechny fyzické vstupy a výstupy jsou počítány od jedničky&lt;br /&gt;
* další drobné úpravy a opravy, viz soupis u BETA testů&lt;br /&gt;
&lt;br /&gt;
== 17.1.2012 ==&lt;br /&gt;
* oprava indexů v &amp;quot;temp&amp;quot; tagech v xml.xml a temp.xml&lt;br /&gt;
&lt;br /&gt;
== 16.1.2012 ==&lt;br /&gt;
* opravy v přenosu hodnot teplot jednotlivými protokoly (v případě teploty menší než 0 stupňů Celsia byl špatně umístěn znak minus)&lt;br /&gt;
&lt;br /&gt;
== 15.1.2011 ==&lt;br /&gt;
* opravena chyba s user-dataflash (oprava má význam pouze pro výrobky osazené DF, nikoliv EE, tam chyba nebyla)&lt;br /&gt;
&lt;br /&gt;
== 21.12.2011 ==&lt;br /&gt;
* zapracovány všechny nové funkce, testované v rámci BETA testování nového firmware (probíhalo od 27.10.)&lt;br /&gt;
&lt;br /&gt;
== 27.10.2011 ==&lt;br /&gt;
* do webového rozhraní přidáno tlačítko: možnost nastavení střídy PWM &amp;quot;na zkoušku&amp;quot; (bez uložení do pevné paměti)&lt;br /&gt;
* web: funkce /get_sys a /get_ram může vrátit řadu proměnných za sebou&lt;br /&gt;
&lt;br /&gt;
== 2.10.2011 ==&lt;br /&gt;
* přidán sys[26]&lt;br /&gt;
* přidán sys[63]&lt;br /&gt;
* přidán sys[78]&lt;br /&gt;
* doplněn UDP protokol o čtyři nové funkce (čtení / zápis polí sys[] a ram[])&lt;br /&gt;
&lt;br /&gt;
== 31.7.2011 ==&lt;br /&gt;
* opraven problém s UDP protokolem - příkaz '''write''' (už funguje vždy ok)&lt;br /&gt;
* nový SDSC.exe program - doplňuje správnou HTML serverovou hlavičku pro uživatelskou stránku&lt;br /&gt;
&lt;br /&gt;
== 29.7.2011 ==&lt;br /&gt;
* možnost zápis z SDS-C programu do systémových proměnných sys[559] až sys[561]&lt;br /&gt;
* nová funkce pro UDP protokol - funkce '''write''' umožňuje hromadný zápis do sys[] systémových proměnných&lt;br /&gt;
&lt;br /&gt;
== 25.6.2011 ==&lt;br /&gt;
* možnost změnit číslo TCP portu webového serveru webového rozhraní výrobku (změna stejným způsobem jako je změna IP nebo MAC adresy...)&lt;br /&gt;
&lt;br /&gt;
== 16.6.2011 ==&lt;br /&gt;
* verze SDS-C č. 04&lt;br /&gt;
* SDS-C: plně funkční funkce ping()&lt;br /&gt;
* rozšíření maximální velikosti SDS-C programu ve všech verzích SDS MICRO (light, light2, DIN)&lt;br /&gt;
** DATAFLASH maximální velikost programu je 65472 bajtů&lt;br /&gt;
** 24C16 maximální velikost programu je 900 bajtů&lt;br /&gt;
** 24C256 maximální velikost programu je 31416 bajtů&lt;br /&gt;
&lt;br /&gt;
* web: nastavení uživatelské proměnné pomocí volání sdscep pracuje s doplňkovými parametry (např. vrací hodnotu)&lt;br /&gt;
* upravena obsluha eeprom paměti (jiný I2C driver) - tzn. větší spolehlivost a větší rychlost&lt;br /&gt;
* sys[25] po každém zavolání čte hodnotu z PHY HW a vrací skutečný stav v daný okamžik&lt;br /&gt;
* čtení ze sériové linky je teď dostupné pro program v SDS-C (viz sys[48] a sys[49])&lt;br /&gt;
* změna řízení PWM výstupu, lze teď plynule regulovat poměr log0 a log1 v celém rozsahu&lt;br /&gt;
* všechny stránky předělány na UTF-8, vstupy textů berou i České znaky atd.&lt;br /&gt;
* výpis MAC adresy pro SDS-C program (viz sys[31] až sys[36])&lt;br /&gt;
* SDS-C: http_get může uložit získaná data webové stranky do pole ram[]&lt;br /&gt;
* zcela změněn ARP algoritmus, měl by teď bez problémů pracovat i na větších podsítích než je /24&lt;br /&gt;
* web: informační stránka /arp.htm&lt;br /&gt;
* SDS-C: zvětšena velikost pole ram[] na 512 záznamů&lt;br /&gt;
* web: výpis hodnot sys[] a ram[] pomocí dynamicky generované webové stránky (např. /get_ram[123] )&lt;br /&gt;
* web: čtení výpisu sys[] a ram[] lze zakázat v nastavení (SDS-C parametr)&lt;br /&gt;
* SDS-C: možnost zápisu do S0 impulsních počítadel (nulování, úpravy hodnot, atd.)&lt;br /&gt;
* pokud je konkrétní relé ve webovém rozhraní nastaveno na něco jiného, než na &amp;quot;ovládáno z SDS-C&amp;quot;, tak jeho stav SDS-C program nezmění&lt;br /&gt;
&lt;br /&gt;
== 21.5.2011 ==&lt;br /&gt;
* opravy v českém a anglickém překladu webového rozhraní&lt;br /&gt;
&lt;br /&gt;
== 14.5.2011 ==&lt;br /&gt;
* vydána pouze nová EXE aplikace pro nahrávání SDS-C&lt;br /&gt;
* od této verze umožňuje použít složité kostrukce s IF, např.: if (test) { kus programu; } else { kus programu; };&lt;br /&gt;
&lt;br /&gt;
== 13.5.2011 ==&lt;br /&gt;
* od této verze jsou k dispozici dvě jazykové varianty - plně Česká varianta a plně Anglická varianta&lt;br /&gt;
* varianty se liší pouze texty ve webovém rozhraní, jejich funkčnost je ale zcela shodná (bez rozdílů)&lt;br /&gt;
&lt;br /&gt;
== 20.3.2011 ==&lt;br /&gt;
* funkční nahrávání uživatelské webové stránky&lt;br /&gt;
&lt;br /&gt;
== 3.3.2011 ==&lt;br /&gt;
* pouze nový simulační WinEXE program pro SDS-C&lt;br /&gt;
** funkční simulátor LCD (SDS MACRO)&lt;br /&gt;
** vylepšení v hlášení chyb při kontrole programu SDS-C&lt;br /&gt;
&lt;br /&gt;
== 27.2.2011 ==&lt;br /&gt;
* změněn výpis UpTime v Actual Status webové stránce na dny/hod/min/sec/msec&lt;br /&gt;
* doplněna generovaná webová stránka: echo.htm (obsahuje pouze výpis konzole SDS-C, vhodné pro embedding do jiného webu)&lt;br /&gt;
* nový XML soubor - usys.xml - výpis vzdálených proměnných SDS-C&lt;br /&gt;
* možnost volby nezasílání http dat pro volání sdscep (umožnujě tzv. tichou aktualizaci hodnoty sys)&lt;br /&gt;
* do SNMP doplněna hodnota teploty SoC (vyčtená z HW, bez převodu na °C)&lt;br /&gt;
* příprava pro nahrání uživatelské webové stránky (plná podpora bude v následující verzi fw)&lt;br /&gt;
* nová verze SDS-C, nové možnosti, nový simulátor&lt;br /&gt;
** SDS-C: možnost použít #define v programu&lt;br /&gt;
** SDS-C: možnost použít uživatelské proměnné jako indexy do pole (sys, ram)&lt;br /&gt;
** SDS-C: k dispozici je univerzální pole ram[]&lt;br /&gt;
** SDS-C: nová WinEXE aplikace, řada drobností...&lt;br /&gt;
&lt;br /&gt;
== 30.1.2011 ==&lt;br /&gt;
* úpravy specifické pro verzi LIGHT s EEPROM (restart zařízení)&lt;br /&gt;
&lt;br /&gt;
== 29.1.2011 ==&lt;br /&gt;
* v SNMP doplněn výpis celé hodnoty (x100) pro 1-W teploměry 2 až 16&lt;br /&gt;
&lt;br /&gt;
== 28.1.2011 ==&lt;br /&gt;
* dvě nové funkce v SDS-C, pro zápis do sériového portu &lt;br /&gt;
* zpřesněný interní čítač reálného času&lt;br /&gt;
&lt;br /&gt;
== 26.1.2011 ==&lt;br /&gt;
* změněna minimální akceptovaná délka S0 impulsu, bylo původně 16 msec jako minimum, od této verze je to 5 msec (z důvodů připojení speciálních nepřímých elektroměrů).&lt;br /&gt;
* doplňky v simulátoru SDS-C, zejména ohledně času, korekce optovstupů, atd.&lt;br /&gt;
&lt;br /&gt;
== 9.1.2011 ==&lt;br /&gt;
* nová položka v SNMP - pro každé teplotní čidlo je poskytována plná hodnota násobena 100 (např. 12.35°C je předáno jako 1235)&lt;br /&gt;
* pouze SDS MICRO LIGHT: v SDS-C doplněny čtyři sys[], umožňující přímé ovládání vývodů A1, B1, M4, M5 (CMOS 3V3 logika, pájecí plošky)&lt;br /&gt;
&lt;br /&gt;
== 7.12.2010 ==&lt;br /&gt;
* upraven způsob výpočtu a prezentace okamžitého výkonu (S0), zejména v případě přerušení dodávky S0 impulsů&lt;br /&gt;
&lt;br /&gt;
== 1.12.2010 ==&lt;br /&gt;
* firmware podporuje i jiné osazené dataflash (menší velikosti) paměti&lt;br /&gt;
&lt;br /&gt;
== 29.11.2010 ==&lt;br /&gt;
* oprava v chování SDS-C, kdy pokud byl program právě ve funkci wait(), tzn. čekal, a v tu chvíli byl nahrán nový program, tak nebylo čekání zrušeno, a nový program byl spuštěn až po dokončení čekání&lt;br /&gt;
* úpravy odkazů na www.merenienergie.cz, portal.merenienergie.cz&lt;br /&gt;
&lt;br /&gt;
== 20.10.2010 ==&lt;br /&gt;
* upraven UDP protokol - doplněno ROMCODE pro teplotní čidla&lt;br /&gt;
* upraveno zadávání uživatelských sys[] proměnných z webu (už lze zadávat i záporné čísla)&lt;br /&gt;
* opravena ztráta nastavení GMT offset po resetu zařízení&lt;br /&gt;
&lt;br /&gt;
== 8.10.2010 ==&lt;br /&gt;
* opraven SNMP který měl od verze 10.9. problémy&lt;br /&gt;
* tento a novější firmware je vhodný pro spolupráci se službou portal.merenienergie.cz&lt;br /&gt;
&lt;br /&gt;
== 6.10.2010 ==&lt;br /&gt;
* oprava výpisu přepočtené spotřeby (kW) - doplněno vždy na tři desetinná místa&lt;br /&gt;
* funkční nulování převodu peněz&lt;br /&gt;
* SMTP konfigurace se správně načte po zapnutí zařízení&lt;br /&gt;
&lt;br /&gt;
== 26.9.2010 ==&lt;br /&gt;
* SDS-C: stránka &amp;quot;control&amp;quot;, uživatelsky editovatelné proměnné&lt;br /&gt;
* SDS-C: do sys[] doplněna informace pro S0 (čas od posledního impulsu)&lt;br /&gt;
* drobné doplňky do XML, příprava pro SDSMON.exe&lt;br /&gt;
* UDP protokol, popis viz wiki&lt;br /&gt;
&lt;br /&gt;
== 17.9.2010 ==&lt;br /&gt;
* oprava v SDS-C: funkce http_get a smtp_send, od teď umožnují vkládat proměnné až na pozici do maximální délky zprávy (1024 znaků)&lt;br /&gt;
* výstup /temp.txt je doplněn na dvojici: romcode : teplota&lt;br /&gt;
* výstup /temp.xml je doplněn o tagy s romcode&lt;br /&gt;
&lt;br /&gt;
== 15.9.2010 ==&lt;br /&gt;
* doplněn výstup teplot ze všech čidel, do textové formy, /temp.txt&lt;br /&gt;
* odečet teplotních web-snippet tempX.htm akceptuje hex znaky (tj. 0-9, a-f)&lt;br /&gt;
&lt;br /&gt;
== 14.9.2010 ==&lt;br /&gt;
* opraven výpis teploty v csv.csv&lt;br /&gt;
* nový xml soubor: temp.xml - pouze s údaji o teplotě&lt;br /&gt;
&lt;br /&gt;
== 10.9.2010 ==&lt;br /&gt;
* opraveno zobrazení kWh na webových stránkách (špatný číselný text u vyšších hodnot kWh)&lt;br /&gt;
&lt;br /&gt;
== 8.9.2010 ==&lt;br /&gt;
* ve firmware byl zvýšen maximální počet obsluhovaných teplotních sensorů z 8 na 16&lt;br /&gt;
&lt;br /&gt;
== 14.8.2010 ==&lt;br /&gt;
* opraveno SDS-C - správnost předávání konstantních číselných parametrů funkcím&lt;br /&gt;
* doplněna nová funkce do SDS-C - funkce http_get&lt;br /&gt;
* nový Win32 program pro práci s SDS-C (doplněna funkčnost vzdálených labelů)&lt;br /&gt;
* zobrazení názvů tarifů na celkové stránce pro S0 (předtím bylo jen na detailních stránkách)&lt;br /&gt;
&lt;br /&gt;
== 9.8.2010 ==&lt;br /&gt;
* firmware funguje i pro HW rev2,3 (SDS MICRO light), předchozí verze 3.8. nenašla externí flash paměť&lt;br /&gt;
&lt;br /&gt;
== 3.8.2010 ==&lt;br /&gt;
* opravena chyba kdy nedošlo k přečtení konfigurace pro S0 vstupy z pevné paměti, už je to ok&lt;br /&gt;
* upraven výpočet okamžitého výkonu, aby při nepřipojeném měřiči ukazoval nulu&lt;br /&gt;
&lt;br /&gt;
== 2.8.2010 ==&lt;br /&gt;
* zcela přepracováno webové rozhraní pro měřiče energie&lt;br /&gt;
* rozšířené snmp/xml/csv pro měřiče energie&lt;br /&gt;
* možnost připojít více samostatnyćh měřičů energie najednou&lt;br /&gt;
* vstup pro tarifní rozlišení (denní/noční proud, výroba/dodávka, atd.)&lt;br /&gt;
* vylepšený Windows&amp;amp;reg; program pro nahrávání firmware&lt;br /&gt;
&lt;br /&gt;
== 26.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* nový firmware pro převodník Ethernet/Serial&lt;br /&gt;
* samostatná stránka ve webovém rozhraní pro zobrazení stavu převodníku Ethernet/Serial&lt;br /&gt;
&lt;br /&gt;
== 23.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* úprava chování pinu RSTD - pokud se zkratuje a zapne se zařízení, je kromě původní funkce (reset konfigurace) spuštěn i bootloader, tzn. bootloader lze odteď pouštět jak z webového rozhraní (původní stav), tak odteď i přes RSTD - toto má výhodu, pokud se nepovede nahrát celý nový firmware, tak lze znovu spustit bootloader a opakovat nahrávání znovu&lt;br /&gt;
* drobná oprava v SMTP klientu&lt;br /&gt;
* byl vydán nový Windows&amp;amp;reg; program pro nahrávání programů v SDS-C&lt;br /&gt;
&lt;br /&gt;
== 18.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* maximální počet znaků v přihlašovacích údajích pro SMTP je rozšířen na 32 znaků&lt;br /&gt;
* drobné opravy ve webovém rozhraní&lt;br /&gt;
&lt;br /&gt;
== 15.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* ošetřena funkčnost SMTP při použití přihlašovacích údajů pro SNMP o maximálním počtu znaků (navíc v budoucnu to bude prodlouženo)&lt;br /&gt;
&lt;br /&gt;
== 10.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* opravy drobností tak jak byly nahlášeny od uživatelů&lt;br /&gt;
* tři desetinné místa na ose grafu spotřeby energie&lt;br /&gt;
* oprava hodnoty dne u data v grafu spotřeby energie&lt;br /&gt;
* doplňky v http serveru, úprava hlavičky pro CSV&lt;br /&gt;
* přihlašovací stránka se už zobrazí všude a vždy (předtím někdy neprošlo např. nod32)&lt;br /&gt;
* příprava pro centrální sběrný program SDSMON.exe&lt;br /&gt;
&lt;br /&gt;
== 2.6.2010 ==&lt;br /&gt;
&lt;br /&gt;
* oficiální verze SDS-C k dispozici&lt;br /&gt;
* celá řada nových funkcí, především pro SDS-C&lt;br /&gt;
* SMTP - odesílání emailů (z programu SDS-C)&lt;br /&gt;
* výstup dat i ve formě CSV souboru (středníkový oddělovač pro Excel&amp;amp;reg;)&lt;br /&gt;
&lt;br /&gt;
== 17.5.2010 ==&lt;br /&gt;
&lt;br /&gt;
* opraven výpis LOGu pro IP adresy&lt;br /&gt;
* záznam nepovedených přístupů (když to někdo zkouší se špatným heslem)&lt;br /&gt;
* drobnosti v http serveru&lt;br /&gt;
* graf S0 má místo +1kWh jen +0.1kWh&lt;br /&gt;
* oprava detekce EEPROM (aktualizujte FW !)&lt;br /&gt;
&lt;br /&gt;
== 15.5.2010 ==&lt;br /&gt;
&lt;br /&gt;
* změna výchozího NTP serveru (default config)&lt;br /&gt;
* kratší odpočet při změně NTP serveru&lt;br /&gt;
* stránka S0 i z hlavního menu&lt;br /&gt;
&lt;br /&gt;
== 12.5.2010 ==&lt;br /&gt;
&lt;br /&gt;
* drobné úpravy&lt;br /&gt;
* informace o datové paměti (bude důležité pro SDS-C)&lt;br /&gt;
* volba NTP serveru&lt;br /&gt;
&lt;br /&gt;
== 4.5.2010 ==&lt;br /&gt;
&lt;br /&gt;
* řada doplňků pro S0 vstup (přepočty, kreslení grafu, xml)&lt;br /&gt;
&lt;br /&gt;
== 23.4.2010 ==&lt;br /&gt;
&lt;br /&gt;
* počítáni S0 impulsů (opto 3), speciální webové zobrazení a přepočty&lt;br /&gt;
* doplňky v SNMP, doplněný MIB&lt;br /&gt;
* nepřipojené teploměry hlásí teplotu 32767&lt;br /&gt;
* příprava stránky pro řízení relé pomocí teploměrů&lt;br /&gt;
&lt;br /&gt;
== 25.1.2010 ==&lt;br /&gt;
&lt;br /&gt;
* možnost pojmenovat si všechny analogové vstupy&lt;br /&gt;
* doplněno: název analogového vstupu lze přečíst přes SNMP&lt;br /&gt;
* doplněno: název relátka lze přečíst přes SNMP&lt;br /&gt;
&lt;br /&gt;
== 15.1.2010 ==&lt;br /&gt;
&lt;br /&gt;
* opraveno chybějící tlačítko u přihlašovací stránky (šlo pouze stiskem klávesy Enter)&lt;br /&gt;
* doplněno chybějící čtvrté nastavovací tlačítko u ADC konstant&lt;br /&gt;
&lt;br /&gt;
== 11.1.2010 ==&lt;br /&gt;
&lt;br /&gt;
* opraveno (doplňeno) chybějící záporné znaménko u výpisu teploty (web, SNMP)&lt;br /&gt;
&lt;br /&gt;
== 31.10.2009 ==&lt;br /&gt;
&lt;br /&gt;
* navýšení maximálního počtu současně přihlášených uživatelů do webového rozhraní&lt;br /&gt;
&lt;br /&gt;
== 30.10.2009 ==&lt;br /&gt;
&lt;br /&gt;
* zvýšení max počtu 1-Wire&amp;amp;reg; teploměrů na 8 kusů na jedné sběrnici&lt;br /&gt;
* doplněn výstup SNMP o údaje desetinných hodnot pro všechny teploměry&lt;br /&gt;
* doplněno uživatelské nastavení přepočítavacích hodnot pro A/D převod, použité pro zobrazení ve webovém rozhraní a pro xml výstup&lt;br /&gt;
* zobrazení sysLocation také v přehledové stránce (actual status)&lt;br /&gt;
* možnost pojmenovat si všechny teploměry (16 znaků pro každý)&lt;br /&gt;
* možnost pojmenovat si ovládané relé (16 znaků pro každé)&lt;br /&gt;
&lt;br /&gt;
== 29.10.2009 ==&lt;br /&gt;
&lt;br /&gt;
* drobnosti před vydáním 30.10.2009&lt;br /&gt;
&lt;br /&gt;
== 10.10.2009 ==&lt;br /&gt;
&lt;br /&gt;
* NTP klient - synchronizace času a data protokolem NTP&lt;br /&gt;
* nastavení NTP serveru a GMT prostřednictvím &amp;quot;Admin config&amp;quot; webové stránky&lt;br /&gt;
* zobrazení NTP času a data v &amp;quot;actual status&amp;quot; webové stránce&lt;br /&gt;
* zobrazení času a data v &amp;quot;Log&amp;quot; webové stránce u všech položek&lt;br /&gt;
&lt;br /&gt;
== 20.09.2009 ==&lt;br /&gt;
&lt;br /&gt;
* webová stránka &amp;quot;aktuální stav&amp;quot; - upraveno pro správné zobrazování v IE&lt;br /&gt;
* v nadpisu webové stránky (tag title) se zobrazuje název zařízení a navíc celý obsah textu ''sysLocation''&lt;br /&gt;
&lt;br /&gt;
== 07.09.2009 ==&lt;br /&gt;
&lt;br /&gt;
* 1-Wire&amp;amp;reg; měří na 1/16 stupně Celsia, upraveno časování (větší spolehlivost), lze připojit více čidel&lt;br /&gt;
* možnost změny MAC adresy (přímo z webového rozhraní)&lt;br /&gt;
* zobrazení informační (potvrzovací) stránky před změnou IP, MAC&lt;br /&gt;
&lt;br /&gt;
== výchozí firmware ==&lt;br /&gt;
&lt;br /&gt;
* výchozí firmware&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MICRO:_ST:_firmware_changelog&amp;diff=976</id>
		<title>SDS MICRO: ST: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MICRO:_ST:_firmware_changelog&amp;diff=976"/>
		<updated>2025-11-15T14:24:43Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-MICRO ST / SDS-MICRO ST DP / SDS-IO6 ST ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek '''SDS MICRO ST''' a '''SDS MICRO ST DP''' a '''SDS IO6 ST'''.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15.11.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* SDS-C: přidány indexy 303 a 304 a 305&lt;br /&gt;
* SDS-C: přidán index 2198&lt;br /&gt;
&lt;br /&gt;
== 2.11.2023 ==&lt;br /&gt;
* oprava SNMP (způsob předávání chybových hodnot)&lt;br /&gt;
&lt;br /&gt;
== 6.2.2023 ==&lt;br /&gt;
* pouze SDS MICRO ST DP : nový výchozí firmware&lt;br /&gt;
&lt;br /&gt;
== 29.11.2022 ==&lt;br /&gt;
* SDS-C: přidán index 137&lt;br /&gt;
* dns_resolv hlásí chybu sítě (resp. odpojený ethernet) dříve&lt;br /&gt;
* oprava možného problému na sériové lince, kdy mohlo dojít k náhodnému malému zpoždění odeslání dat&lt;br /&gt;
&lt;br /&gt;
== 26.11.2022 ==&lt;br /&gt;
* SDS-C: oprava možného teoretického problému u funkce serialX_write při odesílání z pole ram[] (ostatní zdroje dat/pole problém neměly)&lt;br /&gt;
* SDS-C: přidány indexy 2811...2816 a 2861...2866 (statistiky COMx)&lt;br /&gt;
&lt;br /&gt;
== 4.8.2022 ==&lt;br /&gt;
* zlepšení funkce OneWire - další doplnění pro counterfeit čidla&lt;br /&gt;
* zlepšení funkce OneWire - odstranění náhodných výpadků pro čidla vlhkosti&lt;br /&gt;
* zlepšení funkce OneWire - širší prohledávání sběrnice (velká saturace neznámými čidly nevyčerpá počet kroků při hledání)&lt;br /&gt;
* opraveno hlášení o stavu (chybějící) konfigurace na úvodní webové stránce&lt;br /&gt;
* malá bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* SDS umí číst teplotu i z counterfeit teplotních čidel (pozná je a přizpůsobí se jejich poškozené komunikaci)&lt;br /&gt;
* opravena chyba při výpisu teplot na webu (jinde to bylo OK), kdy v rozmezí -0.99 degC až 0.00 degC chyběl znak mínus&lt;br /&gt;
* funkční autorizovaný HTTP POST pro nahrání nového FW, SDSC, UserWeb, konfigurace a sdílených proměnných&lt;br /&gt;
* další drobné úpravy a opravy&lt;br /&gt;
&lt;br /&gt;
== 27.12.2021 ==&lt;br /&gt;
* HW: při poruše hlavního zdroje hodin (krystal) se použije záložní zdroj&lt;br /&gt;
* HW: využíváme RTC pro udržení času při přechodu přes reset (drží čas dokud zase nepřijde NTP)&lt;br /&gt;
* aktualizován bootloader (vyžaduje fyzické přeprogramování u výrobce) - umí znovu nahrát FW pokud se v SoC poškodí&lt;br /&gt;
&lt;br /&gt;
== 14.4.2021 ==&lt;br /&gt;
* oprava hodnot v sys 39 (0 vyp, 3 zap) &lt;br /&gt;
&lt;br /&gt;
== 13.4.2021 ==&lt;br /&gt;
* možnost ručního řízení (zap-vyp) aplikace automatiky LČ (zápis do sys 39) když je vypnutý NTP &lt;br /&gt;
&lt;br /&gt;
== 11.4.2021 ==&lt;br /&gt;
* možnost uživatelsky vypnout NTP klient a nastavovat čas přes SDS-C (sys 38 nebo sys 4), vhodné pro jiné zdroje času (LoRA, GSM, sběrnice, atd.). &lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* SDS-C: oprava chování wait() v režimu sys[63]=128 (teď už čeká po správnou dobu, ne po kratší) &lt;br /&gt;
&lt;br /&gt;
== 12.3.2021 ==&lt;br /&gt;
* oprava COM1 a COM6 - chybně aktivní parita i když nebyla uživatelem nastavena; opraveno &lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* SDS-C: oprava TID v MODBUS-TCP&lt;br /&gt;
* MBTC výpis rozšířen&lt;br /&gt;
* SDS-C: drobná úspora heap (více dostupného místa)&lt;br /&gt;
* SDS-C: dns resolv drobný fix&lt;br /&gt;
* SDS-C: http_get a http_post důležitý fix&lt;br /&gt;
* SDS-C: nová funkce http_close&lt;br /&gt;
* SDS-C: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
* vylepšený algoritmus S0, rozšířené možnosti nastavení detektoru S0 (nastavení přidáno ve webovém rozhraní) &lt;br /&gt;
&lt;br /&gt;
== 10.1.2021 ==&lt;br /&gt;
* web: ruční přepnutí CBY pro relé (tzn. &amp;quot;kdo ovládá relé&amp;quot;), na &amp;quot;SDS-C&amp;quot;, dané relé nevypne (off) ale ponechá jeho stávající stav (on, off) &lt;br /&gt;
&lt;br /&gt;
== 5.1.2021 ==&lt;br /&gt;
* SDS-C: oprava textcmp()&lt;br /&gt;
* bezpečnostní oprava&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení &lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* SDS-C: oprava http_get/post: správná vyplnění výsledů i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
* web: oprava tempX.htm&lt;br /&gt;
* oprava ovládání PDx (při změně z webu se nesáhne na ostatní bity nastavené např. ze SDS-C) &lt;br /&gt;
&lt;br /&gt;
== 20.9.2020 ==&lt;br /&gt;
* zvýšení odolnosti na výpadky komunkace (crc chyby) na OneWire sběrnici &lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* drobné opravy a optimalizace&lt;br /&gt;
* IO6-ST: oprava detekce eth &lt;br /&gt;
&lt;br /&gt;
== 18.7.2020 ==&lt;br /&gt;
* SDS-C: SMTP klient správně zvládne i servery které (chybně) nereagují potvrzením na předání těla emailu&lt;br /&gt;
* SDS-C: http klient upraven (zvýšena odolnost na výpadky spojení se serverem, upraveny timeouty) &lt;br /&gt;
&lt;br /&gt;
== 27.6.2020 (jen MICRO-ST) ==&lt;br /&gt;
* oprava možného okrajového problému s nečitelnými AD vstupy &lt;br /&gt;
&lt;br /&gt;
== 26.6.2020 ==&lt;br /&gt;
* různé drobky/opravy dle hlášení uživatelů a testů&lt;br /&gt;
* plně otestovaný MODBUS klient a MQTT klient&lt;br /&gt;
* audit log &lt;br /&gt;
&lt;br /&gt;
== 20.6.2020 ==&lt;br /&gt;
* SDS-C verze 09: přidáno http_post()&lt;br /&gt;
* MODBUS-TCP klient&lt;br /&gt;
* doladění MQTT klienta &lt;br /&gt;
&lt;br /&gt;
== 14.6.2020 ==&lt;br /&gt;
* SDS-C verze 09&lt;br /&gt;
* MQTT klient&lt;br /&gt;
* podpora pro modul SDS-1W-T-RH (rovnice pro HIH-5031)&lt;br /&gt;
* různé opravy (podle ostatních SDS) &lt;br /&gt;
&lt;br /&gt;
== 15.11.2019 ==&lt;br /&gt;
* oprava přehozených AD3 a AD4 &lt;br /&gt;
&lt;br /&gt;
== 14.11.2019 ==&lt;br /&gt;
* první vydání FW pro SDS MICRO ST&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MINI:_ST:_firmware_changelog&amp;diff=975</id>
		<title>SDS MINI: ST: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MINI:_ST:_firmware_changelog&amp;diff=975"/>
		<updated>2025-11-15T14:24:34Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-MINI ST a SDS-TTCPRO ST ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS-MINI ST a pro SDS-TTCPRO ST.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15.11.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* SDS-C: přidány indexy 303 a 304 a 305&lt;br /&gt;
* SDS-C: přidán index 2198&lt;br /&gt;
&lt;br /&gt;
== 2.11.2023 ==&lt;br /&gt;
* oprava SNMP (způsob předávání chybových hodnot)&lt;br /&gt;
&lt;br /&gt;
== 29.11.2022 ==&lt;br /&gt;
* SDS-C: přidán index 137&lt;br /&gt;
* dns_resolv hlásí chybu sítě (resp. odpojený ethernet) dříve&lt;br /&gt;
* oprava možného problému na sériové lince, kdy mohlo dojít k náhodnému malému zpoždění odeslání dat&lt;br /&gt;
&lt;br /&gt;
== 26.11.2022 ==&lt;br /&gt;
* SDS-C: oprava možného teoretického problému u funkce serialX_write při odesílání z pole ram[] (ostatní zdroje dat/pole problém neměly)&lt;br /&gt;
* SDS-C: přidány indexy 2811...2816 a 2861...2866 (statistiky COMx)&lt;br /&gt;
&lt;br /&gt;
== 4.8.2022 ==&lt;br /&gt;
* zlepšení funkce OneWire - další doplnění pro counterfeit čidla&lt;br /&gt;
* zlepšení funkce OneWire - odstranění náhodných výpadků pro čidla vlhkosti&lt;br /&gt;
* zlepšení funkce OneWire - širší prohledávání sběrnice (velká saturace neznámými čidly nevyčerpá počet kroků při hledání)&lt;br /&gt;
* opraveno hlášení o stavu (chybějící) konfigurace na úvodní webové stránce&lt;br /&gt;
* malá bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* SDS umí číst teplotu i z counterfeit teplotních čidel (pozná je a přizpůsobí se jejich poškozené komunikaci)&lt;br /&gt;
* opravena chyba při výpisu teplot na webu (jinde to bylo OK), kdy v rozmezí -0.99 degC až 0.00 degC chyběl znak mínus&lt;br /&gt;
* funkční autorizovaný HTTP POST pro nahrání nového FW, SDSC, UserWeb, konfigurace a sdílených proměnných&lt;br /&gt;
* další drobné úpravy a opravy&lt;br /&gt;
&lt;br /&gt;
== 27.12.2021 ==&lt;br /&gt;
* HW: při poruše hlavního zdroje hodin (krystal) se použije záložní zdroj&lt;br /&gt;
* HW: využíváme RTC pro udržení času při přechodu přes reset (drží čas dokud zase nepřijde NTP)&lt;br /&gt;
* aktualizován bootloader (vyžaduje fyzické přeprogramování u výrobce) - umí znovu nahrát FW pokud se v SoC poškodí&lt;br /&gt;
&lt;br /&gt;
== 14.4.2021 ==&lt;br /&gt;
* oprava hodnot v sys 39 (0 vyp, 3 zap)&lt;br /&gt;
&lt;br /&gt;
== 13.4.2021 ==&lt;br /&gt;
* možnost ručního řízení (zap-vyp) aplikace automatiky LČ (zápis do sys 39) když je vypnutý NTP&lt;br /&gt;
&lt;br /&gt;
== 11.4.2021 ==&lt;br /&gt;
* možnost uživatelsky vypnout NTP klient a nastavovat čas přes SDS-C (sys 38 nebo sys 4), vhodné pro jiné zdroje času (LoRA, GSM, sběrnice, atd.).&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* SDS-C: oprava chování wait() v režimu sys[63]=128 (teď už čeká po správnou dobu, ne po kratší)&lt;br /&gt;
&lt;br /&gt;
== 12.3.2021 ==&lt;br /&gt;
* oprava COM1 a COM6 - chybně aktivní parita i když nebyla uživatelem nastavena; opraveno&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* SDS-C: oprava TID v MODBUS-TCP&lt;br /&gt;
* MBTC výpis rozšířen&lt;br /&gt;
* SDS-C: drobná úspora heap (více dostupného místa)&lt;br /&gt;
* SDS-C: dns resolv drobný fix&lt;br /&gt;
* SDS-C: http_get a http_post důležitý fix&lt;br /&gt;
* SDS-C: nová funkce http_close&lt;br /&gt;
* SDS-C: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
* vylepšený algoritmus S0, rozšířené možnosti nastavení detektoru S0 (nastavení přidáno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 10.1.2021 ==&lt;br /&gt;
* web: ruční přepnutí CBY pro relé (tzn. &amp;quot;kdo ovládá relé&amp;quot;), na &amp;quot;SDS-C&amp;quot;, dané relé nevypne (off) ale ponechá jeho stávající stav (on, off) &lt;br /&gt;
&lt;br /&gt;
== 5.1.2021 ==&lt;br /&gt;
* SDS-C: oprava textcmp()&lt;br /&gt;
* bezpečnostní oprava&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení &lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* SDS-C: oprava http_get/post: správná vyplnění výsledů i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
* web: oprava tempX.htm&lt;br /&gt;
* oprava ovládání PDx (při změně z webu se nesáhne na ostatní bity nastavené např. ze SDS-C)&lt;br /&gt;
&lt;br /&gt;
== 20.9.2020 ==&lt;br /&gt;
* zvýšení odolnosti na výpadky komunikace (crc chyby) na OneWire sběrnici&lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* drobné opravy a optimalizace&lt;br /&gt;
&lt;br /&gt;
== 18.7.2020 ==&lt;br /&gt;
* SDS-C: SMTP klient správně zvládne i servery které (chybně) nereagují potvrzením na předání těla emailu&lt;br /&gt;
* SDS-C: http klient upraven (zvýšena odolnost na výpadky spojení se serverem, upraveny timeouty)&lt;br /&gt;
&lt;br /&gt;
== 27.6.2020 (jen MINI) == &lt;br /&gt;
* oprava možného okrajového problému s nečitelnými AD vstupy&lt;br /&gt;
&lt;br /&gt;
== 26.6.2020 ==&lt;br /&gt;
* různé drobky/opravy dle hlášení uživatelů a testů&lt;br /&gt;
* plně otestovaný MODBUS klient a MQTT klient&lt;br /&gt;
* audit log&lt;br /&gt;
&lt;br /&gt;
== 20.6.2020 ==&lt;br /&gt;
* SDS-C verze 09: přidáno http_post()&lt;br /&gt;
* MODBUS-TCP klient&lt;br /&gt;
* doladění MQTT klienta&lt;br /&gt;
&lt;br /&gt;
== 14.6.2020 ==&lt;br /&gt;
* SDS-C verze 09&lt;br /&gt;
* MQTT klient&lt;br /&gt;
* podpora pro modul SDS-1W-T-RH (rovnice pro HIH-5031) &lt;br /&gt;
* různé opravy (podle ostatních SDS)&lt;br /&gt;
&lt;br /&gt;
== 14.11.2019 ==&lt;br /&gt;
* relé lze z webového rozhraní aktivovat i v režimu OneShot&lt;br /&gt;
* SDS-C: emailový klient odesílá i platný datum v hlavičce emailu (je-li v SDS k dispozici platný čas) &lt;br /&gt;
&lt;br /&gt;
== 17.2.2019 ==&lt;br /&gt;
* oprava v ovládání PDx GPIO ze SDS-C (je to teď zcela shodné s TTCPRO)&lt;br /&gt;
&lt;br /&gt;
== 12.1.2019 ==&lt;br /&gt;
* optimalizace webového serveru (množství přenášenyćh dat sníženo až o polovinu, bez změny funkce) - ocení se to zejména při přenosu po úzkých linkách (např. gprs, modemy)&lt;br /&gt;
&lt;br /&gt;
== 4.1.2019 ==&lt;br /&gt;
* překlopena beta do oficiálního vydání&lt;br /&gt;
* SDS-C: verze 08 (pole share[], nové položky v sys[], nové sds-c funkce)&lt;br /&gt;
* watchdog sds-c programu&lt;br /&gt;
* COM6 je k dispozici&lt;br /&gt;
&lt;br /&gt;
== 1.7.2018 ==&lt;br /&gt;
* SDS-C: přidán sys 183 poskytující datum vydání FW který je právě nahrán v SDS &lt;br /&gt;
* opraven možný výpadek vysílání na ETH (opraveno stejně jako pro TTCPRO)&lt;br /&gt;
* SNMP: sdsS0translatedUnitT0,1 je poskytováno jako hodnota od odečtu (ne od úplného začátku měření, jak to bylo předtím) &lt;br /&gt;
&lt;br /&gt;
== 8.3.2018 ==&lt;br /&gt;
* oprava echo.htm - zobrazuje se&lt;br /&gt;
* oprava echo.htm - správně wrapuje obsah, a nejsou tam nadbytečné 0x00&lt;br /&gt;
* vhodnější řešení rexmitu částí webových stránek a dynamických dat (ocení to zejména uživatelé s mobilním připojením pro SDS)&lt;br /&gt;
&lt;br /&gt;
== 2.3.2018 ==&lt;br /&gt;
* aktualizace a oprava ve výpočtu &amp;quot;aktuálního výkonu&amp;quot; pro okrajové situace (např. krajní hodnoty impulsní konstanty)&lt;br /&gt;
&lt;br /&gt;
== 18.1.2018 ==&lt;br /&gt;
&lt;br /&gt;
* měření AD vstupů funguje&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
&lt;br /&gt;
* zvýšena stabilita spuštění po zapnutí&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
&lt;br /&gt;
* výchozí firmware (MINI odpovídá obsahem TTCPRO 18.12.2017)&lt;br /&gt;
* měření AD vstupů je v tomto vydání vypnuto (použijte novější FW)&lt;br /&gt;
* COM6 je vypnut (bude zapnut v příštím vydání)&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MICRO:_ST:_firmware_changelog&amp;diff=974</id>
		<title>SDS MICRO: ST: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MICRO:_ST:_firmware_changelog&amp;diff=974"/>
		<updated>2025-11-15T14:23:40Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-MICRO ST / SDS-MICRO ST DP / SDS-IO6 ST ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek '''SDS MICRO ST''' a '''SDS MICRO ST DP''' a '''SDS IO6 ST'''.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15.11.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* SDS-C: přidány indexy 303 a 304 a 305&lt;br /&gt;
* SDS-C: přidán indexy 2198&lt;br /&gt;
&lt;br /&gt;
== 2.11.2023 ==&lt;br /&gt;
* oprava SNMP (způsob předávání chybových hodnot)&lt;br /&gt;
&lt;br /&gt;
== 6.2.2023 ==&lt;br /&gt;
* pouze SDS MICRO ST DP : nový výchozí firmware&lt;br /&gt;
&lt;br /&gt;
== 29.11.2022 ==&lt;br /&gt;
* SDS-C: přidán index 137&lt;br /&gt;
* dns_resolv hlásí chybu sítě (resp. odpojený ethernet) dříve&lt;br /&gt;
* oprava možného problému na sériové lince, kdy mohlo dojít k náhodnému malému zpoždění odeslání dat&lt;br /&gt;
&lt;br /&gt;
== 26.11.2022 ==&lt;br /&gt;
* SDS-C: oprava možného teoretického problému u funkce serialX_write při odesílání z pole ram[] (ostatní zdroje dat/pole problém neměly)&lt;br /&gt;
* SDS-C: přidány indexy 2811...2816 a 2861...2866 (statistiky COMx)&lt;br /&gt;
&lt;br /&gt;
== 4.8.2022 ==&lt;br /&gt;
* zlepšení funkce OneWire - další doplnění pro counterfeit čidla&lt;br /&gt;
* zlepšení funkce OneWire - odstranění náhodných výpadků pro čidla vlhkosti&lt;br /&gt;
* zlepšení funkce OneWire - širší prohledávání sběrnice (velká saturace neznámými čidly nevyčerpá počet kroků při hledání)&lt;br /&gt;
* opraveno hlášení o stavu (chybějící) konfigurace na úvodní webové stránce&lt;br /&gt;
* malá bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* SDS umí číst teplotu i z counterfeit teplotních čidel (pozná je a přizpůsobí se jejich poškozené komunikaci)&lt;br /&gt;
* opravena chyba při výpisu teplot na webu (jinde to bylo OK), kdy v rozmezí -0.99 degC až 0.00 degC chyběl znak mínus&lt;br /&gt;
* funkční autorizovaný HTTP POST pro nahrání nového FW, SDSC, UserWeb, konfigurace a sdílených proměnných&lt;br /&gt;
* další drobné úpravy a opravy&lt;br /&gt;
&lt;br /&gt;
== 27.12.2021 ==&lt;br /&gt;
* HW: při poruše hlavního zdroje hodin (krystal) se použije záložní zdroj&lt;br /&gt;
* HW: využíváme RTC pro udržení času při přechodu přes reset (drží čas dokud zase nepřijde NTP)&lt;br /&gt;
* aktualizován bootloader (vyžaduje fyzické přeprogramování u výrobce) - umí znovu nahrát FW pokud se v SoC poškodí&lt;br /&gt;
&lt;br /&gt;
== 14.4.2021 ==&lt;br /&gt;
* oprava hodnot v sys 39 (0 vyp, 3 zap) &lt;br /&gt;
&lt;br /&gt;
== 13.4.2021 ==&lt;br /&gt;
* možnost ručního řízení (zap-vyp) aplikace automatiky LČ (zápis do sys 39) když je vypnutý NTP &lt;br /&gt;
&lt;br /&gt;
== 11.4.2021 ==&lt;br /&gt;
* možnost uživatelsky vypnout NTP klient a nastavovat čas přes SDS-C (sys 38 nebo sys 4), vhodné pro jiné zdroje času (LoRA, GSM, sběrnice, atd.). &lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* SDS-C: oprava chování wait() v režimu sys[63]=128 (teď už čeká po správnou dobu, ne po kratší) &lt;br /&gt;
&lt;br /&gt;
== 12.3.2021 ==&lt;br /&gt;
* oprava COM1 a COM6 - chybně aktivní parita i když nebyla uživatelem nastavena; opraveno &lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* SDS-C: oprava TID v MODBUS-TCP&lt;br /&gt;
* MBTC výpis rozšířen&lt;br /&gt;
* SDS-C: drobná úspora heap (více dostupného místa)&lt;br /&gt;
* SDS-C: dns resolv drobný fix&lt;br /&gt;
* SDS-C: http_get a http_post důležitý fix&lt;br /&gt;
* SDS-C: nová funkce http_close&lt;br /&gt;
* SDS-C: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
* vylepšený algoritmus S0, rozšířené možnosti nastavení detektoru S0 (nastavení přidáno ve webovém rozhraní) &lt;br /&gt;
&lt;br /&gt;
== 10.1.2021 ==&lt;br /&gt;
* web: ruční přepnutí CBY pro relé (tzn. &amp;quot;kdo ovládá relé&amp;quot;), na &amp;quot;SDS-C&amp;quot;, dané relé nevypne (off) ale ponechá jeho stávající stav (on, off) &lt;br /&gt;
&lt;br /&gt;
== 5.1.2021 ==&lt;br /&gt;
* SDS-C: oprava textcmp()&lt;br /&gt;
* bezpečnostní oprava&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení &lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* SDS-C: oprava http_get/post: správná vyplnění výsledů i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
* web: oprava tempX.htm&lt;br /&gt;
* oprava ovládání PDx (při změně z webu se nesáhne na ostatní bity nastavené např. ze SDS-C) &lt;br /&gt;
&lt;br /&gt;
== 20.9.2020 ==&lt;br /&gt;
* zvýšení odolnosti na výpadky komunkace (crc chyby) na OneWire sběrnici &lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* drobné opravy a optimalizace&lt;br /&gt;
* IO6-ST: oprava detekce eth &lt;br /&gt;
&lt;br /&gt;
== 18.7.2020 ==&lt;br /&gt;
* SDS-C: SMTP klient správně zvládne i servery které (chybně) nereagují potvrzením na předání těla emailu&lt;br /&gt;
* SDS-C: http klient upraven (zvýšena odolnost na výpadky spojení se serverem, upraveny timeouty) &lt;br /&gt;
&lt;br /&gt;
== 27.6.2020 (jen MICRO-ST) ==&lt;br /&gt;
* oprava možného okrajového problému s nečitelnými AD vstupy &lt;br /&gt;
&lt;br /&gt;
== 26.6.2020 ==&lt;br /&gt;
* různé drobky/opravy dle hlášení uživatelů a testů&lt;br /&gt;
* plně otestovaný MODBUS klient a MQTT klient&lt;br /&gt;
* audit log &lt;br /&gt;
&lt;br /&gt;
== 20.6.2020 ==&lt;br /&gt;
* SDS-C verze 09: přidáno http_post()&lt;br /&gt;
* MODBUS-TCP klient&lt;br /&gt;
* doladění MQTT klienta &lt;br /&gt;
&lt;br /&gt;
== 14.6.2020 ==&lt;br /&gt;
* SDS-C verze 09&lt;br /&gt;
* MQTT klient&lt;br /&gt;
* podpora pro modul SDS-1W-T-RH (rovnice pro HIH-5031)&lt;br /&gt;
* různé opravy (podle ostatních SDS) &lt;br /&gt;
&lt;br /&gt;
== 15.11.2019 ==&lt;br /&gt;
* oprava přehozených AD3 a AD4 &lt;br /&gt;
&lt;br /&gt;
== 14.11.2019 ==&lt;br /&gt;
* první vydání FW pro SDS MICRO ST&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MICRO:_LM:_firmware_changelog&amp;diff=973</id>
		<title>SDS MICRO: LM: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_MICRO:_LM:_firmware_changelog&amp;diff=973"/>
		<updated>2025-11-15T14:23:05Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-MICRO LM / SDS-IO6 LM ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS MICRO LM (všechny jeho varianty) a SDS IO6 LM.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15.11.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* SDS-C: přidány indexy 303 a 304 a 305&lt;br /&gt;
* SDS-C: přidán indexy 2198&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* opravena chyba při výpisu teplot na webu (jinde to bylo OK), kdy v rozmezí -0.99 degC až 0.00 degC chyběl znak mínus&lt;br /&gt;
* obsluha času: možnost zápisu do sys[4], sys[39]&lt;br /&gt;
* IO6: doplněny další možné vstupní typy do funkcí itoa/itoh (MICRO už to mělo)&lt;br /&gt;
* IO6: možnost zakázat NTP (MICRO už to mělo)&lt;br /&gt;
&lt;br /&gt;
== 28.6.2021 ==&lt;br /&gt;
* IO6: web: oprava oneshotreset&lt;br /&gt;
* IO6: web: přepnutí relé (CBY) na SDS-C ponechá stav relé (zap/vyp) (předtím to natvrdo dalo vyp, což nebylo správně)&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* SDS-C: oprava chování wait() v režimu sys[63]=128 (teď už čeká po správnou dobu, ne po kratší)&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* SDS-C: dns resolv drobný fix&lt;br /&gt;
* SDS-C: http_get a http_post drobný fix&lt;br /&gt;
* SDS-C: nová funkce http_close&lt;br /&gt;
* SDS-C: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
&lt;br /&gt;
== 5.1.2021 ==&lt;br /&gt;
* SDS-C: oprava textcmp()&lt;br /&gt;
* bezpečnostní oprava&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení &lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* SDS-C: oprava http_get/post: správná vyplnění výsledů i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* SNMP fix - správná hodnota ve .5.13 až .5.16&lt;br /&gt;
* drobné opravy a optimalizace&lt;br /&gt;
&lt;br /&gt;
== 18.7.2020 ==&lt;br /&gt;
* SDS-C: SMTP klient správně zvládne i servery které (chybně) nereagují potvrzením na předání těla emailu&lt;br /&gt;
* SDS-C: http klient upraven (zvýšena odolnost na výpadky spojení se serverem, upraveny timeouty)&lt;br /&gt;
&lt;br /&gt;
== 27.6.2020 (jen MICRO) ==&lt;br /&gt;
* oprava nestartování předchozí verze FW na některých specifických typech HW varianty SDS-MICRO-x&lt;br /&gt;
&lt;br /&gt;
== 26.6.2020 ==&lt;br /&gt;
* SDS-C 09: http_post()&lt;br /&gt;
* MQTT klient&lt;br /&gt;
* různé drobky/opravy dle hlášení uživatelů a testů&lt;br /&gt;
&lt;br /&gt;
== 11.5.2020 ==&lt;br /&gt;
* oprava Content-Length pro CSS soubor (problém s Chrome)&lt;br /&gt;
* oprava chování při odpojeném SDS-1W-T-RH&lt;br /&gt;
&lt;br /&gt;
== 20.4.2020 ==&lt;br /&gt;
* podpora pro modul SDS-1W-T-RH (rovnice pro HIH-5031)&lt;br /&gt;
&lt;br /&gt;
== 15.4.2020 ==&lt;br /&gt;
* implementován SDS Audit Log&lt;br /&gt;
* zvýšená ochrana proti brute-force hledání vstupního hesla&lt;br /&gt;
&lt;br /&gt;
== 14.11.2019 ==&lt;br /&gt;
* drobný bugfix pro S0 (způsob zobrazování aktuálního výkonu)&lt;br /&gt;
* relé lze z webového rozhraní aktivovat i v režimu OneShot&lt;br /&gt;
* SDS-C: emailový klient odesílá i platný datum v hlavičce emailu (je-li v SDS k dispozici platný čas) &lt;br /&gt;
&lt;br /&gt;
== 17.1.2019 ==&lt;br /&gt;
* bugfix SDS-C watchdogu&lt;br /&gt;
&lt;br /&gt;
== 12.1.2019 ==&lt;br /&gt;
* optimalizace webového serveru (množství přenášenyćh dat sníženo až o polovinu, bez změny funkce) - ocení se to zejména při přenosu po úzkých linkách (např. gprs, modemy) &lt;br /&gt;
&lt;br /&gt;
== 4.1.2019 ==&lt;br /&gt;
* překlopena beta do oficiálního vydání&lt;br /&gt;
* SDS-C: verze 08 (pole share[], nové položky v sys[], nové sds-c funkce)&lt;br /&gt;
* watchdog sds-c programu&lt;br /&gt;
&lt;br /&gt;
== 1.7.2018 ==&lt;br /&gt;
* SDS-C: přidán sys 183 poskytující datum vydání FW který je právě nahrán v SDS&lt;br /&gt;
&lt;br /&gt;
== 30.3.2018 ==&lt;br /&gt;
* oprava funkce zápisu prázdného řetězce do názvu 1-Wire teploměru (&amp;quot;smazání názvu&amp;quot; uživatelem) &lt;br /&gt;
* M2M: hodnota okamžitého výkonu pro S0 vstupy je vždy číslo+jednotka, zatímco text 'čekám...' je už jen pouze na s0.htm&lt;br /&gt;
* SNMP: sdsS0translatedUnitT0,1 je poskytováno jako hodnota od odečtu (ne od úplného začátku měření, jak to bylo předtím)&lt;br /&gt;
* drobná oprava při změně nastavení S0, teď se to ihned provede (v okrajových případech bylo někdy potřeba pro načtení změn SDS restartovat, teď už ne).&lt;br /&gt;
&lt;br /&gt;
== 12.3.2018 ==&lt;br /&gt;
* oprava měření na S0 vstupech (některé vstupy se starším FW nemusely být, v určitých okrajových situacích, plně funkční)&lt;br /&gt;
&lt;br /&gt;
== 8.3.2018 ==&lt;br /&gt;
* oprava echo.htm - zobrazuje se&lt;br /&gt;
* oprava echo.htm - správně wrapuje obsah, a nejsou tam nadbytečné 0x00&lt;br /&gt;
* vhodnější řešení rexmitu částí webových stránek a dynamických dat (ocení to zejména uživatelé s mobilním připojením pro SDS)&lt;br /&gt;
&lt;br /&gt;
== 2.3.2018 ==&lt;br /&gt;
* aktulizace a oprava ve výpočtu &amp;quot;aktuálního výkonu&amp;quot; pro okrajové situace (např. krajní hodnoty impulsní konstanty)&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
* možnost automického přepínání &amp;quot;letní/zimní&amp;quot; čas (CEST/CET time) byla při &amp;quot;změně času&amp;quot; ověřena a je funkční jak má být&lt;br /&gt;
* správný zápis pouze do T0 pro všechny S0 vstupy, které nemají aktivované tarifní rozdělení (bez ohledu na stav tarifního vstupu)&lt;br /&gt;
* zámek 1-W pozice se ukládá do pevné paměti (při stisku tlačítka na webovém rozhraní)&lt;br /&gt;
* vylepšení v oblasti VCP (telnet pro sériovou linku) - spolehlivější&lt;br /&gt;
* zpřesněny prvky ochrany S0 stránek heslem (SDS lépe volí kdy a jak blokovat přístup na jednotlivé eX a S0 stránky)&lt;br /&gt;
* UserWEB projekt má opravenu chybu, kdy nebylo možno použít delší Name Chain tabulku (tedy lze už vložit mnohem více souborů)&lt;br /&gt;
&lt;br /&gt;
== 23.10.2017 ==&lt;br /&gt;
* hlavní nová funkce: přidána volitelná funkce (checkbox ve webovém rozhraní) pro plně automatickou volbu Letního Času (SELČ - aplikovatelné napříč Evropou)&lt;br /&gt;
* další podstatná úprava: doplnění dalších testů na timeout při OSI7 funkcích (např. http_get) - tzn. test na více místech, který má zabránít zablokování funkce (1029) když selže spojení na server (vyhlásí novou chybu 1030 a odblokuje se).&lt;br /&gt;
* přidány SNMP položky (OID) pro text &amp;quot;ADC jednotka&amp;quot; (pro každý AD vstup).&lt;br /&gt;
* drobné bugfixy a zvýšení spolehlivosti, podle průběžných hlášení uživatelů (např. mírně zvětšeny RX a TX vyrovnávací paměti pro COM1 sériový port, atd.).&lt;br /&gt;
* SDS-C: přidán sys[4], sys[11], sys[38], sys[39]&lt;br /&gt;
* SDS-C: sys[4] = local-time&lt;br /&gt;
* SDS-C: sys[11] = vždy &amp;quot;správné&amp;quot; číslo dne v týdnu&lt;br /&gt;
* SDS-C: sys[38] = utc-time&lt;br /&gt;
* SDS-C: sys[39] = stav automatiky přepínání CEST/CET času&lt;br /&gt;
&lt;br /&gt;
== 10.8.2017 ==&lt;br /&gt;
* SDS-C: zvýšena verze na hodnotu 07 (funguje i pro výrobky s EEPROM tak pro výrobky s NVM-DF)&lt;br /&gt;
* SDS-C: přidány nové sys[] položky (indexy 1792 až 2047)&lt;br /&gt;
* SDS-C: optimalizovaná cache pro velké programy&lt;br /&gt;
* SDS-C: maximální počet proměnných zvýšen na 144&lt;br /&gt;
* SDS-C: maximální počet procesů (procedur) zvýšen na 96&lt;br /&gt;
* SDS-C: hloubka zásobníku (stacku) zvýšena na 24&lt;br /&gt;
* vydán nový odpovídající SDSC.exe&lt;br /&gt;
&lt;br /&gt;
== 3.8.2017 ==&lt;br /&gt;
* oprava chyby kdy se po každém spuštění systému mohla ztratit část S0 konfigurace (nastavení tarifního vstupu)&lt;br /&gt;
&lt;br /&gt;
== 18.4.2017 ==&lt;br /&gt;
* (nová funkčnost) použití UserWEB Projektu&lt;br /&gt;
* oprava v echo() pro zápis do sériové linky (uart)&lt;br /&gt;
* drobné ale důležité fixy v html stránkách (texty, vzhled)&lt;br /&gt;
* nové NTP dotazy lze aktivovat i z SDS-C programu (viz aktualizovaný seznam sys)&lt;br /&gt;
&lt;br /&gt;
== 24.11.2016 ==&lt;br /&gt;
* opraven chybně zpracovaný vstup při zadávání nastavení parametrů S0 vstupu (hodnota &amp;quot;minimální délka impulsu&amp;quot; byla špatně zpracována a uložena)&lt;br /&gt;
&lt;br /&gt;
== 28.3.2016 ==&lt;br /&gt;
* impulse counter lze z webu zadat do plných 32 bitů, původně jen 31 bitů&lt;br /&gt;
* další drobné opravy&lt;br /&gt;
&lt;br /&gt;
== 26.3.2016 ==&lt;br /&gt;
* oprava chybného zpracování RFC2217 příkazu pro změnu BaudRate (zpracoval se jen poslední byte místo celého dwordu, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 23.2.2016 ==&lt;br /&gt;
* oprava nefunkčního zápisu pomocí SNMP (několik předchozích verzí, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 5.2.2016 ==&lt;br /&gt;
* oprava funkce RSTD - rozšíření funkce RSTD: krátký zkrat (approx 1 sec) po zapnutí spustí BL (zařízení čeká na nový firmware), zatímco dlouhý zkrat (déle než 3 sec) spustí aplikaci a současně vymaže nastavení (set to Factory Defaults)&lt;br /&gt;
* možnost vyhledávat všechny zařízení SDS na subnetu pomocí rozšířené funkce (Find a SDS) v EXE aplikaci (např. když ztratíte IP adresu do webového rozhraní a potřebujete se na SDS připojit)&lt;br /&gt;
&lt;br /&gt;
== 15.11.2015 ==&lt;br /&gt;
* důležité opravy&lt;br /&gt;
&lt;br /&gt;
== 3.7.2015 ==&lt;br /&gt;
* vylepšený DHCP client&lt;br /&gt;
* řada oprav podle průběžného testování&lt;br /&gt;
&lt;br /&gt;
== 2.4.2015 ==&lt;br /&gt;
* veškeré opravy od posledního vydání (viz průběh BETA testů)&lt;br /&gt;
* významně zvýšena spolehlivost a stabilita při síťové zátěži (Eth. komunikace)&lt;br /&gt;
* SDS-C: přidáno sys[193]&lt;br /&gt;
* SDS-C: přidáno sys[37]&lt;br /&gt;
* SDS-C: přidáno sys[139]&lt;br /&gt;
* SDS-C: možnost zápisu do sys[4]&lt;br /&gt;
* SNMP TRAP předává plný OID (dosud dával jen OID useknutný za E.ID)&lt;br /&gt;
&lt;br /&gt;
== 9.9.2014 ==&lt;br /&gt;
* opravena chyba pro sys[64]==1 (vnitřním zaokrouhlením to skočilo na nulu)&lt;br /&gt;
&lt;br /&gt;
== 17.8.2014 ==&lt;br /&gt;
* přidána možnost použít get_var[index] pro čtení vnitřních proměnných v SDS-C přes web&lt;br /&gt;
* SNMP: umožňuje zápis do všech položek přes &amp;quot;Counter32&amp;quot; (nová záležitost) a původní &amp;quot;Integer&amp;quot; typ&lt;br /&gt;
* SNMP: přidána možnost zápisu do položek S0-impulse-counter (T0 a T1)&lt;br /&gt;
* RS485: při vysílání je budič aktivní max 1msec (nebo méně) od posledního znaku&lt;br /&gt;
&lt;br /&gt;
== 8.7.2014 ==&lt;br /&gt;
* opravy v oblasti obsluhy sériového rozhraní (RS485)&lt;br /&gt;
* do webové administrace přidána možnost vzájemného přehození pozic dvou 1-Wire záznamů&lt;br /&gt;
* další drobné opravy z průběžných beta testů&lt;br /&gt;
&lt;br /&gt;
== 8.3.2014 ==&lt;br /&gt;
* SDS-C: opraveno chyba omezující možný rozsah sys[78] (bylo omezeno na 0xFF, už není - teď správně vezme max velikost pole ram[] nebo text[])&lt;br /&gt;
&lt;br /&gt;
== 1.3.2014 ==&lt;br /&gt;
* SDS-C: nová funkce serial_write()&lt;br /&gt;
* SDS-C: nový timeout pro smtp_send() - zamezí specifickému možnému zaseknutí programu, když SMTP server přestane odpovídat uprostřed transkace po více než 50sec&lt;br /&gt;
* SDS-C: opravena funkce snmp_send_trap() - horní část seznamu trapů byla předtím chybně neodeslatená (teď už je vše OK)&lt;br /&gt;
* vylepšení odolnosti při výpadku a při obnovení připojení k Ethernetu&lt;br /&gt;
* různé drobné důležité opravy (viz beta testy)&lt;br /&gt;
&lt;br /&gt;
== 23.1.2014 ==&lt;br /&gt;
* překlopená beta-verze (po ukončené ověřovací sérii testů)&lt;br /&gt;
* SDS-C: úpravy (spolehlivost) v http_get(), dns_resolve()&lt;br /&gt;
* rozšířena 1-W funkcionality (další chipy)&lt;br /&gt;
* možnost &amp;quot;zrušit odečet&amp;quot; tlačítkem ve webovém rozhraní&lt;br /&gt;
* možnost nastavit minimální akceptovanou délku S0 impulsu pro každý vstup samostatně&lt;br /&gt;
* maximální velikost user.htm je zvětšena (teď lze vyplnit celou DF)&lt;br /&gt;
&lt;br /&gt;
== 30.11.2013 ==&lt;br /&gt;
* celá řada drobných oprav (nalezené v rámci testování od poslední verze)&lt;br /&gt;
* S0.htm: všechny hodnoty zobrazují údaje od posledního odpočtu (chybělo pro T0/T1 kWh)&lt;br /&gt;
* web: /get_dfi[x]&lt;br /&gt;
* SDS-C: čtení a zápis celé stránky z/do paměti DataFlash&lt;br /&gt;
&lt;br /&gt;
== 3.10.2013 ==&lt;br /&gt;
* celá řada drobných oprav&lt;br /&gt;
* login html stránka upravena (w3c valid)&lt;br /&gt;
* možnost nastavit MTD pro S0 měření&lt;br /&gt;
* nový SDSC.exe program&lt;br /&gt;
&lt;br /&gt;
== 16.3.2013 ==&lt;br /&gt;
* zápis výpadku a znovu-připojení Ethernetu do logu historie&lt;br /&gt;
* při odpojení a následném znovu-připojení Ethernetu dojde od teď záměrně ke smazání celé ARP tabulky, takže všechny MAC-IP páry jsou vyžádány znovu (pro případ že se např. vyměnil router atd.)&lt;br /&gt;
* SDS-C: get_txt[xxx] (vypíše pole text od indexu xxx až do znaku 0x00 na některém z následujících indexů v tomto poli)&lt;br /&gt;
* get_sys[xxx] vrací i text pro textové položky (vyzkoušejte všechny sys[] které jsou textové)&lt;br /&gt;
* SDS-C: přidáno sys[900] až sys[931] (text ROM CODE pro 1-W čidla)&lt;br /&gt;
* upraveno zpracování ARP tabulky (více bezpečné pro dlouhodobý provoz)&lt;br /&gt;
* možnost řízení tarifního signálu pro S0 prostřednictvím SDS-C programu&lt;br /&gt;
* funkce &amp;quot;odečet&amp;quot; pro S0 (viz nastavení S0 vstupů ve webové administraci)&lt;br /&gt;
* SDS-C: funkce smtp_send() akceptuje text[] nejen pro obsah zprávy, ale i pro adresu příjemce a subject&lt;br /&gt;
* SDS-C: funkce http_get() akceptuje text[] nejen pro obsah zprávy, ale i pro nastavení HTTP HOST parametru&lt;br /&gt;
&lt;br /&gt;
== 4.2.2013 ==&lt;br /&gt;
* při zobrazení echo.htm, když je konzole plná textu, nedojde k resetu zařízení&lt;br /&gt;
* opraveno časování pro 1-Wire sběrnici (vráceno na původní stav před úpravou v 20.12), uptime počítá také správně&lt;br /&gt;
* SDS-C: přidáno sys[45]&lt;br /&gt;
* SDS-C: přidáno sys[46]&lt;br /&gt;
* SDS-C: přidáno sys[98]&lt;br /&gt;
* SDS-C: echoinline() funguje správně&lt;br /&gt;
&lt;br /&gt;
== 20.12.2012 ==&lt;br /&gt;
Významné vydání, oprava řady drobných chyb průběžně hlášených od uživatelů, celá řada nových funkcí&lt;br /&gt;
* DHCP CLIENT&lt;br /&gt;
* SNMP write&lt;br /&gt;
* rychlejší boot loader&lt;br /&gt;
* rychlejší webová administrace&lt;br /&gt;
* přesnější udržování aktuálního času v zařízení (dvojnásobná kontrola přesnosti a korekce)&lt;br /&gt;
* přepracované úložiště v pevné paměti - SDS s eeprom ukládá všech 16 názvů pro teploměry&lt;br /&gt;
* možnost změny portu &amp;quot;UDP protokolu&amp;quot; (výchozí port 280)&lt;br /&gt;
* SDS-C: konzole zvětšena o zhruba 400 znaků&lt;br /&gt;
* délky textů pro (názvy) S0 jsou 32 bajtů, což je až 32 znaků (české znaky v UTF-8 berou 2 bajty), nicméně vše se v defaultu už vleze&lt;br /&gt;
* pro každý S0 vstup lze nastavit rozdílnou cenu pro T0 a T1 (stav tarifu)&lt;br /&gt;
* SDS-C: funkce send_udp()&lt;br /&gt;
* SDS-C: přidáno sys[61]&lt;br /&gt;
* SDS-C: přidáno sys[27]&lt;br /&gt;
* SDS-C: funkce echoinline()&lt;br /&gt;
* správné zpracování LOGIC S0 u zařízení SDS MICRO, které tento vstup nemají&lt;br /&gt;
* upraven CSV soubor (vypisuje detaily pro S0)&lt;br /&gt;
* upraven xml.xml a s0.xml (vše funguje jak má i při plném osazení, typicky pro SDS MACRO 8)&lt;br /&gt;
* SDS-C: sprintf dává 0x00 na konec textu (tohle chybělo)&lt;br /&gt;
* SDS-C: http_get() zapisuje 0x00 na &amp;quot;konec&amp;quot; text[], když se do text[] ukládá přijatá odpověď.&lt;br /&gt;
* SDS-C: oprava která má zajistit nevyvolání chyby 1029 pro http_get() funkci &lt;br /&gt;
* rozšířený MIB (položky pro S0 hodnoty)&lt;br /&gt;
* SDS-C: SNMP TRAP (odesílání TRAPů z SDS-C programu)&lt;br /&gt;
* a řada drobných obrav a vylepšení&lt;br /&gt;
&lt;br /&gt;
== 7.5.2012 ==&lt;br /&gt;
* opravena funkčnost PWM výstupu - lze správné nastavit střídu v rozmezí 0 až 100% viz návod na WiKi&lt;br /&gt;
&lt;br /&gt;
== 29.3.2012 ==&lt;br /&gt;
* firmware funguje správně i v historických zařízeních SDS MICRO LIGHT (1) používajících 24C16/24C256&lt;br /&gt;
&lt;br /&gt;
== 27.3.2012 ==&lt;br /&gt;
* spolehlivé načítání prvních osmi uložených pozic teploměrů z pevné paměti po resetu&lt;br /&gt;
* automaticky umístí nadbývající připojené teploměr na pozice 9 až 16&lt;br /&gt;
* zamykání pozic teploměrů funguje správně&lt;br /&gt;
* předělaná SDS-C funkce smtp_send() - má větší pracovní buffer, zvládne náročnější SMTP servery&lt;br /&gt;
&lt;br /&gt;
== 18.3.2012 ==&lt;br /&gt;
* finální podoba SNMP MIB (stáhněte si aktualizovaný MIB soubor)&lt;br /&gt;
&lt;br /&gt;
== 11.3.2012 ==&lt;br /&gt;
* malá změna v SNMP MIB (srovnání MIBů mezi MICRO/MACRO)&lt;br /&gt;
* další drobné opravy nahlášené po testování firmware z 8.3.&lt;br /&gt;
&lt;br /&gt;
== 8.3.2012 ==&lt;br /&gt;
* odstraněno zpoždění v převodníku Ethernet-Serial (Virtual COM port)&lt;br /&gt;
&lt;br /&gt;
== 4.3.2012 ==&lt;br /&gt;
Řada oprav a vylepšení, pocházející z BETA testování (viz forum)&lt;br /&gt;
* správný výpočet data od 29.2.2012&lt;br /&gt;
* možnost uzamknout pozice 1-Wire zařízení (teploměry)&lt;br /&gt;
* rozšířené SNMP&lt;br /&gt;
* SDS-C verze č. 06&lt;br /&gt;
* pole text[] a funkce atoi(), sprintf()&lt;br /&gt;
* uživatelská stránka může být i jako přímo indexová stránka webového rozhraní&lt;br /&gt;
* všechny fyzické vstupy a výstupy jsou počítány od jedničky&lt;br /&gt;
* další drobné úpravy a opravy, viz soupis u BETA testů&lt;br /&gt;
&lt;br /&gt;
== 17.1.2012 ==&lt;br /&gt;
* oprava indexů v &amp;quot;temp&amp;quot; tagech v xml.xml a temp.xml&lt;br /&gt;
&lt;br /&gt;
== 16.1.2012 ==&lt;br /&gt;
* opravy v přenosu hodnot teplot jednotlivými protokoly (v případě teploty menší než 0 stupňů Celsia byl špatně umístěn znak minus)&lt;br /&gt;
&lt;br /&gt;
== 15.1.2011 ==&lt;br /&gt;
* opravena chyba s user-dataflash (oprava má význam pouze pro výrobky osazené DF, nikoliv EE, tam chyba nebyla)&lt;br /&gt;
&lt;br /&gt;
== 21.12.2011 ==&lt;br /&gt;
* zapracovány všechny nové funkce, testované v rámci BETA testování nového firmware (probíhalo od 27.10.)&lt;br /&gt;
&lt;br /&gt;
== 27.10.2011 ==&lt;br /&gt;
* do webového rozhraní přidáno tlačítko: možnost nastavení střídy PWM &amp;quot;na zkoušku&amp;quot; (bez uložení do pevné paměti)&lt;br /&gt;
* web: funkce /get_sys a /get_ram může vrátit řadu proměnných za sebou&lt;br /&gt;
&lt;br /&gt;
== 2.10.2011 ==&lt;br /&gt;
* přidán sys[26]&lt;br /&gt;
* přidán sys[63]&lt;br /&gt;
* přidán sys[78]&lt;br /&gt;
* doplněn UDP protokol o čtyři nové funkce (čtení / zápis polí sys[] a ram[])&lt;br /&gt;
&lt;br /&gt;
== 31.7.2011 ==&lt;br /&gt;
* opraven problém s UDP protokolem - příkaz '''write''' (už funguje vždy ok)&lt;br /&gt;
* nový SDSC.exe program - doplňuje správnou HTML serverovou hlavičku pro uživatelskou stránku&lt;br /&gt;
&lt;br /&gt;
== 29.7.2011 ==&lt;br /&gt;
* možnost zápis z SDS-C programu do systémových proměnných sys[559] až sys[561]&lt;br /&gt;
* nová funkce pro UDP protokol - funkce '''write''' umožňuje hromadný zápis do sys[] systémových proměnných&lt;br /&gt;
&lt;br /&gt;
== 25.6.2011 ==&lt;br /&gt;
* možnost změnit číslo TCP portu webového serveru webového rozhraní výrobku (změna stejným způsobem jako je změna IP nebo MAC adresy...)&lt;br /&gt;
&lt;br /&gt;
== 16.6.2011 ==&lt;br /&gt;
* verze SDS-C č. 04&lt;br /&gt;
* SDS-C: plně funkční funkce ping()&lt;br /&gt;
* rozšíření maximální velikosti SDS-C programu ve všech verzích SDS MICRO (light, light2, DIN)&lt;br /&gt;
** DATAFLASH maximální velikost programu je 65472 bajtů&lt;br /&gt;
** 24C16 maximální velikost programu je 900 bajtů&lt;br /&gt;
** 24C256 maximální velikost programu je 31416 bajtů&lt;br /&gt;
&lt;br /&gt;
* web: nastavení uživatelské proměnné pomocí volání sdscep pracuje s doplňkovými parametry (např. vrací hodnotu)&lt;br /&gt;
* upravena obsluha eeprom paměti (jiný I2C driver) - tzn. větší spolehlivost a větší rychlost&lt;br /&gt;
* sys[25] po každém zavolání čte hodnotu z PHY HW a vrací skutečný stav v daný okamžik&lt;br /&gt;
* čtení ze sériové linky je teď dostupné pro program v SDS-C (viz sys[48] a sys[49])&lt;br /&gt;
* změna řízení PWM výstupu, lze teď plynule regulovat poměr log0 a log1 v celém rozsahu&lt;br /&gt;
* všechny stránky předělány na UTF-8, vstupy textů berou i České znaky atd.&lt;br /&gt;
* výpis MAC adresy pro SDS-C program (viz sys[31] až sys[36])&lt;br /&gt;
* SDS-C: http_get může uložit získaná data webové stranky do pole ram[]&lt;br /&gt;
* zcela změněn ARP algoritmus, měl by teď bez problémů pracovat i na větších podsítích než je /24&lt;br /&gt;
* web: informační stránka /arp.htm&lt;br /&gt;
* SDS-C: zvětšena velikost pole ram[] na 512 záznamů&lt;br /&gt;
* web: výpis hodnot sys[] a ram[] pomocí dynamicky generované webové stránky (např. /get_ram[123] )&lt;br /&gt;
* web: čtení výpisu sys[] a ram[] lze zakázat v nastavení (SDS-C parametr)&lt;br /&gt;
* SDS-C: možnost zápisu do S0 impulsních počítadel (nulování, úpravy hodnot, atd.)&lt;br /&gt;
* pokud je konkrétní relé ve webovém rozhraní nastaveno na něco jiného, než na &amp;quot;ovládáno z SDS-C&amp;quot;, tak jeho stav SDS-C program nezmění&lt;br /&gt;
&lt;br /&gt;
== 21.5.2011 ==&lt;br /&gt;
* opravy v českém a anglickém překladu webového rozhraní&lt;br /&gt;
&lt;br /&gt;
== 14.5.2011 ==&lt;br /&gt;
* vydána pouze nová EXE aplikace pro nahrávání SDS-C&lt;br /&gt;
* od této verze umožňuje použít složité kostrukce s IF, např.: if (test) { kus programu; } else { kus programu; };&lt;br /&gt;
&lt;br /&gt;
== 13.5.2011 ==&lt;br /&gt;
* od této verze jsou k dispozici dvě jazykové varianty - plně Česká varianta a plně Anglická varianta&lt;br /&gt;
* varianty se liší pouze texty ve webovém rozhraní, jejich funkčnost je ale zcela shodná (bez rozdílů)&lt;br /&gt;
&lt;br /&gt;
== 20.3.2011 ==&lt;br /&gt;
* funkční nahrávání uživatelské webové stránky&lt;br /&gt;
&lt;br /&gt;
== 3.3.2011 ==&lt;br /&gt;
* pouze nový simulační WinEXE program pro SDS-C&lt;br /&gt;
** funkční simulátor LCD (SDS MACRO)&lt;br /&gt;
** vylepšení v hlášení chyb při kontrole programu SDS-C&lt;br /&gt;
&lt;br /&gt;
== 27.2.2011 ==&lt;br /&gt;
* změněn výpis UpTime v Actual Status webové stránce na dny/hod/min/sec/msec&lt;br /&gt;
* doplněna generovaná webová stránka: echo.htm (obsahuje pouze výpis konzole SDS-C, vhodné pro embedding do jiného webu)&lt;br /&gt;
* nový XML soubor - usys.xml - výpis vzdálených proměnných SDS-C&lt;br /&gt;
* možnost volby nezasílání http dat pro volání sdscep (umožnujě tzv. tichou aktualizaci hodnoty sys)&lt;br /&gt;
* do SNMP doplněna hodnota teploty SoC (vyčtená z HW, bez převodu na °C)&lt;br /&gt;
* příprava pro nahrání uživatelské webové stránky (plná podpora bude v následující verzi fw)&lt;br /&gt;
* nová verze SDS-C, nové možnosti, nový simulátor&lt;br /&gt;
** SDS-C: možnost použít #define v programu&lt;br /&gt;
** SDS-C: možnost použít uživatelské proměnné jako indexy do pole (sys, ram)&lt;br /&gt;
** SDS-C: k dispozici je univerzální pole ram[]&lt;br /&gt;
** SDS-C: nová WinEXE aplikace, řada drobností...&lt;br /&gt;
&lt;br /&gt;
== 30.1.2011 ==&lt;br /&gt;
* úpravy specifické pro verzi LIGHT s EEPROM (restart zařízení)&lt;br /&gt;
&lt;br /&gt;
== 29.1.2011 ==&lt;br /&gt;
* v SNMP doplněn výpis celé hodnoty (x100) pro 1-W teploměry 2 až 16&lt;br /&gt;
&lt;br /&gt;
== 28.1.2011 ==&lt;br /&gt;
* dvě nové funkce v SDS-C, pro zápis do sériového portu &lt;br /&gt;
* zpřesněný interní čítač reálného času&lt;br /&gt;
&lt;br /&gt;
== 26.1.2011 ==&lt;br /&gt;
* změněna minimální akceptovaná délka S0 impulsu, bylo původně 16 msec jako minimum, od této verze je to 5 msec (z důvodů připojení speciálních nepřímých elektroměrů).&lt;br /&gt;
* doplňky v simulátoru SDS-C, zejména ohledně času, korekce optovstupů, atd.&lt;br /&gt;
&lt;br /&gt;
== 9.1.2011 ==&lt;br /&gt;
* nová položka v SNMP - pro každé teplotní čidlo je poskytována plná hodnota násobena 100 (např. 12.35°C je předáno jako 1235)&lt;br /&gt;
* pouze SDS MICRO LIGHT: v SDS-C doplněny čtyři sys[], umožňující přímé ovládání vývodů A1, B1, M4, M5 (CMOS 3V3 logika, pájecí plošky)&lt;br /&gt;
&lt;br /&gt;
== 7.12.2010 ==&lt;br /&gt;
* upraven způsob výpočtu a prezentace okamžitého výkonu (S0), zejména v případě přerušení dodávky S0 impulsů&lt;br /&gt;
&lt;br /&gt;
== 1.12.2010 ==&lt;br /&gt;
* firmware podporuje i jiné osazené dataflash (menší velikosti) paměti&lt;br /&gt;
&lt;br /&gt;
== 29.11.2010 ==&lt;br /&gt;
* oprava v chování SDS-C, kdy pokud byl program právě ve funkci wait(), tzn. čekal, a v tu chvíli byl nahrán nový program, tak nebylo čekání zrušeno, a nový program byl spuštěn až po dokončení čekání&lt;br /&gt;
* úpravy odkazů na www.merenienergie.cz, portal.merenienergie.cz&lt;br /&gt;
&lt;br /&gt;
== 20.10.2010 ==&lt;br /&gt;
* upraven UDP protokol - doplněno ROMCODE pro teplotní čidla&lt;br /&gt;
* upraveno zadávání uživatelských sys[] proměnných z webu (už lze zadávat i záporné čísla)&lt;br /&gt;
* opravena ztráta nastavení GMT offset po resetu zařízení&lt;br /&gt;
&lt;br /&gt;
== 8.10.2010 ==&lt;br /&gt;
* opraven SNMP který měl od verze 10.9. problémy&lt;br /&gt;
* tento a novější firmware je vhodný pro spolupráci se službou portal.merenienergie.cz&lt;br /&gt;
&lt;br /&gt;
== 6.10.2010 ==&lt;br /&gt;
* oprava výpisu přepočtené spotřeby (kW) - doplněno vždy na tři desetinná místa&lt;br /&gt;
* funkční nulování převodu peněz&lt;br /&gt;
* SMTP konfigurace se správně načte po zapnutí zařízení&lt;br /&gt;
&lt;br /&gt;
== 26.9.2010 ==&lt;br /&gt;
* SDS-C: stránka &amp;quot;control&amp;quot;, uživatelsky editovatelné proměnné&lt;br /&gt;
* SDS-C: do sys[] doplněna informace pro S0 (čas od posledního impulsu)&lt;br /&gt;
* drobné doplňky do XML, příprava pro SDSMON.exe&lt;br /&gt;
* UDP protokol, popis viz wiki&lt;br /&gt;
&lt;br /&gt;
== 17.9.2010 ==&lt;br /&gt;
* oprava v SDS-C: funkce http_get a smtp_send, od teď umožnují vkládat proměnné až na pozici do maximální délky zprávy (1024 znaků)&lt;br /&gt;
* výstup /temp.txt je doplněn na dvojici: romcode : teplota&lt;br /&gt;
* výstup /temp.xml je doplněn o tagy s romcode&lt;br /&gt;
&lt;br /&gt;
== 15.9.2010 ==&lt;br /&gt;
* doplněn výstup teplot ze všech čidel, do textové formy, /temp.txt&lt;br /&gt;
* odečet teplotních web-snippet tempX.htm akceptuje hex znaky (tj. 0-9, a-f)&lt;br /&gt;
&lt;br /&gt;
== 14.9.2010 ==&lt;br /&gt;
* opraven výpis teploty v csv.csv&lt;br /&gt;
* nový xml soubor: temp.xml - pouze s údaji o teplotě&lt;br /&gt;
&lt;br /&gt;
== 10.9.2010 ==&lt;br /&gt;
* opraveno zobrazení kWh na webových stránkách (špatný číselný text u vyšších hodnot kWh)&lt;br /&gt;
&lt;br /&gt;
== 8.9.2010 ==&lt;br /&gt;
* ve firmware byl zvýšen maximální počet obsluhovaných teplotních sensorů z 8 na 16&lt;br /&gt;
&lt;br /&gt;
== 14.8.2010 ==&lt;br /&gt;
* opraveno SDS-C - správnost předávání konstantních číselných parametrů funkcím&lt;br /&gt;
* doplněna nová funkce do SDS-C - funkce http_get&lt;br /&gt;
* nový Win32 program pro práci s SDS-C (doplněna funkčnost vzdálených labelů)&lt;br /&gt;
* zobrazení názvů tarifů na celkové stránce pro S0 (předtím bylo jen na detailních stránkách)&lt;br /&gt;
&lt;br /&gt;
== 9.8.2010 ==&lt;br /&gt;
* firmware funguje i pro HW rev2,3 (SDS MICRO light), předchozí verze 3.8. nenašla externí flash paměť&lt;br /&gt;
&lt;br /&gt;
== 3.8.2010 ==&lt;br /&gt;
* opravena chyba kdy nedošlo k přečtení konfigurace pro S0 vstupy z pevné paměti, už je to ok&lt;br /&gt;
* upraven výpočet okamžitého výkonu, aby při nepřipojeném měřiči ukazoval nulu&lt;br /&gt;
&lt;br /&gt;
== 2.8.2010 ==&lt;br /&gt;
* zcela přepracováno webové rozhraní pro měřiče energie&lt;br /&gt;
* rozšířené snmp/xml/csv pro měřiče energie&lt;br /&gt;
* možnost připojít více samostatnyćh měřičů energie najednou&lt;br /&gt;
* vstup pro tarifní rozlišení (denní/noční proud, výroba/dodávka, atd.)&lt;br /&gt;
* vylepšený Windows&amp;amp;reg; program pro nahrávání firmware&lt;br /&gt;
&lt;br /&gt;
== 26.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* nový firmware pro převodník Ethernet/Serial&lt;br /&gt;
* samostatná stránka ve webovém rozhraní pro zobrazení stavu převodníku Ethernet/Serial&lt;br /&gt;
&lt;br /&gt;
== 23.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* úprava chování pinu RSTD - pokud se zkratuje a zapne se zařízení, je kromě původní funkce (reset konfigurace) spuštěn i bootloader, tzn. bootloader lze odteď pouštět jak z webového rozhraní (původní stav), tak odteď i přes RSTD - toto má výhodu, pokud se nepovede nahrát celý nový firmware, tak lze znovu spustit bootloader a opakovat nahrávání znovu&lt;br /&gt;
* drobná oprava v SMTP klientu&lt;br /&gt;
* byl vydán nový Windows&amp;amp;reg; program pro nahrávání programů v SDS-C&lt;br /&gt;
&lt;br /&gt;
== 18.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* maximální počet znaků v přihlašovacích údajích pro SMTP je rozšířen na 32 znaků&lt;br /&gt;
* drobné opravy ve webovém rozhraní&lt;br /&gt;
&lt;br /&gt;
== 15.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* ošetřena funkčnost SMTP při použití přihlašovacích údajů pro SNMP o maximálním počtu znaků (navíc v budoucnu to bude prodlouženo)&lt;br /&gt;
&lt;br /&gt;
== 10.7.2010 ==&lt;br /&gt;
&lt;br /&gt;
* opravy drobností tak jak byly nahlášeny od uživatelů&lt;br /&gt;
* tři desetinné místa na ose grafu spotřeby energie&lt;br /&gt;
* oprava hodnoty dne u data v grafu spotřeby energie&lt;br /&gt;
* doplňky v http serveru, úprava hlavičky pro CSV&lt;br /&gt;
* přihlašovací stránka se už zobrazí všude a vždy (předtím někdy neprošlo např. nod32)&lt;br /&gt;
* příprava pro centrální sběrný program SDSMON.exe&lt;br /&gt;
&lt;br /&gt;
== 2.6.2010 ==&lt;br /&gt;
&lt;br /&gt;
* oficiální verze SDS-C k dispozici&lt;br /&gt;
* celá řada nových funkcí, především pro SDS-C&lt;br /&gt;
* SMTP - odesílání emailů (z programu SDS-C)&lt;br /&gt;
* výstup dat i ve formě CSV souboru (středníkový oddělovač pro Excel&amp;amp;reg;)&lt;br /&gt;
&lt;br /&gt;
== 17.5.2010 ==&lt;br /&gt;
&lt;br /&gt;
* opraven výpis LOGu pro IP adresy&lt;br /&gt;
* záznam nepovedených přístupů (když to někdo zkouší se špatným heslem)&lt;br /&gt;
* drobnosti v http serveru&lt;br /&gt;
* graf S0 má místo +1kWh jen +0.1kWh&lt;br /&gt;
* oprava detekce EEPROM (aktualizujte FW !)&lt;br /&gt;
&lt;br /&gt;
== 15.5.2010 ==&lt;br /&gt;
&lt;br /&gt;
* změna výchozího NTP serveru (default config)&lt;br /&gt;
* kratší odpočet při změně NTP serveru&lt;br /&gt;
* stránka S0 i z hlavního menu&lt;br /&gt;
&lt;br /&gt;
== 12.5.2010 ==&lt;br /&gt;
&lt;br /&gt;
* drobné úpravy&lt;br /&gt;
* informace o datové paměti (bude důležité pro SDS-C)&lt;br /&gt;
* volba NTP serveru&lt;br /&gt;
&lt;br /&gt;
== 4.5.2010 ==&lt;br /&gt;
&lt;br /&gt;
* řada doplňků pro S0 vstup (přepočty, kreslení grafu, xml)&lt;br /&gt;
&lt;br /&gt;
== 23.4.2010 ==&lt;br /&gt;
&lt;br /&gt;
* počítáni S0 impulsů (opto 3), speciální webové zobrazení a přepočty&lt;br /&gt;
* doplňky v SNMP, doplněný MIB&lt;br /&gt;
* nepřipojené teploměry hlásí teplotu 32767&lt;br /&gt;
* příprava stránky pro řízení relé pomocí teploměrů&lt;br /&gt;
&lt;br /&gt;
== 25.1.2010 ==&lt;br /&gt;
&lt;br /&gt;
* možnost pojmenovat si všechny analogové vstupy&lt;br /&gt;
* doplněno: název analogového vstupu lze přečíst přes SNMP&lt;br /&gt;
* doplněno: název relátka lze přečíst přes SNMP&lt;br /&gt;
&lt;br /&gt;
== 15.1.2010 ==&lt;br /&gt;
&lt;br /&gt;
* opraveno chybějící tlačítko u přihlašovací stránky (šlo pouze stiskem klávesy Enter)&lt;br /&gt;
* doplněno chybějící čtvrté nastavovací tlačítko u ADC konstant&lt;br /&gt;
&lt;br /&gt;
== 11.1.2010 ==&lt;br /&gt;
&lt;br /&gt;
* opraveno (doplňeno) chybějící záporné znaménko u výpisu teploty (web, SNMP)&lt;br /&gt;
&lt;br /&gt;
== 31.10.2009 ==&lt;br /&gt;
&lt;br /&gt;
* navýšení maximálního počtu současně přihlášených uživatelů do webového rozhraní&lt;br /&gt;
&lt;br /&gt;
== 30.10.2009 ==&lt;br /&gt;
&lt;br /&gt;
* zvýšení max počtu 1-Wire&amp;amp;reg; teploměrů na 8 kusů na jedné sběrnici&lt;br /&gt;
* doplněn výstup SNMP o údaje desetinných hodnot pro všechny teploměry&lt;br /&gt;
* doplněno uživatelské nastavení přepočítavacích hodnot pro A/D převod, použité pro zobrazení ve webovém rozhraní a pro xml výstup&lt;br /&gt;
* zobrazení sysLocation také v přehledové stránce (actual status)&lt;br /&gt;
* možnost pojmenovat si všechny teploměry (16 znaků pro každý)&lt;br /&gt;
* možnost pojmenovat si ovládané relé (16 znaků pro každé)&lt;br /&gt;
&lt;br /&gt;
== 29.10.2009 ==&lt;br /&gt;
&lt;br /&gt;
* drobnosti před vydáním 30.10.2009&lt;br /&gt;
&lt;br /&gt;
== 10.10.2009 ==&lt;br /&gt;
&lt;br /&gt;
* NTP klient - synchronizace času a data protokolem NTP&lt;br /&gt;
* nastavení NTP serveru a GMT prostřednictvím &amp;quot;Admin config&amp;quot; webové stránky&lt;br /&gt;
* zobrazení NTP času a data v &amp;quot;actual status&amp;quot; webové stránce&lt;br /&gt;
* zobrazení času a data v &amp;quot;Log&amp;quot; webové stránce u všech položek&lt;br /&gt;
&lt;br /&gt;
== 20.09.2009 ==&lt;br /&gt;
&lt;br /&gt;
* webová stránka &amp;quot;aktuální stav&amp;quot; - upraveno pro správné zobrazování v IE&lt;br /&gt;
* v nadpisu webové stránky (tag title) se zobrazuje název zařízení a navíc celý obsah textu ''sysLocation''&lt;br /&gt;
&lt;br /&gt;
== 07.09.2009 ==&lt;br /&gt;
&lt;br /&gt;
* 1-Wire&amp;amp;reg; měří na 1/16 stupně Celsia, upraveno časování (větší spolehlivost), lze připojit více čidel&lt;br /&gt;
* možnost změny MAC adresy (přímo z webového rozhraní)&lt;br /&gt;
* zobrazení informační (potvrzovací) stránky před změnou IP, MAC&lt;br /&gt;
&lt;br /&gt;
== výchozí firmware ==&lt;br /&gt;
&lt;br /&gt;
* výchozí firmware&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_sysp&amp;diff=972</id>
		<title>SDS-C: sdsc sysp</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_sysp&amp;diff=972"/>
		<updated>2025-11-15T14:22:50Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&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;
 Zařízení Druhé Produktové Řady používají jazyk FULL-C (jiná část této Wiki).&lt;br /&gt;
&lt;br /&gt;
== Definice systémových proměnných SDS-C : pole sys[] ==&lt;br /&gt;
&lt;br /&gt;
Tzv. &amp;quot;systémová proměnná&amp;quot; je prvek v programovacím jazyku SDS-C, který má textový název, a se kterým se dá pracovat - číst hodnotu z proměnné a zapisovat hodnotu do proměnné. Často je čtení a zápis svázáno s fyzickou akcí (např. zápis do konkrétní systémové proměnné změní stav relé).&lt;br /&gt;
&lt;br /&gt;
SDS-C obsahuje celou řadu vyhrazených, předem pevně definovaných systémových proměnných. Tyto proměnné obsahují aktuální online informace a údaje, vzhledem ke stavu zařízení. Dá se jimi také zařízení (resp. periférie) přímo ovládat. Úplný seznam je právě na této stránce.&lt;br /&gt;
&lt;br /&gt;
Proměnné poskytované SDS-C a navázané na HW zařízení, jsou označeny jako '''sys[x]''', kde index '''x''' je číslo do 0 do 1023 (popřípadě až do 2048 ale to jen na určitých typech zařízení).&lt;br /&gt;
&lt;br /&gt;
Tyto proměnné lze číst, popř. do nich zapsat novou hodnotu. To vše můžete provést ve svém SDS-C programu, nebo přes některou z komunikačních funkcí (např. UDP protokolem, nebo přes webové rozhraní).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Legenda k tabulce:''&lt;br /&gt;
&lt;br /&gt;
Proměnná typu '''i''' je 32-bit signed integer (nejvyšší bit je znaménko, a zbývajících 31 bitů je číselná hodnota).&lt;br /&gt;
&lt;br /&gt;
Proměnná typu '''s''' je soubor znaků (string) - tj. '''text''' (řetězec znaků) - a tyto proměnné '''lze použít jen pro čtení'''.&lt;br /&gt;
&lt;br /&gt;
Některé proměnné lze jen číst ('''R'''), do některých lze kromě čtení i zapisovat ('''RW'''). &lt;br /&gt;
&lt;br /&gt;
Údaj '''XX''' v seznamu proměnných udává verzi firmware, kdy byla daná proměnná zavedena.&lt;br /&gt;
'''Význam hodnot:'''&lt;br /&gt;
* '''01''' - první verze, výchozí firmware ze začátku roku 2010&lt;br /&gt;
* '''02''' - druhá verze, bylo vydáno na přelomu roku 2010 a 2011&lt;br /&gt;
* '''03''' - třetí verze, tj. pouze pro firmware od 03.2011 &lt;br /&gt;
* '''04''' - čtvrtá verze, tj. pouze pro firmware od 06.2011 a novější&lt;br /&gt;
* '''05''' - pátá verze, tj. pouze pro firmware od 11.2011 a novější&lt;br /&gt;
* '''06''' - šestá verze, tj. pouze pro firmware od 03.2012 a novější&lt;br /&gt;
* '''07''' - sedmá verze, tj. pouze pro firmware od 07.2017 a novější&lt;br /&gt;
* '''08''' - osmá verze, tj. pouze pro firmware od 12.2018 a novější&lt;br /&gt;
* '''09''' - devátá verze, tj. pouze pro firmware od 06.2020 a novější&lt;br /&gt;
&lt;br /&gt;
Všechny proměnné označené jako rezerva mohou být v budoucích verzích firmware nějak využity. Pokud jsou však pro tuto verzi firmware označeny jako rezerva, pak se nesmí používat (zapisovat do nich, kvůli budoucí kompatibilitě). Při čtení obvykle vrací hodnotu nula, ovšem jakmile budou v novém firmware využity, už budou vracet konkrétní hodnotu.&lt;br /&gt;
&lt;br /&gt;
Pokud máte starší verzi firmware, je možné, že některé později přidané položky nebudou k dispozici. Řešením je udržovat firmware ve vašem zařízení vždy aktuální.&lt;br /&gt;
&lt;br /&gt;
Jazyk SDS-C indexuje všechny pole od čísla 0 (nula) - všechna pole, tj. &amp;quot;sys[]&amp;quot;, &amp;quot;ram[]&amp;quot;, &amp;quot;text[]&amp;quot;, začínají se svým obsahem od indexu nula.&lt;br /&gt;
&lt;br /&gt;
'''Pozor''' však na číslování hardware vstupů a výstupů, ty jsou číslovány dle &amp;quot;elektrikářských&amp;quot; zvyklostí, to znamená že číslování začíná od čísla '''1''' ('''jednička''') - toto ale nemá hlubší vliv na SDS-C.&lt;br /&gt;
&lt;br /&gt;
Pokud narazíte na takové zařízení SDS, které má ještě velmi starou verzí webového rozhraní, kde byly ještě některé vstupy číslovány od nuly, aktualizujte si toto zařízení aby používalo nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Důležité upozornění'''&lt;br /&gt;
&lt;br /&gt;
Protože SDS-C ''umí pracovat pouze a jen'' s '''32-bit signed''' integer čísly (tj. 1-bit znaménko a 31-bitů číslo, typ int32_t), tak dochází k (očekávané) konverzi '''32-bit unsigned''' čísel (tj. bez znaménka 32-bitů číslo, typ uint32_t) mezi vnitřními hodnotami v SDS a reprezentací v SDS-C (například když takové unsigned číslo je dotazováno například přes čtení &amp;quot;sys[]&amp;quot; hodnot).&lt;br /&gt;
&lt;br /&gt;
Jinýmy slovy - uvnitř SDS jsou drženy některé hodnoty jako 32-bit unsigned. Ale protože SDS-C pracuje pouze s 32-bit signed čísly, pak při čtení takových čísel zevnitř SDS jsou tyto čísla prezentovány v SDS-C jako 32-bit signed. Bitově se nezmění, jen se &amp;quot;mění&amp;quot; pohled na to, co který bit znamená, viz text dále.&lt;br /&gt;
&lt;br /&gt;
''Příklad:'' &lt;br /&gt;
Hodnota &amp;quot;sys[625]&amp;quot; reprezentuje &amp;quot;uplynulý čas od posledního zachyceného S0 impulsu na daném S0 vstupu&amp;quot;. Tato hodnota je udržována uvnitř SDS a program SDS-C k ní má přístup.&lt;br /&gt;
Tento čas je udán v milisekundách a začína na nule, a s každou milisekundou ze zvýší o jedničku. Protože SDS udržuje toto počítadlo (uvnitř své paměti) jako '''32-bit unsigned''', tak jakmile dojde k dopočítání do 31-bitů (tj. 2147483647) a překlopí se tedy 32. bit (tj. na 2147483648), tak SDS-C při čtení &amp;quot;sys[625]&amp;quot; vrátí zápornou hodnotu (tj. -2147483648). Toto je v pořádku - pokud si vypíšete jednotlivé bity, tak budou stále přesně odpovídat, ale tím že SDS-C interpetuje všechny čísla jako '''32-bit signed''', tak vzorovou hodnotu použije a zobrazí jako zápornou.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  skutečná binární hodnota         | 32-bit signed | 32-bit unsigned&lt;br /&gt;
  (32-bit)                         | SDS-C integer | (internal SDS)&lt;br /&gt;
 ----------------------------------+---------------+-----------------&lt;br /&gt;
  00000000000000000000000000000000 |             0 |               0&lt;br /&gt;
  00000000000000000000000000000001 |             1 |               1&lt;br /&gt;
  00000000000000001111111111111111 |         65535 |           65535&lt;br /&gt;
  01111111111111111111111111111111 |    2147483647 |      2147483647&lt;br /&gt;
  10000000000000000000000000000000 |   -2147483648 |      2147483648&lt;br /&gt;
  10000000000000000000000000000001 |   -2147483647 |      2147483649&lt;br /&gt;
  10000000000000001111111111111111 |   -2147418113 |      2147549183&lt;br /&gt;
  11111111111111111111111111111111 |            -1 |      4294967295&lt;br /&gt;
  11111111111111111111111111111110 |            -2 |      4294967294&lt;br /&gt;
  11111111111111111111111111111101 |            -3 |      4294967293&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, SDS vždy (ať ve svém firmware, tak v SDS-C kódu a proměnných) udržuje hodnoty ve stejném ''binárním'' obsahu. Jen interpretace a další práce s čísly je jiná. SDS samo vnitřně pracuje s '''32-bit unsigned''' hodnotami, a díky tomu na webu a všech M2M stránkách můžete vidět hodnoty v rozsahu od 0 do 4294967295. Zato SDS-C pracuje pouze se '''32-bit signed''' hodnotami, a proto stejné číslo je reprezentováno v rozsahu -2147483648 až 2147483647. Toto je vlastnost daná omezením implementace, zkrátka v SDS-C to nelze jinak udělat (pokud to je problém, což ale není, tak můžete přejít na zařízení s FULL-C které tyto omezení nemá).&lt;br /&gt;
&lt;br /&gt;
To lze snadno ve vašem SDS-C kódu ošetřit, a pokud pouze přenášíte hodnoty z SDS na server (přes HTTP-GET), tak se to dá snadno a ihned zpracovat na serveru &amp;quot;zpět&amp;quot; na '''32-bit unsigned''' hodnotu. Jednoduše na serveru přijmete '''signed''' číslo, a převedete ho například přetypování na '''unsigned''' číslo. Bity v paměti totiž jsou pro oba typy stejné.&lt;br /&gt;
&lt;br /&gt;
V tabulce jsou konkrétní &amp;quot;sys[]&amp;quot; položky, kterých se toto týká, označeny tímto symbolem: '''(!)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Použítí v SDS-C programu'''&lt;br /&gt;
&lt;br /&gt;
Zápis a čtení z/do systémových proměnných má okamžitý přímý vliv na hardware, se kterým jsou konkrétní proměnné svázány.&lt;br /&gt;
&lt;br /&gt;
Příklad zápisu v programu: jaká je teplota na čidle 1 (celé stupně Celsia)? &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 teplota0_ve_stupnich_C = sys[310] / 100;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ne vždy je potřeba provádět převody. Pokud např. chcete porovnat dvě hodnoty z různých teplotních čidel, můžete to udělat přímo (bez dělení 100 jako v předchozím příkladu) - samozřejmě toto platí pouze tehdy, pokud porovnáváte hodnoty ve stejných jednotkách:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (sys[310] &amp;gt; sys[311]) { echo('Prvni cidlo je teplejsi nez druhe.'); };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad zápisu v programu: jak zapnu relé RE1? (musíte vědět &amp;quot;co&amp;quot; &amp;quot;kam&amp;quot; zapsat):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sys[231] = 255; // v tomto okamžiku dojde k ovládnutí relé č. 1 (- viz index 231 dole v seznamu)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Můžete (od 03 verze SDS-C) použít i ''#define'', příklad:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define RELE1 sys[231]&lt;br /&gt;
&lt;br /&gt;
#define TEPLOTA sys[310]&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
 &lt;br /&gt;
RELE1 = 255;&lt;br /&gt;
 &lt;br /&gt;
if (TEPLOTA &amp;gt; 3200) goto x;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole ram[] ==&lt;br /&gt;
&lt;br /&gt;
Pole '''ram[]''' je samostatné nezávislé pole, dostupné pro SDS-C program od verze č. 03 (a výše).&lt;br /&gt;
&lt;br /&gt;
Obsah pole ram[] je uložen samostatně v RAM paměti, a je při resetu zařízení ztracen.&lt;br /&gt;
&lt;br /&gt;
Obsah pole ram[] se nekryje s dalšími proměnnými programu a tak dále (je to zcela samostatné paměťové pole).&lt;br /&gt;
&lt;br /&gt;
Pole ram[] lze indexovat číslem nebo proměnnou. Příkladem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
hodnota = ram[10];&lt;br /&gt;
&lt;br /&gt;
index = 23;&lt;br /&gt;
ram[index] = 15 * 2;&lt;br /&gt;
&lt;br /&gt;
index = sys[1023];&lt;br /&gt;
ram[index] = 30;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pole ram[] je indexováno od indexu nula (tj.: ram[0]). Celková velikost (maximální index) je dán verzí SDS-C a konkrétního firmware v zařízení. &lt;br /&gt;
&lt;br /&gt;
Verze SDS-C č. 03 má maximální velikost pole ram[] nastavenou na 128 položek. '''Novější verze už mají počet zvýšený ''' - verze č. 06 má velikost ram[] nastavenou na 512 položek (každá o velikosti int32_t).&lt;br /&gt;
&lt;br /&gt;
Pole ram[] můžete využít k čemukoliv co potřebujete. Také i pro některé SDS-C funkce, jako je ''http_get()'', která může do pole ram[] ukládat obsah textu obdrženého ze serveru (toto chování se nastavuje příslušnými sys[]), nebo při přenosu stránek z/do paměti DF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ukládání trvalých dat ==&lt;br /&gt;
&lt;br /&gt;
Všechny verze SDS-C mají od k dispozi prostor v oblasti sys[100] až sys[115]. Toto je výchozí oblast pro uchovávání trvanlivých dat (tyto údaje se neztratí při výpadku napájení). Přímým zápisem, do těchto sys[] položek, dojde k zápisu do pevné paměti. Čtení se provádí opět přímým přístupem do těchto sys[].&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. 05 je možno, navíc k tomuto základu, zapisovat a přečíst mnohem větší množství údajů v externím paměťovém chipu DATAFLASH (NVM = Non-Volatile Memory), osazeném na desce zařízení SDS, a to prostřednictvím čtyř SDS-C funkcí.&lt;br /&gt;
&lt;br /&gt;
Pozn. historické verze zařízení SDS-MICRO LIGHT, kde se používá paměť EEPROM (na místo novější DataFlash), poskytuje vždy pouze základní rozsah indexů: 100 až 115, a neposkytuje rozšířený rozsah pevné paměti (tak jako zařízení s pamětí DataFlash).&lt;br /&gt;
&lt;br /&gt;
Více informací, způsob použití a důležité varování je uvedeno na [[SDS-C: DataFlash|stránce ohledně DataFlash]].&lt;br /&gt;
&lt;br /&gt;
Další možnost:&amp;lt;br&amp;gt;&lt;br /&gt;
Zařízení SDS řady ST mají k dispozici, kromě podpory pro DataFlash, i možnost využít Zálohovanou paměť RAM (ta drží obsah i při vypnutém napájení SDS, pokud je v SDS vložena nabitá zálohovací baterie).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole text[] ==&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. '''06''' je možné v určité míře pracovat s texty. Toto má především využití v komunikaci přes sériovou linku (RS232/RS485) a při odesílání a příjmu dat (email, http) či práci s komunikačními moduly (GSM, LTE, LoRA).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je připraveno pole '''text[]'''. Detailní popis je [[SDS-C:_popis_jazyka#Pole_text.5B.5D|zde]].&lt;br /&gt;
&lt;br /&gt;
SDS-C je omezený programovací jazyk z hlediska &amp;quot;práce s textem&amp;quot;. Pokud potřebujete intenzivně s textem pracovat, použijte zařízení SDS které má FULL-C jazyk.&lt;br /&gt;
&lt;br /&gt;
I přes omezení SDS-C je možné připojit různé komunikační moduly (GSM, LTE, LoRA), které komunikují prostřednictvím textových příkazů (viz vzorové programy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole share[] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. '''08''' je možné použít pole '''share[]''', určené primárně pro sdílení textové informace mezi SDS-C programem a webovým rozhraním (tedy jako [[SDS-C:_sharing|sdílené proměnné]]).&lt;br /&gt;
&lt;br /&gt;
Práce s polem share[] je prakticky zcela shodná jako práce s polem text[]. Prakticky tak získává programátor dvě nezávislé pole pro uchování textu. Nicméně, některé SDS-C funkce vyhrazeně fungují jen s polem text[], ale to je vždy uvedeno v jejich popisu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhrazené funkce ==&lt;br /&gt;
&lt;br /&gt;
Seznam konkrétních zabudovaných '''funkcí''' naleznete na [[SDS-C: sdsc sysf|jiné stránce]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jednotné proměnné (pole sys[]) pro všechny výrobky řady SDS ==&lt;br /&gt;
&lt;br /&gt;
'''STAV SYSTÉMU'''&lt;br /&gt;
&lt;br /&gt;
 sys[0]   01 i R   &amp;quot;pair code&amp;quot; firmware (nastaven výrobcem napevno: identifikátor vázanosti firmware na hardware)&lt;br /&gt;
                    - lze využít pro rozeznání typu zařízení SDS, na kterém je spuštěn SDS-C program&lt;br /&gt;
 &lt;br /&gt;
 sys[1]   01 i R   počet přihlášených uživatelů do webového rozhraní (v okamžiku čtení této proměnné)&lt;br /&gt;
 &lt;br /&gt;
 sys[2]   01 s R   text SNMP-sysLocation, nastaveno ve webové administraci&lt;br /&gt;
 &lt;br /&gt;
 sys[3]   01 i R   hodnota '''UpTime10''' (doba běhu zařízení)&lt;br /&gt;
                    - počítá se od nuly (0) od každého zapnutí zařízení&lt;br /&gt;
                    - pouze 31 bitové počítadlo&lt;br /&gt;
                      (SDS si pro sebe interně počítá UpTime10 jako 32bit, nicméně&lt;br /&gt;
                       nejvyšší bit je odmaskován před předáním hodnoty do SDS-C programu)&lt;br /&gt;
                    - platné hodnoty: 0 až 2147483647 (včetně)&lt;br /&gt;
                    - po překročení 2147483647 (zde odpovídá up-time 248 dnů) začíná hodnota opět na nule&lt;br /&gt;
                    - jeden krok (zvýšení o jedničku) této hodnoty UpTime10 odpovídá právě '''10 msec''' uplynulému času &lt;br /&gt;
 &lt;br /&gt;
 sys[4]   01 i R   hodnota '''LOCAL''' času (UNIX čas, v sekundách)&lt;br /&gt;
                    - jedná se o lokální (eventuálně posunutý) čas, synchronizovaný se NTP serverem&lt;br /&gt;
                    - je zde už předem započítán GMT offset sys[26] (ten lze nastavit ve webovém rozhraní)&lt;br /&gt;
                    - je zde aplikován automatický posun letního času (je-li to povoleno ve webovém rozhraní)&lt;br /&gt;
                    - poskytnuto je pouze 31 bitové číslo (bude platné až do 19. leden 2038 včetně, &lt;br /&gt;
                      pak hodnota roluje na nulu - nejvyšší bit je odmaskován před předáním do SDS-C programu)&lt;br /&gt;
                    - platné hodnoty: 0 až 2147483647 (včetně)&lt;br /&gt;
 &lt;br /&gt;
 sys[5]   01 i R   rozpad LOCAL času: den (1 až 31)&lt;br /&gt;
 sys[6]   01 i R   rozpad LOCAL času: měsíc (1 až 12)&lt;br /&gt;
 sys[7]   01 i R   rozpad LOCAL času: rok (2011 a dále)&lt;br /&gt;
 sys[8]   01 i R   rozpad LOCAL času: hodina (0 až 23)&lt;br /&gt;
 sys[9]   01 i R   rozpad LOCAL času: minuta (0 až 59)&lt;br /&gt;
 sys[10]  01 i R   rozpad LOCAL času: sekunda (0 až 59)&lt;br /&gt;
 sys[11]  01 i R   rozpad LOCAL času: číslo dne v týdnu - počet dní od Neděle (0 až 6)&lt;br /&gt;
&lt;br /&gt;
'''Upozornění''': hodnota LOCAL času je platná až po úspěšném získání informací z NTP serveru. Po zapnutí (restartu) zařízení je NTP čas (sys[38], sys[4]) nastaven na nulu. Čas je automaticky v SDS aktualizován co jednu sekundu pomocí vnitřních hodin v SDS, a dále je hodnota času pravidelně (v delším intervalu) upřesněna dotazem na NTP server.&lt;br /&gt;
&lt;br /&gt;
V případě, že není zapnuta automatika DST (letní čas) a GMT offset je nastaven na nulu, tak je hodnota LOCAL času identická s NTP časem (UTC). Jakmile se ale nastaví offset nebo aktivuje posun letního času, už jsou tyto hodnoty odlišné (NTP je UTC, a LOCAL je místní (posunutý) čas). Pro různé použití je potřeba různých časů (často je potřeba UTC pro časové známkování údajů, a zase někdy je vhodný LOCAL pro interakci s uživatelem a pro různé výpisy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ethernet, Internet ==&lt;br /&gt;
&lt;br /&gt;
 sys[12]  01 i R   IP[0] adresa zařízení (nastaveno ve webové administraci)&lt;br /&gt;
 sys[13]  01 i R   IP[1] adresa zařízení&lt;br /&gt;
 sys[14]  01 i R   IP[2] adresa zařízení&lt;br /&gt;
 sys[15]  01 i R   IP[3] adresa zařízení&lt;br /&gt;
 &lt;br /&gt;
 sys[16]  01 i R   GW_IP[0] adresa brány (nastaveno ve webové administraci)&lt;br /&gt;
 sys[17]  01 i R   GW_IP[1] adresa brány&lt;br /&gt;
 sys[18]  01 i R   GW_IP[2] adresa brány&lt;br /&gt;
 sys[19]  01 i R   GW_IP[3] adresa brány&lt;br /&gt;
 &lt;br /&gt;
 sys[20]  01 i R   NETMASK[0] síťová maska (nastaveno ve webové administraci)&lt;br /&gt;
 sys[21]  01 i R   NETMASK[1] síťová maska&lt;br /&gt;
 sys[22]  01 i R   NETMASK[2] síťová maska&lt;br /&gt;
 sys[23]  01 i R   NETMASK[3] síťová maska&lt;br /&gt;
&lt;br /&gt;
 sys[24]  01 i R   stav rozhraní Ethernet (je spuštěno?)&lt;br /&gt;
                    == 0 : komunikace přes Ethernet není k dispozici (odpojený kabel, vypnutá protistrana nebo switch, atd.)&lt;br /&gt;
                    != 0 : Ethernetová komunikace je funkční (LINK OK)&lt;br /&gt;
 &lt;br /&gt;
 sys[25]  01 i R   rychlost připojení k síti Ethernet (hodnoty: 0, 10, 100)&lt;br /&gt;
                    == 0   : neznámá rychlost (není k dispozici Ethernet)&lt;br /&gt;
                    == 10  : 10 MBit per sec&lt;br /&gt;
                    == 100 : 100 MBit per sec&lt;br /&gt;
&lt;br /&gt;
 sys[26]  04 i RW  hodnota GMT offsetu pro NTP (nastaveno v administraci ve webovém rozhraní)&lt;br /&gt;
                    - platné hodnoty: -11 až 11 (včetně) (údaj v hodinách)&lt;br /&gt;
                    - zápis je možný, ale změněná hodnota (ze SDS-C) není uložena do pevné paměti &lt;br /&gt;
                      (po resetu zařízení se vráti na poslední uloženou hodnotu)&lt;br /&gt;
&lt;br /&gt;
 sys[27]  06 i R   platnost přidělené IP adresy zařízení SDS&lt;br /&gt;
                    == 0 : zařízení SDS nemá přidělenou platnou IP adresu (typický důvod: čeká se na DHCP)&lt;br /&gt;
                    != 0 : zařízení SDS má přidělenou platnou IP adresu a může komunikovat přes Ethernet&lt;br /&gt;
 &lt;br /&gt;
 sys[28]  06 i R   poslední okamžik kdy byla změněna IP adresa,&lt;br /&gt;
                   buď ručně z webového rozhraní (administrace) nebo DHCP serverem (je-li DHCP zapnuto)&lt;br /&gt;
                    - údaj odpovídá stavu UpTime10 (1 krok = 10 msec) v daný okamžik&lt;br /&gt;
 &lt;br /&gt;
 sys[29]  06 i R   DHCP: stav (lze použít pro kontrolu správné funkce DHCP klienta v SDS)&lt;br /&gt;
                    == 0 : v klidu (nic se neprovádí, nebo DHCP je vypnuté)&lt;br /&gt;
                    == 1 : odesláno DHCP DISCOVER&lt;br /&gt;
                    == 2 : obdrženo DHCP OFFER&lt;br /&gt;
                    == 3 : odesláno DHCP REQUEST&lt;br /&gt;
                    == 4 : obdrženo DHCP ACK&lt;br /&gt;
                    == 5 : IP adresa je přidělena (BOUND)&lt;br /&gt;
                    == 6,7,8,9,10,11 : zpracování DHCP RENEW&lt;br /&gt;
 &lt;br /&gt;
 sys[30]  06 i R   aktuální hodnota &amp;quot;DHCP Lease Time&amp;quot;&lt;br /&gt;
                    - hodnota je nastavena v okamžiku DHCP BOUND (při přidělení (nové) IP adresy)&lt;br /&gt;
                    - hodnota je každou 1 sec snížena o jednotku (když dojde na nulu, klient začne obnovovat IP adresu)&lt;br /&gt;
                    - údaj je uveden v jednotkách [sec]&lt;br /&gt;
&lt;br /&gt;
 sys[31]  04 i R   MAC[0] (celá MAC je nastavena ve webovém rozhraní)&lt;br /&gt;
 sys[32]  04 i R   MAC[1] &lt;br /&gt;
 sys[33]  04 i R   MAC[2] &lt;br /&gt;
 sys[34]  04 i R   MAC[3] &lt;br /&gt;
 sys[35]  04 i R   MAC[4] &lt;br /&gt;
 sys[36]  04 i R   MAC[5] (vždy je vyplněno dolních 8 bitů)&lt;br /&gt;
&lt;br /&gt;
 sys[37]  06 i R   NTP Client Status (synchronizace času)&lt;br /&gt;
                    == 0 : nesynchronizováno&lt;br /&gt;
                    == 1 : úspěšně přijal paket od NTP Serveru&lt;br /&gt;
               W   zápis hodnoty 10 (přesně a pouze: 10) do tohoto indexu vyvolá nucený NTP dotaz &lt;br /&gt;
                   (dotaz se odešle za 10sec od takovéhoto zápisu)&lt;br /&gt;
 &lt;br /&gt;
 sys[38]  07 i R   čistý UTC čas - v sekundách (UNIX Epoch čas)&lt;br /&gt;
                    - není zde aplikován offset, ani automatika letního času&lt;br /&gt;
                    - přímá hodnota získaná z NTP serveru (tj. jeho odpověď), &lt;br /&gt;
                      uvnitř SDS je sice udržována jako 32bit, &lt;br /&gt;
                      ale do SDS-C programu je hodnota předána jen jako 31bit číslo (nejvyšší 32.bit je odmaskován).&lt;br /&gt;
 &lt;br /&gt;
 sys[39]  07 i R   stav automatiky přepínání Letního Času&lt;br /&gt;
                    == 0 : automatika zakázána, lokální čas není ovlivněn&lt;br /&gt;
                    == 1 : automatika povolena, ale v současné době (podle NTP UTC času) je letní čas neaktivní (tzn. je &amp;quot;SEČ&amp;quot;).&lt;br /&gt;
                    == 2 : automatika povolena, a v současné době (podle NTP UTC času) je letní čas aktivní (tzn. je &amp;quot;SELČ&amp;quot;).&lt;br /&gt;
                           (tzn. do sys[4] je připočten nejen offset ze sys[26], ale teď také plus 1 hodina kvůli SELČ).&lt;br /&gt;
          09 i W   pouze pro případ vypnutého NTP: ruční ovládání automatiky (tzn. povolena nebo nepovolena) (SELČ pak automatika sama rozhodne, je-li povolena)&lt;br /&gt;
                    zápis 0 : vypnout automatiku (nebude pracovat = nebude aplikoval posun pro SELČ pro nastavený rozsah v roce), sys[39] pak vrátí 0 při čtení&lt;br /&gt;
                    zapis 3 : zapnout automatiku (automatika aplikuje posun pro SELČ podle toho jaký je aktuální čas a datum), sys[39] pak vrátí 1 nebo 2 dle stavu  &lt;br /&gt;
 &lt;br /&gt;
 sys[138] 09 i R   stav RTC (záloha času - pouze SDS se záložní baterií)&lt;br /&gt;
                   zatím stále 0, tzn. nepoužito, další obsah se chystá (nový FW)&lt;br /&gt;
 &lt;br /&gt;
 sys[139] 09 i R   vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Princip funkce automatiky letního času je popsán jinde na této wiki. Funkce automatiky je samozřejmě volitelná (viz: ruční nastavení ve webovém rozhraní).&lt;br /&gt;
&lt;br /&gt;
 sys[40] až sys[44]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provozní údaje ==&lt;br /&gt;
&lt;br /&gt;
 sys[45]  06 i R   relativní čas v milisekundách, počítaný od zapnutí zařízení (tj. UpTime1)&lt;br /&gt;
                    - po resetu zařízení začíná vždy počítat od nuly&lt;br /&gt;
                    - každou milisekundu se zvýší o 1 (narozdíl od UpTime10);&lt;br /&gt;
                      tzn. toto je velmi podobná hodnota jako UpTime, ale je v jiných jednotkách!&lt;br /&gt;
                    - pro sys[45] je k dispozici 31 bitů,&lt;br /&gt;
                      takže po 2147483648 msec dojde k vynulování sys[45] a počítá se opět od nuly nahoru&lt;br /&gt;
                      (pozn.: SDS si interně udržuje hodnotu jako 32bitů, ale do SDS-C programu se předává jen 31bitů).&lt;br /&gt;
&lt;br /&gt;
 sys[46]  06 i R   &amp;quot;surová&amp;quot; (raw) hodnota teploty SoC chipu (není to přímo teplota v degC, ale speciální digitální hodnota),&lt;br /&gt;
                   význam hodnot závisí na typu konkrétního zařízení SDS. &lt;br /&gt;
                   Je to dáno způsobem měření této teploty, a převod na stupně Celsia je jednoduchý, přes vzorec.&lt;br /&gt;
 &lt;br /&gt;
 SDS MICRO (LM), MACRO (LM), UPS, IO6 (LM): &lt;br /&gt;
  Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = ((5*(59-30*((3/1024)*sys[46])))/2) ]&lt;br /&gt;
 &lt;br /&gt;
 SDS TTCPRO, MINI, MACRO-ST, MICRO-ST, IO6-ST: &lt;br /&gt;
  Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = (((((sys[46]/4096)*3.3)-0.76)/0.0025)+25) ]&lt;br /&gt;
&lt;br /&gt;
Teplota SoC je pouze orientační, a je měřena s přesností +/- 5 degC.&lt;br /&gt;
&lt;br /&gt;
 sys[137] 09 i R   POUZE VARIANTY &amp;quot;ST&amp;quot; - počet provedených cyklů procesoru (provedených CPU instrukcí) od zapnutí/restartu &lt;br /&gt;
                   (při přetečení 2^31 počítá opět od nuly, pořád dokola)&lt;br /&gt;
&lt;br /&gt;
Hodnota v indexu 137 je nejjemnější možný &amp;quot;časovač&amp;quot;, dostupný pro program. Délka kroku jednotky odpovídá frekvenci jádra (ta je různá pro jednotlivá SDS, pro řadu ST typicky 120MHz, tedy 1 krok je 8.3nsec). &lt;br /&gt;
Tento index vyžaduje aktuální FW (11/2022 nebo novější).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhraní sériové komunikace ==&lt;br /&gt;
&lt;br /&gt;
SDS-C poskytuje přístup k sériovému rozhraní COM1 a COM6. Pouze rozhraní COM1 je také současně přístupno přes převodník Eth/UART (VCP). Program v SDS-C může přistupovat jak ke COM1, tak ke COM6.&lt;br /&gt;
&lt;br /&gt;
Pomocí SDS-C lze zapisovat do sériového rozhraní, a číst data ze sériového rozhraní. Data, přicházející z venku do zařízení SDS, jsou ukládána do příslušného bufferu (RX FIFO), takže lze pomocí SDS-C programu číst i pomaleji, než je rychlost příchozích dat. Buffery jsou malé (zhruba 1kB), proto je potřeba data zpracovávat rychle a včas, ať nedojde k jejich ztrátě.&lt;br /&gt;
&lt;br /&gt;
Poznámka: čtení z UART RX bufferů je k dispozci jen od verze SDS-C č. '''04''' (včetně) a výše. &lt;br /&gt;
Poznámka: UART buffery (pro obě sériové rozhraní) jsou neustále aktivní a příjem dat z UARTu probíhá po celou dobu zapnutí zařízení.&lt;br /&gt;
&lt;br /&gt;
Rozhraní COM1:&lt;br /&gt;
&lt;br /&gt;
 sys[48]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM1 prázdný. Možné hodnoty:&lt;br /&gt;
                    == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)&lt;br /&gt;
                    == 1 : RX buffer je '''prázdný''' (nebyl přijat znak od posledního vyprázdnění bufferu)&lt;br /&gt;
 &lt;br /&gt;
 sys[49]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM1&lt;br /&gt;
                    - čtením tohoto sys[49] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici), &lt;br /&gt;
                      takže si dejte '''pozor''' protože po vyjmutí už tento znak v bufferu samozřejmě není ! &lt;br /&gt;
                      (Toto může způsobit nezkušenému programátorovi potíže). &lt;br /&gt;
                      Proto je vhodnější čtení ze sys[49] provést vždy jednou do vlastní proměnné, &lt;br /&gt;
                      a s tou pak dále dle libosti pracovat.&lt;br /&gt;
                   Možné hodnoty: &lt;br /&gt;
                    == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)&lt;br /&gt;
                    == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)&lt;br /&gt;
&lt;br /&gt;
Poznámka: UART-COM1 buffer je '''vymazán vždy tehdy''', když se připojí TCP klient k převodníku Eth/UART - pozor!&lt;br /&gt;
&lt;br /&gt;
 sys[50]  02 i R   je připojen klient (Ethernet) k převodníku Eth/UART ?&lt;br /&gt;
                    == 0 : není připojen klient&lt;br /&gt;
                    != 0 : je připojen klient (přes TELNET port)&lt;br /&gt;
 sys[51]  02 i R   rychlost [bps] rozhraní UART - COM1 (viz převodník Eth/UART)&lt;br /&gt;
 sys[52]  02 i R   počet datových bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 5,6,7,8)&lt;br /&gt;
 sys[53]  02 i R   počet stop bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 1,2)&lt;br /&gt;
 sys[54]  02 i R   nastavení paritního bitu rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)&lt;br /&gt;
&lt;br /&gt;
Poznámka: parametry sériového rozhraní UART COM1 lze nastavit v rámci převodníku Ethernet/UART (přes RFC příkazy), nebo pomocí k tomu určené SDS-C funkce. Pozor, nastavení '''nelze''' změnit přímým zápisem hodnoty do sys[50] až sys[54] (ty jsou pouze pro čtení).&lt;br /&gt;
&lt;br /&gt;
Rozhraní COM6:&lt;br /&gt;
&lt;br /&gt;
 sys[55]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM6 prázdný. Možné hodnoty:&lt;br /&gt;
                    == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)&lt;br /&gt;
                    == 1 : RX buffer je '''prázdný''' (nebyl přijat znak od posledního vyprázdnění bufferu)&lt;br /&gt;
 &lt;br /&gt;
 sys[56]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM6&lt;br /&gt;
                    - čtením tohoto sys[56] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici)&lt;br /&gt;
                   Možné hodnoty: &lt;br /&gt;
                    == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)&lt;br /&gt;
                    == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)&lt;br /&gt;
&lt;br /&gt;
 sys[57]  02 i R   rychlost [bps] rozhraní UART - COM6 &lt;br /&gt;
 sys[58]  02 i R   počet datových bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 5,6,7,8,9)&lt;br /&gt;
 sys[59]  02 i R   počet stop bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 1,2)&lt;br /&gt;
 sys[60]  02 i R   nastavení paritního bitu rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)&lt;br /&gt;
&lt;br /&gt;
Rozhraní UART - COM6 je k dispozici jen na SDS-MINI, SDS-MICRO-ST a SDS-MACRO-ST, a je přístupné jen z SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Doplňující statistiky (počty rx/tx bajtů atd.) jsou k dispozici na indexu 2800+, viz dále na této stránce (dostupnost těchto údajů je závislá na instalovaném aktuálním FW ve vašem SDS).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generátor náhodných čísel ==&lt;br /&gt;
&lt;br /&gt;
 sys[61]  06 i R   generátor náhodných čísel&lt;br /&gt;
                    - při každém přečtení sys[61] je poskytnuto náhodné číslo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výsledek převodu textu na číslo ==&lt;br /&gt;
&lt;br /&gt;
Pro převod textu (z určené pozice pole ''text'' či ''share'') na číslo se používá funkce SDS-C: ''atoi''. Aby bylo možné výsledek převodu získat, musíte si jej přečíst ze ''sys[62]''.&lt;br /&gt;
&lt;br /&gt;
 sys[62]  06 i RW  výsledek převodu provedeného funkcí '''atoi(text[index]);'''&lt;br /&gt;
&lt;br /&gt;
Pro více informací se podívejte přímo na návod k této funkci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nastavení rychlosti provádění SDS-C programu ==&lt;br /&gt;
&lt;br /&gt;
SDS-C program může ovlivnit rychlost svého vykonávání. Buď se každá instrukce provede právě s minimálním krokem co 1 msec, nebo se dá tato (často žádoucí) vlastnost snadno vypnout. Pozor, hodnota 1 msec není vždy garantována, např. při zavolání funkce která pracuje s pomalou periférií dojde k čekání, dokud se požadovaná funkce nedokončí.&lt;br /&gt;
&lt;br /&gt;
 sys[63]  04 i RW  vypnutí rychlostního omezení běhu programu, nastavte na:&lt;br /&gt;
                    == 0   : (výchozí hodnota po spuštění programu) - jeden celý příkaz se provede '''co 1 msec'''&lt;br /&gt;
                    == 128 : program je prováděn s co největší rychlostí (bez zarovnávacího 1 msec kroku) &lt;br /&gt;
                             ( pozor ale na realizaci čekacích smyček, pak lze použít jen k tomu určené SDS-C funkce nebo sys[64] )&lt;br /&gt;
&lt;br /&gt;
Poznámka: všechny SDS-C programy jsou ve výchozím stavu spouštěny se sys[63] = '''0''' (tzn. jeden celý příkaz programu je vykonán právě co 1 msec).&lt;br /&gt;
&lt;br /&gt;
Tohoto faktu (krok 1 msec) některé programy využívají k realizaci čekacích smyček, když se předpokládá jeden vykonaný příkaz za 1 msec. Není to však vhodné, protože SDS nedává garanci že se vždy bude jednat přesně o 1 msec (může docházet k náhodnému zdržení až o několik msec, v záležitosti na ostatní činnost systému). Pokud však vypnete toto rychlostní omezení, tak takové případné čekací smyčky přestanou plnit svou funkci (prakticky skončí mnohem dříve): proto ve svých programech používejte pouze k realizaci &amp;quot;čekání&amp;quot; pouze k tomu určené funkce, nebo případně sys[64] nebo některý z UpTime indexů či sys[137] atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Časování ==&lt;br /&gt;
&lt;br /&gt;
Pro přesnější časování programu, popř. pro spuštění nějaké události po přesně daném intervalu, lze s výhodou využít následující proměnnou:&lt;br /&gt;
&lt;br /&gt;
 sys[64]  01 i RW  sekundový odpočítávač &lt;br /&gt;
                    - zapište libovolné kladné číslo, a systém každou vteřinu toto číslo sníží o 1, &lt;br /&gt;
                      až do nuly, kde v sys[64] zůstane nula (dokud tam zase něco nezapíšete)&lt;br /&gt;
                    - nejvyšší možná použitelná hodnota: (31-bitů) 2147483647 secs (včetně)&lt;br /&gt;
&lt;br /&gt;
Samozřejmě lze využít i jiné způsoby, ale tento je k tomu explicitně určen, vyhovuje-li hrubý krok 1 sekunda. Pro jemnější časování jsou pak vhodnější indexy s UpTime hodnotou, nebo sys[137] pro nejvíce jemné čekání - tyto indexy ale nemají funkci odpočítávání (jsou jen pro čtení), takže hlídání obsahu si už musíte řešit sami ve svém programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OSI7 funkce ==&lt;br /&gt;
&lt;br /&gt;
OSI7 funkce jsou určeny pro komunikaci mezi SDS a vnějším světem připojeným přes Ethernet (např. se servery v Internetu).&lt;br /&gt;
&lt;br /&gt;
Všechny funkce OSI7 poskytují průběžný stav své činnosti:&lt;br /&gt;
 sys[65]  01 i R   status code - hlášení průběhu, úspěšnosti, nebo chyby OSI7 funkcí (DNS, HTTP-GET, email, ...)&lt;br /&gt;
                    - význam hodnot viz [[OSI7_status_code|popis zde]]&lt;br /&gt;
&lt;br /&gt;
Poznámka: vždy je doporučeno, po zavolání kterékoliv OSI7 funkce, provést v programu čekání na skončení této funkce. Čekání má kontrolovat právě hodnotu v sys[65], a dokud se tato proměnná nenaplní výsledkem, nevolejte další OSI7 funkci.&lt;br /&gt;
&lt;br /&gt;
DNS resolv: sestavením IP[0].IP[1].IP[2].IP[3] získáte IP adresu (napr. 10.0.0.8) z DNS po úspěšném návratu z funkce DNS resolveru. Tato získaná IP adresa pak může sloužit pro různé účely, např. pro kontrolu DNS serveru jestli žije atd.&lt;br /&gt;
 sys[66]  01 i R   bajt IP[0] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[67]  01 i R   bajt IP[1] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[68]  01 i R   bajt IP[2] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[69]  01 i R   bajt IP[3] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
&lt;br /&gt;
Pro funkci DNS resolveru je potřeba provést konfiguraci (přes webové rozhraní).&lt;br /&gt;
 sys[70]  01 i R   bajt DNS_R_IP[0] - adresa samotného DNS resolveru (DNS server)&lt;br /&gt;
 sys[71]  01 i R   bajt DNS_R_IP[1] - adresa samotného DNS resolveru&lt;br /&gt;
 sys[72]  01 i R   bajt DNS_R_IP[2] - adresa samotného DNS resolveru&lt;br /&gt;
 sys[73]  01 i R   bajt DNS_R_IP[3] - adresa samotného DNS resolveru&lt;br /&gt;
&lt;br /&gt;
 sys[74]  01 s R   text, reserved (v této verzi nepoužito)&lt;br /&gt;
&lt;br /&gt;
Rozšířená funkcionalita pro DNS resolver (pouze ve FW od 11/2025):&lt;br /&gt;
&lt;br /&gt;
 sys[303]  09 i R   DNS RESOLV - (read:) actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done or finished yet)&lt;br /&gt;
 sys[303]  09 i W   DNS RESOLV - write value 0xD65 (3429dec) to clear the DNS cache&lt;br /&gt;
 sys[304]  09 i R   DNS RESOLV - (read:) timestamp (UTC) of the latest DNS server response (packet) as requested by dns_resolv() function (if 0 then no response received, or cache has expired)&lt;br /&gt;
 sys[305]  09 i R   DNS RESOLV - (read:) get the last set hard TTL limit (0 = invalid (will use 1209600 as default), otherwise 1..MAX = time in seconds)&lt;br /&gt;
 sys[305]  09 i W   DNS RESOLV - set the hard TTL value limit (in seconds)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP GET:&lt;br /&gt;
&lt;br /&gt;
 sys[75]  01 i R   návratový kód webového serveru pro HTTP GET (odpověď z webového serveru)&lt;br /&gt;
                    - nastaveno po dokončení práce funkce '''http_get()'''&lt;br /&gt;
                    - např. číslo '''200''' pro 'OK', '''404''' pro 'not found', a tak dále.&lt;br /&gt;
 &lt;br /&gt;
 sys[76]  03 i RW  číslo portu který chcete aby HTTP klient použil (výchozí hodnota po startu je '''80''')&lt;br /&gt;
                    - '''pozn.''' hodnota tohoto sys[76] se přebere v okamžiku zavolání '''http_get''',&lt;br /&gt;
                      pozdější zápisy mají vliv až zase v okamžiku dalšího zavolání '''http_get'''.&lt;br /&gt;
 &lt;br /&gt;
 sys[77]  04 i RW  ukládat data přijatá z HTTP serveru po obdržení odpovědi na HTTP GET požadavek&lt;br /&gt;
                   do pole ram[]. Tato funkce je výhodná pro okamžité řízení SDS-C programu. &lt;br /&gt;
                   Nastavte na:&lt;br /&gt;
 &lt;br /&gt;
                    == 0 : jakékoliv přijaté data jsou '''zahozena''', &lt;br /&gt;
                           neuloží se (nedojde ke změně obsahu ram[] nebo text[])&lt;br /&gt;
 &lt;br /&gt;
                    == 1 : prvních sys[78] bajtů odpovědi je vloženo do pole ram[] v rozsahu ram[1] až ram[sys[78]]&lt;br /&gt;
                           a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).&lt;br /&gt;
                           (tzn. původní obsah této oblasti pole ram[] je přepsán)&lt;br /&gt;
                           (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], &lt;br /&gt;
                            bude zápis přerušen a přijatý 0x00 nebude uložen)&lt;br /&gt;
 &lt;br /&gt;
                    == 2 : prvních sys[78] bajtů odpovědi je vloženo do pole text[] v rozsahu text[0] až text[sys[78]]&lt;br /&gt;
                           a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).&lt;br /&gt;
                           (tzn. původní obsah této oblasti pole text[] a položka ram[0] je přepsán)&lt;br /&gt;
                           (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], &lt;br /&gt;
                            bude zápis přerušen a přijatý 0x00 nebude uložen)&lt;br /&gt;
 &lt;br /&gt;
                   Hodnota do ram[0] je vždy zapsaná, ať je sys[77] jakékoliv. Počítejte s tím ve svém programu !&lt;br /&gt;
 &lt;br /&gt;
 sys[78]  04 i RW  počet bajtů, které CHCETE uložit do ram[] nebo text[] po přijetí HTTP GET odpovědi&lt;br /&gt;
                    - výchozí hodnota je '''32''' (tzn. uloží se 32 znaků + samostatně délka do ram[0])&lt;br /&gt;
                    - maximální hodnota je omezena velikostí pole ram[] nebo text[]&lt;br /&gt;
                    - pozor! pokud zapíšete '''0''', budou všechna data zahozena, &lt;br /&gt;
                      ale i v takovém případě dojde k přepisu ram[0] (viz výše)&lt;br /&gt;
&lt;br /&gt;
 sys[79] až sys[80]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Pozor, v případě nenulového sys[77] HTTP klient čeká tak dlouho, dokud nedostane všech sys[78] bajtů odpovědi z protistrany. To je častou příčinou &amp;quot;problémů&amp;quot; kdy protistrana neodpoví dostatečně dlouhou odpovědí, a klient má stále otevřené spojení a stále čeká a čeká... až dojde na timeout. Což je pak potřeba důsledně a správně ošetřit ve vašem SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Pro funkci SMTP je potřeba provést konfiguraci (přes webové rozhraní):&lt;br /&gt;
 sys[81]  01 i R   bajt SMTP_S_IP[0] - adresa SMTP serveru (je použita pro funkci '''smtp_send()''')&lt;br /&gt;
 sys[82]  01 i R   bajt SMTP_S_IP[1] - adresa SMTP serveru&lt;br /&gt;
 sys[83]  01 i R   bajt SMTP_S_IP[2] - adresa SMTP serveru&lt;br /&gt;
 sys[84]  01 i R   bajt SMTP_S_IP[3] - adresa SMTP serveru&lt;br /&gt;
&lt;br /&gt;
 sys[85] až sys[88]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Informace z ('''interní''') ICMP PING funkcionality &amp;quot;IP Watchdog&amp;quot; (konfigurace a ovládání přes webové rozhraní SDS) (nemá souvislost s SDS-C funkcí &amp;quot;ping()&amp;quot; ) :&lt;br /&gt;
&lt;br /&gt;
 sys[89]  06 i R   IP-Watchdog: stav&lt;br /&gt;
                    == 0 : není v provozu (neaktivováno ve webovém rozhraní)&lt;br /&gt;
                    != 0 : v provozu (uživatel aktivoval IP-Watchdog ve webovém rozhraní)&lt;br /&gt;
 &lt;br /&gt;
 sys[90]  06 i R   IP-Watchdog: poslední známé RTT&lt;br /&gt;
                    == 0 .. 65533 : hodnota RTT v msec&lt;br /&gt;
                    &amp;gt;= 65534      : hodnota není k dispozici (nebyl obdržen PING response)&lt;br /&gt;
 &lt;br /&gt;
 sys[91]  06 i R   IP-Watchdog: stav výstupu&lt;br /&gt;
                    == 0 : výstup není aktivován&lt;br /&gt;
                    != 0 : výstup je aktivován (nebyl obdržen PING response podle zadaných požadavků)&lt;br /&gt;
&lt;br /&gt;
Informace z (SDC-C) ICMP PING funkce - '''ping()''' :&lt;br /&gt;
&lt;br /&gt;
 sys[92]  04 i R   stav ICMP PING RESPONSE v okamžiku čtení tohoto sys[92] &lt;br /&gt;
                    == 0 : klid (není odeslán paket, nečekám na odpověď), &lt;br /&gt;
                           popř. byla zadána neplatná IP adresa do funkce '''ping()''' a proto se nic neodešle&lt;br /&gt;
                    == 1 : funkce '''ping()''' byla právě zavolána, &lt;br /&gt;
                           takže se teprve chystá provést svou činnost, zatím se neví výsledek odesílání&lt;br /&gt;
                    == 2 : čeká se na odpověď od ARP &lt;br /&gt;
                           (POZOR! Znamená to že místo ICMP PING REQUEST paketu byl odeslán ARP paket, &lt;br /&gt;
                           protože v ARP tabulce nebyl příslušný záznam)&lt;br /&gt;
                    == 4 : poslán ECHO REQUEST, čekám na ECHO REPLY &lt;br /&gt;
                          (požadovaný stav, funkce '''ping()''' funguje ok)&lt;br /&gt;
                    == 8 : právě obdržel ECHO REPLY &lt;br /&gt;
                          (byla přijata odpověď od vzdáleného zařízení)&lt;br /&gt;
 &lt;br /&gt;
 sys[93]  04 i R   PING SEQ number &lt;br /&gt;
                    - hodnota je nastavena na '''-1''' dokud není přijata odpověď ICMP PING RESPONSE &lt;br /&gt;
                      na ICMP PING REQUEST odeslaný funkcí '''ping()'''&lt;br /&gt;
 &lt;br /&gt;
 sys[94]  04 i R   Round Trip Time, v milisekundách&lt;br /&gt;
                    - dokud není přijata platná ICMP PING RESPONSE tak je zde hodnota '''0xFFFF'''&lt;br /&gt;
                    - čas je zvyšován po pěti milisekundách (údaj v sys[94] je přímo v msec, např. hodnota 55 znamená 55 msec)&lt;br /&gt;
&lt;br /&gt;
Pozn.: ICMP Quench (32bit) je sestaven z &amp;quot;identifier&amp;quot; (16bit) a z &amp;quot;sequence number&amp;quot;. Pomocí sys[93] můžete nastavit '''číslo sekvence''' na libovolnou hodnotu, přičemž hodnota &amp;quot;identifier&amp;quot; je napevno nastavena na &amp;quot;'''0x0280'''&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkce '''send_udp()''':&lt;br /&gt;
&lt;br /&gt;
 sys[95]  06 i R   výsledek posledního volání '''send_udp()'''&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : nic neprovedeno&lt;br /&gt;
                           Hodnota '''0''' je nastavena po startu SDS-C programu&lt;br /&gt;
                    == 1 : právě bylo zahájeno odesílání paketu (provádí se)&lt;br /&gt;
                           nastaveno okamžitě po jakémkoliv zavolání '''send_udp()'''.&lt;br /&gt;
                    == 2 : byl odeslán UDP paket, úspěšně&lt;br /&gt;
                           Hodnota '''2''' je nastavena až v okamžiku úspěšného skutečného odeslání UDP paketu&lt;br /&gt;
                    == 3 : nebyl odeslán UDP paket, protože byl místo toho odeslán ARP dotaz &lt;br /&gt;
                           Hodnota '''3''' je nastavena, pokud není známá MAC pro zadanou IP &lt;br /&gt;
                           a byl tedy místo požadovaného UDP paketu odeslán ARP dotaz&lt;br /&gt;
                    == 4 : zavolali jste funkci '''send_udp()''' dříve, &lt;br /&gt;
                           než byla dokočena činnost předchozího požadavku &lt;br /&gt;
                           (sledujte hodnotu sys[95] a správně ji vyhodnocujte, a nestane se vám to)&lt;br /&gt;
                    == 5 : byly zadány neplatné parametry (neplatná IP, nebo port, nebo index či délka dat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkce '''snmp_send_trap()''':&lt;br /&gt;
&lt;br /&gt;
 sys[96]  06 i R   výsledek posledního volání '''snmp_send_trap()'''&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : odesílání neprobíhá&lt;br /&gt;
                    == 1 : probíhá odesílání, výsledek ještě není znám&lt;br /&gt;
                    == 2 : odeslání se povedlo &lt;br /&gt;
                    == 3 : odeslání se nepovedlo (neplatné parametry při zavolání funkce)&lt;br /&gt;
                    == 4 : odeslání se nepovedlo (není známý ARP záznam pro udanou host IP)&lt;br /&gt;
                    == 5 : odeslání se nepovedlo (právě pracuje (odesílá své data) některá jiná funkce, např. http_get)&lt;br /&gt;
&lt;br /&gt;
 sys[97]           RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zápis textu do pole, Porovnání textů ==&lt;br /&gt;
&lt;br /&gt;
Položka ''sys[98]'' je využita více SDS-C funkcemi, přičemž všechny tyto funkce pracují s polem ''text[]''.&lt;br /&gt;
&lt;br /&gt;
 sys[98]     i R   společné využití viz (1) a (2)&lt;br /&gt;
 &lt;br /&gt;
          06 i R   (1) číslo indexu do pole ''text[]'' kam byla zapsána terminační 0x00,&lt;br /&gt;
                       tj. ukazatel kde byl aktuální konec zápisu do pole ''text[]'', &lt;br /&gt;
                       což je hodnota užitečná pro navázání textu (zápis více textů přesně za sebou), popř. určení délky posledního zápisu:&lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''sprintf()'''&lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''itoh()''' &lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''itoa()''' &lt;br /&gt;
 &lt;br /&gt;
          08 i R   (2) výsledek porovnání textů&lt;br /&gt;
                        - hodnota výsledku zavolání funkce '''textcmp()'''&lt;br /&gt;
                            X &amp;lt; 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v poli ''text[]'' než v porovnávaném řetězci&lt;br /&gt;
                            X == 0 : oba texty jsou identické&lt;br /&gt;
                            X &amp;gt; 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v porovnávaném řetězci než v poli ''text[]''&lt;br /&gt;
&lt;br /&gt;
Význam &amp;quot;nižší vlastní hodnoty&amp;quot;: znak 'a' má nižší hodnotu než 'b', a to o 1; nebo např. '1' má nižší hodnotu než '4' a to o 3.&lt;br /&gt;
&lt;br /&gt;
Doporučeno je si to vše vyzkoušet (zavolat si každou uvedenout funkci a srovnat hodnotu v sys[98] s obsahem pole ''text[]'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uživatelské pozice v pevné paměti == &lt;br /&gt;
&lt;br /&gt;
 sys[99]  05 i RW  předávací proměnná pro čtení a zápis z/do paměti [[SDS-C: DataFlash|dataflash]]&lt;br /&gt;
&lt;br /&gt;
 sys[100] až sys[115]  &lt;br /&gt;
          01 i RW  data uložená do permanentní paměti = co se sem napíše zůstane i po vypnutí zařízení,&lt;br /&gt;
                   můžete si sem uložit co chcete (tj. 16x signed long délky 32bit),&lt;br /&gt;
                    - po speciálním systémovém resetu (RSTD) je vše nastaveno na 0xFFFFFFFF &lt;br /&gt;
                    - pozor! minimalizujte množství zápisů, životnost této paměti není neomezená !&lt;br /&gt;
                    - zápis do těchto sys[] přímo ihned fyzicky zapíše do pevné paměti &lt;br /&gt;
                    - čtení těchto sys[] způsobí přímé fyzické čtení pevné paměti &lt;br /&gt;
&lt;br /&gt;
Paměť EEPROM a paměť DATAFLASH (podle verze HW který máte) je permanentní (NVM), tzn. její obsah zůstane i po vypnutí zařízení nezměněn (na rozdíl od &amp;lt;u&amp;gt;ne&amp;lt;/u&amp;gt;zálohované paměti RAM, do které se přistupuje pomocí pole ''ram[]'').&lt;br /&gt;
&lt;br /&gt;
''' Reserved '''&lt;br /&gt;
&lt;br /&gt;
 sys[116] až sys[136]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné nastavitelné uživatelem z webového rozhraní ==&lt;br /&gt;
&lt;br /&gt;
Pomocí &amp;quot;uživatelských proměnných&amp;quot; (někdy taky &amp;quot;sdílených proměnných&amp;quot;) lze snadno ovlivnit chod vašeho SDS-C programu, ale jen tak, jak si do něj sami naprogramujete - uživatelské proměnné neovlivňují samotný program, ale program je může číst a následně zpracovat.&lt;br /&gt;
&lt;br /&gt;
 sys[140] až sys[149] &lt;br /&gt;
          01 i RW  &amp;quot;uživatelské proměnné&amp;quot;, které můžete měnit &amp;quot;z webu&amp;quot; (správně formulovaným HTTP GET dotazem)&lt;br /&gt;
                   (vždy 32-bit signed integer)&lt;br /&gt;
&lt;br /&gt;
 sys[150] 01 i RW  blokování přístupu k možnosti změny obsahu &amp;quot;uživatelských proměnných&amp;quot; z webu&lt;br /&gt;
                   Nastavení:&lt;br /&gt;
                    == 0 : stránka &amp;quot;control&amp;quot; je přístupná bez hesla, &lt;br /&gt;
                    != 0 : pro přístup je nutno se přihlásit (uživatel je vyzván k příhlášení)&lt;br /&gt;
&lt;br /&gt;
Uživatel, který má přístup k webové stránce, může zapsat nový obsah do těchto osmi proměnných (změnit jejich hodnotu), kdykoliv chce. Dvě doplňkové proměnné nejsou na výchozí webové stránce dostupné, ale jinak s nimi lze bez jiných omezení pracovat (SDS-C, M2M).&lt;br /&gt;
&lt;br /&gt;
Zápisem do ''sys[150]'' můžete nastavit bezpečnost přístupu k této webové stránce.&lt;br /&gt;
&lt;br /&gt;
Adresa webové stránky je (IP je zde pro příklad): http://192.168.1.250/control (více informací [[SDSC: sharing|zde]]).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě lze využít i přímého URL pro zápis do proměnných, což je výhodné např. při vzájemné komunikaci dvou zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné vstupů a výstupů pro všechny výrobky SDS ==&lt;br /&gt;
&lt;br /&gt;
'''POZOR'''&lt;br /&gt;
&lt;br /&gt;
'''Podle HW verze výrobku, jsou dostupné jen určité vstupy a výstupy.''' Zde je uveden plný seznam pro maximální konfiguraci, ale ne všechny HW verze mají všechno. Např. SDS-MICRO-LM má pouze dva reléové výstupy, kdežto SDS-MACRO-LM má čtyři.&lt;br /&gt;
&lt;br /&gt;
Vždy máme vyhrazeno 32 indexů pro vstupy a výstupy. Tyto indexy jsou tedy naplánovány pro (budoucí) maximální konfiguraci, ale většina SDS k nim nemá odpovídající HW (např. nemá všech 32 relé). Zápis a čtení do/z indexů, které nemají odpovídající fyzický protějšek, je zakázán (bude SDS ignorován, a hodnota nebude uložena pro pozdější čtení).&lt;br /&gt;
&lt;br /&gt;
'''Pokračování výpisu:'''&lt;br /&gt;
&lt;br /&gt;
 sys[151] až sys[182]  &lt;br /&gt;
          01 i R   stav binárního vstupu OPTO1 až OPTO32 (optočlen)&lt;br /&gt;
                    - hodnota odpovídá fyzickému stavu vstupů (zda-li je nebo není přítomen signál na LED optočlenu)&lt;br /&gt;
                    - pozor, hodnota '''0''' skutečně znamená přítomnost signálu&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : (nulová hodnota)             signál přítomen (napětí na LED = svítící LED v optočlenu)&lt;br /&gt;
                    != 0 : (libovolná nenulová hodnota) bez signálu (LED v optočlenu nesvítí)&lt;br /&gt;
&lt;br /&gt;
Pozor, pokud u vašeho SDS (např. historické kousky SDS-MICRO-LIGHT) má číslované OPTO vstupy od nuly (né od jedničky), musíte si aktualizovate firmware v tomto zařízení, a případně upravit potisk (popis) na desce nebo krabičce.&lt;br /&gt;
&lt;br /&gt;
'''Důležité info:'''&lt;br /&gt;
&lt;br /&gt;
Pokud je (uvnitŘ SDS) na LED vstupního optočlenu signál, hodnota '''sys[]''' pro dané OPTOx dává '''0''' (nulu), naopak při nepřítomnosti signálu je přítomna '''nenulová''' hodnota (vždy testujte na nulovou a nenulovou hodnotu, jediné co je zaručeno je totiž ta nula, kdežto nenulová hodnotu může být jakákoliv - ve skutečnosti každý opto vstup má přidělenou konstantu, podle které lze tento vstup identifikovat). &lt;br /&gt;
&lt;br /&gt;
Pozor - &amp;quot;logika&amp;quot; optických vstupů je tedy na první pohled &amp;quot;obrácená&amp;quot; (avšak dává to přesný smysl). Jen je to potřeba vědět při psaní SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stav SDS-C programu ==&lt;br /&gt;
&lt;br /&gt;
Informace o verzi firmware modulu SDS (vhodné např. pro kontrolu, že uživatel používá nejnovější firmware, tak jak má).&lt;br /&gt;
&lt;br /&gt;
 sys[183] 08 i RW  verze nainstalovaného firmware v SDS modulu&lt;br /&gt;
                   (hex: 0x00DDMMYY, nebo jen 0x00000000 u starších FW)&lt;br /&gt;
&lt;br /&gt;
Příklad: FW v SDS je (pro příklad) ze dne 24.12.2018, takže v ''sys[183]'' bude zakódováno jako 0x00180C12, tedy hodnoty 24dec 12dec 18dec zapsány jako 0x18 0x0C 0x12, což je 0x18C0C12 což je 1575954dec.&lt;br /&gt;
&lt;br /&gt;
Informace o způsobu, jakým byl aktuální běh SDS-C programu spuštěn:&lt;br /&gt;
&lt;br /&gt;
 sys[184] 08 i RW  způsob spuštění SDS-C programu&lt;br /&gt;
                   == 0 : bez informace&lt;br /&gt;
                   == 1 : standardní spuštění SDS-C programu po běžném startu zařízení SDS&lt;br /&gt;
                   == 2 : program SDS-C byl (znovu) spuštěn na základě restartu od watchdogu (byl timeout)&lt;br /&gt;
                   == 4 : program SDS-C byl čerstvě nahrán z EXE aplikace&lt;br /&gt;
&lt;br /&gt;
Stav SDS-C watchdogu:&lt;br /&gt;
&lt;br /&gt;
 sys[185] 08 i R   hodnota odpočítávání SDS-C watchdogu v msec&lt;br /&gt;
                   == -1 : wdg není aktivní&lt;br /&gt;
                   ==  0 : odpočet vypršel, dojde k resetu SDS-C programu&lt;br /&gt;
                   1..2147482000 : aktuální hodnota odpočtu (snižuje se o 1 každou milisekundu)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pulse-Width Modulation výstupy ==&lt;br /&gt;
&lt;br /&gt;
Některá SDS mají pouze jeden PWM výstup (PWM1), některá mají čtyři výstupy (rozdělené po dvou do dvou skupin: PWM1 a PWM2, pak PWM3 a PWM4).&lt;br /&gt;
&lt;br /&gt;
''Příklad pro PWM1:'' Konfigurace PWM1 výstupu nejprve vyžaduje zápis do sys[191], aby se nejprve nastavila provozní základní frekvence generátoru.&lt;br /&gt;
Následně lze PWM1 výstup řídit zápisem do sys[192], kdy se podle zapsané hodnoty nastaví střída PWM výstupu (poměr log0 a log1).&lt;br /&gt;
Alternativně lze zápis do sys[192] nahradit zápisem do sys[193], toto lze kombinovat.&lt;br /&gt;
Zápis do sys[191] je potřeba jen jednou (tedy jen tehdy, když je potřeba PWM1 výstup zapnout nebo vypnout, a kdy je potřeba změnit frekvenci generátoru). &lt;br /&gt;
Zápisy do sys[192] a nebo sys[193] se pak mohou dít samostatně (tj. není potřeba pokaždé opakovat zápis do sys[191]).&lt;br /&gt;
&lt;br /&gt;
Různé typy SDS mají jiný způsob obsluhy PWM generátoru - pozor !&lt;br /&gt;
&lt;br /&gt;
Pozor, pro tyto typy SDS:&lt;br /&gt;
&lt;br /&gt;
 SDS '''UPS''', SDS '''IO6 (LM)''', SDS '''IO6-ST''' a SDS '''TTCPRO''' &lt;br /&gt;
 &lt;br /&gt;
 Tyto výrobky nemají PWM výstup (zápis do příslušných sys[] zde nemá význam).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podle typu SDS:&lt;br /&gt;
&lt;br /&gt;
 SDS '''MICRO (LM)''' a SDS '''MACRO (LM)''' - pouze jeden PWM výstup (PWM1)&lt;br /&gt;
 &lt;br /&gt;
 sys[191] 01 i RW  &amp;quot;Fm&amp;quot; = frekvence PWM1 výstupu [Hz]&lt;br /&gt;
                    - do SDS-C č. '''03''': specifický omezený rozsah (souvisí se starým firmware)(bylo v rozsahu: 2 až 10000000).&lt;br /&gt;
                    - pozn. od SDS-C č. '''04''': lze nastavit hodnotu od ''24'' (24Hz) do ''49999998'' (49.999998Mhz)&lt;br /&gt;
 &lt;br /&gt;
 sys[192] 01 i RW  poměr nastavení &amp;quot;pulse-width&amp;quot; PWM1 výstupu (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - do SDS-C č. '''03''': specifický omezený rozsah (souvisí se starým firmware)&lt;br /&gt;
                    - od SDS-C č. '''04''': lze nastavit hodnotu od 0 do &amp;quot;Fm&amp;quot; (např. &amp;quot;Fm / 2&amp;quot; představuje PWM signál 1:1).&lt;br /&gt;
 &lt;br /&gt;
 sys[193] 06 i RW  ruční přímý zápis do registru PWM1 generátoru &lt;br /&gt;
                    - tzn. není předzpracováno jako sys[192], tzn. jedná se o alternativu k sys[192]&lt;br /&gt;
                    - tato hodnota není aktualizována vůči sys[192], ani není archivována&lt;br /&gt;
                    - rozsah: ''0'' až &amp;quot;Fm&amp;quot; (tj. ''0'' až sys[191]).&lt;br /&gt;
&lt;br /&gt;
Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupu osciloskopem.&lt;br /&gt;
&lt;br /&gt;
Hodnoty Fm větší než 1MHz prakticky nemají smysl, snažte se navrhnout svůj systém tak, aby dokázal pracovat ideálně nejvýše ve stovkách kHz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Další typy SDS - všimněte si rozdílu ''významu'' jednotlivých indexů vůči vůči tabulce výše.&lt;br /&gt;
&lt;br /&gt;
 SDS '''MINI''', SDS '''MICRO-ST''' - pouze jeden PWM výstup (PWM1)&lt;br /&gt;
 SDS '''MACRO-ST''' - čtyři PWM výstupy (zde: první skupina PWM1 a PWM2, druhá skupina je popsána dále)&lt;br /&gt;
 &lt;br /&gt;
 sys[191] 07 i RW  &amp;quot;Fm&amp;quot; = (společná) frekvence pro '''PWM1 a PWM2''' výstupy [Hz]&lt;br /&gt;
                    - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM výstupy (lze dále řídit podle sys[192] až sys[195])&lt;br /&gt;
                    - zápis hodnoty 0 vypne PWM1 a PWM2 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu&lt;br /&gt;
 &lt;br /&gt;
 sys[192] 07 i RW  duty-cycle '''PWM1''' výstupu v procentech (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[192] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[192] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[193] 07 i  W  duty-cycle '''PWM1''' výstupu v mikrosekundách (druhý možný způsob nastavování PWM generátoru)&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[193] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[193] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
 &lt;br /&gt;
 sys[194] 07 i RW  duty-cycle '''PWM2''' v procentech (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[194] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[194] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[195] 07 i  W  duty-cycle '''PWM2''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[195] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[195] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
&lt;br /&gt;
 SDS '''MACRO-ST''' - čtyři PWM výstupy (zde druhá skupina: PWM3 a PWM4)&lt;br /&gt;
 &lt;br /&gt;
 sys[186] 09 i RW  &amp;quot;Fm&amp;quot; = (společná) frekvence pro '''PWM3 a PWM4''' výstupy [Hz]&lt;br /&gt;
                    - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM výstupy (lze dále řídit podle sys[187] až sys[190])&lt;br /&gt;
                    - zápis hodnoty 0 vypne PWM3 a PWM4 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu&lt;br /&gt;
 &lt;br /&gt;
 sys[187] 09 i RW  duty-cycle '''PWM3''' v procentech&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[187] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[187] ignorovány (nejsou zapamatovány)&lt;br /&gt;
&lt;br /&gt;
 sys[188] 09 i  W  duty-cycle '''PWM3''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[188] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[188] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
 &lt;br /&gt;
 sys[189] 09 i RW  duty-cycle '''PWM4''' v procentech&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[189] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[189] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[190] 09 i  W  duty-cycle '''PWM4''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[190] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[190] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
&lt;br /&gt;
Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupů osciloskopem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání výstupů - Relé ==&lt;br /&gt;
&lt;br /&gt;
Zápisem do následujících systémových proměnných přímo ovládáte fyzické relé (výstupy) zařízení SDS. Pozor, protože hodnoty zapsané z SDS-C programu se záměrně neukládají do pevné paměti (tzn. nejsou načteny po resetu zařízení SDS). Je to z důvodu bezpečnosti (aby se např. neseplo relé po dlouhém výpadku napájení). Váš program si s tím musí umět poradit - vždy po zapnutí SDS musí vyhodnotit aktuální situaci a až podle toho zapínat relé.&lt;br /&gt;
&lt;br /&gt;
 sys[196] až sys[228]   &lt;br /&gt;
          01 i RW  informace, kdo ovládá '''RE1''' až '''RE32'''&lt;br /&gt;
                    - lze nastavit i z webového rozhraní&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : ovládáno z webového rozhraní (ruční řízení - trvale zapnuto, trvale vypnuto)&lt;br /&gt;
                    == 2 : ovládáno z SDS-C programu (zápis do sys[], je ignorováno nastavení na webu)&lt;br /&gt;
                    == 4 : ovládáno z IP Watchdogu (interní IP watchdog, nastavuje se přes web)&lt;br /&gt;
&lt;br /&gt;
 sys[229] až sys[230]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[231] až sys[262]   &lt;br /&gt;
          01 i RW  stav výstupu RE1 až RE32 (= zápis do tohoto sys[] přímo ovládá relé)&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : relé není aktivní &lt;br /&gt;
                           (cívka relé bez proudu, MICRO-LM: mosfet není sepnut)&lt;br /&gt;
                    != 0 : relé je aktivní &lt;br /&gt;
                           (cívka relé pod proudem, MICRO-LM: mosfet je sepnut = výstup REx je spojen na GND)&lt;br /&gt;
&lt;br /&gt;
 sys[263] až sys[265]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[266] až sys[298]   &lt;br /&gt;
          01 s R   uživatelský textový název pro '''RE1''' až '''RE32''' &lt;br /&gt;
                    - nastaveno ve webovém rozhraní&lt;br /&gt;
&lt;br /&gt;
 sys[264] až sys[300]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání PDx ==&lt;br /&gt;
&lt;br /&gt;
Jednotlivé moduly SDS mají k dispozici dodatečné vstupy a výstupy, označené jako PDx respektive TOPB. Přesný seznam viz návod ke konkrétním modulům.&lt;br /&gt;
&lt;br /&gt;
Stav vstupu (je-li PDx jako vstup) nebo výstupu (je-li PDx jako výstup):&lt;br /&gt;
&lt;br /&gt;
 sys[301] 01 i RW  SDS '''MICRO LM LIGHT''': stav i/o pinu D0 (0 = log0 ; nenulová hodnota v sys = log1 přítomna na pinu)&lt;br /&gt;
                   SDS '''MICRO LM DIN''' a SDS '''MACRO LM''': stav výstupu D0 - MOSFET spínač na GND. Při jakékoliv nenulové hodnotě v sys[301] je MOSFET sepnutý (=D0 na GND), jinak je D0 otevřený (HiZ)&lt;br /&gt;
                   SDS '''TTCPRO''': stav všech osmi pinů v portu PDx (nastavením/čtením sys[301] se přistupuje k jednotlivých osmi bitům v bajtu, kde: bit0=PD0 až bit7=PD7)&lt;br /&gt;
                   SDS '''MINI''': bit0 = stav i/o pinu TOPB, bit1 = stav padu PD1, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''UPS''': nepoužito&lt;br /&gt;
                   SDS '''IO6''': nepoužito&lt;br /&gt;
                   SDS '''MICRO-ST''': bit0 = stav PD0 MOSFET spínače (spíná na GND), bit1 = stav i/o pinu TOPB, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''IO6-ST''': nepoužito&lt;br /&gt;
                   SDS '''MACRO-ST''': bit0 = stav PD0, bit1 = stav PD1, bit2 = stav i/o pinu TOPB, bit3 = TL-1, bit4 = stav TL-2, ostatní bity (5..7) nepoužity&lt;br /&gt;
&lt;br /&gt;
Řízení směru pro jednotlivé PDx resp. TOPB:&lt;br /&gt;
&lt;br /&gt;
 sys[302] 06 i RW  SDS '''MICRO LM LIGHT''': směr i/o pinu D0 (zápisem bit0 do 1 se nastaví pin D0 jako výstup) (zápisem log1 se nastaví jako vstup)&lt;br /&gt;
                   SDS '''MICRO LM DIN''' a '''SDS MACRO LM''': pozor, D0 je vždy výstup (nastavení je napevno, nelze změnit)&lt;br /&gt;
                   SDS '''TTCPRO''': směr jednotlivých pinů v portu PDx (nastavením jednotlivých osmi bitů, bit0=PD0 až bit7=PD7, nastav log1 pro výstup)&lt;br /&gt;
                   SDS '''MINI''': bit0 = směr i/o pinu TOPB, bit1 = směr i/o padu PD1, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''UPS''': nepoužito&lt;br /&gt;
                   SDS '''IO6''': nepoužito&lt;br /&gt;
                   SDS '''MICRO-ST''': bit0 = vždy v log1 (PD0 jako výstup), bit1 = směr i/o pinu TOPB, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''MACRO-ST''': bit0 = vždy v log1 (výstup), bit1 = vždy v log1 (výstup), bit2 = směr i/o pinu TOPB, bit3 = vždy v log0 (vstup), bit4 = vždy v log0 (vstup), ostatní bity (5..7) nepoužity&lt;br /&gt;
&lt;br /&gt;
TOPB: vždy typicky CMOS 3V3 pin, s možností funkce jako vstup nebo výstup (dle sys[302]), a je přímo připojený na pin SoC, pozor tedy na jeho další HW připojení.&lt;br /&gt;
&lt;br /&gt;
TTCPRO: Mapování je vždy od nejnižšího (LSB - bit0) bitu (PD0 = bit0, PD1 = bit1, atd. PD7 = bit7). Pro TTCPRO jsou PDx jako CMOS 3V3 piny s volbou vstupu nebo výstupu pro každý jednotlivý pin.&lt;br /&gt;
&lt;br /&gt;
MICRO-ST: výstup PD0 je zapojen formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).&lt;br /&gt;
&lt;br /&gt;
MACRO-ST: výstupy PD0 a PD1 jsou zapojeny formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).&lt;br /&gt;
&lt;br /&gt;
Nezapomeňte vždy ve svém programu správně nastavit hodnoty do sys[302] (toto je častá chyba když se to zapomene).&lt;br /&gt;
&lt;br /&gt;
 sys[306] až sys[309]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
== Tlačítka na desce display pro SDS-MACRO-ST ==&lt;br /&gt;
&lt;br /&gt;
Čtení stavu tlačítek na desce display (SDS-MST-DISP-rev1) se provádí čtením sys[301] a vyhodnocením bitu 3 (=8dec, první tlačítko) a/nebo bitu 4 (=16dec, druhé tlačítko).&lt;br /&gt;
&lt;br /&gt;
Ošetření na případné zákmity při stisku a uvolnění tlačítek, je potřeba provést ve vašem SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vstupy - teploměry na externí sběrnici 1-Wire&amp;amp;reg; ==&lt;br /&gt;
&lt;br /&gt;
Čidla teploty (1-W chipy pro měření teploty připojené na sběrnici; tak také údaj o teplotě z připojených modulů SDS-1W-T-RH) jsou řízena (čtena) plně automaticky zařízením SDS. Program v SDS-C má přímo přístup k výsledným hodnotám teplot.&lt;br /&gt;
&lt;br /&gt;
 sys[310] až sys[341]   &lt;br /&gt;
          01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici&lt;br /&gt;
&lt;br /&gt;
Teploměry mají hodnotu uloženou v násobku '''100''' (takže např. 24.5°C je uloženo jako číslo 2450, nebo -120.65°C je -12065). Pokud není k dispozici hodnota z čidla, '''není v záznamu číslo nula (pozor !), ale záměrně tam je číslo 16777216 (2^24)'''.&lt;br /&gt;
&lt;br /&gt;
Pozn.: pouze SDS-MACRO-LM a SDS-MACRO-ST mají teploměry č. 17 až 32, protože má dvě samostatné sběrnice (konektory). Sběrnice A má teploměry 1 až 16, sběrnice B má teploměry 17 až 32. '''Sběrnice B je k dispozici jen pro SDS-MACRO-XX'''.&lt;br /&gt;
&lt;br /&gt;
 sys[342] až [345]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[346] 01 i R   číslo čidla, které je právě převáděno na sběrnici '''B''' (čteno přes 1-W, tj. je mu aktualizována hodnota)&lt;br /&gt;
 sys[347] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici '''B'''&lt;br /&gt;
 &lt;br /&gt;
 sys[348] 01 i R   číslo čidla, které je právě převáděno na sběrnici '''A''' (čteno přes 1-W, tj. je mu aktualizována hodnota)&lt;br /&gt;
 sys[349] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici '''A'''&lt;br /&gt;
&lt;br /&gt;
 sys[350] až sys[381]   &lt;br /&gt;
          01 i R   čidlo 1 až 32 - aktuální stav/chyba čidla v okamžiku čtení tohoto sys[]&lt;br /&gt;
                    == 0  : default, čidlo neexistuje, nic nevim (stav ihned po zapnutí, popř. trvale pro prázdnou pozici)&lt;br /&gt;
                    == 2  : vše ok, komunikuje, odpovidá, právě byl získán výsledek&lt;br /&gt;
                    == 4  : ví se jen že existuje (byl získán ROMCODE) (obvykle dočasný stav po spuštění zařízení)&lt;br /&gt;
                    == 8  : začal další převod, čidlo je OK, komunikuje (správný stav)&lt;br /&gt;
                    == 16 : nepovedlo se začít nový převod, CHYBA (obvykle fyzický problém se sběrnicí)&lt;br /&gt;
                    == 32 : bylo přijato neplatné CRC, chyba (obvykle fyzický problém se sběrnicí)&lt;br /&gt;
&lt;br /&gt;
 sys[382] až [389]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[391] až sys[422]  &lt;br /&gt;
          01 s R   uživatelský textový název pro čidlo 1 až 32 (nastaveno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
''' Reserved ''' &lt;br /&gt;
&lt;br /&gt;
 sys[423] až sys[430]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vstupy: analogové vstupy pro měření napětí ==&lt;br /&gt;
&lt;br /&gt;
Všechny vstupy měří napětí vůči společné svorce (GND). Změřená hodnota je vždy k dispozici nejprve jako surová (raw) digitální hodnota, a poté ji SDS přepočítá dle uživatelského nastavení a také dá k dispozici.&lt;br /&gt;
&lt;br /&gt;
 sys[431] 01 i R   RAW hodnota A/D převodu ze vstupu AD1&lt;br /&gt;
 sys[432] 01 i R   RAW hodnota A/D převodu ze vstupu AD2&lt;br /&gt;
 sys[433] 01 i R   RAW hodnota A/D převodu ze vstupu AD3&lt;br /&gt;
 sys[434] 01 i R   RAW hodnota A/D převodu ze vstupu AD4&lt;br /&gt;
&lt;br /&gt;
RAW (surová) hodnota je digitální číslo, poskytnuté z interního A/D převodníku, s tím, že mu už SDS současně (pouze a jenom) odečetl uživatelem nastavený offset.&lt;br /&gt;
&lt;br /&gt;
Rozsah hodnoty RAW je: &lt;br /&gt;
* SDS-MICRO-LM, SDS-MACRO-LM, SDS-UPS-ONEDPS: 0..1023 (10bit rozlišení)&lt;br /&gt;
* SDS-MINI a všechny varianty SDS ST: 0..4095 (12bit rozlišení)&lt;br /&gt;
&lt;br /&gt;
Všechny převodní konstanty A/D, nastavené ve webovém rozhraní (viz admin stránka):&lt;br /&gt;
&lt;br /&gt;
 sys[435] 01 i R   Offset pro A/D 1  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[436] 01 i R   Div pro A/D 1&lt;br /&gt;
 sys[437] 01 s R   textový název A/D 1&lt;br /&gt;
 sys[438] 01 s R   jednotka A/D 1&lt;br /&gt;
&lt;br /&gt;
 sys[439] 01 i R   Offset pro A/D 2  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[440] 01 i R   Div pro A/D 2&lt;br /&gt;
 sys[441] 01 s R   textový název A/D 2&lt;br /&gt;
 sys[442] 01 s R   jednotka A/D 2&lt;br /&gt;
&lt;br /&gt;
 sys[443] 01 i R   Offset pro A/D 3  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[444] 01 i R   Div pro A/D 3&lt;br /&gt;
 sys[445] 01 s R   textový název A/D 3&lt;br /&gt;
 sys[446] 01 s R   jednotka A/D 3&lt;br /&gt;
&lt;br /&gt;
 sys[447] 01 i R   Offset pro A/D 4  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[448] 01 i R   Div pro A/D 4&lt;br /&gt;
 sys[449] 01 s R   textový název A/D 4&lt;br /&gt;
 sys[450] 01 s R   jednotka A/D 4&lt;br /&gt;
&lt;br /&gt;
'''Pozor!''' Hodnoty pro jednotlivé A/D vstupy (tj. Raw Hodnoty v sys[431 až 434]) '''už mají odečtený Offset''' (je to provedeno uvnitř firmware už při zpracovávání A/D převodu) ! &lt;br /&gt;
Proto Offset už ve svém SDS-C programu z Raw hodnot neodečítejte (bylo by to odečítáno podruhé). Pro přepočet z Raw na finální hodnotu vám zbývá (správně) použít jen &amp;quot;Div&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Poznámka: zařízení SDS-MINI (a další z řady SDS ST) už mohou mít text v položce &amp;quot;jednotka A/D x&amp;quot; delší než jeden znak (na rozdíl od původního SDS-MICRO-LM atd., kde to bylo omezeno na jeden jediný znak).&lt;br /&gt;
&lt;br /&gt;
''' Reserved '''&lt;br /&gt;
&lt;br /&gt;
 sys[451] až sys[458]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné pro S0 impulsní vstup ==&lt;br /&gt;
&lt;br /&gt;
 sys[459] 01 i RW  stav tarifu &lt;br /&gt;
                    == 0 : T0 (vysoký tarif)&lt;br /&gt;
                    == 1 : T1 (nízký tarif)&lt;br /&gt;
&lt;br /&gt;
 sys[460] až sys[492]  &lt;br /&gt;
          06 i RW  konfigurace - uživatelem nastavený (webové rozhraní) poměr MTD, pro vstup S0 [1] až [32],&lt;br /&gt;
                                 je-li MTD pro tento vstup použit (pokud není použit (přímé měření), má zde být 1 )&lt;br /&gt;
                    - příklad: pro MTD s poměrem 300A:5A je zapsaná hodnota 60&lt;br /&gt;
                    - pozor, nezapočítávejte vliv MTD do hodnoty imp./1kWh&lt;br /&gt;
                    - pozor, některé elektroměry mají MTD už započítané do vlastní impulsní konstanty, &lt;br /&gt;
                             pak sem v takovém případě nastavte číslo 1&lt;br /&gt;
                    - platné hodnoty: 1 až 65280 (včetně)&lt;br /&gt;
 &lt;br /&gt;
 sys[493] až sys[525]  &lt;br /&gt;
          01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T0&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).&lt;br /&gt;
 &lt;br /&gt;
 sys[526] až sys[558]  &lt;br /&gt;
          01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T1&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).&lt;br /&gt;
 &lt;br /&gt;
 sys[559] až sys[591]  &lt;br /&gt;
          01 i RW  konfigurace - uživatelem nastavené přepočtové konstanty S0: počet imp./1kWh (z webového rozhraní)&lt;br /&gt;
                    - pozor, tato hodnota platí pro samotný elektroměr, není to hodnota ve které je započítán vliv MTD&lt;br /&gt;
                    - pozn. v případě, že měřícím prvkem není elektroměr ale jiný přístroj, bude zde odpovídající&lt;br /&gt;
                      jiná konfigurační hodnota (např. vodoměr: počet imp./m^3).&lt;br /&gt;
 &lt;br /&gt;
 sys[592] až sys[624]  &lt;br /&gt;
          01 i R   změřená časová vzdálenost mezi dvěmi nejposlednějšími zachycenými impulsy na S0 vstupu (aktuální impuls a předchozí impuls)&lt;br /&gt;
                    - měřeno v msec&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).&lt;br /&gt;
 &lt;br /&gt;
 sys[625] až sys[657]  &lt;br /&gt;
          01 i R   změřený čas od úplně posledního impulsu zachyceného na S0 vstupu, tzn. &amp;quot;doba bez impulsu&amp;quot; nebo také &amp;quot;doba od posledního impulsu&amp;quot;&lt;br /&gt;
                    - měřeno v msec&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).&lt;br /&gt;
&lt;br /&gt;
poznámka: tarif T0 a tarif T1 závisí na uživatelem zvoleném externím signálu (přeneseno do sys[459]), viz informace na stránce ohledně [[S0]]. Celková hodnota impulsů je samozřejmě součtem těchto dvou impulsních akumulátorů. Pokud není tarifní rozlišení využito, je vše zapisováno do akumulátoru pro T0. &lt;br /&gt;
&lt;br /&gt;
poznámka: časová vzdálenost mezi impulsy se používá pro výpočet aktuálního výkonu (popř. průtoku atd. dle použitého měřiče) - můžete toho využít ve svém SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
poznámka: &amp;quot;Poměr MTD&amp;quot; zahrnuje všechny měřící transformátory (MTD), předřazené elektroměru (pouze pokud to už není započítáno v impulsní konstantě). Pokud je S0 vstup využit pro jiný typ měřiče (vodoměr a podobné), kde je připojení MTD nesmysl, tak se v konfiguraci musí do této položky nastavit hodnota 1. Samozřejmě jde s určitou výhodou použít i jinou konfiguraci, protože tato hodnota je použita jako &amp;quot;druhý dělitel&amp;quot; u výpočtu počtu S0 impulsů na velikost kroku energetické jednotky. Určení této hodnoty pro jiné měřiče sleduje stejné matematické postupy jako určení této hodnoty pro elektroměr s předřazeným MTD, jen jednotky budou samozřejmě jiné.&lt;br /&gt;
&lt;br /&gt;
 sys[658] až sys[670]  reserved for future use&lt;br /&gt;
&lt;br /&gt;
poznámka: další sys[] indexy pro S0 vstupy jsou uvedeny ještě dále v tomto celém seznamu (dole na stránce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální vstupy a výstupy ==&lt;br /&gt;
&lt;br /&gt;
Toto je funkce dostupná jen na omezeném rozsahu výrobků SDS.&lt;br /&gt;
&lt;br /&gt;
'''Pouze pro SDS MICRO (LM) LIGHT:'''&lt;br /&gt;
&lt;br /&gt;
 sys[671] 02 i W   zápis na pin M4 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)&lt;br /&gt;
 sys[672] 02 i W   zápis na pin M5 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)&lt;br /&gt;
 sys[673] 02 i W   zápis na pin B1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)&lt;br /&gt;
 sys[674] 02 i W   zápis na pin A1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)&lt;br /&gt;
&lt;br /&gt;
Tyto zmíněné čtyři ''sys[]'' jsou dostupné '''pouze''' na modulu SDS MICRO '''LIGHT''' popř. '''DIN''', a to jen s verzí firmware 9.1.2011 nebo novější.&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT s pamětí EEPROM: k dispozici jsou všechny čtyři výstupy.&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT 2 s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MICRO DIN: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MACRO LM, SDS MICRO ST, SDS MACRO ST, SDS UPS, SDS IO6, SDS IO6 ST, SDS TTCPRO, SDS MINI: tyto výstupy '''nejsou k dispozici'''.&lt;br /&gt;
&lt;br /&gt;
Vše to jsou logické výstupy, s CMOS 3V3 logickými úrovněmi (pro obecné použití je externí pull-up 47kOhm nutný). Lze to použít především pro ovládání BSS138 MOSFETů, např. pro spínání dalších relé (v případě použití BSS138 nedávejte externí pull-up, ale naopak dejte pull-down na GND o hodnotě 47kOhm).&lt;br /&gt;
&lt;br /&gt;
'''Pouze pro SDS MACRO ST:'''&lt;br /&gt;
&lt;br /&gt;
Alternativa k sys[301]. Hodnota odpovídá logické úrovni na daném vstupu TL1 (TL2). Při osazené desce MACRO-ST-LCD jsou na tyto vstupy připojeny tlačítka (pak při stisku TL1, TL2 je zde hodnota 0, v klidu 1).&lt;br /&gt;
&lt;br /&gt;
 sys[671] 02 i R   čtení stavu TL1&lt;br /&gt;
 sys[672] 02 i R   čtení stavu TL2&lt;br /&gt;
&lt;br /&gt;
'''Pájecí plošky CFG:'''&lt;br /&gt;
&lt;br /&gt;
Zkratovací CFG plošky jsou k dispozici jen pro SDS TTCPRO. Vhodné pro pevnou konfiguraci uživatelem.&lt;br /&gt;
&lt;br /&gt;
V současné době není k dispozici firmware, které přenáší hodnotu z pájecích plošek (CFG1, CFG2) do ''sys[]''.&lt;br /&gt;
Ploška CFG1 je vyhrazena pro vnitřní použítí samotného firmware SDS, a ploška CFG2 bude eventuálně uvolněna pro libovolné použití uživatelem (čtení z SDS-C).&lt;br /&gt;
Takový firmware se teprve chystá (SDS TTCPRO).&lt;br /&gt;
&lt;br /&gt;
 sys[675] 07 i R   stav plošky CFG1 (zkratována = je zde 0)&lt;br /&gt;
 sys[676] 07 i R   stav plošky CFG2 (zkratována = je zde 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální proměnné pro SDS-UPS ==&lt;br /&gt;
&lt;br /&gt;
SDS UPS nabízí, kromě již zmíněných proměnných (viz výpis výše), i doplňkové proměnné, specifické pro tento výrobek. Tyto rozšířené systémové proměnné jsou k dispozici ve firmware od 25.4.2011 .&lt;br /&gt;
&lt;br /&gt;
SDS-UPS má všechny sys[0] až sys[699] shodné s SDS-MICRO. Rozdíl je samozřejmě v počtu a osazení periférií.&lt;br /&gt;
&lt;br /&gt;
Pokud nejste spokojeni s originálním nabíjecím algoritmem, máte možnost si ho celý naprogramovat sami v SDS-C: všechny potřebné vstupní a výstupní údaje (proměnné) jsou vám k dispozici. Popřípadě, pokud chcete jen sledovat situaci, můžete je také využít (např. pro logování nabíjecího a vybíjecího proudu akumulátoru a tak dále).&lt;br /&gt;
&lt;br /&gt;
 sys[700] 02 i R   reserved&lt;br /&gt;
 sys[701] 02 i R   reserved&lt;br /&gt;
 sys[702] 02 i R   reserved&lt;br /&gt;
 sys[703] 02 i R   reserved&lt;br /&gt;
&lt;br /&gt;
'''Přepínač algoritmů:'''&lt;br /&gt;
&lt;br /&gt;
 sys[704] 02 i RW  řízení nabíjení - hodnoty které lze zapsat:&lt;br /&gt;
                    == 0   : nabíjení je ovládáno pomocí firmware (výchozí chování výrobku)&lt;br /&gt;
                    == 345 : pouze nabíjení (a ne jiné funkce) jsou řízeny programem SDS-C (= chování programujete vy)&lt;br /&gt;
                    == 824 : kompletní řízení (= volba funkce, nabíjení) je řízeno programem SDS-C&lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte vlastní (ruční) řízení, musíte trvale řídit nabíjení sami pomocí programu v SDS-C. Vlastní ovládání vejde v platnost zápisem čísla 345 nebo 824 do sys[704]. Tento zápis provedete pouze jednou na začátku programu, a dále pak musí trvale následovat váš algoritmus. &lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte 345, jediné co má váš program za úkol, je řídit samotný nabíjecí proces - toto je výhodné, když se nechcete zatěžovat hlídáním provozních stavů (tj. výpadek napájení atd.), což za vás v tomto režimu udělá původní firmware.&lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte 824, musíte sami kompletně řídit všechno chování UPS, tj. nejenom nabíjecí algoritmus, ale i detekce výpadku napájení, přepínání mezi stavy, indikační LED, a tak dále.&lt;br /&gt;
&lt;br /&gt;
 sys[705] až sys[731]  reserved&lt;br /&gt;
&lt;br /&gt;
Pro realizaci vlastního nabíjecího algoritmu potřebujete zpracovávat všechny vstupy a důsledně nastavovat všechy výstupy.&lt;br /&gt;
&lt;br /&gt;
Pokud váš program pouze sleduje činnost původního nabíjecího algoritmu, pak může samozřejmě všechny sys[] jen číst.&lt;br /&gt;
&lt;br /&gt;
'''Vstupy a konfigurace:'''&lt;br /&gt;
&lt;br /&gt;
 sys[732] 02 i R   surová hodnota z A/D převodu - hodnota 2.5V vstupu - odpovídá hodnotě proudu 0.0A&lt;br /&gt;
 sys[733] 02 i R   surová hodnota z A/D převodu - hodnota proudu do-z akumulátoru&lt;br /&gt;
 sys[734] 02 i R   surová hodnota z A/D převodu - hodnota proudu z primárního vstupu&lt;br /&gt;
 sys[735] 02 i R   surová hodnota z A/D převodu - hodnota napětí akumulátoru&lt;br /&gt;
 sys[736] 02 i R   surová hodnota z A/D převodu - hodnota napětí primárního vstupu&lt;br /&gt;
&lt;br /&gt;
Rozsah surových hodnot z A/D převodu je 0 až 4095. Lineárně to odpovídá příslušné měřené hodnotě. &lt;br /&gt;
Měření napětí má 0 na 0V a maximální hodnot (4095) na maximu rozsahu. &lt;br /&gt;
Měření proudu je specifické, protože měření ukazuje kladný i záporný proud, takže 0A je na hodnotě sys[732] (typicky 2047), všechno co je pod touto hodnotu je záporný proud, všechno nad je kladný proud. Znaménko proudu ukazuje, kam proud teče (např. záporný = vybíjení akumulátoru, atd.).&lt;br /&gt;
&lt;br /&gt;
 sys[737] až sys[739]  reserved&lt;br /&gt;
&lt;br /&gt;
Následuje konfigurace provedená uživatelem ve webovém rozhraní.&lt;br /&gt;
Hodnoty jsou přímo v rozmezí 0 až 4095, takže je lze PŘÍMO použít se surovými hodnotami z A/D převodu (tzn. zařízení se už postaralo o převod údajů zadaných uživatelem ve webovém rozhraní na tento formát). V důsledku je pak realizace algoritmu velmi snadná.&lt;br /&gt;
&lt;br /&gt;
 sys[740] 02 i R   primary voltage to say target is ok (pri_pvts)&lt;br /&gt;
 sys[741] 02 i R   primary zadany odpocet v msec (pri_pvat)&lt;br /&gt;
 sys[742] 02 i R   primary voltage to allow charging (at what voltage to allow chargin) (pri_fchg)&lt;br /&gt;
 sys[743] 02 i R   accu disconnect voltage level (at what voltage to disconnect accu) (aku_avdv)&lt;br /&gt;
 sys[744] 02 i R   accu target voltage when charging (when to switch to CV) (aku_avcd)&lt;br /&gt;
 sys[745] 02 i R   accu target current when charging (constant current when in CC) (aku_accc)&lt;br /&gt;
 sys[746] 02 i R   target charging voltage (final voltage on accu when fully charged)&lt;br /&gt;
 sys[747] 02 i R   flag: do not answer ping when primary gone (pri_ping)&lt;br /&gt;
 sys[748] 02 i R   flag: do not switch accu off (aku_dach)&lt;br /&gt;
&lt;br /&gt;
Hodnoty sys[740] až sys[748] jsou konfigurační údaje (uživatel je změnil přes webové rozhraní, a tím se uložili do pevné paměti, takže vydrží reset nebo vypnutí zařízení). Pokud do nich v SDS-C programu zapíšete, tato nová zapsaná hodnota zůstane platná až do resetu nebo vypnutí, nebo do ručního přepsání uživatelem (ve webovém rozhraní). Zápis do těchto konkrétních sys[] nezpůsobí uložení nových hodnot do pevné paměti.&lt;br /&gt;
&lt;br /&gt;
 sys[749] až sys[760]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Výstupy:'''&lt;br /&gt;
&lt;br /&gt;
Tyto '''všechny''' výstupy musíte správně ovládat po celou dobu, co bude zařízení SDS UPS zapnuto !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 sys[761] 02 i RW  ovládání vypínání nabíječe&lt;br /&gt;
                    == 0 : nabíječ v provozu (zapnuto = nabíjí se, regulujte jiným sys[])&lt;br /&gt;
                    != 0 : nabíječ mimo provoz (vypnuto = nenabíjí se)&lt;br /&gt;
 &lt;br /&gt;
 sys[762] 02 i RW  ovládání posunu rozsahu regulace nabíječe &lt;br /&gt;
                    == 0 : bez zásahu do zpětné vazby (původní regulační rozsah)&lt;br /&gt;
                    != 0 : zásah do zpětné vazby (posun rozsahu)&lt;br /&gt;
                           (vhodné pro skokové zvýšení výstupního napětí nabíječe, &lt;br /&gt;
                            když už nereaguje v původním rozsahu)&lt;br /&gt;
 &lt;br /&gt;
 sys[763] 02 i RW  ovládání odpojovače baterie &lt;br /&gt;
                    == 0 : spínač vypnutý (baterie odpojena od zátěže)&lt;br /&gt;
                    != 0 : spínač sepnutý (baterie připojena)&lt;br /&gt;
 &lt;br /&gt;
 sys[764] 02 i RW  indikační LED - nabíjení akumulátoru&lt;br /&gt;
                    == 0 : LED svítí (informace: akumulátor je nabíjen)&lt;br /&gt;
                    != 0 : LED nesvítí (informace: akumulátor není nabíjen)&lt;br /&gt;
 &lt;br /&gt;
 sys[765] 02 i RW  indikační LED - výpadek primárního vstupu&lt;br /&gt;
                    == 0 : LED svítí (informace: napětí primárního vstupu pod dolním limitem)&lt;br /&gt;
                    != 0 : LED nesvítí (informace: primární vstup má napětí vyšší než je dolní limit)&lt;br /&gt;
&lt;br /&gt;
'''Řízení nabíjení:''' Je potřeba správně regulovat pomocí následujícího výstupu:&lt;br /&gt;
&lt;br /&gt;
 sys[766] 02 i RW  přímé řízení nabíjecího bloku (výstup vaší regulace sem - hodnota řídí nabíječ)&lt;br /&gt;
                    - minimální hodnota = 1&lt;br /&gt;
                    - maximální hodnota = 2497&lt;br /&gt;
&lt;br /&gt;
 sys[767] až sys[769]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Následující údaje jsou určeny pro '''zobrazování na webovém rozhraní''':&lt;br /&gt;
&lt;br /&gt;
 sys[770] 02 i RW  provozní režim: vždy jedno z UPS_PROVOZ_xxx&lt;br /&gt;
 &lt;br /&gt;
 sys[771] 02 i RW  nabíjecí režim: vždy jedno z UPS_NABREZIM_xxx&lt;br /&gt;
 &lt;br /&gt;
 sys[772] 02 i RW  výsledek odhadu stavu baterie: vždy jedno z UPS_BATERIE_ODHAD_xxx&lt;br /&gt;
&lt;br /&gt;
Konstanty pro zápis (je to potřeba dodržet, protože se to přímo zobrazuje na webovém rozhraní):&lt;br /&gt;
&lt;br /&gt;
 UPS_PROVOZ_START            0&lt;br /&gt;
 UPS_PROVOZ_PRIOK            1&lt;br /&gt;
 UPS_PROVOZ_PRIOK_CHARGING   2&lt;br /&gt;
 UPS_PROVOZ_ONLY_BATT        4&lt;br /&gt;
 UPS_PROVOZ_NO_BATT          8&lt;br /&gt;
 &lt;br /&gt;
 UPS_NABREZIM_CC             0&lt;br /&gt;
 UPS_NABREZIM_CV             2&lt;br /&gt;
 UPS_NABREZIM_PAUZA          4&lt;br /&gt;
 UPS_NABREZIM_URCENI_REZIMU  8&lt;br /&gt;
 &lt;br /&gt;
 UPS_BATERIE_ODHAD_NEZNAM            0&lt;br /&gt;
 UPS_BATERIE_ODHAD_MOC_NIZKE_NAPETI  1&lt;br /&gt;
 UPS_BATERIE_ODHAD_OK_NABIJIM        2&lt;br /&gt;
 UPS_BATERIE_ODHAD_PLNE_NABITO       4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výsledky z 1-Wire sensoru vlhkosti (T/RH) SDS-1W-T-RH ==&lt;br /&gt;
&lt;br /&gt;
Připojené moduly [[SDS_1W_T-RH]] jsou připojeny na 1-W sběrnici, a mají v sobě chip, který měří hodnotu ze sensoru vlhkosti (který je současně umístěn na modulu SDS-1W-T-RH) a současně měří i teplotu a napájecí napětí pro sensor vlhkosti. &lt;br /&gt;
SDS interně provádí výpočet relativní vlhkosti (RH) pomocí kompenzační rovnice, určené výrobcem sensoru vlhkosti.&lt;br /&gt;
&lt;br /&gt;
K dispozici jsou jak surové hodnoty (změřené v rámci modulu SDS-1W-T-RH), tak i hodnota kompenzované (skutečné) relativní vlhkosti v místě umístění modulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Změřená teplota je uložena na standardních indexech:&lt;br /&gt;
&lt;br /&gt;
 sys[310] až sys[341]   &lt;br /&gt;
          01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 degC&lt;br /&gt;
&lt;br /&gt;
Dále jsou k dispozici surové hodnoty, nutné pro výpočet hodnoty RH (Relative Humidity):&lt;br /&gt;
&lt;br /&gt;
 sys[800] až sys[831]   &lt;br /&gt;
          08 i R   hodnota údaje (napětí Vad = výstupu čidla RH) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 V&lt;br /&gt;
&lt;br /&gt;
 sys[832] až sys[863]   &lt;br /&gt;
          08 i R   hodnota údaje (napětí Vdd = napájení čidla RH) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 V&lt;br /&gt;
&lt;br /&gt;
SDS provádí přepočet na údaj RH v procentech (0 až 100):&lt;br /&gt;
&lt;br /&gt;
 sys[864] až sys[895]   &lt;br /&gt;
          08 i R   hodnota RH (0 až 100, v procentech RH) kompenzovaná podle rovnice pro čidlo HIH-503x (výpočet z Vad, kompenzace na Vdd a Temp).&lt;br /&gt;
&lt;br /&gt;
Rezerva (zatím nepoužito):&lt;br /&gt;
&lt;br /&gt;
 sys[896] až sys[899]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Doplňující informace pro 1-Wire zařízení ==&lt;br /&gt;
&lt;br /&gt;
1-Wire sběrnice u zařízení SDS umožňuje komunikaci s celou řadů 1-W chipů: [[OneWire|seznam je zde]]. Přístup k chipům na 1-W sběrnici se liší na dva typy: chipy (čidla) které si SDS interně zpracuje (např. měření teploty), a všechny ostatní chipy (které SDS jen umí vyhledat a oznámit, ale dále s nimi nekomunikuje).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1-Wire chipy interně zpracovávané SDS'''&lt;br /&gt;
&lt;br /&gt;
Tyto chipy jsou plně automaticky obsluhovány prostřednictvím firmware SDS - není potřebná opakovaná intervence uživatele, ten si pouze čte stále aktuální výsledky měření teplot z jednotlivých čidel.&lt;br /&gt;
&lt;br /&gt;
Poznámka: Pro změřené hodnoty z 1-W čidel teplot, jsou k dispozici tyto indexy: '''sys[310]''' až '''sys[430]''', a '''sys[900]''' až '''sys[931]'''.&lt;br /&gt;
&lt;br /&gt;
K dispozici je textové vyjádření (hex znaky) ROM CODE hodnoty načtené pro danou pozici zpracovávaného chipu na 1-W sběrnici.&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS mohou mít jednu [A] nebo dvě ( nezávislé, [A] a [B] ) 1-Wire sběrnice, a každá sběrnice má maximálně 16 připojených chipů.&lt;br /&gt;
Jednotlivé platné ROM CODE jsou v ''sys[]'' uloženy za sebou, viz výpis:&lt;br /&gt;
&lt;br /&gt;
 sys[900] 06 s RW  ROM CODE pro první chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[901] 06 s R   ROM CODE pro druhý chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
A tak dále až&lt;br /&gt;
&lt;br /&gt;
 sys[915] 06 s R   ROM CODE pro šestnáctý chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
Následuje sběrnice [B], je-li přítomná v daném zařízení (dostupné pouze pro SDS-MACRO):&lt;br /&gt;
&lt;br /&gt;
 sys[916] 06 s R   ROM CODE pro první chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
A tak dále . . . až&lt;br /&gt;
&lt;br /&gt;
 sys[931] 06 s R   ROM CODE pro šestnáctý chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
'''Pozor''': pokud sběrnice [B] v zařízení není, tak sys[916] až sys[931] vrátí znak '-'.&lt;br /&gt;
&lt;br /&gt;
Tak jak jsou jednotlivé ROM CODE viditelné ve webové administraci, tak jsou tedy dostupné i přes sys[] položky.&lt;br /&gt;
&lt;br /&gt;
Poznámka: ROM CODE pro 1-W chipy jsou k dispozici pouze jako ucelené texty (string). Bajtový rozpad jednotlivých položek není k dispozici.&lt;br /&gt;
&lt;br /&gt;
 sys[931] až sys[939]  reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ostatní 1-Wire chipy'''&lt;br /&gt;
&lt;br /&gt;
Pro ostatní 1-W chipy, které SDS &amp;quot;nezná&amp;quot; (tzn. nekomunikuje s nimi, jen je umí na sběrnici vyhledat), jsou jejich ROM CODE odděleny do samostatných '''sys[]''' položek.&lt;br /&gt;
&lt;br /&gt;
Čtení ostatních 1-W chipů se spouští v rámci SDS-C programu, který musí zavolat příslušnou SDS-C funkci. &lt;br /&gt;
Na základě zavolání této funkce dojde k vynulování všech příslušných '''sys[]''' (od indexu 940 resp. 970) pro danou sběrnici, a provede se pokus o přečtení připojeného chipu.&lt;br /&gt;
Pokud se to povede, bude nalezený ROM CODE (spolu s časovou značkou okamžiku přečtení) vložen do příslušných '''sys[]''', &lt;br /&gt;
nebo bude nastaven chybový kód.&lt;br /&gt;
&lt;br /&gt;
Pozor, k SDS lze připojit více různých &amp;quot;ostatních&amp;quot; chipů, ale zdejší funkce najde jenom ten první z nich a ostatní už ignoruje. &lt;br /&gt;
Ostatní chipy lze samozřejmě připojit na kteroukoliv sběrnici, i když na ní jsou připojeny i chipy se kterými SDS komunikuje (např. teploměrné chipy).&lt;br /&gt;
&lt;br /&gt;
Jednotlivé chipy se rozlišují pomocí hodnoty ''ID family-code'' (jeden bajt). Pro chip DS1990A je ''0x01'', hodnoty pro jiné chipy viz datasheet výrobce pro konkrétní chip.&lt;br /&gt;
&lt;br /&gt;
Obecný stav sběrnic:&lt;br /&gt;
&lt;br /&gt;
 sys[940] 06 i R   Stav 1-W sběrnice '''[A]''' pro rescan ostatních 1-W chipů&lt;br /&gt;
 sys[941] 06 i R   Stav 1-W sběrnice '''[B]''' pro rescan ostatních 1-W chipů&lt;br /&gt;
 :&lt;br /&gt;
                    == 0  : ještě nebylo provedeno jediné/jakékoliv čtení ostatních chipů na 1-W sběrnici&lt;br /&gt;
 &lt;br /&gt;
                    == 1  : došlo k chybě: nebylo dokončeno předchozí čtení sběrnice&lt;br /&gt;
                            (nesmíte požadovat nové čtení, dokud se plně neprovedlo to poslední)&lt;br /&gt;
 &lt;br /&gt;
                    == 2  : probíhá čtení ROM CODE z připojeného ostatního chipu&lt;br /&gt;
                            (dokud se toto nedokončí, nelze provést opětovný požadavek na další rescan/čtení)&lt;br /&gt;
 &lt;br /&gt;
                    == 4  : nebyl nalezen jakýkoliv ostatní chip (s odpovídajícím Family Code byte)&lt;br /&gt;
 &lt;br /&gt;
                    == 8  : byl přečten ROM CODE z připojeného ostatního chipu&lt;br /&gt;
                            (už lze také požádat o další nové čtení 1-W sběrnice)&lt;br /&gt;
 &lt;br /&gt;
                    == 16 : došlo k chybě: nepovedlo se přečíst data po 1-W sběrnici &lt;br /&gt;
                            (zkuste provést rescan/čtení znovu)&lt;br /&gt;
&lt;br /&gt;
 sys[942] až sys[949]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Pro sběrnici [A]:'''&lt;br /&gt;
&lt;br /&gt;
 sys[950] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire&lt;br /&gt;
                   (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).&lt;br /&gt;
                    - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),&lt;br /&gt;
                      a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze '''sys[3]'''&lt;br /&gt;
&lt;br /&gt;
 sys[951] 06 s R   celý text ROM CODE:&lt;br /&gt;
                    - ROM CODE pro chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[952] až sys[959]: bajtový rozpad ROM CODE pro chip na [A] sběrnici 1-Wire&lt;br /&gt;
 :&lt;br /&gt;
 sys[952] 06 i R   romcode[0] (1-W: ID family-code byte)&lt;br /&gt;
 sys[953] 06 i R   romcode[1] (1-W: serial code)&lt;br /&gt;
 sys[954] 06 i R   romcode[2] (1-W: serial code)&lt;br /&gt;
 sys[955] 06 i R   romcode[3] (1-W: serial code)&lt;br /&gt;
 sys[956] 06 i R   romcode[4] (1-W: serial code)&lt;br /&gt;
 sys[957] 06 i R   romcode[5] (1-W: serial code)&lt;br /&gt;
 sys[958] 06 i R   romcode[6] (1-W: serial code)&lt;br /&gt;
 sys[959] 06 i R   romcode[7] (1-W: CRC byte)&lt;br /&gt;
&lt;br /&gt;
 sys[960] až sys[969]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Pro sběrnici [B]:'''&lt;br /&gt;
&lt;br /&gt;
 sys[970] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire&lt;br /&gt;
                   (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).&lt;br /&gt;
                    - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),&lt;br /&gt;
                      a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze '''sys[3]'''&lt;br /&gt;
&lt;br /&gt;
 sys[971] 06 s R   celý text ROM CODE:&lt;br /&gt;
                    - ROM CODE pro chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[972] až sys[979]: bajtový rozpad ROM CODE pro chip na [B] sběrnici 1-Wire&lt;br /&gt;
 :&lt;br /&gt;
 sys[972] 06 i R   romcode[0] (1-W: ID family-code byte)&lt;br /&gt;
 sys[973] 06 i R   romcode[1] (1-W: serial code)&lt;br /&gt;
 sys[974] 06 i R   romcode[2] (1-W: serial code)&lt;br /&gt;
 sys[975] 06 i R   romcode[3] (1-W: serial code)&lt;br /&gt;
 sys[976] 06 i R   romcode[4] (1-W: serial code)&lt;br /&gt;
 sys[977] 06 i R   romcode[5] (1-W: serial code)&lt;br /&gt;
 sys[978] 06 i R   romcode[6] (1-W: serial code)&lt;br /&gt;
 sys[979] 06 i R   romcode[7] (1-W: CRC byte)&lt;br /&gt;
&lt;br /&gt;
 sys[980] až sys[989]  reserved&lt;br /&gt;
&lt;br /&gt;
Všimněte si, že SDS v tuto chvíli umožňuje pouze rescan 1-W sběrnice, kdy hledá pouze '''jeden''' připojený &amp;quot;ostatní 1-W chip&amp;quot; (ten první na který narazí, ten ohlásí, a nehledá dále). &lt;br /&gt;
&lt;br /&gt;
'''Pozor''':&lt;br /&gt;
&lt;br /&gt;
Pokud je takových chipů připojeno na sběrnici více, popř. pokud jsou smíchány s &amp;quot;teploměrnými&amp;quot; chipy, &lt;br /&gt;
bude při tomto rescanu uveden pouze první nalezený ostatní chip (tj. ten, který má nejnižší ROM-CODE ze všech připojených ostatních chipů).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[990] až sys[1023]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální položky jen pro SDS-MACRO-LM a SDS-MACRO-ST ==&lt;br /&gt;
&lt;br /&gt;
'''Přímý přístup do LCD Frame Buffer paměti:'''&lt;br /&gt;
&lt;br /&gt;
 sys[1024] až sys[1551]   LCD buffer (dostupné jen pro SDS MACRO LM a SDS MACRO ST !)&lt;br /&gt;
          01 i RW  každý index v rámci tohoto rozsahu sys[] lze zapisovat i číst&lt;br /&gt;
                   - jedná se o pole 528 bajtů (4 řádky x 132 sloupců)&lt;br /&gt;
                   - každý bajt pole obsluhuje přesně danou oblast (několika pixelů) LCD displaye&lt;br /&gt;
                   - platné hodnoty pro každý index : 0 až 255 včetně  - zapisujte a čtěte jen hodnoty 0 až 255 (včetně)&lt;br /&gt;
&lt;br /&gt;
Tyto položky jsou dosupné '''pouze a jenom''' na SDS-MACRO-LM kde je vyžadován firmware od 24.11.2016 nebo novější, a na SDS-MACRO-ST (všechny FW verze).&lt;br /&gt;
&lt;br /&gt;
Jakékoliv změny (zápis) se promítnou pouze do frame bufferu (tedy v paměti SDS) - ale aby se následně tento frame buffer (jeho změněný obsah) eventuálně vykreslil na LCD, je potřeba zavolat příslušnou SDS-C funkci !&lt;br /&gt;
&lt;br /&gt;
Čtení ze sys poskytuje přímý přístup do frame bufferu (jeho aktuální obsah, tedy opět ne nutně to co je právě vidět na LCD).&lt;br /&gt;
&lt;br /&gt;
Pokud nepoužíváte LCD (sandwich desku), můžete tuto oblast 528 bajtů využít pro jakékoliv své účely. V podstatě se pak jedná o rozšiřující RAM pamět pro váš SDS-C program.&lt;br /&gt;
&lt;br /&gt;
'''Pozor''' SDS-MACRO-ST&lt;br /&gt;
&lt;br /&gt;
SDS MACRO ST provádí automatické aktualizace (zápis) do LCD bufferu, pokud se o tento buffer nepřihlásí SDS-C program. Proto, pokud na MACRO-ST chcete využít LCD buffer pro jiné své účely, musíte to nejprve SDS říct. Znovu, toto platí jen pro MACRO-ST - ''není to potřeba pro MACRO-LM (které tam po zapnutí nahraje logo a pak už na buffer za běhu nesáhne)''. Pro MACRO-ST zavolejte kteroukoliv SDS-C funkci pro přístup na display (např. clear) a je to - tím se přepne vlastnictví LCD bufferu pro SDS-C program.&lt;br /&gt;
&lt;br /&gt;
== Vyhrazená oblast ==&lt;br /&gt;
&lt;br /&gt;
'''Zbytek:'''&lt;br /&gt;
&lt;br /&gt;
 sys[1552] až sys[1663]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bateriově Zálohovaná Paměť ==&lt;br /&gt;
&lt;br /&gt;
'''POUZE PRO: SDS-TTCPRO a SDS-MINI a SDS-MICRO-ST a SDS-MACRO-sT a SDS-IO6-ST !''' (tedy ty s baterií) - všechny jiné SDS První Řady tyto specifické indexy v sys[] nemají k dispozici!&lt;br /&gt;
&lt;br /&gt;
Pozor! Tato funkce vyžaduje FW od 18.8.2017 a nebo novější. &lt;br /&gt;
&lt;br /&gt;
 sys[1664] až sys[1791]   (pouze pro SDS TTCPRO a SDS MINI a SDS MICRO-ST a SDS MACRO-ST a SDS IO6-ST)&lt;br /&gt;
          07 i RW  sada 128 samostatných pozic v zálohované paměti RAM, pro ukládání libovolných hodnot&lt;br /&gt;
                    - každý index má k dispozici 32 bitů (tj. celý signed integer)&lt;br /&gt;
                    - čtení a zápis je rychlé (je to v RAM, takže se nemusí čekat jako při práci s DF)&lt;br /&gt;
                    - lze použít nezávisle (lze přístupovat ke kterékoliv položce &amp;quot;na přeskáčku&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Pozor! Oblast záložní paměti je k dispozici pouze na vybraných zařízeních SDS (ty, které mají osazenu baterii pro tyto účely). Údaje se nesmazají změnou programu (nahráním nového programu), ani se nesmazají resetem zařízení (kromě aktivace RSTD - pozor!), tzn. vydrží a zůstanou, a to dokonce i po celou dobu výpadku externího napájení (tak dlouho, dokud se nevybije záložní baterie).&lt;br /&gt;
&lt;br /&gt;
''(Pouze) pokud baterie v daném SDS není'': tak jsou údaje ztraceny po výpadku napájení (ale po dobu přítomnosti externího napájení jsou k dispozici). Při takové situaci není zaručen obsah těchto dat po zapnutí (měl by být nulový, ale bez záruky).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Další informace ze S0 vstupů ==&lt;br /&gt;
&lt;br /&gt;
Následující položky jsou k dispozici pro všechny SDS První Produktové Řady.&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. 07 jsou přidány tyto systémové proměnné:&lt;br /&gt;
&lt;br /&gt;
 sys[1792] až sys[1823]  &lt;br /&gt;
          07 i R   cena za jednotku v režimu T0&lt;br /&gt;
                    - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)&lt;br /&gt;
 &lt;br /&gt;
 sys[1824] až sys[1855]  &lt;br /&gt;
          07 i R   cena za jednotku v režimu T1&lt;br /&gt;
                    - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)&lt;br /&gt;
 &lt;br /&gt;
 sys[1856] až sys[1887]  &lt;br /&gt;
          07 s R   název jednotky se vztahem k času, podle nastavení (např. text &amp;quot;kWh&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1888] až sys[1919]&lt;br /&gt;
          07 s R   název měny, podle nastavení (např. text &amp;quot;CZK&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1920] až sys[1951]  &lt;br /&gt;
          07 s R   název jednotky bez vztahu k času, podle nastavení (např. text &amp;quot;kW&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1952] až sys[1983]  &lt;br /&gt;
          07 s R   název činnosti, podle nastavení (např. text &amp;quot;spotřeba&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1984] až sys[2015]  &lt;br /&gt;
          07 s R   název měřiče, podle nastavení (např. text &amp;quot;elektroměr č. 1&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[2016] až sys[2047]  &lt;br /&gt;
          07 i R   konfigurační detaily pro daný S0 vstup&lt;br /&gt;
                    - bit 0 nastaven = je to aktivní S0 vstup&lt;br /&gt;
                    - bit 1 nastaven = tento S0 vstup je rozdělen na dvoutarif T0/T1 (jinak je to jedno-tarif)&lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro využití těchto systémových proměnných, potřebujete mít v SDS aktuální firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[2048] až sys[2197]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT klient ==&lt;br /&gt;
&lt;br /&gt;
Vždy si zjistěte, jestli máte v SDS takové FW, které podporuje funkci MQTT klient:&lt;br /&gt;
&lt;br /&gt;
 sys[2199] 09 i R   podpora MQTT&lt;br /&gt;
                     0 = NE&lt;br /&gt;
                     1 = ANO, verze MQTT 3.1.1, SDS první část implementace&lt;br /&gt;
                     2..max = (reserved)&lt;br /&gt;
&lt;br /&gt;
Každé nové připojení k Brokeru:&lt;br /&gt;
&lt;br /&gt;
 sys[2200] 09 i R   stav průběhu mqtt_connect()&lt;br /&gt;
                     -7 = obdrželi jsme CONNACK, ale negativní = nepřipojeno ( výsledek viz sys[2201] )&lt;br /&gt;
                     -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = pokus o TCP připojení selhal&lt;br /&gt;
                     -1 = nepoužito&lt;br /&gt;
                      0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                      1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                      2 = TCP připojeno a odeslán CONNECT požadavek&lt;br /&gt;
                      4 = obdrželi jsme CONNACK, připojeno ( výsledek viz sys[2201] )&lt;br /&gt;
                      8 = probíhá odpojování, čekáme na výsledek (na odpojení)&lt;br /&gt;
&lt;br /&gt;
Po zavolání mqtt_connect(...) je nutné testovat sys[2200] na výslednou hodnotu. Funkci mqtt_connect(...) nelze volat, je-li sys[2200] na hodnotě 1, 2, 8 nebo 16 (nejprve je v takových případech potřeba provést odpojení pomocí mqtt_disconnect() funkce). Pro úplný test, je-li připojení z SDS do Brokeru úplné, je potřeba ověřit i hodnotu v sys[2201]. Teprve pokud oba tyto sys jsou na správné hodnotě, lze s Brokerem komunikovat.&lt;br /&gt;
&lt;br /&gt;
 sys[2201] 09 i R   výsledek mqtt_connect() = hodnota &amp;quot;CONNACK Connect Return&amp;quot;&lt;br /&gt;
                     -7 = nepoužito&lt;br /&gt;
                     -6 = timeout při čekání na CONNACK, nepřipojeno&lt;br /&gt;
                     -5 = nepoužito&lt;br /&gt;
                     -4 = nepoužito&lt;br /&gt;
                     -3 = nepoužito&lt;br /&gt;
                     -2 = probíhá připojování, čekáme na CONNACK (zatím nepřišel)&lt;br /&gt;
                     -1 = idle, nepřipojeno&lt;br /&gt;
                      0 = (výsledek:) MQTT 0x00: broker akceptoval připojení - LZE POKRAČOVAT (provádět Publish, Subscribe)&lt;br /&gt;
                      1 = MQTT 0x01: Connection Refused, unacceptable protocol version&lt;br /&gt;
                      2 = MQTT 0x02: Connection Refused, identifier rejected&lt;br /&gt;
                      3 = MQTT 0x03: Connection Refused, Server unavailable&lt;br /&gt;
                      4 = MQTT 0x04: Connection Refused, bad user name or password&lt;br /&gt;
                      5 = MQTT 0x05: Connection Refused, not authorized&lt;br /&gt;
&lt;br /&gt;
Hodnotu v sys[2201] lze číst a zpracovat pouze pokud je sys[2200] na hodnotě 16 (to znamená, pouze pokud SDS obdrží odpověď CONNACK od MQTT brokera).&lt;br /&gt;
&lt;br /&gt;
Před a po každém volání mqtt_publish() a nebo mqtt_subscribe() funkcí je potřeba sledovat obsah následují položky:&lt;br /&gt;
&lt;br /&gt;
 sys[2202] 09 i R   výsledek pro tyto funkce: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
                     -8 = SUBACK dorazil z Broker ale s indikovanou chybou (Failure Bit), můžete volat další funkci&lt;br /&gt;
                     -7 = vybraná položka (řádek) subscribe tabulky je prázdná, není co odhlašovat&lt;br /&gt;
                     -6 = timeout (možnosti: publish neprovedeno, nebo: SUBACK vůbec nedorazil, nebo: UNSUBACK vůbec nedorazil), můžete volat další funkci&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty, např. index) např. jejich celková délka se nevleze do paketu&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů)&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = SDS není připojeno k brokeru (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                     -1 = bez aktivity&lt;br /&gt;
                      0 = nepoužito&lt;br /&gt;
                      1 = mqtt_publish() probíhá&lt;br /&gt;
                      2 = mqtt_publish() hotovo (OK - obdržen TCP ACK), můžete volat další funkci&lt;br /&gt;
                      4 = mqtt_subscribe() probíhá - čekám na SUBACK&lt;br /&gt;
                      8 = SUBACK dorazil z Broker, bez chyby (OK), můžete volat další funkci&lt;br /&gt;
                     16 = čekám na UNSUBACK (pouze pro unsubscribe funkce)&lt;br /&gt;
                     32 = UNSUBACK dorazil z Brokeru, můžete volat další funkce&lt;br /&gt;
&lt;br /&gt;
Informativní položka:&lt;br /&gt;
&lt;br /&gt;
 sys[2203] 09 i R   počet chyb v protokolu MQTT směrem z Brokeru&lt;br /&gt;
                    (objeví-li se chyba, dojde k okamžitému odpojení)&lt;br /&gt;
&lt;br /&gt;
Nastavení (položka 2198 je k dispzoici až od FW 11/2025):&lt;br /&gt;
&lt;br /&gt;
 sys[2198] 09 i R   mqtt_publish PUBLISH Fixed Header value ( 0b0011dqqr : d=DUP, qq=QOS, r=RETAIN ) &lt;br /&gt;
 sys[2198] 09 i W   write ( default: 0b00110001 )&lt;br /&gt;
&lt;br /&gt;
Zatím nepoužité pozice:&lt;br /&gt;
&lt;br /&gt;
 sys[2204] až sys[2208]   reserved&lt;br /&gt;
&lt;br /&gt;
Pro každou příchozí datovou zprávu z Brokeru, je tato zpráva uložena do následujících sys: (pozor, každá nová příchozí zpráva přepíše předchozí údaje)&lt;br /&gt;
&lt;br /&gt;
 sys[2210] 09 s R   poslední přijatý Topic Name z Brokeru (broker publish)&lt;br /&gt;
 sys[2250] 09 s R   poslední přijatý Value z Brokeru (broker publish)&lt;br /&gt;
 sys[2290] 09 i R   timestamp pro poslední přijatou zprávu (broker publish)&lt;br /&gt;
&lt;br /&gt;
SDS umí přijaté datové zprávy uchovat, v rámci následující tabulky. Toto je důležité zejména pokud různé zprávy přicházejí velice rychle za sebou, aby se pro SDS-C program neztratili.&lt;br /&gt;
&lt;br /&gt;
Nejvíce lze mít až 32 položek (řádků) v tabulce, nicméně některá SDS nemají ve své paměti dostatečné místo a počet je tedy omezen. Pozor na to při psaní programu !&lt;br /&gt;
&lt;br /&gt;
 sys[2209] 09 i R   počet řádků v tabulce pro dané SDS (různé SDS mají různě volnou paměť, proto je v nich i různý počet použitelných Subscribe položek)&lt;br /&gt;
&lt;br /&gt;
Jednotlivé položky v tabulce příchozích zpráv:&lt;br /&gt;
&lt;br /&gt;
 sys[2211] až sys[2241] &lt;br /&gt;
          09 s R   název položky (Topic Name) pro daný index #1 - #31&lt;br /&gt;
                   (max délka záznamu dle SDS)&lt;br /&gt;
 &lt;br /&gt;
 sys[2242] až sys[2249]   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2251] až sys[2281] &lt;br /&gt;
          09 s R   poslední přijatá hodnota (Value) ze publish zprávy ze brokeru pro daný index #1 - #31&lt;br /&gt;
                   (max délka záznamu dle SDS)&lt;br /&gt;
 &lt;br /&gt;
 sys[2282] až sys[2289]   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2291] až sys[2321] &lt;br /&gt;
          09 i R   timestamp (hodnota uptime) v okamžiku příchodu zprávy z Brokeru&lt;br /&gt;
                   (pro detekci změny - příchozí zprávy z Brokeru)&lt;br /&gt;
                   0 = zatím nic nepřišlo&lt;br /&gt;
                   1..MAX = hodnota uptime v okamžiku poslední změny&lt;br /&gt;
&lt;br /&gt;
Nastavení Topic názvů každé položky (tedy &amp;quot;zápis&amp;quot; do sys[2211] až sys[2241]) se provede funkcí mqtt_subscribe(), které zadáváte pozici v této tabulce a název Topicu. Pokud se Subscribe nepovede, zůstane pozice v tabulce prázdná. Po připojení k Brokeru je tabulka vždy zcela prázdná, a SDS-C program si ji vždy musí dle potřeby naplnit. Pokud Broker pošle aktualizaci obsahu (value) na některou z přihlášených Topic položek, které SDS v této tabulce má, tak SDS automaticky přepíše patřičný řádek tabulky (tj. obsah jednoho ze sys[2251] až sys[2281]) a patřičně aktualizuje časovou známku změny.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[2322] až sys[2398]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MODBUS-TCP klient ==&lt;br /&gt;
&lt;br /&gt;
Ověření FW v SDS:&lt;br /&gt;
&lt;br /&gt;
 sys[2399] 09 i R   podpora pro MODBUS TCP&lt;br /&gt;
                     0 = NE&lt;br /&gt;
                     1 = ANO (první verze implementace v SDS)&lt;br /&gt;
&lt;br /&gt;
Každé nové TCP spojení na server:&lt;br /&gt;
&lt;br /&gt;
 sys[2400] 09 i R   stav průběhu modbus_tcp_connect()&lt;br /&gt;
                     -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = pokus o TCP připojení selhal&lt;br /&gt;
                     -1 = nepoužito&lt;br /&gt;
                      0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                      1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                      2 = TCP připojeno, můžete komunikovat &lt;br /&gt;
&lt;br /&gt;
MODBUS funkce - každá má svůj nezávislý stavový údaj:&lt;br /&gt;
&lt;br /&gt;
 sys[2401] 09 i R   stav průběhu zpracování funkce 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
 sys[2402] 09 i R   stav průběhu zpracování funkce 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
 sys[2403] 09 i R   stav průběhu zpracování funkce 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
 sys[2404] 09 i R   stav průběhu zpracování funkce 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
 sys[2405] 09 i R   stav průběhu zpracování funkce 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
 sys[2406] 09 i R   stav průběhu zpracování funkce 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
 sys[2415] 09 i R   stav průběhu zpracování funkce 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
 sys[2416] 09 i R   stav průběhu zpracování funkce 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
                     pro všechny tyto stavy platí následující hodnoty:&lt;br /&gt;
                      -6 = timeout (neprovedeno), můžete volat další funkci&lt;br /&gt;
                      -5 = nespravne parametry (hodnoty), můžete volat další funkci&lt;br /&gt;
                      -4 = nespravne parametry (počet parametrů), můžete volat další funkci&lt;br /&gt;
                      -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                      -2 = SDS není připojeno (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                      -1 = bez aktivity, lze volat funkci&lt;br /&gt;
                       0 = provedeno OK (obdržena platná odpověď bez chybového kódu), můžete volat další funkci&lt;br /&gt;
                       1 .. 15 = obdržena odpověď s chybou 0x01 až 0x0F, můžete volat další funkci&lt;br /&gt;
                     256 = pracuji, čekejte na aktualizovanou hodnotu&lt;br /&gt;
&lt;br /&gt;
 sys[2417] až sys[2462]   reserved&lt;br /&gt;
&lt;br /&gt;
 sys[2463] 09 i R  poslední hodnota Unit Identifier zapsaná do MBAP hlavičky při odeslání zprávy&lt;br /&gt;
 &lt;br /&gt;
 sys[2464] 09 i R  poslední hodnota Transaction Identifier zapsaná do MBAP hlavičky při odeslání zprávy&lt;br /&gt;
&lt;br /&gt;
Přijatá data (funkce _read) - obsah je aktualizován pro každou novou přijatou MODBUS zprávu. Výsledky (přijatá data) jsou vždy uloženy do následujících sys (bez ohledu na typ MODBUS funkce).&lt;br /&gt;
&lt;br /&gt;
 sys[2465] 09 i R  timestamp poslední přijaté zprávy&lt;br /&gt;
                   (vhodné pro detekci nové přijaté zprávy)&lt;br /&gt;
 &lt;br /&gt;
 sys[2466] 09 i R  počet přijatých položek, pro poslední přijatou zprávu&lt;br /&gt;
                   (počet celých položek)&lt;br /&gt;
 &lt;br /&gt;
 sys[2467] 09 i R  přijatá hodnota Unit Identifier z příchozí MBAP hlavičky&lt;br /&gt;
                   (hodnota adresy je převzata z příchozí zprávy)&lt;br /&gt;
 &lt;br /&gt;
 sys[2468] 09 i R  přijatá hodnota Transaction Identifier z příchozí MBAP hlavičky&lt;br /&gt;
                   (hodnota adresy je převzata z příchozí zprávy) &lt;br /&gt;
 &lt;br /&gt;
 sys[2469] 09 i R  adresa první položky coil/input/register (které odpovídá údaj v sys[2470])&lt;br /&gt;
                   (MODBUS způsob číslování položek - adresa 1..n)&lt;br /&gt;
 &lt;br /&gt;
 sys[2470] až sys[2719]&lt;br /&gt;
          09 i R   přijaté hodnoty pro poslední přijatou zprávu&lt;br /&gt;
                    MODBUS funkce 0x01 a 0x02: každý sys[] má hodnotu 0 až 255, jednotlivé bity určují coils/input&lt;br /&gt;
                    MODBUS funkce 0x03 a 0x04: každý sys[] má hodnotu -32768 až 32767, tedy hodnotu pro každý jeden registr&lt;br /&gt;
&lt;br /&gt;
Pro funkce 0x01 a 0x02 jsou přijatá data kódována v jednobitovém tvaru, vždy po osmi bitech na jeden sys[]. Takže prvních osm bitů naleznete v sys[2465], dalších osm bitů v sys[2466] a tak dále.&lt;br /&gt;
&lt;br /&gt;
Pro funkce 0x03 a 0x04 jsou přijaté hodnoty registrů (MODBUS: vždy int16_t) uloženy postupně zasebou (tak jak přišli ve zprávě) do jednotlivých sys[], takže první registr je v sys[2465], druhý ve sys[2466] atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezerva&lt;br /&gt;
&lt;br /&gt;
 sys[2715] až sys[2809]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statistiky COMx ==&lt;br /&gt;
&lt;br /&gt;
COM1:&lt;br /&gt;
&lt;br /&gt;
 sys[2810] 09 i R   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2811] 09 i R   počet odeslaných bajtů (TX) na port COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2812] 09 i R   počet neodeslaných bajtů (zahozených) pro port COM1 &lt;br /&gt;
                    (tzn. SDS chce odeslat více bajtů než zvládá nastavená rychlost COM portu)&lt;br /&gt;
 &lt;br /&gt;
 sys[2813] 09 i R   počet čekajících bajtů na odeslání (TX) ve frontě pro port COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2814] 09 i R   počet přijatých bajtů (RX) na portu COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2815] 09 i R   počet nepřijatých bajtů (ignorované) pro port COM1 &lt;br /&gt;
                    (tzn. pro případ kdy do SDS je posláno více bajtů než SDS zpracuje, a tak musí zahazovat)&lt;br /&gt;
 &lt;br /&gt;
 sys[2816] 09 i R   počet nevyzvednutých přijatých bajtů (RX) ve frontě pro port COM1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezerva&lt;br /&gt;
&lt;br /&gt;
 sys[2817] až sys[2860]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
COM6:&lt;br /&gt;
&lt;br /&gt;
 sys[2861] 09 i R   počet odeslaných bajtů (TX) na port COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2862] 09 i R   počet neodeslaných bajtů (zahozených) pro port COM6&lt;br /&gt;
                    (tzn. SDS chce odeslat více bajtů než zvládá nastavená rychlost COM portu)&lt;br /&gt;
 &lt;br /&gt;
 sys[2863] 09 i R   počet čekajících bajtů na odeslání (TX) ve frontě pro port COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2864] 09 i R   počet přijatých bajtů (RX) na portu COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2865] 09 i R   počet nepřijatých bajtů (ignorované) pro port COM6&lt;br /&gt;
                    (tzn. pro případ kdy do SDS je posláno více bajtů než SDS zpracuje, a tak musí zahazovat)&lt;br /&gt;
 &lt;br /&gt;
 sys[2866] 09 i R   počet nevyzvednutých přijatých bajtů (RX) ve frontě pro port COM6&lt;br /&gt;
&lt;br /&gt;
Pro využití všech těchto statistik, je potřeba mít v SDS aktuální firmware (starší FW zde vrací nuly).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konec dokumentu ==&lt;br /&gt;
&lt;br /&gt;
'''Konec dokumentu.'''&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=971</id>
		<title>Firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=971"/>
		<updated>2025-11-15T14:20:15Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nový Firmware ==&lt;br /&gt;
&lt;br /&gt;
Aktualizujte si své SDS - nahrejte do něj nový firmware, který získáte na této stránce - '''naskrolujte dolů''' kde naleznete odkaz na BIN soubor pro vaše zařízení.&lt;br /&gt;
&lt;br /&gt;
Postup a řešení problémů: [[Manual_Firmware_Update|Návod pro aktualizaci Firmware v SDS]].&lt;br /&gt;
&lt;br /&gt;
Důležité první kroky, které je nutné provést s každým novým zakoupeným modulem: [[New_Device_First_Setup_Steps|První nutné kroky pro nově zakoupené zařízení SDS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Odkazy ke stáhnutí ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Pro aktualizaci firmware ve vašem zařízení (nebo pro zápis SDS-C respektive FULL-C programu), potřebujete jeden z následujících programů:&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;PC Software&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_sdsc_winexe.jpg]] '''Program SDSC.exe''' (programovací jazyk SDS-C, aktualizace firmware pro SDS '''první řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; stáhnout WinEXE pro SDS-C [https://sds.an-d.cz/firmware/SDSC_310123.exe zápis/simulace/upload SDS-C (SDS-C '''verze 09''') a UWEB, ze dne 31.1.2023]&amp;lt;br&amp;gt;SHA-256: daf1095f206404e33223f675f5d0bc09d4fc5dfd7d9f79f4f735af88f5ff1e6a&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program FULLC.exe''' (programovací jazyk FULL-C, aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; (FC verze '''0x12''' - '''aktuální'''): stáhnout WinEXE pro FULL-C [https://sds.an-d.cz/firmware/FULLC_220724.exe zápis/upload FULL-C a UWEB, ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro Firmware od 9.3.2023 včetně, pro všechny varianty SDS (64kB a 128kB a 512kB)&amp;lt;br&amp;gt;SHA-256: b4cb95d8ec8a6e844a3a4c9a2e9fc50ece60ccf44e8043f8c10f46b2294cae0b&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program SDSLOAD.exe''' (&amp;quot;jednokrokový&amp;quot; upload .FC souborů a aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; ('''aktuální''' verze, pro FW od 10.7.2017 včetně a dále) stáhnout WinEXE [https://sds.an-d.cz/firmware/SDSLOAD_220724.exe program SDSLOAD ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro všechny SDS varianty 64kB a 128kB a 512kB, (subvarianty DP a DS84)&amp;lt;br&amp;gt;SHA-256: ded5bf1aca2e04e22c33899a0976deccc8ff76eb88f53ecd9769788b7daa25a7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_empty.jpg]] '''Program SDS LOG'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; Program '''[[SDS LOG: intro|SDS LOG]]''' - verze 0.1 ze dne 26.8.2011 - [https://sds.an-d.cz/firmware/SDS_LOG.exe stáhnout EXE program]&lt;br /&gt;
&amp;lt;li&amp;gt; Zdrojové kódy programu SDS LOG (Creative Commons Licence) [[SDS LOG: source code|ke stáhnutí zde]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS LOG: changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;První Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMICROE.jpg]]  [[Soubor:Thumbnail_SDSMICRO.jpg]] [[Soubor:Thumbnail_SDS_DIN.jpg]] '''D0000001''' MICRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: LM]] varianty '''LIGHT''', '''LIGHT 2''' a '''E (DIN)'''.&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny varianty a revize SDS MICRO LM.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_151125_CZ.bin SDS-MICRO-LM-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_151125_EN.bin SDS-MICRO-LM-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B0000057''' MICRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_151125_CZ.bin SDS-MICRO-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_151125_EN.bin SDS-MICRO-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B000D957''' MICRO ST DP&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST DP]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST DP.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_151125_CZ.bin SDS-MICRO-ST-DP-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_151125_EN.bin SDS-MICRO-ST-DP-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MINI_1.png]] [[Soubor:Thumbnail_SDS_MINI_2.png]] '''B0000020''' MINI ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MINI: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MINI ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MINI_151125_CZ.bin SDS-MINI-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MINI_151125_EN.bin SDS-MINI-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[SDS MINI: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMACRO.jpg]] '''C0000001''' MACRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: LM]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_151125_CZ.bin SDS-MACRO-LM-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_151125_EN.bin SDS-MACRO-LM-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MACRO_ST_rev1.png]] '''C0000057''' MACRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_151125_CZ.bin SDS-MACRO-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_151125_EN.bin SDS-MACRO-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSTTCPRO.jpg]] '''B0000001''' TTCPRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS TTCPRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_151125_CZ.bin SDS-TTCPRO-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_151125_EN.bin SDS-TTCPRO-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS TTCPRO ST má shodný Change Log se SDS MINI ST, a to zde: [[SDS MINI: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSIO6.jpg|160px]] '''D0000006''' IO6 LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: LM]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_151125_CZ.bin SDS-IO6-LM-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_151125_EN.bin SDS-IO6-LM-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 LM má shodný Change Log se SDS MICRO LM, a to zde: [[SDS MICRO: LM: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_empty.jpg]] '''D0000011''' IO6 ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_151125_CZ.bin SDS-IO6-ST-CZ ze dne 15.11.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_151125_EN.bin SDS-IO6-ST-EN released on 15-Nov-2025]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 ST má shodný Change Log se SDS MICRO ST, a to zde: [[SDS MICRO: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_FTP_rev1.png]] '''F0000001''' FTP LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS FTP: LM]], výchozí firmware.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Firmware: ''SDS FTP ze dne 7.9.2010'' už nahrán ve výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS FTP: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_ONEDPS.jpg]] '''E000AAA1''' UPS ONEDPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: ONEDPS]], finální jednodesková verze (aktuální) (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stáhnout firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_CZ.bin (Česká lokalizace) SDS-UPS-ONEDPS-LM ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;Download firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_EN.bin (English language version) SDS-UPS-ONEDPS-LM released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS UPS: LM: ONEDPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_TWODPS.jpg]] '''C00xxxxx''' UPS TWODPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: TWODPS]], HW rev3u - DVOUDESKOVÁ (UŽ NEPRODÁVANÁ) varianta.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je zaslán na požádání (pošlete email), aktuální verze je z 1.3.2011 (dále aktualizováno na specifické požádání, raději proto přejděte na nový HW).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Každá deska má svou kalibraci, proto každá deska má svůj vlastní FW, proto musíte uvést S/N svého výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HISTORIE: [[SDS UPS: LM: TWODPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Druhá Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSBIG.jpg]] [[Soubor:Thumbnail_SDSSMALL.jpg]] '''B1900001''' / '''B1900002''' / '''B1900004''' : BIG, BIG2, SMALL, STSW, MBGW&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Společný firmware pro výrobky [[SDS BIG]], [[SDS SMALL]] a [[SDS STSW]] a [[SDS MBGW]]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je jednotný pro všechny varianty '''SDS Druhé Produktové Řady''', nutné je rozlišení dle varianty 64kB/128kB/512kB. Rozlišení podle dalších subvariant (DP, DS84) se neprovádí.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je společný pro BIG a BIG2, rozlišení je pouze dle varianty 64/128/512.&lt;br /&gt;
&amp;lt;li&amp;gt;Pozn. Modul SMALL a modul MBGW interně obsahuje modul STSW, nahrává se tam tedy stejný FW.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware vždy vyžaduje použití odpovídající, aktuální verze FULLC.EXE programu. &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS BIG/SMALL/STSW: [[SDS BIG: firmware changelog|firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;64kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 64kB) [https://sds.an-d.cz/firmware/SDS_BIG_64K_251025_EN.bin firmware &amp;quot;64kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;128kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 128kB) [https://sds.an-d.cz/firmware/SDS_BIG_128K_251025_EN.bin firmware &amp;quot;128kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;512kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [[firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 12.4.2022|informace pokud máte SDS512 s FW &amp;lt;b&amp;gt;starším&amp;lt;/b&amp;gt; než 12.4.2022]]&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [https://sds.an-d.cz/firmware/SDS_BIG_512K_251025_EN.bin firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;Informace: SDS BIG/SMALL/STSW 512 se starším FW než 12.4.2022 vyžaduje přeprogramování u výrobce.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| POZOR&lt;br /&gt;
'''Aktualizujte''' své doplňkové sandwich desky, tzn. [[SDS BIG: DALI]], [[SDS BIG: LORA]] - na verzi FW 5.12.2016 '''nebo novější'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Aktualizaci lze provést jen fyzicky u výrobce, ten ji provede bezplatně (zašlete výrobci vaše SDS pro jeho aktualizaci). Se starým FW nebude tento HW plně fungovat.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Informace ===&lt;br /&gt;
&lt;br /&gt;
 VŽDY MĚJTE VE SVÉM ZAŘÍZENÍ NEJNOVĚJŠÍ FIRMWARE, A POUŽÍVEJTE TAKÉ NEJNOVĚJŠÍ SDS-C EXE / FULL-C EXE PROGRAM.&lt;br /&gt;
 V opačném případě vám budou chybět nové funkce, které neustále přidáváme, a také nebudete mít opravené nalezené chyby.&lt;br /&gt;
 V případě že chcete získat podporu, musíte mít instalovaný nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historický Software ===&lt;br /&gt;
&lt;br /&gt;
Za účelem aktualizace takových SDS, kde už dlouho nebyl aktualizován firmware, je potřeba použít odpovídající EXE program pro aktualizaci takovéhoto zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== První Produktová Řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro SDS-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_151119.exe ze dne '''15.11.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 08, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020118.exe ze dne '''2.1.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 07, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020317.exe ze dne '''2.3.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 8.8.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_060216.exe ze dne '''6.2.2016''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které nemají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 24.1.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_231111.exe ze dne '''23.11.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 04&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_170211.exe ze dne '''17.2.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''února 2011''')&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro ''SDS-C verze č. 03'' (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_140511.exe ze dne '''14.5.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''konce května 2011''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Druhá Produktová řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro FULL-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_070323.exe ze dne '''7.3.2023''']&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_311222.exe ze dne '''31.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 11, (firmware od 9.1.2023 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_071222.exe ze dne '''7.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 10, (firmware od 18.11.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_161022.exe ze dne '''16.10.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0F, (firmware od 16.10.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_110722.exe ze dne '''11.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0E, (firmware od 11.7.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010722.exe ze dne '''1.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0D, (firmware od 6.8.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030422.exe ze dne '''3.4.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0C, (firmware od 23.3.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010322.exe ze dne '''1.3.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0B, (firmware od 6.8.2020 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030119.exe ze dne '''3.1.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0A, (firmware od 3.1.2019 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010718.exe ze dne '''1.7.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 09, (firmware od 27.6.2018 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_100717.exe ze dne '''10.7.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 08, (firmware od 10.7.2017 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_080617.exe ze dne '''8.6.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 06, (firmware starší než Červenec-2017, a pouze pro variantu SDS 64kB)&lt;br /&gt;
&lt;br /&gt;
* (historická verze) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_201022.exe ze dne 20.10.2022]&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_120417.exe ze dne 12.4.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB která používá ''starý'' firmware (2017 nebo starší)&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_100717.exe ze dne 10.7.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB a 128kB (nepodporuje variantu 512kB tak jako aktuální stáhnutelná verze aplikace)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beta Testing ==&lt;br /&gt;
&lt;br /&gt;
Než vydáme novou verzi, je potřeba změny a novinky otestovat.&lt;br /&gt;
&lt;br /&gt;
Pokud jste ochotní se testu zúčastnit, pak se podívejte [https://forum.sds.an-d.cz/viewtopic.php?id=129 na tento odkaz]. Zde jsou uveřejněny vždy nejnovější beta verze firmware.&lt;br /&gt;
&lt;br /&gt;
Diskuse s vývojem k aktuálnímu Firmware je k dispozici na našem fóru.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_sysp&amp;diff=970</id>
		<title>SDS-C: sdsc sysp</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_sysp&amp;diff=970"/>
		<updated>2025-11-15T11:19:56Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&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;
 Zařízení Druhé Produktové Řady používají jazyk FULL-C (jiná část této Wiki).&lt;br /&gt;
&lt;br /&gt;
== Definice systémových proměnných SDS-C : pole sys[] ==&lt;br /&gt;
&lt;br /&gt;
Tzv. &amp;quot;systémová proměnná&amp;quot; je prvek v programovacím jazyku SDS-C, který má textový název, a se kterým se dá pracovat - číst hodnotu z proměnné a zapisovat hodnotu do proměnné. Často je čtení a zápis svázáno s fyzickou akcí (např. zápis do konkrétní systémové proměnné změní stav relé).&lt;br /&gt;
&lt;br /&gt;
SDS-C obsahuje celou řadu vyhrazených, předem pevně definovaných systémových proměnných. Tyto proměnné obsahují aktuální online informace a údaje, vzhledem ke stavu zařízení. Dá se jimi také zařízení (resp. periférie) přímo ovládat. Úplný seznam je právě na této stránce.&lt;br /&gt;
&lt;br /&gt;
Proměnné poskytované SDS-C a navázané na HW zařízení, jsou označeny jako '''sys[x]''', kde index '''x''' je číslo do 0 do 1023 (popřípadě až do 2048 ale to jen na určitých typech zařízení).&lt;br /&gt;
&lt;br /&gt;
Tyto proměnné lze číst, popř. do nich zapsat novou hodnotu. To vše můžete provést ve svém SDS-C programu, nebo přes některou z komunikačních funkcí (např. UDP protokolem, nebo přes webové rozhraní).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Legenda k tabulce:''&lt;br /&gt;
&lt;br /&gt;
Proměnná typu '''i''' je 32-bit signed integer (nejvyšší bit je znaménko, a zbývajících 31 bitů je číselná hodnota).&lt;br /&gt;
&lt;br /&gt;
Proměnná typu '''s''' je soubor znaků (string) - tj. '''text''' (řetězec znaků) - a tyto proměnné '''lze použít jen pro čtení'''.&lt;br /&gt;
&lt;br /&gt;
Některé proměnné lze jen číst ('''R'''), do některých lze kromě čtení i zapisovat ('''RW'''). &lt;br /&gt;
&lt;br /&gt;
Údaj '''XX''' v seznamu proměnných udává verzi firmware, kdy byla daná proměnná zavedena.&lt;br /&gt;
'''Význam hodnot:'''&lt;br /&gt;
* '''01''' - první verze, výchozí firmware ze začátku roku 2010&lt;br /&gt;
* '''02''' - druhá verze, bylo vydáno na přelomu roku 2010 a 2011&lt;br /&gt;
* '''03''' - třetí verze, tj. pouze pro firmware od 03.2011 &lt;br /&gt;
* '''04''' - čtvrtá verze, tj. pouze pro firmware od 06.2011 a novější&lt;br /&gt;
* '''05''' - pátá verze, tj. pouze pro firmware od 11.2011 a novější&lt;br /&gt;
* '''06''' - šestá verze, tj. pouze pro firmware od 03.2012 a novější&lt;br /&gt;
* '''07''' - sedmá verze, tj. pouze pro firmware od 07.2017 a novější&lt;br /&gt;
* '''08''' - osmá verze, tj. pouze pro firmware od 12.2018 a novější&lt;br /&gt;
* '''09''' - devátá verze, tj. pouze pro firmware od 06.2020 a novější&lt;br /&gt;
&lt;br /&gt;
Všechny proměnné označené jako rezerva mohou být v budoucích verzích firmware nějak využity. Pokud jsou však pro tuto verzi firmware označeny jako rezerva, pak se nesmí používat (zapisovat do nich, kvůli budoucí kompatibilitě). Při čtení obvykle vrací hodnotu nula, ovšem jakmile budou v novém firmware využity, už budou vracet konkrétní hodnotu.&lt;br /&gt;
&lt;br /&gt;
Pokud máte starší verzi firmware, je možné, že některé později přidané položky nebudou k dispozici. Řešením je udržovat firmware ve vašem zařízení vždy aktuální.&lt;br /&gt;
&lt;br /&gt;
Jazyk SDS-C indexuje všechny pole od čísla 0 (nula) - všechna pole, tj. &amp;quot;sys[]&amp;quot;, &amp;quot;ram[]&amp;quot;, &amp;quot;text[]&amp;quot;, začínají se svým obsahem od indexu nula.&lt;br /&gt;
&lt;br /&gt;
'''Pozor''' však na číslování hardware vstupů a výstupů, ty jsou číslovány dle &amp;quot;elektrikářských&amp;quot; zvyklostí, to znamená že číslování začíná od čísla '''1''' ('''jednička''') - toto ale nemá hlubší vliv na SDS-C.&lt;br /&gt;
&lt;br /&gt;
Pokud narazíte na takové zařízení SDS, které má ještě velmi starou verzí webového rozhraní, kde byly ještě některé vstupy číslovány od nuly, aktualizujte si toto zařízení aby používalo nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Důležité upozornění'''&lt;br /&gt;
&lt;br /&gt;
Protože SDS-C ''umí pracovat pouze a jen'' s '''32-bit signed''' integer čísly (tj. 1-bit znaménko a 31-bitů číslo, typ int32_t), tak dochází k (očekávané) konverzi '''32-bit unsigned''' čísel (tj. bez znaménka 32-bitů číslo, typ uint32_t) mezi vnitřními hodnotami v SDS a reprezentací v SDS-C (například když takové unsigned číslo je dotazováno například přes čtení &amp;quot;sys[]&amp;quot; hodnot).&lt;br /&gt;
&lt;br /&gt;
Jinýmy slovy - uvnitř SDS jsou drženy některé hodnoty jako 32-bit unsigned. Ale protože SDS-C pracuje pouze s 32-bit signed čísly, pak při čtení takových čísel zevnitř SDS jsou tyto čísla prezentovány v SDS-C jako 32-bit signed. Bitově se nezmění, jen se &amp;quot;mění&amp;quot; pohled na to, co který bit znamená, viz text dále.&lt;br /&gt;
&lt;br /&gt;
''Příklad:'' &lt;br /&gt;
Hodnota &amp;quot;sys[625]&amp;quot; reprezentuje &amp;quot;uplynulý čas od posledního zachyceného S0 impulsu na daném S0 vstupu&amp;quot;. Tato hodnota je udržována uvnitř SDS a program SDS-C k ní má přístup.&lt;br /&gt;
Tento čas je udán v milisekundách a začína na nule, a s každou milisekundou ze zvýší o jedničku. Protože SDS udržuje toto počítadlo (uvnitř své paměti) jako '''32-bit unsigned''', tak jakmile dojde k dopočítání do 31-bitů (tj. 2147483647) a překlopí se tedy 32. bit (tj. na 2147483648), tak SDS-C při čtení &amp;quot;sys[625]&amp;quot; vrátí zápornou hodnotu (tj. -2147483648). Toto je v pořádku - pokud si vypíšete jednotlivé bity, tak budou stále přesně odpovídat, ale tím že SDS-C interpetuje všechny čísla jako '''32-bit signed''', tak vzorovou hodnotu použije a zobrazí jako zápornou.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  skutečná binární hodnota         | 32-bit signed | 32-bit unsigned&lt;br /&gt;
  (32-bit)                         | SDS-C integer | (internal SDS)&lt;br /&gt;
 ----------------------------------+---------------+-----------------&lt;br /&gt;
  00000000000000000000000000000000 |             0 |               0&lt;br /&gt;
  00000000000000000000000000000001 |             1 |               1&lt;br /&gt;
  00000000000000001111111111111111 |         65535 |           65535&lt;br /&gt;
  01111111111111111111111111111111 |    2147483647 |      2147483647&lt;br /&gt;
  10000000000000000000000000000000 |   -2147483648 |      2147483648&lt;br /&gt;
  10000000000000000000000000000001 |   -2147483647 |      2147483649&lt;br /&gt;
  10000000000000001111111111111111 |   -2147418113 |      2147549183&lt;br /&gt;
  11111111111111111111111111111111 |            -1 |      4294967295&lt;br /&gt;
  11111111111111111111111111111110 |            -2 |      4294967294&lt;br /&gt;
  11111111111111111111111111111101 |            -3 |      4294967293&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, SDS vždy (ať ve svém firmware, tak v SDS-C kódu a proměnných) udržuje hodnoty ve stejném ''binárním'' obsahu. Jen interpretace a další práce s čísly je jiná. SDS samo vnitřně pracuje s '''32-bit unsigned''' hodnotami, a díky tomu na webu a všech M2M stránkách můžete vidět hodnoty v rozsahu od 0 do 4294967295. Zato SDS-C pracuje pouze se '''32-bit signed''' hodnotami, a proto stejné číslo je reprezentováno v rozsahu -2147483648 až 2147483647. Toto je vlastnost daná omezením implementace, zkrátka v SDS-C to nelze jinak udělat (pokud to je problém, což ale není, tak můžete přejít na zařízení s FULL-C které tyto omezení nemá).&lt;br /&gt;
&lt;br /&gt;
To lze snadno ve vašem SDS-C kódu ošetřit, a pokud pouze přenášíte hodnoty z SDS na server (přes HTTP-GET), tak se to dá snadno a ihned zpracovat na serveru &amp;quot;zpět&amp;quot; na '''32-bit unsigned''' hodnotu. Jednoduše na serveru přijmete '''signed''' číslo, a převedete ho například přetypování na '''unsigned''' číslo. Bity v paměti totiž jsou pro oba typy stejné.&lt;br /&gt;
&lt;br /&gt;
V tabulce jsou konkrétní &amp;quot;sys[]&amp;quot; položky, kterých se toto týká, označeny tímto symbolem: '''(!)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Použítí v SDS-C programu'''&lt;br /&gt;
&lt;br /&gt;
Zápis a čtení z/do systémových proměnných má okamžitý přímý vliv na hardware, se kterým jsou konkrétní proměnné svázány.&lt;br /&gt;
&lt;br /&gt;
Příklad zápisu v programu: jaká je teplota na čidle 1 (celé stupně Celsia)? &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 teplota0_ve_stupnich_C = sys[310] / 100;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ne vždy je potřeba provádět převody. Pokud např. chcete porovnat dvě hodnoty z různých teplotních čidel, můžete to udělat přímo (bez dělení 100 jako v předchozím příkladu) - samozřejmě toto platí pouze tehdy, pokud porovnáváte hodnoty ve stejných jednotkách:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (sys[310] &amp;gt; sys[311]) { echo('Prvni cidlo je teplejsi nez druhe.'); };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad zápisu v programu: jak zapnu relé RE1? (musíte vědět &amp;quot;co&amp;quot; &amp;quot;kam&amp;quot; zapsat):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sys[231] = 255; // v tomto okamžiku dojde k ovládnutí relé č. 1 (- viz index 231 dole v seznamu)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Můžete (od 03 verze SDS-C) použít i ''#define'', příklad:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define RELE1 sys[231]&lt;br /&gt;
&lt;br /&gt;
#define TEPLOTA sys[310]&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
 &lt;br /&gt;
RELE1 = 255;&lt;br /&gt;
 &lt;br /&gt;
if (TEPLOTA &amp;gt; 3200) goto x;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole ram[] ==&lt;br /&gt;
&lt;br /&gt;
Pole '''ram[]''' je samostatné nezávislé pole, dostupné pro SDS-C program od verze č. 03 (a výše).&lt;br /&gt;
&lt;br /&gt;
Obsah pole ram[] je uložen samostatně v RAM paměti, a je při resetu zařízení ztracen.&lt;br /&gt;
&lt;br /&gt;
Obsah pole ram[] se nekryje s dalšími proměnnými programu a tak dále (je to zcela samostatné paměťové pole).&lt;br /&gt;
&lt;br /&gt;
Pole ram[] lze indexovat číslem nebo proměnnou. Příkladem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
hodnota = ram[10];&lt;br /&gt;
&lt;br /&gt;
index = 23;&lt;br /&gt;
ram[index] = 15 * 2;&lt;br /&gt;
&lt;br /&gt;
index = sys[1023];&lt;br /&gt;
ram[index] = 30;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pole ram[] je indexováno od indexu nula (tj.: ram[0]). Celková velikost (maximální index) je dán verzí SDS-C a konkrétního firmware v zařízení. &lt;br /&gt;
&lt;br /&gt;
Verze SDS-C č. 03 má maximální velikost pole ram[] nastavenou na 128 položek. '''Novější verze už mají počet zvýšený ''' - verze č. 06 má velikost ram[] nastavenou na 512 položek (každá o velikosti int32_t).&lt;br /&gt;
&lt;br /&gt;
Pole ram[] můžete využít k čemukoliv co potřebujete. Také i pro některé SDS-C funkce, jako je ''http_get()'', která může do pole ram[] ukládat obsah textu obdrženého ze serveru (toto chování se nastavuje příslušnými sys[]), nebo při přenosu stránek z/do paměti DF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ukládání trvalých dat ==&lt;br /&gt;
&lt;br /&gt;
Všechny verze SDS-C mají od k dispozi prostor v oblasti sys[100] až sys[115]. Toto je výchozí oblast pro uchovávání trvanlivých dat (tyto údaje se neztratí při výpadku napájení). Přímým zápisem, do těchto sys[] položek, dojde k zápisu do pevné paměti. Čtení se provádí opět přímým přístupem do těchto sys[].&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. 05 je možno, navíc k tomuto základu, zapisovat a přečíst mnohem větší množství údajů v externím paměťovém chipu DATAFLASH (NVM = Non-Volatile Memory), osazeném na desce zařízení SDS, a to prostřednictvím čtyř SDS-C funkcí.&lt;br /&gt;
&lt;br /&gt;
Pozn. historické verze zařízení SDS-MICRO LIGHT, kde se používá paměť EEPROM (na místo novější DataFlash), poskytuje vždy pouze základní rozsah indexů: 100 až 115, a neposkytuje rozšířený rozsah pevné paměti (tak jako zařízení s pamětí DataFlash).&lt;br /&gt;
&lt;br /&gt;
Více informací, způsob použití a důležité varování je uvedeno na [[SDS-C: DataFlash|stránce ohledně DataFlash]].&lt;br /&gt;
&lt;br /&gt;
Další možnost:&amp;lt;br&amp;gt;&lt;br /&gt;
Zařízení SDS řady ST mají k dispozici, kromě podpory pro DataFlash, i možnost využít Zálohovanou paměť RAM (ta drží obsah i při vypnutém napájení SDS, pokud je v SDS vložena nabitá zálohovací baterie).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole text[] ==&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. '''06''' je možné v určité míře pracovat s texty. Toto má především využití v komunikaci přes sériovou linku (RS232/RS485) a při odesílání a příjmu dat (email, http) či práci s komunikačními moduly (GSM, LTE, LoRA).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je připraveno pole '''text[]'''. Detailní popis je [[SDS-C:_popis_jazyka#Pole_text.5B.5D|zde]].&lt;br /&gt;
&lt;br /&gt;
SDS-C je omezený programovací jazyk z hlediska &amp;quot;práce s textem&amp;quot;. Pokud potřebujete intenzivně s textem pracovat, použijte zařízení SDS které má FULL-C jazyk.&lt;br /&gt;
&lt;br /&gt;
I přes omezení SDS-C je možné připojit různé komunikační moduly (GSM, LTE, LoRA), které komunikují prostřednictvím textových příkazů (viz vzorové programy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole share[] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. '''08''' je možné použít pole '''share[]''', určené primárně pro sdílení textové informace mezi SDS-C programem a webovým rozhraním (tedy jako [[SDS-C:_sharing|sdílené proměnné]]).&lt;br /&gt;
&lt;br /&gt;
Práce s polem share[] je prakticky zcela shodná jako práce s polem text[]. Prakticky tak získává programátor dvě nezávislé pole pro uchování textu. Nicméně, některé SDS-C funkce vyhrazeně fungují jen s polem text[], ale to je vždy uvedeno v jejich popisu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhrazené funkce ==&lt;br /&gt;
&lt;br /&gt;
Seznam konkrétních zabudovaných '''funkcí''' naleznete na [[SDS-C: sdsc sysf|jiné stránce]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jednotné proměnné (pole sys[]) pro všechny výrobky řady SDS ==&lt;br /&gt;
&lt;br /&gt;
'''STAV SYSTÉMU'''&lt;br /&gt;
&lt;br /&gt;
 sys[0]   01 i R   &amp;quot;pair code&amp;quot; firmware (nastaven výrobcem napevno: identifikátor vázanosti firmware na hardware)&lt;br /&gt;
                    - lze využít pro rozeznání typu zařízení SDS, na kterém je spuštěn SDS-C program&lt;br /&gt;
 &lt;br /&gt;
 sys[1]   01 i R   počet přihlášených uživatelů do webového rozhraní (v okamžiku čtení této proměnné)&lt;br /&gt;
 &lt;br /&gt;
 sys[2]   01 s R   text SNMP-sysLocation, nastaveno ve webové administraci&lt;br /&gt;
 &lt;br /&gt;
 sys[3]   01 i R   hodnota '''UpTime10''' (doba běhu zařízení)&lt;br /&gt;
                    - počítá se od nuly (0) od každého zapnutí zařízení&lt;br /&gt;
                    - pouze 31 bitové počítadlo&lt;br /&gt;
                      (SDS si pro sebe interně počítá UpTime10 jako 32bit, nicméně&lt;br /&gt;
                       nejvyšší bit je odmaskován před předáním hodnoty do SDS-C programu)&lt;br /&gt;
                    - platné hodnoty: 0 až 2147483647 (včetně)&lt;br /&gt;
                    - po překročení 2147483647 (zde odpovídá up-time 248 dnů) začíná hodnota opět na nule&lt;br /&gt;
                    - jeden krok (zvýšení o jedničku) této hodnoty UpTime10 odpovídá právě '''10 msec''' uplynulému času &lt;br /&gt;
 &lt;br /&gt;
 sys[4]   01 i R   hodnota '''LOCAL''' času (UNIX čas, v sekundách)&lt;br /&gt;
                    - jedná se o lokální (eventuálně posunutý) čas, synchronizovaný se NTP serverem&lt;br /&gt;
                    - je zde už předem započítán GMT offset sys[26] (ten lze nastavit ve webovém rozhraní)&lt;br /&gt;
                    - je zde aplikován automatický posun letního času (je-li to povoleno ve webovém rozhraní)&lt;br /&gt;
                    - poskytnuto je pouze 31 bitové číslo (bude platné až do 19. leden 2038 včetně, &lt;br /&gt;
                      pak hodnota roluje na nulu - nejvyšší bit je odmaskován před předáním do SDS-C programu)&lt;br /&gt;
                    - platné hodnoty: 0 až 2147483647 (včetně)&lt;br /&gt;
 &lt;br /&gt;
 sys[5]   01 i R   rozpad LOCAL času: den (1 až 31)&lt;br /&gt;
 sys[6]   01 i R   rozpad LOCAL času: měsíc (1 až 12)&lt;br /&gt;
 sys[7]   01 i R   rozpad LOCAL času: rok (2011 a dále)&lt;br /&gt;
 sys[8]   01 i R   rozpad LOCAL času: hodina (0 až 23)&lt;br /&gt;
 sys[9]   01 i R   rozpad LOCAL času: minuta (0 až 59)&lt;br /&gt;
 sys[10]  01 i R   rozpad LOCAL času: sekunda (0 až 59)&lt;br /&gt;
 sys[11]  01 i R   rozpad LOCAL času: číslo dne v týdnu - počet dní od Neděle (0 až 6)&lt;br /&gt;
&lt;br /&gt;
'''Upozornění''': hodnota LOCAL času je platná až po úspěšném získání informací z NTP serveru. Po zapnutí (restartu) zařízení je NTP čas (sys[38], sys[4]) nastaven na nulu. Čas je automaticky v SDS aktualizován co jednu sekundu pomocí vnitřních hodin v SDS, a dále je hodnota času pravidelně (v delším intervalu) upřesněna dotazem na NTP server.&lt;br /&gt;
&lt;br /&gt;
V případě, že není zapnuta automatika DST (letní čas) a GMT offset je nastaven na nulu, tak je hodnota LOCAL času identická s NTP časem (UTC). Jakmile se ale nastaví offset nebo aktivuje posun letního času, už jsou tyto hodnoty odlišné (NTP je UTC, a LOCAL je místní (posunutý) čas). Pro různé použití je potřeba různých časů (často je potřeba UTC pro časové známkování údajů, a zase někdy je vhodný LOCAL pro interakci s uživatelem a pro různé výpisy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ethernet, Internet ==&lt;br /&gt;
&lt;br /&gt;
 sys[12]  01 i R   IP[0] adresa zařízení (nastaveno ve webové administraci)&lt;br /&gt;
 sys[13]  01 i R   IP[1] adresa zařízení&lt;br /&gt;
 sys[14]  01 i R   IP[2] adresa zařízení&lt;br /&gt;
 sys[15]  01 i R   IP[3] adresa zařízení&lt;br /&gt;
 &lt;br /&gt;
 sys[16]  01 i R   GW_IP[0] adresa brány (nastaveno ve webové administraci)&lt;br /&gt;
 sys[17]  01 i R   GW_IP[1] adresa brány&lt;br /&gt;
 sys[18]  01 i R   GW_IP[2] adresa brány&lt;br /&gt;
 sys[19]  01 i R   GW_IP[3] adresa brány&lt;br /&gt;
 &lt;br /&gt;
 sys[20]  01 i R   NETMASK[0] síťová maska (nastaveno ve webové administraci)&lt;br /&gt;
 sys[21]  01 i R   NETMASK[1] síťová maska&lt;br /&gt;
 sys[22]  01 i R   NETMASK[2] síťová maska&lt;br /&gt;
 sys[23]  01 i R   NETMASK[3] síťová maska&lt;br /&gt;
&lt;br /&gt;
 sys[24]  01 i R   stav rozhraní Ethernet (je spuštěno?)&lt;br /&gt;
                    == 0 : komunikace přes Ethernet není k dispozici (odpojený kabel, vypnutá protistrana nebo switch, atd.)&lt;br /&gt;
                    != 0 : Ethernetová komunikace je funkční (LINK OK)&lt;br /&gt;
 &lt;br /&gt;
 sys[25]  01 i R   rychlost připojení k síti Ethernet (hodnoty: 0, 10, 100)&lt;br /&gt;
                    == 0   : neznámá rychlost (není k dispozici Ethernet)&lt;br /&gt;
                    == 10  : 10 MBit per sec&lt;br /&gt;
                    == 100 : 100 MBit per sec&lt;br /&gt;
&lt;br /&gt;
 sys[26]  04 i RW  hodnota GMT offsetu pro NTP (nastaveno v administraci ve webovém rozhraní)&lt;br /&gt;
                    - platné hodnoty: -11 až 11 (včetně) (údaj v hodinách)&lt;br /&gt;
                    - zápis je možný, ale změněná hodnota (ze SDS-C) není uložena do pevné paměti &lt;br /&gt;
                      (po resetu zařízení se vráti na poslední uloženou hodnotu)&lt;br /&gt;
&lt;br /&gt;
 sys[27]  06 i R   platnost přidělené IP adresy zařízení SDS&lt;br /&gt;
                    == 0 : zařízení SDS nemá přidělenou platnou IP adresu (typický důvod: čeká se na DHCP)&lt;br /&gt;
                    != 0 : zařízení SDS má přidělenou platnou IP adresu a může komunikovat přes Ethernet&lt;br /&gt;
 &lt;br /&gt;
 sys[28]  06 i R   poslední okamžik kdy byla změněna IP adresa,&lt;br /&gt;
                   buď ručně z webového rozhraní (administrace) nebo DHCP serverem (je-li DHCP zapnuto)&lt;br /&gt;
                    - údaj odpovídá stavu UpTime10 (1 krok = 10 msec) v daný okamžik&lt;br /&gt;
 &lt;br /&gt;
 sys[29]  06 i R   DHCP: stav (lze použít pro kontrolu správné funkce DHCP klienta v SDS)&lt;br /&gt;
                    == 0 : v klidu (nic se neprovádí, nebo DHCP je vypnuté)&lt;br /&gt;
                    == 1 : odesláno DHCP DISCOVER&lt;br /&gt;
                    == 2 : obdrženo DHCP OFFER&lt;br /&gt;
                    == 3 : odesláno DHCP REQUEST&lt;br /&gt;
                    == 4 : obdrženo DHCP ACK&lt;br /&gt;
                    == 5 : IP adresa je přidělena (BOUND)&lt;br /&gt;
                    == 6,7,8,9,10,11 : zpracování DHCP RENEW&lt;br /&gt;
 &lt;br /&gt;
 sys[30]  06 i R   aktuální hodnota &amp;quot;DHCP Lease Time&amp;quot;&lt;br /&gt;
                    - hodnota je nastavena v okamžiku DHCP BOUND (při přidělení (nové) IP adresy)&lt;br /&gt;
                    - hodnota je každou 1 sec snížena o jednotku (když dojde na nulu, klient začne obnovovat IP adresu)&lt;br /&gt;
                    - údaj je uveden v jednotkách [sec]&lt;br /&gt;
&lt;br /&gt;
 sys[31]  04 i R   MAC[0] (celá MAC je nastavena ve webovém rozhraní)&lt;br /&gt;
 sys[32]  04 i R   MAC[1] &lt;br /&gt;
 sys[33]  04 i R   MAC[2] &lt;br /&gt;
 sys[34]  04 i R   MAC[3] &lt;br /&gt;
 sys[35]  04 i R   MAC[4] &lt;br /&gt;
 sys[36]  04 i R   MAC[5] (vždy je vyplněno dolních 8 bitů)&lt;br /&gt;
&lt;br /&gt;
 sys[37]  06 i R   NTP Client Status (synchronizace času)&lt;br /&gt;
                    == 0 : nesynchronizováno&lt;br /&gt;
                    == 1 : úspěšně přijal paket od NTP Serveru&lt;br /&gt;
               W   zápis hodnoty 10 (přesně a pouze: 10) do tohoto indexu vyvolá nucený NTP dotaz &lt;br /&gt;
                   (dotaz se odešle za 10sec od takovéhoto zápisu)&lt;br /&gt;
 &lt;br /&gt;
 sys[38]  07 i R   čistý UTC čas - v sekundách (UNIX Epoch čas)&lt;br /&gt;
                    - není zde aplikován offset, ani automatika letního času&lt;br /&gt;
                    - přímá hodnota získaná z NTP serveru (tj. jeho odpověď), &lt;br /&gt;
                      uvnitř SDS je sice udržována jako 32bit, &lt;br /&gt;
                      ale do SDS-C programu je hodnota předána jen jako 31bit číslo (nejvyšší 32.bit je odmaskován).&lt;br /&gt;
 &lt;br /&gt;
 sys[39]  07 i R   stav automatiky přepínání Letního Času&lt;br /&gt;
                    == 0 : automatika zakázána, lokální čas není ovlivněn&lt;br /&gt;
                    == 1 : automatika povolena, ale v současné době (podle NTP UTC času) je letní čas neaktivní (tzn. je &amp;quot;SEČ&amp;quot;).&lt;br /&gt;
                    == 2 : automatika povolena, a v současné době (podle NTP UTC času) je letní čas aktivní (tzn. je &amp;quot;SELČ&amp;quot;).&lt;br /&gt;
                           (tzn. do sys[4] je připočten nejen offset ze sys[26], ale teď také plus 1 hodina kvůli SELČ).&lt;br /&gt;
          09 i W   pouze pro případ vypnutého NTP: ruční ovládání automatiky (tzn. povolena nebo nepovolena) (SELČ pak automatika sama rozhodne, je-li povolena)&lt;br /&gt;
                    zápis 0 : vypnout automatiku (nebude pracovat = nebude aplikoval posun pro SELČ pro nastavený rozsah v roce), sys[39] pak vrátí 0 při čtení&lt;br /&gt;
                    zapis 3 : zapnout automatiku (automatika aplikuje posun pro SELČ podle toho jaký je aktuální čas a datum), sys[39] pak vrátí 1 nebo 2 dle stavu  &lt;br /&gt;
 &lt;br /&gt;
 sys[138] 09 i R   stav RTC (záloha času - pouze SDS se záložní baterií)&lt;br /&gt;
                   zatím stále 0, tzn. nepoužito, další obsah se chystá (nový FW)&lt;br /&gt;
 &lt;br /&gt;
 sys[139] 09 i R   vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Princip funkce automatiky letního času je popsán jinde na této wiki. Funkce automatiky je samozřejmě volitelná (viz: ruční nastavení ve webovém rozhraní).&lt;br /&gt;
&lt;br /&gt;
 sys[40] až sys[44]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provozní údaje ==&lt;br /&gt;
&lt;br /&gt;
 sys[45]  06 i R   relativní čas v milisekundách, počítaný od zapnutí zařízení (tj. UpTime1)&lt;br /&gt;
                    - po resetu zařízení začíná vždy počítat od nuly&lt;br /&gt;
                    - každou milisekundu se zvýší o 1 (narozdíl od UpTime10);&lt;br /&gt;
                      tzn. toto je velmi podobná hodnota jako UpTime, ale je v jiných jednotkách!&lt;br /&gt;
                    - pro sys[45] je k dispozici 31 bitů,&lt;br /&gt;
                      takže po 2147483648 msec dojde k vynulování sys[45] a počítá se opět od nuly nahoru&lt;br /&gt;
                      (pozn.: SDS si interně udržuje hodnotu jako 32bitů, ale do SDS-C programu se předává jen 31bitů).&lt;br /&gt;
&lt;br /&gt;
 sys[46]  06 i R   &amp;quot;surová&amp;quot; (raw) hodnota teploty SoC chipu (není to přímo teplota v degC, ale speciální digitální hodnota),&lt;br /&gt;
                   význam hodnot závisí na typu konkrétního zařízení SDS. &lt;br /&gt;
                   Je to dáno způsobem měření této teploty, a převod na stupně Celsia je jednoduchý, přes vzorec.&lt;br /&gt;
 &lt;br /&gt;
 SDS MICRO (LM), MACRO (LM), UPS, IO6 (LM): &lt;br /&gt;
  Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = ((5*(59-30*((3/1024)*sys[46])))/2) ]&lt;br /&gt;
 &lt;br /&gt;
 SDS TTCPRO, MINI, MACRO-ST, MICRO-ST, IO6-ST: &lt;br /&gt;
  Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = (((((sys[46]/4096)*3.3)-0.76)/0.0025)+25) ]&lt;br /&gt;
&lt;br /&gt;
Teplota SoC je pouze orientační, a je měřena s přesností +/- 5 degC.&lt;br /&gt;
&lt;br /&gt;
 sys[137] 09 i R   POUZE VARIANTY &amp;quot;ST&amp;quot; - počet provedených cyklů procesoru (provedených CPU instrukcí) od zapnutí/restartu &lt;br /&gt;
                   (při přetečení 2^31 počítá opět od nuly, pořád dokola)&lt;br /&gt;
&lt;br /&gt;
Hodnota v indexu 137 je nejjemnější možný &amp;quot;časovač&amp;quot;, dostupný pro program. Délka kroku jednotky odpovídá frekvenci jádra (ta je různá pro jednotlivá SDS, pro řadu ST typicky 120MHz, tedy 1 krok je 8.3nsec). &lt;br /&gt;
Tento index vyžaduje aktuální FW (11/2022 nebo novější).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhraní sériové komunikace ==&lt;br /&gt;
&lt;br /&gt;
SDS-C poskytuje přístup k sériovému rozhraní COM1 a COM6. Pouze rozhraní COM1 je také současně přístupno přes převodník Eth/UART (VCP). Program v SDS-C může přistupovat jak ke COM1, tak ke COM6.&lt;br /&gt;
&lt;br /&gt;
Pomocí SDS-C lze zapisovat do sériového rozhraní, a číst data ze sériového rozhraní. Data, přicházející z venku do zařízení SDS, jsou ukládána do příslušného bufferu (RX FIFO), takže lze pomocí SDS-C programu číst i pomaleji, než je rychlost příchozích dat. Buffery jsou malé (zhruba 1kB), proto je potřeba data zpracovávat rychle a včas, ať nedojde k jejich ztrátě.&lt;br /&gt;
&lt;br /&gt;
Poznámka: čtení z UART RX bufferů je k dispozci jen od verze SDS-C č. '''04''' (včetně) a výše. &lt;br /&gt;
Poznámka: UART buffery (pro obě sériové rozhraní) jsou neustále aktivní a příjem dat z UARTu probíhá po celou dobu zapnutí zařízení.&lt;br /&gt;
&lt;br /&gt;
Rozhraní COM1:&lt;br /&gt;
&lt;br /&gt;
 sys[48]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM1 prázdný. Možné hodnoty:&lt;br /&gt;
                    == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)&lt;br /&gt;
                    == 1 : RX buffer je '''prázdný''' (nebyl přijat znak od posledního vyprázdnění bufferu)&lt;br /&gt;
 &lt;br /&gt;
 sys[49]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM1&lt;br /&gt;
                    - čtením tohoto sys[49] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici), &lt;br /&gt;
                      takže si dejte '''pozor''' protože po vyjmutí už tento znak v bufferu samozřejmě není ! &lt;br /&gt;
                      (Toto může způsobit nezkušenému programátorovi potíže). &lt;br /&gt;
                      Proto je vhodnější čtení ze sys[49] provést vždy jednou do vlastní proměnné, &lt;br /&gt;
                      a s tou pak dále dle libosti pracovat.&lt;br /&gt;
                   Možné hodnoty: &lt;br /&gt;
                    == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)&lt;br /&gt;
                    == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)&lt;br /&gt;
&lt;br /&gt;
Poznámka: UART-COM1 buffer je '''vymazán vždy tehdy''', když se připojí TCP klient k převodníku Eth/UART - pozor!&lt;br /&gt;
&lt;br /&gt;
 sys[50]  02 i R   je připojen klient (Ethernet) k převodníku Eth/UART ?&lt;br /&gt;
                    == 0 : není připojen klient&lt;br /&gt;
                    != 0 : je připojen klient (přes TELNET port)&lt;br /&gt;
 sys[51]  02 i R   rychlost [bps] rozhraní UART - COM1 (viz převodník Eth/UART)&lt;br /&gt;
 sys[52]  02 i R   počet datových bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 5,6,7,8)&lt;br /&gt;
 sys[53]  02 i R   počet stop bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 1,2)&lt;br /&gt;
 sys[54]  02 i R   nastavení paritního bitu rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)&lt;br /&gt;
&lt;br /&gt;
Poznámka: parametry sériového rozhraní UART COM1 lze nastavit v rámci převodníku Ethernet/UART (přes RFC příkazy), nebo pomocí k tomu určené SDS-C funkce. Pozor, nastavení '''nelze''' změnit přímým zápisem hodnoty do sys[50] až sys[54] (ty jsou pouze pro čtení).&lt;br /&gt;
&lt;br /&gt;
Rozhraní COM6:&lt;br /&gt;
&lt;br /&gt;
 sys[55]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM6 prázdný. Možné hodnoty:&lt;br /&gt;
                    == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)&lt;br /&gt;
                    == 1 : RX buffer je '''prázdný''' (nebyl přijat znak od posledního vyprázdnění bufferu)&lt;br /&gt;
 &lt;br /&gt;
 sys[56]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM6&lt;br /&gt;
                    - čtením tohoto sys[56] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici)&lt;br /&gt;
                   Možné hodnoty: &lt;br /&gt;
                    == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)&lt;br /&gt;
                    == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)&lt;br /&gt;
&lt;br /&gt;
 sys[57]  02 i R   rychlost [bps] rozhraní UART - COM6 &lt;br /&gt;
 sys[58]  02 i R   počet datových bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 5,6,7,8,9)&lt;br /&gt;
 sys[59]  02 i R   počet stop bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 1,2)&lt;br /&gt;
 sys[60]  02 i R   nastavení paritního bitu rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)&lt;br /&gt;
&lt;br /&gt;
Rozhraní UART - COM6 je k dispozici jen na SDS-MINI, SDS-MICRO-ST a SDS-MACRO-ST, a je přístupné jen z SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Doplňující statistiky (počty rx/tx bajtů atd.) jsou k dispozici na indexu 2800+, viz dále na této stránce (dostupnost těchto údajů je závislá na instalovaném aktuálním FW ve vašem SDS).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generátor náhodných čísel ==&lt;br /&gt;
&lt;br /&gt;
 sys[61]  06 i R   generátor náhodných čísel&lt;br /&gt;
                    - při každém přečtení sys[61] je poskytnuto náhodné číslo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výsledek převodu textu na číslo ==&lt;br /&gt;
&lt;br /&gt;
Pro převod textu (z určené pozice pole ''text'' či ''share'') na číslo se používá funkce SDS-C: ''atoi''. Aby bylo možné výsledek převodu získat, musíte si jej přečíst ze ''sys[62]''.&lt;br /&gt;
&lt;br /&gt;
 sys[62]  06 i RW  výsledek převodu provedeného funkcí '''atoi(text[index]);'''&lt;br /&gt;
&lt;br /&gt;
Pro více informací se podívejte přímo na návod k této funkci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nastavení rychlosti provádění SDS-C programu ==&lt;br /&gt;
&lt;br /&gt;
SDS-C program může ovlivnit rychlost svého vykonávání. Buď se každá instrukce provede právě s minimálním krokem co 1 msec, nebo se dá tato (často žádoucí) vlastnost snadno vypnout. Pozor, hodnota 1 msec není vždy garantována, např. při zavolání funkce která pracuje s pomalou periférií dojde k čekání, dokud se požadovaná funkce nedokončí.&lt;br /&gt;
&lt;br /&gt;
 sys[63]  04 i RW  vypnutí rychlostního omezení běhu programu, nastavte na:&lt;br /&gt;
                    == 0   : (výchozí hodnota po spuštění programu) - jeden celý příkaz se provede '''co 1 msec'''&lt;br /&gt;
                    == 128 : program je prováděn s co největší rychlostí (bez zarovnávacího 1 msec kroku) &lt;br /&gt;
                             ( pozor ale na realizaci čekacích smyček, pak lze použít jen k tomu určené SDS-C funkce nebo sys[64] )&lt;br /&gt;
&lt;br /&gt;
Poznámka: všechny SDS-C programy jsou ve výchozím stavu spouštěny se sys[63] = '''0''' (tzn. jeden celý příkaz programu je vykonán právě co 1 msec).&lt;br /&gt;
&lt;br /&gt;
Tohoto faktu (krok 1 msec) některé programy využívají k realizaci čekacích smyček, když se předpokládá jeden vykonaný příkaz za 1 msec. Není to však vhodné, protože SDS nedává garanci že se vždy bude jednat přesně o 1 msec (může docházet k náhodnému zdržení až o několik msec, v záležitosti na ostatní činnost systému). Pokud však vypnete toto rychlostní omezení, tak takové případné čekací smyčky přestanou plnit svou funkci (prakticky skončí mnohem dříve): proto ve svých programech používejte pouze k realizaci &amp;quot;čekání&amp;quot; pouze k tomu určené funkce, nebo případně sys[64] nebo některý z UpTime indexů či sys[137] atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Časování ==&lt;br /&gt;
&lt;br /&gt;
Pro přesnější časování programu, popř. pro spuštění nějaké události po přesně daném intervalu, lze s výhodou využít následující proměnnou:&lt;br /&gt;
&lt;br /&gt;
 sys[64]  01 i RW  sekundový odpočítávač &lt;br /&gt;
                    - zapište libovolné kladné číslo, a systém každou vteřinu toto číslo sníží o 1, &lt;br /&gt;
                      až do nuly, kde v sys[64] zůstane nula (dokud tam zase něco nezapíšete)&lt;br /&gt;
                    - nejvyšší možná použitelná hodnota: (31-bitů) 2147483647 secs (včetně)&lt;br /&gt;
&lt;br /&gt;
Samozřejmě lze využít i jiné způsoby, ale tento je k tomu explicitně určen, vyhovuje-li hrubý krok 1 sekunda. Pro jemnější časování jsou pak vhodnější indexy s UpTime hodnotou, nebo sys[137] pro nejvíce jemné čekání - tyto indexy ale nemají funkci odpočítávání (jsou jen pro čtení), takže hlídání obsahu si už musíte řešit sami ve svém programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OSI7 funkce ==&lt;br /&gt;
&lt;br /&gt;
OSI7 funkce jsou určeny pro komunikaci mezi SDS a vnějším světem připojeným přes Ethernet (např. se servery v Internetu).&lt;br /&gt;
&lt;br /&gt;
Všechny funkce OSI7 poskytují průběžný stav své činnosti:&lt;br /&gt;
 sys[65]  01 i R   status code - hlášení průběhu, úspěšnosti, nebo chyby OSI7 funkcí (DNS, HTTP-GET, email, ...)&lt;br /&gt;
                    - význam hodnot viz [[OSI7_status_code|popis zde]]&lt;br /&gt;
&lt;br /&gt;
Poznámka: vždy je doporučeno, po zavolání kterékoliv OSI7 funkce, provést v programu čekání na skončení této funkce. Čekání má kontrolovat právě hodnotu v sys[65], a dokud se tato proměnná nenaplní výsledkem, nevolejte další OSI7 funkci.&lt;br /&gt;
&lt;br /&gt;
DNS resolv: sestavením IP[0].IP[1].IP[2].IP[3] získáte IP adresu (napr. 10.0.0.8) z DNS po úspěšném návratu z funkce DNS resolveru. Tato získaná IP adresa pak může sloužit pro různé účely, např. pro kontrolu DNS serveru jestli žije atd.&lt;br /&gt;
 sys[66]  01 i R   bajt IP[0] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[67]  01 i R   bajt IP[1] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[68]  01 i R   bajt IP[2] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[69]  01 i R   bajt IP[3] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
&lt;br /&gt;
Pro funkci DNS resolveru je potřeba provést konfiguraci (přes webové rozhraní).&lt;br /&gt;
 sys[70]  01 i R   bajt DNS_R_IP[0] - adresa samotného DNS resolveru (DNS server)&lt;br /&gt;
 sys[71]  01 i R   bajt DNS_R_IP[1] - adresa samotného DNS resolveru&lt;br /&gt;
 sys[72]  01 i R   bajt DNS_R_IP[2] - adresa samotného DNS resolveru&lt;br /&gt;
 sys[73]  01 i R   bajt DNS_R_IP[3] - adresa samotného DNS resolveru&lt;br /&gt;
&lt;br /&gt;
 sys[74]  01 s R   text, reserved (v této verzi nepoužito)&lt;br /&gt;
&lt;br /&gt;
Rozšířená funkcionalita pro DNS resolver (pouze ve FW od 11/2025):&lt;br /&gt;
&lt;br /&gt;
 sys[303]  09 i R   DNS RESOLV - (read:) actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done or finished yet)&lt;br /&gt;
 sys[303]  09 i W   DNS RESOLV - write value 0xD65 (3429dec) to clear the DNS cache&lt;br /&gt;
 sys[304]  09 i R   DNS RESOLV - (read:) timestamp (UTC) of the latest DNS server response (packet) as requested by dns_resolv() function (if 0 then no response received, or cache has expired)&lt;br /&gt;
 sys[305]  09 i R   DNS RESOLV - (read:) get the last set hard TTL limit (0 = invalid (will use 1209600 as default), otherwise 1..MAX = time in seconds)&lt;br /&gt;
 sys[305]  09 i W   DNS RESOLV - set the hard TTL value limit (in seconds)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP GET:&lt;br /&gt;
&lt;br /&gt;
 sys[75]  01 i R   návratový kód webového serveru pro HTTP GET (odpověď z webového serveru)&lt;br /&gt;
                    - nastaveno po dokončení práce funkce '''http_get()'''&lt;br /&gt;
                    - např. číslo '''200''' pro 'OK', '''404''' pro 'not found', a tak dále.&lt;br /&gt;
 &lt;br /&gt;
 sys[76]  03 i RW  číslo portu který chcete aby HTTP klient použil (výchozí hodnota po startu je '''80''')&lt;br /&gt;
                    - '''pozn.''' hodnota tohoto sys[76] se přebere v okamžiku zavolání '''http_get''',&lt;br /&gt;
                      pozdější zápisy mají vliv až zase v okamžiku dalšího zavolání '''http_get'''.&lt;br /&gt;
 &lt;br /&gt;
 sys[77]  04 i RW  ukládat data přijatá z HTTP serveru po obdržení odpovědi na HTTP GET požadavek&lt;br /&gt;
                   do pole ram[]. Tato funkce je výhodná pro okamžité řízení SDS-C programu. &lt;br /&gt;
                   Nastavte na:&lt;br /&gt;
 &lt;br /&gt;
                    == 0 : jakékoliv přijaté data jsou '''zahozena''', &lt;br /&gt;
                           neuloží se (nedojde ke změně obsahu ram[] nebo text[])&lt;br /&gt;
 &lt;br /&gt;
                    == 1 : prvních sys[78] bajtů odpovědi je vloženo do pole ram[] v rozsahu ram[1] až ram[sys[78]]&lt;br /&gt;
                           a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).&lt;br /&gt;
                           (tzn. původní obsah této oblasti pole ram[] je přepsán)&lt;br /&gt;
                           (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], &lt;br /&gt;
                            bude zápis přerušen a přijatý 0x00 nebude uložen)&lt;br /&gt;
 &lt;br /&gt;
                    == 2 : prvních sys[78] bajtů odpovědi je vloženo do pole text[] v rozsahu text[0] až text[sys[78]]&lt;br /&gt;
                           a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).&lt;br /&gt;
                           (tzn. původní obsah této oblasti pole text[] a položka ram[0] je přepsán)&lt;br /&gt;
                           (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], &lt;br /&gt;
                            bude zápis přerušen a přijatý 0x00 nebude uložen)&lt;br /&gt;
 &lt;br /&gt;
                   Hodnota do ram[0] je vždy zapsaná, ať je sys[77] jakékoliv. Počítejte s tím ve svém programu !&lt;br /&gt;
 &lt;br /&gt;
 sys[78]  04 i RW  počet bajtů, které CHCETE uložit do ram[] nebo text[] po přijetí HTTP GET odpovědi&lt;br /&gt;
                    - výchozí hodnota je '''32''' (tzn. uloží se 32 znaků + samostatně délka do ram[0])&lt;br /&gt;
                    - maximální hodnota je omezena velikostí pole ram[] nebo text[]&lt;br /&gt;
                    - pozor! pokud zapíšete '''0''', budou všechna data zahozena, &lt;br /&gt;
                      ale i v takovém případě dojde k přepisu ram[0] (viz výše)&lt;br /&gt;
&lt;br /&gt;
 sys[79] až sys[80]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Pozor, v případě nenulového sys[77] HTTP klient čeká tak dlouho, dokud nedostane všech sys[78] bajtů odpovědi z protistrany. To je častou příčinou &amp;quot;problémů&amp;quot; kdy protistrana neodpoví dostatečně dlouhou odpovědí, a klient má stále otevřené spojení a stále čeká a čeká... až dojde na timeout. Což je pak potřeba důsledně a správně ošetřit ve vašem SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Pro funkci SMTP je potřeba provést konfiguraci (přes webové rozhraní):&lt;br /&gt;
 sys[81]  01 i R   bajt SMTP_S_IP[0] - adresa SMTP serveru (je použita pro funkci '''smtp_send()''')&lt;br /&gt;
 sys[82]  01 i R   bajt SMTP_S_IP[1] - adresa SMTP serveru&lt;br /&gt;
 sys[83]  01 i R   bajt SMTP_S_IP[2] - adresa SMTP serveru&lt;br /&gt;
 sys[84]  01 i R   bajt SMTP_S_IP[3] - adresa SMTP serveru&lt;br /&gt;
&lt;br /&gt;
 sys[85] až sys[88]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Informace z ('''interní''') ICMP PING funkcionality &amp;quot;IP Watchdog&amp;quot; (konfigurace a ovládání přes webové rozhraní SDS) (nemá souvislost s SDS-C funkcí &amp;quot;ping()&amp;quot; ) :&lt;br /&gt;
&lt;br /&gt;
 sys[89]  06 i R   IP-Watchdog: stav&lt;br /&gt;
                    == 0 : není v provozu (neaktivováno ve webovém rozhraní)&lt;br /&gt;
                    != 0 : v provozu (uživatel aktivoval IP-Watchdog ve webovém rozhraní)&lt;br /&gt;
 &lt;br /&gt;
 sys[90]  06 i R   IP-Watchdog: poslední známé RTT&lt;br /&gt;
                    == 0 .. 65533 : hodnota RTT v msec&lt;br /&gt;
                    &amp;gt;= 65534      : hodnota není k dispozici (nebyl obdržen PING response)&lt;br /&gt;
 &lt;br /&gt;
 sys[91]  06 i R   IP-Watchdog: stav výstupu&lt;br /&gt;
                    == 0 : výstup není aktivován&lt;br /&gt;
                    != 0 : výstup je aktivován (nebyl obdržen PING response podle zadaných požadavků)&lt;br /&gt;
&lt;br /&gt;
Informace z (SDC-C) ICMP PING funkce - '''ping()''' :&lt;br /&gt;
&lt;br /&gt;
 sys[92]  04 i R   stav ICMP PING RESPONSE v okamžiku čtení tohoto sys[92] &lt;br /&gt;
                    == 0 : klid (není odeslán paket, nečekám na odpověď), &lt;br /&gt;
                           popř. byla zadána neplatná IP adresa do funkce '''ping()''' a proto se nic neodešle&lt;br /&gt;
                    == 1 : funkce '''ping()''' byla právě zavolána, &lt;br /&gt;
                           takže se teprve chystá provést svou činnost, zatím se neví výsledek odesílání&lt;br /&gt;
                    == 2 : čeká se na odpověď od ARP &lt;br /&gt;
                           (POZOR! Znamená to že místo ICMP PING REQUEST paketu byl odeslán ARP paket, &lt;br /&gt;
                           protože v ARP tabulce nebyl příslušný záznam)&lt;br /&gt;
                    == 4 : poslán ECHO REQUEST, čekám na ECHO REPLY &lt;br /&gt;
                          (požadovaný stav, funkce '''ping()''' funguje ok)&lt;br /&gt;
                    == 8 : právě obdržel ECHO REPLY &lt;br /&gt;
                          (byla přijata odpověď od vzdáleného zařízení)&lt;br /&gt;
 &lt;br /&gt;
 sys[93]  04 i R   PING SEQ number &lt;br /&gt;
                    - hodnota je nastavena na '''-1''' dokud není přijata odpověď ICMP PING RESPONSE &lt;br /&gt;
                      na ICMP PING REQUEST odeslaný funkcí '''ping()'''&lt;br /&gt;
 &lt;br /&gt;
 sys[94]  04 i R   Round Trip Time, v milisekundách&lt;br /&gt;
                    - dokud není přijata platná ICMP PING RESPONSE tak je zde hodnota '''0xFFFF'''&lt;br /&gt;
                    - čas je zvyšován po pěti milisekundách (údaj v sys[94] je přímo v msec, např. hodnota 55 znamená 55 msec)&lt;br /&gt;
&lt;br /&gt;
Pozn.: ICMP Quench (32bit) je sestaven z &amp;quot;identifier&amp;quot; (16bit) a z &amp;quot;sequence number&amp;quot;. Pomocí sys[93] můžete nastavit '''číslo sekvence''' na libovolnou hodnotu, přičemž hodnota &amp;quot;identifier&amp;quot; je napevno nastavena na &amp;quot;'''0x0280'''&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkce '''send_udp()''':&lt;br /&gt;
&lt;br /&gt;
 sys[95]  06 i R   výsledek posledního volání '''send_udp()'''&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : nic neprovedeno&lt;br /&gt;
                           Hodnota '''0''' je nastavena po startu SDS-C programu&lt;br /&gt;
                    == 1 : právě bylo zahájeno odesílání paketu (provádí se)&lt;br /&gt;
                           nastaveno okamžitě po jakémkoliv zavolání '''send_udp()'''.&lt;br /&gt;
                    == 2 : byl odeslán UDP paket, úspěšně&lt;br /&gt;
                           Hodnota '''2''' je nastavena až v okamžiku úspěšného skutečného odeslání UDP paketu&lt;br /&gt;
                    == 3 : nebyl odeslán UDP paket, protože byl místo toho odeslán ARP dotaz &lt;br /&gt;
                           Hodnota '''3''' je nastavena, pokud není známá MAC pro zadanou IP &lt;br /&gt;
                           a byl tedy místo požadovaného UDP paketu odeslán ARP dotaz&lt;br /&gt;
                    == 4 : zavolali jste funkci '''send_udp()''' dříve, &lt;br /&gt;
                           než byla dokočena činnost předchozího požadavku &lt;br /&gt;
                           (sledujte hodnotu sys[95] a správně ji vyhodnocujte, a nestane se vám to)&lt;br /&gt;
                    == 5 : byly zadány neplatné parametry (neplatná IP, nebo port, nebo index či délka dat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkce '''snmp_send_trap()''':&lt;br /&gt;
&lt;br /&gt;
 sys[96]  06 i R   výsledek posledního volání '''snmp_send_trap()'''&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : odesílání neprobíhá&lt;br /&gt;
                    == 1 : probíhá odesílání, výsledek ještě není znám&lt;br /&gt;
                    == 2 : odeslání se povedlo &lt;br /&gt;
                    == 3 : odeslání se nepovedlo (neplatné parametry při zavolání funkce)&lt;br /&gt;
                    == 4 : odeslání se nepovedlo (není známý ARP záznam pro udanou host IP)&lt;br /&gt;
                    == 5 : odeslání se nepovedlo (právě pracuje (odesílá své data) některá jiná funkce, např. http_get)&lt;br /&gt;
&lt;br /&gt;
 sys[97]           RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zápis textu do pole, Porovnání textů ==&lt;br /&gt;
&lt;br /&gt;
Položka ''sys[98]'' je využita více SDS-C funkcemi, přičemž všechny tyto funkce pracují s polem ''text[]''.&lt;br /&gt;
&lt;br /&gt;
 sys[98]     i R   společné využití viz (1) a (2)&lt;br /&gt;
 &lt;br /&gt;
          06 i R   (1) číslo indexu do pole ''text[]'' kam byla zapsána terminační 0x00,&lt;br /&gt;
                       tj. ukazatel kde byl aktuální konec zápisu do pole ''text[]'', &lt;br /&gt;
                       což je hodnota užitečná pro navázání textu (zápis více textů přesně za sebou), popř. určení délky posledního zápisu:&lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''sprintf()'''&lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''itoh()''' &lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''itoa()''' &lt;br /&gt;
 &lt;br /&gt;
          08 i R   (2) výsledek porovnání textů&lt;br /&gt;
                        - hodnota výsledku zavolání funkce '''textcmp()'''&lt;br /&gt;
                            X &amp;lt; 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v poli ''text[]'' než v porovnávaném řetězci&lt;br /&gt;
                            X == 0 : oba texty jsou identické&lt;br /&gt;
                            X &amp;gt; 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v porovnávaném řetězci než v poli ''text[]''&lt;br /&gt;
&lt;br /&gt;
Význam &amp;quot;nižší vlastní hodnoty&amp;quot;: znak 'a' má nižší hodnotu než 'b', a to o 1; nebo např. '1' má nižší hodnotu než '4' a to o 3.&lt;br /&gt;
&lt;br /&gt;
Doporučeno je si to vše vyzkoušet (zavolat si každou uvedenout funkci a srovnat hodnotu v sys[98] s obsahem pole ''text[]'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uživatelské pozice v pevné paměti == &lt;br /&gt;
&lt;br /&gt;
 sys[99]  05 i RW  předávací proměnná pro čtení a zápis z/do paměti [[SDS-C: DataFlash|dataflash]]&lt;br /&gt;
&lt;br /&gt;
 sys[100] až sys[115]  &lt;br /&gt;
          01 i RW  data uložená do permanentní paměti = co se sem napíše zůstane i po vypnutí zařízení,&lt;br /&gt;
                   můžete si sem uložit co chcete (tj. 16x signed long délky 32bit),&lt;br /&gt;
                    - po speciálním systémovém resetu (RSTD) je vše nastaveno na 0xFFFFFFFF &lt;br /&gt;
                    - pozor! minimalizujte množství zápisů, životnost této paměti není neomezená !&lt;br /&gt;
                    - zápis do těchto sys[] přímo ihned fyzicky zapíše do pevné paměti &lt;br /&gt;
                    - čtení těchto sys[] způsobí přímé fyzické čtení pevné paměti &lt;br /&gt;
&lt;br /&gt;
Paměť EEPROM a paměť DATAFLASH (podle verze HW který máte) je permanentní (NVM), tzn. její obsah zůstane i po vypnutí zařízení nezměněn (na rozdíl od &amp;lt;u&amp;gt;ne&amp;lt;/u&amp;gt;zálohované paměti RAM, do které se přistupuje pomocí pole ''ram[]'').&lt;br /&gt;
&lt;br /&gt;
''' Reserved '''&lt;br /&gt;
&lt;br /&gt;
 sys[116] až sys[136]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné nastavitelné uživatelem z webového rozhraní ==&lt;br /&gt;
&lt;br /&gt;
Pomocí &amp;quot;uživatelských proměnných&amp;quot; (někdy taky &amp;quot;sdílených proměnných&amp;quot;) lze snadno ovlivnit chod vašeho SDS-C programu, ale jen tak, jak si do něj sami naprogramujete - uživatelské proměnné neovlivňují samotný program, ale program je může číst a následně zpracovat.&lt;br /&gt;
&lt;br /&gt;
 sys[140] až sys[149] &lt;br /&gt;
          01 i RW  &amp;quot;uživatelské proměnné&amp;quot;, které můžete měnit &amp;quot;z webu&amp;quot; (správně formulovaným HTTP GET dotazem)&lt;br /&gt;
                   (vždy 32-bit signed integer)&lt;br /&gt;
&lt;br /&gt;
 sys[150] 01 i RW  blokování přístupu k možnosti změny obsahu &amp;quot;uživatelských proměnných&amp;quot; z webu&lt;br /&gt;
                   Nastavení:&lt;br /&gt;
                    == 0 : stránka &amp;quot;control&amp;quot; je přístupná bez hesla, &lt;br /&gt;
                    != 0 : pro přístup je nutno se přihlásit (uživatel je vyzván k příhlášení)&lt;br /&gt;
&lt;br /&gt;
Uživatel, který má přístup k webové stránce, může zapsat nový obsah do těchto osmi proměnných (změnit jejich hodnotu), kdykoliv chce. Dvě doplňkové proměnné nejsou na výchozí webové stránce dostupné, ale jinak s nimi lze bez jiných omezení pracovat (SDS-C, M2M).&lt;br /&gt;
&lt;br /&gt;
Zápisem do ''sys[150]'' můžete nastavit bezpečnost přístupu k této webové stránce.&lt;br /&gt;
&lt;br /&gt;
Adresa webové stránky je (IP je zde pro příklad): http://192.168.1.250/control (více informací [[SDSC: sharing|zde]]).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě lze využít i přímého URL pro zápis do proměnných, což je výhodné např. při vzájemné komunikaci dvou zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné vstupů a výstupů pro všechny výrobky SDS ==&lt;br /&gt;
&lt;br /&gt;
'''POZOR'''&lt;br /&gt;
&lt;br /&gt;
'''Podle HW verze výrobku, jsou dostupné jen určité vstupy a výstupy.''' Zde je uveden plný seznam pro maximální konfiguraci, ale ne všechny HW verze mají všechno. Např. SDS-MICRO-LM má pouze dva reléové výstupy, kdežto SDS-MACRO-LM má čtyři.&lt;br /&gt;
&lt;br /&gt;
Vždy máme vyhrazeno 32 indexů pro vstupy a výstupy. Tyto indexy jsou tedy naplánovány pro (budoucí) maximální konfiguraci, ale většina SDS k nim nemá odpovídající HW (např. nemá všech 32 relé). Zápis a čtení do/z indexů, které nemají odpovídající fyzický protějšek, je zakázán (bude SDS ignorován, a hodnota nebude uložena pro pozdější čtení).&lt;br /&gt;
&lt;br /&gt;
'''Pokračování výpisu:'''&lt;br /&gt;
&lt;br /&gt;
 sys[151] až sys[182]  &lt;br /&gt;
          01 i R   stav binárního vstupu OPTO1 až OPTO32 (optočlen)&lt;br /&gt;
                    - hodnota odpovídá fyzickému stavu vstupů (zda-li je nebo není přítomen signál na LED optočlenu)&lt;br /&gt;
                    - pozor, hodnota '''0''' skutečně znamená přítomnost signálu&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : (nulová hodnota)             signál přítomen (napětí na LED = svítící LED v optočlenu)&lt;br /&gt;
                    != 0 : (libovolná nenulová hodnota) bez signálu (LED v optočlenu nesvítí)&lt;br /&gt;
&lt;br /&gt;
Pozor, pokud u vašeho SDS (např. historické kousky SDS-MICRO-LIGHT) má číslované OPTO vstupy od nuly (né od jedničky), musíte si aktualizovate firmware v tomto zařízení, a případně upravit potisk (popis) na desce nebo krabičce.&lt;br /&gt;
&lt;br /&gt;
'''Důležité info:'''&lt;br /&gt;
&lt;br /&gt;
Pokud je (uvnitŘ SDS) na LED vstupního optočlenu signál, hodnota '''sys[]''' pro dané OPTOx dává '''0''' (nulu), naopak při nepřítomnosti signálu je přítomna '''nenulová''' hodnota (vždy testujte na nulovou a nenulovou hodnotu, jediné co je zaručeno je totiž ta nula, kdežto nenulová hodnotu může být jakákoliv - ve skutečnosti každý opto vstup má přidělenou konstantu, podle které lze tento vstup identifikovat). &lt;br /&gt;
&lt;br /&gt;
Pozor - &amp;quot;logika&amp;quot; optických vstupů je tedy na první pohled &amp;quot;obrácená&amp;quot; (avšak dává to přesný smysl). Jen je to potřeba vědět při psaní SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stav SDS-C programu ==&lt;br /&gt;
&lt;br /&gt;
Informace o verzi firmware modulu SDS (vhodné např. pro kontrolu, že uživatel používá nejnovější firmware, tak jak má).&lt;br /&gt;
&lt;br /&gt;
 sys[183] 08 i RW  verze nainstalovaného firmware v SDS modulu&lt;br /&gt;
                   (hex: 0x00DDMMYY, nebo jen 0x00000000 u starších FW)&lt;br /&gt;
&lt;br /&gt;
Příklad: FW v SDS je (pro příklad) ze dne 24.12.2018, takže v ''sys[183]'' bude zakódováno jako 0x00180C12, tedy hodnoty 24dec 12dec 18dec zapsány jako 0x18 0x0C 0x12, což je 0x18C0C12 což je 1575954dec.&lt;br /&gt;
&lt;br /&gt;
Informace o způsobu, jakým byl aktuální běh SDS-C programu spuštěn:&lt;br /&gt;
&lt;br /&gt;
 sys[184] 08 i RW  způsob spuštění SDS-C programu&lt;br /&gt;
                   == 0 : bez informace&lt;br /&gt;
                   == 1 : standardní spuštění SDS-C programu po běžném startu zařízení SDS&lt;br /&gt;
                   == 2 : program SDS-C byl (znovu) spuštěn na základě restartu od watchdogu (byl timeout)&lt;br /&gt;
                   == 4 : program SDS-C byl čerstvě nahrán z EXE aplikace&lt;br /&gt;
&lt;br /&gt;
Stav SDS-C watchdogu:&lt;br /&gt;
&lt;br /&gt;
 sys[185] 08 i R   hodnota odpočítávání SDS-C watchdogu v msec&lt;br /&gt;
                   == -1 : wdg není aktivní&lt;br /&gt;
                   ==  0 : odpočet vypršel, dojde k resetu SDS-C programu&lt;br /&gt;
                   1..2147482000 : aktuální hodnota odpočtu (snižuje se o 1 každou milisekundu)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pulse-Width Modulation výstupy ==&lt;br /&gt;
&lt;br /&gt;
Některá SDS mají pouze jeden PWM výstup (PWM1), některá mají čtyři výstupy (rozdělené po dvou do dvou skupin: PWM1 a PWM2, pak PWM3 a PWM4).&lt;br /&gt;
&lt;br /&gt;
''Příklad pro PWM1:'' Konfigurace PWM1 výstupu nejprve vyžaduje zápis do sys[191], aby se nejprve nastavila provozní základní frekvence generátoru.&lt;br /&gt;
Následně lze PWM1 výstup řídit zápisem do sys[192], kdy se podle zapsané hodnoty nastaví střída PWM výstupu (poměr log0 a log1).&lt;br /&gt;
Alternativně lze zápis do sys[192] nahradit zápisem do sys[193], toto lze kombinovat.&lt;br /&gt;
Zápis do sys[191] je potřeba jen jednou (tedy jen tehdy, když je potřeba PWM1 výstup zapnout nebo vypnout, a kdy je potřeba změnit frekvenci generátoru). &lt;br /&gt;
Zápisy do sys[192] a nebo sys[193] se pak mohou dít samostatně (tj. není potřeba pokaždé opakovat zápis do sys[191]).&lt;br /&gt;
&lt;br /&gt;
Různé typy SDS mají jiný způsob obsluhy PWM generátoru - pozor !&lt;br /&gt;
&lt;br /&gt;
Pozor, pro tyto typy SDS:&lt;br /&gt;
&lt;br /&gt;
 SDS '''UPS''', SDS '''IO6 (LM)''', SDS '''IO6-ST''' a SDS '''TTCPRO''' &lt;br /&gt;
 &lt;br /&gt;
 Tyto výrobky nemají PWM výstup (zápis do příslušných sys[] zde nemá význam).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podle typu SDS:&lt;br /&gt;
&lt;br /&gt;
 SDS '''MICRO (LM)''' a SDS '''MACRO (LM)''' - pouze jeden PWM výstup (PWM1)&lt;br /&gt;
 &lt;br /&gt;
 sys[191] 01 i RW  &amp;quot;Fm&amp;quot; = frekvence PWM1 výstupu [Hz]&lt;br /&gt;
                    - do SDS-C č. '''03''': specifický omezený rozsah (souvisí se starým firmware)(bylo v rozsahu: 2 až 10000000).&lt;br /&gt;
                    - pozn. od SDS-C č. '''04''': lze nastavit hodnotu od ''24'' (24Hz) do ''49999998'' (49.999998Mhz)&lt;br /&gt;
 &lt;br /&gt;
 sys[192] 01 i RW  poměr nastavení &amp;quot;pulse-width&amp;quot; PWM1 výstupu (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - do SDS-C č. '''03''': specifický omezený rozsah (souvisí se starým firmware)&lt;br /&gt;
                    - od SDS-C č. '''04''': lze nastavit hodnotu od 0 do &amp;quot;Fm&amp;quot; (např. &amp;quot;Fm / 2&amp;quot; představuje PWM signál 1:1).&lt;br /&gt;
 &lt;br /&gt;
 sys[193] 06 i RW  ruční přímý zápis do registru PWM1 generátoru &lt;br /&gt;
                    - tzn. není předzpracováno jako sys[192], tzn. jedná se o alternativu k sys[192]&lt;br /&gt;
                    - tato hodnota není aktualizována vůči sys[192], ani není archivována&lt;br /&gt;
                    - rozsah: ''0'' až &amp;quot;Fm&amp;quot; (tj. ''0'' až sys[191]).&lt;br /&gt;
&lt;br /&gt;
Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupu osciloskopem.&lt;br /&gt;
&lt;br /&gt;
Hodnoty Fm větší než 1MHz prakticky nemají smysl, snažte se navrhnout svůj systém tak, aby dokázal pracovat ideálně nejvýše ve stovkách kHz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Další typy SDS - všimněte si rozdílu ''významu'' jednotlivých indexů vůči vůči tabulce výše.&lt;br /&gt;
&lt;br /&gt;
 SDS '''MINI''', SDS '''MICRO-ST''' - pouze jeden PWM výstup (PWM1)&lt;br /&gt;
 SDS '''MACRO-ST''' - čtyři PWM výstupy (zde: první skupina PWM1 a PWM2, druhá skupina je popsána dále)&lt;br /&gt;
 &lt;br /&gt;
 sys[191] 07 i RW  &amp;quot;Fm&amp;quot; = (společná) frekvence pro '''PWM1 a PWM2''' výstupy [Hz]&lt;br /&gt;
                    - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM výstupy (lze dále řídit podle sys[192] až sys[195])&lt;br /&gt;
                    - zápis hodnoty 0 vypne PWM1 a PWM2 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu&lt;br /&gt;
 &lt;br /&gt;
 sys[192] 07 i RW  duty-cycle '''PWM1''' výstupu v procentech (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[192] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[192] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[193] 07 i  W  duty-cycle '''PWM1''' výstupu v mikrosekundách (druhý možný způsob nastavování PWM generátoru)&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[193] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[193] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
 &lt;br /&gt;
 sys[194] 07 i RW  duty-cycle '''PWM2''' v procentech (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[194] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[194] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[195] 07 i  W  duty-cycle '''PWM2''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[195] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[195] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
&lt;br /&gt;
 SDS '''MACRO-ST''' - čtyři PWM výstupy (zde druhá skupina: PWM3 a PWM4)&lt;br /&gt;
 &lt;br /&gt;
 sys[186] 09 i RW  &amp;quot;Fm&amp;quot; = (společná) frekvence pro '''PWM3 a PWM4''' výstupy [Hz]&lt;br /&gt;
                    - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM výstupy (lze dále řídit podle sys[187] až sys[190])&lt;br /&gt;
                    - zápis hodnoty 0 vypne PWM3 a PWM4 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu&lt;br /&gt;
 &lt;br /&gt;
 sys[187] 09 i RW  duty-cycle '''PWM3''' v procentech&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[187] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[187] ignorovány (nejsou zapamatovány)&lt;br /&gt;
&lt;br /&gt;
 sys[188] 09 i  W  duty-cycle '''PWM3''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[188] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[188] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
 &lt;br /&gt;
 sys[189] 09 i RW  duty-cycle '''PWM4''' v procentech&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[189] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[189] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[190] 09 i  W  duty-cycle '''PWM4''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[190] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[190] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
&lt;br /&gt;
Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupů osciloskopem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání výstupů - Relé ==&lt;br /&gt;
&lt;br /&gt;
Zápisem do následujících systémových proměnných přímo ovládáte fyzické relé (výstupy) zařízení SDS. Pozor, protože hodnoty zapsané z SDS-C programu se záměrně neukládají do pevné paměti (tzn. nejsou načteny po resetu zařízení SDS). Je to z důvodu bezpečnosti (aby se např. neseplo relé po dlouhém výpadku napájení). Váš program si s tím musí umět poradit - vždy po zapnutí SDS musí vyhodnotit aktuální situaci a až podle toho zapínat relé.&lt;br /&gt;
&lt;br /&gt;
 sys[196] až sys[228]   &lt;br /&gt;
          01 i RW  informace, kdo ovládá '''RE1''' až '''RE32'''&lt;br /&gt;
                    - lze nastavit i z webového rozhraní&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : ovládáno z webového rozhraní (ruční řízení - trvale zapnuto, trvale vypnuto)&lt;br /&gt;
                    == 2 : ovládáno z SDS-C programu (zápis do sys[], je ignorováno nastavení na webu)&lt;br /&gt;
                    == 4 : ovládáno z IP Watchdogu (interní IP watchdog, nastavuje se přes web)&lt;br /&gt;
&lt;br /&gt;
 sys[229] až sys[230]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[231] až sys[262]   &lt;br /&gt;
          01 i RW  stav výstupu RE1 až RE32 (= zápis do tohoto sys[] přímo ovládá relé)&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : relé není aktivní &lt;br /&gt;
                           (cívka relé bez proudu, MICRO-LM: mosfet není sepnut)&lt;br /&gt;
                    != 0 : relé je aktivní &lt;br /&gt;
                           (cívka relé pod proudem, MICRO-LM: mosfet je sepnut = výstup REx je spojen na GND)&lt;br /&gt;
&lt;br /&gt;
 sys[263] až sys[265]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[266] až sys[298]   &lt;br /&gt;
          01 s R   uživatelský textový název pro '''RE1''' až '''RE32''' &lt;br /&gt;
                    - nastaveno ve webovém rozhraní&lt;br /&gt;
&lt;br /&gt;
 sys[264] až sys[300]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání PDx ==&lt;br /&gt;
&lt;br /&gt;
Jednotlivé moduly SDS mají k dispozici dodatečné vstupy a výstupy, označené jako PDx respektive TOPB. Přesný seznam viz návod ke konkrétním modulům.&lt;br /&gt;
&lt;br /&gt;
Stav vstupu (je-li PDx jako vstup) nebo výstupu (je-li PDx jako výstup):&lt;br /&gt;
&lt;br /&gt;
 sys[301] 01 i RW  SDS '''MICRO LM LIGHT''': stav i/o pinu D0 (0 = log0 ; nenulová hodnota v sys = log1 přítomna na pinu)&lt;br /&gt;
                   SDS '''MICRO LM DIN''' a SDS '''MACRO LM''': stav výstupu D0 - MOSFET spínač na GND. Při jakékoliv nenulové hodnotě v sys[301] je MOSFET sepnutý (=D0 na GND), jinak je D0 otevřený (HiZ)&lt;br /&gt;
                   SDS '''TTCPRO''': stav všech osmi pinů v portu PDx (nastavením/čtením sys[301] se přistupuje k jednotlivých osmi bitům v bajtu, kde: bit0=PD0 až bit7=PD7)&lt;br /&gt;
                   SDS '''MINI''': bit0 = stav i/o pinu TOPB, bit1 = stav padu PD1, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''UPS''': nepoužito&lt;br /&gt;
                   SDS '''IO6''': nepoužito&lt;br /&gt;
                   SDS '''MICRO-ST''': bit0 = stav PD0 MOSFET spínače (spíná na GND), bit1 = stav i/o pinu TOPB, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''IO6-ST''': nepoužito&lt;br /&gt;
                   SDS '''MACRO-ST''': bit0 = stav PD0, bit1 = stav PD1, bit2 = stav i/o pinu TOPB, bit3 = TL-1, bit4 = stav TL-2, ostatní bity (5..7) nepoužity&lt;br /&gt;
&lt;br /&gt;
Řízení směru pro jednotlivé PDx resp. TOPB:&lt;br /&gt;
&lt;br /&gt;
 sys[302] 06 i RW  SDS '''MICRO LM LIGHT''': směr i/o pinu D0 (zápisem bit0 do 1 se nastaví pin D0 jako výstup) (zápisem log1 se nastaví jako vstup)&lt;br /&gt;
                   SDS '''MICRO LM DIN''' a '''SDS MACRO LM''': pozor, D0 je vždy výstup (nastavení je napevno, nelze změnit)&lt;br /&gt;
                   SDS '''TTCPRO''': směr jednotlivých pinů v portu PDx (nastavením jednotlivých osmi bitů, bit0=PD0 až bit7=PD7, nastav log1 pro výstup)&lt;br /&gt;
                   SDS '''MINI''': bit0 = směr i/o pinu TOPB, bit1 = směr i/o padu PD1, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''UPS''': nepoužito&lt;br /&gt;
                   SDS '''IO6''': nepoužito&lt;br /&gt;
                   SDS '''MICRO-ST''': bit0 = vždy v log1 (PD0 jako výstup), bit1 = směr i/o pinu TOPB, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''MACRO-ST''': bit0 = vždy v log1 (výstup), bit1 = vždy v log1 (výstup), bit2 = směr i/o pinu TOPB, bit3 = vždy v log0 (vstup), bit4 = vždy v log0 (vstup), ostatní bity (5..7) nepoužity&lt;br /&gt;
&lt;br /&gt;
TOPB: vždy typicky CMOS 3V3 pin, s možností funkce jako vstup nebo výstup (dle sys[302]), a je přímo připojený na pin SoC, pozor tedy na jeho další HW připojení.&lt;br /&gt;
&lt;br /&gt;
TTCPRO: Mapování je vždy od nejnižšího (LSB - bit0) bitu (PD0 = bit0, PD1 = bit1, atd. PD7 = bit7). Pro TTCPRO jsou PDx jako CMOS 3V3 piny s volbou vstupu nebo výstupu pro každý jednotlivý pin.&lt;br /&gt;
&lt;br /&gt;
MICRO-ST: výstup PD0 je zapojen formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).&lt;br /&gt;
&lt;br /&gt;
MACRO-ST: výstupy PD0 a PD1 jsou zapojeny formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).&lt;br /&gt;
&lt;br /&gt;
Nezapomeňte vždy ve svém programu správně nastavit hodnoty do sys[302] (toto je častá chyba když se to zapomene).&lt;br /&gt;
&lt;br /&gt;
 sys[306] až sys[309]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
== Tlačítka na desce display pro SDS-MACRO-ST ==&lt;br /&gt;
&lt;br /&gt;
Čtení stavu tlačítek na desce display (SDS-MST-DISP-rev1) se provádí čtením sys[301] a vyhodnocením bitu 3 (=8dec, první tlačítko) a/nebo bitu 4 (=16dec, druhé tlačítko).&lt;br /&gt;
&lt;br /&gt;
Ošetření na případné zákmity při stisku a uvolnění tlačítek, je potřeba provést ve vašem SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vstupy - teploměry na externí sběrnici 1-Wire&amp;amp;reg; ==&lt;br /&gt;
&lt;br /&gt;
Čidla teploty (1-W chipy pro měření teploty připojené na sběrnici; tak také údaj o teplotě z připojených modulů SDS-1W-T-RH) jsou řízena (čtena) plně automaticky zařízením SDS. Program v SDS-C má přímo přístup k výsledným hodnotám teplot.&lt;br /&gt;
&lt;br /&gt;
 sys[310] až sys[341]   &lt;br /&gt;
          01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici&lt;br /&gt;
&lt;br /&gt;
Teploměry mají hodnotu uloženou v násobku '''100''' (takže např. 24.5°C je uloženo jako číslo 2450, nebo -120.65°C je -12065). Pokud není k dispozici hodnota z čidla, '''není v záznamu číslo nula (pozor !), ale záměrně tam je číslo 16777216 (2^24)'''.&lt;br /&gt;
&lt;br /&gt;
Pozn.: pouze SDS-MACRO-LM a SDS-MACRO-ST mají teploměry č. 17 až 32, protože má dvě samostatné sběrnice (konektory). Sběrnice A má teploměry 1 až 16, sběrnice B má teploměry 17 až 32. '''Sběrnice B je k dispozici jen pro SDS-MACRO-XX'''.&lt;br /&gt;
&lt;br /&gt;
 sys[342] až [345]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[346] 01 i R   číslo čidla, které je právě převáděno na sběrnici '''B''' (čteno přes 1-W, tj. je mu aktualizována hodnota)&lt;br /&gt;
 sys[347] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici '''B'''&lt;br /&gt;
 &lt;br /&gt;
 sys[348] 01 i R   číslo čidla, které je právě převáděno na sběrnici '''A''' (čteno přes 1-W, tj. je mu aktualizována hodnota)&lt;br /&gt;
 sys[349] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici '''A'''&lt;br /&gt;
&lt;br /&gt;
 sys[350] až sys[381]   &lt;br /&gt;
          01 i R   čidlo 1 až 32 - aktuální stav/chyba čidla v okamžiku čtení tohoto sys[]&lt;br /&gt;
                    == 0  : default, čidlo neexistuje, nic nevim (stav ihned po zapnutí, popř. trvale pro prázdnou pozici)&lt;br /&gt;
                    == 2  : vše ok, komunikuje, odpovidá, právě byl získán výsledek&lt;br /&gt;
                    == 4  : ví se jen že existuje (byl získán ROMCODE) (obvykle dočasný stav po spuštění zařízení)&lt;br /&gt;
                    == 8  : začal další převod, čidlo je OK, komunikuje (správný stav)&lt;br /&gt;
                    == 16 : nepovedlo se začít nový převod, CHYBA (obvykle fyzický problém se sběrnicí)&lt;br /&gt;
                    == 32 : bylo přijato neplatné CRC, chyba (obvykle fyzický problém se sběrnicí)&lt;br /&gt;
&lt;br /&gt;
 sys[382] až [389]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[391] až sys[422]  &lt;br /&gt;
          01 s R   uživatelský textový název pro čidlo 1 až 32 (nastaveno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
''' Reserved ''' &lt;br /&gt;
&lt;br /&gt;
 sys[423] až sys[430]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vstupy: analogové vstupy pro měření napětí ==&lt;br /&gt;
&lt;br /&gt;
Všechny vstupy měří napětí vůči společné svorce (GND). Změřená hodnota je vždy k dispozici nejprve jako surová (raw) digitální hodnota, a poté ji SDS přepočítá dle uživatelského nastavení a také dá k dispozici.&lt;br /&gt;
&lt;br /&gt;
 sys[431] 01 i R   RAW hodnota A/D převodu ze vstupu AD1&lt;br /&gt;
 sys[432] 01 i R   RAW hodnota A/D převodu ze vstupu AD2&lt;br /&gt;
 sys[433] 01 i R   RAW hodnota A/D převodu ze vstupu AD3&lt;br /&gt;
 sys[434] 01 i R   RAW hodnota A/D převodu ze vstupu AD4&lt;br /&gt;
&lt;br /&gt;
RAW (surová) hodnota je digitální číslo, poskytnuté z interního A/D převodníku, s tím, že mu už SDS současně (pouze a jenom) odečetl uživatelem nastavený offset.&lt;br /&gt;
&lt;br /&gt;
Rozsah hodnoty RAW je: &lt;br /&gt;
* SDS-MICRO-LM, SDS-MACRO-LM, SDS-UPS-ONEDPS: 0..1023 (10bit rozlišení)&lt;br /&gt;
* SDS-MINI a všechny varianty SDS ST: 0..4095 (12bit rozlišení)&lt;br /&gt;
&lt;br /&gt;
Všechny převodní konstanty A/D, nastavené ve webovém rozhraní (viz admin stránka):&lt;br /&gt;
&lt;br /&gt;
 sys[435] 01 i R   Offset pro A/D 1  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[436] 01 i R   Div pro A/D 1&lt;br /&gt;
 sys[437] 01 s R   textový název A/D 1&lt;br /&gt;
 sys[438] 01 s R   jednotka A/D 1&lt;br /&gt;
&lt;br /&gt;
 sys[439] 01 i R   Offset pro A/D 2  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[440] 01 i R   Div pro A/D 2&lt;br /&gt;
 sys[441] 01 s R   textový název A/D 2&lt;br /&gt;
 sys[442] 01 s R   jednotka A/D 2&lt;br /&gt;
&lt;br /&gt;
 sys[443] 01 i R   Offset pro A/D 3  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[444] 01 i R   Div pro A/D 3&lt;br /&gt;
 sys[445] 01 s R   textový název A/D 3&lt;br /&gt;
 sys[446] 01 s R   jednotka A/D 3&lt;br /&gt;
&lt;br /&gt;
 sys[447] 01 i R   Offset pro A/D 4  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[448] 01 i R   Div pro A/D 4&lt;br /&gt;
 sys[449] 01 s R   textový název A/D 4&lt;br /&gt;
 sys[450] 01 s R   jednotka A/D 4&lt;br /&gt;
&lt;br /&gt;
'''Pozor!''' Hodnoty pro jednotlivé A/D vstupy (tj. Raw Hodnoty v sys[431 až 434]) '''už mají odečtený Offset''' (je to provedeno uvnitř firmware už při zpracovávání A/D převodu) ! &lt;br /&gt;
Proto Offset už ve svém SDS-C programu z Raw hodnot neodečítejte (bylo by to odečítáno podruhé). Pro přepočet z Raw na finální hodnotu vám zbývá (správně) použít jen &amp;quot;Div&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Poznámka: zařízení SDS-MINI (a další z řady SDS ST) už mohou mít text v položce &amp;quot;jednotka A/D x&amp;quot; delší než jeden znak (na rozdíl od původního SDS-MICRO-LM atd., kde to bylo omezeno na jeden jediný znak).&lt;br /&gt;
&lt;br /&gt;
''' Reserved '''&lt;br /&gt;
&lt;br /&gt;
 sys[451] až sys[458]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné pro S0 impulsní vstup ==&lt;br /&gt;
&lt;br /&gt;
 sys[459] 01 i RW  stav tarifu &lt;br /&gt;
                    == 0 : T0 (vysoký tarif)&lt;br /&gt;
                    == 1 : T1 (nízký tarif)&lt;br /&gt;
&lt;br /&gt;
 sys[460] až sys[492]  &lt;br /&gt;
          06 i RW  konfigurace - uživatelem nastavený (webové rozhraní) poměr MTD, pro vstup S0 [1] až [32],&lt;br /&gt;
                                 je-li MTD pro tento vstup použit (pokud není použit (přímé měření), má zde být 1 )&lt;br /&gt;
                    - příklad: pro MTD s poměrem 300A:5A je zapsaná hodnota 60&lt;br /&gt;
                    - pozor, nezapočítávejte vliv MTD do hodnoty imp./1kWh&lt;br /&gt;
                    - pozor, některé elektroměry mají MTD už započítané do vlastní impulsní konstanty, &lt;br /&gt;
                             pak sem v takovém případě nastavte číslo 1&lt;br /&gt;
                    - platné hodnoty: 1 až 65280 (včetně)&lt;br /&gt;
 &lt;br /&gt;
 sys[493] až sys[525]  &lt;br /&gt;
          01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T0&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).&lt;br /&gt;
 &lt;br /&gt;
 sys[526] až sys[558]  &lt;br /&gt;
          01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T1&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).&lt;br /&gt;
 &lt;br /&gt;
 sys[559] až sys[591]  &lt;br /&gt;
          01 i RW  konfigurace - uživatelem nastavené přepočtové konstanty S0: počet imp./1kWh (z webového rozhraní)&lt;br /&gt;
                    - pozor, tato hodnota platí pro samotný elektroměr, není to hodnota ve které je započítán vliv MTD&lt;br /&gt;
                    - pozn. v případě, že měřícím prvkem není elektroměr ale jiný přístroj, bude zde odpovídající&lt;br /&gt;
                      jiná konfigurační hodnota (např. vodoměr: počet imp./m^3).&lt;br /&gt;
 &lt;br /&gt;
 sys[592] až sys[624]  &lt;br /&gt;
          01 i R   změřená časová vzdálenost mezi dvěmi nejposlednějšími zachycenými impulsy na S0 vstupu (aktuální impuls a předchozí impuls)&lt;br /&gt;
                    - měřeno v msec&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).&lt;br /&gt;
 &lt;br /&gt;
 sys[625] až sys[657]  &lt;br /&gt;
          01 i R   změřený čas od úplně posledního impulsu zachyceného na S0 vstupu, tzn. &amp;quot;doba bez impulsu&amp;quot; nebo také &amp;quot;doba od posledního impulsu&amp;quot;&lt;br /&gt;
                    - měřeno v msec&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).&lt;br /&gt;
&lt;br /&gt;
poznámka: tarif T0 a tarif T1 závisí na uživatelem zvoleném externím signálu (přeneseno do sys[459]), viz informace na stránce ohledně [[S0]]. Celková hodnota impulsů je samozřejmě součtem těchto dvou impulsních akumulátorů. Pokud není tarifní rozlišení využito, je vše zapisováno do akumulátoru pro T0. &lt;br /&gt;
&lt;br /&gt;
poznámka: časová vzdálenost mezi impulsy se používá pro výpočet aktuálního výkonu (popř. průtoku atd. dle použitého měřiče) - můžete toho využít ve svém SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
poznámka: &amp;quot;Poměr MTD&amp;quot; zahrnuje všechny měřící transformátory (MTD), předřazené elektroměru (pouze pokud to už není započítáno v impulsní konstantě). Pokud je S0 vstup využit pro jiný typ měřiče (vodoměr a podobné), kde je připojení MTD nesmysl, tak se v konfiguraci musí do této položky nastavit hodnota 1. Samozřejmě jde s určitou výhodou použít i jinou konfiguraci, protože tato hodnota je použita jako &amp;quot;druhý dělitel&amp;quot; u výpočtu počtu S0 impulsů na velikost kroku energetické jednotky. Určení této hodnoty pro jiné měřiče sleduje stejné matematické postupy jako určení této hodnoty pro elektroměr s předřazeným MTD, jen jednotky budou samozřejmě jiné.&lt;br /&gt;
&lt;br /&gt;
 sys[658] až sys[670]  reserved for future use&lt;br /&gt;
&lt;br /&gt;
poznámka: další sys[] indexy pro S0 vstupy jsou uvedeny ještě dále v tomto celém seznamu (dole na stránce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální vstupy a výstupy ==&lt;br /&gt;
&lt;br /&gt;
Toto je funkce dostupná jen na omezeném rozsahu výrobků SDS.&lt;br /&gt;
&lt;br /&gt;
'''Pouze pro SDS MICRO (LM) LIGHT:'''&lt;br /&gt;
&lt;br /&gt;
 sys[671] 02 i W   zápis na pin M4 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)&lt;br /&gt;
 sys[672] 02 i W   zápis na pin M5 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)&lt;br /&gt;
 sys[673] 02 i W   zápis na pin B1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)&lt;br /&gt;
 sys[674] 02 i W   zápis na pin A1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)&lt;br /&gt;
&lt;br /&gt;
Tyto zmíněné čtyři ''sys[]'' jsou dostupné '''pouze''' na modulu SDS MICRO '''LIGHT''' popř. '''DIN''', a to jen s verzí firmware 9.1.2011 nebo novější.&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT s pamětí EEPROM: k dispozici jsou všechny čtyři výstupy.&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT 2 s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MICRO DIN: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MACRO LM, SDS MICRO ST, SDS MACRO ST, SDS UPS, SDS IO6, SDS IO6 ST, SDS TTCPRO, SDS MINI: tyto výstupy '''nejsou k dispozici'''.&lt;br /&gt;
&lt;br /&gt;
Vše to jsou logické výstupy, s CMOS 3V3 logickými úrovněmi (pro obecné použití je externí pull-up 47kOhm nutný). Lze to použít především pro ovládání BSS138 MOSFETů, např. pro spínání dalších relé (v případě použití BSS138 nedávejte externí pull-up, ale naopak dejte pull-down na GND o hodnotě 47kOhm).&lt;br /&gt;
&lt;br /&gt;
'''Pouze pro SDS MACRO ST:'''&lt;br /&gt;
&lt;br /&gt;
Alternativa k sys[301]. Hodnota odpovídá logické úrovni na daném vstupu TL1 (TL2). Při osazené desce MACRO-ST-LCD jsou na tyto vstupy připojeny tlačítka (pak při stisku TL1, TL2 je zde hodnota 0, v klidu 1).&lt;br /&gt;
&lt;br /&gt;
 sys[671] 02 i R   čtení stavu TL1&lt;br /&gt;
 sys[672] 02 i R   čtení stavu TL2&lt;br /&gt;
&lt;br /&gt;
'''Pájecí plošky CFG:'''&lt;br /&gt;
&lt;br /&gt;
Zkratovací CFG plošky jsou k dispozici jen pro SDS TTCPRO. Vhodné pro pevnou konfiguraci uživatelem.&lt;br /&gt;
&lt;br /&gt;
V současné době není k dispozici firmware, které přenáší hodnotu z pájecích plošek (CFG1, CFG2) do ''sys[]''.&lt;br /&gt;
Ploška CFG1 je vyhrazena pro vnitřní použítí samotného firmware SDS, a ploška CFG2 bude eventuálně uvolněna pro libovolné použití uživatelem (čtení z SDS-C).&lt;br /&gt;
Takový firmware se teprve chystá (SDS TTCPRO).&lt;br /&gt;
&lt;br /&gt;
 sys[675] 07 i R   stav plošky CFG1 (zkratována = je zde 0)&lt;br /&gt;
 sys[676] 07 i R   stav plošky CFG2 (zkratována = je zde 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální proměnné pro SDS-UPS ==&lt;br /&gt;
&lt;br /&gt;
SDS UPS nabízí, kromě již zmíněných proměnných (viz výpis výše), i doplňkové proměnné, specifické pro tento výrobek. Tyto rozšířené systémové proměnné jsou k dispozici ve firmware od 25.4.2011 .&lt;br /&gt;
&lt;br /&gt;
SDS-UPS má všechny sys[0] až sys[699] shodné s SDS-MICRO. Rozdíl je samozřejmě v počtu a osazení periférií.&lt;br /&gt;
&lt;br /&gt;
Pokud nejste spokojeni s originálním nabíjecím algoritmem, máte možnost si ho celý naprogramovat sami v SDS-C: všechny potřebné vstupní a výstupní údaje (proměnné) jsou vám k dispozici. Popřípadě, pokud chcete jen sledovat situaci, můžete je také využít (např. pro logování nabíjecího a vybíjecího proudu akumulátoru a tak dále).&lt;br /&gt;
&lt;br /&gt;
 sys[700] 02 i R   reserved&lt;br /&gt;
 sys[701] 02 i R   reserved&lt;br /&gt;
 sys[702] 02 i R   reserved&lt;br /&gt;
 sys[703] 02 i R   reserved&lt;br /&gt;
&lt;br /&gt;
'''Přepínač algoritmů:'''&lt;br /&gt;
&lt;br /&gt;
 sys[704] 02 i RW  řízení nabíjení - hodnoty které lze zapsat:&lt;br /&gt;
                    == 0   : nabíjení je ovládáno pomocí firmware (výchozí chování výrobku)&lt;br /&gt;
                    == 345 : pouze nabíjení (a ne jiné funkce) jsou řízeny programem SDS-C (= chování programujete vy)&lt;br /&gt;
                    == 824 : kompletní řízení (= volba funkce, nabíjení) je řízeno programem SDS-C&lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte vlastní (ruční) řízení, musíte trvale řídit nabíjení sami pomocí programu v SDS-C. Vlastní ovládání vejde v platnost zápisem čísla 345 nebo 824 do sys[704]. Tento zápis provedete pouze jednou na začátku programu, a dále pak musí trvale následovat váš algoritmus. &lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte 345, jediné co má váš program za úkol, je řídit samotný nabíjecí proces - toto je výhodné, když se nechcete zatěžovat hlídáním provozních stavů (tj. výpadek napájení atd.), což za vás v tomto režimu udělá původní firmware.&lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte 824, musíte sami kompletně řídit všechno chování UPS, tj. nejenom nabíjecí algoritmus, ale i detekce výpadku napájení, přepínání mezi stavy, indikační LED, a tak dále.&lt;br /&gt;
&lt;br /&gt;
 sys[705] až sys[731]  reserved&lt;br /&gt;
&lt;br /&gt;
Pro realizaci vlastního nabíjecího algoritmu potřebujete zpracovávat všechny vstupy a důsledně nastavovat všechy výstupy.&lt;br /&gt;
&lt;br /&gt;
Pokud váš program pouze sleduje činnost původního nabíjecího algoritmu, pak může samozřejmě všechny sys[] jen číst.&lt;br /&gt;
&lt;br /&gt;
'''Vstupy a konfigurace:'''&lt;br /&gt;
&lt;br /&gt;
 sys[732] 02 i R   surová hodnota z A/D převodu - hodnota 2.5V vstupu - odpovídá hodnotě proudu 0.0A&lt;br /&gt;
 sys[733] 02 i R   surová hodnota z A/D převodu - hodnota proudu do-z akumulátoru&lt;br /&gt;
 sys[734] 02 i R   surová hodnota z A/D převodu - hodnota proudu z primárního vstupu&lt;br /&gt;
 sys[735] 02 i R   surová hodnota z A/D převodu - hodnota napětí akumulátoru&lt;br /&gt;
 sys[736] 02 i R   surová hodnota z A/D převodu - hodnota napětí primárního vstupu&lt;br /&gt;
&lt;br /&gt;
Rozsah surových hodnot z A/D převodu je 0 až 4095. Lineárně to odpovídá příslušné měřené hodnotě. &lt;br /&gt;
Měření napětí má 0 na 0V a maximální hodnot (4095) na maximu rozsahu. &lt;br /&gt;
Měření proudu je specifické, protože měření ukazuje kladný i záporný proud, takže 0A je na hodnotě sys[732] (typicky 2047), všechno co je pod touto hodnotu je záporný proud, všechno nad je kladný proud. Znaménko proudu ukazuje, kam proud teče (např. záporný = vybíjení akumulátoru, atd.).&lt;br /&gt;
&lt;br /&gt;
 sys[737] až sys[739]  reserved&lt;br /&gt;
&lt;br /&gt;
Následuje konfigurace provedená uživatelem ve webovém rozhraní.&lt;br /&gt;
Hodnoty jsou přímo v rozmezí 0 až 4095, takže je lze PŘÍMO použít se surovými hodnotami z A/D převodu (tzn. zařízení se už postaralo o převod údajů zadaných uživatelem ve webovém rozhraní na tento formát). V důsledku je pak realizace algoritmu velmi snadná.&lt;br /&gt;
&lt;br /&gt;
 sys[740] 02 i R   primary voltage to say target is ok (pri_pvts)&lt;br /&gt;
 sys[741] 02 i R   primary zadany odpocet v msec (pri_pvat)&lt;br /&gt;
 sys[742] 02 i R   primary voltage to allow charging (at what voltage to allow chargin) (pri_fchg)&lt;br /&gt;
 sys[743] 02 i R   accu disconnect voltage level (at what voltage to disconnect accu) (aku_avdv)&lt;br /&gt;
 sys[744] 02 i R   accu target voltage when charging (when to switch to CV) (aku_avcd)&lt;br /&gt;
 sys[745] 02 i R   accu target current when charging (constant current when in CC) (aku_accc)&lt;br /&gt;
 sys[746] 02 i R   target charging voltage (final voltage on accu when fully charged)&lt;br /&gt;
 sys[747] 02 i R   flag: do not answer ping when primary gone (pri_ping)&lt;br /&gt;
 sys[748] 02 i R   flag: do not switch accu off (aku_dach)&lt;br /&gt;
&lt;br /&gt;
Hodnoty sys[740] až sys[748] jsou konfigurační údaje (uživatel je změnil přes webové rozhraní, a tím se uložili do pevné paměti, takže vydrží reset nebo vypnutí zařízení). Pokud do nich v SDS-C programu zapíšete, tato nová zapsaná hodnota zůstane platná až do resetu nebo vypnutí, nebo do ručního přepsání uživatelem (ve webovém rozhraní). Zápis do těchto konkrétních sys[] nezpůsobí uložení nových hodnot do pevné paměti.&lt;br /&gt;
&lt;br /&gt;
 sys[749] až sys[760]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Výstupy:'''&lt;br /&gt;
&lt;br /&gt;
Tyto '''všechny''' výstupy musíte správně ovládat po celou dobu, co bude zařízení SDS UPS zapnuto !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 sys[761] 02 i RW  ovládání vypínání nabíječe&lt;br /&gt;
                    == 0 : nabíječ v provozu (zapnuto = nabíjí se, regulujte jiným sys[])&lt;br /&gt;
                    != 0 : nabíječ mimo provoz (vypnuto = nenabíjí se)&lt;br /&gt;
 &lt;br /&gt;
 sys[762] 02 i RW  ovládání posunu rozsahu regulace nabíječe &lt;br /&gt;
                    == 0 : bez zásahu do zpětné vazby (původní regulační rozsah)&lt;br /&gt;
                    != 0 : zásah do zpětné vazby (posun rozsahu)&lt;br /&gt;
                           (vhodné pro skokové zvýšení výstupního napětí nabíječe, &lt;br /&gt;
                            když už nereaguje v původním rozsahu)&lt;br /&gt;
 &lt;br /&gt;
 sys[763] 02 i RW  ovládání odpojovače baterie &lt;br /&gt;
                    == 0 : spínač vypnutý (baterie odpojena od zátěže)&lt;br /&gt;
                    != 0 : spínač sepnutý (baterie připojena)&lt;br /&gt;
 &lt;br /&gt;
 sys[764] 02 i RW  indikační LED - nabíjení akumulátoru&lt;br /&gt;
                    == 0 : LED svítí (informace: akumulátor je nabíjen)&lt;br /&gt;
                    != 0 : LED nesvítí (informace: akumulátor není nabíjen)&lt;br /&gt;
 &lt;br /&gt;
 sys[765] 02 i RW  indikační LED - výpadek primárního vstupu&lt;br /&gt;
                    == 0 : LED svítí (informace: napětí primárního vstupu pod dolním limitem)&lt;br /&gt;
                    != 0 : LED nesvítí (informace: primární vstup má napětí vyšší než je dolní limit)&lt;br /&gt;
&lt;br /&gt;
'''Řízení nabíjení:''' Je potřeba správně regulovat pomocí následujícího výstupu:&lt;br /&gt;
&lt;br /&gt;
 sys[766] 02 i RW  přímé řízení nabíjecího bloku (výstup vaší regulace sem - hodnota řídí nabíječ)&lt;br /&gt;
                    - minimální hodnota = 1&lt;br /&gt;
                    - maximální hodnota = 2497&lt;br /&gt;
&lt;br /&gt;
 sys[767] až sys[769]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Následující údaje jsou určeny pro '''zobrazování na webovém rozhraní''':&lt;br /&gt;
&lt;br /&gt;
 sys[770] 02 i RW  provozní režim: vždy jedno z UPS_PROVOZ_xxx&lt;br /&gt;
 &lt;br /&gt;
 sys[771] 02 i RW  nabíjecí režim: vždy jedno z UPS_NABREZIM_xxx&lt;br /&gt;
 &lt;br /&gt;
 sys[772] 02 i RW  výsledek odhadu stavu baterie: vždy jedno z UPS_BATERIE_ODHAD_xxx&lt;br /&gt;
&lt;br /&gt;
Konstanty pro zápis (je to potřeba dodržet, protože se to přímo zobrazuje na webovém rozhraní):&lt;br /&gt;
&lt;br /&gt;
 UPS_PROVOZ_START            0&lt;br /&gt;
 UPS_PROVOZ_PRIOK            1&lt;br /&gt;
 UPS_PROVOZ_PRIOK_CHARGING   2&lt;br /&gt;
 UPS_PROVOZ_ONLY_BATT        4&lt;br /&gt;
 UPS_PROVOZ_NO_BATT          8&lt;br /&gt;
 &lt;br /&gt;
 UPS_NABREZIM_CC             0&lt;br /&gt;
 UPS_NABREZIM_CV             2&lt;br /&gt;
 UPS_NABREZIM_PAUZA          4&lt;br /&gt;
 UPS_NABREZIM_URCENI_REZIMU  8&lt;br /&gt;
 &lt;br /&gt;
 UPS_BATERIE_ODHAD_NEZNAM            0&lt;br /&gt;
 UPS_BATERIE_ODHAD_MOC_NIZKE_NAPETI  1&lt;br /&gt;
 UPS_BATERIE_ODHAD_OK_NABIJIM        2&lt;br /&gt;
 UPS_BATERIE_ODHAD_PLNE_NABITO       4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výsledky z 1-Wire sensoru vlhkosti (T/RH) SDS-1W-T-RH ==&lt;br /&gt;
&lt;br /&gt;
Připojené moduly [[SDS_1W_T-RH]] jsou připojeny na 1-W sběrnici, a mají v sobě chip, který měří hodnotu ze sensoru vlhkosti (který je současně umístěn na modulu SDS-1W-T-RH) a současně měří i teplotu a napájecí napětí pro sensor vlhkosti. &lt;br /&gt;
SDS interně provádí výpočet relativní vlhkosti (RH) pomocí kompenzační rovnice, určené výrobcem sensoru vlhkosti.&lt;br /&gt;
&lt;br /&gt;
K dispozici jsou jak surové hodnoty (změřené v rámci modulu SDS-1W-T-RH), tak i hodnota kompenzované (skutečné) relativní vlhkosti v místě umístění modulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Změřená teplota je uložena na standardních indexech:&lt;br /&gt;
&lt;br /&gt;
 sys[310] až sys[341]   &lt;br /&gt;
          01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 degC&lt;br /&gt;
&lt;br /&gt;
Dále jsou k dispozici surové hodnoty, nutné pro výpočet hodnoty RH (Relative Humidity):&lt;br /&gt;
&lt;br /&gt;
 sys[800] až sys[831]   &lt;br /&gt;
          08 i R   hodnota údaje (napětí Vad = výstupu čidla RH) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 V&lt;br /&gt;
&lt;br /&gt;
 sys[832] až sys[863]   &lt;br /&gt;
          08 i R   hodnota údaje (napětí Vdd = napájení čidla RH) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 V&lt;br /&gt;
&lt;br /&gt;
SDS provádí přepočet na údaj RH v procentech (0 až 100):&lt;br /&gt;
&lt;br /&gt;
 sys[864] až sys[895]   &lt;br /&gt;
          08 i R   hodnota RH (0 až 100, v procentech RH) kompenzovaná podle rovnice pro čidlo HIH-503x (výpočet z Vad, kompenzace na Vdd a Temp).&lt;br /&gt;
&lt;br /&gt;
Rezerva (zatím nepoužito):&lt;br /&gt;
&lt;br /&gt;
 sys[896] až sys[899]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Doplňující informace pro 1-Wire zařízení ==&lt;br /&gt;
&lt;br /&gt;
1-Wire sběrnice u zařízení SDS umožňuje komunikaci s celou řadů 1-W chipů: [[OneWire|seznam je zde]]. Přístup k chipům na 1-W sběrnici se liší na dva typy: chipy (čidla) které si SDS interně zpracuje (např. měření teploty), a všechny ostatní chipy (které SDS jen umí vyhledat a oznámit, ale dále s nimi nekomunikuje).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1-Wire chipy interně zpracovávané SDS'''&lt;br /&gt;
&lt;br /&gt;
Tyto chipy jsou plně automaticky obsluhovány prostřednictvím firmware SDS - není potřebná opakovaná intervence uživatele, ten si pouze čte stále aktuální výsledky měření teplot z jednotlivých čidel.&lt;br /&gt;
&lt;br /&gt;
Poznámka: Pro změřené hodnoty z 1-W čidel teplot, jsou k dispozici tyto indexy: '''sys[310]''' až '''sys[430]''', a '''sys[900]''' až '''sys[931]'''.&lt;br /&gt;
&lt;br /&gt;
K dispozici je textové vyjádření (hex znaky) ROM CODE hodnoty načtené pro danou pozici zpracovávaného chipu na 1-W sběrnici.&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS mohou mít jednu [A] nebo dvě ( nezávislé, [A] a [B] ) 1-Wire sběrnice, a každá sběrnice má maximálně 16 připojených chipů.&lt;br /&gt;
Jednotlivé platné ROM CODE jsou v ''sys[]'' uloženy za sebou, viz výpis:&lt;br /&gt;
&lt;br /&gt;
 sys[900] 06 s RW  ROM CODE pro první chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[901] 06 s R   ROM CODE pro druhý chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
A tak dále až&lt;br /&gt;
&lt;br /&gt;
 sys[915] 06 s R   ROM CODE pro šestnáctý chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
Následuje sběrnice [B], je-li přítomná v daném zařízení (dostupné pouze pro SDS-MACRO):&lt;br /&gt;
&lt;br /&gt;
 sys[916] 06 s R   ROM CODE pro první chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
A tak dále . . . až&lt;br /&gt;
&lt;br /&gt;
 sys[931] 06 s R   ROM CODE pro šestnáctý chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
'''Pozor''': pokud sběrnice [B] v zařízení není, tak sys[916] až sys[931] vrátí znak '-'.&lt;br /&gt;
&lt;br /&gt;
Tak jak jsou jednotlivé ROM CODE viditelné ve webové administraci, tak jsou tedy dostupné i přes sys[] položky.&lt;br /&gt;
&lt;br /&gt;
Poznámka: ROM CODE pro 1-W chipy jsou k dispozici pouze jako ucelené texty (string). Bajtový rozpad jednotlivých položek není k dispozici.&lt;br /&gt;
&lt;br /&gt;
 sys[931] až sys[939]  reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ostatní 1-Wire chipy'''&lt;br /&gt;
&lt;br /&gt;
Pro ostatní 1-W chipy, které SDS &amp;quot;nezná&amp;quot; (tzn. nekomunikuje s nimi, jen je umí na sběrnici vyhledat), jsou jejich ROM CODE odděleny do samostatných '''sys[]''' položek.&lt;br /&gt;
&lt;br /&gt;
Čtení ostatních 1-W chipů se spouští v rámci SDS-C programu, který musí zavolat příslušnou SDS-C funkci. &lt;br /&gt;
Na základě zavolání této funkce dojde k vynulování všech příslušných '''sys[]''' (od indexu 940 resp. 970) pro danou sběrnici, a provede se pokus o přečtení připojeného chipu.&lt;br /&gt;
Pokud se to povede, bude nalezený ROM CODE (spolu s časovou značkou okamžiku přečtení) vložen do příslušných '''sys[]''', &lt;br /&gt;
nebo bude nastaven chybový kód.&lt;br /&gt;
&lt;br /&gt;
Pozor, k SDS lze připojit více různých &amp;quot;ostatních&amp;quot; chipů, ale zdejší funkce najde jenom ten první z nich a ostatní už ignoruje. &lt;br /&gt;
Ostatní chipy lze samozřejmě připojit na kteroukoliv sběrnici, i když na ní jsou připojeny i chipy se kterými SDS komunikuje (např. teploměrné chipy).&lt;br /&gt;
&lt;br /&gt;
Jednotlivé chipy se rozlišují pomocí hodnoty ''ID family-code'' (jeden bajt). Pro chip DS1990A je ''0x01'', hodnoty pro jiné chipy viz datasheet výrobce pro konkrétní chip.&lt;br /&gt;
&lt;br /&gt;
Obecný stav sběrnic:&lt;br /&gt;
&lt;br /&gt;
 sys[940] 06 i R   Stav 1-W sběrnice '''[A]''' pro rescan ostatních 1-W chipů&lt;br /&gt;
 sys[941] 06 i R   Stav 1-W sběrnice '''[B]''' pro rescan ostatních 1-W chipů&lt;br /&gt;
 :&lt;br /&gt;
                    == 0  : ještě nebylo provedeno jediné/jakékoliv čtení ostatních chipů na 1-W sběrnici&lt;br /&gt;
 &lt;br /&gt;
                    == 1  : došlo k chybě: nebylo dokončeno předchozí čtení sběrnice&lt;br /&gt;
                            (nesmíte požadovat nové čtení, dokud se plně neprovedlo to poslední)&lt;br /&gt;
 &lt;br /&gt;
                    == 2  : probíhá čtení ROM CODE z připojeného ostatního chipu&lt;br /&gt;
                            (dokud se toto nedokončí, nelze provést opětovný požadavek na další rescan/čtení)&lt;br /&gt;
 &lt;br /&gt;
                    == 4  : nebyl nalezen jakýkoliv ostatní chip (s odpovídajícím Family Code byte)&lt;br /&gt;
 &lt;br /&gt;
                    == 8  : byl přečten ROM CODE z připojeného ostatního chipu&lt;br /&gt;
                            (už lze také požádat o další nové čtení 1-W sběrnice)&lt;br /&gt;
 &lt;br /&gt;
                    == 16 : došlo k chybě: nepovedlo se přečíst data po 1-W sběrnici &lt;br /&gt;
                            (zkuste provést rescan/čtení znovu)&lt;br /&gt;
&lt;br /&gt;
 sys[942] až sys[949]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Pro sběrnici [A]:'''&lt;br /&gt;
&lt;br /&gt;
 sys[950] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire&lt;br /&gt;
                   (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).&lt;br /&gt;
                    - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),&lt;br /&gt;
                      a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze '''sys[3]'''&lt;br /&gt;
&lt;br /&gt;
 sys[951] 06 s R   celý text ROM CODE:&lt;br /&gt;
                    - ROM CODE pro chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[952] až sys[959]: bajtový rozpad ROM CODE pro chip na [A] sběrnici 1-Wire&lt;br /&gt;
 :&lt;br /&gt;
 sys[952] 06 i R   romcode[0] (1-W: ID family-code byte)&lt;br /&gt;
 sys[953] 06 i R   romcode[1] (1-W: serial code)&lt;br /&gt;
 sys[954] 06 i R   romcode[2] (1-W: serial code)&lt;br /&gt;
 sys[955] 06 i R   romcode[3] (1-W: serial code)&lt;br /&gt;
 sys[956] 06 i R   romcode[4] (1-W: serial code)&lt;br /&gt;
 sys[957] 06 i R   romcode[5] (1-W: serial code)&lt;br /&gt;
 sys[958] 06 i R   romcode[6] (1-W: serial code)&lt;br /&gt;
 sys[959] 06 i R   romcode[7] (1-W: CRC byte)&lt;br /&gt;
&lt;br /&gt;
 sys[960] až sys[969]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Pro sběrnici [B]:'''&lt;br /&gt;
&lt;br /&gt;
 sys[970] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire&lt;br /&gt;
                   (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).&lt;br /&gt;
                    - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),&lt;br /&gt;
                      a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze '''sys[3]'''&lt;br /&gt;
&lt;br /&gt;
 sys[971] 06 s R   celý text ROM CODE:&lt;br /&gt;
                    - ROM CODE pro chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[972] až sys[979]: bajtový rozpad ROM CODE pro chip na [B] sběrnici 1-Wire&lt;br /&gt;
 :&lt;br /&gt;
 sys[972] 06 i R   romcode[0] (1-W: ID family-code byte)&lt;br /&gt;
 sys[973] 06 i R   romcode[1] (1-W: serial code)&lt;br /&gt;
 sys[974] 06 i R   romcode[2] (1-W: serial code)&lt;br /&gt;
 sys[975] 06 i R   romcode[3] (1-W: serial code)&lt;br /&gt;
 sys[976] 06 i R   romcode[4] (1-W: serial code)&lt;br /&gt;
 sys[977] 06 i R   romcode[5] (1-W: serial code)&lt;br /&gt;
 sys[978] 06 i R   romcode[6] (1-W: serial code)&lt;br /&gt;
 sys[979] 06 i R   romcode[7] (1-W: CRC byte)&lt;br /&gt;
&lt;br /&gt;
 sys[980] až sys[989]  reserved&lt;br /&gt;
&lt;br /&gt;
Všimněte si, že SDS v tuto chvíli umožňuje pouze rescan 1-W sběrnice, kdy hledá pouze '''jeden''' připojený &amp;quot;ostatní 1-W chip&amp;quot; (ten první na který narazí, ten ohlásí, a nehledá dále). &lt;br /&gt;
&lt;br /&gt;
'''Pozor''':&lt;br /&gt;
&lt;br /&gt;
Pokud je takových chipů připojeno na sběrnici více, popř. pokud jsou smíchány s &amp;quot;teploměrnými&amp;quot; chipy, &lt;br /&gt;
bude při tomto rescanu uveden pouze první nalezený ostatní chip (tj. ten, který má nejnižší ROM-CODE ze všech připojených ostatních chipů).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[990] až sys[1023]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální položky jen pro SDS-MACRO-LM a SDS-MACRO-ST ==&lt;br /&gt;
&lt;br /&gt;
'''Přímý přístup do LCD Frame Buffer paměti:'''&lt;br /&gt;
&lt;br /&gt;
 sys[1024] až sys[1551]   LCD buffer (dostupné jen pro SDS MACRO LM a SDS MACRO ST !)&lt;br /&gt;
          01 i RW  každý index v rámci tohoto rozsahu sys[] lze zapisovat i číst&lt;br /&gt;
                   - jedná se o pole 528 bajtů (4 řádky x 132 sloupců)&lt;br /&gt;
                   - každý bajt pole obsluhuje přesně danou oblast (několika pixelů) LCD displaye&lt;br /&gt;
                   - platné hodnoty pro každý index : 0 až 255 včetně  - zapisujte a čtěte jen hodnoty 0 až 255 (včetně)&lt;br /&gt;
&lt;br /&gt;
Tyto položky jsou dosupné '''pouze a jenom''' na SDS-MACRO-LM kde je vyžadován firmware od 24.11.2016 nebo novější, a na SDS-MACRO-ST (všechny FW verze).&lt;br /&gt;
&lt;br /&gt;
Jakékoliv změny (zápis) se promítnou pouze do frame bufferu (tedy v paměti SDS) - ale aby se následně tento frame buffer (jeho změněný obsah) eventuálně vykreslil na LCD, je potřeba zavolat příslušnou SDS-C funkci !&lt;br /&gt;
&lt;br /&gt;
Čtení ze sys poskytuje přímý přístup do frame bufferu (jeho aktuální obsah, tedy opět ne nutně to co je právě vidět na LCD).&lt;br /&gt;
&lt;br /&gt;
Pokud nepoužíváte LCD (sandwich desku), můžete tuto oblast 528 bajtů využít pro jakékoliv své účely. V podstatě se pak jedná o rozšiřující RAM pamět pro váš SDS-C program.&lt;br /&gt;
&lt;br /&gt;
'''Pozor''' SDS-MACRO-ST&lt;br /&gt;
&lt;br /&gt;
SDS MACRO ST provádí automatické aktualizace (zápis) do LCD bufferu, pokud se o tento buffer nepřihlásí SDS-C program. Proto, pokud na MACRO-ST chcete využít LCD buffer pro jiné své účely, musíte to nejprve SDS říct. Znovu, toto platí jen pro MACRO-ST - ''není to potřeba pro MACRO-LM (které tam po zapnutí nahraje logo a pak už na buffer za běhu nesáhne)''. Pro MACRO-ST zavolejte kteroukoliv SDS-C funkci pro přístup na display (např. clear) a je to - tím se přepne vlastnictví LCD bufferu pro SDS-C program.&lt;br /&gt;
&lt;br /&gt;
== Vyhrazená oblast ==&lt;br /&gt;
&lt;br /&gt;
'''Zbytek:'''&lt;br /&gt;
&lt;br /&gt;
 sys[1552] až sys[1663]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bateriově Zálohovaná Paměť ==&lt;br /&gt;
&lt;br /&gt;
'''POUZE PRO: SDS-TTCPRO a SDS-MINI a SDS-MICRO-ST a SDS-MACRO-sT a SDS-IO6-ST !''' (tedy ty s baterií) - všechny jiné SDS První Řady tyto specifické indexy v sys[] nemají k dispozici!&lt;br /&gt;
&lt;br /&gt;
Pozor! Tato funkce vyžaduje FW od 18.8.2017 a nebo novější. &lt;br /&gt;
&lt;br /&gt;
 sys[1664] až sys[1791]   (pouze pro SDS TTCPRO a SDS MINI a SDS MICRO-ST a SDS MACRO-ST a SDS IO6-ST)&lt;br /&gt;
          07 i RW  sada 128 samostatných pozic v zálohované paměti RAM, pro ukládání libovolných hodnot&lt;br /&gt;
                    - každý index má k dispozici 32 bitů (tj. celý signed integer)&lt;br /&gt;
                    - čtení a zápis je rychlé (je to v RAM, takže se nemusí čekat jako při práci s DF)&lt;br /&gt;
                    - lze použít nezávisle (lze přístupovat ke kterékoliv položce &amp;quot;na přeskáčku&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Pozor! Oblast záložní paměti je k dispozici pouze na vybraných zařízeních SDS (ty, které mají osazenu baterii pro tyto účely). Údaje se nesmazají změnou programu (nahráním nového programu), ani se nesmazají resetem zařízení (kromě aktivace RSTD - pozor!), tzn. vydrží a zůstanou, a to dokonce i po celou dobu výpadku externího napájení (tak dlouho, dokud se nevybije záložní baterie).&lt;br /&gt;
&lt;br /&gt;
''(Pouze) pokud baterie v daném SDS není'': tak jsou údaje ztraceny po výpadku napájení (ale po dobu přítomnosti externího napájení jsou k dispozici). Při takové situaci není zaručen obsah těchto dat po zapnutí (měl by být nulový, ale bez záruky).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Další informace ze S0 vstupů ==&lt;br /&gt;
&lt;br /&gt;
Následující položky jsou k dispozici pro všechny SDS První Produktové Řady.&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. 07 jsou přidány tyto systémové proměnné:&lt;br /&gt;
&lt;br /&gt;
 sys[1792] až sys[1823]  &lt;br /&gt;
          07 i R   cena za jednotku v režimu T0&lt;br /&gt;
                    - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)&lt;br /&gt;
 &lt;br /&gt;
 sys[1824] až sys[1855]  &lt;br /&gt;
          07 i R   cena za jednotku v režimu T1&lt;br /&gt;
                    - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)&lt;br /&gt;
 &lt;br /&gt;
 sys[1856] až sys[1887]  &lt;br /&gt;
          07 s R   název jednotky se vztahem k času, podle nastavení (např. text &amp;quot;kWh&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1888] až sys[1919]&lt;br /&gt;
          07 s R   název měny, podle nastavení (např. text &amp;quot;CZK&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1920] až sys[1951]  &lt;br /&gt;
          07 s R   název jednotky bez vztahu k času, podle nastavení (např. text &amp;quot;kW&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1952] až sys[1983]  &lt;br /&gt;
          07 s R   název činnosti, podle nastavení (např. text &amp;quot;spotřeba&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1984] až sys[2015]  &lt;br /&gt;
          07 s R   název měřiče, podle nastavení (např. text &amp;quot;elektroměr č. 1&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[2016] až sys[2047]  &lt;br /&gt;
          07 i R   konfigurační detaily pro daný S0 vstup&lt;br /&gt;
                    - bit 0 nastaven = je to aktivní S0 vstup&lt;br /&gt;
                    - bit 1 nastaven = tento S0 vstup je rozdělen na dvoutarif T0/T1 (jinak je to jedno-tarif)&lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro využití těchto systémových proměnných, potřebujete mít v SDS aktuální firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[2048] až sys[2198]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT klient ==&lt;br /&gt;
&lt;br /&gt;
Vždy si zjistěte, jestli máte v SDS takové FW, které podporuje funkci MQTT klient:&lt;br /&gt;
&lt;br /&gt;
 sys[2199] 09 i R   podpora MQTT&lt;br /&gt;
                     0 = NE&lt;br /&gt;
                     1 = ANO, verze MQTT 3.1.1, SDS první část implementace&lt;br /&gt;
                     2..max = (reserved)&lt;br /&gt;
&lt;br /&gt;
Každé nové připojení k Brokeru:&lt;br /&gt;
&lt;br /&gt;
 sys[2200] 09 i R   stav průběhu mqtt_connect()&lt;br /&gt;
                     -7 = obdrželi jsme CONNACK, ale negativní = nepřipojeno ( výsledek viz sys[2201] )&lt;br /&gt;
                     -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = pokus o TCP připojení selhal&lt;br /&gt;
                     -1 = nepoužito&lt;br /&gt;
                      0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                      1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                      2 = TCP připojeno a odeslán CONNECT požadavek&lt;br /&gt;
                      4 = obdrželi jsme CONNACK, připojeno ( výsledek viz sys[2201] )&lt;br /&gt;
                      8 = probíhá odpojování, čekáme na výsledek (na odpojení)&lt;br /&gt;
&lt;br /&gt;
Po zavolání mqtt_connect(...) je nutné testovat sys[2200] na výslednou hodnotu. Funkci mqtt_connect(...) nelze volat, je-li sys[2200] na hodnotě 1, 2, 8 nebo 16 (nejprve je v takových případech potřeba provést odpojení pomocí mqtt_disconnect() funkce). Pro úplný test, je-li připojení z SDS do Brokeru úplné, je potřeba ověřit i hodnotu v sys[2201]. Teprve pokud oba tyto sys jsou na správné hodnotě, lze s Brokerem komunikovat.&lt;br /&gt;
&lt;br /&gt;
 sys[2201] 09 i R   výsledek mqtt_connect() = hodnota &amp;quot;CONNACK Connect Return&amp;quot;&lt;br /&gt;
                     -7 = nepoužito&lt;br /&gt;
                     -6 = timeout při čekání na CONNACK, nepřipojeno&lt;br /&gt;
                     -5 = nepoužito&lt;br /&gt;
                     -4 = nepoužito&lt;br /&gt;
                     -3 = nepoužito&lt;br /&gt;
                     -2 = probíhá připojování, čekáme na CONNACK (zatím nepřišel)&lt;br /&gt;
                     -1 = idle, nepřipojeno&lt;br /&gt;
                      0 = (výsledek:) MQTT 0x00: broker akceptoval připojení - LZE POKRAČOVAT (provádět Publish, Subscribe)&lt;br /&gt;
                      1 = MQTT 0x01: Connection Refused, unacceptable protocol version&lt;br /&gt;
                      2 = MQTT 0x02: Connection Refused, identifier rejected&lt;br /&gt;
                      3 = MQTT 0x03: Connection Refused, Server unavailable&lt;br /&gt;
                      4 = MQTT 0x04: Connection Refused, bad user name or password&lt;br /&gt;
                      5 = MQTT 0x05: Connection Refused, not authorized&lt;br /&gt;
&lt;br /&gt;
Hodnotu v sys[2201] lze číst a zpracovat pouze pokud je sys[2200] na hodnotě 16 (to znamená, pouze pokud SDS obdrží odpověď CONNACK od MQTT brokera).&lt;br /&gt;
&lt;br /&gt;
Před a po každém volání mqtt_publish() a nebo mqtt_subscribe() funkcí je potřeba sledovat obsah následují položky:&lt;br /&gt;
&lt;br /&gt;
 sys[2202] 09 i R   výsledek pro tyto funkce: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
                     -8 = SUBACK dorazil z Broker ale s indikovanou chybou (Failure Bit), můžete volat další funkci&lt;br /&gt;
                     -7 = vybraná položka (řádek) subscribe tabulky je prázdná, není co odhlašovat&lt;br /&gt;
                     -6 = timeout (možnosti: publish neprovedeno, nebo: SUBACK vůbec nedorazil, nebo: UNSUBACK vůbec nedorazil), můžete volat další funkci&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty, např. index) např. jejich celková délka se nevleze do paketu&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů)&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = SDS není připojeno k brokeru (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                     -1 = bez aktivity&lt;br /&gt;
                      0 = nepoužito&lt;br /&gt;
                      1 = mqtt_publish() probíhá&lt;br /&gt;
                      2 = mqtt_publish() hotovo (OK - obdržen TCP ACK), můžete volat další funkci&lt;br /&gt;
                      4 = mqtt_subscribe() probíhá - čekám na SUBACK&lt;br /&gt;
                      8 = SUBACK dorazil z Broker, bez chyby (OK), můžete volat další funkci&lt;br /&gt;
                     16 = čekám na UNSUBACK (pouze pro unsubscribe funkce)&lt;br /&gt;
                     32 = UNSUBACK dorazil z Brokeru, můžete volat další funkce&lt;br /&gt;
&lt;br /&gt;
Informativní položka:&lt;br /&gt;
&lt;br /&gt;
 sys[2203] 09 i R   počet chyb v protokolu MQTT směrem z Brokeru&lt;br /&gt;
                    (objeví-li se chyba, dojde k okamžitému odpojení)&lt;br /&gt;
&lt;br /&gt;
Nastavení (položka 2198 je k dispzoici až od FW 11/2025):&lt;br /&gt;
&lt;br /&gt;
 sys[2198] 09 i R   mqtt_publish PUBLISH Fixed Header value ( 0b0011dqqr : d=DUP, qq=QOS, r=RETAIN ) &lt;br /&gt;
 sys[2198] 09 i W   write ( default: 0b00110001 )&lt;br /&gt;
&lt;br /&gt;
Zatím nepoužité pozice:&lt;br /&gt;
&lt;br /&gt;
 sys[2204] až sys[2208]   reserved&lt;br /&gt;
&lt;br /&gt;
Pro každou příchozí datovou zprávu z Brokeru, je tato zpráva uložena do následujících sys: (pozor, každá nová příchozí zpráva přepíše předchozí údaje)&lt;br /&gt;
&lt;br /&gt;
 sys[2210] 09 s R   poslední přijatý Topic Name z Brokeru (broker publish)&lt;br /&gt;
 sys[2250] 09 s R   poslední přijatý Value z Brokeru (broker publish)&lt;br /&gt;
 sys[2290] 09 i R   timestamp pro poslední přijatou zprávu (broker publish)&lt;br /&gt;
&lt;br /&gt;
SDS umí přijaté datové zprávy uchovat, v rámci následující tabulky. Toto je důležité zejména pokud různé zprávy přicházejí velice rychle za sebou, aby se pro SDS-C program neztratili.&lt;br /&gt;
&lt;br /&gt;
Nejvíce lze mít až 32 položek (řádků) v tabulce, nicméně některá SDS nemají ve své paměti dostatečné místo a počet je tedy omezen. Pozor na to při psaní programu !&lt;br /&gt;
&lt;br /&gt;
 sys[2209] 09 i R   počet řádků v tabulce pro dané SDS (různé SDS mají různě volnou paměť, proto je v nich i různý počet použitelných Subscribe položek)&lt;br /&gt;
&lt;br /&gt;
Jednotlivé položky v tabulce příchozích zpráv:&lt;br /&gt;
&lt;br /&gt;
 sys[2211] až sys[2241] &lt;br /&gt;
          09 s R   název položky (Topic Name) pro daný index #1 - #31&lt;br /&gt;
                   (max délka záznamu dle SDS)&lt;br /&gt;
 &lt;br /&gt;
 sys[2242] až sys[2249]   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2251] až sys[2281] &lt;br /&gt;
          09 s R   poslední přijatá hodnota (Value) ze publish zprávy ze brokeru pro daný index #1 - #31&lt;br /&gt;
                   (max délka záznamu dle SDS)&lt;br /&gt;
 &lt;br /&gt;
 sys[2282] až sys[2289]   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2291] až sys[2321] &lt;br /&gt;
          09 i R   timestamp (hodnota uptime) v okamžiku příchodu zprávy z Brokeru&lt;br /&gt;
                   (pro detekci změny - příchozí zprávy z Brokeru)&lt;br /&gt;
                   0 = zatím nic nepřišlo&lt;br /&gt;
                   1..MAX = hodnota uptime v okamžiku poslední změny&lt;br /&gt;
&lt;br /&gt;
Nastavení Topic názvů každé položky (tedy &amp;quot;zápis&amp;quot; do sys[2211] až sys[2241]) se provede funkcí mqtt_subscribe(), které zadáváte pozici v této tabulce a název Topicu. Pokud se Subscribe nepovede, zůstane pozice v tabulce prázdná. Po připojení k Brokeru je tabulka vždy zcela prázdná, a SDS-C program si ji vždy musí dle potřeby naplnit. Pokud Broker pošle aktualizaci obsahu (value) na některou z přihlášených Topic položek, které SDS v této tabulce má, tak SDS automaticky přepíše patřičný řádek tabulky (tj. obsah jednoho ze sys[2251] až sys[2281]) a patřičně aktualizuje časovou známku změny.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[2322] až sys[2398]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MODBUS-TCP klient ==&lt;br /&gt;
&lt;br /&gt;
Ověření FW v SDS:&lt;br /&gt;
&lt;br /&gt;
 sys[2399] 09 i R   podpora pro MODBUS TCP&lt;br /&gt;
                     0 = NE&lt;br /&gt;
                     1 = ANO (první verze implementace v SDS)&lt;br /&gt;
&lt;br /&gt;
Každé nové TCP spojení na server:&lt;br /&gt;
&lt;br /&gt;
 sys[2400] 09 i R   stav průběhu modbus_tcp_connect()&lt;br /&gt;
                     -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = pokus o TCP připojení selhal&lt;br /&gt;
                     -1 = nepoužito&lt;br /&gt;
                      0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                      1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                      2 = TCP připojeno, můžete komunikovat &lt;br /&gt;
&lt;br /&gt;
MODBUS funkce - každá má svůj nezávislý stavový údaj:&lt;br /&gt;
&lt;br /&gt;
 sys[2401] 09 i R   stav průběhu zpracování funkce 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
 sys[2402] 09 i R   stav průběhu zpracování funkce 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
 sys[2403] 09 i R   stav průběhu zpracování funkce 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
 sys[2404] 09 i R   stav průběhu zpracování funkce 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
 sys[2405] 09 i R   stav průběhu zpracování funkce 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
 sys[2406] 09 i R   stav průběhu zpracování funkce 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
 sys[2415] 09 i R   stav průběhu zpracování funkce 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
 sys[2416] 09 i R   stav průběhu zpracování funkce 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
                     pro všechny tyto stavy platí následující hodnoty:&lt;br /&gt;
                      -6 = timeout (neprovedeno), můžete volat další funkci&lt;br /&gt;
                      -5 = nespravne parametry (hodnoty), můžete volat další funkci&lt;br /&gt;
                      -4 = nespravne parametry (počet parametrů), můžete volat další funkci&lt;br /&gt;
                      -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                      -2 = SDS není připojeno (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                      -1 = bez aktivity, lze volat funkci&lt;br /&gt;
                       0 = provedeno OK (obdržena platná odpověď bez chybového kódu), můžete volat další funkci&lt;br /&gt;
                       1 .. 15 = obdržena odpověď s chybou 0x01 až 0x0F, můžete volat další funkci&lt;br /&gt;
                     256 = pracuji, čekejte na aktualizovanou hodnotu&lt;br /&gt;
&lt;br /&gt;
 sys[2417] až sys[2462]   reserved&lt;br /&gt;
&lt;br /&gt;
 sys[2463] 09 i R  poslední hodnota Unit Identifier zapsaná do MBAP hlavičky při odeslání zprávy&lt;br /&gt;
 &lt;br /&gt;
 sys[2464] 09 i R  poslední hodnota Transaction Identifier zapsaná do MBAP hlavičky při odeslání zprávy&lt;br /&gt;
&lt;br /&gt;
Přijatá data (funkce _read) - obsah je aktualizován pro každou novou přijatou MODBUS zprávu. Výsledky (přijatá data) jsou vždy uloženy do následujících sys (bez ohledu na typ MODBUS funkce).&lt;br /&gt;
&lt;br /&gt;
 sys[2465] 09 i R  timestamp poslední přijaté zprávy&lt;br /&gt;
                   (vhodné pro detekci nové přijaté zprávy)&lt;br /&gt;
 &lt;br /&gt;
 sys[2466] 09 i R  počet přijatých položek, pro poslední přijatou zprávu&lt;br /&gt;
                   (počet celých položek)&lt;br /&gt;
 &lt;br /&gt;
 sys[2467] 09 i R  přijatá hodnota Unit Identifier z příchozí MBAP hlavičky&lt;br /&gt;
                   (hodnota adresy je převzata z příchozí zprávy)&lt;br /&gt;
 &lt;br /&gt;
 sys[2468] 09 i R  přijatá hodnota Transaction Identifier z příchozí MBAP hlavičky&lt;br /&gt;
                   (hodnota adresy je převzata z příchozí zprávy) &lt;br /&gt;
 &lt;br /&gt;
 sys[2469] 09 i R  adresa první položky coil/input/register (které odpovídá údaj v sys[2470])&lt;br /&gt;
                   (MODBUS způsob číslování položek - adresa 1..n)&lt;br /&gt;
 &lt;br /&gt;
 sys[2470] až sys[2719]&lt;br /&gt;
          09 i R   přijaté hodnoty pro poslední přijatou zprávu&lt;br /&gt;
                    MODBUS funkce 0x01 a 0x02: každý sys[] má hodnotu 0 až 255, jednotlivé bity určují coils/input&lt;br /&gt;
                    MODBUS funkce 0x03 a 0x04: každý sys[] má hodnotu -32768 až 32767, tedy hodnotu pro každý jeden registr&lt;br /&gt;
&lt;br /&gt;
Pro funkce 0x01 a 0x02 jsou přijatá data kódována v jednobitovém tvaru, vždy po osmi bitech na jeden sys[]. Takže prvních osm bitů naleznete v sys[2465], dalších osm bitů v sys[2466] a tak dále.&lt;br /&gt;
&lt;br /&gt;
Pro funkce 0x03 a 0x04 jsou přijaté hodnoty registrů (MODBUS: vždy int16_t) uloženy postupně zasebou (tak jak přišli ve zprávě) do jednotlivých sys[], takže první registr je v sys[2465], druhý ve sys[2466] atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezerva&lt;br /&gt;
&lt;br /&gt;
 sys[2715] až sys[2809]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statistiky COMx ==&lt;br /&gt;
&lt;br /&gt;
COM1:&lt;br /&gt;
&lt;br /&gt;
 sys[2810] 09 i R   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2811] 09 i R   počet odeslaných bajtů (TX) na port COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2812] 09 i R   počet neodeslaných bajtů (zahozených) pro port COM1 &lt;br /&gt;
                    (tzn. SDS chce odeslat více bajtů než zvládá nastavená rychlost COM portu)&lt;br /&gt;
 &lt;br /&gt;
 sys[2813] 09 i R   počet čekajících bajtů na odeslání (TX) ve frontě pro port COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2814] 09 i R   počet přijatých bajtů (RX) na portu COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2815] 09 i R   počet nepřijatých bajtů (ignorované) pro port COM1 &lt;br /&gt;
                    (tzn. pro případ kdy do SDS je posláno více bajtů než SDS zpracuje, a tak musí zahazovat)&lt;br /&gt;
 &lt;br /&gt;
 sys[2816] 09 i R   počet nevyzvednutých přijatých bajtů (RX) ve frontě pro port COM1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezerva&lt;br /&gt;
&lt;br /&gt;
 sys[2817] až sys[2860]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
COM6:&lt;br /&gt;
&lt;br /&gt;
 sys[2861] 09 i R   počet odeslaných bajtů (TX) na port COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2862] 09 i R   počet neodeslaných bajtů (zahozených) pro port COM6&lt;br /&gt;
                    (tzn. SDS chce odeslat více bajtů než zvládá nastavená rychlost COM portu)&lt;br /&gt;
 &lt;br /&gt;
 sys[2863] 09 i R   počet čekajících bajtů na odeslání (TX) ve frontě pro port COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2864] 09 i R   počet přijatých bajtů (RX) na portu COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2865] 09 i R   počet nepřijatých bajtů (ignorované) pro port COM6&lt;br /&gt;
                    (tzn. pro případ kdy do SDS je posláno více bajtů než SDS zpracuje, a tak musí zahazovat)&lt;br /&gt;
 &lt;br /&gt;
 sys[2866] 09 i R   počet nevyzvednutých přijatých bajtů (RX) ve frontě pro port COM6&lt;br /&gt;
&lt;br /&gt;
Pro využití všech těchto statistik, je potřeba mít v SDS aktuální firmware (starší FW zde vrací nuly).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konec dokumentu ==&lt;br /&gt;
&lt;br /&gt;
'''Konec dokumentu.'''&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_sysp&amp;diff=969</id>
		<title>SDS-C: sdsc sysp</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_sysp&amp;diff=969"/>
		<updated>2025-11-15T11:11:23Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&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;
 Zařízení Druhé Produktové Řady používají jazyk FULL-C (jiná část této Wiki).&lt;br /&gt;
&lt;br /&gt;
== Definice systémových proměnných SDS-C : pole sys[] ==&lt;br /&gt;
&lt;br /&gt;
Tzv. &amp;quot;systémová proměnná&amp;quot; je prvek v programovacím jazyku SDS-C, který má textový název, a se kterým se dá pracovat - číst hodnotu z proměnné a zapisovat hodnotu do proměnné. Často je čtení a zápis svázáno s fyzickou akcí (např. zápis do konkrétní systémové proměnné změní stav relé).&lt;br /&gt;
&lt;br /&gt;
SDS-C obsahuje celou řadu vyhrazených, předem pevně definovaných systémových proměnných. Tyto proměnné obsahují aktuální online informace a údaje, vzhledem ke stavu zařízení. Dá se jimi také zařízení (resp. periférie) přímo ovládat. Úplný seznam je právě na této stránce.&lt;br /&gt;
&lt;br /&gt;
Proměnné poskytované SDS-C a navázané na HW zařízení, jsou označeny jako '''sys[x]''', kde index '''x''' je číslo do 0 do 1023 (popřípadě až do 2048 ale to jen na určitých typech zařízení).&lt;br /&gt;
&lt;br /&gt;
Tyto proměnné lze číst, popř. do nich zapsat novou hodnotu. To vše můžete provést ve svém SDS-C programu, nebo přes některou z komunikačních funkcí (např. UDP protokolem, nebo přes webové rozhraní).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Legenda k tabulce:''&lt;br /&gt;
&lt;br /&gt;
Proměnná typu '''i''' je 32-bit signed integer (nejvyšší bit je znaménko, a zbývajících 31 bitů je číselná hodnota).&lt;br /&gt;
&lt;br /&gt;
Proměnná typu '''s''' je soubor znaků (string) - tj. '''text''' (řetězec znaků) - a tyto proměnné '''lze použít jen pro čtení'''.&lt;br /&gt;
&lt;br /&gt;
Některé proměnné lze jen číst ('''R'''), do některých lze kromě čtení i zapisovat ('''RW'''). &lt;br /&gt;
&lt;br /&gt;
Údaj '''XX''' v seznamu proměnných udává verzi firmware, kdy byla daná proměnná zavedena.&lt;br /&gt;
'''Význam hodnot:'''&lt;br /&gt;
* '''01''' - první verze, výchozí firmware ze začátku roku 2010&lt;br /&gt;
* '''02''' - druhá verze, bylo vydáno na přelomu roku 2010 a 2011&lt;br /&gt;
* '''03''' - třetí verze, tj. pouze pro firmware od 03.2011 &lt;br /&gt;
* '''04''' - čtvrtá verze, tj. pouze pro firmware od 06.2011 a novější&lt;br /&gt;
* '''05''' - pátá verze, tj. pouze pro firmware od 11.2011 a novější&lt;br /&gt;
* '''06''' - šestá verze, tj. pouze pro firmware od 03.2012 a novější&lt;br /&gt;
* '''07''' - sedmá verze, tj. pouze pro firmware od 07.2017 a novější&lt;br /&gt;
* '''08''' - osmá verze, tj. pouze pro firmware od 12.2018 a novější&lt;br /&gt;
* '''09''' - devátá verze, tj. pouze pro firmware od 06.2020 a novější&lt;br /&gt;
&lt;br /&gt;
Všechny proměnné označené jako rezerva mohou být v budoucích verzích firmware nějak využity. Pokud jsou však pro tuto verzi firmware označeny jako rezerva, pak se nesmí používat (zapisovat do nich, kvůli budoucí kompatibilitě). Při čtení obvykle vrací hodnotu nula, ovšem jakmile budou v novém firmware využity, už budou vracet konkrétní hodnotu.&lt;br /&gt;
&lt;br /&gt;
Pokud máte starší verzi firmware, je možné, že některé později přidané položky nebudou k dispozici. Řešením je udržovat firmware ve vašem zařízení vždy aktuální.&lt;br /&gt;
&lt;br /&gt;
Jazyk SDS-C indexuje všechny pole od čísla 0 (nula) - všechna pole, tj. &amp;quot;sys[]&amp;quot;, &amp;quot;ram[]&amp;quot;, &amp;quot;text[]&amp;quot;, začínají se svým obsahem od indexu nula.&lt;br /&gt;
&lt;br /&gt;
'''Pozor''' však na číslování hardware vstupů a výstupů, ty jsou číslovány dle &amp;quot;elektrikářských&amp;quot; zvyklostí, to znamená že číslování začíná od čísla '''1''' ('''jednička''') - toto ale nemá hlubší vliv na SDS-C.&lt;br /&gt;
&lt;br /&gt;
Pokud narazíte na takové zařízení SDS, které má ještě velmi starou verzí webového rozhraní, kde byly ještě některé vstupy číslovány od nuly, aktualizujte si toto zařízení aby používalo nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Důležité upozornění'''&lt;br /&gt;
&lt;br /&gt;
Protože SDS-C ''umí pracovat pouze a jen'' s '''32-bit signed''' integer čísly (tj. 1-bit znaménko a 31-bitů číslo, typ int32_t), tak dochází k (očekávané) konverzi '''32-bit unsigned''' čísel (tj. bez znaménka 32-bitů číslo, typ uint32_t) mezi vnitřními hodnotami v SDS a reprezentací v SDS-C (například když takové unsigned číslo je dotazováno například přes čtení &amp;quot;sys[]&amp;quot; hodnot).&lt;br /&gt;
&lt;br /&gt;
Jinýmy slovy - uvnitř SDS jsou drženy některé hodnoty jako 32-bit unsigned. Ale protože SDS-C pracuje pouze s 32-bit signed čísly, pak při čtení takových čísel zevnitř SDS jsou tyto čísla prezentovány v SDS-C jako 32-bit signed. Bitově se nezmění, jen se &amp;quot;mění&amp;quot; pohled na to, co který bit znamená, viz text dále.&lt;br /&gt;
&lt;br /&gt;
''Příklad:'' &lt;br /&gt;
Hodnota &amp;quot;sys[625]&amp;quot; reprezentuje &amp;quot;uplynulý čas od posledního zachyceného S0 impulsu na daném S0 vstupu&amp;quot;. Tato hodnota je udržována uvnitř SDS a program SDS-C k ní má přístup.&lt;br /&gt;
Tento čas je udán v milisekundách a začína na nule, a s každou milisekundou ze zvýší o jedničku. Protože SDS udržuje toto počítadlo (uvnitř své paměti) jako '''32-bit unsigned''', tak jakmile dojde k dopočítání do 31-bitů (tj. 2147483647) a překlopí se tedy 32. bit (tj. na 2147483648), tak SDS-C při čtení &amp;quot;sys[625]&amp;quot; vrátí zápornou hodnotu (tj. -2147483648). Toto je v pořádku - pokud si vypíšete jednotlivé bity, tak budou stále přesně odpovídat, ale tím že SDS-C interpetuje všechny čísla jako '''32-bit signed''', tak vzorovou hodnotu použije a zobrazí jako zápornou.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  skutečná binární hodnota         | 32-bit signed | 32-bit unsigned&lt;br /&gt;
  (32-bit)                         | SDS-C integer | (internal SDS)&lt;br /&gt;
 ----------------------------------+---------------+-----------------&lt;br /&gt;
  00000000000000000000000000000000 |             0 |               0&lt;br /&gt;
  00000000000000000000000000000001 |             1 |               1&lt;br /&gt;
  00000000000000001111111111111111 |         65535 |           65535&lt;br /&gt;
  01111111111111111111111111111111 |    2147483647 |      2147483647&lt;br /&gt;
  10000000000000000000000000000000 |   -2147483648 |      2147483648&lt;br /&gt;
  10000000000000000000000000000001 |   -2147483647 |      2147483649&lt;br /&gt;
  10000000000000001111111111111111 |   -2147418113 |      2147549183&lt;br /&gt;
  11111111111111111111111111111111 |            -1 |      4294967295&lt;br /&gt;
  11111111111111111111111111111110 |            -2 |      4294967294&lt;br /&gt;
  11111111111111111111111111111101 |            -3 |      4294967293&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, SDS vždy (ať ve svém firmware, tak v SDS-C kódu a proměnných) udržuje hodnoty ve stejném ''binárním'' obsahu. Jen interpretace a další práce s čísly je jiná. SDS samo vnitřně pracuje s '''32-bit unsigned''' hodnotami, a díky tomu na webu a všech M2M stránkách můžete vidět hodnoty v rozsahu od 0 do 4294967295. Zato SDS-C pracuje pouze se '''32-bit signed''' hodnotami, a proto stejné číslo je reprezentováno v rozsahu -2147483648 až 2147483647. Toto je vlastnost daná omezením implementace, zkrátka v SDS-C to nelze jinak udělat (pokud to je problém, což ale není, tak můžete přejít na zařízení s FULL-C které tyto omezení nemá).&lt;br /&gt;
&lt;br /&gt;
To lze snadno ve vašem SDS-C kódu ošetřit, a pokud pouze přenášíte hodnoty z SDS na server (přes HTTP-GET), tak se to dá snadno a ihned zpracovat na serveru &amp;quot;zpět&amp;quot; na '''32-bit unsigned''' hodnotu. Jednoduše na serveru přijmete '''signed''' číslo, a převedete ho například přetypování na '''unsigned''' číslo. Bity v paměti totiž jsou pro oba typy stejné.&lt;br /&gt;
&lt;br /&gt;
V tabulce jsou konkrétní &amp;quot;sys[]&amp;quot; položky, kterých se toto týká, označeny tímto symbolem: '''(!)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Použítí v SDS-C programu'''&lt;br /&gt;
&lt;br /&gt;
Zápis a čtení z/do systémových proměnných má okamžitý přímý vliv na hardware, se kterým jsou konkrétní proměnné svázány.&lt;br /&gt;
&lt;br /&gt;
Příklad zápisu v programu: jaká je teplota na čidle 1 (celé stupně Celsia)? &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 teplota0_ve_stupnich_C = sys[310] / 100;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ne vždy je potřeba provádět převody. Pokud např. chcete porovnat dvě hodnoty z různých teplotních čidel, můžete to udělat přímo (bez dělení 100 jako v předchozím příkladu) - samozřejmě toto platí pouze tehdy, pokud porovnáváte hodnoty ve stejných jednotkách:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (sys[310] &amp;gt; sys[311]) { echo('Prvni cidlo je teplejsi nez druhe.'); };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad zápisu v programu: jak zapnu relé RE1? (musíte vědět &amp;quot;co&amp;quot; &amp;quot;kam&amp;quot; zapsat):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sys[231] = 255; // v tomto okamžiku dojde k ovládnutí relé č. 1 (- viz index 231 dole v seznamu)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Můžete (od 03 verze SDS-C) použít i ''#define'', příklad:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define RELE1 sys[231]&lt;br /&gt;
&lt;br /&gt;
#define TEPLOTA sys[310]&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
 &lt;br /&gt;
RELE1 = 255;&lt;br /&gt;
 &lt;br /&gt;
if (TEPLOTA &amp;gt; 3200) goto x;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole ram[] ==&lt;br /&gt;
&lt;br /&gt;
Pole '''ram[]''' je samostatné nezávislé pole, dostupné pro SDS-C program od verze č. 03 (a výše).&lt;br /&gt;
&lt;br /&gt;
Obsah pole ram[] je uložen samostatně v RAM paměti, a je při resetu zařízení ztracen.&lt;br /&gt;
&lt;br /&gt;
Obsah pole ram[] se nekryje s dalšími proměnnými programu a tak dále (je to zcela samostatné paměťové pole).&lt;br /&gt;
&lt;br /&gt;
Pole ram[] lze indexovat číslem nebo proměnnou. Příkladem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
hodnota = ram[10];&lt;br /&gt;
&lt;br /&gt;
index = 23;&lt;br /&gt;
ram[index] = 15 * 2;&lt;br /&gt;
&lt;br /&gt;
index = sys[1023];&lt;br /&gt;
ram[index] = 30;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pole ram[] je indexováno od indexu nula (tj.: ram[0]). Celková velikost (maximální index) je dán verzí SDS-C a konkrétního firmware v zařízení. &lt;br /&gt;
&lt;br /&gt;
Verze SDS-C č. 03 má maximální velikost pole ram[] nastavenou na 128 položek. '''Novější verze už mají počet zvýšený ''' - verze č. 06 má velikost ram[] nastavenou na 512 položek (každá o velikosti int32_t).&lt;br /&gt;
&lt;br /&gt;
Pole ram[] můžete využít k čemukoliv co potřebujete. Také i pro některé SDS-C funkce, jako je ''http_get()'', která může do pole ram[] ukládat obsah textu obdrženého ze serveru (toto chování se nastavuje příslušnými sys[]), nebo při přenosu stránek z/do paměti DF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ukládání trvalých dat ==&lt;br /&gt;
&lt;br /&gt;
Všechny verze SDS-C mají od k dispozi prostor v oblasti sys[100] až sys[115]. Toto je výchozí oblast pro uchovávání trvanlivých dat (tyto údaje se neztratí při výpadku napájení). Přímým zápisem, do těchto sys[] položek, dojde k zápisu do pevné paměti. Čtení se provádí opět přímým přístupem do těchto sys[].&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. 05 je možno, navíc k tomuto základu, zapisovat a přečíst mnohem větší množství údajů v externím paměťovém chipu DATAFLASH (NVM = Non-Volatile Memory), osazeném na desce zařízení SDS, a to prostřednictvím čtyř SDS-C funkcí.&lt;br /&gt;
&lt;br /&gt;
Pozn. historické verze zařízení SDS-MICRO LIGHT, kde se používá paměť EEPROM (na místo novější DataFlash), poskytuje vždy pouze základní rozsah indexů: 100 až 115, a neposkytuje rozšířený rozsah pevné paměti (tak jako zařízení s pamětí DataFlash).&lt;br /&gt;
&lt;br /&gt;
Více informací, způsob použití a důležité varování je uvedeno na [[SDS-C: DataFlash|stránce ohledně DataFlash]].&lt;br /&gt;
&lt;br /&gt;
Další možnost:&amp;lt;br&amp;gt;&lt;br /&gt;
Zařízení SDS řady ST mají k dispozici, kromě podpory pro DataFlash, i možnost využít Zálohovanou paměť RAM (ta drží obsah i při vypnutém napájení SDS, pokud je v SDS vložena nabitá zálohovací baterie).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole text[] ==&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. '''06''' je možné v určité míře pracovat s texty. Toto má především využití v komunikaci přes sériovou linku (RS232/RS485) a při odesílání a příjmu dat (email, http) či práci s komunikačními moduly (GSM, LTE, LoRA).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je připraveno pole '''text[]'''. Detailní popis je [[SDS-C:_popis_jazyka#Pole_text.5B.5D|zde]].&lt;br /&gt;
&lt;br /&gt;
SDS-C je omezený programovací jazyk z hlediska &amp;quot;práce s textem&amp;quot;. Pokud potřebujete intenzivně s textem pracovat, použijte zařízení SDS které má FULL-C jazyk.&lt;br /&gt;
&lt;br /&gt;
I přes omezení SDS-C je možné připojit různé komunikační moduly (GSM, LTE, LoRA), které komunikují prostřednictvím textových příkazů (viz vzorové programy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole share[] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. '''08''' je možné použít pole '''share[]''', určené primárně pro sdílení textové informace mezi SDS-C programem a webovým rozhraním (tedy jako [[SDS-C:_sharing|sdílené proměnné]]).&lt;br /&gt;
&lt;br /&gt;
Práce s polem share[] je prakticky zcela shodná jako práce s polem text[]. Prakticky tak získává programátor dvě nezávislé pole pro uchování textu. Nicméně, některé SDS-C funkce vyhrazeně fungují jen s polem text[], ale to je vždy uvedeno v jejich popisu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhrazené funkce ==&lt;br /&gt;
&lt;br /&gt;
Seznam konkrétních zabudovaných '''funkcí''' naleznete na [[SDS-C: sdsc sysf|jiné stránce]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jednotné proměnné (pole sys[]) pro všechny výrobky řady SDS ==&lt;br /&gt;
&lt;br /&gt;
'''STAV SYSTÉMU'''&lt;br /&gt;
&lt;br /&gt;
 sys[0]   01 i R   &amp;quot;pair code&amp;quot; firmware (nastaven výrobcem napevno: identifikátor vázanosti firmware na hardware)&lt;br /&gt;
                    - lze využít pro rozeznání typu zařízení SDS, na kterém je spuštěn SDS-C program&lt;br /&gt;
 &lt;br /&gt;
 sys[1]   01 i R   počet přihlášených uživatelů do webového rozhraní (v okamžiku čtení této proměnné)&lt;br /&gt;
 &lt;br /&gt;
 sys[2]   01 s R   text SNMP-sysLocation, nastaveno ve webové administraci&lt;br /&gt;
 &lt;br /&gt;
 sys[3]   01 i R   hodnota '''UpTime10''' (doba běhu zařízení)&lt;br /&gt;
                    - počítá se od nuly (0) od každého zapnutí zařízení&lt;br /&gt;
                    - pouze 31 bitové počítadlo&lt;br /&gt;
                      (SDS si pro sebe interně počítá UpTime10 jako 32bit, nicméně&lt;br /&gt;
                       nejvyšší bit je odmaskován před předáním hodnoty do SDS-C programu)&lt;br /&gt;
                    - platné hodnoty: 0 až 2147483647 (včetně)&lt;br /&gt;
                    - po překročení 2147483647 (zde odpovídá up-time 248 dnů) začíná hodnota opět na nule&lt;br /&gt;
                    - jeden krok (zvýšení o jedničku) této hodnoty UpTime10 odpovídá právě '''10 msec''' uplynulému času &lt;br /&gt;
 &lt;br /&gt;
 sys[4]   01 i R   hodnota '''LOCAL''' času (UNIX čas, v sekundách)&lt;br /&gt;
                    - jedná se o lokální (eventuálně posunutý) čas, synchronizovaný se NTP serverem&lt;br /&gt;
                    - je zde už předem započítán GMT offset sys[26] (ten lze nastavit ve webovém rozhraní)&lt;br /&gt;
                    - je zde aplikován automatický posun letního času (je-li to povoleno ve webovém rozhraní)&lt;br /&gt;
                    - poskytnuto je pouze 31 bitové číslo (bude platné až do 19. leden 2038 včetně, &lt;br /&gt;
                      pak hodnota roluje na nulu - nejvyšší bit je odmaskován před předáním do SDS-C programu)&lt;br /&gt;
                    - platné hodnoty: 0 až 2147483647 (včetně)&lt;br /&gt;
 &lt;br /&gt;
 sys[5]   01 i R   rozpad LOCAL času: den (1 až 31)&lt;br /&gt;
 sys[6]   01 i R   rozpad LOCAL času: měsíc (1 až 12)&lt;br /&gt;
 sys[7]   01 i R   rozpad LOCAL času: rok (2011 a dále)&lt;br /&gt;
 sys[8]   01 i R   rozpad LOCAL času: hodina (0 až 23)&lt;br /&gt;
 sys[9]   01 i R   rozpad LOCAL času: minuta (0 až 59)&lt;br /&gt;
 sys[10]  01 i R   rozpad LOCAL času: sekunda (0 až 59)&lt;br /&gt;
 sys[11]  01 i R   rozpad LOCAL času: číslo dne v týdnu - počet dní od Neděle (0 až 6)&lt;br /&gt;
&lt;br /&gt;
'''Upozornění''': hodnota LOCAL času je platná až po úspěšném získání informací z NTP serveru. Po zapnutí (restartu) zařízení je NTP čas (sys[38], sys[4]) nastaven na nulu. Čas je automaticky v SDS aktualizován co jednu sekundu pomocí vnitřních hodin v SDS, a dále je hodnota času pravidelně (v delším intervalu) upřesněna dotazem na NTP server.&lt;br /&gt;
&lt;br /&gt;
V případě, že není zapnuta automatika DST (letní čas) a GMT offset je nastaven na nulu, tak je hodnota LOCAL času identická s NTP časem (UTC). Jakmile se ale nastaví offset nebo aktivuje posun letního času, už jsou tyto hodnoty odlišné (NTP je UTC, a LOCAL je místní (posunutý) čas). Pro různé použití je potřeba různých časů (často je potřeba UTC pro časové známkování údajů, a zase někdy je vhodný LOCAL pro interakci s uživatelem a pro různé výpisy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ethernet, Internet ==&lt;br /&gt;
&lt;br /&gt;
 sys[12]  01 i R   IP[0] adresa zařízení (nastaveno ve webové administraci)&lt;br /&gt;
 sys[13]  01 i R   IP[1] adresa zařízení&lt;br /&gt;
 sys[14]  01 i R   IP[2] adresa zařízení&lt;br /&gt;
 sys[15]  01 i R   IP[3] adresa zařízení&lt;br /&gt;
 &lt;br /&gt;
 sys[16]  01 i R   GW_IP[0] adresa brány (nastaveno ve webové administraci)&lt;br /&gt;
 sys[17]  01 i R   GW_IP[1] adresa brány&lt;br /&gt;
 sys[18]  01 i R   GW_IP[2] adresa brány&lt;br /&gt;
 sys[19]  01 i R   GW_IP[3] adresa brány&lt;br /&gt;
 &lt;br /&gt;
 sys[20]  01 i R   NETMASK[0] síťová maska (nastaveno ve webové administraci)&lt;br /&gt;
 sys[21]  01 i R   NETMASK[1] síťová maska&lt;br /&gt;
 sys[22]  01 i R   NETMASK[2] síťová maska&lt;br /&gt;
 sys[23]  01 i R   NETMASK[3] síťová maska&lt;br /&gt;
&lt;br /&gt;
 sys[24]  01 i R   stav rozhraní Ethernet (je spuštěno?)&lt;br /&gt;
                    == 0 : komunikace přes Ethernet není k dispozici (odpojený kabel, vypnutá protistrana nebo switch, atd.)&lt;br /&gt;
                    != 0 : Ethernetová komunikace je funkční (LINK OK)&lt;br /&gt;
 &lt;br /&gt;
 sys[25]  01 i R   rychlost připojení k síti Ethernet (hodnoty: 0, 10, 100)&lt;br /&gt;
                    == 0   : neznámá rychlost (není k dispozici Ethernet)&lt;br /&gt;
                    == 10  : 10 MBit per sec&lt;br /&gt;
                    == 100 : 100 MBit per sec&lt;br /&gt;
&lt;br /&gt;
 sys[26]  04 i RW  hodnota GMT offsetu pro NTP (nastaveno v administraci ve webovém rozhraní)&lt;br /&gt;
                    - platné hodnoty: -11 až 11 (včetně) (údaj v hodinách)&lt;br /&gt;
                    - zápis je možný, ale změněná hodnota (ze SDS-C) není uložena do pevné paměti &lt;br /&gt;
                      (po resetu zařízení se vráti na poslední uloženou hodnotu)&lt;br /&gt;
&lt;br /&gt;
 sys[27]  06 i R   platnost přidělené IP adresy zařízení SDS&lt;br /&gt;
                    == 0 : zařízení SDS nemá přidělenou platnou IP adresu (typický důvod: čeká se na DHCP)&lt;br /&gt;
                    != 0 : zařízení SDS má přidělenou platnou IP adresu a může komunikovat přes Ethernet&lt;br /&gt;
 &lt;br /&gt;
 sys[28]  06 i R   poslední okamžik kdy byla změněna IP adresa,&lt;br /&gt;
                   buď ručně z webového rozhraní (administrace) nebo DHCP serverem (je-li DHCP zapnuto)&lt;br /&gt;
                    - údaj odpovídá stavu UpTime10 (1 krok = 10 msec) v daný okamžik&lt;br /&gt;
 &lt;br /&gt;
 sys[29]  06 i R   DHCP: stav (lze použít pro kontrolu správné funkce DHCP klienta v SDS)&lt;br /&gt;
                    == 0 : v klidu (nic se neprovádí, nebo DHCP je vypnuté)&lt;br /&gt;
                    == 1 : odesláno DHCP DISCOVER&lt;br /&gt;
                    == 2 : obdrženo DHCP OFFER&lt;br /&gt;
                    == 3 : odesláno DHCP REQUEST&lt;br /&gt;
                    == 4 : obdrženo DHCP ACK&lt;br /&gt;
                    == 5 : IP adresa je přidělena (BOUND)&lt;br /&gt;
                    == 6,7,8,9,10,11 : zpracování DHCP RENEW&lt;br /&gt;
 &lt;br /&gt;
 sys[30]  06 i R   aktuální hodnota &amp;quot;DHCP Lease Time&amp;quot;&lt;br /&gt;
                    - hodnota je nastavena v okamžiku DHCP BOUND (při přidělení (nové) IP adresy)&lt;br /&gt;
                    - hodnota je každou 1 sec snížena o jednotku (když dojde na nulu, klient začne obnovovat IP adresu)&lt;br /&gt;
                    - údaj je uveden v jednotkách [sec]&lt;br /&gt;
&lt;br /&gt;
 sys[31]  04 i R   MAC[0] (celá MAC je nastavena ve webovém rozhraní)&lt;br /&gt;
 sys[32]  04 i R   MAC[1] &lt;br /&gt;
 sys[33]  04 i R   MAC[2] &lt;br /&gt;
 sys[34]  04 i R   MAC[3] &lt;br /&gt;
 sys[35]  04 i R   MAC[4] &lt;br /&gt;
 sys[36]  04 i R   MAC[5] (vždy je vyplněno dolních 8 bitů)&lt;br /&gt;
&lt;br /&gt;
 sys[37]  06 i R   NTP Client Status (synchronizace času)&lt;br /&gt;
                    == 0 : nesynchronizováno&lt;br /&gt;
                    == 1 : úspěšně přijal paket od NTP Serveru&lt;br /&gt;
               W   zápis hodnoty 10 (přesně a pouze: 10) do tohoto indexu vyvolá nucený NTP dotaz &lt;br /&gt;
                   (dotaz se odešle za 10sec od takovéhoto zápisu)&lt;br /&gt;
 &lt;br /&gt;
 sys[38]  07 i R   čistý UTC čas - v sekundách (UNIX Epoch čas)&lt;br /&gt;
                    - není zde aplikován offset, ani automatika letního času&lt;br /&gt;
                    - přímá hodnota získaná z NTP serveru (tj. jeho odpověď), &lt;br /&gt;
                      uvnitř SDS je sice udržována jako 32bit, &lt;br /&gt;
                      ale do SDS-C programu je hodnota předána jen jako 31bit číslo (nejvyšší 32.bit je odmaskován).&lt;br /&gt;
 &lt;br /&gt;
 sys[39]  07 i R   stav automatiky přepínání Letního Času&lt;br /&gt;
                    == 0 : automatika zakázána, lokální čas není ovlivněn&lt;br /&gt;
                    == 1 : automatika povolena, ale v současné době (podle NTP UTC času) je letní čas neaktivní (tzn. je &amp;quot;SEČ&amp;quot;).&lt;br /&gt;
                    == 2 : automatika povolena, a v současné době (podle NTP UTC času) je letní čas aktivní (tzn. je &amp;quot;SELČ&amp;quot;).&lt;br /&gt;
                           (tzn. do sys[4] je připočten nejen offset ze sys[26], ale teď také plus 1 hodina kvůli SELČ).&lt;br /&gt;
          09 i W   pouze pro případ vypnutého NTP: ruční ovládání automatiky (tzn. povolena nebo nepovolena) (SELČ pak automatika sama rozhodne, je-li povolena)&lt;br /&gt;
                    zápis 0 : vypnout automatiku (nebude pracovat = nebude aplikoval posun pro SELČ pro nastavený rozsah v roce), sys[39] pak vrátí 0 při čtení&lt;br /&gt;
                    zapis 3 : zapnout automatiku (automatika aplikuje posun pro SELČ podle toho jaký je aktuální čas a datum), sys[39] pak vrátí 1 nebo 2 dle stavu  &lt;br /&gt;
 &lt;br /&gt;
 sys[138] 09 i R   stav RTC (záloha času - pouze SDS se záložní baterií)&lt;br /&gt;
                   zatím stále 0, tzn. nepoužito, další obsah se chystá (nový FW)&lt;br /&gt;
 &lt;br /&gt;
 sys[139] 09 i R   vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Princip funkce automatiky letního času je popsán jinde na této wiki. Funkce automatiky je samozřejmě volitelná (viz: ruční nastavení ve webovém rozhraní).&lt;br /&gt;
&lt;br /&gt;
 sys[40] až sys[44]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provozní údaje ==&lt;br /&gt;
&lt;br /&gt;
 sys[45]  06 i R   relativní čas v milisekundách, počítaný od zapnutí zařízení (tj. UpTime1)&lt;br /&gt;
                    - po resetu zařízení začíná vždy počítat od nuly&lt;br /&gt;
                    - každou milisekundu se zvýší o 1 (narozdíl od UpTime10);&lt;br /&gt;
                      tzn. toto je velmi podobná hodnota jako UpTime, ale je v jiných jednotkách!&lt;br /&gt;
                    - pro sys[45] je k dispozici 31 bitů,&lt;br /&gt;
                      takže po 2147483648 msec dojde k vynulování sys[45] a počítá se opět od nuly nahoru&lt;br /&gt;
                      (pozn.: SDS si interně udržuje hodnotu jako 32bitů, ale do SDS-C programu se předává jen 31bitů).&lt;br /&gt;
&lt;br /&gt;
 sys[46]  06 i R   &amp;quot;surová&amp;quot; (raw) hodnota teploty SoC chipu (není to přímo teplota v degC, ale speciální digitální hodnota),&lt;br /&gt;
                   význam hodnot závisí na typu konkrétního zařízení SDS. &lt;br /&gt;
                   Je to dáno způsobem měření této teploty, a převod na stupně Celsia je jednoduchý, přes vzorec.&lt;br /&gt;
 &lt;br /&gt;
 SDS MICRO (LM), MACRO (LM), UPS, IO6 (LM): &lt;br /&gt;
  Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = ((5*(59-30*((3/1024)*sys[46])))/2) ]&lt;br /&gt;
 &lt;br /&gt;
 SDS TTCPRO, MINI, MACRO-ST, MICRO-ST, IO6-ST: &lt;br /&gt;
  Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = (((((sys[46]/4096)*3.3)-0.76)/0.0025)+25) ]&lt;br /&gt;
&lt;br /&gt;
Teplota SoC je pouze orientační, a je měřena s přesností +/- 5 degC.&lt;br /&gt;
&lt;br /&gt;
 sys[137] 09 i R   POUZE VARIANTY &amp;quot;ST&amp;quot; - počet provedených cyklů procesoru (provedených CPU instrukcí) od zapnutí/restartu &lt;br /&gt;
                   (při přetečení 2^31 počítá opět od nuly, pořád dokola)&lt;br /&gt;
&lt;br /&gt;
Hodnota v indexu 137 je nejjemnější možný &amp;quot;časovač&amp;quot;, dostupný pro program. Délka kroku jednotky odpovídá frekvenci jádra (ta je různá pro jednotlivá SDS, pro řadu ST typicky 120MHz, tedy 1 krok je 8.3nsec). &lt;br /&gt;
Tento index vyžaduje aktuální FW (11/2022 nebo novější).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhraní sériové komunikace ==&lt;br /&gt;
&lt;br /&gt;
SDS-C poskytuje přístup k sériovému rozhraní COM1 a COM6. Pouze rozhraní COM1 je také současně přístupno přes převodník Eth/UART (VCP). Program v SDS-C může přistupovat jak ke COM1, tak ke COM6.&lt;br /&gt;
&lt;br /&gt;
Pomocí SDS-C lze zapisovat do sériového rozhraní, a číst data ze sériového rozhraní. Data, přicházející z venku do zařízení SDS, jsou ukládána do příslušného bufferu (RX FIFO), takže lze pomocí SDS-C programu číst i pomaleji, než je rychlost příchozích dat. Buffery jsou malé (zhruba 1kB), proto je potřeba data zpracovávat rychle a včas, ať nedojde k jejich ztrátě.&lt;br /&gt;
&lt;br /&gt;
Poznámka: čtení z UART RX bufferů je k dispozci jen od verze SDS-C č. '''04''' (včetně) a výše. &lt;br /&gt;
Poznámka: UART buffery (pro obě sériové rozhraní) jsou neustále aktivní a příjem dat z UARTu probíhá po celou dobu zapnutí zařízení.&lt;br /&gt;
&lt;br /&gt;
Rozhraní COM1:&lt;br /&gt;
&lt;br /&gt;
 sys[48]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM1 prázdný. Možné hodnoty:&lt;br /&gt;
                    == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)&lt;br /&gt;
                    == 1 : RX buffer je '''prázdný''' (nebyl přijat znak od posledního vyprázdnění bufferu)&lt;br /&gt;
 &lt;br /&gt;
 sys[49]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM1&lt;br /&gt;
                    - čtením tohoto sys[49] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici), &lt;br /&gt;
                      takže si dejte '''pozor''' protože po vyjmutí už tento znak v bufferu samozřejmě není ! &lt;br /&gt;
                      (Toto může způsobit nezkušenému programátorovi potíže). &lt;br /&gt;
                      Proto je vhodnější čtení ze sys[49] provést vždy jednou do vlastní proměnné, &lt;br /&gt;
                      a s tou pak dále dle libosti pracovat.&lt;br /&gt;
                   Možné hodnoty: &lt;br /&gt;
                    == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)&lt;br /&gt;
                    == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)&lt;br /&gt;
&lt;br /&gt;
Poznámka: UART-COM1 buffer je '''vymazán vždy tehdy''', když se připojí TCP klient k převodníku Eth/UART - pozor!&lt;br /&gt;
&lt;br /&gt;
 sys[50]  02 i R   je připojen klient (Ethernet) k převodníku Eth/UART ?&lt;br /&gt;
                    == 0 : není připojen klient&lt;br /&gt;
                    != 0 : je připojen klient (přes TELNET port)&lt;br /&gt;
 sys[51]  02 i R   rychlost [bps] rozhraní UART - COM1 (viz převodník Eth/UART)&lt;br /&gt;
 sys[52]  02 i R   počet datových bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 5,6,7,8)&lt;br /&gt;
 sys[53]  02 i R   počet stop bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 1,2)&lt;br /&gt;
 sys[54]  02 i R   nastavení paritního bitu rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)&lt;br /&gt;
&lt;br /&gt;
Poznámka: parametry sériového rozhraní UART COM1 lze nastavit v rámci převodníku Ethernet/UART (přes RFC příkazy), nebo pomocí k tomu určené SDS-C funkce. Pozor, nastavení '''nelze''' změnit přímým zápisem hodnoty do sys[50] až sys[54] (ty jsou pouze pro čtení).&lt;br /&gt;
&lt;br /&gt;
Rozhraní COM6:&lt;br /&gt;
&lt;br /&gt;
 sys[55]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM6 prázdný. Možné hodnoty:&lt;br /&gt;
                    == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)&lt;br /&gt;
                    == 1 : RX buffer je '''prázdný''' (nebyl přijat znak od posledního vyprázdnění bufferu)&lt;br /&gt;
 &lt;br /&gt;
 sys[56]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM6&lt;br /&gt;
                    - čtením tohoto sys[56] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici)&lt;br /&gt;
                   Možné hodnoty: &lt;br /&gt;
                    == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)&lt;br /&gt;
                    == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)&lt;br /&gt;
&lt;br /&gt;
 sys[57]  02 i R   rychlost [bps] rozhraní UART - COM6 &lt;br /&gt;
 sys[58]  02 i R   počet datových bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 5,6,7,8,9)&lt;br /&gt;
 sys[59]  02 i R   počet stop bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 1,2)&lt;br /&gt;
 sys[60]  02 i R   nastavení paritního bitu rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)&lt;br /&gt;
&lt;br /&gt;
Rozhraní UART - COM6 je k dispozici jen na SDS-MINI, SDS-MICRO-ST a SDS-MACRO-ST, a je přístupné jen z SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Doplňující statistiky (počty rx/tx bajtů atd.) jsou k dispozici na indexu 2800+, viz dále na této stránce (dostupnost těchto údajů je závislá na instalovaném aktuálním FW ve vašem SDS).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generátor náhodných čísel ==&lt;br /&gt;
&lt;br /&gt;
 sys[61]  06 i R   generátor náhodných čísel&lt;br /&gt;
                    - při každém přečtení sys[61] je poskytnuto náhodné číslo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výsledek převodu textu na číslo ==&lt;br /&gt;
&lt;br /&gt;
Pro převod textu (z určené pozice pole ''text'' či ''share'') na číslo se používá funkce SDS-C: ''atoi''. Aby bylo možné výsledek převodu získat, musíte si jej přečíst ze ''sys[62]''.&lt;br /&gt;
&lt;br /&gt;
 sys[62]  06 i RW  výsledek převodu provedeného funkcí '''atoi(text[index]);'''&lt;br /&gt;
&lt;br /&gt;
Pro více informací se podívejte přímo na návod k této funkci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nastavení rychlosti provádění SDS-C programu ==&lt;br /&gt;
&lt;br /&gt;
SDS-C program může ovlivnit rychlost svého vykonávání. Buď se každá instrukce provede právě s minimálním krokem co 1 msec, nebo se dá tato (často žádoucí) vlastnost snadno vypnout. Pozor, hodnota 1 msec není vždy garantována, např. při zavolání funkce která pracuje s pomalou periférií dojde k čekání, dokud se požadovaná funkce nedokončí.&lt;br /&gt;
&lt;br /&gt;
 sys[63]  04 i RW  vypnutí rychlostního omezení běhu programu, nastavte na:&lt;br /&gt;
                    == 0   : (výchozí hodnota po spuštění programu) - jeden celý příkaz se provede '''co 1 msec'''&lt;br /&gt;
                    == 128 : program je prováděn s co největší rychlostí (bez zarovnávacího 1 msec kroku) &lt;br /&gt;
                             ( pozor ale na realizaci čekacích smyček, pak lze použít jen k tomu určené SDS-C funkce nebo sys[64] )&lt;br /&gt;
&lt;br /&gt;
Poznámka: všechny SDS-C programy jsou ve výchozím stavu spouštěny se sys[63] = '''0''' (tzn. jeden celý příkaz programu je vykonán právě co 1 msec).&lt;br /&gt;
&lt;br /&gt;
Tohoto faktu (krok 1 msec) některé programy využívají k realizaci čekacích smyček, když se předpokládá jeden vykonaný příkaz za 1 msec. Není to však vhodné, protože SDS nedává garanci že se vždy bude jednat přesně o 1 msec (může docházet k náhodnému zdržení až o několik msec, v záležitosti na ostatní činnost systému). Pokud však vypnete toto rychlostní omezení, tak takové případné čekací smyčky přestanou plnit svou funkci (prakticky skončí mnohem dříve): proto ve svých programech používejte pouze k realizaci &amp;quot;čekání&amp;quot; pouze k tomu určené funkce, nebo případně sys[64] nebo některý z UpTime indexů či sys[137] atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Časování ==&lt;br /&gt;
&lt;br /&gt;
Pro přesnější časování programu, popř. pro spuštění nějaké události po přesně daném intervalu, lze s výhodou využít následující proměnnou:&lt;br /&gt;
&lt;br /&gt;
 sys[64]  01 i RW  sekundový odpočítávač &lt;br /&gt;
                    - zapište libovolné kladné číslo, a systém každou vteřinu toto číslo sníží o 1, &lt;br /&gt;
                      až do nuly, kde v sys[64] zůstane nula (dokud tam zase něco nezapíšete)&lt;br /&gt;
                    - nejvyšší možná použitelná hodnota: (31-bitů) 2147483647 secs (včetně)&lt;br /&gt;
&lt;br /&gt;
Samozřejmě lze využít i jiné způsoby, ale tento je k tomu explicitně určen, vyhovuje-li hrubý krok 1 sekunda. Pro jemnější časování jsou pak vhodnější indexy s UpTime hodnotou, nebo sys[137] pro nejvíce jemné čekání - tyto indexy ale nemají funkci odpočítávání (jsou jen pro čtení), takže hlídání obsahu si už musíte řešit sami ve svém programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OSI7 funkce ==&lt;br /&gt;
&lt;br /&gt;
OSI7 funkce jsou určeny pro komunikaci mezi SDS a vnějším světem připojeným přes Ethernet (např. se servery v Internetu).&lt;br /&gt;
&lt;br /&gt;
Všechny funkce OSI7 poskytují průběžný stav své činnosti:&lt;br /&gt;
 sys[65]  01 i R   status code - hlášení průběhu, úspěšnosti, nebo chyby OSI7 funkcí (DNS, HTTP-GET, email, ...)&lt;br /&gt;
                    - význam hodnot viz [[OSI7_status_code|popis zde]]&lt;br /&gt;
&lt;br /&gt;
Poznámka: vždy je doporučeno, po zavolání kterékoliv OSI7 funkce, provést v programu čekání na skončení této funkce. Čekání má kontrolovat právě hodnotu v sys[65], a dokud se tato proměnná nenaplní výsledkem, nevolejte další OSI7 funkci.&lt;br /&gt;
&lt;br /&gt;
DNS resolv: sestavením IP[0].IP[1].IP[2].IP[3] získáte IP adresu (napr. 10.0.0.8) z DNS po úspěšném návratu z funkce DNS resolveru. Tato získaná IP adresa pak může sloužit pro různé účely, např. pro kontrolu DNS serveru jestli žije atd.&lt;br /&gt;
 sys[66]  01 i R   bajt IP[0] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[67]  01 i R   bajt IP[1] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[68]  01 i R   bajt IP[2] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[69]  01 i R   bajt IP[3] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
&lt;br /&gt;
Pro funkci DNS resolveru je potřeba provést konfiguraci (přes webové rozhraní).&lt;br /&gt;
 sys[70]  01 i R   bajt DNS_R_IP[0] - adresa samotného DNS resolveru (DNS server)&lt;br /&gt;
 sys[71]  01 i R   bajt DNS_R_IP[1] - adresa samotného DNS resolveru&lt;br /&gt;
 sys[72]  01 i R   bajt DNS_R_IP[2] - adresa samotného DNS resolveru&lt;br /&gt;
 sys[73]  01 i R   bajt DNS_R_IP[3] - adresa samotného DNS resolveru&lt;br /&gt;
&lt;br /&gt;
 sys[74]  01 s R   text, reserved (v této verzi nepoužito)&lt;br /&gt;
&lt;br /&gt;
Rozšířená funkcionalita pro DNS resolver (pouze ve FW od 11/2025):&lt;br /&gt;
&lt;br /&gt;
 sys[303]  09 i R   DNS RESOLV - (read:) actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done or finished yet)&lt;br /&gt;
 sys[303]  09 i W   DNS RESOLV - write value 0xD65 (3429dec) to clear the DNS cache&lt;br /&gt;
 sys[304]  09 i R   DNS RESOLV - (read:) timestamp (UTC) of the latest DNS server response (packet) as requested by dns_resolv() function (if 0 then no response received, or cache has expired)&lt;br /&gt;
 sys[305]  09 i R   DNS RESOLV - (read:) get the last set hard TTL limit (0 = invalid (will use 1209600 as default), otherwise 1..MAX = time in seconds)&lt;br /&gt;
 sys[305]  09 i W   DNS RESOLV - set the hard TTL value limit (in seconds)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP GET:&lt;br /&gt;
&lt;br /&gt;
 sys[75]  01 i R   návratový kód webového serveru pro HTTP GET (odpověď z webového serveru)&lt;br /&gt;
                    - nastaveno po dokončení práce funkce '''http_get()'''&lt;br /&gt;
                    - např. číslo '''200''' pro 'OK', '''404''' pro 'not found', a tak dále.&lt;br /&gt;
 &lt;br /&gt;
 sys[76]  03 i RW  číslo portu který chcete aby HTTP klient použil (výchozí hodnota po startu je '''80''')&lt;br /&gt;
                    - '''pozn.''' hodnota tohoto sys[76] se přebere v okamžiku zavolání '''http_get''',&lt;br /&gt;
                      pozdější zápisy mají vliv až zase v okamžiku dalšího zavolání '''http_get'''.&lt;br /&gt;
 &lt;br /&gt;
 sys[77]  04 i RW  ukládat data přijatá z HTTP serveru po obdržení odpovědi na HTTP GET požadavek&lt;br /&gt;
                   do pole ram[]. Tato funkce je výhodná pro okamžité řízení SDS-C programu. &lt;br /&gt;
                   Nastavte na:&lt;br /&gt;
 &lt;br /&gt;
                    == 0 : jakékoliv přijaté data jsou '''zahozena''', &lt;br /&gt;
                           neuloží se (nedojde ke změně obsahu ram[] nebo text[])&lt;br /&gt;
 &lt;br /&gt;
                    == 1 : prvních sys[78] bajtů odpovědi je vloženo do pole ram[] v rozsahu ram[1] až ram[sys[78]]&lt;br /&gt;
                           a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).&lt;br /&gt;
                           (tzn. původní obsah této oblasti pole ram[] je přepsán)&lt;br /&gt;
                           (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], &lt;br /&gt;
                            bude zápis přerušen a přijatý 0x00 nebude uložen)&lt;br /&gt;
 &lt;br /&gt;
                    == 2 : prvních sys[78] bajtů odpovědi je vloženo do pole text[] v rozsahu text[0] až text[sys[78]]&lt;br /&gt;
                           a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).&lt;br /&gt;
                           (tzn. původní obsah této oblasti pole text[] a položka ram[0] je přepsán)&lt;br /&gt;
                           (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], &lt;br /&gt;
                            bude zápis přerušen a přijatý 0x00 nebude uložen)&lt;br /&gt;
 &lt;br /&gt;
                   Hodnota do ram[0] je vždy zapsaná, ať je sys[77] jakékoliv. Počítejte s tím ve svém programu !&lt;br /&gt;
 &lt;br /&gt;
 sys[78]  04 i RW  počet bajtů, které CHCETE uložit do ram[] nebo text[] po přijetí HTTP GET odpovědi&lt;br /&gt;
                    - výchozí hodnota je '''32''' (tzn. uloží se 32 znaků + samostatně délka do ram[0])&lt;br /&gt;
                    - maximální hodnota je omezena velikostí pole ram[] nebo text[]&lt;br /&gt;
                    - pozor! pokud zapíšete '''0''', budou všechna data zahozena, &lt;br /&gt;
                      ale i v takovém případě dojde k přepisu ram[0] (viz výše)&lt;br /&gt;
&lt;br /&gt;
 sys[79] až sys[80]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Pozor, v případě nenulového sys[77] HTTP klient čeká tak dlouho, dokud nedostane všech sys[78] bajtů odpovědi z protistrany. To je častou příčinou &amp;quot;problémů&amp;quot; kdy protistrana neodpoví dostatečně dlouhou odpovědí, a klient má stále otevřené spojení a stále čeká a čeká... až dojde na timeout. Což je pak potřeba důsledně a správně ošetřit ve vašem SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Pro funkci SMTP je potřeba provést konfiguraci (přes webové rozhraní):&lt;br /&gt;
 sys[81]  01 i R   bajt SMTP_S_IP[0] - adresa SMTP serveru (je použita pro funkci '''smtp_send()''')&lt;br /&gt;
 sys[82]  01 i R   bajt SMTP_S_IP[1] - adresa SMTP serveru&lt;br /&gt;
 sys[83]  01 i R   bajt SMTP_S_IP[2] - adresa SMTP serveru&lt;br /&gt;
 sys[84]  01 i R   bajt SMTP_S_IP[3] - adresa SMTP serveru&lt;br /&gt;
&lt;br /&gt;
 sys[85] až sys[88]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Informace z ('''interní''') ICMP PING funkcionality &amp;quot;IP Watchdog&amp;quot; (konfigurace a ovládání přes webové rozhraní SDS) (nemá souvislost s SDS-C funkcí &amp;quot;ping()&amp;quot; ) :&lt;br /&gt;
&lt;br /&gt;
 sys[89]  06 i R   IP-Watchdog: stav&lt;br /&gt;
                    == 0 : není v provozu (neaktivováno ve webovém rozhraní)&lt;br /&gt;
                    != 0 : v provozu (uživatel aktivoval IP-Watchdog ve webovém rozhraní)&lt;br /&gt;
 &lt;br /&gt;
 sys[90]  06 i R   IP-Watchdog: poslední známé RTT&lt;br /&gt;
                    == 0 .. 65533 : hodnota RTT v msec&lt;br /&gt;
                    &amp;gt;= 65534      : hodnota není k dispozici (nebyl obdržen PING response)&lt;br /&gt;
 &lt;br /&gt;
 sys[91]  06 i R   IP-Watchdog: stav výstupu&lt;br /&gt;
                    == 0 : výstup není aktivován&lt;br /&gt;
                    != 0 : výstup je aktivován (nebyl obdržen PING response podle zadaných požadavků)&lt;br /&gt;
&lt;br /&gt;
Informace z (SDC-C) ICMP PING funkce - '''ping()''' :&lt;br /&gt;
&lt;br /&gt;
 sys[92]  04 i R   stav ICMP PING RESPONSE v okamžiku čtení tohoto sys[92] &lt;br /&gt;
                    == 0 : klid (není odeslán paket, nečekám na odpověď), &lt;br /&gt;
                           popř. byla zadána neplatná IP adresa do funkce '''ping()''' a proto se nic neodešle&lt;br /&gt;
                    == 1 : funkce '''ping()''' byla právě zavolána, &lt;br /&gt;
                           takže se teprve chystá provést svou činnost, zatím se neví výsledek odesílání&lt;br /&gt;
                    == 2 : čeká se na odpověď od ARP &lt;br /&gt;
                           (POZOR! Znamená to že místo ICMP PING REQUEST paketu byl odeslán ARP paket, &lt;br /&gt;
                           protože v ARP tabulce nebyl příslušný záznam)&lt;br /&gt;
                    == 4 : poslán ECHO REQUEST, čekám na ECHO REPLY &lt;br /&gt;
                          (požadovaný stav, funkce '''ping()''' funguje ok)&lt;br /&gt;
                    == 8 : právě obdržel ECHO REPLY &lt;br /&gt;
                          (byla přijata odpověď od vzdáleného zařízení)&lt;br /&gt;
 &lt;br /&gt;
 sys[93]  04 i R   PING SEQ number &lt;br /&gt;
                    - hodnota je nastavena na '''-1''' dokud není přijata odpověď ICMP PING RESPONSE &lt;br /&gt;
                      na ICMP PING REQUEST odeslaný funkcí '''ping()'''&lt;br /&gt;
 &lt;br /&gt;
 sys[94]  04 i R   Round Trip Time, v milisekundách&lt;br /&gt;
                    - dokud není přijata platná ICMP PING RESPONSE tak je zde hodnota '''0xFFFF'''&lt;br /&gt;
                    - čas je zvyšován po pěti milisekundách (údaj v sys[94] je přímo v msec, např. hodnota 55 znamená 55 msec)&lt;br /&gt;
&lt;br /&gt;
Pozn.: ICMP Quench (32bit) je sestaven z &amp;quot;identifier&amp;quot; (16bit) a z &amp;quot;sequence number&amp;quot;. Pomocí sys[93] můžete nastavit '''číslo sekvence''' na libovolnou hodnotu, přičemž hodnota &amp;quot;identifier&amp;quot; je napevno nastavena na &amp;quot;'''0x0280'''&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkce '''send_udp()''':&lt;br /&gt;
&lt;br /&gt;
 sys[95]  06 i R   výsledek posledního volání '''send_udp()'''&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : nic neprovedeno&lt;br /&gt;
                           Hodnota '''0''' je nastavena po startu SDS-C programu&lt;br /&gt;
                    == 1 : právě bylo zahájeno odesílání paketu (provádí se)&lt;br /&gt;
                           nastaveno okamžitě po jakémkoliv zavolání '''send_udp()'''.&lt;br /&gt;
                    == 2 : byl odeslán UDP paket, úspěšně&lt;br /&gt;
                           Hodnota '''2''' je nastavena až v okamžiku úspěšného skutečného odeslání UDP paketu&lt;br /&gt;
                    == 3 : nebyl odeslán UDP paket, protože byl místo toho odeslán ARP dotaz &lt;br /&gt;
                           Hodnota '''3''' je nastavena, pokud není známá MAC pro zadanou IP &lt;br /&gt;
                           a byl tedy místo požadovaného UDP paketu odeslán ARP dotaz&lt;br /&gt;
                    == 4 : zavolali jste funkci '''send_udp()''' dříve, &lt;br /&gt;
                           než byla dokočena činnost předchozího požadavku &lt;br /&gt;
                           (sledujte hodnotu sys[95] a správně ji vyhodnocujte, a nestane se vám to)&lt;br /&gt;
                    == 5 : byly zadány neplatné parametry (neplatná IP, nebo port, nebo index či délka dat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkce '''snmp_send_trap()''':&lt;br /&gt;
&lt;br /&gt;
 sys[96]  06 i R   výsledek posledního volání '''snmp_send_trap()'''&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : odesílání neprobíhá&lt;br /&gt;
                    == 1 : probíhá odesílání, výsledek ještě není znám&lt;br /&gt;
                    == 2 : odeslání se povedlo &lt;br /&gt;
                    == 3 : odeslání se nepovedlo (neplatné parametry při zavolání funkce)&lt;br /&gt;
                    == 4 : odeslání se nepovedlo (není známý ARP záznam pro udanou host IP)&lt;br /&gt;
                    == 5 : odeslání se nepovedlo (právě pracuje (odesílá své data) některá jiná funkce, např. http_get)&lt;br /&gt;
&lt;br /&gt;
 sys[97]           RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zápis textu do pole, Porovnání textů ==&lt;br /&gt;
&lt;br /&gt;
Položka ''sys[98]'' je využita více SDS-C funkcemi, přičemž všechny tyto funkce pracují s polem ''text[]''.&lt;br /&gt;
&lt;br /&gt;
 sys[98]     i R   společné využití viz (1) a (2)&lt;br /&gt;
 &lt;br /&gt;
          06 i R   (1) číslo indexu do pole ''text[]'' kam byla zapsána terminační 0x00,&lt;br /&gt;
                       tj. ukazatel kde byl aktuální konec zápisu do pole ''text[]'', &lt;br /&gt;
                       což je hodnota užitečná pro navázání textu (zápis více textů přesně za sebou), popř. určení délky posledního zápisu:&lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''sprintf()'''&lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''itoh()''' &lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''itoa()''' &lt;br /&gt;
 &lt;br /&gt;
          08 i R   (2) výsledek porovnání textů&lt;br /&gt;
                        - hodnota výsledku zavolání funkce '''textcmp()'''&lt;br /&gt;
                            X &amp;lt; 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v poli ''text[]'' než v porovnávaném řetězci&lt;br /&gt;
                            X == 0 : oba texty jsou identické&lt;br /&gt;
                            X &amp;gt; 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v porovnávaném řetězci než v poli ''text[]''&lt;br /&gt;
&lt;br /&gt;
Význam &amp;quot;nižší vlastní hodnoty&amp;quot;: znak 'a' má nižší hodnotu než 'b', a to o 1; nebo např. '1' má nižší hodnotu než '4' a to o 3.&lt;br /&gt;
&lt;br /&gt;
Doporučeno je si to vše vyzkoušet (zavolat si každou uvedenout funkci a srovnat hodnotu v sys[98] s obsahem pole ''text[]'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uživatelské pozice v pevné paměti == &lt;br /&gt;
&lt;br /&gt;
 sys[99]  05 i RW  předávací proměnná pro čtení a zápis z/do paměti [[SDS-C: DataFlash|dataflash]]&lt;br /&gt;
&lt;br /&gt;
 sys[100] až sys[115]  &lt;br /&gt;
          01 i RW  data uložená do permanentní paměti = co se sem napíše zůstane i po vypnutí zařízení,&lt;br /&gt;
                   můžete si sem uložit co chcete (tj. 16x signed long délky 32bit),&lt;br /&gt;
                    - po speciálním systémovém resetu (RSTD) je vše nastaveno na 0xFFFFFFFF &lt;br /&gt;
                    - pozor! minimalizujte množství zápisů, životnost této paměti není neomezená !&lt;br /&gt;
                    - zápis do těchto sys[] přímo ihned fyzicky zapíše do pevné paměti &lt;br /&gt;
                    - čtení těchto sys[] způsobí přímé fyzické čtení pevné paměti &lt;br /&gt;
&lt;br /&gt;
Paměť EEPROM a paměť DATAFLASH (podle verze HW který máte) je permanentní (NVM), tzn. její obsah zůstane i po vypnutí zařízení nezměněn (na rozdíl od &amp;lt;u&amp;gt;ne&amp;lt;/u&amp;gt;zálohované paměti RAM, do které se přistupuje pomocí pole ''ram[]'').&lt;br /&gt;
&lt;br /&gt;
''' Reserved '''&lt;br /&gt;
&lt;br /&gt;
 sys[116] až sys[136]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné nastavitelné uživatelem z webového rozhraní ==&lt;br /&gt;
&lt;br /&gt;
Pomocí &amp;quot;uživatelských proměnných&amp;quot; (někdy taky &amp;quot;sdílených proměnných&amp;quot;) lze snadno ovlivnit chod vašeho SDS-C programu, ale jen tak, jak si do něj sami naprogramujete - uživatelské proměnné neovlivňují samotný program, ale program je může číst a následně zpracovat.&lt;br /&gt;
&lt;br /&gt;
 sys[140] až sys[149] &lt;br /&gt;
          01 i RW  &amp;quot;uživatelské proměnné&amp;quot;, které můžete měnit &amp;quot;z webu&amp;quot; (správně formulovaným HTTP GET dotazem)&lt;br /&gt;
                   (vždy 32-bit signed integer)&lt;br /&gt;
&lt;br /&gt;
 sys[150] 01 i RW  blokování přístupu k možnosti změny obsahu &amp;quot;uživatelských proměnných&amp;quot; z webu&lt;br /&gt;
                   Nastavení:&lt;br /&gt;
                    == 0 : stránka &amp;quot;control&amp;quot; je přístupná bez hesla, &lt;br /&gt;
                    != 0 : pro přístup je nutno se přihlásit (uživatel je vyzván k příhlášení)&lt;br /&gt;
&lt;br /&gt;
Uživatel, který má přístup k webové stránce, může zapsat nový obsah do těchto osmi proměnných (změnit jejich hodnotu), kdykoliv chce. Dvě doplňkové proměnné nejsou na výchozí webové stránce dostupné, ale jinak s nimi lze bez jiných omezení pracovat (SDS-C, M2M).&lt;br /&gt;
&lt;br /&gt;
Zápisem do ''sys[150]'' můžete nastavit bezpečnost přístupu k této webové stránce.&lt;br /&gt;
&lt;br /&gt;
Adresa webové stránky je (IP je zde pro příklad): http://192.168.1.250/control (více informací [[SDSC: sharing|zde]]).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě lze využít i přímého URL pro zápis do proměnných, což je výhodné např. při vzájemné komunikaci dvou zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné vstupů a výstupů pro všechny výrobky SDS ==&lt;br /&gt;
&lt;br /&gt;
'''POZOR'''&lt;br /&gt;
&lt;br /&gt;
'''Podle HW verze výrobku, jsou dostupné jen určité vstupy a výstupy.''' Zde je uveden plný seznam pro maximální konfiguraci, ale ne všechny HW verze mají všechno. Např. SDS-MICRO-LM má pouze dva reléové výstupy, kdežto SDS-MACRO-LM má čtyři.&lt;br /&gt;
&lt;br /&gt;
Vždy máme vyhrazeno 32 indexů pro vstupy a výstupy. Tyto indexy jsou tedy naplánovány pro (budoucí) maximální konfiguraci, ale většina SDS k nim nemá odpovídající HW (např. nemá všech 32 relé). Zápis a čtení do/z indexů, které nemají odpovídající fyzický protějšek, je zakázán (bude SDS ignorován, a hodnota nebude uložena pro pozdější čtení).&lt;br /&gt;
&lt;br /&gt;
'''Pokračování výpisu:'''&lt;br /&gt;
&lt;br /&gt;
 sys[151] až sys[182]  &lt;br /&gt;
          01 i R   stav binárního vstupu OPTO1 až OPTO32 (optočlen)&lt;br /&gt;
                    - hodnota odpovídá fyzickému stavu vstupů (zda-li je nebo není přítomen signál na LED optočlenu)&lt;br /&gt;
                    - pozor, hodnota '''0''' skutečně znamená přítomnost signálu&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : (nulová hodnota)             signál přítomen (napětí na LED = svítící LED v optočlenu)&lt;br /&gt;
                    != 0 : (libovolná nenulová hodnota) bez signálu (LED v optočlenu nesvítí)&lt;br /&gt;
&lt;br /&gt;
Pozor, pokud u vašeho SDS (např. historické kousky SDS-MICRO-LIGHT) má číslované OPTO vstupy od nuly (né od jedničky), musíte si aktualizovate firmware v tomto zařízení, a případně upravit potisk (popis) na desce nebo krabičce.&lt;br /&gt;
&lt;br /&gt;
'''Důležité info:'''&lt;br /&gt;
&lt;br /&gt;
Pokud je (uvnitŘ SDS) na LED vstupního optočlenu signál, hodnota '''sys[]''' pro dané OPTOx dává '''0''' (nulu), naopak při nepřítomnosti signálu je přítomna '''nenulová''' hodnota (vždy testujte na nulovou a nenulovou hodnotu, jediné co je zaručeno je totiž ta nula, kdežto nenulová hodnotu může být jakákoliv - ve skutečnosti každý opto vstup má přidělenou konstantu, podle které lze tento vstup identifikovat). &lt;br /&gt;
&lt;br /&gt;
Pozor - &amp;quot;logika&amp;quot; optických vstupů je tedy na první pohled &amp;quot;obrácená&amp;quot; (avšak dává to přesný smysl). Jen je to potřeba vědět při psaní SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stav SDS-C programu ==&lt;br /&gt;
&lt;br /&gt;
Informace o verzi firmware modulu SDS (vhodné např. pro kontrolu, že uživatel používá nejnovější firmware, tak jak má).&lt;br /&gt;
&lt;br /&gt;
 sys[183] 08 i RW  verze nainstalovaného firmware v SDS modulu&lt;br /&gt;
                   (hex: 0x00DDMMYY, nebo jen 0x00000000 u starších FW)&lt;br /&gt;
&lt;br /&gt;
Příklad: FW v SDS je (pro příklad) ze dne 24.12.2018, takže v ''sys[183]'' bude zakódováno jako 0x00180C12, tedy hodnoty 24dec 12dec 18dec zapsány jako 0x18 0x0C 0x12, což je 0x18C0C12 což je 1575954dec.&lt;br /&gt;
&lt;br /&gt;
Informace o způsobu, jakým byl aktuální běh SDS-C programu spuštěn:&lt;br /&gt;
&lt;br /&gt;
 sys[184] 08 i RW  způsob spuštění SDS-C programu&lt;br /&gt;
                   == 0 : bez informace&lt;br /&gt;
                   == 1 : standardní spuštění SDS-C programu po běžném startu zařízení SDS&lt;br /&gt;
                   == 2 : program SDS-C byl (znovu) spuštěn na základě restartu od watchdogu (byl timeout)&lt;br /&gt;
                   == 4 : program SDS-C byl čerstvě nahrán z EXE aplikace&lt;br /&gt;
&lt;br /&gt;
Stav SDS-C watchdogu:&lt;br /&gt;
&lt;br /&gt;
 sys[185] 08 i R   hodnota odpočítávání SDS-C watchdogu v msec&lt;br /&gt;
                   == -1 : wdg není aktivní&lt;br /&gt;
                   ==  0 : odpočet vypršel, dojde k resetu SDS-C programu&lt;br /&gt;
                   1..2147482000 : aktuální hodnota odpočtu (snižuje se o 1 každou milisekundu)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pulse-Width Modulation výstupy ==&lt;br /&gt;
&lt;br /&gt;
Některá SDS mají pouze jeden PWM výstup (PWM1), některá mají čtyři výstupy (rozdělené po dvou do dvou skupin: PWM1 a PWM2, pak PWM3 a PWM4).&lt;br /&gt;
&lt;br /&gt;
''Příklad pro PWM1:'' Konfigurace PWM1 výstupu nejprve vyžaduje zápis do sys[191], aby se nejprve nastavila provozní základní frekvence generátoru.&lt;br /&gt;
Následně lze PWM1 výstup řídit zápisem do sys[192], kdy se podle zapsané hodnoty nastaví střída PWM výstupu (poměr log0 a log1).&lt;br /&gt;
Alternativně lze zápis do sys[192] nahradit zápisem do sys[193], toto lze kombinovat.&lt;br /&gt;
Zápis do sys[191] je potřeba jen jednou (tedy jen tehdy, když je potřeba PWM1 výstup zapnout nebo vypnout, a kdy je potřeba změnit frekvenci generátoru). &lt;br /&gt;
Zápisy do sys[192] a nebo sys[193] se pak mohou dít samostatně (tj. není potřeba pokaždé opakovat zápis do sys[191]).&lt;br /&gt;
&lt;br /&gt;
Různé typy SDS mají jiný způsob obsluhy PWM generátoru - pozor !&lt;br /&gt;
&lt;br /&gt;
Pozor, pro tyto typy SDS:&lt;br /&gt;
&lt;br /&gt;
 SDS '''UPS''', SDS '''IO6 (LM)''', SDS '''IO6-ST''' a SDS '''TTCPRO''' &lt;br /&gt;
 &lt;br /&gt;
 Tyto výrobky nemají PWM výstup (zápis do příslušných sys[] zde nemá význam).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podle typu SDS:&lt;br /&gt;
&lt;br /&gt;
 SDS '''MICRO (LM)''' a SDS '''MACRO (LM)''' - pouze jeden PWM výstup (PWM1)&lt;br /&gt;
 &lt;br /&gt;
 sys[191] 01 i RW  &amp;quot;Fm&amp;quot; = frekvence PWM1 výstupu [Hz]&lt;br /&gt;
                    - do SDS-C č. '''03''': specifický omezený rozsah (souvisí se starým firmware)(bylo v rozsahu: 2 až 10000000).&lt;br /&gt;
                    - pozn. od SDS-C č. '''04''': lze nastavit hodnotu od ''24'' (24Hz) do ''49999998'' (49.999998Mhz)&lt;br /&gt;
 &lt;br /&gt;
 sys[192] 01 i RW  poměr nastavení &amp;quot;pulse-width&amp;quot; PWM1 výstupu (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - do SDS-C č. '''03''': specifický omezený rozsah (souvisí se starým firmware)&lt;br /&gt;
                    - od SDS-C č. '''04''': lze nastavit hodnotu od 0 do &amp;quot;Fm&amp;quot; (např. &amp;quot;Fm / 2&amp;quot; představuje PWM signál 1:1).&lt;br /&gt;
 &lt;br /&gt;
 sys[193] 06 i RW  ruční přímý zápis do registru PWM1 generátoru &lt;br /&gt;
                    - tzn. není předzpracováno jako sys[192], tzn. jedná se o alternativu k sys[192]&lt;br /&gt;
                    - tato hodnota není aktualizována vůči sys[192], ani není archivována&lt;br /&gt;
                    - rozsah: ''0'' až &amp;quot;Fm&amp;quot; (tj. ''0'' až sys[191]).&lt;br /&gt;
&lt;br /&gt;
Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupu osciloskopem.&lt;br /&gt;
&lt;br /&gt;
Hodnoty Fm větší než 1MHz prakticky nemají smysl, snažte se navrhnout svůj systém tak, aby dokázal pracovat ideálně nejvýše ve stovkách kHz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Další typy SDS - všimněte si rozdílu ''významu'' jednotlivých indexů vůči vůči tabulce výše.&lt;br /&gt;
&lt;br /&gt;
 SDS '''MINI''', SDS '''MICRO-ST''' - pouze jeden PWM výstup (PWM1)&lt;br /&gt;
 SDS '''MACRO-ST''' - čtyři PWM výstupy (zde: první skupina PWM1 a PWM2, druhá skupina je popsána dále)&lt;br /&gt;
 &lt;br /&gt;
 sys[191] 07 i RW  &amp;quot;Fm&amp;quot; = (společná) frekvence pro '''PWM1 a PWM2''' výstupy [Hz]&lt;br /&gt;
                    - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM výstupy (lze dále řídit podle sys[192] až sys[195])&lt;br /&gt;
                    - zápis hodnoty 0 vypne PWM1 a PWM2 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu&lt;br /&gt;
 &lt;br /&gt;
 sys[192] 07 i RW  duty-cycle '''PWM1''' výstupu v procentech (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[192] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[192] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[193] 07 i  W  duty-cycle '''PWM1''' výstupu v mikrosekundách (druhý možný způsob nastavování PWM generátoru)&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[193] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[193] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
 &lt;br /&gt;
 sys[194] 07 i RW  duty-cycle '''PWM2''' v procentech (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[194] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[194] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[195] 07 i  W  duty-cycle '''PWM2''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[195] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[195] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
&lt;br /&gt;
 SDS '''MACRO-ST''' - čtyři PWM výstupy (zde druhá skupina: PWM3 a PWM4)&lt;br /&gt;
 &lt;br /&gt;
 sys[186] 09 i RW  &amp;quot;Fm&amp;quot; = (společná) frekvence pro '''PWM3 a PWM4''' výstupy [Hz]&lt;br /&gt;
                    - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM výstupy (lze dále řídit podle sys[187] až sys[190])&lt;br /&gt;
                    - zápis hodnoty 0 vypne PWM3 a PWM4 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu&lt;br /&gt;
 &lt;br /&gt;
 sys[187] 09 i RW  duty-cycle '''PWM3''' v procentech&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[187] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[187] ignorovány (nejsou zapamatovány)&lt;br /&gt;
&lt;br /&gt;
 sys[188] 09 i  W  duty-cycle '''PWM3''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[188] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[188] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
 &lt;br /&gt;
 sys[189] 09 i RW  duty-cycle '''PWM4''' v procentech&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[189] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[189] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[190] 09 i  W  duty-cycle '''PWM4''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[190] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[190] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
&lt;br /&gt;
Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupů osciloskopem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání výstupů - Relé ==&lt;br /&gt;
&lt;br /&gt;
Zápisem do následujících systémových proměnných přímo ovládáte fyzické relé (výstupy) zařízení SDS. Pozor, protože hodnoty zapsané z SDS-C programu se záměrně neukládají do pevné paměti (tzn. nejsou načteny po resetu zařízení SDS). Je to z důvodu bezpečnosti (aby se např. neseplo relé po dlouhém výpadku napájení). Váš program si s tím musí umět poradit - vždy po zapnutí SDS musí vyhodnotit aktuální situaci a až podle toho zapínat relé.&lt;br /&gt;
&lt;br /&gt;
 sys[196] až sys[228]   &lt;br /&gt;
          01 i RW  informace, kdo ovládá '''RE1''' až '''RE32'''&lt;br /&gt;
                    - lze nastavit i z webového rozhraní&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : ovládáno z webového rozhraní (ruční řízení - trvale zapnuto, trvale vypnuto)&lt;br /&gt;
                    == 2 : ovládáno z SDS-C programu (zápis do sys[], je ignorováno nastavení na webu)&lt;br /&gt;
                    == 4 : ovládáno z IP Watchdogu (interní IP watchdog, nastavuje se přes web)&lt;br /&gt;
&lt;br /&gt;
 sys[229] až sys[230]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[231] až sys[262]   &lt;br /&gt;
          01 i RW  stav výstupu RE1 až RE32 (= zápis do tohoto sys[] přímo ovládá relé)&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : relé není aktivní &lt;br /&gt;
                           (cívka relé bez proudu, MICRO-LM: mosfet není sepnut)&lt;br /&gt;
                    != 0 : relé je aktivní &lt;br /&gt;
                           (cívka relé pod proudem, MICRO-LM: mosfet je sepnut = výstup REx je spojen na GND)&lt;br /&gt;
&lt;br /&gt;
 sys[263] až sys[265]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[266] až sys[298]   &lt;br /&gt;
          01 s R   uživatelský textový název pro '''RE1''' až '''RE32''' &lt;br /&gt;
                    - nastaveno ve webovém rozhraní&lt;br /&gt;
&lt;br /&gt;
 sys[264] až sys[300]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání PDx ==&lt;br /&gt;
&lt;br /&gt;
Jednotlivé moduly SDS mají k dispozici dodatečné vstupy a výstupy, označené jako PDx respektive TOPB. Přesný seznam viz návod ke konkrétním modulům.&lt;br /&gt;
&lt;br /&gt;
Stav vstupu (je-li PDx jako vstup) nebo výstupu (je-li PDx jako výstup):&lt;br /&gt;
&lt;br /&gt;
 sys[301] 01 i RW  SDS '''MICRO LM LIGHT''': stav i/o pinu D0 (0 = log0 ; nenulová hodnota v sys = log1 přítomna na pinu)&lt;br /&gt;
                   SDS '''MICRO LM DIN''' a SDS '''MACRO LM''': stav výstupu D0 - MOSFET spínač na GND. Při jakékoliv nenulové hodnotě v sys[301] je MOSFET sepnutý (=D0 na GND), jinak je D0 otevřený (HiZ)&lt;br /&gt;
                   SDS '''TTCPRO''': stav všech osmi pinů v portu PDx (nastavením/čtením sys[301] se přistupuje k jednotlivých osmi bitům v bajtu, kde: bit0=PD0 až bit7=PD7)&lt;br /&gt;
                   SDS '''MINI''': bit0 = stav i/o pinu TOPB, bit1 = stav padu PD1, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''UPS''': nepoužito&lt;br /&gt;
                   SDS '''IO6''': nepoužito&lt;br /&gt;
                   SDS '''MICRO-ST''': bit0 = stav PD0 MOSFET spínače (spíná na GND), bit1 = stav i/o pinu TOPB, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''IO6-ST''': nepoužito&lt;br /&gt;
                   SDS '''MACRO-ST''': bit0 = stav PD0, bit1 = stav PD1, bit2 = stav i/o pinu TOPB, bit3 = TL-1, bit4 = stav TL-2, ostatní bity (5..7) nepoužity&lt;br /&gt;
&lt;br /&gt;
Řízení směru pro jednotlivé PDx resp. TOPB:&lt;br /&gt;
&lt;br /&gt;
 sys[302] 06 i RW  SDS '''MICRO LM LIGHT''': směr i/o pinu D0 (zápisem bit0 do 1 se nastaví pin D0 jako výstup) (zápisem log1 se nastaví jako vstup)&lt;br /&gt;
                   SDS '''MICRO LM DIN''' a '''SDS MACRO LM''': pozor, D0 je vždy výstup (nastavení je napevno, nelze změnit)&lt;br /&gt;
                   SDS '''TTCPRO''': směr jednotlivých pinů v portu PDx (nastavením jednotlivých osmi bitů, bit0=PD0 až bit7=PD7, nastav log1 pro výstup)&lt;br /&gt;
                   SDS '''MINI''': bit0 = směr i/o pinu TOPB, bit1 = směr i/o padu PD1, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''UPS''': nepoužito&lt;br /&gt;
                   SDS '''IO6''': nepoužito&lt;br /&gt;
                   SDS '''MICRO-ST''': bit0 = vždy v log1 (PD0 jako výstup), bit1 = směr i/o pinu TOPB, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''MACRO-ST''': bit0 = vždy v log1 (výstup), bit1 = vždy v log1 (výstup), bit2 = směr i/o pinu TOPB, bit3 = vždy v log0 (vstup), bit4 = vždy v log0 (vstup), ostatní bity (5..7) nepoužity&lt;br /&gt;
&lt;br /&gt;
TOPB: vždy typicky CMOS 3V3 pin, s možností funkce jako vstup nebo výstup (dle sys[302]), a je přímo připojený na pin SoC, pozor tedy na jeho další HW připojení.&lt;br /&gt;
&lt;br /&gt;
TTCPRO: Mapování je vždy od nejnižšího (LSB - bit0) bitu (PD0 = bit0, PD1 = bit1, atd. PD7 = bit7). Pro TTCPRO jsou PDx jako CMOS 3V3 piny s volbou vstupu nebo výstupu pro každý jednotlivý pin.&lt;br /&gt;
&lt;br /&gt;
MICRO-ST: výstup PD0 je zapojen formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).&lt;br /&gt;
&lt;br /&gt;
MACRO-ST: výstupy PD0 a PD1 jsou zapojeny formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).&lt;br /&gt;
&lt;br /&gt;
Nezapomeňte vždy ve svém programu správně nastavit hodnoty do sys[302] (toto je častá chyba když se to zapomene).&lt;br /&gt;
&lt;br /&gt;
 sys[306] až sys[309]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
== Tlačítka na desce display pro SDS-MACRO-ST ==&lt;br /&gt;
&lt;br /&gt;
Čtení stavu tlačítek na desce display (SDS-MST-DISP-rev1) se provádí čtením sys[301] a vyhodnocením bitu 3 (=8dec, první tlačítko) a/nebo bitu 4 (=16dec, druhé tlačítko).&lt;br /&gt;
&lt;br /&gt;
Ošetření na případné zákmity při stisku a uvolnění tlačítek, je potřeba provést ve vašem SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vstupy - teploměry na externí sběrnici 1-Wire&amp;amp;reg; ==&lt;br /&gt;
&lt;br /&gt;
Čidla teploty (1-W chipy pro měření teploty připojené na sběrnici; tak také údaj o teplotě z připojených modulů SDS-1W-T-RH) jsou řízena (čtena) plně automaticky zařízením SDS. Program v SDS-C má přímo přístup k výsledným hodnotám teplot.&lt;br /&gt;
&lt;br /&gt;
 sys[310] až sys[341]   &lt;br /&gt;
          01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici&lt;br /&gt;
&lt;br /&gt;
Teploměry mají hodnotu uloženou v násobku '''100''' (takže např. 24.5°C je uloženo jako číslo 2450, nebo -120.65°C je -12065). Pokud není k dispozici hodnota z čidla, '''není v záznamu číslo nula (pozor !), ale záměrně tam je číslo 16777216 (2^24)'''.&lt;br /&gt;
&lt;br /&gt;
Pozn.: pouze SDS-MACRO-LM a SDS-MACRO-ST mají teploměry č. 17 až 32, protože má dvě samostatné sběrnice (konektory). Sběrnice A má teploměry 1 až 16, sběrnice B má teploměry 17 až 32. '''Sběrnice B je k dispozici jen pro SDS-MACRO-XX'''.&lt;br /&gt;
&lt;br /&gt;
 sys[342] až [345]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[346] 01 i R   číslo čidla, které je právě převáděno na sběrnici '''B''' (čteno přes 1-W, tj. je mu aktualizována hodnota)&lt;br /&gt;
 sys[347] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici '''B'''&lt;br /&gt;
 &lt;br /&gt;
 sys[348] 01 i R   číslo čidla, které je právě převáděno na sběrnici '''A''' (čteno přes 1-W, tj. je mu aktualizována hodnota)&lt;br /&gt;
 sys[349] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici '''A'''&lt;br /&gt;
&lt;br /&gt;
 sys[350] až sys[381]   &lt;br /&gt;
          01 i R   čidlo 1 až 32 - aktuální stav/chyba čidla v okamžiku čtení tohoto sys[]&lt;br /&gt;
                    == 0  : default, čidlo neexistuje, nic nevim (stav ihned po zapnutí, popř. trvale pro prázdnou pozici)&lt;br /&gt;
                    == 2  : vše ok, komunikuje, odpovidá, právě byl získán výsledek&lt;br /&gt;
                    == 4  : ví se jen že existuje (byl získán ROMCODE) (obvykle dočasný stav po spuštění zařízení)&lt;br /&gt;
                    == 8  : začal další převod, čidlo je OK, komunikuje (správný stav)&lt;br /&gt;
                    == 16 : nepovedlo se začít nový převod, CHYBA (obvykle fyzický problém se sběrnicí)&lt;br /&gt;
                    == 32 : bylo přijato neplatné CRC, chyba (obvykle fyzický problém se sběrnicí)&lt;br /&gt;
&lt;br /&gt;
 sys[382] až [389]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[391] až sys[422]  &lt;br /&gt;
          01 s R   uživatelský textový název pro čidlo 1 až 32 (nastaveno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
''' Reserved ''' &lt;br /&gt;
&lt;br /&gt;
 sys[423] až sys[430]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vstupy: analogové vstupy pro měření napětí ==&lt;br /&gt;
&lt;br /&gt;
Všechny vstupy měří napětí vůči společné svorce (GND). Změřená hodnota je vždy k dispozici nejprve jako surová (raw) digitální hodnota, a poté ji SDS přepočítá dle uživatelského nastavení a také dá k dispozici.&lt;br /&gt;
&lt;br /&gt;
 sys[431] 01 i R   RAW hodnota A/D převodu ze vstupu AD1&lt;br /&gt;
 sys[432] 01 i R   RAW hodnota A/D převodu ze vstupu AD2&lt;br /&gt;
 sys[433] 01 i R   RAW hodnota A/D převodu ze vstupu AD3&lt;br /&gt;
 sys[434] 01 i R   RAW hodnota A/D převodu ze vstupu AD4&lt;br /&gt;
&lt;br /&gt;
RAW (surová) hodnota je digitální číslo, poskytnuté z interního A/D převodníku, s tím, že mu už SDS současně (pouze a jenom) odečetl uživatelem nastavený offset.&lt;br /&gt;
&lt;br /&gt;
Rozsah hodnoty RAW je: &lt;br /&gt;
* SDS-MICRO-LM, SDS-MACRO-LM, SDS-UPS-ONEDPS: 0..1023 (10bit rozlišení)&lt;br /&gt;
* SDS-MINI a všechny varianty SDS ST: 0..4095 (12bit rozlišení)&lt;br /&gt;
&lt;br /&gt;
Všechny převodní konstanty A/D, nastavené ve webovém rozhraní (viz admin stránka):&lt;br /&gt;
&lt;br /&gt;
 sys[435] 01 i R   Offset pro A/D 1  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[436] 01 i R   Div pro A/D 1&lt;br /&gt;
 sys[437] 01 s R   textový název A/D 1&lt;br /&gt;
 sys[438] 01 s R   jednotka A/D 1&lt;br /&gt;
&lt;br /&gt;
 sys[439] 01 i R   Offset pro A/D 2  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[440] 01 i R   Div pro A/D 2&lt;br /&gt;
 sys[441] 01 s R   textový název A/D 2&lt;br /&gt;
 sys[442] 01 s R   jednotka A/D 2&lt;br /&gt;
&lt;br /&gt;
 sys[443] 01 i R   Offset pro A/D 3  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[444] 01 i R   Div pro A/D 3&lt;br /&gt;
 sys[445] 01 s R   textový název A/D 3&lt;br /&gt;
 sys[446] 01 s R   jednotka A/D 3&lt;br /&gt;
&lt;br /&gt;
 sys[447] 01 i R   Offset pro A/D 4  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[448] 01 i R   Div pro A/D 4&lt;br /&gt;
 sys[449] 01 s R   textový název A/D 4&lt;br /&gt;
 sys[450] 01 s R   jednotka A/D 4&lt;br /&gt;
&lt;br /&gt;
'''Pozor!''' Hodnoty pro jednotlivé A/D vstupy (tj. Raw Hodnoty v sys[431 až 434]) '''už mají odečtený Offset''' (je to provedeno uvnitř firmware už při zpracovávání A/D převodu) ! &lt;br /&gt;
Proto Offset už ve svém SDS-C programu z Raw hodnot neodečítejte (bylo by to odečítáno podruhé). Pro přepočet z Raw na finální hodnotu vám zbývá (správně) použít jen &amp;quot;Div&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Poznámka: zařízení SDS-MINI (a další z řady SDS ST) už mohou mít text v položce &amp;quot;jednotka A/D x&amp;quot; delší než jeden znak (na rozdíl od původního SDS-MICRO-LM atd., kde to bylo omezeno na jeden jediný znak).&lt;br /&gt;
&lt;br /&gt;
''' Reserved '''&lt;br /&gt;
&lt;br /&gt;
 sys[451] až sys[458]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné pro S0 impulsní vstup ==&lt;br /&gt;
&lt;br /&gt;
 sys[459] 01 i RW  stav tarifu &lt;br /&gt;
                    == 0 : T0 (vysoký tarif)&lt;br /&gt;
                    == 1 : T1 (nízký tarif)&lt;br /&gt;
&lt;br /&gt;
 sys[460] až sys[492]  &lt;br /&gt;
          06 i RW  konfigurace - uživatelem nastavený (webové rozhraní) poměr MTD, pro vstup S0 [1] až [32],&lt;br /&gt;
                                 je-li MTD pro tento vstup použit (pokud není použit (přímé měření), má zde být 1 )&lt;br /&gt;
                    - příklad: pro MTD s poměrem 300A:5A je zapsaná hodnota 60&lt;br /&gt;
                    - pozor, nezapočítávejte vliv MTD do hodnoty imp./1kWh&lt;br /&gt;
                    - pozor, některé elektroměry mají MTD už započítané do vlastní impulsní konstanty, &lt;br /&gt;
                             pak sem v takovém případě nastavte číslo 1&lt;br /&gt;
                    - platné hodnoty: 1 až 65280 (včetně)&lt;br /&gt;
 &lt;br /&gt;
 sys[493] až sys[525]  &lt;br /&gt;
          01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T0&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).&lt;br /&gt;
 &lt;br /&gt;
 sys[526] až sys[558]  &lt;br /&gt;
          01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T1&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).&lt;br /&gt;
 &lt;br /&gt;
 sys[559] až sys[591]  &lt;br /&gt;
          01 i RW  konfigurace - uživatelem nastavené přepočtové konstanty S0: počet imp./1kWh (z webového rozhraní)&lt;br /&gt;
                    - pozor, tato hodnota platí pro samotný elektroměr, není to hodnota ve které je započítán vliv MTD&lt;br /&gt;
                    - pozn. v případě, že měřícím prvkem není elektroměr ale jiný přístroj, bude zde odpovídající&lt;br /&gt;
                      jiná konfigurační hodnota (např. vodoměr: počet imp./m^3).&lt;br /&gt;
 &lt;br /&gt;
 sys[592] až sys[624]  &lt;br /&gt;
          01 i R   změřená časová vzdálenost mezi dvěmi nejposlednějšími zachycenými impulsy na S0 vstupu (aktuální impuls a předchozí impuls)&lt;br /&gt;
                    - měřeno v msec&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).&lt;br /&gt;
 &lt;br /&gt;
 sys[625] až sys[657]  &lt;br /&gt;
          01 i R   změřený čas od úplně posledního impulsu zachyceného na S0 vstupu, tzn. &amp;quot;doba bez impulsu&amp;quot; nebo také &amp;quot;doba od posledního impulsu&amp;quot;&lt;br /&gt;
                    - měřeno v msec&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).&lt;br /&gt;
&lt;br /&gt;
poznámka: tarif T0 a tarif T1 závisí na uživatelem zvoleném externím signálu (přeneseno do sys[459]), viz informace na stránce ohledně [[S0]]. Celková hodnota impulsů je samozřejmě součtem těchto dvou impulsních akumulátorů. Pokud není tarifní rozlišení využito, je vše zapisováno do akumulátoru pro T0. &lt;br /&gt;
&lt;br /&gt;
poznámka: časová vzdálenost mezi impulsy se používá pro výpočet aktuálního výkonu (popř. průtoku atd. dle použitého měřiče) - můžete toho využít ve svém SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
poznámka: &amp;quot;Poměr MTD&amp;quot; zahrnuje všechny měřící transformátory (MTD), předřazené elektroměru (pouze pokud to už není započítáno v impulsní konstantě). Pokud je S0 vstup využit pro jiný typ měřiče (vodoměr a podobné), kde je připojení MTD nesmysl, tak se v konfiguraci musí do této položky nastavit hodnota 1. Samozřejmě jde s určitou výhodou použít i jinou konfiguraci, protože tato hodnota je použita jako &amp;quot;druhý dělitel&amp;quot; u výpočtu počtu S0 impulsů na velikost kroku energetické jednotky. Určení této hodnoty pro jiné měřiče sleduje stejné matematické postupy jako určení této hodnoty pro elektroměr s předřazeným MTD, jen jednotky budou samozřejmě jiné.&lt;br /&gt;
&lt;br /&gt;
 sys[658] až sys[670]  reserved for future use&lt;br /&gt;
&lt;br /&gt;
poznámka: další sys[] indexy pro S0 vstupy jsou uvedeny ještě dále v tomto celém seznamu (dole na stránce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální vstupy a výstupy ==&lt;br /&gt;
&lt;br /&gt;
Toto je funkce dostupná jen na omezeném rozsahu výrobků SDS.&lt;br /&gt;
&lt;br /&gt;
'''Pouze pro SDS MICRO (LM) LIGHT:'''&lt;br /&gt;
&lt;br /&gt;
 sys[671] 02 i W   zápis na pin M4 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)&lt;br /&gt;
 sys[672] 02 i W   zápis na pin M5 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)&lt;br /&gt;
 sys[673] 02 i W   zápis na pin B1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)&lt;br /&gt;
 sys[674] 02 i W   zápis na pin A1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)&lt;br /&gt;
&lt;br /&gt;
Tyto zmíněné čtyři ''sys[]'' jsou dostupné '''pouze''' na modulu SDS MICRO '''LIGHT''' popř. '''DIN''', a to jen s verzí firmware 9.1.2011 nebo novější.&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT s pamětí EEPROM: k dispozici jsou všechny čtyři výstupy.&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT 2 s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MICRO DIN: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MACRO LM, SDS MICRO ST, SDS MACRO ST, SDS UPS, SDS IO6, SDS IO6 ST, SDS TTCPRO, SDS MINI: tyto výstupy '''nejsou k dispozici'''.&lt;br /&gt;
&lt;br /&gt;
Vše to jsou logické výstupy, s CMOS 3V3 logickými úrovněmi (pro obecné použití je externí pull-up 47kOhm nutný). Lze to použít především pro ovládání BSS138 MOSFETů, např. pro spínání dalších relé (v případě použití BSS138 nedávejte externí pull-up, ale naopak dejte pull-down na GND o hodnotě 47kOhm).&lt;br /&gt;
&lt;br /&gt;
'''Pouze pro SDS MACRO ST:'''&lt;br /&gt;
&lt;br /&gt;
Alternativa k sys[301]. Hodnota odpovídá logické úrovni na daném vstupu TL1 (TL2). Při osazené desce MACRO-ST-LCD jsou na tyto vstupy připojeny tlačítka (pak při stisku TL1, TL2 je zde hodnota 0, v klidu 1).&lt;br /&gt;
&lt;br /&gt;
 sys[671] 02 i R   čtení stavu TL1&lt;br /&gt;
 sys[672] 02 i R   čtení stavu TL2&lt;br /&gt;
&lt;br /&gt;
'''Pájecí plošky CFG:'''&lt;br /&gt;
&lt;br /&gt;
Zkratovací CFG plošky jsou k dispozici jen pro SDS TTCPRO. Vhodné pro pevnou konfiguraci uživatelem.&lt;br /&gt;
&lt;br /&gt;
V současné době není k dispozici firmware, které přenáší hodnotu z pájecích plošek (CFG1, CFG2) do ''sys[]''.&lt;br /&gt;
Ploška CFG1 je vyhrazena pro vnitřní použítí samotného firmware SDS, a ploška CFG2 bude eventuálně uvolněna pro libovolné použití uživatelem (čtení z SDS-C).&lt;br /&gt;
Takový firmware se teprve chystá (SDS TTCPRO).&lt;br /&gt;
&lt;br /&gt;
 sys[675] 07 i R   stav plošky CFG1 (zkratována = je zde 0)&lt;br /&gt;
 sys[676] 07 i R   stav plošky CFG2 (zkratována = je zde 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální proměnné pro SDS-UPS ==&lt;br /&gt;
&lt;br /&gt;
SDS UPS nabízí, kromě již zmíněných proměnných (viz výpis výše), i doplňkové proměnné, specifické pro tento výrobek. Tyto rozšířené systémové proměnné jsou k dispozici ve firmware od 25.4.2011 .&lt;br /&gt;
&lt;br /&gt;
SDS-UPS má všechny sys[0] až sys[699] shodné s SDS-MICRO. Rozdíl je samozřejmě v počtu a osazení periférií.&lt;br /&gt;
&lt;br /&gt;
Pokud nejste spokojeni s originálním nabíjecím algoritmem, máte možnost si ho celý naprogramovat sami v SDS-C: všechny potřebné vstupní a výstupní údaje (proměnné) jsou vám k dispozici. Popřípadě, pokud chcete jen sledovat situaci, můžete je také využít (např. pro logování nabíjecího a vybíjecího proudu akumulátoru a tak dále).&lt;br /&gt;
&lt;br /&gt;
 sys[700] 02 i R   reserved&lt;br /&gt;
 sys[701] 02 i R   reserved&lt;br /&gt;
 sys[702] 02 i R   reserved&lt;br /&gt;
 sys[703] 02 i R   reserved&lt;br /&gt;
&lt;br /&gt;
'''Přepínač algoritmů:'''&lt;br /&gt;
&lt;br /&gt;
 sys[704] 02 i RW  řízení nabíjení - hodnoty které lze zapsat:&lt;br /&gt;
                    == 0   : nabíjení je ovládáno pomocí firmware (výchozí chování výrobku)&lt;br /&gt;
                    == 345 : pouze nabíjení (a ne jiné funkce) jsou řízeny programem SDS-C (= chování programujete vy)&lt;br /&gt;
                    == 824 : kompletní řízení (= volba funkce, nabíjení) je řízeno programem SDS-C&lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte vlastní (ruční) řízení, musíte trvale řídit nabíjení sami pomocí programu v SDS-C. Vlastní ovládání vejde v platnost zápisem čísla 345 nebo 824 do sys[704]. Tento zápis provedete pouze jednou na začátku programu, a dále pak musí trvale následovat váš algoritmus. &lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte 345, jediné co má váš program za úkol, je řídit samotný nabíjecí proces - toto je výhodné, když se nechcete zatěžovat hlídáním provozních stavů (tj. výpadek napájení atd.), což za vás v tomto režimu udělá původní firmware.&lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte 824, musíte sami kompletně řídit všechno chování UPS, tj. nejenom nabíjecí algoritmus, ale i detekce výpadku napájení, přepínání mezi stavy, indikační LED, a tak dále.&lt;br /&gt;
&lt;br /&gt;
 sys[705] až sys[731]  reserved&lt;br /&gt;
&lt;br /&gt;
Pro realizaci vlastního nabíjecího algoritmu potřebujete zpracovávat všechny vstupy a důsledně nastavovat všechy výstupy.&lt;br /&gt;
&lt;br /&gt;
Pokud váš program pouze sleduje činnost původního nabíjecího algoritmu, pak může samozřejmě všechny sys[] jen číst.&lt;br /&gt;
&lt;br /&gt;
'''Vstupy a konfigurace:'''&lt;br /&gt;
&lt;br /&gt;
 sys[732] 02 i R   surová hodnota z A/D převodu - hodnota 2.5V vstupu - odpovídá hodnotě proudu 0.0A&lt;br /&gt;
 sys[733] 02 i R   surová hodnota z A/D převodu - hodnota proudu do-z akumulátoru&lt;br /&gt;
 sys[734] 02 i R   surová hodnota z A/D převodu - hodnota proudu z primárního vstupu&lt;br /&gt;
 sys[735] 02 i R   surová hodnota z A/D převodu - hodnota napětí akumulátoru&lt;br /&gt;
 sys[736] 02 i R   surová hodnota z A/D převodu - hodnota napětí primárního vstupu&lt;br /&gt;
&lt;br /&gt;
Rozsah surových hodnot z A/D převodu je 0 až 4095. Lineárně to odpovídá příslušné měřené hodnotě. &lt;br /&gt;
Měření napětí má 0 na 0V a maximální hodnot (4095) na maximu rozsahu. &lt;br /&gt;
Měření proudu je specifické, protože měření ukazuje kladný i záporný proud, takže 0A je na hodnotě sys[732] (typicky 2047), všechno co je pod touto hodnotu je záporný proud, všechno nad je kladný proud. Znaménko proudu ukazuje, kam proud teče (např. záporný = vybíjení akumulátoru, atd.).&lt;br /&gt;
&lt;br /&gt;
 sys[737] až sys[739]  reserved&lt;br /&gt;
&lt;br /&gt;
Následuje konfigurace provedená uživatelem ve webovém rozhraní.&lt;br /&gt;
Hodnoty jsou přímo v rozmezí 0 až 4095, takže je lze PŘÍMO použít se surovými hodnotami z A/D převodu (tzn. zařízení se už postaralo o převod údajů zadaných uživatelem ve webovém rozhraní na tento formát). V důsledku je pak realizace algoritmu velmi snadná.&lt;br /&gt;
&lt;br /&gt;
 sys[740] 02 i R   primary voltage to say target is ok (pri_pvts)&lt;br /&gt;
 sys[741] 02 i R   primary zadany odpocet v msec (pri_pvat)&lt;br /&gt;
 sys[742] 02 i R   primary voltage to allow charging (at what voltage to allow chargin) (pri_fchg)&lt;br /&gt;
 sys[743] 02 i R   accu disconnect voltage level (at what voltage to disconnect accu) (aku_avdv)&lt;br /&gt;
 sys[744] 02 i R   accu target voltage when charging (when to switch to CV) (aku_avcd)&lt;br /&gt;
 sys[745] 02 i R   accu target current when charging (constant current when in CC) (aku_accc)&lt;br /&gt;
 sys[746] 02 i R   target charging voltage (final voltage on accu when fully charged)&lt;br /&gt;
 sys[747] 02 i R   flag: do not answer ping when primary gone (pri_ping)&lt;br /&gt;
 sys[748] 02 i R   flag: do not switch accu off (aku_dach)&lt;br /&gt;
&lt;br /&gt;
Hodnoty sys[740] až sys[748] jsou konfigurační údaje (uživatel je změnil přes webové rozhraní, a tím se uložili do pevné paměti, takže vydrží reset nebo vypnutí zařízení). Pokud do nich v SDS-C programu zapíšete, tato nová zapsaná hodnota zůstane platná až do resetu nebo vypnutí, nebo do ručního přepsání uživatelem (ve webovém rozhraní). Zápis do těchto konkrétních sys[] nezpůsobí uložení nových hodnot do pevné paměti.&lt;br /&gt;
&lt;br /&gt;
 sys[749] až sys[760]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Výstupy:'''&lt;br /&gt;
&lt;br /&gt;
Tyto '''všechny''' výstupy musíte správně ovládat po celou dobu, co bude zařízení SDS UPS zapnuto !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 sys[761] 02 i RW  ovládání vypínání nabíječe&lt;br /&gt;
                    == 0 : nabíječ v provozu (zapnuto = nabíjí se, regulujte jiným sys[])&lt;br /&gt;
                    != 0 : nabíječ mimo provoz (vypnuto = nenabíjí se)&lt;br /&gt;
 &lt;br /&gt;
 sys[762] 02 i RW  ovládání posunu rozsahu regulace nabíječe &lt;br /&gt;
                    == 0 : bez zásahu do zpětné vazby (původní regulační rozsah)&lt;br /&gt;
                    != 0 : zásah do zpětné vazby (posun rozsahu)&lt;br /&gt;
                           (vhodné pro skokové zvýšení výstupního napětí nabíječe, &lt;br /&gt;
                            když už nereaguje v původním rozsahu)&lt;br /&gt;
 &lt;br /&gt;
 sys[763] 02 i RW  ovládání odpojovače baterie &lt;br /&gt;
                    == 0 : spínač vypnutý (baterie odpojena od zátěže)&lt;br /&gt;
                    != 0 : spínač sepnutý (baterie připojena)&lt;br /&gt;
 &lt;br /&gt;
 sys[764] 02 i RW  indikační LED - nabíjení akumulátoru&lt;br /&gt;
                    == 0 : LED svítí (informace: akumulátor je nabíjen)&lt;br /&gt;
                    != 0 : LED nesvítí (informace: akumulátor není nabíjen)&lt;br /&gt;
 &lt;br /&gt;
 sys[765] 02 i RW  indikační LED - výpadek primárního vstupu&lt;br /&gt;
                    == 0 : LED svítí (informace: napětí primárního vstupu pod dolním limitem)&lt;br /&gt;
                    != 0 : LED nesvítí (informace: primární vstup má napětí vyšší než je dolní limit)&lt;br /&gt;
&lt;br /&gt;
'''Řízení nabíjení:''' Je potřeba správně regulovat pomocí následujícího výstupu:&lt;br /&gt;
&lt;br /&gt;
 sys[766] 02 i RW  přímé řízení nabíjecího bloku (výstup vaší regulace sem - hodnota řídí nabíječ)&lt;br /&gt;
                    - minimální hodnota = 1&lt;br /&gt;
                    - maximální hodnota = 2497&lt;br /&gt;
&lt;br /&gt;
 sys[767] až sys[769]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Následující údaje jsou určeny pro '''zobrazování na webovém rozhraní''':&lt;br /&gt;
&lt;br /&gt;
 sys[770] 02 i RW  provozní režim: vždy jedno z UPS_PROVOZ_xxx&lt;br /&gt;
 &lt;br /&gt;
 sys[771] 02 i RW  nabíjecí režim: vždy jedno z UPS_NABREZIM_xxx&lt;br /&gt;
 &lt;br /&gt;
 sys[772] 02 i RW  výsledek odhadu stavu baterie: vždy jedno z UPS_BATERIE_ODHAD_xxx&lt;br /&gt;
&lt;br /&gt;
Konstanty pro zápis (je to potřeba dodržet, protože se to přímo zobrazuje na webovém rozhraní):&lt;br /&gt;
&lt;br /&gt;
 UPS_PROVOZ_START            0&lt;br /&gt;
 UPS_PROVOZ_PRIOK            1&lt;br /&gt;
 UPS_PROVOZ_PRIOK_CHARGING   2&lt;br /&gt;
 UPS_PROVOZ_ONLY_BATT        4&lt;br /&gt;
 UPS_PROVOZ_NO_BATT          8&lt;br /&gt;
 &lt;br /&gt;
 UPS_NABREZIM_CC             0&lt;br /&gt;
 UPS_NABREZIM_CV             2&lt;br /&gt;
 UPS_NABREZIM_PAUZA          4&lt;br /&gt;
 UPS_NABREZIM_URCENI_REZIMU  8&lt;br /&gt;
 &lt;br /&gt;
 UPS_BATERIE_ODHAD_NEZNAM            0&lt;br /&gt;
 UPS_BATERIE_ODHAD_MOC_NIZKE_NAPETI  1&lt;br /&gt;
 UPS_BATERIE_ODHAD_OK_NABIJIM        2&lt;br /&gt;
 UPS_BATERIE_ODHAD_PLNE_NABITO       4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výsledky z 1-Wire sensoru vlhkosti (T/RH) SDS-1W-T-RH ==&lt;br /&gt;
&lt;br /&gt;
Připojené moduly [[SDS_1W_T-RH]] jsou připojeny na 1-W sběrnici, a mají v sobě chip, který měří hodnotu ze sensoru vlhkosti (který je současně umístěn na modulu SDS-1W-T-RH) a současně měří i teplotu a napájecí napětí pro sensor vlhkosti. &lt;br /&gt;
SDS interně provádí výpočet relativní vlhkosti (RH) pomocí kompenzační rovnice, určené výrobcem sensoru vlhkosti.&lt;br /&gt;
&lt;br /&gt;
K dispozici jsou jak surové hodnoty (změřené v rámci modulu SDS-1W-T-RH), tak i hodnota kompenzované (skutečné) relativní vlhkosti v místě umístění modulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Změřená teplota je uložena na standardních indexech:&lt;br /&gt;
&lt;br /&gt;
 sys[310] až sys[341]   &lt;br /&gt;
          01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 degC&lt;br /&gt;
&lt;br /&gt;
Dále jsou k dispozici surové hodnoty, nutné pro výpočet hodnoty RH (Relative Humidity):&lt;br /&gt;
&lt;br /&gt;
 sys[800] až sys[831]   &lt;br /&gt;
          08 i R   hodnota údaje (napětí Vad = výstupu čidla RH) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 V&lt;br /&gt;
&lt;br /&gt;
 sys[832] až sys[863]   &lt;br /&gt;
          08 i R   hodnota údaje (napětí Vdd = napájení čidla RH) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 V&lt;br /&gt;
&lt;br /&gt;
SDS provádí přepočet na údaj RH v procentech (0 až 100):&lt;br /&gt;
&lt;br /&gt;
 sys[864] až sys[895]   &lt;br /&gt;
          08 i R   hodnota RH (0 až 100, v procentech RH) kompenzovaná podle rovnice pro čidlo HIH-503x (výpočet z Vad, kompenzace na Vdd a Temp).&lt;br /&gt;
&lt;br /&gt;
Rezerva (zatím nepoužito):&lt;br /&gt;
&lt;br /&gt;
 sys[896] až sys[899]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Doplňující informace pro 1-Wire zařízení ==&lt;br /&gt;
&lt;br /&gt;
1-Wire sběrnice u zařízení SDS umožňuje komunikaci s celou řadů 1-W chipů: [[OneWire|seznam je zde]]. Přístup k chipům na 1-W sběrnici se liší na dva typy: chipy (čidla) které si SDS interně zpracuje (např. měření teploty), a všechny ostatní chipy (které SDS jen umí vyhledat a oznámit, ale dále s nimi nekomunikuje).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1-Wire chipy interně zpracovávané SDS'''&lt;br /&gt;
&lt;br /&gt;
Tyto chipy jsou plně automaticky obsluhovány prostřednictvím firmware SDS - není potřebná opakovaná intervence uživatele, ten si pouze čte stále aktuální výsledky měření teplot z jednotlivých čidel.&lt;br /&gt;
&lt;br /&gt;
Poznámka: Pro změřené hodnoty z 1-W čidel teplot, jsou k dispozici tyto indexy: '''sys[310]''' až '''sys[430]''', a '''sys[900]''' až '''sys[931]'''.&lt;br /&gt;
&lt;br /&gt;
K dispozici je textové vyjádření (hex znaky) ROM CODE hodnoty načtené pro danou pozici zpracovávaného chipu na 1-W sběrnici.&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS mohou mít jednu [A] nebo dvě ( nezávislé, [A] a [B] ) 1-Wire sběrnice, a každá sběrnice má maximálně 16 připojených chipů.&lt;br /&gt;
Jednotlivé platné ROM CODE jsou v ''sys[]'' uloženy za sebou, viz výpis:&lt;br /&gt;
&lt;br /&gt;
 sys[900] 06 s RW  ROM CODE pro první chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[901] 06 s R   ROM CODE pro druhý chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
A tak dále až&lt;br /&gt;
&lt;br /&gt;
 sys[915] 06 s R   ROM CODE pro šestnáctý chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
Následuje sběrnice [B], je-li přítomná v daném zařízení (dostupné pouze pro SDS-MACRO):&lt;br /&gt;
&lt;br /&gt;
 sys[916] 06 s R   ROM CODE pro první chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
A tak dále . . . až&lt;br /&gt;
&lt;br /&gt;
 sys[931] 06 s R   ROM CODE pro šestnáctý chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
'''Pozor''': pokud sběrnice [B] v zařízení není, tak sys[916] až sys[931] vrátí znak '-'.&lt;br /&gt;
&lt;br /&gt;
Tak jak jsou jednotlivé ROM CODE viditelné ve webové administraci, tak jsou tedy dostupné i přes sys[] položky.&lt;br /&gt;
&lt;br /&gt;
Poznámka: ROM CODE pro 1-W chipy jsou k dispozici pouze jako ucelené texty (string). Bajtový rozpad jednotlivých položek není k dispozici.&lt;br /&gt;
&lt;br /&gt;
 sys[931] až sys[939]  reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ostatní 1-Wire chipy'''&lt;br /&gt;
&lt;br /&gt;
Pro ostatní 1-W chipy, které SDS &amp;quot;nezná&amp;quot; (tzn. nekomunikuje s nimi, jen je umí na sběrnici vyhledat), jsou jejich ROM CODE odděleny do samostatných '''sys[]''' položek.&lt;br /&gt;
&lt;br /&gt;
Čtení ostatních 1-W chipů se spouští v rámci SDS-C programu, který musí zavolat příslušnou SDS-C funkci. &lt;br /&gt;
Na základě zavolání této funkce dojde k vynulování všech příslušných '''sys[]''' (od indexu 940 resp. 970) pro danou sběrnici, a provede se pokus o přečtení připojeného chipu.&lt;br /&gt;
Pokud se to povede, bude nalezený ROM CODE (spolu s časovou značkou okamžiku přečtení) vložen do příslušných '''sys[]''', &lt;br /&gt;
nebo bude nastaven chybový kód.&lt;br /&gt;
&lt;br /&gt;
Pozor, k SDS lze připojit více různých &amp;quot;ostatních&amp;quot; chipů, ale zdejší funkce najde jenom ten první z nich a ostatní už ignoruje. &lt;br /&gt;
Ostatní chipy lze samozřejmě připojit na kteroukoliv sběrnici, i když na ní jsou připojeny i chipy se kterými SDS komunikuje (např. teploměrné chipy).&lt;br /&gt;
&lt;br /&gt;
Jednotlivé chipy se rozlišují pomocí hodnoty ''ID family-code'' (jeden bajt). Pro chip DS1990A je ''0x01'', hodnoty pro jiné chipy viz datasheet výrobce pro konkrétní chip.&lt;br /&gt;
&lt;br /&gt;
Obecný stav sběrnic:&lt;br /&gt;
&lt;br /&gt;
 sys[940] 06 i R   Stav 1-W sběrnice '''[A]''' pro rescan ostatních 1-W chipů&lt;br /&gt;
 sys[941] 06 i R   Stav 1-W sběrnice '''[B]''' pro rescan ostatních 1-W chipů&lt;br /&gt;
 :&lt;br /&gt;
                    == 0  : ještě nebylo provedeno jediné/jakékoliv čtení ostatních chipů na 1-W sběrnici&lt;br /&gt;
 &lt;br /&gt;
                    == 1  : došlo k chybě: nebylo dokončeno předchozí čtení sběrnice&lt;br /&gt;
                            (nesmíte požadovat nové čtení, dokud se plně neprovedlo to poslední)&lt;br /&gt;
 &lt;br /&gt;
                    == 2  : probíhá čtení ROM CODE z připojeného ostatního chipu&lt;br /&gt;
                            (dokud se toto nedokončí, nelze provést opětovný požadavek na další rescan/čtení)&lt;br /&gt;
 &lt;br /&gt;
                    == 4  : nebyl nalezen jakýkoliv ostatní chip (s odpovídajícím Family Code byte)&lt;br /&gt;
 &lt;br /&gt;
                    == 8  : byl přečten ROM CODE z připojeného ostatního chipu&lt;br /&gt;
                            (už lze také požádat o další nové čtení 1-W sběrnice)&lt;br /&gt;
 &lt;br /&gt;
                    == 16 : došlo k chybě: nepovedlo se přečíst data po 1-W sběrnici &lt;br /&gt;
                            (zkuste provést rescan/čtení znovu)&lt;br /&gt;
&lt;br /&gt;
 sys[942] až sys[949]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Pro sběrnici [A]:'''&lt;br /&gt;
&lt;br /&gt;
 sys[950] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire&lt;br /&gt;
                   (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).&lt;br /&gt;
                    - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),&lt;br /&gt;
                      a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze '''sys[3]'''&lt;br /&gt;
&lt;br /&gt;
 sys[951] 06 s R   celý text ROM CODE:&lt;br /&gt;
                    - ROM CODE pro chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[952] až sys[959]: bajtový rozpad ROM CODE pro chip na [A] sběrnici 1-Wire&lt;br /&gt;
 :&lt;br /&gt;
 sys[952] 06 i R   romcode[0] (1-W: ID family-code byte)&lt;br /&gt;
 sys[953] 06 i R   romcode[1] (1-W: serial code)&lt;br /&gt;
 sys[954] 06 i R   romcode[2] (1-W: serial code)&lt;br /&gt;
 sys[955] 06 i R   romcode[3] (1-W: serial code)&lt;br /&gt;
 sys[956] 06 i R   romcode[4] (1-W: serial code)&lt;br /&gt;
 sys[957] 06 i R   romcode[5] (1-W: serial code)&lt;br /&gt;
 sys[958] 06 i R   romcode[6] (1-W: serial code)&lt;br /&gt;
 sys[959] 06 i R   romcode[7] (1-W: CRC byte)&lt;br /&gt;
&lt;br /&gt;
 sys[960] až sys[969]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Pro sběrnici [B]:'''&lt;br /&gt;
&lt;br /&gt;
 sys[970] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire&lt;br /&gt;
                   (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).&lt;br /&gt;
                    - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),&lt;br /&gt;
                      a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze '''sys[3]'''&lt;br /&gt;
&lt;br /&gt;
 sys[971] 06 s R   celý text ROM CODE:&lt;br /&gt;
                    - ROM CODE pro chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[972] až sys[979]: bajtový rozpad ROM CODE pro chip na [B] sběrnici 1-Wire&lt;br /&gt;
 :&lt;br /&gt;
 sys[972] 06 i R   romcode[0] (1-W: ID family-code byte)&lt;br /&gt;
 sys[973] 06 i R   romcode[1] (1-W: serial code)&lt;br /&gt;
 sys[974] 06 i R   romcode[2] (1-W: serial code)&lt;br /&gt;
 sys[975] 06 i R   romcode[3] (1-W: serial code)&lt;br /&gt;
 sys[976] 06 i R   romcode[4] (1-W: serial code)&lt;br /&gt;
 sys[977] 06 i R   romcode[5] (1-W: serial code)&lt;br /&gt;
 sys[978] 06 i R   romcode[6] (1-W: serial code)&lt;br /&gt;
 sys[979] 06 i R   romcode[7] (1-W: CRC byte)&lt;br /&gt;
&lt;br /&gt;
 sys[980] až sys[989]  reserved&lt;br /&gt;
&lt;br /&gt;
Všimněte si, že SDS v tuto chvíli umožňuje pouze rescan 1-W sběrnice, kdy hledá pouze '''jeden''' připojený &amp;quot;ostatní 1-W chip&amp;quot; (ten první na který narazí, ten ohlásí, a nehledá dále). &lt;br /&gt;
&lt;br /&gt;
'''Pozor''':&lt;br /&gt;
&lt;br /&gt;
Pokud je takových chipů připojeno na sběrnici více, popř. pokud jsou smíchány s &amp;quot;teploměrnými&amp;quot; chipy, &lt;br /&gt;
bude při tomto rescanu uveden pouze první nalezený ostatní chip (tj. ten, který má nejnižší ROM-CODE ze všech připojených ostatních chipů).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[990] až sys[1023]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální položky jen pro SDS-MACRO-LM a SDS-MACRO-ST ==&lt;br /&gt;
&lt;br /&gt;
'''Přímý přístup do LCD Frame Buffer paměti:'''&lt;br /&gt;
&lt;br /&gt;
 sys[1024] až sys[1551]   LCD buffer (dostupné jen pro SDS MACRO LM a SDS MACRO ST !)&lt;br /&gt;
          01 i RW  každý index v rámci tohoto rozsahu sys[] lze zapisovat i číst&lt;br /&gt;
                   - jedná se o pole 528 bajtů (4 řádky x 132 sloupců)&lt;br /&gt;
                   - každý bajt pole obsluhuje přesně danou oblast (několika pixelů) LCD displaye&lt;br /&gt;
                   - platné hodnoty pro každý index : 0 až 255 včetně  - zapisujte a čtěte jen hodnoty 0 až 255 (včetně)&lt;br /&gt;
&lt;br /&gt;
Tyto položky jsou dosupné '''pouze a jenom''' na SDS-MACRO-LM kde je vyžadován firmware od 24.11.2016 nebo novější, a na SDS-MACRO-ST (všechny FW verze).&lt;br /&gt;
&lt;br /&gt;
Jakékoliv změny (zápis) se promítnou pouze do frame bufferu (tedy v paměti SDS) - ale aby se následně tento frame buffer (jeho změněný obsah) eventuálně vykreslil na LCD, je potřeba zavolat příslušnou SDS-C funkci !&lt;br /&gt;
&lt;br /&gt;
Čtení ze sys poskytuje přímý přístup do frame bufferu (jeho aktuální obsah, tedy opět ne nutně to co je právě vidět na LCD).&lt;br /&gt;
&lt;br /&gt;
Pokud nepoužíváte LCD (sandwich desku), můžete tuto oblast 528 bajtů využít pro jakékoliv své účely. V podstatě se pak jedná o rozšiřující RAM pamět pro váš SDS-C program.&lt;br /&gt;
&lt;br /&gt;
'''Pozor''' SDS-MACRO-ST&lt;br /&gt;
&lt;br /&gt;
SDS MACRO ST provádí automatické aktualizace (zápis) do LCD bufferu, pokud se o tento buffer nepřihlásí SDS-C program. Proto, pokud na MACRO-ST chcete využít LCD buffer pro jiné své účely, musíte to nejprve SDS říct. Znovu, toto platí jen pro MACRO-ST - ''není to potřeba pro MACRO-LM (které tam po zapnutí nahraje logo a pak už na buffer za běhu nesáhne)''. Pro MACRO-ST zavolejte kteroukoliv SDS-C funkci pro přístup na display (např. clear) a je to - tím se přepne vlastnictví LCD bufferu pro SDS-C program.&lt;br /&gt;
&lt;br /&gt;
== Vyhrazená oblast ==&lt;br /&gt;
&lt;br /&gt;
'''Zbytek:'''&lt;br /&gt;
&lt;br /&gt;
 sys[1552] až sys[1663]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bateriově Zálohovaná Paměť ==&lt;br /&gt;
&lt;br /&gt;
'''POUZE PRO: SDS-TTCPRO a SDS-MINI a SDS-MICRO-ST a SDS-MACRO-sT a SDS-IO6-ST !''' (tedy ty s baterií) - všechny jiné SDS První Řady tyto specifické indexy v sys[] nemají k dispozici!&lt;br /&gt;
&lt;br /&gt;
Pozor! Tato funkce vyžaduje FW od 18.8.2017 a nebo novější. &lt;br /&gt;
&lt;br /&gt;
 sys[1664] až sys[1791]   (pouze pro SDS TTCPRO a SDS MINI a SDS MICRO-ST a SDS MACRO-ST a SDS IO6-ST)&lt;br /&gt;
          07 i RW  sada 128 samostatných pozic v zálohované paměti RAM, pro ukládání libovolných hodnot&lt;br /&gt;
                    - každý index má k dispozici 32 bitů (tj. celý signed integer)&lt;br /&gt;
                    - čtení a zápis je rychlé (je to v RAM, takže se nemusí čekat jako při práci s DF)&lt;br /&gt;
                    - lze použít nezávisle (lze přístupovat ke kterékoliv položce &amp;quot;na přeskáčku&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Pozor! Oblast záložní paměti je k dispozici pouze na vybraných zařízeních SDS (ty, které mají osazenu baterii pro tyto účely). Údaje se nesmazají změnou programu (nahráním nového programu), ani se nesmazají resetem zařízení (kromě aktivace RSTD - pozor!), tzn. vydrží a zůstanou, a to dokonce i po celou dobu výpadku externího napájení (tak dlouho, dokud se nevybije záložní baterie).&lt;br /&gt;
&lt;br /&gt;
''(Pouze) pokud baterie v daném SDS není'': tak jsou údaje ztraceny po výpadku napájení (ale po dobu přítomnosti externího napájení jsou k dispozici). Při takové situaci není zaručen obsah těchto dat po zapnutí (měl by být nulový, ale bez záruky).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Další informace ze S0 vstupů ==&lt;br /&gt;
&lt;br /&gt;
Následující položky jsou k dispozici pro všechny SDS První Produktové Řady.&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. 07 jsou přidány tyto systémové proměnné:&lt;br /&gt;
&lt;br /&gt;
 sys[1792] až sys[1823]  &lt;br /&gt;
          07 i R   cena za jednotku v režimu T0&lt;br /&gt;
                    - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)&lt;br /&gt;
 &lt;br /&gt;
 sys[1824] až sys[1855]  &lt;br /&gt;
          07 i R   cena za jednotku v režimu T1&lt;br /&gt;
                    - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)&lt;br /&gt;
 &lt;br /&gt;
 sys[1856] až sys[1887]  &lt;br /&gt;
          07 s R   název jednotky se vztahem k času, podle nastavení (např. text &amp;quot;kWh&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1888] až sys[1919]&lt;br /&gt;
          07 s R   název měny, podle nastavení (např. text &amp;quot;CZK&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1920] až sys[1951]  &lt;br /&gt;
          07 s R   název jednotky bez vztahu k času, podle nastavení (např. text &amp;quot;kW&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1952] až sys[1983]  &lt;br /&gt;
          07 s R   název činnosti, podle nastavení (např. text &amp;quot;spotřeba&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1984] až sys[2015]  &lt;br /&gt;
          07 s R   název měřiče, podle nastavení (např. text &amp;quot;elektroměr č. 1&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[2016] až sys[2047]  &lt;br /&gt;
          07 i R   konfigurační detaily pro daný S0 vstup&lt;br /&gt;
                    - bit 0 nastaven = je to aktivní S0 vstup&lt;br /&gt;
                    - bit 1 nastaven = tento S0 vstup je rozdělen na dvoutarif T0/T1 (jinak je to jedno-tarif)&lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro využití těchto systémových proměnných, potřebujete mít v SDS aktuální firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[2048] až sys[2198]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT klient ==&lt;br /&gt;
&lt;br /&gt;
Vždy si zjistěte, jestli máte v SDS takové FW, které podporuje funkci MQTT klient:&lt;br /&gt;
&lt;br /&gt;
 sys[2199] 09 i R   podpora MQTT&lt;br /&gt;
                     0 = NE&lt;br /&gt;
                     1 = ANO, verze MQTT 3.1.1, SDS první část implementace&lt;br /&gt;
                     2..max = (reserved)&lt;br /&gt;
&lt;br /&gt;
Každé nové připojení k Brokeru:&lt;br /&gt;
&lt;br /&gt;
 sys[2200] 09 i R   stav průběhu mqtt_connect()&lt;br /&gt;
                     -7 = obdrželi jsme CONNACK, ale negativní = nepřipojeno ( výsledek viz sys[2201] )&lt;br /&gt;
                     -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = pokus o TCP připojení selhal&lt;br /&gt;
                     -1 = nepoužito&lt;br /&gt;
                      0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                      1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                      2 = TCP připojeno a odeslán CONNECT požadavek&lt;br /&gt;
                      4 = obdrželi jsme CONNACK, připojeno ( výsledek viz sys[2201] )&lt;br /&gt;
                      8 = probíhá odpojování, čekáme na výsledek (na odpojení)&lt;br /&gt;
&lt;br /&gt;
Po zavolání mqtt_connect(...) je nutné testovat sys[2200] na výslednou hodnotu. Funkci mqtt_connect(...) nelze volat, je-li sys[2200] na hodnotě 1, 2, 8 nebo 16 (nejprve je v takových případech potřeba provést odpojení pomocí mqtt_disconnect() funkce). Pro úplný test, je-li připojení z SDS do Brokeru úplné, je potřeba ověřit i hodnotu v sys[2201]. Teprve pokud oba tyto sys jsou na správné hodnotě, lze s Brokerem komunikovat.&lt;br /&gt;
&lt;br /&gt;
 sys[2201] 09 i R   výsledek mqtt_connect() = hodnota &amp;quot;CONNACK Connect Return&amp;quot;&lt;br /&gt;
                     -7 = nepoužito&lt;br /&gt;
                     -6 = timeout při čekání na CONNACK, nepřipojeno&lt;br /&gt;
                     -5 = nepoužito&lt;br /&gt;
                     -4 = nepoužito&lt;br /&gt;
                     -3 = nepoužito&lt;br /&gt;
                     -2 = probíhá připojování, čekáme na CONNACK (zatím nepřišel)&lt;br /&gt;
                     -1 = idle, nepřipojeno&lt;br /&gt;
                      0 = (výsledek:) MQTT 0x00: broker akceptoval připojení - LZE POKRAČOVAT (provádět Publish, Subscribe)&lt;br /&gt;
                      1 = MQTT 0x01: Connection Refused, unacceptable protocol version&lt;br /&gt;
                      2 = MQTT 0x02: Connection Refused, identifier rejected&lt;br /&gt;
                      3 = MQTT 0x03: Connection Refused, Server unavailable&lt;br /&gt;
                      4 = MQTT 0x04: Connection Refused, bad user name or password&lt;br /&gt;
                      5 = MQTT 0x05: Connection Refused, not authorized&lt;br /&gt;
&lt;br /&gt;
Hodnotu v sys[2201] lze číst a zpracovat pouze pokud je sys[2200] na hodnotě 16 (to znamená, pouze pokud SDS obdrží odpověď CONNACK od MQTT brokera).&lt;br /&gt;
&lt;br /&gt;
Před a po každém volání mqtt_publish() a nebo mqtt_subscribe() funkcí je potřeba sledovat obsah následují položky:&lt;br /&gt;
&lt;br /&gt;
 sys[2202] 09 i R   výsledek pro tyto funkce: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
                     -8 = SUBACK dorazil z Broker ale s indikovanou chybou (Failure Bit), můžete volat další funkci&lt;br /&gt;
                     -7 = vybraná položka (řádek) subscribe tabulky je prázdná, není co odhlašovat&lt;br /&gt;
                     -6 = timeout (možnosti: publish neprovedeno, nebo: SUBACK vůbec nedorazil, nebo: UNSUBACK vůbec nedorazil), můžete volat další funkci&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty, např. index) např. jejich celková délka se nevleze do paketu&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů)&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = SDS není připojeno k brokeru (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                     -1 = bez aktivity&lt;br /&gt;
                      0 = nepoužito&lt;br /&gt;
                      1 = mqtt_publish() probíhá&lt;br /&gt;
                      2 = mqtt_publish() hotovo (OK - obdržen TCP ACK), můžete volat další funkci&lt;br /&gt;
                      4 = mqtt_subscribe() probíhá - čekám na SUBACK&lt;br /&gt;
                      8 = SUBACK dorazil z Broker, bez chyby (OK), můžete volat další funkci&lt;br /&gt;
                     16 = čekám na UNSUBACK (pouze pro unsubscribe funkce)&lt;br /&gt;
                     32 = UNSUBACK dorazil z Brokeru, můžete volat další funkce&lt;br /&gt;
&lt;br /&gt;
Informativní položka:&lt;br /&gt;
&lt;br /&gt;
 sys[2203] 09 i R   počet chyb v protokolu MQTT směrem z Brokeru&lt;br /&gt;
                    (objeví-li se chyba, dojde k okamžitému odpojení)&lt;br /&gt;
&lt;br /&gt;
Zatím nepoužité pozice:&lt;br /&gt;
&lt;br /&gt;
 sys[2204] až sys[2208]   reserved&lt;br /&gt;
&lt;br /&gt;
Pro každou příchozí datovou zprávu z Brokeru, je tato zpráva uložena do následujících sys: (pozor, každá nová příchozí zpráva přepíše předchozí údaje)&lt;br /&gt;
&lt;br /&gt;
 sys[2210] 09 s R   poslední přijatý Topic Name z Brokeru (broker publish)&lt;br /&gt;
 sys[2250] 09 s R   poslední přijatý Value z Brokeru (broker publish)&lt;br /&gt;
 sys[2290] 09 i R   timestamp pro poslední přijatou zprávu (broker publish)&lt;br /&gt;
&lt;br /&gt;
SDS umí přijaté datové zprávy uchovat, v rámci následující tabulky. Toto je důležité zejména pokud různé zprávy přicházejí velice rychle za sebou, aby se pro SDS-C program neztratili.&lt;br /&gt;
&lt;br /&gt;
Nejvíce lze mít až 32 položek (řádků) v tabulce, nicméně některá SDS nemají ve své paměti dostatečné místo a počet je tedy omezen. Pozor na to při psaní programu !&lt;br /&gt;
&lt;br /&gt;
 sys[2209] 09 i R   počet řádků v tabulce pro dané SDS (různé SDS mají různě volnou paměť, proto je v nich i různý počet použitelných Subscribe položek)&lt;br /&gt;
&lt;br /&gt;
Jednotlivé položky v tabulce příchozích zpráv:&lt;br /&gt;
&lt;br /&gt;
 sys[2211] až sys[2241] &lt;br /&gt;
          09 s R   název položky (Topic Name) pro daný index #1 - #31&lt;br /&gt;
                   (max délka záznamu dle SDS)&lt;br /&gt;
 &lt;br /&gt;
 sys[2242] až sys[2249]   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2251] až sys[2281] &lt;br /&gt;
          09 s R   poslední přijatá hodnota (Value) ze publish zprávy ze brokeru pro daný index #1 - #31&lt;br /&gt;
                   (max délka záznamu dle SDS)&lt;br /&gt;
 &lt;br /&gt;
 sys[2282] až sys[2289]   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2291] až sys[2321] &lt;br /&gt;
          09 i R   timestamp (hodnota uptime) v okamžiku příchodu zprávy z Brokeru&lt;br /&gt;
                   (pro detekci změny - příchozí zprávy z Brokeru)&lt;br /&gt;
                   0 = zatím nic nepřišlo&lt;br /&gt;
                   1..MAX = hodnota uptime v okamžiku poslední změny&lt;br /&gt;
&lt;br /&gt;
Nastavení Topic názvů každé položky (tedy &amp;quot;zápis&amp;quot; do sys[2211] až sys[2241]) se provede funkcí mqtt_subscribe(), které zadáváte pozici v této tabulce a název Topicu. Pokud se Subscribe nepovede, zůstane pozice v tabulce prázdná. Po připojení k Brokeru je tabulka vždy zcela prázdná, a SDS-C program si ji vždy musí dle potřeby naplnit. Pokud Broker pošle aktualizaci obsahu (value) na některou z přihlášených Topic položek, které SDS v této tabulce má, tak SDS automaticky přepíše patřičný řádek tabulky (tj. obsah jednoho ze sys[2251] až sys[2281]) a patřičně aktualizuje časovou známku změny.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[2322] až sys[2398]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MODBUS-TCP klient ==&lt;br /&gt;
&lt;br /&gt;
Ověření FW v SDS:&lt;br /&gt;
&lt;br /&gt;
 sys[2399] 09 i R   podpora pro MODBUS TCP&lt;br /&gt;
                     0 = NE&lt;br /&gt;
                     1 = ANO (první verze implementace v SDS)&lt;br /&gt;
&lt;br /&gt;
Každé nové TCP spojení na server:&lt;br /&gt;
&lt;br /&gt;
 sys[2400] 09 i R   stav průběhu modbus_tcp_connect()&lt;br /&gt;
                     -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = pokus o TCP připojení selhal&lt;br /&gt;
                     -1 = nepoužito&lt;br /&gt;
                      0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                      1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                      2 = TCP připojeno, můžete komunikovat &lt;br /&gt;
&lt;br /&gt;
MODBUS funkce - každá má svůj nezávislý stavový údaj:&lt;br /&gt;
&lt;br /&gt;
 sys[2401] 09 i R   stav průběhu zpracování funkce 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
 sys[2402] 09 i R   stav průběhu zpracování funkce 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
 sys[2403] 09 i R   stav průběhu zpracování funkce 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
 sys[2404] 09 i R   stav průběhu zpracování funkce 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
 sys[2405] 09 i R   stav průběhu zpracování funkce 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
 sys[2406] 09 i R   stav průběhu zpracování funkce 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
 sys[2415] 09 i R   stav průběhu zpracování funkce 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
 sys[2416] 09 i R   stav průběhu zpracování funkce 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
                     pro všechny tyto stavy platí následující hodnoty:&lt;br /&gt;
                      -6 = timeout (neprovedeno), můžete volat další funkci&lt;br /&gt;
                      -5 = nespravne parametry (hodnoty), můžete volat další funkci&lt;br /&gt;
                      -4 = nespravne parametry (počet parametrů), můžete volat další funkci&lt;br /&gt;
                      -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                      -2 = SDS není připojeno (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                      -1 = bez aktivity, lze volat funkci&lt;br /&gt;
                       0 = provedeno OK (obdržena platná odpověď bez chybového kódu), můžete volat další funkci&lt;br /&gt;
                       1 .. 15 = obdržena odpověď s chybou 0x01 až 0x0F, můžete volat další funkci&lt;br /&gt;
                     256 = pracuji, čekejte na aktualizovanou hodnotu&lt;br /&gt;
&lt;br /&gt;
 sys[2417] až sys[2462]   reserved&lt;br /&gt;
&lt;br /&gt;
 sys[2463] 09 i R  poslední hodnota Unit Identifier zapsaná do MBAP hlavičky při odeslání zprávy&lt;br /&gt;
 &lt;br /&gt;
 sys[2464] 09 i R  poslední hodnota Transaction Identifier zapsaná do MBAP hlavičky při odeslání zprávy&lt;br /&gt;
&lt;br /&gt;
Přijatá data (funkce _read) - obsah je aktualizován pro každou novou přijatou MODBUS zprávu. Výsledky (přijatá data) jsou vždy uloženy do následujících sys (bez ohledu na typ MODBUS funkce).&lt;br /&gt;
&lt;br /&gt;
 sys[2465] 09 i R  timestamp poslední přijaté zprávy&lt;br /&gt;
                   (vhodné pro detekci nové přijaté zprávy)&lt;br /&gt;
 &lt;br /&gt;
 sys[2466] 09 i R  počet přijatých položek, pro poslední přijatou zprávu&lt;br /&gt;
                   (počet celých položek)&lt;br /&gt;
 &lt;br /&gt;
 sys[2467] 09 i R  přijatá hodnota Unit Identifier z příchozí MBAP hlavičky&lt;br /&gt;
                   (hodnota adresy je převzata z příchozí zprávy)&lt;br /&gt;
 &lt;br /&gt;
 sys[2468] 09 i R  přijatá hodnota Transaction Identifier z příchozí MBAP hlavičky&lt;br /&gt;
                   (hodnota adresy je převzata z příchozí zprávy) &lt;br /&gt;
 &lt;br /&gt;
 sys[2469] 09 i R  adresa první položky coil/input/register (které odpovídá údaj v sys[2470])&lt;br /&gt;
                   (MODBUS způsob číslování položek - adresa 1..n)&lt;br /&gt;
 &lt;br /&gt;
 sys[2470] až sys[2719]&lt;br /&gt;
          09 i R   přijaté hodnoty pro poslední přijatou zprávu&lt;br /&gt;
                    MODBUS funkce 0x01 a 0x02: každý sys[] má hodnotu 0 až 255, jednotlivé bity určují coils/input&lt;br /&gt;
                    MODBUS funkce 0x03 a 0x04: každý sys[] má hodnotu -32768 až 32767, tedy hodnotu pro každý jeden registr&lt;br /&gt;
&lt;br /&gt;
Pro funkce 0x01 a 0x02 jsou přijatá data kódována v jednobitovém tvaru, vždy po osmi bitech na jeden sys[]. Takže prvních osm bitů naleznete v sys[2465], dalších osm bitů v sys[2466] a tak dále.&lt;br /&gt;
&lt;br /&gt;
Pro funkce 0x03 a 0x04 jsou přijaté hodnoty registrů (MODBUS: vždy int16_t) uloženy postupně zasebou (tak jak přišli ve zprávě) do jednotlivých sys[], takže první registr je v sys[2465], druhý ve sys[2466] atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezerva&lt;br /&gt;
&lt;br /&gt;
 sys[2715] až sys[2809]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statistiky COMx ==&lt;br /&gt;
&lt;br /&gt;
COM1:&lt;br /&gt;
&lt;br /&gt;
 sys[2810] 09 i R   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2811] 09 i R   počet odeslaných bajtů (TX) na port COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2812] 09 i R   počet neodeslaných bajtů (zahozených) pro port COM1 &lt;br /&gt;
                    (tzn. SDS chce odeslat více bajtů než zvládá nastavená rychlost COM portu)&lt;br /&gt;
 &lt;br /&gt;
 sys[2813] 09 i R   počet čekajících bajtů na odeslání (TX) ve frontě pro port COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2814] 09 i R   počet přijatých bajtů (RX) na portu COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2815] 09 i R   počet nepřijatých bajtů (ignorované) pro port COM1 &lt;br /&gt;
                    (tzn. pro případ kdy do SDS je posláno více bajtů než SDS zpracuje, a tak musí zahazovat)&lt;br /&gt;
 &lt;br /&gt;
 sys[2816] 09 i R   počet nevyzvednutých přijatých bajtů (RX) ve frontě pro port COM1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezerva&lt;br /&gt;
&lt;br /&gt;
 sys[2817] až sys[2860]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
COM6:&lt;br /&gt;
&lt;br /&gt;
 sys[2861] 09 i R   počet odeslaných bajtů (TX) na port COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2862] 09 i R   počet neodeslaných bajtů (zahozených) pro port COM6&lt;br /&gt;
                    (tzn. SDS chce odeslat více bajtů než zvládá nastavená rychlost COM portu)&lt;br /&gt;
 &lt;br /&gt;
 sys[2863] 09 i R   počet čekajících bajtů na odeslání (TX) ve frontě pro port COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2864] 09 i R   počet přijatých bajtů (RX) na portu COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2865] 09 i R   počet nepřijatých bajtů (ignorované) pro port COM6&lt;br /&gt;
                    (tzn. pro případ kdy do SDS je posláno více bajtů než SDS zpracuje, a tak musí zahazovat)&lt;br /&gt;
 &lt;br /&gt;
 sys[2866] 09 i R   počet nevyzvednutých přijatých bajtů (RX) ve frontě pro port COM6&lt;br /&gt;
&lt;br /&gt;
Pro využití všech těchto statistik, je potřeba mít v SDS aktuální firmware (starší FW zde vrací nuly).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konec dokumentu ==&lt;br /&gt;
&lt;br /&gt;
'''Konec dokumentu.'''&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_sysp&amp;diff=968</id>
		<title>SDS-C: sdsc sysp</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS-C:_sdsc_sysp&amp;diff=968"/>
		<updated>2025-11-15T11:06:13Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&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;
 Zařízení Druhé Produktové Řady používají jazyk FULL-C (jiná část této Wiki).&lt;br /&gt;
&lt;br /&gt;
== Definice systémových proměnných SDS-C : pole sys[] ==&lt;br /&gt;
&lt;br /&gt;
Tzv. &amp;quot;systémová proměnná&amp;quot; je prvek v programovacím jazyku SDS-C, který má textový název, a se kterým se dá pracovat - číst hodnotu z proměnné a zapisovat hodnotu do proměnné. Často je čtení a zápis svázáno s fyzickou akcí (např. zápis do konkrétní systémové proměnné změní stav relé).&lt;br /&gt;
&lt;br /&gt;
SDS-C obsahuje celou řadu vyhrazených, předem pevně definovaných systémových proměnných. Tyto proměnné obsahují aktuální online informace a údaje, vzhledem ke stavu zařízení. Dá se jimi také zařízení (resp. periférie) přímo ovládat. Úplný seznam je právě na této stránce.&lt;br /&gt;
&lt;br /&gt;
Proměnné poskytované SDS-C a navázané na HW zařízení, jsou označeny jako '''sys[x]''', kde index '''x''' je číslo do 0 do 1023 (popřípadě až do 2048 ale to jen na určitých typech zařízení).&lt;br /&gt;
&lt;br /&gt;
Tyto proměnné lze číst, popř. do nich zapsat novou hodnotu. To vše můžete provést ve svém SDS-C programu, nebo přes některou z komunikačních funkcí (např. UDP protokolem, nebo přes webové rozhraní).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Legenda k tabulce:''&lt;br /&gt;
&lt;br /&gt;
Proměnná typu '''i''' je 32-bit signed integer (nejvyšší bit je znaménko, a zbývajících 31 bitů je číselná hodnota).&lt;br /&gt;
&lt;br /&gt;
Proměnná typu '''s''' je soubor znaků (string) - tj. '''text''' (řetězec znaků) - a tyto proměnné '''lze použít jen pro čtení'''.&lt;br /&gt;
&lt;br /&gt;
Některé proměnné lze jen číst ('''R'''), do některých lze kromě čtení i zapisovat ('''RW'''). &lt;br /&gt;
&lt;br /&gt;
Údaj '''XX''' v seznamu proměnných udává verzi firmware, kdy byla daná proměnná zavedena.&lt;br /&gt;
'''Význam hodnot:'''&lt;br /&gt;
* '''01''' - první verze, výchozí firmware ze začátku roku 2010&lt;br /&gt;
* '''02''' - druhá verze, bylo vydáno na přelomu roku 2010 a 2011&lt;br /&gt;
* '''03''' - třetí verze, tj. pouze pro firmware od 03.2011 &lt;br /&gt;
* '''04''' - čtvrtá verze, tj. pouze pro firmware od 06.2011 a novější&lt;br /&gt;
* '''05''' - pátá verze, tj. pouze pro firmware od 11.2011 a novější&lt;br /&gt;
* '''06''' - šestá verze, tj. pouze pro firmware od 03.2012 a novější&lt;br /&gt;
* '''07''' - sedmá verze, tj. pouze pro firmware od 07.2017 a novější&lt;br /&gt;
* '''08''' - osmá verze, tj. pouze pro firmware od 12.2018 a novější&lt;br /&gt;
* '''09''' - devátá verze, tj. pouze pro firmware od 06.2020 a novější&lt;br /&gt;
&lt;br /&gt;
Všechny proměnné označené jako rezerva mohou být v budoucích verzích firmware nějak využity. Pokud jsou však pro tuto verzi firmware označeny jako rezerva, pak se nesmí používat (zapisovat do nich, kvůli budoucí kompatibilitě). Při čtení obvykle vrací hodnotu nula, ovšem jakmile budou v novém firmware využity, už budou vracet konkrétní hodnotu.&lt;br /&gt;
&lt;br /&gt;
Pokud máte starší verzi firmware, je možné, že některé později přidané položky nebudou k dispozici. Řešením je udržovat firmware ve vašem zařízení vždy aktuální.&lt;br /&gt;
&lt;br /&gt;
Jazyk SDS-C indexuje všechny pole od čísla 0 (nula) - všechna pole, tj. &amp;quot;sys[]&amp;quot;, &amp;quot;ram[]&amp;quot;, &amp;quot;text[]&amp;quot;, začínají se svým obsahem od indexu nula.&lt;br /&gt;
&lt;br /&gt;
'''Pozor''' však na číslování hardware vstupů a výstupů, ty jsou číslovány dle &amp;quot;elektrikářských&amp;quot; zvyklostí, to znamená že číslování začíná od čísla '''1''' ('''jednička''') - toto ale nemá hlubší vliv na SDS-C.&lt;br /&gt;
&lt;br /&gt;
Pokud narazíte na takové zařízení SDS, které má ještě velmi starou verzí webového rozhraní, kde byly ještě některé vstupy číslovány od nuly, aktualizujte si toto zařízení aby používalo nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Důležité upozornění'''&lt;br /&gt;
&lt;br /&gt;
Protože SDS-C ''umí pracovat pouze a jen'' s '''32-bit signed''' integer čísly (tj. 1-bit znaménko a 31-bitů číslo, typ int32_t), tak dochází k (očekávané) konverzi '''32-bit unsigned''' čísel (tj. bez znaménka 32-bitů číslo, typ uint32_t) mezi vnitřními hodnotami v SDS a reprezentací v SDS-C (například když takové unsigned číslo je dotazováno například přes čtení &amp;quot;sys[]&amp;quot; hodnot).&lt;br /&gt;
&lt;br /&gt;
Jinýmy slovy - uvnitř SDS jsou drženy některé hodnoty jako 32-bit unsigned. Ale protože SDS-C pracuje pouze s 32-bit signed čísly, pak při čtení takových čísel zevnitř SDS jsou tyto čísla prezentovány v SDS-C jako 32-bit signed. Bitově se nezmění, jen se &amp;quot;mění&amp;quot; pohled na to, co který bit znamená, viz text dále.&lt;br /&gt;
&lt;br /&gt;
''Příklad:'' &lt;br /&gt;
Hodnota &amp;quot;sys[625]&amp;quot; reprezentuje &amp;quot;uplynulý čas od posledního zachyceného S0 impulsu na daném S0 vstupu&amp;quot;. Tato hodnota je udržována uvnitř SDS a program SDS-C k ní má přístup.&lt;br /&gt;
Tento čas je udán v milisekundách a začína na nule, a s každou milisekundou ze zvýší o jedničku. Protože SDS udržuje toto počítadlo (uvnitř své paměti) jako '''32-bit unsigned''', tak jakmile dojde k dopočítání do 31-bitů (tj. 2147483647) a překlopí se tedy 32. bit (tj. na 2147483648), tak SDS-C při čtení &amp;quot;sys[625]&amp;quot; vrátí zápornou hodnotu (tj. -2147483648). Toto je v pořádku - pokud si vypíšete jednotlivé bity, tak budou stále přesně odpovídat, ale tím že SDS-C interpetuje všechny čísla jako '''32-bit signed''', tak vzorovou hodnotu použije a zobrazí jako zápornou.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  skutečná binární hodnota         | 32-bit signed | 32-bit unsigned&lt;br /&gt;
  (32-bit)                         | SDS-C integer | (internal SDS)&lt;br /&gt;
 ----------------------------------+---------------+-----------------&lt;br /&gt;
  00000000000000000000000000000000 |             0 |               0&lt;br /&gt;
  00000000000000000000000000000001 |             1 |               1&lt;br /&gt;
  00000000000000001111111111111111 |         65535 |           65535&lt;br /&gt;
  01111111111111111111111111111111 |    2147483647 |      2147483647&lt;br /&gt;
  10000000000000000000000000000000 |   -2147483648 |      2147483648&lt;br /&gt;
  10000000000000000000000000000001 |   -2147483647 |      2147483649&lt;br /&gt;
  10000000000000001111111111111111 |   -2147418113 |      2147549183&lt;br /&gt;
  11111111111111111111111111111111 |            -1 |      4294967295&lt;br /&gt;
  11111111111111111111111111111110 |            -2 |      4294967294&lt;br /&gt;
  11111111111111111111111111111101 |            -3 |      4294967293&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, SDS vždy (ať ve svém firmware, tak v SDS-C kódu a proměnných) udržuje hodnoty ve stejném ''binárním'' obsahu. Jen interpretace a další práce s čísly je jiná. SDS samo vnitřně pracuje s '''32-bit unsigned''' hodnotami, a díky tomu na webu a všech M2M stránkách můžete vidět hodnoty v rozsahu od 0 do 4294967295. Zato SDS-C pracuje pouze se '''32-bit signed''' hodnotami, a proto stejné číslo je reprezentováno v rozsahu -2147483648 až 2147483647. Toto je vlastnost daná omezením implementace, zkrátka v SDS-C to nelze jinak udělat (pokud to je problém, což ale není, tak můžete přejít na zařízení s FULL-C které tyto omezení nemá).&lt;br /&gt;
&lt;br /&gt;
To lze snadno ve vašem SDS-C kódu ošetřit, a pokud pouze přenášíte hodnoty z SDS na server (přes HTTP-GET), tak se to dá snadno a ihned zpracovat na serveru &amp;quot;zpět&amp;quot; na '''32-bit unsigned''' hodnotu. Jednoduše na serveru přijmete '''signed''' číslo, a převedete ho například přetypování na '''unsigned''' číslo. Bity v paměti totiž jsou pro oba typy stejné.&lt;br /&gt;
&lt;br /&gt;
V tabulce jsou konkrétní &amp;quot;sys[]&amp;quot; položky, kterých se toto týká, označeny tímto symbolem: '''(!)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Použítí v SDS-C programu'''&lt;br /&gt;
&lt;br /&gt;
Zápis a čtení z/do systémových proměnných má okamžitý přímý vliv na hardware, se kterým jsou konkrétní proměnné svázány.&lt;br /&gt;
&lt;br /&gt;
Příklad zápisu v programu: jaká je teplota na čidle 1 (celé stupně Celsia)? &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 teplota0_ve_stupnich_C = sys[310] / 100;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ne vždy je potřeba provádět převody. Pokud např. chcete porovnat dvě hodnoty z různých teplotních čidel, můžete to udělat přímo (bez dělení 100 jako v předchozím příkladu) - samozřejmě toto platí pouze tehdy, pokud porovnáváte hodnoty ve stejných jednotkách:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if (sys[310] &amp;gt; sys[311]) { echo('Prvni cidlo je teplejsi nez druhe.'); };&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Příklad zápisu v programu: jak zapnu relé RE1? (musíte vědět &amp;quot;co&amp;quot; &amp;quot;kam&amp;quot; zapsat):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
sys[231] = 255; // v tomto okamžiku dojde k ovládnutí relé č. 1 (- viz index 231 dole v seznamu)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Můžete (od 03 verze SDS-C) použít i ''#define'', příklad:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define RELE1 sys[231]&lt;br /&gt;
&lt;br /&gt;
#define TEPLOTA sys[310]&lt;br /&gt;
&lt;br /&gt;
// ...&lt;br /&gt;
 &lt;br /&gt;
RELE1 = 255;&lt;br /&gt;
 &lt;br /&gt;
if (TEPLOTA &amp;gt; 3200) goto x;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole ram[] ==&lt;br /&gt;
&lt;br /&gt;
Pole '''ram[]''' je samostatné nezávislé pole, dostupné pro SDS-C program od verze č. 03 (a výše).&lt;br /&gt;
&lt;br /&gt;
Obsah pole ram[] je uložen samostatně v RAM paměti, a je při resetu zařízení ztracen.&lt;br /&gt;
&lt;br /&gt;
Obsah pole ram[] se nekryje s dalšími proměnnými programu a tak dále (je to zcela samostatné paměťové pole).&lt;br /&gt;
&lt;br /&gt;
Pole ram[] lze indexovat číslem nebo proměnnou. Příkladem:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
hodnota = ram[10];&lt;br /&gt;
&lt;br /&gt;
index = 23;&lt;br /&gt;
ram[index] = 15 * 2;&lt;br /&gt;
&lt;br /&gt;
index = sys[1023];&lt;br /&gt;
ram[index] = 30;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pole ram[] je indexováno od indexu nula (tj.: ram[0]). Celková velikost (maximální index) je dán verzí SDS-C a konkrétního firmware v zařízení. &lt;br /&gt;
&lt;br /&gt;
Verze SDS-C č. 03 má maximální velikost pole ram[] nastavenou na 128 položek. '''Novější verze už mají počet zvýšený ''' - verze č. 06 má velikost ram[] nastavenou na 512 položek (každá o velikosti int32_t).&lt;br /&gt;
&lt;br /&gt;
Pole ram[] můžete využít k čemukoliv co potřebujete. Také i pro některé SDS-C funkce, jako je ''http_get()'', která může do pole ram[] ukládat obsah textu obdrženého ze serveru (toto chování se nastavuje příslušnými sys[]), nebo při přenosu stránek z/do paměti DF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ukládání trvalých dat ==&lt;br /&gt;
&lt;br /&gt;
Všechny verze SDS-C mají od k dispozi prostor v oblasti sys[100] až sys[115]. Toto je výchozí oblast pro uchovávání trvanlivých dat (tyto údaje se neztratí při výpadku napájení). Přímým zápisem, do těchto sys[] položek, dojde k zápisu do pevné paměti. Čtení se provádí opět přímým přístupem do těchto sys[].&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. 05 je možno, navíc k tomuto základu, zapisovat a přečíst mnohem větší množství údajů v externím paměťovém chipu DATAFLASH (NVM = Non-Volatile Memory), osazeném na desce zařízení SDS, a to prostřednictvím čtyř SDS-C funkcí.&lt;br /&gt;
&lt;br /&gt;
Pozn. historické verze zařízení SDS-MICRO LIGHT, kde se používá paměť EEPROM (na místo novější DataFlash), poskytuje vždy pouze základní rozsah indexů: 100 až 115, a neposkytuje rozšířený rozsah pevné paměti (tak jako zařízení s pamětí DataFlash).&lt;br /&gt;
&lt;br /&gt;
Více informací, způsob použití a důležité varování je uvedeno na [[SDS-C: DataFlash|stránce ohledně DataFlash]].&lt;br /&gt;
&lt;br /&gt;
Další možnost:&amp;lt;br&amp;gt;&lt;br /&gt;
Zařízení SDS řady ST mají k dispozici, kromě podpory pro DataFlash, i možnost využít Zálohovanou paměť RAM (ta drží obsah i při vypnutém napájení SDS, pokud je v SDS vložena nabitá zálohovací baterie).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole text[] ==&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. '''06''' je možné v určité míře pracovat s texty. Toto má především využití v komunikaci přes sériovou linku (RS232/RS485) a při odesílání a příjmu dat (email, http) či práci s komunikačními moduly (GSM, LTE, LoRA).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je připraveno pole '''text[]'''. Detailní popis je [[SDS-C:_popis_jazyka#Pole_text.5B.5D|zde]].&lt;br /&gt;
&lt;br /&gt;
SDS-C je omezený programovací jazyk z hlediska &amp;quot;práce s textem&amp;quot;. Pokud potřebujete intenzivně s textem pracovat, použijte zařízení SDS které má FULL-C jazyk.&lt;br /&gt;
&lt;br /&gt;
I přes omezení SDS-C je možné připojit různé komunikační moduly (GSM, LTE, LoRA), které komunikují prostřednictvím textových příkazů (viz vzorové programy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pole share[] ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. '''08''' je možné použít pole '''share[]''', určené primárně pro sdílení textové informace mezi SDS-C programem a webovým rozhraním (tedy jako [[SDS-C:_sharing|sdílené proměnné]]).&lt;br /&gt;
&lt;br /&gt;
Práce s polem share[] je prakticky zcela shodná jako práce s polem text[]. Prakticky tak získává programátor dvě nezávislé pole pro uchování textu. Nicméně, některé SDS-C funkce vyhrazeně fungují jen s polem text[], ale to je vždy uvedeno v jejich popisu. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vyhrazené funkce ==&lt;br /&gt;
&lt;br /&gt;
Seznam konkrétních zabudovaných '''funkcí''' naleznete na [[SDS-C: sdsc sysf|jiné stránce]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Jednotné proměnné (pole sys[]) pro všechny výrobky řady SDS ==&lt;br /&gt;
&lt;br /&gt;
'''STAV SYSTÉMU'''&lt;br /&gt;
&lt;br /&gt;
 sys[0]   01 i R   &amp;quot;pair code&amp;quot; firmware (nastaven výrobcem napevno: identifikátor vázanosti firmware na hardware)&lt;br /&gt;
                    - lze využít pro rozeznání typu zařízení SDS, na kterém je spuštěn SDS-C program&lt;br /&gt;
 &lt;br /&gt;
 sys[1]   01 i R   počet přihlášených uživatelů do webového rozhraní (v okamžiku čtení této proměnné)&lt;br /&gt;
 &lt;br /&gt;
 sys[2]   01 s R   text SNMP-sysLocation, nastaveno ve webové administraci&lt;br /&gt;
 &lt;br /&gt;
 sys[3]   01 i R   hodnota '''UpTime10''' (doba běhu zařízení)&lt;br /&gt;
                    - počítá se od nuly (0) od každého zapnutí zařízení&lt;br /&gt;
                    - pouze 31 bitové počítadlo&lt;br /&gt;
                      (SDS si pro sebe interně počítá UpTime10 jako 32bit, nicméně&lt;br /&gt;
                       nejvyšší bit je odmaskován před předáním hodnoty do SDS-C programu)&lt;br /&gt;
                    - platné hodnoty: 0 až 2147483647 (včetně)&lt;br /&gt;
                    - po překročení 2147483647 (zde odpovídá up-time 248 dnů) začíná hodnota opět na nule&lt;br /&gt;
                    - jeden krok (zvýšení o jedničku) této hodnoty UpTime10 odpovídá právě '''10 msec''' uplynulému času &lt;br /&gt;
 &lt;br /&gt;
 sys[4]   01 i R   hodnota '''LOCAL''' času (UNIX čas, v sekundách)&lt;br /&gt;
                    - jedná se o lokální (eventuálně posunutý) čas, synchronizovaný se NTP serverem&lt;br /&gt;
                    - je zde už předem započítán GMT offset sys[26] (ten lze nastavit ve webovém rozhraní)&lt;br /&gt;
                    - je zde aplikován automatický posun letního času (je-li to povoleno ve webovém rozhraní)&lt;br /&gt;
                    - poskytnuto je pouze 31 bitové číslo (bude platné až do 19. leden 2038 včetně, &lt;br /&gt;
                      pak hodnota roluje na nulu - nejvyšší bit je odmaskován před předáním do SDS-C programu)&lt;br /&gt;
                    - platné hodnoty: 0 až 2147483647 (včetně)&lt;br /&gt;
 &lt;br /&gt;
 sys[5]   01 i R   rozpad LOCAL času: den (1 až 31)&lt;br /&gt;
 sys[6]   01 i R   rozpad LOCAL času: měsíc (1 až 12)&lt;br /&gt;
 sys[7]   01 i R   rozpad LOCAL času: rok (2011 a dále)&lt;br /&gt;
 sys[8]   01 i R   rozpad LOCAL času: hodina (0 až 23)&lt;br /&gt;
 sys[9]   01 i R   rozpad LOCAL času: minuta (0 až 59)&lt;br /&gt;
 sys[10]  01 i R   rozpad LOCAL času: sekunda (0 až 59)&lt;br /&gt;
 sys[11]  01 i R   rozpad LOCAL času: číslo dne v týdnu - počet dní od Neděle (0 až 6)&lt;br /&gt;
&lt;br /&gt;
'''Upozornění''': hodnota LOCAL času je platná až po úspěšném získání informací z NTP serveru. Po zapnutí (restartu) zařízení je NTP čas (sys[38], sys[4]) nastaven na nulu. Čas je automaticky v SDS aktualizován co jednu sekundu pomocí vnitřních hodin v SDS, a dále je hodnota času pravidelně (v delším intervalu) upřesněna dotazem na NTP server.&lt;br /&gt;
&lt;br /&gt;
V případě, že není zapnuta automatika DST (letní čas) a GMT offset je nastaven na nulu, tak je hodnota LOCAL času identická s NTP časem (UTC). Jakmile se ale nastaví offset nebo aktivuje posun letního času, už jsou tyto hodnoty odlišné (NTP je UTC, a LOCAL je místní (posunutý) čas). Pro různé použití je potřeba různých časů (často je potřeba UTC pro časové známkování údajů, a zase někdy je vhodný LOCAL pro interakci s uživatelem a pro různé výpisy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ethernet, Internet ==&lt;br /&gt;
&lt;br /&gt;
 sys[12]  01 i R   IP[0] adresa zařízení (nastaveno ve webové administraci)&lt;br /&gt;
 sys[13]  01 i R   IP[1] adresa zařízení&lt;br /&gt;
 sys[14]  01 i R   IP[2] adresa zařízení&lt;br /&gt;
 sys[15]  01 i R   IP[3] adresa zařízení&lt;br /&gt;
 &lt;br /&gt;
 sys[16]  01 i R   GW_IP[0] adresa brány (nastaveno ve webové administraci)&lt;br /&gt;
 sys[17]  01 i R   GW_IP[1] adresa brány&lt;br /&gt;
 sys[18]  01 i R   GW_IP[2] adresa brány&lt;br /&gt;
 sys[19]  01 i R   GW_IP[3] adresa brány&lt;br /&gt;
 &lt;br /&gt;
 sys[20]  01 i R   NETMASK[0] síťová maska (nastaveno ve webové administraci)&lt;br /&gt;
 sys[21]  01 i R   NETMASK[1] síťová maska&lt;br /&gt;
 sys[22]  01 i R   NETMASK[2] síťová maska&lt;br /&gt;
 sys[23]  01 i R   NETMASK[3] síťová maska&lt;br /&gt;
&lt;br /&gt;
 sys[24]  01 i R   stav rozhraní Ethernet (je spuštěno?)&lt;br /&gt;
                    == 0 : komunikace přes Ethernet není k dispozici (odpojený kabel, vypnutá protistrana nebo switch, atd.)&lt;br /&gt;
                    != 0 : Ethernetová komunikace je funkční (LINK OK)&lt;br /&gt;
 &lt;br /&gt;
 sys[25]  01 i R   rychlost připojení k síti Ethernet (hodnoty: 0, 10, 100)&lt;br /&gt;
                    == 0   : neznámá rychlost (není k dispozici Ethernet)&lt;br /&gt;
                    == 10  : 10 MBit per sec&lt;br /&gt;
                    == 100 : 100 MBit per sec&lt;br /&gt;
&lt;br /&gt;
 sys[26]  04 i RW  hodnota GMT offsetu pro NTP (nastaveno v administraci ve webovém rozhraní)&lt;br /&gt;
                    - platné hodnoty: -11 až 11 (včetně) (údaj v hodinách)&lt;br /&gt;
                    - zápis je možný, ale změněná hodnota (ze SDS-C) není uložena do pevné paměti &lt;br /&gt;
                      (po resetu zařízení se vráti na poslední uloženou hodnotu)&lt;br /&gt;
&lt;br /&gt;
 sys[27]  06 i R   platnost přidělené IP adresy zařízení SDS&lt;br /&gt;
                    == 0 : zařízení SDS nemá přidělenou platnou IP adresu (typický důvod: čeká se na DHCP)&lt;br /&gt;
                    != 0 : zařízení SDS má přidělenou platnou IP adresu a může komunikovat přes Ethernet&lt;br /&gt;
 &lt;br /&gt;
 sys[28]  06 i R   poslední okamžik kdy byla změněna IP adresa,&lt;br /&gt;
                   buď ručně z webového rozhraní (administrace) nebo DHCP serverem (je-li DHCP zapnuto)&lt;br /&gt;
                    - údaj odpovídá stavu UpTime10 (1 krok = 10 msec) v daný okamžik&lt;br /&gt;
 &lt;br /&gt;
 sys[29]  06 i R   DHCP: stav (lze použít pro kontrolu správné funkce DHCP klienta v SDS)&lt;br /&gt;
                    == 0 : v klidu (nic se neprovádí, nebo DHCP je vypnuté)&lt;br /&gt;
                    == 1 : odesláno DHCP DISCOVER&lt;br /&gt;
                    == 2 : obdrženo DHCP OFFER&lt;br /&gt;
                    == 3 : odesláno DHCP REQUEST&lt;br /&gt;
                    == 4 : obdrženo DHCP ACK&lt;br /&gt;
                    == 5 : IP adresa je přidělena (BOUND)&lt;br /&gt;
                    == 6,7,8,9,10,11 : zpracování DHCP RENEW&lt;br /&gt;
 &lt;br /&gt;
 sys[30]  06 i R   aktuální hodnota &amp;quot;DHCP Lease Time&amp;quot;&lt;br /&gt;
                    - hodnota je nastavena v okamžiku DHCP BOUND (při přidělení (nové) IP adresy)&lt;br /&gt;
                    - hodnota je každou 1 sec snížena o jednotku (když dojde na nulu, klient začne obnovovat IP adresu)&lt;br /&gt;
                    - údaj je uveden v jednotkách [sec]&lt;br /&gt;
&lt;br /&gt;
 sys[31]  04 i R   MAC[0] (celá MAC je nastavena ve webovém rozhraní)&lt;br /&gt;
 sys[32]  04 i R   MAC[1] &lt;br /&gt;
 sys[33]  04 i R   MAC[2] &lt;br /&gt;
 sys[34]  04 i R   MAC[3] &lt;br /&gt;
 sys[35]  04 i R   MAC[4] &lt;br /&gt;
 sys[36]  04 i R   MAC[5] (vždy je vyplněno dolních 8 bitů)&lt;br /&gt;
&lt;br /&gt;
 sys[37]  06 i R   NTP Client Status (synchronizace času)&lt;br /&gt;
                    == 0 : nesynchronizováno&lt;br /&gt;
                    == 1 : úspěšně přijal paket od NTP Serveru&lt;br /&gt;
               W   zápis hodnoty 10 (přesně a pouze: 10) do tohoto indexu vyvolá nucený NTP dotaz &lt;br /&gt;
                   (dotaz se odešle za 10sec od takovéhoto zápisu)&lt;br /&gt;
 &lt;br /&gt;
 sys[38]  07 i R   čistý UTC čas - v sekundách (UNIX Epoch čas)&lt;br /&gt;
                    - není zde aplikován offset, ani automatika letního času&lt;br /&gt;
                    - přímá hodnota získaná z NTP serveru (tj. jeho odpověď), &lt;br /&gt;
                      uvnitř SDS je sice udržována jako 32bit, &lt;br /&gt;
                      ale do SDS-C programu je hodnota předána jen jako 31bit číslo (nejvyšší 32.bit je odmaskován).&lt;br /&gt;
 &lt;br /&gt;
 sys[39]  07 i R   stav automatiky přepínání Letního Času&lt;br /&gt;
                    == 0 : automatika zakázána, lokální čas není ovlivněn&lt;br /&gt;
                    == 1 : automatika povolena, ale v současné době (podle NTP UTC času) je letní čas neaktivní (tzn. je &amp;quot;SEČ&amp;quot;).&lt;br /&gt;
                    == 2 : automatika povolena, a v současné době (podle NTP UTC času) je letní čas aktivní (tzn. je &amp;quot;SELČ&amp;quot;).&lt;br /&gt;
                           (tzn. do sys[4] je připočten nejen offset ze sys[26], ale teď také plus 1 hodina kvůli SELČ).&lt;br /&gt;
          09 i W   pouze pro případ vypnutého NTP: ruční ovládání automatiky (tzn. povolena nebo nepovolena) (SELČ pak automatika sama rozhodne, je-li povolena)&lt;br /&gt;
                    zápis 0 : vypnout automatiku (nebude pracovat = nebude aplikoval posun pro SELČ pro nastavený rozsah v roce), sys[39] pak vrátí 0 při čtení&lt;br /&gt;
                    zapis 3 : zapnout automatiku (automatika aplikuje posun pro SELČ podle toho jaký je aktuální čas a datum), sys[39] pak vrátí 1 nebo 2 dle stavu  &lt;br /&gt;
 &lt;br /&gt;
 sys[138] 09 i R   stav RTC (záloha času - pouze SDS se záložní baterií)&lt;br /&gt;
                   zatím stále 0, tzn. nepoužito, další obsah se chystá (nový FW)&lt;br /&gt;
 &lt;br /&gt;
 sys[139] 09 i R   vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Princip funkce automatiky letního času je popsán jinde na této wiki. Funkce automatiky je samozřejmě volitelná (viz: ruční nastavení ve webovém rozhraní).&lt;br /&gt;
&lt;br /&gt;
 sys[40] až sys[44]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Provozní údaje ==&lt;br /&gt;
&lt;br /&gt;
 sys[45]  06 i R   relativní čas v milisekundách, počítaný od zapnutí zařízení (tj. UpTime1)&lt;br /&gt;
                    - po resetu zařízení začíná vždy počítat od nuly&lt;br /&gt;
                    - každou milisekundu se zvýší o 1 (narozdíl od UpTime10);&lt;br /&gt;
                      tzn. toto je velmi podobná hodnota jako UpTime, ale je v jiných jednotkách!&lt;br /&gt;
                    - pro sys[45] je k dispozici 31 bitů,&lt;br /&gt;
                      takže po 2147483648 msec dojde k vynulování sys[45] a počítá se opět od nuly nahoru&lt;br /&gt;
                      (pozn.: SDS si interně udržuje hodnotu jako 32bitů, ale do SDS-C programu se předává jen 31bitů).&lt;br /&gt;
&lt;br /&gt;
 sys[46]  06 i R   &amp;quot;surová&amp;quot; (raw) hodnota teploty SoC chipu (není to přímo teplota v degC, ale speciální digitální hodnota),&lt;br /&gt;
                   význam hodnot závisí na typu konkrétního zařízení SDS. &lt;br /&gt;
                   Je to dáno způsobem měření této teploty, a převod na stupně Celsia je jednoduchý, přes vzorec.&lt;br /&gt;
 &lt;br /&gt;
 SDS MICRO (LM), MACRO (LM), UPS, IO6 (LM): &lt;br /&gt;
  Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = ((5*(59-30*((3/1024)*sys[46])))/2) ]&lt;br /&gt;
 &lt;br /&gt;
 SDS TTCPRO, MINI, MACRO-ST, MICRO-ST, IO6-ST: &lt;br /&gt;
  Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = (((((sys[46]/4096)*3.3)-0.76)/0.0025)+25) ]&lt;br /&gt;
&lt;br /&gt;
Teplota SoC je pouze orientační, a je měřena s přesností +/- 5 degC.&lt;br /&gt;
&lt;br /&gt;
 sys[137] 09 i R   POUZE VARIANTY &amp;quot;ST&amp;quot; - počet provedených cyklů procesoru (provedených CPU instrukcí) od zapnutí/restartu &lt;br /&gt;
                   (při přetečení 2^31 počítá opět od nuly, pořád dokola)&lt;br /&gt;
&lt;br /&gt;
Hodnota v indexu 137 je nejjemnější možný &amp;quot;časovač&amp;quot;, dostupný pro program. Délka kroku jednotky odpovídá frekvenci jádra (ta je různá pro jednotlivá SDS, pro řadu ST typicky 120MHz, tedy 1 krok je 8.3nsec). &lt;br /&gt;
Tento index vyžaduje aktuální FW (11/2022 nebo novější).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rozhraní sériové komunikace ==&lt;br /&gt;
&lt;br /&gt;
SDS-C poskytuje přístup k sériovému rozhraní COM1 a COM6. Pouze rozhraní COM1 je také současně přístupno přes převodník Eth/UART (VCP). Program v SDS-C může přistupovat jak ke COM1, tak ke COM6.&lt;br /&gt;
&lt;br /&gt;
Pomocí SDS-C lze zapisovat do sériového rozhraní, a číst data ze sériového rozhraní. Data, přicházející z venku do zařízení SDS, jsou ukládána do příslušného bufferu (RX FIFO), takže lze pomocí SDS-C programu číst i pomaleji, než je rychlost příchozích dat. Buffery jsou malé (zhruba 1kB), proto je potřeba data zpracovávat rychle a včas, ať nedojde k jejich ztrátě.&lt;br /&gt;
&lt;br /&gt;
Poznámka: čtení z UART RX bufferů je k dispozci jen od verze SDS-C č. '''04''' (včetně) a výše. &lt;br /&gt;
Poznámka: UART buffery (pro obě sériové rozhraní) jsou neustále aktivní a příjem dat z UARTu probíhá po celou dobu zapnutí zařízení.&lt;br /&gt;
&lt;br /&gt;
Rozhraní COM1:&lt;br /&gt;
&lt;br /&gt;
 sys[48]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM1 prázdný. Možné hodnoty:&lt;br /&gt;
                    == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)&lt;br /&gt;
                    == 1 : RX buffer je '''prázdný''' (nebyl přijat znak od posledního vyprázdnění bufferu)&lt;br /&gt;
 &lt;br /&gt;
 sys[49]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM1&lt;br /&gt;
                    - čtením tohoto sys[49] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici), &lt;br /&gt;
                      takže si dejte '''pozor''' protože po vyjmutí už tento znak v bufferu samozřejmě není ! &lt;br /&gt;
                      (Toto může způsobit nezkušenému programátorovi potíže). &lt;br /&gt;
                      Proto je vhodnější čtení ze sys[49] provést vždy jednou do vlastní proměnné, &lt;br /&gt;
                      a s tou pak dále dle libosti pracovat.&lt;br /&gt;
                   Možné hodnoty: &lt;br /&gt;
                    == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)&lt;br /&gt;
                    == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)&lt;br /&gt;
&lt;br /&gt;
Poznámka: UART-COM1 buffer je '''vymazán vždy tehdy''', když se připojí TCP klient k převodníku Eth/UART - pozor!&lt;br /&gt;
&lt;br /&gt;
 sys[50]  02 i R   je připojen klient (Ethernet) k převodníku Eth/UART ?&lt;br /&gt;
                    == 0 : není připojen klient&lt;br /&gt;
                    != 0 : je připojen klient (přes TELNET port)&lt;br /&gt;
 sys[51]  02 i R   rychlost [bps] rozhraní UART - COM1 (viz převodník Eth/UART)&lt;br /&gt;
 sys[52]  02 i R   počet datových bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 5,6,7,8)&lt;br /&gt;
 sys[53]  02 i R   počet stop bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 1,2)&lt;br /&gt;
 sys[54]  02 i R   nastavení paritního bitu rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)&lt;br /&gt;
&lt;br /&gt;
Poznámka: parametry sériového rozhraní UART COM1 lze nastavit v rámci převodníku Ethernet/UART (přes RFC příkazy), nebo pomocí k tomu určené SDS-C funkce. Pozor, nastavení '''nelze''' změnit přímým zápisem hodnoty do sys[50] až sys[54] (ty jsou pouze pro čtení).&lt;br /&gt;
&lt;br /&gt;
Rozhraní COM6:&lt;br /&gt;
&lt;br /&gt;
 sys[55]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM6 prázdný. Možné hodnoty:&lt;br /&gt;
                    == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)&lt;br /&gt;
                    == 1 : RX buffer je '''prázdný''' (nebyl přijat znak od posledního vyprázdnění bufferu)&lt;br /&gt;
 &lt;br /&gt;
 sys[56]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM6&lt;br /&gt;
                    - čtením tohoto sys[56] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici)&lt;br /&gt;
                   Možné hodnoty: &lt;br /&gt;
                    == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)&lt;br /&gt;
                    == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)&lt;br /&gt;
&lt;br /&gt;
 sys[57]  02 i R   rychlost [bps] rozhraní UART - COM6 &lt;br /&gt;
 sys[58]  02 i R   počet datových bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 5,6,7,8,9)&lt;br /&gt;
 sys[59]  02 i R   počet stop bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 1,2)&lt;br /&gt;
 sys[60]  02 i R   nastavení paritního bitu rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)&lt;br /&gt;
&lt;br /&gt;
Rozhraní UART - COM6 je k dispozici jen na SDS-MINI, SDS-MICRO-ST a SDS-MACRO-ST, a je přístupné jen z SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Doplňující statistiky (počty rx/tx bajtů atd.) jsou k dispozici na indexu 2800+, viz dále na této stránce (dostupnost těchto údajů je závislá na instalovaném aktuálním FW ve vašem SDS).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generátor náhodných čísel ==&lt;br /&gt;
&lt;br /&gt;
 sys[61]  06 i R   generátor náhodných čísel&lt;br /&gt;
                    - při každém přečtení sys[61] je poskytnuto náhodné číslo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výsledek převodu textu na číslo ==&lt;br /&gt;
&lt;br /&gt;
Pro převod textu (z určené pozice pole ''text'' či ''share'') na číslo se používá funkce SDS-C: ''atoi''. Aby bylo možné výsledek převodu získat, musíte si jej přečíst ze ''sys[62]''.&lt;br /&gt;
&lt;br /&gt;
 sys[62]  06 i RW  výsledek převodu provedeného funkcí '''atoi(text[index]);'''&lt;br /&gt;
&lt;br /&gt;
Pro více informací se podívejte přímo na návod k této funkci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Nastavení rychlosti provádění SDS-C programu ==&lt;br /&gt;
&lt;br /&gt;
SDS-C program může ovlivnit rychlost svého vykonávání. Buď se každá instrukce provede právě s minimálním krokem co 1 msec, nebo se dá tato (často žádoucí) vlastnost snadno vypnout. Pozor, hodnota 1 msec není vždy garantována, např. při zavolání funkce která pracuje s pomalou periférií dojde k čekání, dokud se požadovaná funkce nedokončí.&lt;br /&gt;
&lt;br /&gt;
 sys[63]  04 i RW  vypnutí rychlostního omezení běhu programu, nastavte na:&lt;br /&gt;
                    == 0   : (výchozí hodnota po spuštění programu) - jeden celý příkaz se provede '''co 1 msec'''&lt;br /&gt;
                    == 128 : program je prováděn s co největší rychlostí (bez zarovnávacího 1 msec kroku) &lt;br /&gt;
                             ( pozor ale na realizaci čekacích smyček, pak lze použít jen k tomu určené SDS-C funkce nebo sys[64] )&lt;br /&gt;
&lt;br /&gt;
Poznámka: všechny SDS-C programy jsou ve výchozím stavu spouštěny se sys[63] = '''0''' (tzn. jeden celý příkaz programu je vykonán právě co 1 msec).&lt;br /&gt;
&lt;br /&gt;
Tohoto faktu (krok 1 msec) některé programy využívají k realizaci čekacích smyček, když se předpokládá jeden vykonaný příkaz za 1 msec. Není to však vhodné, protože SDS nedává garanci že se vždy bude jednat přesně o 1 msec (může docházet k náhodnému zdržení až o několik msec, v záležitosti na ostatní činnost systému). Pokud však vypnete toto rychlostní omezení, tak takové případné čekací smyčky přestanou plnit svou funkci (prakticky skončí mnohem dříve): proto ve svých programech používejte pouze k realizaci &amp;quot;čekání&amp;quot; pouze k tomu určené funkce, nebo případně sys[64] nebo některý z UpTime indexů či sys[137] atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Časování ==&lt;br /&gt;
&lt;br /&gt;
Pro přesnější časování programu, popř. pro spuštění nějaké události po přesně daném intervalu, lze s výhodou využít následující proměnnou:&lt;br /&gt;
&lt;br /&gt;
 sys[64]  01 i RW  sekundový odpočítávač &lt;br /&gt;
                    - zapište libovolné kladné číslo, a systém každou vteřinu toto číslo sníží o 1, &lt;br /&gt;
                      až do nuly, kde v sys[64] zůstane nula (dokud tam zase něco nezapíšete)&lt;br /&gt;
                    - nejvyšší možná použitelná hodnota: (31-bitů) 2147483647 secs (včetně)&lt;br /&gt;
&lt;br /&gt;
Samozřejmě lze využít i jiné způsoby, ale tento je k tomu explicitně určen, vyhovuje-li hrubý krok 1 sekunda. Pro jemnější časování jsou pak vhodnější indexy s UpTime hodnotou, nebo sys[137] pro nejvíce jemné čekání - tyto indexy ale nemají funkci odpočítávání (jsou jen pro čtení), takže hlídání obsahu si už musíte řešit sami ve svém programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OSI7 funkce ==&lt;br /&gt;
&lt;br /&gt;
OSI7 funkce jsou určeny pro komunikaci mezi SDS a vnějším světem připojeným přes Ethernet (např. se servery v Internetu).&lt;br /&gt;
&lt;br /&gt;
Všechny funkce OSI7 poskytují průběžný stav své činnosti:&lt;br /&gt;
 sys[65]  01 i R   status code - hlášení průběhu, úspěšnosti, nebo chyby OSI7 funkcí (DNS, HTTP-GET, email, ...)&lt;br /&gt;
                    - význam hodnot viz [[OSI7_status_code|popis zde]]&lt;br /&gt;
&lt;br /&gt;
Poznámka: vždy je doporučeno, po zavolání kterékoliv OSI7 funkce, provést v programu čekání na skončení této funkce. Čekání má kontrolovat právě hodnotu v sys[65], a dokud se tato proměnná nenaplní výsledkem, nevolejte další OSI7 funkci.&lt;br /&gt;
&lt;br /&gt;
DNS resolv: sestavením IP[0].IP[1].IP[2].IP[3] získáte IP adresu (napr. 10.0.0.8) z DNS po úspěšném návratu z funkce DNS resolveru. Tato získaná IP adresa pak může sloužit pro různé účely, např. pro kontrolu DNS serveru jestli žije atd.&lt;br /&gt;
 sys[66]  01 i R   bajt IP[0] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[67]  01 i R   bajt IP[1] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[68]  01 i R   bajt IP[2] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
 sys[69]  01 i R   bajt IP[3] - vystup DNS resolveru, funkce ''dns_resolv(&amp;quot;dotazovanadomena.cz&amp;quot;);''&lt;br /&gt;
&lt;br /&gt;
Pro funkci DNS resolveru je potřeba provést konfiguraci (přes webové rozhraní).&lt;br /&gt;
 sys[70]  01 i R   bajt DNS_R_IP[0] - adresa samotného DNS resolveru (DNS server)&lt;br /&gt;
 sys[71]  01 i R   bajt DNS_R_IP[1] - adresa samotného DNS resolveru&lt;br /&gt;
 sys[72]  01 i R   bajt DNS_R_IP[2] - adresa samotného DNS resolveru&lt;br /&gt;
 sys[73]  01 i R   bajt DNS_R_IP[3] - adresa samotného DNS resolveru&lt;br /&gt;
&lt;br /&gt;
 sys[74]  01 s R   text, reserved (v této verzi nepoužito)&lt;br /&gt;
&lt;br /&gt;
Rozšířená funkcionalita pro DNS resolver (pouze ve FW od 11/2025):&lt;br /&gt;
&lt;br /&gt;
 sys[303]  09 i R   DNS RESOLV - (read:) actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done or finished yet)&lt;br /&gt;
 sys[303]  09 i W   DNS RESOLV - write anything to clear the DNS cache&lt;br /&gt;
 sys[304]  09 i R   DNS RESOLV - (read:) timestamp (UTC) of the latest DNS server response (packet) as requested by dns_resolv() function (if 0 then no response received, or cache has expired)&lt;br /&gt;
 sys[305]  09 i R   DNS RESOLV - (read:) get the last set hard TTL limit (0 = invalid (will use 1209600 as default), otherwise 1..MAX = time in seconds)&lt;br /&gt;
 sys[305]  09 i W   DNS RESOLV - set the hard TTL value limit (in seconds)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HTTP GET:&lt;br /&gt;
&lt;br /&gt;
 sys[75]  01 i R   návratový kód webového serveru pro HTTP GET (odpověď z webového serveru)&lt;br /&gt;
                    - nastaveno po dokončení práce funkce '''http_get()'''&lt;br /&gt;
                    - např. číslo '''200''' pro 'OK', '''404''' pro 'not found', a tak dále.&lt;br /&gt;
 &lt;br /&gt;
 sys[76]  03 i RW  číslo portu který chcete aby HTTP klient použil (výchozí hodnota po startu je '''80''')&lt;br /&gt;
                    - '''pozn.''' hodnota tohoto sys[76] se přebere v okamžiku zavolání '''http_get''',&lt;br /&gt;
                      pozdější zápisy mají vliv až zase v okamžiku dalšího zavolání '''http_get'''.&lt;br /&gt;
 &lt;br /&gt;
 sys[77]  04 i RW  ukládat data přijatá z HTTP serveru po obdržení odpovědi na HTTP GET požadavek&lt;br /&gt;
                   do pole ram[]. Tato funkce je výhodná pro okamžité řízení SDS-C programu. &lt;br /&gt;
                   Nastavte na:&lt;br /&gt;
 &lt;br /&gt;
                    == 0 : jakékoliv přijaté data jsou '''zahozena''', &lt;br /&gt;
                           neuloží se (nedojde ke změně obsahu ram[] nebo text[])&lt;br /&gt;
 &lt;br /&gt;
                    == 1 : prvních sys[78] bajtů odpovědi je vloženo do pole ram[] v rozsahu ram[1] až ram[sys[78]]&lt;br /&gt;
                           a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).&lt;br /&gt;
                           (tzn. původní obsah této oblasti pole ram[] je přepsán)&lt;br /&gt;
                           (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], &lt;br /&gt;
                            bude zápis přerušen a přijatý 0x00 nebude uložen)&lt;br /&gt;
 &lt;br /&gt;
                    == 2 : prvních sys[78] bajtů odpovědi je vloženo do pole text[] v rozsahu text[0] až text[sys[78]]&lt;br /&gt;
                           a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).&lt;br /&gt;
                           (tzn. původní obsah této oblasti pole text[] a položka ram[0] je přepsán)&lt;br /&gt;
                           (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], &lt;br /&gt;
                            bude zápis přerušen a přijatý 0x00 nebude uložen)&lt;br /&gt;
 &lt;br /&gt;
                   Hodnota do ram[0] je vždy zapsaná, ať je sys[77] jakékoliv. Počítejte s tím ve svém programu !&lt;br /&gt;
 &lt;br /&gt;
 sys[78]  04 i RW  počet bajtů, které CHCETE uložit do ram[] nebo text[] po přijetí HTTP GET odpovědi&lt;br /&gt;
                    - výchozí hodnota je '''32''' (tzn. uloží se 32 znaků + samostatně délka do ram[0])&lt;br /&gt;
                    - maximální hodnota je omezena velikostí pole ram[] nebo text[]&lt;br /&gt;
                    - pozor! pokud zapíšete '''0''', budou všechna data zahozena, &lt;br /&gt;
                      ale i v takovém případě dojde k přepisu ram[0] (viz výše)&lt;br /&gt;
&lt;br /&gt;
 sys[79] až sys[80]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Pozor, v případě nenulového sys[77] HTTP klient čeká tak dlouho, dokud nedostane všech sys[78] bajtů odpovědi z protistrany. To je častou příčinou &amp;quot;problémů&amp;quot; kdy protistrana neodpoví dostatečně dlouhou odpovědí, a klient má stále otevřené spojení a stále čeká a čeká... až dojde na timeout. Což je pak potřeba důsledně a správně ošetřit ve vašem SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
Pro funkci SMTP je potřeba provést konfiguraci (přes webové rozhraní):&lt;br /&gt;
 sys[81]  01 i R   bajt SMTP_S_IP[0] - adresa SMTP serveru (je použita pro funkci '''smtp_send()''')&lt;br /&gt;
 sys[82]  01 i R   bajt SMTP_S_IP[1] - adresa SMTP serveru&lt;br /&gt;
 sys[83]  01 i R   bajt SMTP_S_IP[2] - adresa SMTP serveru&lt;br /&gt;
 sys[84]  01 i R   bajt SMTP_S_IP[3] - adresa SMTP serveru&lt;br /&gt;
&lt;br /&gt;
 sys[85] až sys[88]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Informace z ('''interní''') ICMP PING funkcionality &amp;quot;IP Watchdog&amp;quot; (konfigurace a ovládání přes webové rozhraní SDS) (nemá souvislost s SDS-C funkcí &amp;quot;ping()&amp;quot; ) :&lt;br /&gt;
&lt;br /&gt;
 sys[89]  06 i R   IP-Watchdog: stav&lt;br /&gt;
                    == 0 : není v provozu (neaktivováno ve webovém rozhraní)&lt;br /&gt;
                    != 0 : v provozu (uživatel aktivoval IP-Watchdog ve webovém rozhraní)&lt;br /&gt;
 &lt;br /&gt;
 sys[90]  06 i R   IP-Watchdog: poslední známé RTT&lt;br /&gt;
                    == 0 .. 65533 : hodnota RTT v msec&lt;br /&gt;
                    &amp;gt;= 65534      : hodnota není k dispozici (nebyl obdržen PING response)&lt;br /&gt;
 &lt;br /&gt;
 sys[91]  06 i R   IP-Watchdog: stav výstupu&lt;br /&gt;
                    == 0 : výstup není aktivován&lt;br /&gt;
                    != 0 : výstup je aktivován (nebyl obdržen PING response podle zadaných požadavků)&lt;br /&gt;
&lt;br /&gt;
Informace z (SDC-C) ICMP PING funkce - '''ping()''' :&lt;br /&gt;
&lt;br /&gt;
 sys[92]  04 i R   stav ICMP PING RESPONSE v okamžiku čtení tohoto sys[92] &lt;br /&gt;
                    == 0 : klid (není odeslán paket, nečekám na odpověď), &lt;br /&gt;
                           popř. byla zadána neplatná IP adresa do funkce '''ping()''' a proto se nic neodešle&lt;br /&gt;
                    == 1 : funkce '''ping()''' byla právě zavolána, &lt;br /&gt;
                           takže se teprve chystá provést svou činnost, zatím se neví výsledek odesílání&lt;br /&gt;
                    == 2 : čeká se na odpověď od ARP &lt;br /&gt;
                           (POZOR! Znamená to že místo ICMP PING REQUEST paketu byl odeslán ARP paket, &lt;br /&gt;
                           protože v ARP tabulce nebyl příslušný záznam)&lt;br /&gt;
                    == 4 : poslán ECHO REQUEST, čekám na ECHO REPLY &lt;br /&gt;
                          (požadovaný stav, funkce '''ping()''' funguje ok)&lt;br /&gt;
                    == 8 : právě obdržel ECHO REPLY &lt;br /&gt;
                          (byla přijata odpověď od vzdáleného zařízení)&lt;br /&gt;
 &lt;br /&gt;
 sys[93]  04 i R   PING SEQ number &lt;br /&gt;
                    - hodnota je nastavena na '''-1''' dokud není přijata odpověď ICMP PING RESPONSE &lt;br /&gt;
                      na ICMP PING REQUEST odeslaný funkcí '''ping()'''&lt;br /&gt;
 &lt;br /&gt;
 sys[94]  04 i R   Round Trip Time, v milisekundách&lt;br /&gt;
                    - dokud není přijata platná ICMP PING RESPONSE tak je zde hodnota '''0xFFFF'''&lt;br /&gt;
                    - čas je zvyšován po pěti milisekundách (údaj v sys[94] je přímo v msec, např. hodnota 55 znamená 55 msec)&lt;br /&gt;
&lt;br /&gt;
Pozn.: ICMP Quench (32bit) je sestaven z &amp;quot;identifier&amp;quot; (16bit) a z &amp;quot;sequence number&amp;quot;. Pomocí sys[93] můžete nastavit '''číslo sekvence''' na libovolnou hodnotu, přičemž hodnota &amp;quot;identifier&amp;quot; je napevno nastavena na &amp;quot;'''0x0280'''&amp;quot; .&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkce '''send_udp()''':&lt;br /&gt;
&lt;br /&gt;
 sys[95]  06 i R   výsledek posledního volání '''send_udp()'''&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : nic neprovedeno&lt;br /&gt;
                           Hodnota '''0''' je nastavena po startu SDS-C programu&lt;br /&gt;
                    == 1 : právě bylo zahájeno odesílání paketu (provádí se)&lt;br /&gt;
                           nastaveno okamžitě po jakémkoliv zavolání '''send_udp()'''.&lt;br /&gt;
                    == 2 : byl odeslán UDP paket, úspěšně&lt;br /&gt;
                           Hodnota '''2''' je nastavena až v okamžiku úspěšného skutečného odeslání UDP paketu&lt;br /&gt;
                    == 3 : nebyl odeslán UDP paket, protože byl místo toho odeslán ARP dotaz &lt;br /&gt;
                           Hodnota '''3''' je nastavena, pokud není známá MAC pro zadanou IP &lt;br /&gt;
                           a byl tedy místo požadovaného UDP paketu odeslán ARP dotaz&lt;br /&gt;
                    == 4 : zavolali jste funkci '''send_udp()''' dříve, &lt;br /&gt;
                           než byla dokočena činnost předchozího požadavku &lt;br /&gt;
                           (sledujte hodnotu sys[95] a správně ji vyhodnocujte, a nestane se vám to)&lt;br /&gt;
                    == 5 : byly zadány neplatné parametry (neplatná IP, nebo port, nebo index či délka dat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Funkce '''snmp_send_trap()''':&lt;br /&gt;
&lt;br /&gt;
 sys[96]  06 i R   výsledek posledního volání '''snmp_send_trap()'''&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : odesílání neprobíhá&lt;br /&gt;
                    == 1 : probíhá odesílání, výsledek ještě není znám&lt;br /&gt;
                    == 2 : odeslání se povedlo &lt;br /&gt;
                    == 3 : odeslání se nepovedlo (neplatné parametry při zavolání funkce)&lt;br /&gt;
                    == 4 : odeslání se nepovedlo (není známý ARP záznam pro udanou host IP)&lt;br /&gt;
                    == 5 : odeslání se nepovedlo (právě pracuje (odesílá své data) některá jiná funkce, např. http_get)&lt;br /&gt;
&lt;br /&gt;
 sys[97]           RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Zápis textu do pole, Porovnání textů ==&lt;br /&gt;
&lt;br /&gt;
Položka ''sys[98]'' je využita více SDS-C funkcemi, přičemž všechny tyto funkce pracují s polem ''text[]''.&lt;br /&gt;
&lt;br /&gt;
 sys[98]     i R   společné využití viz (1) a (2)&lt;br /&gt;
 &lt;br /&gt;
          06 i R   (1) číslo indexu do pole ''text[]'' kam byla zapsána terminační 0x00,&lt;br /&gt;
                       tj. ukazatel kde byl aktuální konec zápisu do pole ''text[]'', &lt;br /&gt;
                       což je hodnota užitečná pro navázání textu (zápis více textů přesně za sebou), popř. určení délky posledního zápisu:&lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''sprintf()'''&lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''itoh()''' &lt;br /&gt;
                        - kam byla zapsána terminační 0x00 funkcí '''itoa()''' &lt;br /&gt;
 &lt;br /&gt;
          08 i R   (2) výsledek porovnání textů&lt;br /&gt;
                        - hodnota výsledku zavolání funkce '''textcmp()'''&lt;br /&gt;
                            X &amp;lt; 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v poli ''text[]'' než v porovnávaném řetězci&lt;br /&gt;
                            X == 0 : oba texty jsou identické&lt;br /&gt;
                            X &amp;gt; 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v porovnávaném řetězci než v poli ''text[]''&lt;br /&gt;
&lt;br /&gt;
Význam &amp;quot;nižší vlastní hodnoty&amp;quot;: znak 'a' má nižší hodnotu než 'b', a to o 1; nebo např. '1' má nižší hodnotu než '4' a to o 3.&lt;br /&gt;
&lt;br /&gt;
Doporučeno je si to vše vyzkoušet (zavolat si každou uvedenout funkci a srovnat hodnotu v sys[98] s obsahem pole ''text[]'').&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Uživatelské pozice v pevné paměti == &lt;br /&gt;
&lt;br /&gt;
 sys[99]  05 i RW  předávací proměnná pro čtení a zápis z/do paměti [[SDS-C: DataFlash|dataflash]]&lt;br /&gt;
&lt;br /&gt;
 sys[100] až sys[115]  &lt;br /&gt;
          01 i RW  data uložená do permanentní paměti = co se sem napíše zůstane i po vypnutí zařízení,&lt;br /&gt;
                   můžete si sem uložit co chcete (tj. 16x signed long délky 32bit),&lt;br /&gt;
                    - po speciálním systémovém resetu (RSTD) je vše nastaveno na 0xFFFFFFFF &lt;br /&gt;
                    - pozor! minimalizujte množství zápisů, životnost této paměti není neomezená !&lt;br /&gt;
                    - zápis do těchto sys[] přímo ihned fyzicky zapíše do pevné paměti &lt;br /&gt;
                    - čtení těchto sys[] způsobí přímé fyzické čtení pevné paměti &lt;br /&gt;
&lt;br /&gt;
Paměť EEPROM a paměť DATAFLASH (podle verze HW který máte) je permanentní (NVM), tzn. její obsah zůstane i po vypnutí zařízení nezměněn (na rozdíl od &amp;lt;u&amp;gt;ne&amp;lt;/u&amp;gt;zálohované paměti RAM, do které se přistupuje pomocí pole ''ram[]'').&lt;br /&gt;
&lt;br /&gt;
''' Reserved '''&lt;br /&gt;
&lt;br /&gt;
 sys[116] až sys[136]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné nastavitelné uživatelem z webového rozhraní ==&lt;br /&gt;
&lt;br /&gt;
Pomocí &amp;quot;uživatelských proměnných&amp;quot; (někdy taky &amp;quot;sdílených proměnných&amp;quot;) lze snadno ovlivnit chod vašeho SDS-C programu, ale jen tak, jak si do něj sami naprogramujete - uživatelské proměnné neovlivňují samotný program, ale program je může číst a následně zpracovat.&lt;br /&gt;
&lt;br /&gt;
 sys[140] až sys[149] &lt;br /&gt;
          01 i RW  &amp;quot;uživatelské proměnné&amp;quot;, které můžete měnit &amp;quot;z webu&amp;quot; (správně formulovaným HTTP GET dotazem)&lt;br /&gt;
                   (vždy 32-bit signed integer)&lt;br /&gt;
&lt;br /&gt;
 sys[150] 01 i RW  blokování přístupu k možnosti změny obsahu &amp;quot;uživatelských proměnných&amp;quot; z webu&lt;br /&gt;
                   Nastavení:&lt;br /&gt;
                    == 0 : stránka &amp;quot;control&amp;quot; je přístupná bez hesla, &lt;br /&gt;
                    != 0 : pro přístup je nutno se přihlásit (uživatel je vyzván k příhlášení)&lt;br /&gt;
&lt;br /&gt;
Uživatel, který má přístup k webové stránce, může zapsat nový obsah do těchto osmi proměnných (změnit jejich hodnotu), kdykoliv chce. Dvě doplňkové proměnné nejsou na výchozí webové stránce dostupné, ale jinak s nimi lze bez jiných omezení pracovat (SDS-C, M2M).&lt;br /&gt;
&lt;br /&gt;
Zápisem do ''sys[150]'' můžete nastavit bezpečnost přístupu k této webové stránce.&lt;br /&gt;
&lt;br /&gt;
Adresa webové stránky je (IP je zde pro příklad): http://192.168.1.250/control (více informací [[SDSC: sharing|zde]]).&lt;br /&gt;
&lt;br /&gt;
Samozřejmě lze využít i přímého URL pro zápis do proměnných, což je výhodné např. při vzájemné komunikaci dvou zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné vstupů a výstupů pro všechny výrobky SDS ==&lt;br /&gt;
&lt;br /&gt;
'''POZOR'''&lt;br /&gt;
&lt;br /&gt;
'''Podle HW verze výrobku, jsou dostupné jen určité vstupy a výstupy.''' Zde je uveden plný seznam pro maximální konfiguraci, ale ne všechny HW verze mají všechno. Např. SDS-MICRO-LM má pouze dva reléové výstupy, kdežto SDS-MACRO-LM má čtyři.&lt;br /&gt;
&lt;br /&gt;
Vždy máme vyhrazeno 32 indexů pro vstupy a výstupy. Tyto indexy jsou tedy naplánovány pro (budoucí) maximální konfiguraci, ale většina SDS k nim nemá odpovídající HW (např. nemá všech 32 relé). Zápis a čtení do/z indexů, které nemají odpovídající fyzický protějšek, je zakázán (bude SDS ignorován, a hodnota nebude uložena pro pozdější čtení).&lt;br /&gt;
&lt;br /&gt;
'''Pokračování výpisu:'''&lt;br /&gt;
&lt;br /&gt;
 sys[151] až sys[182]  &lt;br /&gt;
          01 i R   stav binárního vstupu OPTO1 až OPTO32 (optočlen)&lt;br /&gt;
                    - hodnota odpovídá fyzickému stavu vstupů (zda-li je nebo není přítomen signál na LED optočlenu)&lt;br /&gt;
                    - pozor, hodnota '''0''' skutečně znamená přítomnost signálu&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : (nulová hodnota)             signál přítomen (napětí na LED = svítící LED v optočlenu)&lt;br /&gt;
                    != 0 : (libovolná nenulová hodnota) bez signálu (LED v optočlenu nesvítí)&lt;br /&gt;
&lt;br /&gt;
Pozor, pokud u vašeho SDS (např. historické kousky SDS-MICRO-LIGHT) má číslované OPTO vstupy od nuly (né od jedničky), musíte si aktualizovate firmware v tomto zařízení, a případně upravit potisk (popis) na desce nebo krabičce.&lt;br /&gt;
&lt;br /&gt;
'''Důležité info:'''&lt;br /&gt;
&lt;br /&gt;
Pokud je (uvnitŘ SDS) na LED vstupního optočlenu signál, hodnota '''sys[]''' pro dané OPTOx dává '''0''' (nulu), naopak při nepřítomnosti signálu je přítomna '''nenulová''' hodnota (vždy testujte na nulovou a nenulovou hodnotu, jediné co je zaručeno je totiž ta nula, kdežto nenulová hodnotu může být jakákoliv - ve skutečnosti každý opto vstup má přidělenou konstantu, podle které lze tento vstup identifikovat). &lt;br /&gt;
&lt;br /&gt;
Pozor - &amp;quot;logika&amp;quot; optických vstupů je tedy na první pohled &amp;quot;obrácená&amp;quot; (avšak dává to přesný smysl). Jen je to potřeba vědět při psaní SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stav SDS-C programu ==&lt;br /&gt;
&lt;br /&gt;
Informace o verzi firmware modulu SDS (vhodné např. pro kontrolu, že uživatel používá nejnovější firmware, tak jak má).&lt;br /&gt;
&lt;br /&gt;
 sys[183] 08 i RW  verze nainstalovaného firmware v SDS modulu&lt;br /&gt;
                   (hex: 0x00DDMMYY, nebo jen 0x00000000 u starších FW)&lt;br /&gt;
&lt;br /&gt;
Příklad: FW v SDS je (pro příklad) ze dne 24.12.2018, takže v ''sys[183]'' bude zakódováno jako 0x00180C12, tedy hodnoty 24dec 12dec 18dec zapsány jako 0x18 0x0C 0x12, což je 0x18C0C12 což je 1575954dec.&lt;br /&gt;
&lt;br /&gt;
Informace o způsobu, jakým byl aktuální běh SDS-C programu spuštěn:&lt;br /&gt;
&lt;br /&gt;
 sys[184] 08 i RW  způsob spuštění SDS-C programu&lt;br /&gt;
                   == 0 : bez informace&lt;br /&gt;
                   == 1 : standardní spuštění SDS-C programu po běžném startu zařízení SDS&lt;br /&gt;
                   == 2 : program SDS-C byl (znovu) spuštěn na základě restartu od watchdogu (byl timeout)&lt;br /&gt;
                   == 4 : program SDS-C byl čerstvě nahrán z EXE aplikace&lt;br /&gt;
&lt;br /&gt;
Stav SDS-C watchdogu:&lt;br /&gt;
&lt;br /&gt;
 sys[185] 08 i R   hodnota odpočítávání SDS-C watchdogu v msec&lt;br /&gt;
                   == -1 : wdg není aktivní&lt;br /&gt;
                   ==  0 : odpočet vypršel, dojde k resetu SDS-C programu&lt;br /&gt;
                   1..2147482000 : aktuální hodnota odpočtu (snižuje se o 1 každou milisekundu)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Pulse-Width Modulation výstupy ==&lt;br /&gt;
&lt;br /&gt;
Některá SDS mají pouze jeden PWM výstup (PWM1), některá mají čtyři výstupy (rozdělené po dvou do dvou skupin: PWM1 a PWM2, pak PWM3 a PWM4).&lt;br /&gt;
&lt;br /&gt;
''Příklad pro PWM1:'' Konfigurace PWM1 výstupu nejprve vyžaduje zápis do sys[191], aby se nejprve nastavila provozní základní frekvence generátoru.&lt;br /&gt;
Následně lze PWM1 výstup řídit zápisem do sys[192], kdy se podle zapsané hodnoty nastaví střída PWM výstupu (poměr log0 a log1).&lt;br /&gt;
Alternativně lze zápis do sys[192] nahradit zápisem do sys[193], toto lze kombinovat.&lt;br /&gt;
Zápis do sys[191] je potřeba jen jednou (tedy jen tehdy, když je potřeba PWM1 výstup zapnout nebo vypnout, a kdy je potřeba změnit frekvenci generátoru). &lt;br /&gt;
Zápisy do sys[192] a nebo sys[193] se pak mohou dít samostatně (tj. není potřeba pokaždé opakovat zápis do sys[191]).&lt;br /&gt;
&lt;br /&gt;
Různé typy SDS mají jiný způsob obsluhy PWM generátoru - pozor !&lt;br /&gt;
&lt;br /&gt;
Pozor, pro tyto typy SDS:&lt;br /&gt;
&lt;br /&gt;
 SDS '''UPS''', SDS '''IO6 (LM)''', SDS '''IO6-ST''' a SDS '''TTCPRO''' &lt;br /&gt;
 &lt;br /&gt;
 Tyto výrobky nemají PWM výstup (zápis do příslušných sys[] zde nemá význam).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podle typu SDS:&lt;br /&gt;
&lt;br /&gt;
 SDS '''MICRO (LM)''' a SDS '''MACRO (LM)''' - pouze jeden PWM výstup (PWM1)&lt;br /&gt;
 &lt;br /&gt;
 sys[191] 01 i RW  &amp;quot;Fm&amp;quot; = frekvence PWM1 výstupu [Hz]&lt;br /&gt;
                    - do SDS-C č. '''03''': specifický omezený rozsah (souvisí se starým firmware)(bylo v rozsahu: 2 až 10000000).&lt;br /&gt;
                    - pozn. od SDS-C č. '''04''': lze nastavit hodnotu od ''24'' (24Hz) do ''49999998'' (49.999998Mhz)&lt;br /&gt;
 &lt;br /&gt;
 sys[192] 01 i RW  poměr nastavení &amp;quot;pulse-width&amp;quot; PWM1 výstupu (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - do SDS-C č. '''03''': specifický omezený rozsah (souvisí se starým firmware)&lt;br /&gt;
                    - od SDS-C č. '''04''': lze nastavit hodnotu od 0 do &amp;quot;Fm&amp;quot; (např. &amp;quot;Fm / 2&amp;quot; představuje PWM signál 1:1).&lt;br /&gt;
 &lt;br /&gt;
 sys[193] 06 i RW  ruční přímý zápis do registru PWM1 generátoru &lt;br /&gt;
                    - tzn. není předzpracováno jako sys[192], tzn. jedná se o alternativu k sys[192]&lt;br /&gt;
                    - tato hodnota není aktualizována vůči sys[192], ani není archivována&lt;br /&gt;
                    - rozsah: ''0'' až &amp;quot;Fm&amp;quot; (tj. ''0'' až sys[191]).&lt;br /&gt;
&lt;br /&gt;
Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupu osciloskopem.&lt;br /&gt;
&lt;br /&gt;
Hodnoty Fm větší než 1MHz prakticky nemají smysl, snažte se navrhnout svůj systém tak, aby dokázal pracovat ideálně nejvýše ve stovkách kHz.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Další typy SDS - všimněte si rozdílu ''významu'' jednotlivých indexů vůči vůči tabulce výše.&lt;br /&gt;
&lt;br /&gt;
 SDS '''MINI''', SDS '''MICRO-ST''' - pouze jeden PWM výstup (PWM1)&lt;br /&gt;
 SDS '''MACRO-ST''' - čtyři PWM výstupy (zde: první skupina PWM1 a PWM2, druhá skupina je popsána dále)&lt;br /&gt;
 &lt;br /&gt;
 sys[191] 07 i RW  &amp;quot;Fm&amp;quot; = (společná) frekvence pro '''PWM1 a PWM2''' výstupy [Hz]&lt;br /&gt;
                    - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM výstupy (lze dále řídit podle sys[192] až sys[195])&lt;br /&gt;
                    - zápis hodnoty 0 vypne PWM1 a PWM2 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu&lt;br /&gt;
 &lt;br /&gt;
 sys[192] 07 i RW  duty-cycle '''PWM1''' výstupu v procentech (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[192] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[192] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[193] 07 i  W  duty-cycle '''PWM1''' výstupu v mikrosekundách (druhý možný způsob nastavování PWM generátoru)&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[193] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[193] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
 &lt;br /&gt;
 sys[194] 07 i RW  duty-cycle '''PWM2''' v procentech (výchozí způsob nastavování PWM generátoru)&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[194] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[194] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[195] 07 i  W  duty-cycle '''PWM2''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[195] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[195] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
&lt;br /&gt;
 SDS '''MACRO-ST''' - čtyři PWM výstupy (zde druhá skupina: PWM3 a PWM4)&lt;br /&gt;
 &lt;br /&gt;
 sys[186] 09 i RW  &amp;quot;Fm&amp;quot; = (společná) frekvence pro '''PWM3 a PWM4''' výstupy [Hz]&lt;br /&gt;
                    - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM výstupy (lze dále řídit podle sys[187] až sys[190])&lt;br /&gt;
                    - zápis hodnoty 0 vypne PWM3 a PWM4 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu&lt;br /&gt;
 &lt;br /&gt;
 sys[187] 09 i RW  duty-cycle '''PWM3''' v procentech&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[187] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[187] ignorovány (nejsou zapamatovány)&lt;br /&gt;
&lt;br /&gt;
 sys[188] 09 i  W  duty-cycle '''PWM3''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[188] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[188] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
 &lt;br /&gt;
 sys[189] 09 i RW  duty-cycle '''PWM4''' v procentech&lt;br /&gt;
                    - povolené rozmezí 0 až 100 (0% až 100%)&lt;br /&gt;
                    - před zápisem do sys[189] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[189] ignorovány (nejsou zapamatovány)&lt;br /&gt;
 &lt;br /&gt;
 sys[190] 09 i  W  duty-cycle '''PWM4''' výstupu v mikrosekundách&lt;br /&gt;
                    - pouze pro zápis, pozor !&lt;br /&gt;
                    - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)&lt;br /&gt;
                    - před zápisem do sys[190] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])&lt;br /&gt;
                    - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[190] ignorovány (nejsou zapamatovány)&lt;br /&gt;
                    - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru&lt;br /&gt;
&lt;br /&gt;
Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupů osciloskopem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání výstupů - Relé ==&lt;br /&gt;
&lt;br /&gt;
Zápisem do následujících systémových proměnných přímo ovládáte fyzické relé (výstupy) zařízení SDS. Pozor, protože hodnoty zapsané z SDS-C programu se záměrně neukládají do pevné paměti (tzn. nejsou načteny po resetu zařízení SDS). Je to z důvodu bezpečnosti (aby se např. neseplo relé po dlouhém výpadku napájení). Váš program si s tím musí umět poradit - vždy po zapnutí SDS musí vyhodnotit aktuální situaci a až podle toho zapínat relé.&lt;br /&gt;
&lt;br /&gt;
 sys[196] až sys[228]   &lt;br /&gt;
          01 i RW  informace, kdo ovládá '''RE1''' až '''RE32'''&lt;br /&gt;
                    - lze nastavit i z webového rozhraní&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : ovládáno z webového rozhraní (ruční řízení - trvale zapnuto, trvale vypnuto)&lt;br /&gt;
                    == 2 : ovládáno z SDS-C programu (zápis do sys[], je ignorováno nastavení na webu)&lt;br /&gt;
                    == 4 : ovládáno z IP Watchdogu (interní IP watchdog, nastavuje se přes web)&lt;br /&gt;
&lt;br /&gt;
 sys[229] až sys[230]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[231] až sys[262]   &lt;br /&gt;
          01 i RW  stav výstupu RE1 až RE32 (= zápis do tohoto sys[] přímo ovládá relé)&lt;br /&gt;
                   Hodnoty:&lt;br /&gt;
                    == 0 : relé není aktivní &lt;br /&gt;
                           (cívka relé bez proudu, MICRO-LM: mosfet není sepnut)&lt;br /&gt;
                    != 0 : relé je aktivní &lt;br /&gt;
                           (cívka relé pod proudem, MICRO-LM: mosfet je sepnut = výstup REx je spojen na GND)&lt;br /&gt;
&lt;br /&gt;
 sys[263] až sys[265]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[266] až sys[298]   &lt;br /&gt;
          01 s R   uživatelský textový název pro '''RE1''' až '''RE32''' &lt;br /&gt;
                    - nastaveno ve webovém rozhraní&lt;br /&gt;
&lt;br /&gt;
 sys[264] až sys[300]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ovládání PDx ==&lt;br /&gt;
&lt;br /&gt;
Jednotlivé moduly SDS mají k dispozici dodatečné vstupy a výstupy, označené jako PDx respektive TOPB. Přesný seznam viz návod ke konkrétním modulům.&lt;br /&gt;
&lt;br /&gt;
Stav vstupu (je-li PDx jako vstup) nebo výstupu (je-li PDx jako výstup):&lt;br /&gt;
&lt;br /&gt;
 sys[301] 01 i RW  SDS '''MICRO LM LIGHT''': stav i/o pinu D0 (0 = log0 ; nenulová hodnota v sys = log1 přítomna na pinu)&lt;br /&gt;
                   SDS '''MICRO LM DIN''' a SDS '''MACRO LM''': stav výstupu D0 - MOSFET spínač na GND. Při jakékoliv nenulové hodnotě v sys[301] je MOSFET sepnutý (=D0 na GND), jinak je D0 otevřený (HiZ)&lt;br /&gt;
                   SDS '''TTCPRO''': stav všech osmi pinů v portu PDx (nastavením/čtením sys[301] se přistupuje k jednotlivých osmi bitům v bajtu, kde: bit0=PD0 až bit7=PD7)&lt;br /&gt;
                   SDS '''MINI''': bit0 = stav i/o pinu TOPB, bit1 = stav padu PD1, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''UPS''': nepoužito&lt;br /&gt;
                   SDS '''IO6''': nepoužito&lt;br /&gt;
                   SDS '''MICRO-ST''': bit0 = stav PD0 MOSFET spínače (spíná na GND), bit1 = stav i/o pinu TOPB, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''IO6-ST''': nepoužito&lt;br /&gt;
                   SDS '''MACRO-ST''': bit0 = stav PD0, bit1 = stav PD1, bit2 = stav i/o pinu TOPB, bit3 = TL-1, bit4 = stav TL-2, ostatní bity (5..7) nepoužity&lt;br /&gt;
&lt;br /&gt;
Řízení směru pro jednotlivé PDx resp. TOPB:&lt;br /&gt;
&lt;br /&gt;
 sys[302] 06 i RW  SDS '''MICRO LM LIGHT''': směr i/o pinu D0 (zápisem bit0 do 1 se nastaví pin D0 jako výstup) (zápisem log1 se nastaví jako vstup)&lt;br /&gt;
                   SDS '''MICRO LM DIN''' a '''SDS MACRO LM''': pozor, D0 je vždy výstup (nastavení je napevno, nelze změnit)&lt;br /&gt;
                   SDS '''TTCPRO''': směr jednotlivých pinů v portu PDx (nastavením jednotlivých osmi bitů, bit0=PD0 až bit7=PD7, nastav log1 pro výstup)&lt;br /&gt;
                   SDS '''MINI''': bit0 = směr i/o pinu TOPB, bit1 = směr i/o padu PD1, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''UPS''': nepoužito&lt;br /&gt;
                   SDS '''IO6''': nepoužito&lt;br /&gt;
                   SDS '''MICRO-ST''': bit0 = vždy v log1 (PD0 jako výstup), bit1 = směr i/o pinu TOPB, ostatní bity (2..7) nepoužity&lt;br /&gt;
                   SDS '''MACRO-ST''': bit0 = vždy v log1 (výstup), bit1 = vždy v log1 (výstup), bit2 = směr i/o pinu TOPB, bit3 = vždy v log0 (vstup), bit4 = vždy v log0 (vstup), ostatní bity (5..7) nepoužity&lt;br /&gt;
&lt;br /&gt;
TOPB: vždy typicky CMOS 3V3 pin, s možností funkce jako vstup nebo výstup (dle sys[302]), a je přímo připojený na pin SoC, pozor tedy na jeho další HW připojení.&lt;br /&gt;
&lt;br /&gt;
TTCPRO: Mapování je vždy od nejnižšího (LSB - bit0) bitu (PD0 = bit0, PD1 = bit1, atd. PD7 = bit7). Pro TTCPRO jsou PDx jako CMOS 3V3 piny s volbou vstupu nebo výstupu pro každý jednotlivý pin.&lt;br /&gt;
&lt;br /&gt;
MICRO-ST: výstup PD0 je zapojen formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).&lt;br /&gt;
&lt;br /&gt;
MACRO-ST: výstupy PD0 a PD1 jsou zapojeny formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).&lt;br /&gt;
&lt;br /&gt;
Nezapomeňte vždy ve svém programu správně nastavit hodnoty do sys[302] (toto je častá chyba když se to zapomene).&lt;br /&gt;
&lt;br /&gt;
 sys[306] až sys[309]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
== Tlačítka na desce display pro SDS-MACRO-ST ==&lt;br /&gt;
&lt;br /&gt;
Čtení stavu tlačítek na desce display (SDS-MST-DISP-rev1) se provádí čtením sys[301] a vyhodnocením bitu 3 (=8dec, první tlačítko) a/nebo bitu 4 (=16dec, druhé tlačítko).&lt;br /&gt;
&lt;br /&gt;
Ošetření na případné zákmity při stisku a uvolnění tlačítek, je potřeba provést ve vašem SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vstupy - teploměry na externí sběrnici 1-Wire&amp;amp;reg; ==&lt;br /&gt;
&lt;br /&gt;
Čidla teploty (1-W chipy pro měření teploty připojené na sběrnici; tak také údaj o teplotě z připojených modulů SDS-1W-T-RH) jsou řízena (čtena) plně automaticky zařízením SDS. Program v SDS-C má přímo přístup k výsledným hodnotám teplot.&lt;br /&gt;
&lt;br /&gt;
 sys[310] až sys[341]   &lt;br /&gt;
          01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici&lt;br /&gt;
&lt;br /&gt;
Teploměry mají hodnotu uloženou v násobku '''100''' (takže např. 24.5°C je uloženo jako číslo 2450, nebo -120.65°C je -12065). Pokud není k dispozici hodnota z čidla, '''není v záznamu číslo nula (pozor !), ale záměrně tam je číslo 16777216 (2^24)'''.&lt;br /&gt;
&lt;br /&gt;
Pozn.: pouze SDS-MACRO-LM a SDS-MACRO-ST mají teploměry č. 17 až 32, protože má dvě samostatné sběrnice (konektory). Sběrnice A má teploměry 1 až 16, sběrnice B má teploměry 17 až 32. '''Sběrnice B je k dispozici jen pro SDS-MACRO-XX'''.&lt;br /&gt;
&lt;br /&gt;
 sys[342] až [345]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[346] 01 i R   číslo čidla, které je právě převáděno na sběrnici '''B''' (čteno přes 1-W, tj. je mu aktualizována hodnota)&lt;br /&gt;
 sys[347] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici '''B'''&lt;br /&gt;
 &lt;br /&gt;
 sys[348] 01 i R   číslo čidla, které je právě převáděno na sběrnici '''A''' (čteno přes 1-W, tj. je mu aktualizována hodnota)&lt;br /&gt;
 sys[349] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici '''A'''&lt;br /&gt;
&lt;br /&gt;
 sys[350] až sys[381]   &lt;br /&gt;
          01 i R   čidlo 1 až 32 - aktuální stav/chyba čidla v okamžiku čtení tohoto sys[]&lt;br /&gt;
                    == 0  : default, čidlo neexistuje, nic nevim (stav ihned po zapnutí, popř. trvale pro prázdnou pozici)&lt;br /&gt;
                    == 2  : vše ok, komunikuje, odpovidá, právě byl získán výsledek&lt;br /&gt;
                    == 4  : ví se jen že existuje (byl získán ROMCODE) (obvykle dočasný stav po spuštění zařízení)&lt;br /&gt;
                    == 8  : začal další převod, čidlo je OK, komunikuje (správný stav)&lt;br /&gt;
                    == 16 : nepovedlo se začít nový převod, CHYBA (obvykle fyzický problém se sběrnicí)&lt;br /&gt;
                    == 32 : bylo přijato neplatné CRC, chyba (obvykle fyzický problém se sběrnicí)&lt;br /&gt;
&lt;br /&gt;
 sys[382] až [389]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
 sys[391] až sys[422]  &lt;br /&gt;
          01 s R   uživatelský textový název pro čidlo 1 až 32 (nastaveno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
''' Reserved ''' &lt;br /&gt;
&lt;br /&gt;
 sys[423] až sys[430]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vstupy: analogové vstupy pro měření napětí ==&lt;br /&gt;
&lt;br /&gt;
Všechny vstupy měří napětí vůči společné svorce (GND). Změřená hodnota je vždy k dispozici nejprve jako surová (raw) digitální hodnota, a poté ji SDS přepočítá dle uživatelského nastavení a také dá k dispozici.&lt;br /&gt;
&lt;br /&gt;
 sys[431] 01 i R   RAW hodnota A/D převodu ze vstupu AD1&lt;br /&gt;
 sys[432] 01 i R   RAW hodnota A/D převodu ze vstupu AD2&lt;br /&gt;
 sys[433] 01 i R   RAW hodnota A/D převodu ze vstupu AD3&lt;br /&gt;
 sys[434] 01 i R   RAW hodnota A/D převodu ze vstupu AD4&lt;br /&gt;
&lt;br /&gt;
RAW (surová) hodnota je digitální číslo, poskytnuté z interního A/D převodníku, s tím, že mu už SDS současně (pouze a jenom) odečetl uživatelem nastavený offset.&lt;br /&gt;
&lt;br /&gt;
Rozsah hodnoty RAW je: &lt;br /&gt;
* SDS-MICRO-LM, SDS-MACRO-LM, SDS-UPS-ONEDPS: 0..1023 (10bit rozlišení)&lt;br /&gt;
* SDS-MINI a všechny varianty SDS ST: 0..4095 (12bit rozlišení)&lt;br /&gt;
&lt;br /&gt;
Všechny převodní konstanty A/D, nastavené ve webovém rozhraní (viz admin stránka):&lt;br /&gt;
&lt;br /&gt;
 sys[435] 01 i R   Offset pro A/D 1  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[436] 01 i R   Div pro A/D 1&lt;br /&gt;
 sys[437] 01 s R   textový název A/D 1&lt;br /&gt;
 sys[438] 01 s R   jednotka A/D 1&lt;br /&gt;
&lt;br /&gt;
 sys[439] 01 i R   Offset pro A/D 2  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[440] 01 i R   Div pro A/D 2&lt;br /&gt;
 sys[441] 01 s R   textový název A/D 2&lt;br /&gt;
 sys[442] 01 s R   jednotka A/D 2&lt;br /&gt;
&lt;br /&gt;
 sys[443] 01 i R   Offset pro A/D 3  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[444] 01 i R   Div pro A/D 3&lt;br /&gt;
 sys[445] 01 s R   textový název A/D 3&lt;br /&gt;
 sys[446] 01 s R   jednotka A/D 3&lt;br /&gt;
&lt;br /&gt;
 sys[447] 01 i R   Offset pro A/D 4  [jen pro informaci, dále už nepoužít - viz pozn.]&lt;br /&gt;
 sys[448] 01 i R   Div pro A/D 4&lt;br /&gt;
 sys[449] 01 s R   textový název A/D 4&lt;br /&gt;
 sys[450] 01 s R   jednotka A/D 4&lt;br /&gt;
&lt;br /&gt;
'''Pozor!''' Hodnoty pro jednotlivé A/D vstupy (tj. Raw Hodnoty v sys[431 až 434]) '''už mají odečtený Offset''' (je to provedeno uvnitř firmware už při zpracovávání A/D převodu) ! &lt;br /&gt;
Proto Offset už ve svém SDS-C programu z Raw hodnot neodečítejte (bylo by to odečítáno podruhé). Pro přepočet z Raw na finální hodnotu vám zbývá (správně) použít jen &amp;quot;Div&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Poznámka: zařízení SDS-MINI (a další z řady SDS ST) už mohou mít text v položce &amp;quot;jednotka A/D x&amp;quot; delší než jeden znak (na rozdíl od původního SDS-MICRO-LM atd., kde to bylo omezeno na jeden jediný znak).&lt;br /&gt;
&lt;br /&gt;
''' Reserved '''&lt;br /&gt;
&lt;br /&gt;
 sys[451] až sys[458]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proměnné pro S0 impulsní vstup ==&lt;br /&gt;
&lt;br /&gt;
 sys[459] 01 i RW  stav tarifu &lt;br /&gt;
                    == 0 : T0 (vysoký tarif)&lt;br /&gt;
                    == 1 : T1 (nízký tarif)&lt;br /&gt;
&lt;br /&gt;
 sys[460] až sys[492]  &lt;br /&gt;
          06 i RW  konfigurace - uživatelem nastavený (webové rozhraní) poměr MTD, pro vstup S0 [1] až [32],&lt;br /&gt;
                                 je-li MTD pro tento vstup použit (pokud není použit (přímé měření), má zde být 1 )&lt;br /&gt;
                    - příklad: pro MTD s poměrem 300A:5A je zapsaná hodnota 60&lt;br /&gt;
                    - pozor, nezapočítávejte vliv MTD do hodnoty imp./1kWh&lt;br /&gt;
                    - pozor, některé elektroměry mají MTD už započítané do vlastní impulsní konstanty, &lt;br /&gt;
                             pak sem v takovém případě nastavte číslo 1&lt;br /&gt;
                    - platné hodnoty: 1 až 65280 (včetně)&lt;br /&gt;
 &lt;br /&gt;
 sys[493] až sys[525]  &lt;br /&gt;
          01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T0&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).&lt;br /&gt;
 &lt;br /&gt;
 sys[526] až sys[558]  &lt;br /&gt;
          01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T1&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).&lt;br /&gt;
 &lt;br /&gt;
 sys[559] až sys[591]  &lt;br /&gt;
          01 i RW  konfigurace - uživatelem nastavené přepočtové konstanty S0: počet imp./1kWh (z webového rozhraní)&lt;br /&gt;
                    - pozor, tato hodnota platí pro samotný elektroměr, není to hodnota ve které je započítán vliv MTD&lt;br /&gt;
                    - pozn. v případě, že měřícím prvkem není elektroměr ale jiný přístroj, bude zde odpovídající&lt;br /&gt;
                      jiná konfigurační hodnota (např. vodoměr: počet imp./m^3).&lt;br /&gt;
 &lt;br /&gt;
 sys[592] až sys[624]  &lt;br /&gt;
          01 i R   změřená časová vzdálenost mezi dvěmi nejposlednějšími zachycenými impulsy na S0 vstupu (aktuální impuls a předchozí impuls)&lt;br /&gt;
                    - měřeno v msec&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).&lt;br /&gt;
 &lt;br /&gt;
 sys[625] až sys[657]  &lt;br /&gt;
          01 i R   změřený čas od úplně posledního impulsu zachyceného na S0 vstupu, tzn. &amp;quot;doba bez impulsu&amp;quot; nebo také &amp;quot;doba od posledního impulsu&amp;quot;&lt;br /&gt;
                    - měřeno v msec&lt;br /&gt;
                    - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)&lt;br /&gt;
                          ale SDS-C čte sys[] jako 32-bit signed hodnoty;&lt;br /&gt;
                          při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).&lt;br /&gt;
&lt;br /&gt;
poznámka: tarif T0 a tarif T1 závisí na uživatelem zvoleném externím signálu (přeneseno do sys[459]), viz informace na stránce ohledně [[S0]]. Celková hodnota impulsů je samozřejmě součtem těchto dvou impulsních akumulátorů. Pokud není tarifní rozlišení využito, je vše zapisováno do akumulátoru pro T0. &lt;br /&gt;
&lt;br /&gt;
poznámka: časová vzdálenost mezi impulsy se používá pro výpočet aktuálního výkonu (popř. průtoku atd. dle použitého měřiče) - můžete toho využít ve svém SDS-C programu.&lt;br /&gt;
&lt;br /&gt;
poznámka: &amp;quot;Poměr MTD&amp;quot; zahrnuje všechny měřící transformátory (MTD), předřazené elektroměru (pouze pokud to už není započítáno v impulsní konstantě). Pokud je S0 vstup využit pro jiný typ měřiče (vodoměr a podobné), kde je připojení MTD nesmysl, tak se v konfiguraci musí do této položky nastavit hodnota 1. Samozřejmě jde s určitou výhodou použít i jinou konfiguraci, protože tato hodnota je použita jako &amp;quot;druhý dělitel&amp;quot; u výpočtu počtu S0 impulsů na velikost kroku energetické jednotky. Určení této hodnoty pro jiné měřiče sleduje stejné matematické postupy jako určení této hodnoty pro elektroměr s předřazeným MTD, jen jednotky budou samozřejmě jiné.&lt;br /&gt;
&lt;br /&gt;
 sys[658] až sys[670]  reserved for future use&lt;br /&gt;
&lt;br /&gt;
poznámka: další sys[] indexy pro S0 vstupy jsou uvedeny ještě dále v tomto celém seznamu (dole na stránce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální vstupy a výstupy ==&lt;br /&gt;
&lt;br /&gt;
Toto je funkce dostupná jen na omezeném rozsahu výrobků SDS.&lt;br /&gt;
&lt;br /&gt;
'''Pouze pro SDS MICRO (LM) LIGHT:'''&lt;br /&gt;
&lt;br /&gt;
 sys[671] 02 i W   zápis na pin M4 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)&lt;br /&gt;
 sys[672] 02 i W   zápis na pin M5 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)&lt;br /&gt;
 sys[673] 02 i W   zápis na pin B1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)&lt;br /&gt;
 sys[674] 02 i W   zápis na pin A1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)&lt;br /&gt;
&lt;br /&gt;
Tyto zmíněné čtyři ''sys[]'' jsou dostupné '''pouze''' na modulu SDS MICRO '''LIGHT''' popř. '''DIN''', a to jen s verzí firmware 9.1.2011 nebo novější.&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT s pamětí EEPROM: k dispozici jsou všechny čtyři výstupy.&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MICRO LIGHT 2 s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MICRO DIN: k dispozici jsou jen dva výstupy (A1, B1).&lt;br /&gt;
&lt;br /&gt;
SDS MACRO LM, SDS MICRO ST, SDS MACRO ST, SDS UPS, SDS IO6, SDS IO6 ST, SDS TTCPRO, SDS MINI: tyto výstupy '''nejsou k dispozici'''.&lt;br /&gt;
&lt;br /&gt;
Vše to jsou logické výstupy, s CMOS 3V3 logickými úrovněmi (pro obecné použití je externí pull-up 47kOhm nutný). Lze to použít především pro ovládání BSS138 MOSFETů, např. pro spínání dalších relé (v případě použití BSS138 nedávejte externí pull-up, ale naopak dejte pull-down na GND o hodnotě 47kOhm).&lt;br /&gt;
&lt;br /&gt;
'''Pouze pro SDS MACRO ST:'''&lt;br /&gt;
&lt;br /&gt;
Alternativa k sys[301]. Hodnota odpovídá logické úrovni na daném vstupu TL1 (TL2). Při osazené desce MACRO-ST-LCD jsou na tyto vstupy připojeny tlačítka (pak při stisku TL1, TL2 je zde hodnota 0, v klidu 1).&lt;br /&gt;
&lt;br /&gt;
 sys[671] 02 i R   čtení stavu TL1&lt;br /&gt;
 sys[672] 02 i R   čtení stavu TL2&lt;br /&gt;
&lt;br /&gt;
'''Pájecí plošky CFG:'''&lt;br /&gt;
&lt;br /&gt;
Zkratovací CFG plošky jsou k dispozici jen pro SDS TTCPRO. Vhodné pro pevnou konfiguraci uživatelem.&lt;br /&gt;
&lt;br /&gt;
V současné době není k dispozici firmware, které přenáší hodnotu z pájecích plošek (CFG1, CFG2) do ''sys[]''.&lt;br /&gt;
Ploška CFG1 je vyhrazena pro vnitřní použítí samotného firmware SDS, a ploška CFG2 bude eventuálně uvolněna pro libovolné použití uživatelem (čtení z SDS-C).&lt;br /&gt;
Takový firmware se teprve chystá (SDS TTCPRO).&lt;br /&gt;
&lt;br /&gt;
 sys[675] 07 i R   stav plošky CFG1 (zkratována = je zde 0)&lt;br /&gt;
 sys[676] 07 i R   stav plošky CFG2 (zkratována = je zde 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální proměnné pro SDS-UPS ==&lt;br /&gt;
&lt;br /&gt;
SDS UPS nabízí, kromě již zmíněných proměnných (viz výpis výše), i doplňkové proměnné, specifické pro tento výrobek. Tyto rozšířené systémové proměnné jsou k dispozici ve firmware od 25.4.2011 .&lt;br /&gt;
&lt;br /&gt;
SDS-UPS má všechny sys[0] až sys[699] shodné s SDS-MICRO. Rozdíl je samozřejmě v počtu a osazení periférií.&lt;br /&gt;
&lt;br /&gt;
Pokud nejste spokojeni s originálním nabíjecím algoritmem, máte možnost si ho celý naprogramovat sami v SDS-C: všechny potřebné vstupní a výstupní údaje (proměnné) jsou vám k dispozici. Popřípadě, pokud chcete jen sledovat situaci, můžete je také využít (např. pro logování nabíjecího a vybíjecího proudu akumulátoru a tak dále).&lt;br /&gt;
&lt;br /&gt;
 sys[700] 02 i R   reserved&lt;br /&gt;
 sys[701] 02 i R   reserved&lt;br /&gt;
 sys[702] 02 i R   reserved&lt;br /&gt;
 sys[703] 02 i R   reserved&lt;br /&gt;
&lt;br /&gt;
'''Přepínač algoritmů:'''&lt;br /&gt;
&lt;br /&gt;
 sys[704] 02 i RW  řízení nabíjení - hodnoty které lze zapsat:&lt;br /&gt;
                    == 0   : nabíjení je ovládáno pomocí firmware (výchozí chování výrobku)&lt;br /&gt;
                    == 345 : pouze nabíjení (a ne jiné funkce) jsou řízeny programem SDS-C (= chování programujete vy)&lt;br /&gt;
                    == 824 : kompletní řízení (= volba funkce, nabíjení) je řízeno programem SDS-C&lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte vlastní (ruční) řízení, musíte trvale řídit nabíjení sami pomocí programu v SDS-C. Vlastní ovládání vejde v platnost zápisem čísla 345 nebo 824 do sys[704]. Tento zápis provedete pouze jednou na začátku programu, a dále pak musí trvale následovat váš algoritmus. &lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte 345, jediné co má váš program za úkol, je řídit samotný nabíjecí proces - toto je výhodné, když se nechcete zatěžovat hlídáním provozních stavů (tj. výpadek napájení atd.), což za vás v tomto režimu udělá původní firmware.&lt;br /&gt;
&lt;br /&gt;
Pokud zvolíte 824, musíte sami kompletně řídit všechno chování UPS, tj. nejenom nabíjecí algoritmus, ale i detekce výpadku napájení, přepínání mezi stavy, indikační LED, a tak dále.&lt;br /&gt;
&lt;br /&gt;
 sys[705] až sys[731]  reserved&lt;br /&gt;
&lt;br /&gt;
Pro realizaci vlastního nabíjecího algoritmu potřebujete zpracovávat všechny vstupy a důsledně nastavovat všechy výstupy.&lt;br /&gt;
&lt;br /&gt;
Pokud váš program pouze sleduje činnost původního nabíjecího algoritmu, pak může samozřejmě všechny sys[] jen číst.&lt;br /&gt;
&lt;br /&gt;
'''Vstupy a konfigurace:'''&lt;br /&gt;
&lt;br /&gt;
 sys[732] 02 i R   surová hodnota z A/D převodu - hodnota 2.5V vstupu - odpovídá hodnotě proudu 0.0A&lt;br /&gt;
 sys[733] 02 i R   surová hodnota z A/D převodu - hodnota proudu do-z akumulátoru&lt;br /&gt;
 sys[734] 02 i R   surová hodnota z A/D převodu - hodnota proudu z primárního vstupu&lt;br /&gt;
 sys[735] 02 i R   surová hodnota z A/D převodu - hodnota napětí akumulátoru&lt;br /&gt;
 sys[736] 02 i R   surová hodnota z A/D převodu - hodnota napětí primárního vstupu&lt;br /&gt;
&lt;br /&gt;
Rozsah surových hodnot z A/D převodu je 0 až 4095. Lineárně to odpovídá příslušné měřené hodnotě. &lt;br /&gt;
Měření napětí má 0 na 0V a maximální hodnot (4095) na maximu rozsahu. &lt;br /&gt;
Měření proudu je specifické, protože měření ukazuje kladný i záporný proud, takže 0A je na hodnotě sys[732] (typicky 2047), všechno co je pod touto hodnotu je záporný proud, všechno nad je kladný proud. Znaménko proudu ukazuje, kam proud teče (např. záporný = vybíjení akumulátoru, atd.).&lt;br /&gt;
&lt;br /&gt;
 sys[737] až sys[739]  reserved&lt;br /&gt;
&lt;br /&gt;
Následuje konfigurace provedená uživatelem ve webovém rozhraní.&lt;br /&gt;
Hodnoty jsou přímo v rozmezí 0 až 4095, takže je lze PŘÍMO použít se surovými hodnotami z A/D převodu (tzn. zařízení se už postaralo o převod údajů zadaných uživatelem ve webovém rozhraní na tento formát). V důsledku je pak realizace algoritmu velmi snadná.&lt;br /&gt;
&lt;br /&gt;
 sys[740] 02 i R   primary voltage to say target is ok (pri_pvts)&lt;br /&gt;
 sys[741] 02 i R   primary zadany odpocet v msec (pri_pvat)&lt;br /&gt;
 sys[742] 02 i R   primary voltage to allow charging (at what voltage to allow chargin) (pri_fchg)&lt;br /&gt;
 sys[743] 02 i R   accu disconnect voltage level (at what voltage to disconnect accu) (aku_avdv)&lt;br /&gt;
 sys[744] 02 i R   accu target voltage when charging (when to switch to CV) (aku_avcd)&lt;br /&gt;
 sys[745] 02 i R   accu target current when charging (constant current when in CC) (aku_accc)&lt;br /&gt;
 sys[746] 02 i R   target charging voltage (final voltage on accu when fully charged)&lt;br /&gt;
 sys[747] 02 i R   flag: do not answer ping when primary gone (pri_ping)&lt;br /&gt;
 sys[748] 02 i R   flag: do not switch accu off (aku_dach)&lt;br /&gt;
&lt;br /&gt;
Hodnoty sys[740] až sys[748] jsou konfigurační údaje (uživatel je změnil přes webové rozhraní, a tím se uložili do pevné paměti, takže vydrží reset nebo vypnutí zařízení). Pokud do nich v SDS-C programu zapíšete, tato nová zapsaná hodnota zůstane platná až do resetu nebo vypnutí, nebo do ručního přepsání uživatelem (ve webovém rozhraní). Zápis do těchto konkrétních sys[] nezpůsobí uložení nových hodnot do pevné paměti.&lt;br /&gt;
&lt;br /&gt;
 sys[749] až sys[760]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Výstupy:'''&lt;br /&gt;
&lt;br /&gt;
Tyto '''všechny''' výstupy musíte správně ovládat po celou dobu, co bude zařízení SDS UPS zapnuto !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 sys[761] 02 i RW  ovládání vypínání nabíječe&lt;br /&gt;
                    == 0 : nabíječ v provozu (zapnuto = nabíjí se, regulujte jiným sys[])&lt;br /&gt;
                    != 0 : nabíječ mimo provoz (vypnuto = nenabíjí se)&lt;br /&gt;
 &lt;br /&gt;
 sys[762] 02 i RW  ovládání posunu rozsahu regulace nabíječe &lt;br /&gt;
                    == 0 : bez zásahu do zpětné vazby (původní regulační rozsah)&lt;br /&gt;
                    != 0 : zásah do zpětné vazby (posun rozsahu)&lt;br /&gt;
                           (vhodné pro skokové zvýšení výstupního napětí nabíječe, &lt;br /&gt;
                            když už nereaguje v původním rozsahu)&lt;br /&gt;
 &lt;br /&gt;
 sys[763] 02 i RW  ovládání odpojovače baterie &lt;br /&gt;
                    == 0 : spínač vypnutý (baterie odpojena od zátěže)&lt;br /&gt;
                    != 0 : spínač sepnutý (baterie připojena)&lt;br /&gt;
 &lt;br /&gt;
 sys[764] 02 i RW  indikační LED - nabíjení akumulátoru&lt;br /&gt;
                    == 0 : LED svítí (informace: akumulátor je nabíjen)&lt;br /&gt;
                    != 0 : LED nesvítí (informace: akumulátor není nabíjen)&lt;br /&gt;
 &lt;br /&gt;
 sys[765] 02 i RW  indikační LED - výpadek primárního vstupu&lt;br /&gt;
                    == 0 : LED svítí (informace: napětí primárního vstupu pod dolním limitem)&lt;br /&gt;
                    != 0 : LED nesvítí (informace: primární vstup má napětí vyšší než je dolní limit)&lt;br /&gt;
&lt;br /&gt;
'''Řízení nabíjení:''' Je potřeba správně regulovat pomocí následujícího výstupu:&lt;br /&gt;
&lt;br /&gt;
 sys[766] 02 i RW  přímé řízení nabíjecího bloku (výstup vaší regulace sem - hodnota řídí nabíječ)&lt;br /&gt;
                    - minimální hodnota = 1&lt;br /&gt;
                    - maximální hodnota = 2497&lt;br /&gt;
&lt;br /&gt;
 sys[767] až sys[769]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
Následující údaje jsou určeny pro '''zobrazování na webovém rozhraní''':&lt;br /&gt;
&lt;br /&gt;
 sys[770] 02 i RW  provozní režim: vždy jedno z UPS_PROVOZ_xxx&lt;br /&gt;
 &lt;br /&gt;
 sys[771] 02 i RW  nabíjecí režim: vždy jedno z UPS_NABREZIM_xxx&lt;br /&gt;
 &lt;br /&gt;
 sys[772] 02 i RW  výsledek odhadu stavu baterie: vždy jedno z UPS_BATERIE_ODHAD_xxx&lt;br /&gt;
&lt;br /&gt;
Konstanty pro zápis (je to potřeba dodržet, protože se to přímo zobrazuje na webovém rozhraní):&lt;br /&gt;
&lt;br /&gt;
 UPS_PROVOZ_START            0&lt;br /&gt;
 UPS_PROVOZ_PRIOK            1&lt;br /&gt;
 UPS_PROVOZ_PRIOK_CHARGING   2&lt;br /&gt;
 UPS_PROVOZ_ONLY_BATT        4&lt;br /&gt;
 UPS_PROVOZ_NO_BATT          8&lt;br /&gt;
 &lt;br /&gt;
 UPS_NABREZIM_CC             0&lt;br /&gt;
 UPS_NABREZIM_CV             2&lt;br /&gt;
 UPS_NABREZIM_PAUZA          4&lt;br /&gt;
 UPS_NABREZIM_URCENI_REZIMU  8&lt;br /&gt;
 &lt;br /&gt;
 UPS_BATERIE_ODHAD_NEZNAM            0&lt;br /&gt;
 UPS_BATERIE_ODHAD_MOC_NIZKE_NAPETI  1&lt;br /&gt;
 UPS_BATERIE_ODHAD_OK_NABIJIM        2&lt;br /&gt;
 UPS_BATERIE_ODHAD_PLNE_NABITO       4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Výsledky z 1-Wire sensoru vlhkosti (T/RH) SDS-1W-T-RH ==&lt;br /&gt;
&lt;br /&gt;
Připojené moduly [[SDS_1W_T-RH]] jsou připojeny na 1-W sběrnici, a mají v sobě chip, který měří hodnotu ze sensoru vlhkosti (který je současně umístěn na modulu SDS-1W-T-RH) a současně měří i teplotu a napájecí napětí pro sensor vlhkosti. &lt;br /&gt;
SDS interně provádí výpočet relativní vlhkosti (RH) pomocí kompenzační rovnice, určené výrobcem sensoru vlhkosti.&lt;br /&gt;
&lt;br /&gt;
K dispozici jsou jak surové hodnoty (změřené v rámci modulu SDS-1W-T-RH), tak i hodnota kompenzované (skutečné) relativní vlhkosti v místě umístění modulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Změřená teplota je uložena na standardních indexech:&lt;br /&gt;
&lt;br /&gt;
 sys[310] až sys[341]   &lt;br /&gt;
          01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 degC&lt;br /&gt;
&lt;br /&gt;
Dále jsou k dispozici surové hodnoty, nutné pro výpočet hodnoty RH (Relative Humidity):&lt;br /&gt;
&lt;br /&gt;
 sys[800] až sys[831]   &lt;br /&gt;
          08 i R   hodnota údaje (napětí Vad = výstupu čidla RH) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 V&lt;br /&gt;
&lt;br /&gt;
 sys[832] až sys[863]   &lt;br /&gt;
          08 i R   hodnota údaje (napětí Vdd = napájení čidla RH) z konkrétního čidla na 1-Wire&amp;amp;reg; sběrnici, hodnota v násobku 0.01 V&lt;br /&gt;
&lt;br /&gt;
SDS provádí přepočet na údaj RH v procentech (0 až 100):&lt;br /&gt;
&lt;br /&gt;
 sys[864] až sys[895]   &lt;br /&gt;
          08 i R   hodnota RH (0 až 100, v procentech RH) kompenzovaná podle rovnice pro čidlo HIH-503x (výpočet z Vad, kompenzace na Vdd a Temp).&lt;br /&gt;
&lt;br /&gt;
Rezerva (zatím nepoužito):&lt;br /&gt;
&lt;br /&gt;
 sys[896] až sys[899]  RESERVED vyhrazeno&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Doplňující informace pro 1-Wire zařízení ==&lt;br /&gt;
&lt;br /&gt;
1-Wire sběrnice u zařízení SDS umožňuje komunikaci s celou řadů 1-W chipů: [[OneWire|seznam je zde]]. Přístup k chipům na 1-W sběrnici se liší na dva typy: chipy (čidla) které si SDS interně zpracuje (např. měření teploty), a všechny ostatní chipy (které SDS jen umí vyhledat a oznámit, ale dále s nimi nekomunikuje).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1-Wire chipy interně zpracovávané SDS'''&lt;br /&gt;
&lt;br /&gt;
Tyto chipy jsou plně automaticky obsluhovány prostřednictvím firmware SDS - není potřebná opakovaná intervence uživatele, ten si pouze čte stále aktuální výsledky měření teplot z jednotlivých čidel.&lt;br /&gt;
&lt;br /&gt;
Poznámka: Pro změřené hodnoty z 1-W čidel teplot, jsou k dispozici tyto indexy: '''sys[310]''' až '''sys[430]''', a '''sys[900]''' až '''sys[931]'''.&lt;br /&gt;
&lt;br /&gt;
K dispozici je textové vyjádření (hex znaky) ROM CODE hodnoty načtené pro danou pozici zpracovávaného chipu na 1-W sběrnici.&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS mohou mít jednu [A] nebo dvě ( nezávislé, [A] a [B] ) 1-Wire sběrnice, a každá sběrnice má maximálně 16 připojených chipů.&lt;br /&gt;
Jednotlivé platné ROM CODE jsou v ''sys[]'' uloženy za sebou, viz výpis:&lt;br /&gt;
&lt;br /&gt;
 sys[900] 06 s RW  ROM CODE pro první chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[901] 06 s R   ROM CODE pro druhý chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
A tak dále až&lt;br /&gt;
&lt;br /&gt;
 sys[915] 06 s R   ROM CODE pro šestnáctý chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
Následuje sběrnice [B], je-li přítomná v daném zařízení (dostupné pouze pro SDS-MACRO):&lt;br /&gt;
&lt;br /&gt;
 sys[916] 06 s R   ROM CODE pro první chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
A tak dále . . . až&lt;br /&gt;
&lt;br /&gt;
 sys[931] 06 s R   ROM CODE pro šestnáctý chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
&lt;br /&gt;
'''Pozor''': pokud sběrnice [B] v zařízení není, tak sys[916] až sys[931] vrátí znak '-'.&lt;br /&gt;
&lt;br /&gt;
Tak jak jsou jednotlivé ROM CODE viditelné ve webové administraci, tak jsou tedy dostupné i přes sys[] položky.&lt;br /&gt;
&lt;br /&gt;
Poznámka: ROM CODE pro 1-W chipy jsou k dispozici pouze jako ucelené texty (string). Bajtový rozpad jednotlivých položek není k dispozici.&lt;br /&gt;
&lt;br /&gt;
 sys[931] až sys[939]  reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Ostatní 1-Wire chipy'''&lt;br /&gt;
&lt;br /&gt;
Pro ostatní 1-W chipy, které SDS &amp;quot;nezná&amp;quot; (tzn. nekomunikuje s nimi, jen je umí na sběrnici vyhledat), jsou jejich ROM CODE odděleny do samostatných '''sys[]''' položek.&lt;br /&gt;
&lt;br /&gt;
Čtení ostatních 1-W chipů se spouští v rámci SDS-C programu, který musí zavolat příslušnou SDS-C funkci. &lt;br /&gt;
Na základě zavolání této funkce dojde k vynulování všech příslušných '''sys[]''' (od indexu 940 resp. 970) pro danou sběrnici, a provede se pokus o přečtení připojeného chipu.&lt;br /&gt;
Pokud se to povede, bude nalezený ROM CODE (spolu s časovou značkou okamžiku přečtení) vložen do příslušných '''sys[]''', &lt;br /&gt;
nebo bude nastaven chybový kód.&lt;br /&gt;
&lt;br /&gt;
Pozor, k SDS lze připojit více různých &amp;quot;ostatních&amp;quot; chipů, ale zdejší funkce najde jenom ten první z nich a ostatní už ignoruje. &lt;br /&gt;
Ostatní chipy lze samozřejmě připojit na kteroukoliv sběrnici, i když na ní jsou připojeny i chipy se kterými SDS komunikuje (např. teploměrné chipy).&lt;br /&gt;
&lt;br /&gt;
Jednotlivé chipy se rozlišují pomocí hodnoty ''ID family-code'' (jeden bajt). Pro chip DS1990A je ''0x01'', hodnoty pro jiné chipy viz datasheet výrobce pro konkrétní chip.&lt;br /&gt;
&lt;br /&gt;
Obecný stav sběrnic:&lt;br /&gt;
&lt;br /&gt;
 sys[940] 06 i R   Stav 1-W sběrnice '''[A]''' pro rescan ostatních 1-W chipů&lt;br /&gt;
 sys[941] 06 i R   Stav 1-W sběrnice '''[B]''' pro rescan ostatních 1-W chipů&lt;br /&gt;
 :&lt;br /&gt;
                    == 0  : ještě nebylo provedeno jediné/jakékoliv čtení ostatních chipů na 1-W sběrnici&lt;br /&gt;
 &lt;br /&gt;
                    == 1  : došlo k chybě: nebylo dokončeno předchozí čtení sběrnice&lt;br /&gt;
                            (nesmíte požadovat nové čtení, dokud se plně neprovedlo to poslední)&lt;br /&gt;
 &lt;br /&gt;
                    == 2  : probíhá čtení ROM CODE z připojeného ostatního chipu&lt;br /&gt;
                            (dokud se toto nedokončí, nelze provést opětovný požadavek na další rescan/čtení)&lt;br /&gt;
 &lt;br /&gt;
                    == 4  : nebyl nalezen jakýkoliv ostatní chip (s odpovídajícím Family Code byte)&lt;br /&gt;
 &lt;br /&gt;
                    == 8  : byl přečten ROM CODE z připojeného ostatního chipu&lt;br /&gt;
                            (už lze také požádat o další nové čtení 1-W sběrnice)&lt;br /&gt;
 &lt;br /&gt;
                    == 16 : došlo k chybě: nepovedlo se přečíst data po 1-W sběrnici &lt;br /&gt;
                            (zkuste provést rescan/čtení znovu)&lt;br /&gt;
&lt;br /&gt;
 sys[942] až sys[949]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Pro sběrnici [A]:'''&lt;br /&gt;
&lt;br /&gt;
 sys[950] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire&lt;br /&gt;
                   (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).&lt;br /&gt;
                    - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),&lt;br /&gt;
                      a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze '''sys[3]'''&lt;br /&gt;
&lt;br /&gt;
 sys[951] 06 s R   celý text ROM CODE:&lt;br /&gt;
                    - ROM CODE pro chip na [A] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[952] až sys[959]: bajtový rozpad ROM CODE pro chip na [A] sběrnici 1-Wire&lt;br /&gt;
 :&lt;br /&gt;
 sys[952] 06 i R   romcode[0] (1-W: ID family-code byte)&lt;br /&gt;
 sys[953] 06 i R   romcode[1] (1-W: serial code)&lt;br /&gt;
 sys[954] 06 i R   romcode[2] (1-W: serial code)&lt;br /&gt;
 sys[955] 06 i R   romcode[3] (1-W: serial code)&lt;br /&gt;
 sys[956] 06 i R   romcode[4] (1-W: serial code)&lt;br /&gt;
 sys[957] 06 i R   romcode[5] (1-W: serial code)&lt;br /&gt;
 sys[958] 06 i R   romcode[6] (1-W: serial code)&lt;br /&gt;
 sys[959] 06 i R   romcode[7] (1-W: CRC byte)&lt;br /&gt;
&lt;br /&gt;
 sys[960] až sys[969]  reserved&lt;br /&gt;
&lt;br /&gt;
'''Pro sběrnici [B]:'''&lt;br /&gt;
&lt;br /&gt;
 sys[970] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire&lt;br /&gt;
                   (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).&lt;br /&gt;
                    - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),&lt;br /&gt;
                      a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze '''sys[3]'''&lt;br /&gt;
&lt;br /&gt;
 sys[971] 06 s R   celý text ROM CODE:&lt;br /&gt;
                    - ROM CODE pro chip na [B] sběrnici 1-Wire&lt;br /&gt;
                    - formát textu &amp;quot;0011223344556677&amp;quot; (8x HEX kód, bez uvozovek)&lt;br /&gt;
 &lt;br /&gt;
 sys[972] až sys[979]: bajtový rozpad ROM CODE pro chip na [B] sběrnici 1-Wire&lt;br /&gt;
 :&lt;br /&gt;
 sys[972] 06 i R   romcode[0] (1-W: ID family-code byte)&lt;br /&gt;
 sys[973] 06 i R   romcode[1] (1-W: serial code)&lt;br /&gt;
 sys[974] 06 i R   romcode[2] (1-W: serial code)&lt;br /&gt;
 sys[975] 06 i R   romcode[3] (1-W: serial code)&lt;br /&gt;
 sys[976] 06 i R   romcode[4] (1-W: serial code)&lt;br /&gt;
 sys[977] 06 i R   romcode[5] (1-W: serial code)&lt;br /&gt;
 sys[978] 06 i R   romcode[6] (1-W: serial code)&lt;br /&gt;
 sys[979] 06 i R   romcode[7] (1-W: CRC byte)&lt;br /&gt;
&lt;br /&gt;
 sys[980] až sys[989]  reserved&lt;br /&gt;
&lt;br /&gt;
Všimněte si, že SDS v tuto chvíli umožňuje pouze rescan 1-W sběrnice, kdy hledá pouze '''jeden''' připojený &amp;quot;ostatní 1-W chip&amp;quot; (ten první na který narazí, ten ohlásí, a nehledá dále). &lt;br /&gt;
&lt;br /&gt;
'''Pozor''':&lt;br /&gt;
&lt;br /&gt;
Pokud je takových chipů připojeno na sběrnici více, popř. pokud jsou smíchány s &amp;quot;teploměrnými&amp;quot; chipy, &lt;br /&gt;
bude při tomto rescanu uveden pouze první nalezený ostatní chip (tj. ten, který má nejnižší ROM-CODE ze všech připojených ostatních chipů).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[990] až sys[1023]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Speciální položky jen pro SDS-MACRO-LM a SDS-MACRO-ST ==&lt;br /&gt;
&lt;br /&gt;
'''Přímý přístup do LCD Frame Buffer paměti:'''&lt;br /&gt;
&lt;br /&gt;
 sys[1024] až sys[1551]   LCD buffer (dostupné jen pro SDS MACRO LM a SDS MACRO ST !)&lt;br /&gt;
          01 i RW  každý index v rámci tohoto rozsahu sys[] lze zapisovat i číst&lt;br /&gt;
                   - jedná se o pole 528 bajtů (4 řádky x 132 sloupců)&lt;br /&gt;
                   - každý bajt pole obsluhuje přesně danou oblast (několika pixelů) LCD displaye&lt;br /&gt;
                   - platné hodnoty pro každý index : 0 až 255 včetně  - zapisujte a čtěte jen hodnoty 0 až 255 (včetně)&lt;br /&gt;
&lt;br /&gt;
Tyto položky jsou dosupné '''pouze a jenom''' na SDS-MACRO-LM kde je vyžadován firmware od 24.11.2016 nebo novější, a na SDS-MACRO-ST (všechny FW verze).&lt;br /&gt;
&lt;br /&gt;
Jakékoliv změny (zápis) se promítnou pouze do frame bufferu (tedy v paměti SDS) - ale aby se následně tento frame buffer (jeho změněný obsah) eventuálně vykreslil na LCD, je potřeba zavolat příslušnou SDS-C funkci !&lt;br /&gt;
&lt;br /&gt;
Čtení ze sys poskytuje přímý přístup do frame bufferu (jeho aktuální obsah, tedy opět ne nutně to co je právě vidět na LCD).&lt;br /&gt;
&lt;br /&gt;
Pokud nepoužíváte LCD (sandwich desku), můžete tuto oblast 528 bajtů využít pro jakékoliv své účely. V podstatě se pak jedná o rozšiřující RAM pamět pro váš SDS-C program.&lt;br /&gt;
&lt;br /&gt;
'''Pozor''' SDS-MACRO-ST&lt;br /&gt;
&lt;br /&gt;
SDS MACRO ST provádí automatické aktualizace (zápis) do LCD bufferu, pokud se o tento buffer nepřihlásí SDS-C program. Proto, pokud na MACRO-ST chcete využít LCD buffer pro jiné své účely, musíte to nejprve SDS říct. Znovu, toto platí jen pro MACRO-ST - ''není to potřeba pro MACRO-LM (které tam po zapnutí nahraje logo a pak už na buffer za běhu nesáhne)''. Pro MACRO-ST zavolejte kteroukoliv SDS-C funkci pro přístup na display (např. clear) a je to - tím se přepne vlastnictví LCD bufferu pro SDS-C program.&lt;br /&gt;
&lt;br /&gt;
== Vyhrazená oblast ==&lt;br /&gt;
&lt;br /&gt;
'''Zbytek:'''&lt;br /&gt;
&lt;br /&gt;
 sys[1552] až sys[1663]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bateriově Zálohovaná Paměť ==&lt;br /&gt;
&lt;br /&gt;
'''POUZE PRO: SDS-TTCPRO a SDS-MINI a SDS-MICRO-ST a SDS-MACRO-sT a SDS-IO6-ST !''' (tedy ty s baterií) - všechny jiné SDS První Řady tyto specifické indexy v sys[] nemají k dispozici!&lt;br /&gt;
&lt;br /&gt;
Pozor! Tato funkce vyžaduje FW od 18.8.2017 a nebo novější. &lt;br /&gt;
&lt;br /&gt;
 sys[1664] až sys[1791]   (pouze pro SDS TTCPRO a SDS MINI a SDS MICRO-ST a SDS MACRO-ST a SDS IO6-ST)&lt;br /&gt;
          07 i RW  sada 128 samostatných pozic v zálohované paměti RAM, pro ukládání libovolných hodnot&lt;br /&gt;
                    - každý index má k dispozici 32 bitů (tj. celý signed integer)&lt;br /&gt;
                    - čtení a zápis je rychlé (je to v RAM, takže se nemusí čekat jako při práci s DF)&lt;br /&gt;
                    - lze použít nezávisle (lze přístupovat ke kterékoliv položce &amp;quot;na přeskáčku&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Pozor! Oblast záložní paměti je k dispozici pouze na vybraných zařízeních SDS (ty, které mají osazenu baterii pro tyto účely). Údaje se nesmazají změnou programu (nahráním nového programu), ani se nesmazají resetem zařízení (kromě aktivace RSTD - pozor!), tzn. vydrží a zůstanou, a to dokonce i po celou dobu výpadku externího napájení (tak dlouho, dokud se nevybije záložní baterie).&lt;br /&gt;
&lt;br /&gt;
''(Pouze) pokud baterie v daném SDS není'': tak jsou údaje ztraceny po výpadku napájení (ale po dobu přítomnosti externího napájení jsou k dispozici). Při takové situaci není zaručen obsah těchto dat po zapnutí (měl by být nulový, ale bez záruky).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Další informace ze S0 vstupů ==&lt;br /&gt;
&lt;br /&gt;
Následující položky jsou k dispozici pro všechny SDS První Produktové Řady.&lt;br /&gt;
&lt;br /&gt;
Od verze SDS-C č. 07 jsou přidány tyto systémové proměnné:&lt;br /&gt;
&lt;br /&gt;
 sys[1792] až sys[1823]  &lt;br /&gt;
          07 i R   cena za jednotku v režimu T0&lt;br /&gt;
                    - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)&lt;br /&gt;
 &lt;br /&gt;
 sys[1824] až sys[1855]  &lt;br /&gt;
          07 i R   cena za jednotku v režimu T1&lt;br /&gt;
                    - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)&lt;br /&gt;
 &lt;br /&gt;
 sys[1856] až sys[1887]  &lt;br /&gt;
          07 s R   název jednotky se vztahem k času, podle nastavení (např. text &amp;quot;kWh&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1888] až sys[1919]&lt;br /&gt;
          07 s R   název měny, podle nastavení (např. text &amp;quot;CZK&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1920] až sys[1951]  &lt;br /&gt;
          07 s R   název jednotky bez vztahu k času, podle nastavení (např. text &amp;quot;kW&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1952] až sys[1983]  &lt;br /&gt;
          07 s R   název činnosti, podle nastavení (např. text &amp;quot;spotřeba&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[1984] až sys[2015]  &lt;br /&gt;
          07 s R   název měřiče, podle nastavení (např. text &amp;quot;elektroměr č. 1&amp;quot;)&lt;br /&gt;
                    - text&lt;br /&gt;
 &lt;br /&gt;
 sys[2016] až sys[2047]  &lt;br /&gt;
          07 i R   konfigurační detaily pro daný S0 vstup&lt;br /&gt;
                    - bit 0 nastaven = je to aktivní S0 vstup&lt;br /&gt;
                    - bit 1 nastaven = tento S0 vstup je rozdělen na dvoutarif T0/T1 (jinak je to jedno-tarif)&lt;br /&gt;
&lt;br /&gt;
Samozřejmě pro využití těchto systémových proměnných, potřebujete mít v SDS aktuální firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[2048] až sys[2198]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MQTT klient ==&lt;br /&gt;
&lt;br /&gt;
Vždy si zjistěte, jestli máte v SDS takové FW, které podporuje funkci MQTT klient:&lt;br /&gt;
&lt;br /&gt;
 sys[2199] 09 i R   podpora MQTT&lt;br /&gt;
                     0 = NE&lt;br /&gt;
                     1 = ANO, verze MQTT 3.1.1, SDS první část implementace&lt;br /&gt;
                     2..max = (reserved)&lt;br /&gt;
&lt;br /&gt;
Každé nové připojení k Brokeru:&lt;br /&gt;
&lt;br /&gt;
 sys[2200] 09 i R   stav průběhu mqtt_connect()&lt;br /&gt;
                     -7 = obdrželi jsme CONNACK, ale negativní = nepřipojeno ( výsledek viz sys[2201] )&lt;br /&gt;
                     -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = pokus o TCP připojení selhal&lt;br /&gt;
                     -1 = nepoužito&lt;br /&gt;
                      0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                      1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                      2 = TCP připojeno a odeslán CONNECT požadavek&lt;br /&gt;
                      4 = obdrželi jsme CONNACK, připojeno ( výsledek viz sys[2201] )&lt;br /&gt;
                      8 = probíhá odpojování, čekáme na výsledek (na odpojení)&lt;br /&gt;
&lt;br /&gt;
Po zavolání mqtt_connect(...) je nutné testovat sys[2200] na výslednou hodnotu. Funkci mqtt_connect(...) nelze volat, je-li sys[2200] na hodnotě 1, 2, 8 nebo 16 (nejprve je v takových případech potřeba provést odpojení pomocí mqtt_disconnect() funkce). Pro úplný test, je-li připojení z SDS do Brokeru úplné, je potřeba ověřit i hodnotu v sys[2201]. Teprve pokud oba tyto sys jsou na správné hodnotě, lze s Brokerem komunikovat.&lt;br /&gt;
&lt;br /&gt;
 sys[2201] 09 i R   výsledek mqtt_connect() = hodnota &amp;quot;CONNACK Connect Return&amp;quot;&lt;br /&gt;
                     -7 = nepoužito&lt;br /&gt;
                     -6 = timeout při čekání na CONNACK, nepřipojeno&lt;br /&gt;
                     -5 = nepoužito&lt;br /&gt;
                     -4 = nepoužito&lt;br /&gt;
                     -3 = nepoužito&lt;br /&gt;
                     -2 = probíhá připojování, čekáme na CONNACK (zatím nepřišel)&lt;br /&gt;
                     -1 = idle, nepřipojeno&lt;br /&gt;
                      0 = (výsledek:) MQTT 0x00: broker akceptoval připojení - LZE POKRAČOVAT (provádět Publish, Subscribe)&lt;br /&gt;
                      1 = MQTT 0x01: Connection Refused, unacceptable protocol version&lt;br /&gt;
                      2 = MQTT 0x02: Connection Refused, identifier rejected&lt;br /&gt;
                      3 = MQTT 0x03: Connection Refused, Server unavailable&lt;br /&gt;
                      4 = MQTT 0x04: Connection Refused, bad user name or password&lt;br /&gt;
                      5 = MQTT 0x05: Connection Refused, not authorized&lt;br /&gt;
&lt;br /&gt;
Hodnotu v sys[2201] lze číst a zpracovat pouze pokud je sys[2200] na hodnotě 16 (to znamená, pouze pokud SDS obdrží odpověď CONNACK od MQTT brokera).&lt;br /&gt;
&lt;br /&gt;
Před a po každém volání mqtt_publish() a nebo mqtt_subscribe() funkcí je potřeba sledovat obsah následují položky:&lt;br /&gt;
&lt;br /&gt;
 sys[2202] 09 i R   výsledek pro tyto funkce: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
                     -8 = SUBACK dorazil z Broker ale s indikovanou chybou (Failure Bit), můžete volat další funkci&lt;br /&gt;
                     -7 = vybraná položka (řádek) subscribe tabulky je prázdná, není co odhlašovat&lt;br /&gt;
                     -6 = timeout (možnosti: publish neprovedeno, nebo: SUBACK vůbec nedorazil, nebo: UNSUBACK vůbec nedorazil), můžete volat další funkci&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty, např. index) např. jejich celková délka se nevleze do paketu&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů)&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = SDS není připojeno k brokeru (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                     -1 = bez aktivity&lt;br /&gt;
                      0 = nepoužito&lt;br /&gt;
                      1 = mqtt_publish() probíhá&lt;br /&gt;
                      2 = mqtt_publish() hotovo (OK - obdržen TCP ACK), můžete volat další funkci&lt;br /&gt;
                      4 = mqtt_subscribe() probíhá - čekám na SUBACK&lt;br /&gt;
                      8 = SUBACK dorazil z Broker, bez chyby (OK), můžete volat další funkci&lt;br /&gt;
                     16 = čekám na UNSUBACK (pouze pro unsubscribe funkce)&lt;br /&gt;
                     32 = UNSUBACK dorazil z Brokeru, můžete volat další funkce&lt;br /&gt;
&lt;br /&gt;
Informativní položka:&lt;br /&gt;
&lt;br /&gt;
 sys[2203] 09 i R   počet chyb v protokolu MQTT směrem z Brokeru&lt;br /&gt;
                    (objeví-li se chyba, dojde k okamžitému odpojení)&lt;br /&gt;
&lt;br /&gt;
Zatím nepoužité pozice:&lt;br /&gt;
&lt;br /&gt;
 sys[2204] až sys[2208]   reserved&lt;br /&gt;
&lt;br /&gt;
Pro každou příchozí datovou zprávu z Brokeru, je tato zpráva uložena do následujících sys: (pozor, každá nová příchozí zpráva přepíše předchozí údaje)&lt;br /&gt;
&lt;br /&gt;
 sys[2210] 09 s R   poslední přijatý Topic Name z Brokeru (broker publish)&lt;br /&gt;
 sys[2250] 09 s R   poslední přijatý Value z Brokeru (broker publish)&lt;br /&gt;
 sys[2290] 09 i R   timestamp pro poslední přijatou zprávu (broker publish)&lt;br /&gt;
&lt;br /&gt;
SDS umí přijaté datové zprávy uchovat, v rámci následující tabulky. Toto je důležité zejména pokud různé zprávy přicházejí velice rychle za sebou, aby se pro SDS-C program neztratili.&lt;br /&gt;
&lt;br /&gt;
Nejvíce lze mít až 32 položek (řádků) v tabulce, nicméně některá SDS nemají ve své paměti dostatečné místo a počet je tedy omezen. Pozor na to při psaní programu !&lt;br /&gt;
&lt;br /&gt;
 sys[2209] 09 i R   počet řádků v tabulce pro dané SDS (různé SDS mají různě volnou paměť, proto je v nich i různý počet použitelných Subscribe položek)&lt;br /&gt;
&lt;br /&gt;
Jednotlivé položky v tabulce příchozích zpráv:&lt;br /&gt;
&lt;br /&gt;
 sys[2211] až sys[2241] &lt;br /&gt;
          09 s R   název položky (Topic Name) pro daný index #1 - #31&lt;br /&gt;
                   (max délka záznamu dle SDS)&lt;br /&gt;
 &lt;br /&gt;
 sys[2242] až sys[2249]   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2251] až sys[2281] &lt;br /&gt;
          09 s R   poslední přijatá hodnota (Value) ze publish zprávy ze brokeru pro daný index #1 - #31&lt;br /&gt;
                   (max délka záznamu dle SDS)&lt;br /&gt;
 &lt;br /&gt;
 sys[2282] až sys[2289]   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2291] až sys[2321] &lt;br /&gt;
          09 i R   timestamp (hodnota uptime) v okamžiku příchodu zprávy z Brokeru&lt;br /&gt;
                   (pro detekci změny - příchozí zprávy z Brokeru)&lt;br /&gt;
                   0 = zatím nic nepřišlo&lt;br /&gt;
                   1..MAX = hodnota uptime v okamžiku poslední změny&lt;br /&gt;
&lt;br /&gt;
Nastavení Topic názvů každé položky (tedy &amp;quot;zápis&amp;quot; do sys[2211] až sys[2241]) se provede funkcí mqtt_subscribe(), které zadáváte pozici v této tabulce a název Topicu. Pokud se Subscribe nepovede, zůstane pozice v tabulce prázdná. Po připojení k Brokeru je tabulka vždy zcela prázdná, a SDS-C program si ji vždy musí dle potřeby naplnit. Pokud Broker pošle aktualizaci obsahu (value) na některou z přihlášených Topic položek, které SDS v této tabulce má, tak SDS automaticky přepíše patřičný řádek tabulky (tj. obsah jednoho ze sys[2251] až sys[2281]) a patřičně aktualizuje časovou známku změny.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Reserved ==&lt;br /&gt;
&lt;br /&gt;
 sys[2322] až sys[2398]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MODBUS-TCP klient ==&lt;br /&gt;
&lt;br /&gt;
Ověření FW v SDS:&lt;br /&gt;
&lt;br /&gt;
 sys[2399] 09 i R   podpora pro MODBUS TCP&lt;br /&gt;
                     0 = NE&lt;br /&gt;
                     1 = ANO (první verze implementace v SDS)&lt;br /&gt;
&lt;br /&gt;
Každé nové TCP spojení na server:&lt;br /&gt;
&lt;br /&gt;
 sys[2400] 09 i R   stav průběhu modbus_tcp_connect()&lt;br /&gt;
                     -6 = timeout při čekání na připojení, nepřipojeno&lt;br /&gt;
                     -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno&lt;br /&gt;
                     -4 = nespravne parametry (počet parametrů), nepřipojeno&lt;br /&gt;
                     -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                     -2 = pokus o TCP připojení selhal&lt;br /&gt;
                     -1 = nepoužito&lt;br /&gt;
                      0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)&lt;br /&gt;
                      1 = bylo zahájeno připojování (otevírá se TCP spojení)&lt;br /&gt;
                      2 = TCP připojeno, můžete komunikovat &lt;br /&gt;
&lt;br /&gt;
MODBUS funkce - každá má svůj nezávislý stavový údaj:&lt;br /&gt;
&lt;br /&gt;
 sys[2401] 09 i R   stav průběhu zpracování funkce 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
 sys[2402] 09 i R   stav průběhu zpracování funkce 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
 sys[2403] 09 i R   stav průběhu zpracování funkce 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
 sys[2404] 09 i R   stav průběhu zpracování funkce 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
 sys[2405] 09 i R   stav průběhu zpracování funkce 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
 sys[2406] 09 i R   stav průběhu zpracování funkce 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
 sys[2415] 09 i R   stav průběhu zpracování funkce 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
 sys[2416] 09 i R   stav průběhu zpracování funkce 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
                     pro všechny tyto stavy platí následující hodnoty:&lt;br /&gt;
                      -6 = timeout (neprovedeno), můžete volat další funkci&lt;br /&gt;
                      -5 = nespravne parametry (hodnoty), můžete volat další funkci&lt;br /&gt;
                      -4 = nespravne parametry (počet parametrů), můžete volat další funkci&lt;br /&gt;
                      -3 = funkce zavolána dříve (nebo opakovaně) než bylo dokončeno předchozí volání funkce, takže toto volání je ignorováno&lt;br /&gt;
                      -2 = SDS není připojeno (buď právě ještě probíhá připojování, nebo není vůbec připojeno)&lt;br /&gt;
                      -1 = bez aktivity, lze volat funkci&lt;br /&gt;
                       0 = provedeno OK (obdržena platná odpověď bez chybového kódu), můžete volat další funkci&lt;br /&gt;
                       1 .. 15 = obdržena odpověď s chybou 0x01 až 0x0F, můžete volat další funkci&lt;br /&gt;
                     256 = pracuji, čekejte na aktualizovanou hodnotu&lt;br /&gt;
&lt;br /&gt;
 sys[2417] až sys[2462]   reserved&lt;br /&gt;
&lt;br /&gt;
 sys[2463] 09 i R  poslední hodnota Unit Identifier zapsaná do MBAP hlavičky při odeslání zprávy&lt;br /&gt;
 &lt;br /&gt;
 sys[2464] 09 i R  poslední hodnota Transaction Identifier zapsaná do MBAP hlavičky při odeslání zprávy&lt;br /&gt;
&lt;br /&gt;
Přijatá data (funkce _read) - obsah je aktualizován pro každou novou přijatou MODBUS zprávu. Výsledky (přijatá data) jsou vždy uloženy do následujících sys (bez ohledu na typ MODBUS funkce).&lt;br /&gt;
&lt;br /&gt;
 sys[2465] 09 i R  timestamp poslední přijaté zprávy&lt;br /&gt;
                   (vhodné pro detekci nové přijaté zprávy)&lt;br /&gt;
 &lt;br /&gt;
 sys[2466] 09 i R  počet přijatých položek, pro poslední přijatou zprávu&lt;br /&gt;
                   (počet celých položek)&lt;br /&gt;
 &lt;br /&gt;
 sys[2467] 09 i R  přijatá hodnota Unit Identifier z příchozí MBAP hlavičky&lt;br /&gt;
                   (hodnota adresy je převzata z příchozí zprávy)&lt;br /&gt;
 &lt;br /&gt;
 sys[2468] 09 i R  přijatá hodnota Transaction Identifier z příchozí MBAP hlavičky&lt;br /&gt;
                   (hodnota adresy je převzata z příchozí zprávy) &lt;br /&gt;
 &lt;br /&gt;
 sys[2469] 09 i R  adresa první položky coil/input/register (které odpovídá údaj v sys[2470])&lt;br /&gt;
                   (MODBUS způsob číslování položek - adresa 1..n)&lt;br /&gt;
 &lt;br /&gt;
 sys[2470] až sys[2719]&lt;br /&gt;
          09 i R   přijaté hodnoty pro poslední přijatou zprávu&lt;br /&gt;
                    MODBUS funkce 0x01 a 0x02: každý sys[] má hodnotu 0 až 255, jednotlivé bity určují coils/input&lt;br /&gt;
                    MODBUS funkce 0x03 a 0x04: každý sys[] má hodnotu -32768 až 32767, tedy hodnotu pro každý jeden registr&lt;br /&gt;
&lt;br /&gt;
Pro funkce 0x01 a 0x02 jsou přijatá data kódována v jednobitovém tvaru, vždy po osmi bitech na jeden sys[]. Takže prvních osm bitů naleznete v sys[2465], dalších osm bitů v sys[2466] a tak dále.&lt;br /&gt;
&lt;br /&gt;
Pro funkce 0x03 a 0x04 jsou přijaté hodnoty registrů (MODBUS: vždy int16_t) uloženy postupně zasebou (tak jak přišli ve zprávě) do jednotlivých sys[], takže první registr je v sys[2465], druhý ve sys[2466] atd.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezerva&lt;br /&gt;
&lt;br /&gt;
 sys[2715] až sys[2809]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Statistiky COMx ==&lt;br /&gt;
&lt;br /&gt;
COM1:&lt;br /&gt;
&lt;br /&gt;
 sys[2810] 09 i R   reserved&lt;br /&gt;
 &lt;br /&gt;
 sys[2811] 09 i R   počet odeslaných bajtů (TX) na port COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2812] 09 i R   počet neodeslaných bajtů (zahozených) pro port COM1 &lt;br /&gt;
                    (tzn. SDS chce odeslat více bajtů než zvládá nastavená rychlost COM portu)&lt;br /&gt;
 &lt;br /&gt;
 sys[2813] 09 i R   počet čekajících bajtů na odeslání (TX) ve frontě pro port COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2814] 09 i R   počet přijatých bajtů (RX) na portu COM1&lt;br /&gt;
 &lt;br /&gt;
 sys[2815] 09 i R   počet nepřijatých bajtů (ignorované) pro port COM1 &lt;br /&gt;
                    (tzn. pro případ kdy do SDS je posláno více bajtů než SDS zpracuje, a tak musí zahazovat)&lt;br /&gt;
 &lt;br /&gt;
 sys[2816] 09 i R   počet nevyzvednutých přijatých bajtů (RX) ve frontě pro port COM1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rezerva&lt;br /&gt;
&lt;br /&gt;
 sys[2817] až sys[2860]   reserved&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
COM6:&lt;br /&gt;
&lt;br /&gt;
 sys[2861] 09 i R   počet odeslaných bajtů (TX) na port COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2862] 09 i R   počet neodeslaných bajtů (zahozených) pro port COM6&lt;br /&gt;
                    (tzn. SDS chce odeslat více bajtů než zvládá nastavená rychlost COM portu)&lt;br /&gt;
 &lt;br /&gt;
 sys[2863] 09 i R   počet čekajících bajtů na odeslání (TX) ve frontě pro port COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2864] 09 i R   počet přijatých bajtů (RX) na portu COM6&lt;br /&gt;
 &lt;br /&gt;
 sys[2865] 09 i R   počet nepřijatých bajtů (ignorované) pro port COM6&lt;br /&gt;
                    (tzn. pro případ kdy do SDS je posláno více bajtů než SDS zpracuje, a tak musí zahazovat)&lt;br /&gt;
 &lt;br /&gt;
 sys[2866] 09 i R   počet nevyzvednutých přijatých bajtů (RX) ve frontě pro port COM6&lt;br /&gt;
&lt;br /&gt;
Pro využití všech těchto statistik, je potřeba mít v SDS aktuální firmware (starší FW zde vrací nuly).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Konec dokumentu ==&lt;br /&gt;
&lt;br /&gt;
'''Konec dokumentu.'''&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_firmware_changelog&amp;diff=967</id>
		<title>SDS BIG: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_firmware_changelog&amp;diff=967"/>
		<updated>2025-10-25T13:13:23Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-BIG(2) , SDS-SMALL(2), SDS-STSW a všechny OEM ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS-BIG a SDS-SMALL a SDS-STSW.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 25.10.2025 ==&lt;br /&gt;
* doplněna položka do M2M stránky onewire.csv - uživatelský název každého 1W prvku&lt;br /&gt;
* FC: doplněna nová funkcionalita do funkce SDS_reset_program() - viz popis této funkce na wiki&lt;br /&gt;
&lt;br /&gt;
== 11.8.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* FC: přidány indexy 70 a 71 a 72&lt;br /&gt;
&lt;br /&gt;
== 28.3.2025 ==&lt;br /&gt;
* oprava odpovědi pro S-UDP příkaz 0x04 (Read FC)&lt;br /&gt;
&lt;br /&gt;
== 15.3.2025 ==&lt;br /&gt;
* oprava odpovědi pro S-UDP příkaz 0x08 (Write FC)&lt;br /&gt;
&lt;br /&gt;
== 27.2.2025 ==&lt;br /&gt;
* upraven timeout pro čtení souboru z SD karty přes webový server (poskytování obsahu z SD karty na web)&lt;br /&gt;
* 512: oprava nefunkčního čtení ze sériové linky COM6&lt;br /&gt;
&lt;br /&gt;
== 8.2.2025 ==&lt;br /&gt;
* oprava některých payloadů v protokolu SUDP &lt;br /&gt;
&lt;br /&gt;
== 22.7.2024 ==&lt;br /&gt;
* FULLC.EXE - odstraněna chyba, která neumožnila nahrát do SDS soubor FCB větší než 64kB&lt;br /&gt;
* možnost volby klidového stavu pro každý S0 vstup (umožňuje počítat impulsy i pro NC spínače v měřiči energie)&lt;br /&gt;
* FC: SDS_reset_program() nezanechává nadbytečnou chybouvou hlášku v konzoli&lt;br /&gt;
* FC: mqtt_publish() použije vámi nastavené bitové pole do PUBLISH hlavičky (viz index 11198)&lt;br /&gt;
* SMTP odesílání by mělo být robustnější při odesílání více emailů za sebou&lt;br /&gt;
&lt;br /&gt;
== 24.2.2024 ==&lt;br /&gt;
* možnost smazat nahraný TLS klíč+certifikát (tlačítko s heslem, ve webovém rozhraní)&lt;br /&gt;
* RSTD nesmaže (nanastaví na tovární hodnoty) vaše nastavení pro všechny AD vstupy (to lze teď udělat ručně, nově přidaným tlačítkem ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 31.10.2023 ==&lt;br /&gt;
* SNMP - oprava způsobu předání chyby v odpovědi&lt;br /&gt;
* SNMP v1 - možnost nastavit dvě nezávislé komunity&lt;br /&gt;
* 512: plná implementace SNMP v3 (včetně AUTHPRIV)&lt;br /&gt;
* 64,128: omezená implementace SNMP v3 (pouze NOAUTHNOPRIV)&lt;br /&gt;
* FC: indexy 66, 67, 68, 4990..4999&lt;br /&gt;
&lt;br /&gt;
== 19.8.2023 ==&lt;br /&gt;
* oprava SDS UDP SEARCH (příchozí paket na portu 20484 byl firewallem od verze 6.6.23 zahozen, teď už opraveno)&lt;br /&gt;
* 512: HTTPS server (aktivace nahráním certifikátu, jinak zůstává HTTP)&lt;br /&gt;
&lt;br /&gt;
== 14.7.2023 ==&lt;br /&gt;
* HTTP POST: oprava sekundární chyby (objevila se ve FW 6.6.2023), kdy FW akceptoval jen rozdělený krok č. 2 (teď už opět umí jak rozdělený, tak i nerozdělený krok č. 2)&lt;br /&gt;
* FC: umožněn přímý zápisu do indexu 193 (přímo zapíše do registru PWM - určeno pro nejjemnější uživatelskou přímo konfiguraci generátoru PWM)&lt;br /&gt;
&lt;br /&gt;
== 6.6.2023 ==&lt;br /&gt;
* funkce http_header_set_user_row() má zvětšenou maximální délku parametru na 255 znaků&lt;br /&gt;
* 512: počet MQTT subscribe zvětšen z max. 8 na max. 20&lt;br /&gt;
* 512: další zvětšení FC konzole&lt;br /&gt;
* webový admin: úprava (oprava) použití timerů v javascriptu &lt;br /&gt;
* FC: DNS resolv umí pracovat s širším rozsahem UDP portů (někdy způsobilo nepřijetí odpovědi a musel se resolv opakovat)&lt;br /&gt;
* HTTP POST: poradí si i s ne-oddělenou komunikací (když klient pošle úvodní konverzační data najednou, neodděleně, tzn. nečeká na odpověď ze serveru)&lt;br /&gt;
 &lt;br /&gt;
== 9.3.2023 ==&lt;br /&gt;
* FC: verze 0x12 (+ odpovídající FULLC.EXE): přidány funkce http_header_set_user_row() a http_header_set_content_type()&lt;br /&gt;
* 64 a 128: odstraněno možné zpomalení běhu po zapnutí v určité okrajové situaci&lt;br /&gt;
&lt;br /&gt;
== 28.2.2023 ==&lt;br /&gt;
* POST: přidán příkaz /wrdf&lt;br /&gt;
* POST: oprava chyby, kdy mohlo dojít k neprovedení akce na základě příkazu /changeip&lt;br /&gt;
* malá bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 9.1.2023 ==&lt;br /&gt;
* FC verze 0x11 (+ odpovídající FULLC.EXE)&lt;br /&gt;
* firmware pro všechny HW varianty BIG, BIG2-DP a BIG2-DP-DS84&lt;br /&gt;
* web: doplněno zobrazení surových hodnot, čtených z 1-Wire zařízení &lt;br /&gt;
* FC: přidána funkce SDS_onewire_config() pro varianty -DS84&lt;br /&gt;
* FC: doplněna funkčnost FC WatchDog (pro situaci, pokud spadne program na chybu a je zastaven, tak FC Watchdog pokračuje a provede restart FC programu)&lt;br /&gt;
* FC: doplněna archivace poslední chyby FC programu, a zobrazení na webu (i v případě restartu FC Watchdogem)&lt;br /&gt;
* FC: funkce pro prohledání složky (file_opendir, file_readdir, file_closedir)&lt;br /&gt;
* oprava PWM3 a PWM4 na BIG2-64/128 - funkce, ukládání nastavení&lt;br /&gt;
* HW BIG2 DS84: RTC běží na baterii na všech HW variantách DS84 - udržuje běžící aktuální čas i při vypnutém napájení&lt;br /&gt;
* FC: přidána funkce SDS_onewire_search_bus()&lt;br /&gt;
* FC: přidány indexy 132..136 , indexy 2488..2499, 2986..2997&lt;br /&gt;
&lt;br /&gt;
== 1.12.2022 ==&lt;br /&gt;
* bezpečnostní aktualizace (dle nahlášené záležitosti a testu)&lt;br /&gt;
* trvalé zobrazení archivovaného HW faultu v Logu (pokud dojde k faultu, je hned před restartem zařízení archivován a trvale zobrazován ve výpisu, i po libovolném novém spuštění)&lt;br /&gt;
* odstraněno eventuální čekání (a následný WDG restart) při komunikaci s externími I2C zařízeními (specifické chipy na sandwich deskách uživatelů)&lt;br /&gt;
&lt;br /&gt;
== 30.11.2022 ==&lt;br /&gt;
* FC: zvýšena výkonnost (512: optimalizace pro až několika-násobné celkové zrychlení vykonávání programu) (64,128: byť jen menší zrychlení, ale přece + zvětšená konzole echo.htm) &lt;br /&gt;
* zrychleno webové rozhraní (zpomaleno zřejmě o dvě verze zpět, byť to bylo bez vlivu na funkci, je vhodnější když to nezdržuje při zobrazování v prohlížeči)&lt;br /&gt;
* FC: přidán index 137&lt;br /&gt;
* zlepšena interní obsluha sériových linek (COMx/RS485), odstraněno možné náhodné zpoždění (byť jen ve specifickém případě a jen o několik msec, ale i tak se toto vyřešilo)&lt;br /&gt;
&lt;br /&gt;
== 22.11.2022 ==&lt;br /&gt;
* FC (64/128/512): verze 0x10 &lt;br /&gt;
* dns_resolv správně hlásí chybu 516 a 517 při výpadku připojení v průběhu dotazu&lt;br /&gt;
&lt;br /&gt;
== 18.11.2022 ==&lt;br /&gt;
* FC (64/128): verze 0x10 &lt;br /&gt;
* FC: nová funkce SDS_set_RTC&lt;br /&gt;
* FC: nové funkce pro práci s float&lt;br /&gt;
* oprava pro mounting některých typů SD karet&lt;br /&gt;
&lt;br /&gt;
== 14.11.2022 ==&lt;br /&gt;
* FC: oprava výpočtů v 64-bit doméně&lt;br /&gt;
* FC: file_expand() - detailnější rozvrstvení návratových chybových hodnot&lt;br /&gt;
* web: rozšířeny zobrazované informace o probíhajícím připojování SD karty&lt;br /&gt;
* web server: vrací korektně 503 pro soubory na SD kartě, které jsou zablokovány FC programem&lt;br /&gt;
* FC: rozšířena a zásadně zlepšena implementace printf/sprintf/snprintf/sscanf - viz detaily v návodu na wiki&lt;br /&gt;
* FC: zlepšen výpis (informace na web) při určitých chybách v FC programu, plus další drobky kolem echo.htm&lt;br /&gt;
&lt;br /&gt;
== 16.10.2022 ==&lt;br /&gt;
* tento firmware (od této verze) podporuje i hardware SDS 64/128/512 ve variantě DP&lt;br /&gt;
* podpora pro 4 PWM výstupy (pro vhodný hardware - BIG2)&lt;br /&gt;
* odpověď na (webový) příkaz /sv? , má doplněný obsah http hlavičky, takže by ji mělo být snazší zpracovat&lt;br /&gt;
* FC: watchdog programu je (nově) pozastaven po dobu mountování SD karty (protože je pozastaven i program)&lt;br /&gt;
* FC: zápis do indexu 999 funguje jak má&lt;br /&gt;
* FC: verze 0x0F (nové funkce PWMx)&lt;br /&gt;
&lt;br /&gt;
== 5.10.2022 ==&lt;br /&gt;
* pouze vše řady 512 (ostatní bez tohoto problému) - důležitá oprava situace kdy někdy chybně došlo ke smazání nahraného FC programu při nahrání nového UWEB projektu do SDS&lt;br /&gt;
&lt;br /&gt;
== 30.9.2022 ==&lt;br /&gt;
* FC: oprava běhu programu v situaci kdy v kódu je vnořený (nested) switch() v rámci jiného switch() (původně chybné chování, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 28.9.2022 ==&lt;br /&gt;
* FC: oprava výsledků maker (define), kdy chybně docházelo k pevnému přetypování na int32_t, což je teď opraveno (odstraněno)&lt;br /&gt;
&lt;br /&gt;
== 1.8.2022 ==&lt;br /&gt;
* správně zobrazovaná hláška (nápověda) na úvodní webové stránce ohledně stavu konfigurace&lt;br /&gt;
* FC: přidáno tlačítko (odkaz) pro restart FULLC programu (např. pokud skončil a chcete jej ručně spustit znovu)&lt;br /&gt;
* FC: do výpisu chyby při pádu programu je přidán UTC čas (pro identifikaci, kdy se chyba stala)&lt;br /&gt;
* FC: spolehlivostní úpravy při startu programu (načtení z DF), a při zápisu nového programu (práce s DF)&lt;br /&gt;
&lt;br /&gt;
== 11.7.2022 ==&lt;br /&gt;
* FC: verze 0x0E&lt;br /&gt;
* FC: přidána funkce mktime()&lt;br /&gt;
* FC: přidána funkce gmtime()&lt;br /&gt;
* FC: přidána funkce localtime()&lt;br /&gt;
* opraveno zachování konfigurace ipwdg (webové rozhraní) a obsluhy relé ipwdg&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* FC: verze 0x0D&lt;br /&gt;
* FC: upravena funkce SDS_TOPB_keyboard_status() pro lepší předané výsledky&lt;br /&gt;
* FC: přidána funkce SDS_TOPB_keyboard_updn()&lt;br /&gt;
* FC: přidána funkce SDS_rescan_onewire()&lt;br /&gt;
* FC: odstraněno náhodné hlášení o už probíhajícím nahrávání programu při nahrávání z EXE&lt;br /&gt;
* BIG 64/128 prodloužen čas pro sestavení Ethernetového spojení, což řeší problém s některými USB síťovými kartami atd.&lt;br /&gt;
* opraveno HTTP POST nastavení položek NTP&lt;br /&gt;
* opraveno HTTP POST který teď neuzavře spojení dříve než má, pokud mazání NVM pro nový FW (nebo nový UserWeb) trvá dlouho&lt;br /&gt;
&lt;br /&gt;
== 12.4.2022 ==&lt;br /&gt;
* doplněna informační stránka o vnitřním stavu OneWire Master (pro snazší identifikaci problémů při používání sběrnice)&lt;br /&gt;
* oprava v bootloaderu pro řadu 512 - vyžaduje přeprogramování u výrobce pro všechna SDS řady 512 s FW starším než 14.2.2022&lt;br /&gt;
&lt;br /&gt;
== 3.4.2022 ==&lt;br /&gt;
* FC verze 0x0C&lt;br /&gt;
* FC: přidána funkce SDS_I2C_rw&lt;br /&gt;
* OneWire stabilnější&lt;br /&gt;
&lt;br /&gt;
== 21.1.2022 ==&lt;br /&gt;
* prioritu mají vybrané konfigurační položky v NVM (jsou-li tam platné) před baterií zálohovanou pamětí&lt;br /&gt;
* aktivován HTTP POST protokol pro nahrávání a konfiguraci SDS (viz [[SDS:POST_upload]])&lt;br /&gt;
&lt;br /&gt;
== 18.1.2022 ==&lt;br /&gt;
* RSTD zapíše do NVM všechny konfigurační položky (i to co nenuluje), pro jistotu že v NVM bude vše skutečně zapsáno&lt;br /&gt;
* načítání konfigurace upraveno (větší spolehlivost)&lt;br /&gt;
&lt;br /&gt;
== 15.1.2022 ==&lt;br /&gt;
* přidána stránka cfgstatus.htm - pro možnost kontroly stavu uložené konfigurace v pevné paměti (např. co nemáte uloženo)&lt;br /&gt;
* přidán M2M výstup ip.xml&lt;br /&gt;
* FC: přidán algoritmus SHA-256 do funkce SDS_crypto()&lt;br /&gt;
* FC: každý program má unikátní identifikátor, podle kterého lze např. kontrolovat či zpětně poznat co máte v SDS nahráno&lt;br /&gt;
* identifikátor FC programu přidán na webové rozhraní a do M2M výstupů, a do exe aplikace&lt;br /&gt;
* zobrazeno unikátní identifikační čislo SDS hardware (napevno spojeno s modulem SDS, nezměnitelné), teď i ve M2M výstupech&lt;br /&gt;
* SNMP: nové položky .8.90 , .8.91 , .8.99&lt;br /&gt;
* FC: nové get(u32) položky 2 a 87&lt;br /&gt;
&lt;br /&gt;
== 31.12.2021 ==&lt;br /&gt;
* možnost vyřadit NTP z činnosti zadáním adresy 127.0.0.1 (vhodné pro uživatele kteří získávají čas odjinud, např. přes LoRA)&lt;br /&gt;
* web: informace na web (p=8) o stavu připojování SD karty (mounting...) a o stavu kdy je FC program pozastaven (PAUSED)&lt;br /&gt;
* web: opraven zámek zvětšené konzole (echo)&lt;br /&gt;
* důslednější kontrola platnosti konfigurace při startu&lt;br /&gt;
&lt;br /&gt;
== 27.12.2021 ==&lt;br /&gt;
* opravena chyba kdy na webu nešlo nastavit 100 procent PWM duty (jen 0 až 99, teď už jde i 100)&lt;br /&gt;
* FC: několikanásobně zvětšena konzole (echo.htm)&lt;br /&gt;
* HW: při poruše hlavního zdroje hodin (krystal) se použije záložní zdroj&lt;br /&gt;
* HW: využíváme RTC pro udržení času při přechodu přes reset (drží čas dokud zase nepřijde NTP)&lt;br /&gt;
* aktualizován bootloader (aktualizace bootloaderu jen prostřednictvím přeprogramování u výrobce) - umí znovu nahrát FW pokud se v SoC poškodí&lt;br /&gt;
* vydána varianta 512 - vlastní soubor s firmware&lt;br /&gt;
&lt;br /&gt;
== 25.12.2021 ==&lt;br /&gt;
* pouze interní vydání&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* FC: oprava nesprávného zacházení s unsigned typy (na některých místech interně přemapovány na signed)&lt;br /&gt;
* FC: chování varianty if pro speciální kombinaci signed/unsigned dle specifikace standardu C&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* FC: oprava TID v MODBUS-TCP&lt;br /&gt;
* MBTC výpis rozšířen&lt;br /&gt;
* FC: drobná úspora heap (více dostupného místa)&lt;br /&gt;
* FC: dns resolv drobný fix&lt;br /&gt;
* FC: http_get a http_post důležitý fix&lt;br /&gt;
* FC: nová funkce http_close&lt;br /&gt;
* FC: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
* vylepšený algoritmus S0, rozšířené možnosti nastavení detektoru S0 (nastavení přidáno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 22.12.2020 ==&lt;br /&gt;
* web: ruční přepnutí CBY pro relé (tzn. &amp;quot;kdo ovládá relé&amp;quot;), na &amp;quot;FULL-C&amp;quot;, dané relé nevypne (off) ale ponechá jeho stávající stav (on, off)&lt;br /&gt;
* security fix&lt;br /&gt;
&lt;br /&gt;
== 10.12.2020 ==&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení&lt;br /&gt;
* integrovaná korekce chyby A/D měření pro HW osazený LMV324; uživatel může povolit tuto automatickou opravu chyby LMV324 ve webové administraci&lt;br /&gt;
* počítání délky aktivace tarifního vstupu (doba T0 a T1 v sekundách za den) viz nové sys, pozor pro funkci vyžaduje NTP&lt;br /&gt;
* automatický odečet S0 počítadel (vždy za dnešek a včerejšek), viz nové sys, pozor pro funkci vyžaduje NTP&lt;br /&gt;
&lt;br /&gt;
== 23.11.2020 ==&lt;br /&gt;
* FC + FULLC.exe: oprava chyby v případě více #if / #ifdef / #endif bloků zapsaných hned za sebou&lt;br /&gt;
* FC: makra a define lze provést i uvnitř funkce (dříve jen venku)&lt;br /&gt;
* FC: detekce nesprávné dereference ukazatele&lt;br /&gt;
&lt;br /&gt;
== 14.11.2020 ==&lt;br /&gt;
* webová administrace: stránka p=42: index ck03 se propíše i do nastavení (chybělo od 23.10.2020, web byl aktualizován, nastavení ale přebíralo ck00)&lt;br /&gt;
&lt;br /&gt;
== 4.11.2020 ==&lt;br /&gt;
* FC + FULLC.exe: odstraněn problém při načtení nahraného FULL-C programu v SDS, kdy dříve mohlo u jedné specifické velikosti nahraného programu, dojít k jeho nespuštění kvůli neodpovídajícímu crc&lt;br /&gt;
&lt;br /&gt;
== 3.11.2020 ==&lt;br /&gt;
* FC: zobrazení (v konzoli) čísla řádku (ve zdrojovém kódu) při chybě (což velmi zlepší ladění programů)&lt;br /&gt;
* FULLC.exe: odstraněno omezení na 255 znaků na řádek&lt;br /&gt;
* FULLC.exe: zrychlení nahrávání do SDS&lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* webová administrace: stránka p=42: změna indexu ck00 na ck03 ať se dají uživatelským skriptem všechny prvky samostatně rozlišit&lt;br /&gt;
* FC: oprava http_get/post: správné vyplnění výsledků i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
&lt;br /&gt;
== 14.10.2020 ==&lt;br /&gt;
* oprava FULL-C funkce XTEA-CRYPT (bug o dvě verze dříve)&lt;br /&gt;
&lt;br /&gt;
== 13.10.2020 ==&lt;br /&gt;
* důležitá oprava chyby ve FULL-C (ternary operator, a další nahlášené nesrovnalosti)&lt;br /&gt;
&lt;br /&gt;
== 13.9.2020 ==&lt;br /&gt;
* oprava detekce SD karty (některé varianty SD karet nebyly detekovány, teď už ano)&lt;br /&gt;
&lt;br /&gt;
== 9.8.2020 ==&lt;br /&gt;
* FULL-C verze 0B (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* různé drobné opravy a zabezpečení&lt;br /&gt;
* zobrazení auditlogu (webové rozhraní SDS)&lt;br /&gt;
* FC: http_post&lt;br /&gt;
* FC: MQTT klient&lt;br /&gt;
* FC: MODBUS-TCP klient&lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* úprava obsluhy relé&lt;br /&gt;
* podpora OneWire modulu SDS-1W-T-RH&lt;br /&gt;
&lt;br /&gt;
== 3.10.2019 ==&lt;br /&gt;
* SMTP klient posílá v hlavičce i položku &amp;quot;Date&amp;quot; (ale jen za předpokladu správného času v SDS)&lt;br /&gt;
* RSTD při zapnutí zařízení, ve kterém není záložní baterie (nebo je vybitá), zachová původně nastavenou MAC adresu (vše ostatní ale už jde do defaultu, což je správně)&lt;br /&gt;
* SUDP: rozšířen NOP příkaz &lt;br /&gt;
* SUDP: přidány další nové příkazy (master_cmd: 32, 33, 40, 42, 44, 48)&lt;br /&gt;
&lt;br /&gt;
== 23.9.2019 ==&lt;br /&gt;
* oprava GUI (S0 Inputs)&lt;br /&gt;
* SNMP nabízí možnost číst všechny sdílené proměnné (FULL-C: Sxx, Uxx, Fxx, Txx)&lt;br /&gt;
* opraven nefunkční RSTD na modulu STSW-rev3&lt;br /&gt;
&lt;br /&gt;
== 23.6.2019 ==&lt;br /&gt;
* oprava chyby objevené ve FW 28.5.2019, kdy na některých specifických SDS nefungovaly AD vstupy&lt;br /&gt;
&lt;br /&gt;
== 28.5.2019 ==&lt;br /&gt;
* oprava funkce SD karty (pro případy kdy se stala po čase nedostupná pro FC/web)&lt;br /&gt;
&lt;br /&gt;
== 5.5.2019 ==&lt;br /&gt;
* dořešeno hlídání stavu (načtení, atd.) SD karty i v případě provozu náročného FULL-C programu (tedy i pro hluboce vnořené smyčky)&lt;br /&gt;
* oprava původně chybné implementace S-UDP příkazu &amp;quot;1Waccess: sub-command 8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 24.2.2019 ==&lt;br /&gt;
* překlopení z BETA do oficiálního FW&lt;br /&gt;
* automatika zimní/letní čas&lt;br /&gt;
* přístup na SD kartu: FULL-C pracuje se soubory (vytvoření, smazání, čtení a zápis, atd.) &lt;br /&gt;
* přístup na SD kartu: web server zobrazuje soubory ze SD karty (vše ve složce \web\ a podsložkách této složky)&lt;br /&gt;
* oprava čtení napětí baterie pro variantu 128K&lt;br /&gt;
* shared.xml&lt;br /&gt;
* odstraněno omezení délky ve shared.txt&lt;br /&gt;
* zprovozněno getsv&lt;br /&gt;
* verze FULL-C je teď FC 0x0A (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* FULL-C: nová možnost způsobu čtení teploty SoC&lt;br /&gt;
* FULL-C: index 64, 65, 184, 185, 429, 430, atd.&lt;br /&gt;
* FULL-C: doplněné set/get funkce pro sdílené proměnné&lt;br /&gt;
* FULL-C: s/printf umí správné zpracovat požadavek na určení desetinných míst pro float&lt;br /&gt;
* FULL-C: funkce pro reset FC programu&lt;br /&gt;
* FULL-C: funkce pro watchdog FC programu&lt;br /&gt;
* SNMP nové OIDy (dle přidaných věcí - čas, sdcard)&lt;br /&gt;
&lt;br /&gt;
== 1.7.2018 ==&lt;br /&gt;
* SNMP: sdsS0translatedUnitT0,1 je poskytováno jako hodnota od odečtu (ne od úplného začátku měření, jak to bylo předtím) &lt;br /&gt;
* FULL-C: přidán index 183 poskytující datum vydání FW který je právě nahrán v SDS&lt;br /&gt;
&lt;br /&gt;
== 27.6.2018 ==&lt;br /&gt;
* verze FULL-C je teď FC 0x09 (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* FULL-C: přidána podpora pro int64_t a uint64_t&lt;br /&gt;
* FULL-C: přejmenováno set a get funkce (rozlišení 32 a 64 bit)&lt;br /&gt;
* FULL-C: snprintf přesně dle standardu (zrušena nevhodná změna z 20.12.2017)&lt;br /&gt;
* drobné opravy&lt;br /&gt;
* drobná oprava v odchozím TCP-SYN a v generátoru ISN&lt;br /&gt;
&lt;br /&gt;
== 8.3.2018 ==&lt;br /&gt;
* oprava echo.htm - správně wrapuje obsah, a nejsou tam nadbytečné 0x00&lt;br /&gt;
* vhodnější řešení rexmitu částí webových stránek a dynamických dat (ocení to zejména uživatelé s mobilním připojením pro SDS)&lt;br /&gt;
&lt;br /&gt;
== 2.3.2018 ==&lt;br /&gt;
* aktulizace a oprava ve výpočtu &amp;quot;aktuálního výkonu&amp;quot; pro okrajové situace (např. krajní hodnoty impulsní konstanty)&lt;br /&gt;
&lt;br /&gt;
== 11.2.2017 ==&lt;br /&gt;
* zprovozněny funkce set/get pro indexy 4000 až 4300 (alternativní přístup k číselným sdíleným proměnným)&lt;br /&gt;
&lt;br /&gt;
== 21.12.2017 ==&lt;br /&gt;
* zvýšena stabilita spuštění po zapnutí&lt;br /&gt;
&lt;br /&gt;
== 20.12.2017 ==&lt;br /&gt;
* dočasná změna ve FULL-C (bude zrušena): funkce snprintf() má interně posunutý limit délky zápisu o 1 (toto je záměrný rozdíl proti C99). Změna v SDS je provedena z důvodu neznalosti programátorů FC v tom, že do snprintf() limitu je potřeba započítat i jeden byte pro ukončující nulu. Ve výsledku tedy zápis &amp;quot;snprintf(buf, limit, ...);&amp;quot; je v FC interně vykonán jako &amp;quot;snprintf(buf, limit+1, ...);&amp;quot;.&lt;br /&gt;
* oprava ve FULL-C: výpočet platné délky bufferu funguje i pro ukazatele vytvořené offsetem ze základní alokované adresy (příklad takového bufferu je: buf=malloc(x)+offset;)&lt;br /&gt;
* stav všech relé je načten z paměti vždy po zapnutí modulu, a ty relé které jsou ručně ovládány (manual control) a které byly před vypnutím v zapnutém (ON) stavu, jsou po zapnutí modulu aktivovány (zatímco relé ovládané z IP-W a FC jsou vždy po zapnutí modulu uvedeny do OFF stavu)&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
* UserWEB projekt má opravenu chybu, kdy nebylo možno použít delší Name Chain tabulku (tedy lze už vložit mnohem více souborů) &lt;br /&gt;
* nastavená MAC adresa je zachována i po průchodu RSTD (byla-li platná)&lt;br /&gt;
* opravena chyba způsobující nefunkční http_get(), teď už to opět funguje&lt;br /&gt;
* aktualizace obsluhy PWM (např. lépe přepočítává zobrazovaná &amp;quot;procenta&amp;quot;)&lt;br /&gt;
* oprava strcat() funkce (opraveno hlídání max velikosti bufferu ze &amp;quot;from&amp;quot; na &amp;quot;to&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
== 18.9.2017 ==&lt;br /&gt;
* FULL-C: printf() správně tiskne float i pokud se formátovací parametr zadá jako %d (tedy ne jako %f)&lt;br /&gt;
* FULL-C: snprint() opraven (když je 'from' kratší než 'to' tak je 'to' doplněn 0x00 - je to zvláštnost, nemá se to používat, ale C99 to předepisuje, tak to dodržíme)&lt;br /&gt;
&lt;br /&gt;
== 9.9.2017 ==&lt;br /&gt;
* vnitřní bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 29.8.2017 ==&lt;br /&gt;
* oprava chování RSTD - pokud je zapojen před zapnutím, nepřejde do automatického resetu po 10sec, ale RSTD je použit a SDS pracuje dále; přitom funkce &amp;quot;zapoj RSTD za běhu&amp;quot; je zachována správně&lt;br /&gt;
* zásadní zlepšení odolnosti FULL-C proti chybám programátora - vnitřní hlídání rozsahů bufferu a stringů, zamezující zápisu za hranice pole (typicky chybné použití sprintf() funkce, ale toto hlídání je aplikováno obecně všude)&lt;br /&gt;
&lt;br /&gt;
== 8.8.2017 ==&lt;br /&gt;
* oprava: FC teď správně převádí URL kód &amp;quot;sv?xxxx=yyyy...&amp;quot;, na text (vypadlo 31.3. při rozšíření počtu znaků pro sdílené proměnné Txx) &lt;br /&gt;
&lt;br /&gt;
== 10.7.2017 ==&lt;br /&gt;
* vydán firmware pro variantu &amp;quot;128kB&amp;quot; (od teď vychází dva typy firmware, pro variantu &amp;quot;64kB&amp;quot; a variantu &amp;quot;128kB&amp;quot;, vyberete si tu svou dle HW který máte)&lt;br /&gt;
* velká optimalizace využití paměti pro uložení a běh FULL-C programu (komprese, a zmenšení vyžadovaného heapu pro běh programu) - významně zvětšuje možnou velikost FC programu&lt;br /&gt;
* pin RSTD lze teď také použít i bez vypnutí a zapnutí SDS, stačí jej na 10 vteřin za běhu zkratovat (pak se provede RSTD a SDS se rebootuje) - výhodné pro zařízení kde vypnutí nelze provést&lt;br /&gt;
* drobné užitečné opravy dle hlášení uživatelů&lt;br /&gt;
* verze FC zvýšena na 0x08, a přidána možnost uložit 128 proměnných do baterií zálohované pamětí (tzn. obsah přežije výpadek napájení a FC program po restartu o tyto údaje nepřijde)&lt;br /&gt;
&lt;br /&gt;
== 2.6.2017 ==&lt;br /&gt;
* návratová hodnota funkce DF_read_page() je nastavena správně i v případě, kdy tato funkce čte data z cache (opakované čtení stejné stránky DF)&lt;br /&gt;
&lt;br /&gt;
== 6.4.2017 ==&lt;br /&gt;
* přidána FULL-C funkce AES-128-CTR, viz SDS_crypto(0x20, ...);&lt;br /&gt;
&lt;br /&gt;
== 31.3.2017 ==&lt;br /&gt;
* oprava RS485-MASTER drive, je teď zcela přesný (tzn. vypnut v přesném časování za úplně posledním vyslaným bitem)&lt;br /&gt;
* oprava čtení konfigurace 1-W, pomocí sds_get_a()&lt;br /&gt;
* přidán index 139&lt;br /&gt;
* odstraněno omezení na 32 znaků pro sdílené proměnné (přenos textu) &amp;quot;Txx&amp;quot; (xx = 00 až 99)&lt;br /&gt;
* fix návratových hodnot FULL-C funkcí pro práci s DF (teď to vrací správně 1 nebo 0, podle wiki)&lt;br /&gt;
* upřesněn název: (z BIG na BIG-64) / (z STSW na STSW-64)&lt;br /&gt;
* vyžaduje aktuální SDSLOAD.exe (6.3.2017 nebo novější) a FULLC.exe (6.3.2017 nebo novější)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== starší záznamy ==&lt;br /&gt;
&lt;br /&gt;
Nejsou k dispozici.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=966</id>
		<title>Firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=966"/>
		<updated>2025-10-25T13:10:59Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nový Firmware ==&lt;br /&gt;
&lt;br /&gt;
Aktualizujte si své SDS - nahrejte do něj nový firmware, který získáte na této stránce - '''naskrolujte dolů''' kde naleznete odkaz na BIN soubor pro vaše zařízení.&lt;br /&gt;
&lt;br /&gt;
Postup a řešení problémů: [[Manual_Firmware_Update|Návod pro aktualizaci Firmware v SDS]].&lt;br /&gt;
&lt;br /&gt;
Důležité první kroky, které je nutné provést s každým novým zakoupeným modulem: [[New_Device_First_Setup_Steps|První nutné kroky pro nově zakoupené zařízení SDS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Odkazy ke stáhnutí ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;PC Software&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_sdsc_winexe.jpg]] '''Program SDSC.exe''' (programovací jazyk SDS-C, aktualizace firmware pro SDS '''první řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; stáhnout WinEXE pro SDS-C [https://sds.an-d.cz/firmware/SDSC_310123.exe zápis/simulace/upload SDS-C (SDS-C '''verze 09''') a UWEB, ze dne 31.1.2023]&amp;lt;br&amp;gt;SHA-256: daf1095f206404e33223f675f5d0bc09d4fc5dfd7d9f79f4f735af88f5ff1e6a&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program FULLC.exe''' (programovací jazyk FULL-C, aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; (FC verze '''0x12''' - '''aktuální'''): stáhnout WinEXE pro FULL-C [https://sds.an-d.cz/firmware/FULLC_220724.exe zápis/upload FULL-C a UWEB, ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro Firmware od 9.3.2023 včetně, pro všechny varianty SDS (64kB a 128kB a 512kB)&amp;lt;br&amp;gt;SHA-256: b4cb95d8ec8a6e844a3a4c9a2e9fc50ece60ccf44e8043f8c10f46b2294cae0b&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program SDSLOAD.exe''' (&amp;quot;jednokrokový&amp;quot; upload .FC souborů a aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; ('''aktuální''' verze, pro FW od 10.7.2017 včetně a dále) stáhnout WinEXE [https://sds.an-d.cz/firmware/SDSLOAD_220724.exe program SDSLOAD ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro všechny SDS varianty 64kB a 128kB a 512kB, (subvarianty DP a DS84)&amp;lt;br&amp;gt;SHA-256: ded5bf1aca2e04e22c33899a0976deccc8ff76eb88f53ecd9769788b7daa25a7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_empty.jpg]] '''Program SDS LOG'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; Program '''[[SDS LOG: intro|SDS LOG]]''' - verze 0.1 ze dne 26.8.2011 - [https://sds.an-d.cz/firmware/SDS_LOG.exe stáhnout EXE program]&lt;br /&gt;
&amp;lt;li&amp;gt; Zdrojové kódy programu SDS LOG (Creative Commons Licence) [[SDS LOG: source code|ke stáhnutí zde]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS LOG: changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;První Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMICROE.jpg]]  [[Soubor:Thumbnail_SDSMICRO.jpg]] [[Soubor:Thumbnail_SDS_DIN.jpg]] '''D0000001''' MICRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: LM]] varianty '''LIGHT''', '''LIGHT 2''' a '''E (DIN)'''.&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny varianty a revize SDS MICRO LM.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_CZ.bin SDS-MICRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_EN.bin SDS-MICRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B0000057''' MICRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_CZ.bin SDS-MICRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_EN.bin SDS-MICRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B000D957''' MICRO ST DP&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST DP]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST DP.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_CZ.bin SDS-MICRO-ST-DP-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_EN.bin SDS-MICRO-ST-DP-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MINI_1.png]] [[Soubor:Thumbnail_SDS_MINI_2.png]] '''B0000020''' MINI ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MINI: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MINI ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_CZ.bin SDS-MINI-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_EN.bin SDS-MINI-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[SDS MINI: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMACRO.jpg]] '''C0000001''' MACRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: LM]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_CZ.bin SDS-MACRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_EN.bin SDS-MACRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MACRO_ST_rev1.png]] '''C0000057''' MACRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_CZ.bin SDS-MACRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_EN.bin SDS-MACRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSTTCPRO.jpg]] '''B0000001''' TTCPRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS TTCPRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_CZ.bin SDS-TTCPRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_EN.bin SDS-TTCPRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS TTCPRO ST má shodný Change Log se SDS MINI ST, a to zde: [[SDS MINI: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSIO6.jpg|160px]] '''D0000006''' IO6 LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: LM]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_CZ.bin SDS-IO6-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_EN.bin SDS-IO6-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 LM má shodný Change Log se SDS MICRO LM, a to zde: [[SDS MICRO: LM: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_empty.jpg]] '''D0000011''' IO6 ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_CZ.bin SDS-IO6-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_EN.bin SDS-IO6-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 ST má shodný Change Log se SDS MICRO ST, a to zde: [[SDS MICRO: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_FTP_rev1.png]] '''F0000001''' FTP LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS FTP: LM]], výchozí firmware.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Firmware: ''SDS FTP ze dne 7.9.2010'' už nahrán ve výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS FTP: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_ONEDPS.jpg]] '''E000AAA1''' UPS ONEDPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: ONEDPS]], finální jednodesková verze (aktuální) (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stáhnout firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_CZ.bin (Česká lokalizace) SDS-UPS-ONEDPS-LM ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;Download firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_EN.bin (English language version) SDS-UPS-ONEDPS-LM released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS UPS: LM: ONEDPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_TWODPS.jpg]] '''C00xxxxx''' UPS TWODPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: TWODPS]], HW rev3u - DVOUDESKOVÁ (UŽ NEPRODÁVANÁ) varianta.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je zaslán na požádání (pošlete email), aktuální verze je z 1.3.2011 (dále aktualizováno na specifické požádání, raději proto přejděte na nový HW).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Každá deska má svou kalibraci, proto každá deska má svůj vlastní FW, proto musíte uvést S/N svého výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HISTORIE: [[SDS UPS: LM: TWODPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Druhá Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSBIG.jpg]] [[Soubor:Thumbnail_SDSSMALL.jpg]] '''B1900001''' / '''B1900002''' / '''B1900004''' : BIG, BIG2, SMALL, STSW, MBGW&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Společný firmware pro výrobky [[SDS BIG]], [[SDS SMALL]] a [[SDS STSW]] a [[SDS MBGW]]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je jednotný pro všechny varianty '''SDS Druhé Produktové Řady''', nutné je rozlišení dle varianty 64kB/128kB/512kB. Rozlišení podle dalších subvariant (DP, DS84) se neprovádí.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je společný pro BIG a BIG2, rozlišení je pouze dle varianty 64/128/512.&lt;br /&gt;
&amp;lt;li&amp;gt;Pozn. Modul SMALL a modul MBGW interně obsahuje modul STSW, nahrává se tam tedy stejný FW.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware vždy vyžaduje použití odpovídající, aktuální verze FULLC.EXE programu. &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS BIG/SMALL/STSW: [[SDS BIG: firmware changelog|firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;64kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 64kB) [https://sds.an-d.cz/firmware/SDS_BIG_64K_251025_EN.bin firmware &amp;quot;64kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;128kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 128kB) [https://sds.an-d.cz/firmware/SDS_BIG_128K_251025_EN.bin firmware &amp;quot;128kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;512kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [[firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 12.4.2022|informace pokud máte SDS512 s FW &amp;lt;b&amp;gt;starším&amp;lt;/b&amp;gt; než 12.4.2022]]&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [https://sds.an-d.cz/firmware/SDS_BIG_512K_251025_EN.bin firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 25.10.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;Informace: SDS BIG/SMALL/STSW 512 se starším FW než 12.4.2022 vyžaduje přeprogramování u výrobce.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| POZOR&lt;br /&gt;
'''Aktualizujte''' své doplňkové sandwich desky, tzn. [[SDS BIG: DALI]], [[SDS BIG: LORA]] - na verzi FW 5.12.2016 '''nebo novější'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Aktualizaci lze provést jen fyzicky u výrobce, ten ji provede bezplatně (zašlete výrobci vaše SDS pro jeho aktualizaci). Se starým FW nebude tento HW plně fungovat.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Informace ===&lt;br /&gt;
&lt;br /&gt;
 VŽDY MĚJTE VE SVÉM ZAŘÍZENÍ NEJNOVĚJŠÍ FIRMWARE, A POUŽÍVEJTE TAKÉ NEJNOVĚJŠÍ SDS-C EXE / FULL-C EXE PROGRAM.&lt;br /&gt;
 V opačném případě vám budou chybět nové funkce, které neustále přidáváme, a také nebudete mít opravené nalezené chyby.&lt;br /&gt;
 V případě že chcete získat podporu, musíte mít instalovaný nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historický Software ===&lt;br /&gt;
&lt;br /&gt;
Za účelem aktualizace takových SDS, kde už dlouho nebyl aktualizován firmware, je potřeba použít odpovídající EXE program pro aktualizaci takovéhoto zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== První Produktová Řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro SDS-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_151119.exe ze dne '''15.11.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 08, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020118.exe ze dne '''2.1.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 07, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020317.exe ze dne '''2.3.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 8.8.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_060216.exe ze dne '''6.2.2016''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které nemají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 24.1.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_231111.exe ze dne '''23.11.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 04&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_170211.exe ze dne '''17.2.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''února 2011''')&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro ''SDS-C verze č. 03'' (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_140511.exe ze dne '''14.5.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''konce května 2011''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Druhá Produktová řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro FULL-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_070323.exe ze dne '''7.3.2023''']&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_311222.exe ze dne '''31.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 11, (firmware od 9.1.2023 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_071222.exe ze dne '''7.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 10, (firmware od 18.11.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_161022.exe ze dne '''16.10.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0F, (firmware od 16.10.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_110722.exe ze dne '''11.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0E, (firmware od 11.7.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010722.exe ze dne '''1.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0D, (firmware od 6.8.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030422.exe ze dne '''3.4.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0C, (firmware od 23.3.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010322.exe ze dne '''1.3.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0B, (firmware od 6.8.2020 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030119.exe ze dne '''3.1.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0A, (firmware od 3.1.2019 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010718.exe ze dne '''1.7.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 09, (firmware od 27.6.2018 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_100717.exe ze dne '''10.7.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 08, (firmware od 10.7.2017 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_080617.exe ze dne '''8.6.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 06, (firmware starší než Červenec-2017, a pouze pro variantu SDS 64kB)&lt;br /&gt;
&lt;br /&gt;
* (historická verze) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_201022.exe ze dne 20.10.2022]&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_120417.exe ze dne 12.4.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB která používá ''starý'' firmware (2017 nebo starší)&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_100717.exe ze dne 10.7.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB a 128kB (nepodporuje variantu 512kB tak jako aktuální stáhnutelná verze aplikace)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beta Testing ==&lt;br /&gt;
&lt;br /&gt;
Než vydáme novou verzi, je potřeba změny a novinky otestovat.&lt;br /&gt;
&lt;br /&gt;
Pokud jste ochotní se testu zúčastnit, pak se podívejte [https://forum.sds.an-d.cz/viewtopic.php?id=129 na tento odkaz]. Zde jsou uveřejněny vždy nejnovější beta verze firmware.&lt;br /&gt;
&lt;br /&gt;
Diskuse s vývojem k aktuálnímu Firmware je k dispozici na našem fóru.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_general_functions&amp;diff=965</id>
		<title>FULL-C: general functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_general_functions&amp;diff=965"/>
		<updated>2025-10-25T08:59:04Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Nezařazené funkce FULL-C ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
Zde je seznam různých funkcí, které FULL-C poskytuje a které nejsou blíže popsány na specifické tématické stránce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_reset_program(unsigned int key);&lt;br /&gt;
         void SDS_set_wdg(unsigned int newTimeOut);&lt;br /&gt;
         void SDS_kick_wdg(unsigned int key);&lt;br /&gt;
&lt;br /&gt;
         void SDS_heap_stats(unsigned int *currentAllocatedBytes, &lt;br /&gt;
unsigned int *totalFreeBytes, unsigned int *biggestFreeBlockAvailable);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Účel ==&lt;br /&gt;
&lt;br /&gt;
Vždy se má předpokládat, že v programu, který chcete spustit a provozovat, je nějaká (skrytá) chyba. I když je program napsán &amp;quot;dokonalým&amp;quot; způsobem, nikdy nemůžete mít jistotu, že tomu tak skutečně je. Toto je základní princip tzv. SAFETY vývoje, kdy automaticky VŽDY očekáváme že v programu může být chyba (respektive víme, že nejsme dokonalí, a dokonalosti se můžeme vždy jen přiblížit, ale z principu ji nelze dosáhnout). Dále je potřeba očekávat i vnější vlivy, kdy dojde k ovlivnění nebo dokonce snad i změně programu, neočekávaným a nechtěným vnějším vlivem. Ať je to uživatelům zásah, měřená fyzikální veličina mimo očekávaný rozsah, útok hackera a nebo snad kosmická částice která změní bit v paměti - úplný seznam nelze nikdy vytvořit. &lt;br /&gt;
&lt;br /&gt;
Toto vše však má řadu řešení, které byly dlouho zkoumány a připravovány. Jako vhodný základ je vývoj programů podle safety normy 61508, tedy minimálně si z ní vzít ty kritické požadavky.&lt;br /&gt;
&lt;br /&gt;
SDS nabízí funkci speciálního hlídače vašeho FC programu - tedy FC WATCHDOG. Tato funkce se musí aktivovat ve vašem FC programu, a následně se musí FC program periodicky hlásit, že stále správně funguje. Pokud se nepřihlásí v nastaveném čase, dojde ze strany SDS k zastavení a novému spuštění programu. Toto vše může váš FC program sledovat přes vybrané systémové indexy, a také konfigurovat přes určené FC funkce. &lt;br /&gt;
&lt;br /&gt;
Samozřejmě FC-Watchdog je jen jedním z mnoha prvků, které je potřeba využít, aby váš systém byl celkově odolný a vydržel chybu-vzdorně pracovat.&lt;br /&gt;
&lt;br /&gt;
Další prvky jsou:&lt;br /&gt;
* úvodní analýza programu a způsob psaní kódu programu&lt;br /&gt;
* detailně sepsané požadavky na všech úrovních, a jejich provázání na kód a test&lt;br /&gt;
* sledování využití paměti&lt;br /&gt;
* úvodní diagnostika&lt;br /&gt;
* průběžná diagnostika&lt;br /&gt;
* telemetrie (logování, informace předávané uživateli, historie, záchyt chybových stavů tak aby šla chyba plně identifikovat)&lt;br /&gt;
* statická a dynamická analýza kódu programu&lt;br /&gt;
* SiL a HiL testování&lt;br /&gt;
* Unit Testy&lt;br /&gt;
* schopnost programu pracovat v režimu snížené kapacity systému (např. při poškozené části systému)&lt;br /&gt;
* odolnost programu a jeho vnitřních prvků a funkcí (především proti integer a buffer overflow)&lt;br /&gt;
* zabezpečená komunikační rozhraní (safety a security)&lt;br /&gt;
* zabezpečená datová úložiště (safety a security)&lt;br /&gt;
&lt;br /&gt;
Většina těchto prvků je &amp;quot;na vás&amp;quot;, tedy SDS poskytuje prostor a možnosti k jejich realizaci.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SDS_reset_program(): okamžité nové spuštění FC programu ===&lt;br /&gt;
&lt;br /&gt;
Zavoláním této funkce, se správně vyplněným parametrem ''key'', dojde k okamžitému znovu-spuštění aktuálního FULL-C programu. Tedy prakticky totéž, jako by došlo k resetu zařízení (ale to se nestane, SDS pokračuje v práci a nic se s ním při zavolání této funkce nestane; dojde pouze a jenom k ukončení a okamžitému novému spuštění nahraného FC programu).&lt;br /&gt;
&lt;br /&gt;
Podmínkou je předání hodnoty ''key'' jako čísla 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // &lt;br /&gt;
 SDS_reset_program(1);  // reset programu se provede jen a pouze, pokud je parametr == 1&lt;br /&gt;
 &lt;br /&gt;
 // nebo takto:&lt;br /&gt;
 &lt;br /&gt;
 unsigned int k;&lt;br /&gt;
 k = 1234;&lt;br /&gt;
 SDS_reset_program(k); // protoze &amp;quot;k&amp;quot; neni 1, program bude pokracovat (nestane se restart programu)&lt;br /&gt;
 &lt;br /&gt;
 k = 1;&lt;br /&gt;
 SDS_reset_program(k); // a ted uz se program spusti odznova, protoze klic je 1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SDS_reset_program(): restartování celého SDS modulu ===&lt;br /&gt;
&lt;br /&gt;
Druhá použitelná funkcionalita funkce SDS_reset_program() je provedení soft-resetu hlavního procesoru v SDS modulu. Soft-reset je programově vyvolaný RESET, kdy dojde k ukončení činnosti programu a celému novému startu (tedy prakticky to samé, jako by došlo k odpojení napájení modulu SDS, a znovu připojení napájení).&lt;br /&gt;
&lt;br /&gt;
Aby nedošlo k vyvolání této funkce omylem, je potřeba zadat správný dynamický parametr. Tento parametr je potřeba připravit v daný okamźik, a je platný jen 320 milisekund. To znamená, že od momentu kdy je nová hodnota parametru určena (spočtena) po zavolání funkce SDS_reset_program(), musí uplynout méně než 320 msec. Pokud to bude více, program bude pokračovat a k žádnému resetu nedojde. Toto si musíte ve svém programu ohlídat !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 unsigned int dynamic_reset_value;&lt;br /&gt;
&lt;br /&gt;
 // calculate&lt;br /&gt;
 dynamic_reset_value = SDS_get_u(3); // ziskame aktualni cas &lt;br /&gt;
 dynamic_reset_value = 0xF0000000 | (dynamic_reset_value &amp;gt;&amp;gt; 5);  // specialni doplnujici vypocet&lt;br /&gt;
&lt;br /&gt;
 // go&lt;br /&gt;
 SDS_reset_program(dynamic_reset_value);  // reset SDS se provede jen tehdy, pokud hodnota odpovida&lt;br /&gt;
 &lt;br /&gt;
 // ted se bud provedl reset SDS, a proto se sem program uz nedostane (a vse zacne od zacatku),&lt;br /&gt;
 // nebo se neprovedl (protoze byla neplatna hodnota v dynamic_reset_value)&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;chyba, neprovedl se reset, zkusim to znovu ?\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SDS_set_wdg(): spuštění dohledu správněhu běhu FC programu ===&lt;br /&gt;
&lt;br /&gt;
Funkce nastaví a okamžitě spustí Watchdog pro FULL-C program - cílem je hlídat &amp;quot;nezaseknutí&amp;quot; vašeho FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
Stanovíte si, jak často se váš FULL-C program musí &amp;quot;hlásit&amp;quot; že je v pořádku (nezaseknutý), a pokud se váš program do té doby neohlásí (např. zůstane &amp;quot;zaseknutý&amp;quot; v nějaké smyčce), tak SDS okamžitě provede jeho ukončení a následně spustí FC program znovu.&lt;br /&gt;
&lt;br /&gt;
Tato funkce tedy spustí odpočet, a pokud se tento dopočítá (z vámi nastavenou hodnotu) na nulu, dojde k popsanému restartu FC programu.&lt;br /&gt;
&lt;br /&gt;
Parametr '''newTimeOut''' nastavuje cílovou hodnotu odpočtu, a je uveden v sekundách. Příklad: SDS_set_wdg(10) spustí hlídání FC programu a pokud do 10 sekund není zavolána funkce SDS_kick_wdg, tak dojde k znovu-spuštění FC programu.&lt;br /&gt;
&lt;br /&gt;
Jakmile je jednou hlídač spuštěn, nelze jej deaktivovat - to se stane pouze při fyzickém restartu zařízení SDS, při nahrání nového FC programu, nebo při jeho novém spuštění. Při každém spuštění FC programu (nezávisle na důvodu, jestli to bylo nahráním nového programu, nebo jeho restartem), tak je hlídač vypnut - a FC program jej musí nastavit a spustit zavoláním funkce SDS_set_wdg().&lt;br /&gt;
&lt;br /&gt;
FC program si může zjistit, že jeho aktuální spuštění bylo vyvoláno právě z tohoto důvodu (zaseknutí) a podle toho se &amp;quot;zařídit&amp;quot; (např. poslat zprávu, přejít do nouzového režimu, atd. podle toho jak si to sami vymyslíte pro svou aplikaci).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SDS_kick_wdg(): průběžná aktualizace dohledu běhu FC programu ===&lt;br /&gt;
&lt;br /&gt;
Funkce se volá opakovaně a musí se vždy stihnout zavolat (od svého posledního zavolání) v rámci nastaveného intervalu (viz funkce SDS_set_wdg).&lt;br /&gt;
&lt;br /&gt;
Zavolání SDS_kick_wdg dojde k nastavení odpočtu hlídače běhu FC programu, a odpočet tedy začne znovu klesat (může klesat až do nuly, kdy dojde k restartu programu - není-li odpočet včas znovu nastaven nahoru).&lt;br /&gt;
&lt;br /&gt;
Pokud tedy včas nezavoláte tuto funkci, dojde k restartování FC programu. Toto je záměr, kdy se vám např. program zasekne, tak s tím je potřeba něco udělat - a tento hlídač se o to postará.&lt;br /&gt;
&lt;br /&gt;
Je na vás, správně rozmístit volání SDS_kick_wdg do vašeho FC programu - není to jednoduché, a může se stát, že přehlédnete místo, kam to ještě bylo potřeba vložit. Důsledné testování vašeho FC programu je tedy na místě !&lt;br /&gt;
&lt;br /&gt;
Parametr ''key'' při volání SDS_kick_wdg() musí mít přesně stejnou číselnou hodnotu, jakou jste předali v parametru '''newTimeOut''' při prvním volání funkce SDS_set_wdg(). Pokud zavoláte funkci SDS_kick_wdg() s jinou hodnotou, je to jako by jste tuto funkci nezavolali - a hlídací odpočet dále pokračuje k nule.&lt;br /&gt;
&lt;br /&gt;
=== Příklad obsluhy FC-watchdogu ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
  // start programu&lt;br /&gt;
  SDS_set_wdg(16);   // nastav watchdog na 16 sekund&lt;br /&gt;
 &lt;br /&gt;
  // . . .&lt;br /&gt;
 &lt;br /&gt;
  for (;;)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    // . . .&lt;br /&gt;
&lt;br /&gt;
    if (vse_je_ok)&lt;br /&gt;
    {&lt;br /&gt;
      SDS_kick_wdg(16); // znovunastavení hlídače, od teď máme zase až 16 sekund . . .&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // . . .&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SDS_heap_stats(): zjištění stavu dynamické paměti ===&lt;br /&gt;
&lt;br /&gt;
Celý FULL-C program, včetně všech proměnných, je umístěn v jednom 64kB nebo 128kB nebo 512kB bloku paměti RAM (viz stránka s popisem detailu využití paměti RAM v SDS). Všechna paměť, kterou program z těchto celkových kB RAM nevyužije, je k dispozici programu pomocí funkce '''malloc()'''.&lt;br /&gt;
&lt;br /&gt;
Některé další funkce (zejména funkce pro práci se sítí, jako je například '''snmp_send_trap()''' ), vyžadují chvilkově část této volné paměti pro svou činnost. Pokud tato paměť není k dispozici (buď je do zařízení nahrán tak velký program, že ji vyčerpá už při svém úvodním spuštění) (nebo program použil malloc() natolik, že volný heap vyčerpal), tak se tyto FULL-C funkce nepovede provést (bude vrácen příslušný chybový kód = nedostatek paměti).&lt;br /&gt;
&lt;br /&gt;
Pro aktuální zjištění situace (tj. kolik je volné paměti a jaký největší blok paměti (v kuse) lze alokovat), je zde k dispozici funkce '''SDS_heap_stats()'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== SDS_heap_stats(): příklad ===&lt;br /&gt;
&lt;br /&gt;
Příklad vypíše stav paměti heap, potom alokuje 2kB paměti, a potom znovu vypíše stav, potom alokovanou paměť uvolní a naposledy vypíše stav. Sledujte text který tento program napíše do konzole.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
 unsigned int currentAllocatedBytes, totalFreeBytes, biggestFreeBlockAvailable;&lt;br /&gt;
 void * ptr;&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;START\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 SDS_heap_stats(&amp;amp;currentAllocatedBytes, &amp;amp;totalFreeBytes, &amp;amp;biggestFreeBlockAvailable);&lt;br /&gt;
 printf(&amp;quot;currentAllocatedBytes: %uB, totalFreeBytes: %uB, biggestFreeBlockAvailable:%uB \n\n&amp;quot;,&lt;br /&gt;
        currentAllocatedBytes, totalFreeBytes, biggestFreeBlockAvailable);&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;ALLOC 2048 BYTES\n&amp;quot;);&lt;br /&gt;
 ptr = malloc(2048);&lt;br /&gt;
&lt;br /&gt;
 SDS_heap_stats(&amp;amp;currentAllocatedBytes, &amp;amp;totalFreeBytes, &amp;amp;biggestFreeBlockAvailable);&lt;br /&gt;
 printf(&amp;quot;currentAllocatedBytes: %uB, totalFreeBytes: %uB, biggestFreeBlockAvailable:%uB \n\n&amp;quot;,&lt;br /&gt;
        currentAllocatedBytes, totalFreeBytes, biggestFreeBlockAvailable);&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;FREE PTR\n&amp;quot;);&lt;br /&gt;
 free(ptr); ptr = 0;&lt;br /&gt;
&lt;br /&gt;
 SDS_heap_stats(&amp;amp;currentAllocatedBytes, &amp;amp;totalFreeBytes, &amp;amp;biggestFreeBlockAvailable);&lt;br /&gt;
 printf(&amp;quot;currentAllocatedBytes: %uB, totalFreeBytes: %uB, biggestFreeBlockAvailable:%uB \n\n&amp;quot;,&lt;br /&gt;
        currentAllocatedBytes, totalFreeBytes, biggestFreeBlockAvailable);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Důležité systémové indexy ==&lt;br /&gt;
&lt;br /&gt;
* '''40''': SoC power-up or reset reason (64/128 = read only LSB: 8 bits) (512 = read all 32 bits)&lt;br /&gt;
Využijte pro analýzu jakým způsobem bylo SDS zapnuto - jestli se jedná o normální zapnutí (Power On Reset) nebo o (re)start firmware z důvodu nečekané chyby (např. watchdog)&lt;br /&gt;
&lt;br /&gt;
* '''86''': FC: actual state (running, uploading, failed etc.) of the FULL-C program (0, 1, 2, 4, 8, 16, 32, 64)&lt;br /&gt;
Využijte pro vzdálené sledování stavu programu (je-li spuštěn a běží, nebo je-li pozastaven či vůbec neběží).&lt;br /&gt;
&lt;br /&gt;
* '''87''': FC: unique identifier of the actually uploaded FULL-C program&lt;br /&gt;
Každý FC program má svůj odpovídající unikátní 32bit identifikátor, pomocí kterého lze jednotlivé programy od sebe rozpoznat. Tento identifikátor je hashem celého programového kódu, a tím je zaručena jeho vysoká unikátnost (která nebude dokonalá, ale pro tento primární účel, vhodná a použitelná je).&lt;br /&gt;
&lt;br /&gt;
* '''132''': FC: UTC time value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
Informace - časová známka UTC, kdy došlo k poslednímu restartu tohoto FC programu, z důvodu aktivace FC-Watchdogu. Pokud k restartu nedošlo, je zde nula. Pokud UTC čas nebyl v době restartu k dispozici, je zde neplatný údaj. Tento údaj je vždy vynulován, pokud dojde k nahrání jiného programu do SDS.&lt;br /&gt;
&lt;br /&gt;
* '''133''': FC: UpTime value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
Informace - hodnota UpTime, kdy došlo k poslednímu restartu tohoto FC programu, z důvodu aktivace FC-Watchdogu. Pokud k restartu nedošlo, je zde nula. Tento údaj je vždy vynulován, pokud dojde k nahrání jiného programu do SDS.&lt;br /&gt;
&lt;br /&gt;
* '''134''': FC: archived text of the last FC error&lt;br /&gt;
Došlo-li k chybě, která způsobila pád nebo restart vašeho FC programu, je tato chyba archivována a je k dispozici zde - můžete ji tak sami zobrazit ve svém programu, nebo poslat dále v rámci logování. Tento údaj je nulován (prázdný text) jakmile je nahrán nový program do SDS.&lt;br /&gt;
&lt;br /&gt;
* '''135''': FC: number of FC-WDF restarts of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
Každý FC-Watchdog restart, pro aktuální nahraný FC program, způsobí zvýšení tohoto počítadla. Jakmile je nahrán nový FC program do SDS, je počítadlo vynulováno.&lt;br /&gt;
&lt;br /&gt;
* '''136''': FC: total count of all FC program starts, since the SDS boot&lt;br /&gt;
Počítadlo úplně všech spuštění (libovolných) FC programů, od zapnutí SDS (respektive tedy: od posledního bootu SDS). Počítadlo se nuluje jen restartem SDS.&lt;br /&gt;
&lt;br /&gt;
* '''137''': read an actual SDS CPU cycle counter (number of executed instructions since power-up/reboot), continuously wraps around, (1 step = approx. 2 nsec)&lt;br /&gt;
Vysokorychlostní automatický čítač, svázaný s vykonáváním CPU instrukcí v hlavním SoC chipu. Vhodné pro sledování rychlosti programu, pro logování atd.&lt;br /&gt;
&lt;br /&gt;
* '''183''': SDS FW date stamp (or just 0x00000000 for a very old firmware)&lt;br /&gt;
Důležitý údaj, určuje datum nainstalované verze firmware v SDS. Díky tomuto údaji máte informaci o možnostech, které dané SDS s daným firmware poskytuje, a které ne (pokud je tam nainstalován starý firmware). Váš program může tento údaj zkontrolovat, a pokud zjistí že je v SDS nainstalován starý firmware (se kterým váš FC program není kompatibilní, nebo mu tam chybí nějaká funkce která je až v novější verzi firmware), může se tomu přizpůsobit, a nebo informovat uživatele a vynutit si aktualizace firmware v SDS.&lt;br /&gt;
&lt;br /&gt;
* '''184''': FC: information about how this actual running program was started (0 = none) (1 = normal) (2 = fc-wdg or manual restart) (4 = freshly loaded)&lt;br /&gt;
Informace, jakým způsobem byl aktuální běžící FC program spuštěn. &lt;br /&gt;
&lt;br /&gt;
* '''185''': FC: actual FULL-C WatchDog (decreasing) timeout counter value, v msec&lt;br /&gt;
Zde lze kontrolovat aktuální stav odpočtu čítače FC-Watchdogu. Pokud se počítadlo dostane na nulu, tedy nedojde-li včas k refreshi počítadla vhodným zavoláním funkce, je FC-Watchdog aktivován a dojde k restartu FC programu.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=New_Device_First_Setup_Steps&amp;diff=964</id>
		<title>New Device First Setup Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=New_Device_First_Setup_Steps&amp;diff=964"/>
		<updated>2025-08-11T10:44:58Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nově zakoupené zařízení SDS ==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. VŽDY AKTUALIZUJTE NA NOVÝ FIRMWARE - který získáte na stránce [[Firmware]].&lt;br /&gt;
&lt;br /&gt;
2. NÁSLEDNĚ PROVEĎTE FACTORY RESET (aktivace RSTD) - a to i v případě, že jste firmware neaktualizovali (tzn. že už v zařízení byl nejnovější FW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pouze takto připravené zařízení lze dále provozovat.'''&lt;br /&gt;
&lt;br /&gt;
Pokud Vám zařízení SDS nefunguje atd. tak to je z 99% tím, že jste neprovedli výše uvedené dva důležité kroky.&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS, které jste čerstvě zakoupili, může mít starší firmware (který si pak musíte sami aktualizovat), a může mít nesprávnou konfiguraci (např. po výrobních testech).&amp;lt;br&amp;gt; Proto je vždy nutné provést jak krok č. 1, tak především krok č. 2 !!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Důsledky neprovedení výše uvedených kroků ==&lt;br /&gt;
&lt;br /&gt;
Pokud dostanete do rukou jakékoliv nové nebo použité zařízení SDS, musíte provést vždy oba výše uvedené kroky (ověřit verzi FW a provést RSTD).&lt;br /&gt;
&lt;br /&gt;
Zejména to, pokud neprovedete RSTD, může mít v důsledku symptom zpomaleného zařízení, kdy se celková odezva a rychlost zařízení SDS násobně sníží (to co má být okamžitě hotové trvá i několik sekund), včetně i zpomaleného vykonávání FULLC programu. Toto je čistě a pouze a přesně důsledek neprovedeného factory resetu konfigurace (aktivace RSTD dle návodu). Proto to vždy automaticky proveďte, bez ohledu na to, v jakém stavu si myslíte, že vaše zařízení SDS je - je potřeba mít úplnou jistotu, a jen toto ji dodá.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=New_Device_First_Setup_Steps&amp;diff=963</id>
		<title>New Device First Setup Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=New_Device_First_Setup_Steps&amp;diff=963"/>
		<updated>2025-08-11T10:44:48Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nově zakoupené zařízení SDS ==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. VŽDY AKTUALIZUJTE NA NOVÝ FIRMWARE - který získáte na stránce [[Firmware]].&lt;br /&gt;
&lt;br /&gt;
2. NÁSLEDNĚ PROVEĎTE FACTORY RESET (aktivace RSTD) - a to i v případě, že jste firmware neaktualizovali (tzn. že už v zařízení byl nejnovější FW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pouze takto připravené zařízení lze dále provozovat.'''&lt;br /&gt;
&lt;br /&gt;
Pokud Vám zařízení SDS nefunguje atd. tak to je z 99% tím, že jste neprovedli výše uvedené dva důležité kroky.&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS, které jste čerstvě zakoupili, může mít starší firmware (který si pak musíte sami aktualizovat), a může mít nesprávnou konfiguraci (např. po výrobních testech).&amp;lt;br&amp;gt; Proto je vždy nutné provést jak krok č. 1, tak především krok č. 2 !!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Důsledky neprovedení výše uvedených kroků ==&lt;br /&gt;
&lt;br /&gt;
Pokud dostanete do rukou jakékoliv nové nebo použité zařízení SDS, musíte provést vždy oba výše uvedené kroky (ověřit verzi FW a provést RSTD).&lt;br /&gt;
&lt;br /&gt;
Zejména to, pokud neprovedete RSTD, může mít v důsledku symptom zpomaleného zařízení, kdy se celková odezva a rychlost zařízení SDS násobně sníží (to co má být okamžitě hotové trvá i několik sekund), včetně i zpomaleného vykonávání FULLC programu. Toto je čistě a pouze a přesně důsledek neprovedeného factory resetu konfigurace (aktivace RSTD dle návodu). Proto to vždy automaticky proveďte, bez ohledu na to, v jakém stavu si myslíte, že váše zařízení SDS je - je potřeba mít úplnou jistotu, a jen toto ji dodá.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_firmware_changelog&amp;diff=962</id>
		<title>SDS BIG: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_firmware_changelog&amp;diff=962"/>
		<updated>2025-08-11T10:38:49Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-BIG(2) , SDS-SMALL(2), SDS-STSW a všechny OEM ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS-BIG a SDS-SMALL a SDS-STSW.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 11.8.2025 ==&lt;br /&gt;
* přepracována interní DNS cache - pro funkci dns_resolv() - zprovozněno TTL&lt;br /&gt;
* FC: přidány indexy 70 a 71 a 72&lt;br /&gt;
&lt;br /&gt;
== 28.3.2025 ==&lt;br /&gt;
* oprava odpovědi pro S-UDP příkaz 0x04 (Read FC)&lt;br /&gt;
&lt;br /&gt;
== 15.3.2025 ==&lt;br /&gt;
* oprava odpovědi pro S-UDP příkaz 0x08 (Write FC)&lt;br /&gt;
&lt;br /&gt;
== 27.2.2025 ==&lt;br /&gt;
* upraven timeout pro čtení souboru z SD karty přes webový server (poskytování obsahu z SD karty na web)&lt;br /&gt;
* 512: oprava nefunkčního čtení ze sériové linky COM6&lt;br /&gt;
&lt;br /&gt;
== 8.2.2025 ==&lt;br /&gt;
* oprava některých payloadů v protokolu SUDP &lt;br /&gt;
&lt;br /&gt;
== 22.7.2024 ==&lt;br /&gt;
* FULLC.EXE - odstraněna chyba, která neumožnila nahrát do SDS soubor FCB větší než 64kB&lt;br /&gt;
* možnost volby klidového stavu pro každý S0 vstup (umožňuje počítat impulsy i pro NC spínače v měřiči energie)&lt;br /&gt;
* FC: SDS_reset_program() nezanechává nadbytečnou chybouvou hlášku v konzoli&lt;br /&gt;
* FC: mqtt_publish() použije vámi nastavené bitové pole do PUBLISH hlavičky (viz index 11198)&lt;br /&gt;
* SMTP odesílání by mělo být robustnější při odesílání více emailů za sebou&lt;br /&gt;
&lt;br /&gt;
== 24.2.2024 ==&lt;br /&gt;
* možnost smazat nahraný TLS klíč+certifikát (tlačítko s heslem, ve webovém rozhraní)&lt;br /&gt;
* RSTD nesmaže (nanastaví na tovární hodnoty) vaše nastavení pro všechny AD vstupy (to lze teď udělat ručně, nově přidaným tlačítkem ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 31.10.2023 ==&lt;br /&gt;
* SNMP - oprava způsobu předání chyby v odpovědi&lt;br /&gt;
* SNMP v1 - možnost nastavit dvě nezávislé komunity&lt;br /&gt;
* 512: plná implementace SNMP v3 (včetně AUTHPRIV)&lt;br /&gt;
* 64,128: omezená implementace SNMP v3 (pouze NOAUTHNOPRIV)&lt;br /&gt;
* FC: indexy 66, 67, 68, 4990..4999&lt;br /&gt;
&lt;br /&gt;
== 19.8.2023 ==&lt;br /&gt;
* oprava SDS UDP SEARCH (příchozí paket na portu 20484 byl firewallem od verze 6.6.23 zahozen, teď už opraveno)&lt;br /&gt;
* 512: HTTPS server (aktivace nahráním certifikátu, jinak zůstává HTTP)&lt;br /&gt;
&lt;br /&gt;
== 14.7.2023 ==&lt;br /&gt;
* HTTP POST: oprava sekundární chyby (objevila se ve FW 6.6.2023), kdy FW akceptoval jen rozdělený krok č. 2 (teď už opět umí jak rozdělený, tak i nerozdělený krok č. 2)&lt;br /&gt;
* FC: umožněn přímý zápisu do indexu 193 (přímo zapíše do registru PWM - určeno pro nejjemnější uživatelskou přímo konfiguraci generátoru PWM)&lt;br /&gt;
&lt;br /&gt;
== 6.6.2023 ==&lt;br /&gt;
* funkce http_header_set_user_row() má zvětšenou maximální délku parametru na 255 znaků&lt;br /&gt;
* 512: počet MQTT subscribe zvětšen z max. 8 na max. 20&lt;br /&gt;
* 512: další zvětšení FC konzole&lt;br /&gt;
* webový admin: úprava (oprava) použití timerů v javascriptu &lt;br /&gt;
* FC: DNS resolv umí pracovat s širším rozsahem UDP portů (někdy způsobilo nepřijetí odpovědi a musel se resolv opakovat)&lt;br /&gt;
* HTTP POST: poradí si i s ne-oddělenou komunikací (když klient pošle úvodní konverzační data najednou, neodděleně, tzn. nečeká na odpověď ze serveru)&lt;br /&gt;
 &lt;br /&gt;
== 9.3.2023 ==&lt;br /&gt;
* FC: verze 0x12 (+ odpovídající FULLC.EXE): přidány funkce http_header_set_user_row() a http_header_set_content_type()&lt;br /&gt;
* 64 a 128: odstraněno možné zpomalení běhu po zapnutí v určité okrajové situaci&lt;br /&gt;
&lt;br /&gt;
== 28.2.2023 ==&lt;br /&gt;
* POST: přidán příkaz /wrdf&lt;br /&gt;
* POST: oprava chyby, kdy mohlo dojít k neprovedení akce na základě příkazu /changeip&lt;br /&gt;
* malá bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 9.1.2023 ==&lt;br /&gt;
* FC verze 0x11 (+ odpovídající FULLC.EXE)&lt;br /&gt;
* firmware pro všechny HW varianty BIG, BIG2-DP a BIG2-DP-DS84&lt;br /&gt;
* web: doplněno zobrazení surových hodnot, čtených z 1-Wire zařízení &lt;br /&gt;
* FC: přidána funkce SDS_onewire_config() pro varianty -DS84&lt;br /&gt;
* FC: doplněna funkčnost FC WatchDog (pro situaci, pokud spadne program na chybu a je zastaven, tak FC Watchdog pokračuje a provede restart FC programu)&lt;br /&gt;
* FC: doplněna archivace poslední chyby FC programu, a zobrazení na webu (i v případě restartu FC Watchdogem)&lt;br /&gt;
* FC: funkce pro prohledání složky (file_opendir, file_readdir, file_closedir)&lt;br /&gt;
* oprava PWM3 a PWM4 na BIG2-64/128 - funkce, ukládání nastavení&lt;br /&gt;
* HW BIG2 DS84: RTC běží na baterii na všech HW variantách DS84 - udržuje běžící aktuální čas i při vypnutém napájení&lt;br /&gt;
* FC: přidána funkce SDS_onewire_search_bus()&lt;br /&gt;
* FC: přidány indexy 132..136 , indexy 2488..2499, 2986..2997&lt;br /&gt;
&lt;br /&gt;
== 1.12.2022 ==&lt;br /&gt;
* bezpečnostní aktualizace (dle nahlášené záležitosti a testu)&lt;br /&gt;
* trvalé zobrazení archivovaného HW faultu v Logu (pokud dojde k faultu, je hned před restartem zařízení archivován a trvale zobrazován ve výpisu, i po libovolném novém spuštění)&lt;br /&gt;
* odstraněno eventuální čekání (a následný WDG restart) při komunikaci s externími I2C zařízeními (specifické chipy na sandwich deskách uživatelů)&lt;br /&gt;
&lt;br /&gt;
== 30.11.2022 ==&lt;br /&gt;
* FC: zvýšena výkonnost (512: optimalizace pro až několika-násobné celkové zrychlení vykonávání programu) (64,128: byť jen menší zrychlení, ale přece + zvětšená konzole echo.htm) &lt;br /&gt;
* zrychleno webové rozhraní (zpomaleno zřejmě o dvě verze zpět, byť to bylo bez vlivu na funkci, je vhodnější když to nezdržuje při zobrazování v prohlížeči)&lt;br /&gt;
* FC: přidán index 137&lt;br /&gt;
* zlepšena interní obsluha sériových linek (COMx/RS485), odstraněno možné náhodné zpoždění (byť jen ve specifickém případě a jen o několik msec, ale i tak se toto vyřešilo)&lt;br /&gt;
&lt;br /&gt;
== 22.11.2022 ==&lt;br /&gt;
* FC (64/128/512): verze 0x10 &lt;br /&gt;
* dns_resolv správně hlásí chybu 516 a 517 při výpadku připojení v průběhu dotazu&lt;br /&gt;
&lt;br /&gt;
== 18.11.2022 ==&lt;br /&gt;
* FC (64/128): verze 0x10 &lt;br /&gt;
* FC: nová funkce SDS_set_RTC&lt;br /&gt;
* FC: nové funkce pro práci s float&lt;br /&gt;
* oprava pro mounting některých typů SD karet&lt;br /&gt;
&lt;br /&gt;
== 14.11.2022 ==&lt;br /&gt;
* FC: oprava výpočtů v 64-bit doméně&lt;br /&gt;
* FC: file_expand() - detailnější rozvrstvení návratových chybových hodnot&lt;br /&gt;
* web: rozšířeny zobrazované informace o probíhajícím připojování SD karty&lt;br /&gt;
* web server: vrací korektně 503 pro soubory na SD kartě, které jsou zablokovány FC programem&lt;br /&gt;
* FC: rozšířena a zásadně zlepšena implementace printf/sprintf/snprintf/sscanf - viz detaily v návodu na wiki&lt;br /&gt;
* FC: zlepšen výpis (informace na web) při určitých chybách v FC programu, plus další drobky kolem echo.htm&lt;br /&gt;
&lt;br /&gt;
== 16.10.2022 ==&lt;br /&gt;
* tento firmware (od této verze) podporuje i hardware SDS 64/128/512 ve variantě DP&lt;br /&gt;
* podpora pro 4 PWM výstupy (pro vhodný hardware - BIG2)&lt;br /&gt;
* odpověď na (webový) příkaz /sv? , má doplněný obsah http hlavičky, takže by ji mělo být snazší zpracovat&lt;br /&gt;
* FC: watchdog programu je (nově) pozastaven po dobu mountování SD karty (protože je pozastaven i program)&lt;br /&gt;
* FC: zápis do indexu 999 funguje jak má&lt;br /&gt;
* FC: verze 0x0F (nové funkce PWMx)&lt;br /&gt;
&lt;br /&gt;
== 5.10.2022 ==&lt;br /&gt;
* pouze vše řady 512 (ostatní bez tohoto problému) - důležitá oprava situace kdy někdy chybně došlo ke smazání nahraného FC programu při nahrání nového UWEB projektu do SDS&lt;br /&gt;
&lt;br /&gt;
== 30.9.2022 ==&lt;br /&gt;
* FC: oprava běhu programu v situaci kdy v kódu je vnořený (nested) switch() v rámci jiného switch() (původně chybné chování, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 28.9.2022 ==&lt;br /&gt;
* FC: oprava výsledků maker (define), kdy chybně docházelo k pevnému přetypování na int32_t, což je teď opraveno (odstraněno)&lt;br /&gt;
&lt;br /&gt;
== 1.8.2022 ==&lt;br /&gt;
* správně zobrazovaná hláška (nápověda) na úvodní webové stránce ohledně stavu konfigurace&lt;br /&gt;
* FC: přidáno tlačítko (odkaz) pro restart FULLC programu (např. pokud skončil a chcete jej ručně spustit znovu)&lt;br /&gt;
* FC: do výpisu chyby při pádu programu je přidán UTC čas (pro identifikaci, kdy se chyba stala)&lt;br /&gt;
* FC: spolehlivostní úpravy při startu programu (načtení z DF), a při zápisu nového programu (práce s DF)&lt;br /&gt;
&lt;br /&gt;
== 11.7.2022 ==&lt;br /&gt;
* FC: verze 0x0E&lt;br /&gt;
* FC: přidána funkce mktime()&lt;br /&gt;
* FC: přidána funkce gmtime()&lt;br /&gt;
* FC: přidána funkce localtime()&lt;br /&gt;
* opraveno zachování konfigurace ipwdg (webové rozhraní) a obsluhy relé ipwdg&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* FC: verze 0x0D&lt;br /&gt;
* FC: upravena funkce SDS_TOPB_keyboard_status() pro lepší předané výsledky&lt;br /&gt;
* FC: přidána funkce SDS_TOPB_keyboard_updn()&lt;br /&gt;
* FC: přidána funkce SDS_rescan_onewire()&lt;br /&gt;
* FC: odstraněno náhodné hlášení o už probíhajícím nahrávání programu při nahrávání z EXE&lt;br /&gt;
* BIG 64/128 prodloužen čas pro sestavení Ethernetového spojení, což řeší problém s některými USB síťovými kartami atd.&lt;br /&gt;
* opraveno HTTP POST nastavení položek NTP&lt;br /&gt;
* opraveno HTTP POST který teď neuzavře spojení dříve než má, pokud mazání NVM pro nový FW (nebo nový UserWeb) trvá dlouho&lt;br /&gt;
&lt;br /&gt;
== 12.4.2022 ==&lt;br /&gt;
* doplněna informační stránka o vnitřním stavu OneWire Master (pro snazší identifikaci problémů při používání sběrnice)&lt;br /&gt;
* oprava v bootloaderu pro řadu 512 - vyžaduje přeprogramování u výrobce pro všechna SDS řady 512 s FW starším než 14.2.2022&lt;br /&gt;
&lt;br /&gt;
== 3.4.2022 ==&lt;br /&gt;
* FC verze 0x0C&lt;br /&gt;
* FC: přidána funkce SDS_I2C_rw&lt;br /&gt;
* OneWire stabilnější&lt;br /&gt;
&lt;br /&gt;
== 21.1.2022 ==&lt;br /&gt;
* prioritu mají vybrané konfigurační položky v NVM (jsou-li tam platné) před baterií zálohovanou pamětí&lt;br /&gt;
* aktivován HTTP POST protokol pro nahrávání a konfiguraci SDS (viz [[SDS:POST_upload]])&lt;br /&gt;
&lt;br /&gt;
== 18.1.2022 ==&lt;br /&gt;
* RSTD zapíše do NVM všechny konfigurační položky (i to co nenuluje), pro jistotu že v NVM bude vše skutečně zapsáno&lt;br /&gt;
* načítání konfigurace upraveno (větší spolehlivost)&lt;br /&gt;
&lt;br /&gt;
== 15.1.2022 ==&lt;br /&gt;
* přidána stránka cfgstatus.htm - pro možnost kontroly stavu uložené konfigurace v pevné paměti (např. co nemáte uloženo)&lt;br /&gt;
* přidán M2M výstup ip.xml&lt;br /&gt;
* FC: přidán algoritmus SHA-256 do funkce SDS_crypto()&lt;br /&gt;
* FC: každý program má unikátní identifikátor, podle kterého lze např. kontrolovat či zpětně poznat co máte v SDS nahráno&lt;br /&gt;
* identifikátor FC programu přidán na webové rozhraní a do M2M výstupů, a do exe aplikace&lt;br /&gt;
* zobrazeno unikátní identifikační čislo SDS hardware (napevno spojeno s modulem SDS, nezměnitelné), teď i ve M2M výstupech&lt;br /&gt;
* SNMP: nové položky .8.90 , .8.91 , .8.99&lt;br /&gt;
* FC: nové get(u32) položky 2 a 87&lt;br /&gt;
&lt;br /&gt;
== 31.12.2021 ==&lt;br /&gt;
* možnost vyřadit NTP z činnosti zadáním adresy 127.0.0.1 (vhodné pro uživatele kteří získávají čas odjinud, např. přes LoRA)&lt;br /&gt;
* web: informace na web (p=8) o stavu připojování SD karty (mounting...) a o stavu kdy je FC program pozastaven (PAUSED)&lt;br /&gt;
* web: opraven zámek zvětšené konzole (echo)&lt;br /&gt;
* důslednější kontrola platnosti konfigurace při startu&lt;br /&gt;
&lt;br /&gt;
== 27.12.2021 ==&lt;br /&gt;
* opravena chyba kdy na webu nešlo nastavit 100 procent PWM duty (jen 0 až 99, teď už jde i 100)&lt;br /&gt;
* FC: několikanásobně zvětšena konzole (echo.htm)&lt;br /&gt;
* HW: při poruše hlavního zdroje hodin (krystal) se použije záložní zdroj&lt;br /&gt;
* HW: využíváme RTC pro udržení času při přechodu přes reset (drží čas dokud zase nepřijde NTP)&lt;br /&gt;
* aktualizován bootloader (aktualizace bootloaderu jen prostřednictvím přeprogramování u výrobce) - umí znovu nahrát FW pokud se v SoC poškodí&lt;br /&gt;
* vydána varianta 512 - vlastní soubor s firmware&lt;br /&gt;
&lt;br /&gt;
== 25.12.2021 ==&lt;br /&gt;
* pouze interní vydání&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* FC: oprava nesprávného zacházení s unsigned typy (na některých místech interně přemapovány na signed)&lt;br /&gt;
* FC: chování varianty if pro speciální kombinaci signed/unsigned dle specifikace standardu C&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* FC: oprava TID v MODBUS-TCP&lt;br /&gt;
* MBTC výpis rozšířen&lt;br /&gt;
* FC: drobná úspora heap (více dostupného místa)&lt;br /&gt;
* FC: dns resolv drobný fix&lt;br /&gt;
* FC: http_get a http_post důležitý fix&lt;br /&gt;
* FC: nová funkce http_close&lt;br /&gt;
* FC: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
* vylepšený algoritmus S0, rozšířené možnosti nastavení detektoru S0 (nastavení přidáno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 22.12.2020 ==&lt;br /&gt;
* web: ruční přepnutí CBY pro relé (tzn. &amp;quot;kdo ovládá relé&amp;quot;), na &amp;quot;FULL-C&amp;quot;, dané relé nevypne (off) ale ponechá jeho stávající stav (on, off)&lt;br /&gt;
* security fix&lt;br /&gt;
&lt;br /&gt;
== 10.12.2020 ==&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení&lt;br /&gt;
* integrovaná korekce chyby A/D měření pro HW osazený LMV324; uživatel může povolit tuto automatickou opravu chyby LMV324 ve webové administraci&lt;br /&gt;
* počítání délky aktivace tarifního vstupu (doba T0 a T1 v sekundách za den) viz nové sys, pozor pro funkci vyžaduje NTP&lt;br /&gt;
* automatický odečet S0 počítadel (vždy za dnešek a včerejšek), viz nové sys, pozor pro funkci vyžaduje NTP&lt;br /&gt;
&lt;br /&gt;
== 23.11.2020 ==&lt;br /&gt;
* FC + FULLC.exe: oprava chyby v případě více #if / #ifdef / #endif bloků zapsaných hned za sebou&lt;br /&gt;
* FC: makra a define lze provést i uvnitř funkce (dříve jen venku)&lt;br /&gt;
* FC: detekce nesprávné dereference ukazatele&lt;br /&gt;
&lt;br /&gt;
== 14.11.2020 ==&lt;br /&gt;
* webová administrace: stránka p=42: index ck03 se propíše i do nastavení (chybělo od 23.10.2020, web byl aktualizován, nastavení ale přebíralo ck00)&lt;br /&gt;
&lt;br /&gt;
== 4.11.2020 ==&lt;br /&gt;
* FC + FULLC.exe: odstraněn problém při načtení nahraného FULL-C programu v SDS, kdy dříve mohlo u jedné specifické velikosti nahraného programu, dojít k jeho nespuštění kvůli neodpovídajícímu crc&lt;br /&gt;
&lt;br /&gt;
== 3.11.2020 ==&lt;br /&gt;
* FC: zobrazení (v konzoli) čísla řádku (ve zdrojovém kódu) při chybě (což velmi zlepší ladění programů)&lt;br /&gt;
* FULLC.exe: odstraněno omezení na 255 znaků na řádek&lt;br /&gt;
* FULLC.exe: zrychlení nahrávání do SDS&lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* webová administrace: stránka p=42: změna indexu ck00 na ck03 ať se dají uživatelským skriptem všechny prvky samostatně rozlišit&lt;br /&gt;
* FC: oprava http_get/post: správné vyplnění výsledků i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
&lt;br /&gt;
== 14.10.2020 ==&lt;br /&gt;
* oprava FULL-C funkce XTEA-CRYPT (bug o dvě verze dříve)&lt;br /&gt;
&lt;br /&gt;
== 13.10.2020 ==&lt;br /&gt;
* důležitá oprava chyby ve FULL-C (ternary operator, a další nahlášené nesrovnalosti)&lt;br /&gt;
&lt;br /&gt;
== 13.9.2020 ==&lt;br /&gt;
* oprava detekce SD karty (některé varianty SD karet nebyly detekovány, teď už ano)&lt;br /&gt;
&lt;br /&gt;
== 9.8.2020 ==&lt;br /&gt;
* FULL-C verze 0B (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* různé drobné opravy a zabezpečení&lt;br /&gt;
* zobrazení auditlogu (webové rozhraní SDS)&lt;br /&gt;
* FC: http_post&lt;br /&gt;
* FC: MQTT klient&lt;br /&gt;
* FC: MODBUS-TCP klient&lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* úprava obsluhy relé&lt;br /&gt;
* podpora OneWire modulu SDS-1W-T-RH&lt;br /&gt;
&lt;br /&gt;
== 3.10.2019 ==&lt;br /&gt;
* SMTP klient posílá v hlavičce i položku &amp;quot;Date&amp;quot; (ale jen za předpokladu správného času v SDS)&lt;br /&gt;
* RSTD při zapnutí zařízení, ve kterém není záložní baterie (nebo je vybitá), zachová původně nastavenou MAC adresu (vše ostatní ale už jde do defaultu, což je správně)&lt;br /&gt;
* SUDP: rozšířen NOP příkaz &lt;br /&gt;
* SUDP: přidány další nové příkazy (master_cmd: 32, 33, 40, 42, 44, 48)&lt;br /&gt;
&lt;br /&gt;
== 23.9.2019 ==&lt;br /&gt;
* oprava GUI (S0 Inputs)&lt;br /&gt;
* SNMP nabízí možnost číst všechny sdílené proměnné (FULL-C: Sxx, Uxx, Fxx, Txx)&lt;br /&gt;
* opraven nefunkční RSTD na modulu STSW-rev3&lt;br /&gt;
&lt;br /&gt;
== 23.6.2019 ==&lt;br /&gt;
* oprava chyby objevené ve FW 28.5.2019, kdy na některých specifických SDS nefungovaly AD vstupy&lt;br /&gt;
&lt;br /&gt;
== 28.5.2019 ==&lt;br /&gt;
* oprava funkce SD karty (pro případy kdy se stala po čase nedostupná pro FC/web)&lt;br /&gt;
&lt;br /&gt;
== 5.5.2019 ==&lt;br /&gt;
* dořešeno hlídání stavu (načtení, atd.) SD karty i v případě provozu náročného FULL-C programu (tedy i pro hluboce vnořené smyčky)&lt;br /&gt;
* oprava původně chybné implementace S-UDP příkazu &amp;quot;1Waccess: sub-command 8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 24.2.2019 ==&lt;br /&gt;
* překlopení z BETA do oficiálního FW&lt;br /&gt;
* automatika zimní/letní čas&lt;br /&gt;
* přístup na SD kartu: FULL-C pracuje se soubory (vytvoření, smazání, čtení a zápis, atd.) &lt;br /&gt;
* přístup na SD kartu: web server zobrazuje soubory ze SD karty (vše ve složce \web\ a podsložkách této složky)&lt;br /&gt;
* oprava čtení napětí baterie pro variantu 128K&lt;br /&gt;
* shared.xml&lt;br /&gt;
* odstraněno omezení délky ve shared.txt&lt;br /&gt;
* zprovozněno getsv&lt;br /&gt;
* verze FULL-C je teď FC 0x0A (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* FULL-C: nová možnost způsobu čtení teploty SoC&lt;br /&gt;
* FULL-C: index 64, 65, 184, 185, 429, 430, atd.&lt;br /&gt;
* FULL-C: doplněné set/get funkce pro sdílené proměnné&lt;br /&gt;
* FULL-C: s/printf umí správné zpracovat požadavek na určení desetinných míst pro float&lt;br /&gt;
* FULL-C: funkce pro reset FC programu&lt;br /&gt;
* FULL-C: funkce pro watchdog FC programu&lt;br /&gt;
* SNMP nové OIDy (dle přidaných věcí - čas, sdcard)&lt;br /&gt;
&lt;br /&gt;
== 1.7.2018 ==&lt;br /&gt;
* SNMP: sdsS0translatedUnitT0,1 je poskytováno jako hodnota od odečtu (ne od úplného začátku měření, jak to bylo předtím) &lt;br /&gt;
* FULL-C: přidán index 183 poskytující datum vydání FW který je právě nahrán v SDS&lt;br /&gt;
&lt;br /&gt;
== 27.6.2018 ==&lt;br /&gt;
* verze FULL-C je teď FC 0x09 (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* FULL-C: přidána podpora pro int64_t a uint64_t&lt;br /&gt;
* FULL-C: přejmenováno set a get funkce (rozlišení 32 a 64 bit)&lt;br /&gt;
* FULL-C: snprintf přesně dle standardu (zrušena nevhodná změna z 20.12.2017)&lt;br /&gt;
* drobné opravy&lt;br /&gt;
* drobná oprava v odchozím TCP-SYN a v generátoru ISN&lt;br /&gt;
&lt;br /&gt;
== 8.3.2018 ==&lt;br /&gt;
* oprava echo.htm - správně wrapuje obsah, a nejsou tam nadbytečné 0x00&lt;br /&gt;
* vhodnější řešení rexmitu částí webových stránek a dynamických dat (ocení to zejména uživatelé s mobilním připojením pro SDS)&lt;br /&gt;
&lt;br /&gt;
== 2.3.2018 ==&lt;br /&gt;
* aktulizace a oprava ve výpočtu &amp;quot;aktuálního výkonu&amp;quot; pro okrajové situace (např. krajní hodnoty impulsní konstanty)&lt;br /&gt;
&lt;br /&gt;
== 11.2.2017 ==&lt;br /&gt;
* zprovozněny funkce set/get pro indexy 4000 až 4300 (alternativní přístup k číselným sdíleným proměnným)&lt;br /&gt;
&lt;br /&gt;
== 21.12.2017 ==&lt;br /&gt;
* zvýšena stabilita spuštění po zapnutí&lt;br /&gt;
&lt;br /&gt;
== 20.12.2017 ==&lt;br /&gt;
* dočasná změna ve FULL-C (bude zrušena): funkce snprintf() má interně posunutý limit délky zápisu o 1 (toto je záměrný rozdíl proti C99). Změna v SDS je provedena z důvodu neznalosti programátorů FC v tom, že do snprintf() limitu je potřeba započítat i jeden byte pro ukončující nulu. Ve výsledku tedy zápis &amp;quot;snprintf(buf, limit, ...);&amp;quot; je v FC interně vykonán jako &amp;quot;snprintf(buf, limit+1, ...);&amp;quot;.&lt;br /&gt;
* oprava ve FULL-C: výpočet platné délky bufferu funguje i pro ukazatele vytvořené offsetem ze základní alokované adresy (příklad takového bufferu je: buf=malloc(x)+offset;)&lt;br /&gt;
* stav všech relé je načten z paměti vždy po zapnutí modulu, a ty relé které jsou ručně ovládány (manual control) a které byly před vypnutím v zapnutém (ON) stavu, jsou po zapnutí modulu aktivovány (zatímco relé ovládané z IP-W a FC jsou vždy po zapnutí modulu uvedeny do OFF stavu)&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
* UserWEB projekt má opravenu chybu, kdy nebylo možno použít delší Name Chain tabulku (tedy lze už vložit mnohem více souborů) &lt;br /&gt;
* nastavená MAC adresa je zachována i po průchodu RSTD (byla-li platná)&lt;br /&gt;
* opravena chyba způsobující nefunkční http_get(), teď už to opět funguje&lt;br /&gt;
* aktualizace obsluhy PWM (např. lépe přepočítává zobrazovaná &amp;quot;procenta&amp;quot;)&lt;br /&gt;
* oprava strcat() funkce (opraveno hlídání max velikosti bufferu ze &amp;quot;from&amp;quot; na &amp;quot;to&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
== 18.9.2017 ==&lt;br /&gt;
* FULL-C: printf() správně tiskne float i pokud se formátovací parametr zadá jako %d (tedy ne jako %f)&lt;br /&gt;
* FULL-C: snprint() opraven (když je 'from' kratší než 'to' tak je 'to' doplněn 0x00 - je to zvláštnost, nemá se to používat, ale C99 to předepisuje, tak to dodržíme)&lt;br /&gt;
&lt;br /&gt;
== 9.9.2017 ==&lt;br /&gt;
* vnitřní bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 29.8.2017 ==&lt;br /&gt;
* oprava chování RSTD - pokud je zapojen před zapnutím, nepřejde do automatického resetu po 10sec, ale RSTD je použit a SDS pracuje dále; přitom funkce &amp;quot;zapoj RSTD za běhu&amp;quot; je zachována správně&lt;br /&gt;
* zásadní zlepšení odolnosti FULL-C proti chybám programátora - vnitřní hlídání rozsahů bufferu a stringů, zamezující zápisu za hranice pole (typicky chybné použití sprintf() funkce, ale toto hlídání je aplikováno obecně všude)&lt;br /&gt;
&lt;br /&gt;
== 8.8.2017 ==&lt;br /&gt;
* oprava: FC teď správně převádí URL kód &amp;quot;sv?xxxx=yyyy...&amp;quot;, na text (vypadlo 31.3. při rozšíření počtu znaků pro sdílené proměnné Txx) &lt;br /&gt;
&lt;br /&gt;
== 10.7.2017 ==&lt;br /&gt;
* vydán firmware pro variantu &amp;quot;128kB&amp;quot; (od teď vychází dva typy firmware, pro variantu &amp;quot;64kB&amp;quot; a variantu &amp;quot;128kB&amp;quot;, vyberete si tu svou dle HW který máte)&lt;br /&gt;
* velká optimalizace využití paměti pro uložení a běh FULL-C programu (komprese, a zmenšení vyžadovaného heapu pro běh programu) - významně zvětšuje možnou velikost FC programu&lt;br /&gt;
* pin RSTD lze teď také použít i bez vypnutí a zapnutí SDS, stačí jej na 10 vteřin za běhu zkratovat (pak se provede RSTD a SDS se rebootuje) - výhodné pro zařízení kde vypnutí nelze provést&lt;br /&gt;
* drobné užitečné opravy dle hlášení uživatelů&lt;br /&gt;
* verze FC zvýšena na 0x08, a přidána možnost uložit 128 proměnných do baterií zálohované pamětí (tzn. obsah přežije výpadek napájení a FC program po restartu o tyto údaje nepřijde)&lt;br /&gt;
&lt;br /&gt;
== 2.6.2017 ==&lt;br /&gt;
* návratová hodnota funkce DF_read_page() je nastavena správně i v případě, kdy tato funkce čte data z cache (opakované čtení stejné stránky DF)&lt;br /&gt;
&lt;br /&gt;
== 6.4.2017 ==&lt;br /&gt;
* přidána FULL-C funkce AES-128-CTR, viz SDS_crypto(0x20, ...);&lt;br /&gt;
&lt;br /&gt;
== 31.3.2017 ==&lt;br /&gt;
* oprava RS485-MASTER drive, je teď zcela přesný (tzn. vypnut v přesném časování za úplně posledním vyslaným bitem)&lt;br /&gt;
* oprava čtení konfigurace 1-W, pomocí sds_get_a()&lt;br /&gt;
* přidán index 139&lt;br /&gt;
* odstraněno omezení na 32 znaků pro sdílené proměnné (přenos textu) &amp;quot;Txx&amp;quot; (xx = 00 až 99)&lt;br /&gt;
* fix návratových hodnot FULL-C funkcí pro práci s DF (teď to vrací správně 1 nebo 0, podle wiki)&lt;br /&gt;
* upřesněn název: (z BIG na BIG-64) / (z STSW na STSW-64)&lt;br /&gt;
* vyžaduje aktuální SDSLOAD.exe (6.3.2017 nebo novější) a FULLC.exe (6.3.2017 nebo novější)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== starší záznamy ==&lt;br /&gt;
&lt;br /&gt;
Nejsou k dispozici.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=961</id>
		<title>Firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=961"/>
		<updated>2025-08-11T10:37:16Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nový Firmware ==&lt;br /&gt;
&lt;br /&gt;
Aktualizujte si své SDS - nahrejte do něj nový firmware, který získáte na této stránce - '''naskrolujte dolů''' kde naleznete odkaz na BIN soubor pro vaše zařízení.&lt;br /&gt;
&lt;br /&gt;
Postup a řešení problémů: [[Manual_Firmware_Update|Návod pro aktualizaci Firmware v SDS]].&lt;br /&gt;
&lt;br /&gt;
Důležité první kroky, které je nutné provést s každým novým zakoupeným modulem: [[New_Device_First_Setup_Steps|První nutné kroky pro nově zakoupené zařízení SDS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Odkazy ke stáhnutí ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;PC Software&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_sdsc_winexe.jpg]] '''Program SDSC.exe''' (programovací jazyk SDS-C, aktualizace firmware pro SDS '''první řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; stáhnout WinEXE pro SDS-C [https://sds.an-d.cz/firmware/SDSC_310123.exe zápis/simulace/upload SDS-C (SDS-C '''verze 09''') a UWEB, ze dne 31.1.2023]&amp;lt;br&amp;gt;SHA-256: daf1095f206404e33223f675f5d0bc09d4fc5dfd7d9f79f4f735af88f5ff1e6a&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program FULLC.exe''' (programovací jazyk FULL-C, aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; (FC verze '''0x12''' - '''aktuální'''): stáhnout WinEXE pro FULL-C [https://sds.an-d.cz/firmware/FULLC_220724.exe zápis/upload FULL-C a UWEB, ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro Firmware od 9.3.2023 včetně, pro všechny varianty SDS (64kB a 128kB a 512kB)&amp;lt;br&amp;gt;SHA-256: b4cb95d8ec8a6e844a3a4c9a2e9fc50ece60ccf44e8043f8c10f46b2294cae0b&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program SDSLOAD.exe''' (&amp;quot;jednokrokový&amp;quot; upload .FC souborů a aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; ('''aktuální''' verze, pro FW od 10.7.2017 včetně a dále) stáhnout WinEXE [https://sds.an-d.cz/firmware/SDSLOAD_220724.exe program SDSLOAD ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro všechny SDS varianty 64kB a 128kB a 512kB, (subvarianty DP a DS84)&amp;lt;br&amp;gt;SHA-256: ded5bf1aca2e04e22c33899a0976deccc8ff76eb88f53ecd9769788b7daa25a7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_empty.jpg]] '''Program SDS LOG'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; Program '''[[SDS LOG: intro|SDS LOG]]''' - verze 0.1 ze dne 26.8.2011 - [https://sds.an-d.cz/firmware/SDS_LOG.exe stáhnout EXE program]&lt;br /&gt;
&amp;lt;li&amp;gt; Zdrojové kódy programu SDS LOG (Creative Commons Licence) [[SDS LOG: source code|ke stáhnutí zde]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS LOG: changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;První Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMICROE.jpg]]  [[Soubor:Thumbnail_SDSMICRO.jpg]] [[Soubor:Thumbnail_SDS_DIN.jpg]] '''D0000001''' MICRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: LM]] varianty '''LIGHT''', '''LIGHT 2''' a '''E (DIN)'''.&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny varianty a revize SDS MICRO LM.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_CZ.bin SDS-MICRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_EN.bin SDS-MICRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B0000057''' MICRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_CZ.bin SDS-MICRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_EN.bin SDS-MICRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B000D957''' MICRO ST DP&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST DP]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST DP.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_CZ.bin SDS-MICRO-ST-DP-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_EN.bin SDS-MICRO-ST-DP-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MINI_1.png]] [[Soubor:Thumbnail_SDS_MINI_2.png]] '''B0000020''' MINI ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MINI: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MINI ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_CZ.bin SDS-MINI-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_EN.bin SDS-MINI-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[SDS MINI: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMACRO.jpg]] '''C0000001''' MACRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: LM]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_CZ.bin SDS-MACRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_EN.bin SDS-MACRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MACRO_ST_rev1.png]] '''C0000057''' MACRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_CZ.bin SDS-MACRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_EN.bin SDS-MACRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSTTCPRO.jpg]] '''B0000001''' TTCPRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS TTCPRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_CZ.bin SDS-TTCPRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_EN.bin SDS-TTCPRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS TTCPRO ST má shodný Change Log se SDS MINI ST, a to zde: [[SDS MINI: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSIO6.jpg|160px]] '''D0000006''' IO6 LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: LM]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_CZ.bin SDS-IO6-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_EN.bin SDS-IO6-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 LM má shodný Change Log se SDS MICRO LM, a to zde: [[SDS MICRO: LM: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_empty.jpg]] '''D0000011''' IO6 ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_CZ.bin SDS-IO6-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_EN.bin SDS-IO6-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 ST má shodný Change Log se SDS MICRO ST, a to zde: [[SDS MICRO: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_FTP_rev1.png]] '''F0000001''' FTP LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS FTP: LM]], výchozí firmware.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Firmware: ''SDS FTP ze dne 7.9.2010'' už nahrán ve výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS FTP: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_ONEDPS.jpg]] '''E000AAA1''' UPS ONEDPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: ONEDPS]], finální jednodesková verze (aktuální) (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stáhnout firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_CZ.bin (Česká lokalizace) SDS-UPS-ONEDPS-LM ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;Download firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_EN.bin (English language version) SDS-UPS-ONEDPS-LM released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS UPS: LM: ONEDPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_TWODPS.jpg]] '''C00xxxxx''' UPS TWODPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: TWODPS]], HW rev3u - DVOUDESKOVÁ (UŽ NEPRODÁVANÁ) varianta.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je zaslán na požádání (pošlete email), aktuální verze je z 1.3.2011 (dále aktualizováno na specifické požádání, raději proto přejděte na nový HW).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Každá deska má svou kalibraci, proto každá deska má svůj vlastní FW, proto musíte uvést S/N svého výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HISTORIE: [[SDS UPS: LM: TWODPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Druhá Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSBIG.jpg]] [[Soubor:Thumbnail_SDSSMALL.jpg]] '''B1900001''' / '''B1900002''' / '''B1900004''' : BIG, BIG2, SMALL, STSW, MBGW&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Společný firmware pro výrobky [[SDS BIG]], [[SDS SMALL]] a [[SDS STSW]] a [[SDS MBGW]]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je jednotný pro všechny varianty '''SDS Druhé Produktové Řady''', nutné je rozlišení dle varianty 64kB/128kB/512kB. Rozlišení podle dalších subvariant (DP, DS84) se neprovádí.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je společný pro BIG a BIG2, rozlišení je pouze dle varianty 64/128/512.&lt;br /&gt;
&amp;lt;li&amp;gt;Pozn. Modul SMALL a modul MBGW interně obsahuje modul STSW, nahrává se tam tedy stejný FW.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware vždy vyžaduje použití odpovídající, aktuální verze FULLC.EXE programu. &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS BIG/SMALL/STSW: [[SDS BIG: firmware changelog|firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;64kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 64kB) [https://sds.an-d.cz/firmware/SDS_BIG_64K_110825_EN.bin firmware &amp;quot;64kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 11.8.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;128kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 128kB) [https://sds.an-d.cz/firmware/SDS_BIG_128K_110825_EN.bin firmware &amp;quot;128kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 11.8.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;512kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [[firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 12.4.2022|informace pokud máte SDS512 s FW &amp;lt;b&amp;gt;starším&amp;lt;/b&amp;gt; než 12.4.2022]]&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [https://sds.an-d.cz/firmware/SDS_BIG_512K_110825_EN.bin firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 11.8.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;Informace: SDS BIG/SMALL/STSW 512 se starším FW než 12.4.2022 vyžaduje přeprogramování u výrobce.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| POZOR&lt;br /&gt;
'''Aktualizujte''' své doplňkové sandwich desky, tzn. [[SDS BIG: DALI]], [[SDS BIG: LORA]] - na verzi FW 5.12.2016 '''nebo novější'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Aktualizaci lze provést jen fyzicky u výrobce, ten ji provede bezplatně (zašlete výrobci vaše SDS pro jeho aktualizaci). Se starým FW nebude tento HW plně fungovat.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Informace ===&lt;br /&gt;
&lt;br /&gt;
 VŽDY MĚJTE VE SVÉM ZAŘÍZENÍ NEJNOVĚJŠÍ FIRMWARE, A POUŽÍVEJTE TAKÉ NEJNOVĚJŠÍ SDS-C EXE / FULL-C EXE PROGRAM.&lt;br /&gt;
 V opačném případě vám budou chybět nové funkce, které neustále přidáváme, a také nebudete mít opravené nalezené chyby.&lt;br /&gt;
 V případě že chcete získat podporu, musíte mít instalovaný nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historický Software ===&lt;br /&gt;
&lt;br /&gt;
Za účelem aktualizace takových SDS, kde už dlouho nebyl aktualizován firmware, je potřeba použít odpovídající EXE program pro aktualizaci takovéhoto zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== První Produktová Řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro SDS-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_151119.exe ze dne '''15.11.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 08, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020118.exe ze dne '''2.1.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 07, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020317.exe ze dne '''2.3.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 8.8.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_060216.exe ze dne '''6.2.2016''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které nemají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 24.1.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_231111.exe ze dne '''23.11.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 04&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_170211.exe ze dne '''17.2.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''února 2011''')&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro ''SDS-C verze č. 03'' (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_140511.exe ze dne '''14.5.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''konce května 2011''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Druhá Produktová řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro FULL-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_070323.exe ze dne '''7.3.2023''']&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_311222.exe ze dne '''31.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 11, (firmware od 9.1.2023 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_071222.exe ze dne '''7.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 10, (firmware od 18.11.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_161022.exe ze dne '''16.10.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0F, (firmware od 16.10.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_110722.exe ze dne '''11.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0E, (firmware od 11.7.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010722.exe ze dne '''1.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0D, (firmware od 6.8.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030422.exe ze dne '''3.4.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0C, (firmware od 23.3.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010322.exe ze dne '''1.3.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0B, (firmware od 6.8.2020 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030119.exe ze dne '''3.1.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0A, (firmware od 3.1.2019 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010718.exe ze dne '''1.7.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 09, (firmware od 27.6.2018 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_100717.exe ze dne '''10.7.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 08, (firmware od 10.7.2017 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_080617.exe ze dne '''8.6.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 06, (firmware starší než Červenec-2017, a pouze pro variantu SDS 64kB)&lt;br /&gt;
&lt;br /&gt;
* (historická verze) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_201022.exe ze dne 20.10.2022]&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_120417.exe ze dne 12.4.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB která používá ''starý'' firmware (2017 nebo starší)&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_100717.exe ze dne 10.7.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB a 128kB (nepodporuje variantu 512kB tak jako aktuální stáhnutelná verze aplikace)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beta Testing ==&lt;br /&gt;
&lt;br /&gt;
Než vydáme novou verzi, je potřeba změny a novinky otestovat.&lt;br /&gt;
&lt;br /&gt;
Pokud jste ochotní se testu zúčastnit, pak se podívejte [https://forum.sds.an-d.cz/viewtopic.php?id=129 na tento odkaz]. Zde jsou uveřejněny vždy nejnovější beta verze firmware.&lt;br /&gt;
&lt;br /&gt;
Diskuse s vývojem k aktuálnímu Firmware je k dispozici na našem fóru.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=New_Device_First_Setup_Steps&amp;diff=960</id>
		<title>New Device First Setup Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=New_Device_First_Setup_Steps&amp;diff=960"/>
		<updated>2025-08-11T08:00:05Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nově zakoupené zařízení SDS ==&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. VŽDY AKTUALIZUJTE NA NOVÝ FIRMWARE - který získáte na stránce [[Firmware]].&lt;br /&gt;
&lt;br /&gt;
2. NÁSLEDNĚ PROVEĎTE FACTORY RESET (aktivace RSTD) - a to i v případě, že jste firmware neaktualizovali (tzn. že už v zařízení byl nejnovější FW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Pouze takto připravené zařízení lze dále provozovat.'''&lt;br /&gt;
&lt;br /&gt;
Pokud Vám zařízení SDS nefunguje atd. tak to je z 99% tím, že jste neprovedli výše uvedené dva důležité kroky.&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS, které jste čerstvě zakoupili, může mít starší firmware (který si pak musíte sami aktualizovat), a může mít nesprávnou konfiguraci (např. po výrobních testech). Proto je vždy nutné provést jak krok č. 1, tak především krok č. 2 !!!&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=New_Device_First_Setup_Steps&amp;diff=959</id>
		<title>New Device First Setup Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=New_Device_First_Setup_Steps&amp;diff=959"/>
		<updated>2025-08-11T07:58:44Z</updated>

		<summary type="html">&lt;p&gt;Adamn: Založena nová stránka s textem „== Nově zakoupené zařízení SDS ==   1. VŽDY AKTUALIZUJTE NA NOVÝ FIRMWARE - který získáte na stránce Firmware.  2. NÁSLEDNĚ PROVEĎTE FACT…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nově zakoupené zařízení SDS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. VŽDY AKTUALIZUJTE NA NOVÝ FIRMWARE - který získáte na stránce [[Firmware]].&lt;br /&gt;
&lt;br /&gt;
2. NÁSLEDNĚ PROVEĎTE FACTORY RESET (aktivace RSTD) - a to i v případě, že jste firmware neaktualizovali (tzn. že už v zařízení byl nejnovější FW)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pouze takto připravené zařízení lze dále provozovat.&lt;br /&gt;
&lt;br /&gt;
Pokud Vám zařízení SDS nefunguje atd. tak to je z 99% tím, že jste neprovedli výše uvedené dva důležité kroky.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=958</id>
		<title>Firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=958"/>
		<updated>2025-08-11T07:56:15Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nový Firmware ==&lt;br /&gt;
&lt;br /&gt;
Aktualizujte si své SDS - nahrejte do něj nový firmware, který získáte na této stránce - '''naskrolujte dolů''' kde naleznete odkaz na BIN soubor pro vaše zařízení.&lt;br /&gt;
&lt;br /&gt;
Postup a řešení problémů: [[Manual_Firmware_Update|Návod pro aktualizaci Firmware v SDS]].&lt;br /&gt;
&lt;br /&gt;
Důležité první kroky, které je nutné provést s každým novým zakoupeným modulem: [[New_Device_First_Setup_Steps|První nutné kroky pro nově zakoupené zařízení SDS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Odkazy ke stáhnutí ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;PC Software&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_sdsc_winexe.jpg]] '''Program SDSC.exe''' (programovací jazyk SDS-C, aktualizace firmware pro SDS '''první řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; stáhnout WinEXE pro SDS-C [https://sds.an-d.cz/firmware/SDSC_310123.exe zápis/simulace/upload SDS-C (SDS-C '''verze 09''') a UWEB, ze dne 31.1.2023]&amp;lt;br&amp;gt;SHA-256: daf1095f206404e33223f675f5d0bc09d4fc5dfd7d9f79f4f735af88f5ff1e6a&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program FULLC.exe''' (programovací jazyk FULL-C, aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; (FC verze '''0x12''' - '''aktuální'''): stáhnout WinEXE pro FULL-C [https://sds.an-d.cz/firmware/FULLC_220724.exe zápis/upload FULL-C a UWEB, ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro Firmware od 9.3.2023 včetně, pro všechny varianty SDS (64kB a 128kB a 512kB)&amp;lt;br&amp;gt;SHA-256: b4cb95d8ec8a6e844a3a4c9a2e9fc50ece60ccf44e8043f8c10f46b2294cae0b&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program SDSLOAD.exe''' (&amp;quot;jednokrokový&amp;quot; upload .FC souborů a aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; ('''aktuální''' verze, pro FW od 10.7.2017 včetně a dále) stáhnout WinEXE [https://sds.an-d.cz/firmware/SDSLOAD_220724.exe program SDSLOAD ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro všechny SDS varianty 64kB a 128kB a 512kB, (subvarianty DP a DS84)&amp;lt;br&amp;gt;SHA-256: ded5bf1aca2e04e22c33899a0976deccc8ff76eb88f53ecd9769788b7daa25a7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_empty.jpg]] '''Program SDS LOG'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; Program '''[[SDS LOG: intro|SDS LOG]]''' - verze 0.1 ze dne 26.8.2011 - [https://sds.an-d.cz/firmware/SDS_LOG.exe stáhnout EXE program]&lt;br /&gt;
&amp;lt;li&amp;gt; Zdrojové kódy programu SDS LOG (Creative Commons Licence) [[SDS LOG: source code|ke stáhnutí zde]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS LOG: changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;První Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMICROE.jpg]]  [[Soubor:Thumbnail_SDSMICRO.jpg]] [[Soubor:Thumbnail_SDS_DIN.jpg]] '''D0000001''' MICRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: LM]] varianty '''LIGHT''', '''LIGHT 2''' a '''E (DIN)'''.&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny varianty a revize SDS MICRO LM.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_CZ.bin SDS-MICRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_EN.bin SDS-MICRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B0000057''' MICRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_CZ.bin SDS-MICRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_EN.bin SDS-MICRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B000D957''' MICRO ST DP&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST DP]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST DP.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_CZ.bin SDS-MICRO-ST-DP-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_EN.bin SDS-MICRO-ST-DP-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MINI_1.png]] [[Soubor:Thumbnail_SDS_MINI_2.png]] '''B0000020''' MINI ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MINI: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MINI ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_CZ.bin SDS-MINI-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_EN.bin SDS-MINI-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[SDS MINI: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMACRO.jpg]] '''C0000001''' MACRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: LM]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_CZ.bin SDS-MACRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_EN.bin SDS-MACRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MACRO_ST_rev1.png]] '''C0000057''' MACRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_CZ.bin SDS-MACRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_EN.bin SDS-MACRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSTTCPRO.jpg]] '''B0000001''' TTCPRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS TTCPRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_CZ.bin SDS-TTCPRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_EN.bin SDS-TTCPRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS TTCPRO ST má shodný Change Log se SDS MINI ST, a to zde: [[SDS MINI: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSIO6.jpg|160px]] '''D0000006''' IO6 LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: LM]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_CZ.bin SDS-IO6-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_EN.bin SDS-IO6-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 LM má shodný Change Log se SDS MICRO LM, a to zde: [[SDS MICRO: LM: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_empty.jpg]] '''D0000011''' IO6 ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_CZ.bin SDS-IO6-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_EN.bin SDS-IO6-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 ST má shodný Change Log se SDS MICRO ST, a to zde: [[SDS MICRO: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_FTP_rev1.png]] '''F0000001''' FTP LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS FTP: LM]], výchozí firmware.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Firmware: ''SDS FTP ze dne 7.9.2010'' už nahrán ve výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS FTP: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_ONEDPS.jpg]] '''E000AAA1''' UPS ONEDPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: ONEDPS]], finální jednodesková verze (aktuální) (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stáhnout firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_CZ.bin (Česká lokalizace) SDS-UPS-ONEDPS-LM ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;Download firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_EN.bin (English language version) SDS-UPS-ONEDPS-LM released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS UPS: LM: ONEDPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_TWODPS.jpg]] '''C00xxxxx''' UPS TWODPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: TWODPS]], HW rev3u - DVOUDESKOVÁ (UŽ NEPRODÁVANÁ) varianta.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je zaslán na požádání (pošlete email), aktuální verze je z 1.3.2011 (dále aktualizováno na specifické požádání, raději proto přejděte na nový HW).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Každá deska má svou kalibraci, proto každá deska má svůj vlastní FW, proto musíte uvést S/N svého výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HISTORIE: [[SDS UPS: LM: TWODPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Druhá Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSBIG.jpg]] [[Soubor:Thumbnail_SDSSMALL.jpg]] '''B1900001''' / '''B1900002''' / '''B1900004''' : BIG, BIG2, SMALL, STSW, MBGW&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Společný firmware pro výrobky [[SDS BIG]], [[SDS SMALL]] a [[SDS STSW]] a [[SDS MBGW]]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je jednotný pro všechny varianty '''SDS Druhé Produktové Řady''', nutné je rozlišení dle varianty 64kB/128kB/512kB. Rozlišení podle dalších subvariant (DP, DS84) se neprovádí.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je společný pro BIG a BIG2, rozlišení je pouze dle varianty 64/128/512.&lt;br /&gt;
&amp;lt;li&amp;gt;Pozn. Modul SMALL a modul MBGW interně obsahuje modul STSW, nahrává se tam tedy stejný FW.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware vždy vyžaduje použití odpovídající, aktuální verze FULLC.EXE programu. &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS BIG/SMALL/STSW: [[SDS BIG: firmware changelog|firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;64kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 64kB) [https://sds.an-d.cz/firmware/SDS_BIG_64K_280325_EN.bin firmware &amp;quot;64kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 28.3.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;128kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 128kB) [https://sds.an-d.cz/firmware/SDS_BIG_128K_280325_EN.bin firmware &amp;quot;128kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 28.3.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;512kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [[firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 12.4.2022|informace pokud máte SDS512 s FW &amp;lt;b&amp;gt;starším&amp;lt;/b&amp;gt; než 12.4.2022]]&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [https://sds.an-d.cz/firmware/SDS_BIG_512K_280325_EN.bin firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 28.3.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;Informace: SDS BIG/SMALL/STSW 512 se starším FW než 12.4.2022 vyžaduje přeprogramování u výrobce.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| POZOR&lt;br /&gt;
'''Aktualizujte''' své doplňkové sandwich desky, tzn. [[SDS BIG: DALI]], [[SDS BIG: LORA]] - na verzi FW 5.12.2016 '''nebo novější'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Aktualizaci lze provést jen fyzicky u výrobce, ten ji provede bezplatně (zašlete výrobci vaše SDS pro jeho aktualizaci). Se starým FW nebude tento HW plně fungovat.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Informace ===&lt;br /&gt;
&lt;br /&gt;
 VŽDY MĚJTE VE SVÉM ZAŘÍZENÍ NEJNOVĚJŠÍ FIRMWARE, A POUŽÍVEJTE TAKÉ NEJNOVĚJŠÍ SDS-C EXE / FULL-C EXE PROGRAM.&lt;br /&gt;
 V opačném případě vám budou chybět nové funkce, které neustále přidáváme, a také nebudete mít opravené nalezené chyby.&lt;br /&gt;
 V případě že chcete získat podporu, musíte mít instalovaný nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historický Software ===&lt;br /&gt;
&lt;br /&gt;
Za účelem aktualizace takových SDS, kde už dlouho nebyl aktualizován firmware, je potřeba použít odpovídající EXE program pro aktualizaci takovéhoto zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== První Produktová Řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro SDS-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_151119.exe ze dne '''15.11.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 08, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020118.exe ze dne '''2.1.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 07, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020317.exe ze dne '''2.3.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 8.8.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_060216.exe ze dne '''6.2.2016''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které nemají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 24.1.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_231111.exe ze dne '''23.11.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 04&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_170211.exe ze dne '''17.2.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''února 2011''')&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro ''SDS-C verze č. 03'' (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_140511.exe ze dne '''14.5.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''konce května 2011''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Druhá Produktová řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro FULL-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_070323.exe ze dne '''7.3.2023''']&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_311222.exe ze dne '''31.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 11, (firmware od 9.1.2023 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_071222.exe ze dne '''7.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 10, (firmware od 18.11.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_161022.exe ze dne '''16.10.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0F, (firmware od 16.10.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_110722.exe ze dne '''11.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0E, (firmware od 11.7.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010722.exe ze dne '''1.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0D, (firmware od 6.8.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030422.exe ze dne '''3.4.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0C, (firmware od 23.3.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010322.exe ze dne '''1.3.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0B, (firmware od 6.8.2020 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030119.exe ze dne '''3.1.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0A, (firmware od 3.1.2019 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010718.exe ze dne '''1.7.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 09, (firmware od 27.6.2018 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_100717.exe ze dne '''10.7.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 08, (firmware od 10.7.2017 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_080617.exe ze dne '''8.6.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 06, (firmware starší než Červenec-2017, a pouze pro variantu SDS 64kB)&lt;br /&gt;
&lt;br /&gt;
* (historická verze) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_201022.exe ze dne 20.10.2022]&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_120417.exe ze dne 12.4.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB která používá ''starý'' firmware (2017 nebo starší)&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_100717.exe ze dne 10.7.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB a 128kB (nepodporuje variantu 512kB tak jako aktuální stáhnutelná verze aplikace)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beta Testing ==&lt;br /&gt;
&lt;br /&gt;
Než vydáme novou verzi, je potřeba změny a novinky otestovat.&lt;br /&gt;
&lt;br /&gt;
Pokud jste ochotní se testu zúčastnit, pak se podívejte [https://forum.sds.an-d.cz/viewtopic.php?id=129 na tento odkaz]. Zde jsou uveřejněny vždy nejnovější beta verze firmware.&lt;br /&gt;
&lt;br /&gt;
Diskuse s vývojem k aktuálnímu Firmware je k dispozici na našem fóru.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=957</id>
		<title>FULL-C dns resolv functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=957"/>
		<updated>2025-08-10T16:32:01Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Síťové funkce: dotaz na přidělenou IP adresu pro DNS jméno ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS umožňuje odeslat dotaz na DNS server, za účelem zjištění IP adresy přidělené k DNS názvu, který je obsahem právě takového dotazu.&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem jsou k dispozici tyto dvě funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void dns_resolv(char *domainNameInput);&lt;br /&gt;
 unsigned int dns_resolv_status(unsigned int *IP0value, unsigned int *IP1value, unsigned int *IP2value, unsigned int *IP3value);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
SDS odesílá dotaz na DNS server, který je nastaven uživatelem SDS ve webové administraci zařízení (popř. je adresa DNS serveru získána z DHCP serveru, opět záleží na konfiguraci).&lt;br /&gt;
&lt;br /&gt;
Po odeslání dotazu se čeká na odpověď, přičemž FULL-C program pravidelně kontroluje stav voláním '''dns_resolv_status()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''POZOR : Maximální délka názvu DNS domény je interně omezena na 96 znaků !'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příklad ==&lt;br /&gt;
&lt;br /&gt;
V tomto příkladu odesílá SDS dotaz (textový název domény) na DNS server a zobrazuje případnou získanou odpověď (IP adresu).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
 char DNSname[96];&lt;br /&gt;
 unsigned int status;&lt;br /&gt;
 unsigned int IP0, IP1, IP2, IP3;&lt;br /&gt;
&lt;br /&gt;
 sprintf((char *)DNSname, &amp;quot;www.google.com&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;RESOLVING %s \n&amp;quot;, DNSname);&lt;br /&gt;
&lt;br /&gt;
 // start - select the new DNSname for all the subsequent status function calls&lt;br /&gt;
 dns_resolv(DNSname);&lt;br /&gt;
&lt;br /&gt;
 // get the first status value&lt;br /&gt;
 status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 // only if truly working, keep waiting&lt;br /&gt;
 while (512 == status)&lt;br /&gt;
 {&lt;br /&gt;
   // keep getting a new status, until it is different than 512&lt;br /&gt;
   status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // check the final status value&lt;br /&gt;
 if (513 == status)&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;GOT RESULT: IP = %u.%u.%u.%u\n&amp;quot;, IP0, IP1, IP2, IP3);&lt;br /&gt;
   // only in this case, we can use the IPx address&lt;br /&gt;
   // ... OK&lt;br /&gt;
&lt;br /&gt;
   // we can print the additional internal DNS cache status, for this particular domain&lt;br /&gt;
   // note. the value is valid only if the status is 512, otherwise not&lt;br /&gt;
   unsigned int ttl;&lt;br /&gt;
   ttl = SDS_get_u(70); // index [70] = actual TTL value for the selected DNS cache item &lt;br /&gt;
   printf(&amp;quot;REMAINING DNS-CACHE TTL-VALUE IS %u SECONDS FOR DOMAIN %s\n&amp;quot;, ttl, DNSname);&lt;br /&gt;
 } else&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;DNS RESOLV FAILED (error %u) \n&amp;quot;, status);&lt;br /&gt;
   // in this case, the IPx adress is not valid, and you need to repeat the dns_resolv() call again&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interní DNS cache ==&lt;br /&gt;
&lt;br /&gt;
Po úspěšném provedení získání DNS překladu, kdy SDS odešle dotaz na určený DNS server, a získá z něj odpověď, &lt;br /&gt;
je výsledek k dispozici (dá se získat pomocí dns_resolv_status funkce).&lt;br /&gt;
&lt;br /&gt;
Funkce dns_resolv_status() vrací vždy výsledek toho úplně posledního dotazu, který byl vyvolán zavoláním funkce dns_resolv().&lt;br /&gt;
&lt;br /&gt;
Platná odpověď z DNS serveru je uložena do interní tabulky (DNS cache) v SDS, přičemž z odpovědi je převzata i položka TTL pro danou položku.&lt;br /&gt;
&lt;br /&gt;
Pokud je (v interní cache) existující položka, se svou zbývající hodnotou TTL větší než 0, bude ihned k dispozici odpověď z interní cache.&lt;br /&gt;
&lt;br /&gt;
Pokud záznam v interní cache není (nebo už vypršel), bude automaticky odeslána žádost o nový překlad na DNS server.&lt;br /&gt;
&lt;br /&gt;
Toto si řídí SDS interně.&lt;br /&gt;
&lt;br /&gt;
Každou 1 sekundu dojde ke snížení zbývajících hodnot TTL u všech záznamů v interní cache.&lt;br /&gt;
&lt;br /&gt;
Systémová proměnná na indexu [72] umožňuje limitovat počáteční hodnotu TTL, která přijde v odpovědi z DNS serveru. Nastavte si to při startu svého FULLC programu dle své potřeby. Poznámka: v případě, že přijde odpověď s položkou s TTL=0, pak je v SDS zapsána tato položka do interní DNS cache s výchozí dobou platnosti dva týdny (TTL nastaveno na 1209600 sekund).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Váš program tedy vždy, když potřebuje IP adresu pro jakoukoliv doménu, tak vždy musí nejprve zavolat dns_resolv(). Tím se jednak vybere aktuální doména, pro kterou chcete získat platnou aktuální IP adresu (a lze ji tedy přečíst pomocí dns_resolv_status() funkce), a také se zkontroluje platnost položky v interní cache pro danou doménu a eventuálního odeslání nového dotazu (pokud záznam v cache není, nebo už je neplatný).&lt;br /&gt;
&lt;br /&gt;
Nový dotaz není odeslán automaticky (tedy SDS neodešle nový dotazy na server), pokud položka v interní DNS cache je stále platná. Toto máte pod kontrolou vy, a to tak, že voláte funkci dns_resolv(), která se teprve v ten moment (kdy ji ze svého programu zavoláte) rozhodne, jestli tedy bude nový dotaz posílat, nebo ne (čistě dle stavu obsahu interní DNS cache). Pokud v cache není záznam pro danou doménu, nebo je - ale už vypršel (TTL na nule), tak dojde k odeslání dotazu, a váš program pak musí čekat na odpověď (viz příklad výše, periodickým voláním dns_resolv_status(), kdy se průběžně zařídí dle vrácené hodnoty od této funkce).&lt;br /&gt;
&lt;br /&gt;
Hodnota na indexu [71] ukazuje, kdy dorazila platná a očekávaná odpověď (paket) z DNS serveru. Pokud nedorazila, je hodnota na 0. Pokud odpověď dorazila (pro daný dotaz, položený posledním voláním funkce dns_resolv), tak je do indexu [71] zapsána časová známka (UTC čas) momentu, kdy byla odpověď přijata (kdy byl paket ze serveru akceptován). Pomocí sledování indexu [71] můžete nezávisle kontrolovat činnost DNS resolveru v zařízení SDS. Např. při výpadku síťové komunikace (např. odpojení kabelu, porucha sítě atd.), kdy současně časem dojde k vypršení položek v interní cache (to lze sledovat pomocí indexu [70]), pak pokud nový dotaz nebude zodpovězen (protože nebude možná komunikace s DNS serverem), tak se hodnota v [71] ukáže jako nulová. Samozřejmě vždy jsou ve všech zde zmíněných indexech k dispozici hodnoty pouze pro ten doménový název, který jste jako poslední použili při zavolání funkce dns_resolv(), a ostatní jsou uchovány v interní cache (pokud už byly dříve přeloženy).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upozornění ==&lt;br /&gt;
&lt;br /&gt;
Starší FW mělo bug, kdy při vypršení TTL v interní cache nedošlo ke smazání položky v interni cache. Toto je samozřejmě problém, který je vyřešen v novém firmware, všechny verze od 08/2025.&lt;br /&gt;
&lt;br /&gt;
DNS cache je (záměrně) vymazána při:&lt;br /&gt;
* nahrání nového FULLC programu&lt;br /&gt;
* restartu zařízení SDS&lt;br /&gt;
&lt;br /&gt;
DNS cache není vymazána při výpadku Ethernetového připojení.&lt;br /&gt;
&lt;br /&gt;
DNS cache lze ručně vymazat zapsáním hodnoty 0xE4A5ECAC do systémové proměnné na indexu [70]. Zápis této speciální hodnoty kompletně smaže interní DNS cache. Tato specifická funkcionalita vyžaduje aktuální firmware (bylo to přidáno až 08/2025).&lt;br /&gt;
&lt;br /&gt;
To, že je DNS cache vymazána, znamená pouze jedinou záležitost - a to, že při novém dotazu přes dns_resolv() dojde k nové komunikaci s DNS serverem, a SDS (resp. váš FULLC program) bude čekat na jeho novou, čerstvou odpověď. Ta jak přijde (a pokud bude platná), tak se uloží do interní DNS cache, a to po dobu hodnoty TTL (tuto dobu určuje DNS server ! a omezuje ji hodnota v indexu [72]). Další volání dns_resolv(), pak (dokud TTL pro danou doménu v interní cache nevyprší) jsou pak vyřízeny okamžitě, protože SDS nečeká na odpověď ze serveru, a váš FULLC program dostane odpověď ihned z interní cache (dokud té nevyprší TTL).&lt;br /&gt;
&lt;br /&gt;
GOOD PRACTICE: před každým opakovaným použitím IP adresy, která byla získána z DNS resolveru, je vhodné zavolat dns_resolv() pro danou doménu znovu. Pokud je výsledná adresa (výsledek překladu domény na IP adresu) stejná, je to také okamžitě potvrzeno. Pokud však mezitím došlo ke změně (DNS záznamu), tak se jedině takto dokáže tato změna projevit ! Pokud tedy periodicky voláte např. funkci http_get(), tak vždy před každým tímto voláním, musíte provést i celé kolečko s dns_resolv() pro danou doménu, se kterou takto chcete komunikovat. Pokud to neuděláte, časem se dostanete do obtížného problému, kdy daný cílový server už může být dávno na jiné IP adrese, ale váš program bude stále chodit na starou, neplatnou, a přestane fungovat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stavové hodnoty ==&lt;br /&gt;
&lt;br /&gt;
Program musí použít volání funkce '''dns_resolv_status''' pro zjištění okamžitého stavu. Dokud nezískáte finální stavovou hodnotu, musíte tuto funkci volat opakovaně (nezapomeňte na vlastní bezpečnostní timeout).&lt;br /&gt;
&lt;br /&gt;
  dns_resolv_status()       význam&lt;br /&gt;
 -------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
  0                       |  klid, můžete odeslat DNS dotaz, funkce dns_resolv_status() současně nevrací platnou IP adresu (musíte nejprve spustit DNS překlad)&lt;br /&gt;
  512                     |  pracuje, dotaz odeslán (překlad nenalezen v interní cache), čekejte (funkce současně nevrací platnou IP adresu, ta bude až po dokončení překladu)&lt;br /&gt;
  513                     |  hotovo OK, do *resolvedIPaddressOutput byla zapsána IP adresa (4 bajty), a záznam v interní cache je platný a živý (zbývající TTL větší než 0)&lt;br /&gt;
  514                     |  odpověď nebyla získána (chyba) a současně nemáme záznam v interní DNS cache, takže funkce nevrací platnou IP adresu (musíte znovu začít s dotazem)&lt;br /&gt;
  515                     |  funkce byla zavolána s neplatnými parametry - nic nebylo provedeno, funkce nevrací platnou IP adresu&lt;br /&gt;
  516                     |  dotaz selhal, protože došlo k odpojení Ethernetu&lt;br /&gt;
  517                     |  dotaz selhal, protože došlo ke ztrátě vlastní přidělené IP adresy zařízení SDS (typicky když vyprší IP z DHCP a není ještě obnovena)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pokud funkce dns_resolv_status() vrátila hodnotu 513, je možné číst systémovou proměnnou z indexu [70] (uint32_t), která ukáže hodnotu TTL v momentu, kdy tuto hodnotu právě čtete. Lze takto sledovat, jak se postupně TTL snižuje (o 1 každou sekundu). Hodnota TTL odpovídá dané položce v interní cache, která byla určena právě posledním voláním funkce dns_resolv().&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=956</id>
		<title>FULL-C: set and get</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=956"/>
		<updated>2025-08-10T16:22:06Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Jak je FULL-C program připojen k hardware ==&lt;br /&gt;
&lt;br /&gt;
Základním důvodem pro existenci FULL-C programu na zařízení SDS je možnost číst stav hardware (např. opto-vstupy) a také hardware řídit (např. spínat relé).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je k dispozici sada C funkcí, které může program volat a které buď navrátí aktuální stav (&amp;quot;get&amp;quot; funkce), nebo stav změní (&amp;quot;set&amp;quot; funkce).&lt;br /&gt;
&lt;br /&gt;
Zde je seznam těchto funkcí:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i32(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_i64(unsigned int index, int64_t value);&lt;br /&gt;
   signed int SDS_get_i64(unsigned int index);&lt;br /&gt;
  &lt;br /&gt;
         void SDS_set_u32(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u64(unsigned int index, uint64_t value);&lt;br /&gt;
 unsigned int SDS_get_u64(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_f32(unsigned int index, float value);&lt;br /&gt;
        float SDS_get_f32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_a(unsigned int index, void *ptr, unsigned int len);&lt;br /&gt;
         void SDS_get_a(unsigned int index, void *ptr, unsigned int maxlen);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Historicky zde původně byly i tyto funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u(unsigned int index);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ty &amp;quot;nezmizely&amp;quot; jen byly '''přejmenovány''' (i na i32, u na u32). &lt;br /&gt;
Pokud je váš program používá, vše vám bude fungovat i nadále, ale co nejdříve jejich název ve svém programu přepište na nový.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detailní Příklady ===&lt;br /&gt;
&lt;br /&gt;
Přečtěte si nejprve celou tuto stránku, ať pochopíte princip. Následně se podívejte na [[FULL-C:_set_and_get:_detailed|jednotlivé příklady zde]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
Základem je použití přístupu k informacím prostřednictvím tzv. '''index'''u.&lt;br /&gt;
&lt;br /&gt;
Pod každou položkou (číselným '''index'''em) je schována odpovídající činnost nebo hodnota (např. '''index = 3''' vrátí přes &amp;quot;get&amp;quot; funkci aktuální hodnotu &amp;quot;UpTime&amp;quot;, viz tabulka).&lt;br /&gt;
&lt;br /&gt;
Každá položka však může mít jiný obsah (číslo nebo text): podle toho je potřeba zvolit správný přístup (správnou set\get funkci):&lt;br /&gt;
&lt;br /&gt;
  typ položky              | rozsah         | typ proměnné    | postfix set\get funkce&lt;br /&gt;
 --------------------------+----------------+-----------------+-------------------------&lt;br /&gt;
   signed 32-bit integer   |  -2^31..+2^31  |  int            |  _i32&lt;br /&gt;
   signed 64-bit integer   |  -2^63..+2^63  |  int64_t        |  _i32&lt;br /&gt;
   unsigned 32-bit integer |      0..+2^32  |  unsigned int   |  _u64&lt;br /&gt;
   unsigned 64-bit integer |      0..+2^64  |  uint64_t       |  _u64&lt;br /&gt;
   IP address              |  uchar[4]      |  unsigned int   |  _u32&lt;br /&gt;
   float                   |  IEEE-754      |  float          |  _f32&lt;br /&gt;
   string (text)           |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
   binary array            |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, bude při psaní programu potřeba správně vybrat postfix u dané funkce.&lt;br /&gt;
&lt;br /&gt;
Příklad: chceme zapsat desetinné číslo &amp;quot;numf&amp;quot;, v tom případě se jedná o typ &amp;quot;float numf;&amp;quot; a musíme použít ''SDS_set_f(index, numf);''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Varování: ačkoliv je většina indexů podobných jako u SDS (pro pole ''sys[]''), nemají všechny indexy stejný význam mezi SDS-C a FULL-C. Vždy používejte tu správnou tabulku pro každý programovací jazyk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u32 \ _i32 \ _f32 ==&lt;br /&gt;
&lt;br /&gt;
Základní funkce určené pro získání číselné hodnoty &amp;quot;z&amp;quot; SDS, popř. zápisu číselné hodnoty &amp;quot;do&amp;quot; SDS. Vždy se jedná o kombinaci ''index''u (který určuje o co máme zájem) a hodnoty (která je vždy 32 bitová, tj. 4 bajty, ale obsah těchto 4 bajtů už je různý - buď celočíselná hodnota bez nebo se znaménkem (nejvyšší bit), nebo desetinné číslo - floating point).&lt;br /&gt;
&lt;br /&gt;
Čtení hodnoty je potřeba pro zjištění aktuálního stavu (např. stav optického vstupu, nebo poslední známá teplota z čidla). Zápis se pak používá pro ovládání (např. sepnutí relé).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: ''čtení'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
unsigned int NTPtime;&lt;br /&gt;
NTPtime = SDS_get_u32(4);&lt;br /&gt;
printf(&amp;quot;Aktuální Epoch Time je %u (secs).\n&amp;quot;, NTPtime);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: ''čtení'' 32bitové hodnoty se znaménkem&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int NTPoffset;&lt;br /&gt;
NTPoffset = SDS_get_i32(26);&lt;br /&gt;
printf(&amp;quot;Offset pro NTP čas je: %d hod.\n&amp;quot;, NTPoffset);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Třetí příklad: ''čtení'' float hodnoty&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float AD_Rinput__in_user_units;&lt;br /&gt;
AD_Rinput__in_user_units = SDS_get_f32(311);&lt;br /&gt;
printf(&amp;quot;Resistance Measure Input value is: %0.3f \n&amp;quot;, AD_Rinput__in_user_units);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čtvrtý příklad: ''zápis'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// zapni RELE 1 (zápisem nenulové hodnoty na index [231], viz tabulka)&lt;br /&gt;
SDS_set_u32(231, 0xFF); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samozřejmě musíte pro každý index použít správný typ hodnoty (tzn.: ''unsigned int'' \ ''int'' \ ''float''). Přesné přiřazení naleznete v tabulce na konci této stránky.&lt;br /&gt;
&lt;br /&gt;
Pozn.: i když například víte, že hodnota může být například jenom 0 nebo 1 (příklad), tak vždy se zapisuje nebo čte všech 32bitů (unsigned int \ int \ float). Nepoužité bity jsou vždy nastaveny na nulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u64 \ _i64 ==&lt;br /&gt;
&lt;br /&gt;
Princip je identický jako pro _u32 a _i32 funkce. &lt;br /&gt;
&lt;br /&gt;
Vždy se podívejte do tabulky, jaké informace můžete v 64bitové formě dostat; většina jich je pouze ve 32bit formě.&lt;br /&gt;
To ale nevadí, protože přeci například není problém do proměnné typu uint64_t zapsat 32bitové číslo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _a ==&lt;br /&gt;
&lt;br /&gt;
Funkce pracující s polem dat (''SDS_get_a'', ''SDS_set_a'') vyžadují oproti ostatním set+get funkcím specifické parametry. Vždy se jedná o ukazatel na pole dat, a o informaci o velikosti tohoto pole.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: čtení textového parametru&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o velikosti 32 bajtů; tzn. sem se vleze až 31 znaků plus jeden ukončovací 0x00&lt;br /&gt;
char sysLoc[32];&lt;br /&gt;
&lt;br /&gt;
// SDS uloží text z indexu [2] do pole &amp;quot;sysLoc&amp;quot;, o maximální velikosti 32 bajtů&lt;br /&gt;
SDS_get_a(2, (void *)sysLoc, 32);&lt;br /&gt;
&lt;br /&gt;
// a můžeme se podívat na výsledek (výpis do konzole)&lt;br /&gt;
printf(&amp;quot;Nastavená system location: %s \n&amp;quot;, sysLoc);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: čtení pole údajů - '''pouze''' položky z indexu označeného (a) v tabulce indexů&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o 8 položkách, které obsahuje prvky typu &amp;quot;unsigned int&amp;quot; (každý tento prvek má velikost: 4 bajty)&lt;br /&gt;
unsigned int OPTOvalues[8];&lt;br /&gt;
 &lt;br /&gt;
// SDS zapíše 8 pozic od indexu [151] do pole OPTOvalues&lt;br /&gt;
// maximální velikost zápisu = 8*4 , tzn. 8 položek v poli OPTOvalues, každá o 4 bajtech&lt;br /&gt;
SDS_get_a(151, (void *)OPTOvalues, 8 * 4);&lt;br /&gt;
&lt;br /&gt;
// a muzeme pristupovat na jednotlive polozky (jejich obsah je platny vuci okamziku zavolani GET funkce)&lt;br /&gt;
if (0 == OPTOvalues[0]) ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pro tyto přístupy je potřeba uvést, že blokové čtení funguje jen vždy od prvního indexu pro daný blok indexů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na zcela stejném přístupu funguje '''SDS_set_a()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Úplné detaily a všechny příklady ==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Detailní přehled, doplněný o příklady ve FULL-C, naleznete zde: [[FULL-C: set and get: detailed]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tabulka ==&lt;br /&gt;
&lt;br /&gt;
Podle typu každé položky lze použít jen právě tu danou specifickou funkci (_i32\_u32\_f32\_a\_i64\_u64), viz následující tabulka. &lt;br /&gt;
&lt;br /&gt;
Je li také uveden klíč &amp;quot;(a)&amp;quot;, lze mimo přístup k jedinému indexu využít blokový přístup pomocí funkce SDS_get_a(), která přečte určený počet indexů za sebou a uloží je do připraveného pole (toho se využívá při blokovém čtení většího počtu za-sebou ležících položek, např. blokové čtení stavu všech optovstupů atd.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   index    | i\u\f\a |  dir |  comment&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   0        | u32     |  GET |  firmware PAIRCODE (SDS device master-type identification)&lt;br /&gt;
   0        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   1        | u32     |  GET |  count of actually logged-in users (logged-in to SDS web admin)&lt;br /&gt;
   1        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   2        | u32     |  GET |  unique ID for SDS (serial number assigned during manufacturing)&lt;br /&gt;
   2        | a       |  GET |  sysLocation (user configured text)&lt;br /&gt;
   2        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   3        | u32     |  GET |  uptime (increased by 1 each every 10msec) (example: 100 = 1 sec)&lt;br /&gt;
   3        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   4        | u32     |  GET |  LOCAL time (NTP UTC Epoch, with GMT-offset and DST-offset applied), value in seconds&lt;br /&gt;
   4        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   5        | u32     |  GET |  LOCAL time decomposition = value of DAY (1 through 31)&lt;br /&gt;
   5        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   6        | u32     |  GET |  LOCAL time decomposition = value of MONTH (1 through 12)&lt;br /&gt;
   6        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   7        | u32     |  GET |  LOCAL time decomposition = value of YEAR (full value)&lt;br /&gt;
   7        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   8        | u32     |  GET |  LOCAL time decomposition = value of HOUR (0 through 23)&lt;br /&gt;
   8        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   9        | u32     |  GET |  LOCAL time decomposition = value of MINUTE (0 through 59)&lt;br /&gt;
   9        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   10       | u32     |  GET |  LOCAL time decomposition = value of SECOND (0 through 59)&lt;br /&gt;
   10       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   11       | u32     |  GET |  LOCAL time decomposition = day-of-week number = number of days since Sunday (0 to 6)&lt;br /&gt;
   11       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   12       | u32     |  GET |  SDS device IP address (web admin IP)&lt;br /&gt;
   12       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   13..15   |         |  GET |  n/a (reserved)&lt;br /&gt;
   13..15   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   16       | u32     |  GET |  network gateway IP address&lt;br /&gt;
   16       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   17..19   |         |  GET |  n/a (reserved)&lt;br /&gt;
   17..19   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   20       | u32     |  GET |  network IP MASK&lt;br /&gt;
   20       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   21       | a       |  GET |  SNMPv3 - EngineID (FC: prepare buffer for 32 chars + trailing zero)&lt;br /&gt;
   21       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   22       | u32     |  GET |  SNMPv3 - Engine Boots &lt;br /&gt;
   22       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   23       | u32     |  GET |  SNMPv3 - Engine Time &lt;br /&gt;
   23       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   24       | u32     |  GET |  Ethernet Link Status&lt;br /&gt;
   24       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   25       | u32     |  GET |  Ethernet Link Speed (0, 10 or 100)&lt;br /&gt;
   25       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   26       | i32     |  GET |  read NTP GMT offset (-11 .. 11) = offset, in hour(s), between UTC and LOCAL time&lt;br /&gt;
   26       | i32     |  SET |  set NTP GMT offset (warning: this is not stored to permanent memory - use web admin to store it permanently)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   27       | u32     |  GET |  validity of the assigned IP address (0 = SDS does not have any IP address assigned, at the moment)&lt;br /&gt;
   27       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   28       | u32     |  GET |  timestamp of last change (assignment) of IP address &lt;br /&gt;
   28       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   29       | u32     |  GET |  state of DHCP client (0 = disabled, OR: enabled = status value of 1 .. 11)&lt;br /&gt;
   29       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   30       | u32     |  GET |  DHCP lease time (secs) value&lt;br /&gt;
   30       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   31       | u32     |  GET |  MAC[0] (always use only the lowest 8 bits, for each item)&lt;br /&gt;
   31       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   32       | u32     |  GET |  MAC[1]&lt;br /&gt;
   32       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   33       | u32     |  GET |  MAC[2]&lt;br /&gt;
   33       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   34       | u32     |  GET |  MAC[3]&lt;br /&gt;
   34       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   35       | u32     |  GET |  MAC[4]&lt;br /&gt;
   35       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   36       | u32     |  GET |  MAC[5]&lt;br /&gt;
   36       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   37..39   |         |  GET |  n/a (reserved)&lt;br /&gt;
   37..39   |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   40       | u32     |  GET |  SoC power-up or reset reason (64/128 = read only LSB: 8 bits) (512 = read all 32 bits)&lt;br /&gt;
   40       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   41       | a       |  GET |  OEM branding (login web page) [32 chars]&lt;br /&gt;
   41       | a       |  SET |  set custom OEM branding (login web page) [32 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   42       | a       |  GET |  OEM branding (welcome web page) [128 chars]&lt;br /&gt;
   42       | a       |  SET |  set custom OEM branding (welcome web page) [128 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   43       | u32     |  GET |  NTP-server IP address&lt;br /&gt;
   43       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   44       | u32     |  GET |  NTP-client status (0 = NOT synchronized)&lt;br /&gt;
   44       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   45       | u32     |  GET |  UpTime value - units: msec (uptime is constantly counted since then latest SDS FW boot)&lt;br /&gt;
   45       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   46       | u32     |  GET |  temperature of SoC - the RAW value (you have to manually recalculate this raw value to get degC)&lt;br /&gt;
   46       | i32     |  GET |  temperature of SoC - already recalculated to degC (SDS does have, and uses, all the required calibration info)&lt;br /&gt;
   46       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   48..60   |         |  GET |  n/a (reserved)&lt;br /&gt;
   48..60   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   61       | u32     |  GET |  read this to get a 32-bit Random Number (HW RNG)&lt;br /&gt;
   61       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   62..63   |         |  GET |  n/a (reserved)&lt;br /&gt;
   62..63   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   64       | u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #0 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
   64       | u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #0&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   65       | u32     |  GET |  get state of the DST automatic (0 = not used) (1 = DST used and DST shift is applied) (2 = DST used but NO shift applied)&lt;br /&gt;
   65       | u32     |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   66       | u32     |  GET |  DNS-server IP address&lt;br /&gt;
   66       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   67       | u32     |  GET |  info about SDS device IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   67       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   68       | u32     |  GET |  info about DNS server IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   68       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   69       |         |  GET |  n/a (reserved) &lt;br /&gt;
   69       |         |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   70       | u32     |  GET |  DNS RESOLV - actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done or finished yet)&lt;br /&gt;
   70       | u32     |  SET |  write 0xE4A5ECAC to manually clear the WHOLE internal DNS cache (will force fresh DNS requests once dns_resolv() is again called by your program)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   71       | u32     |  GET |  DNS RESOLV - timestamp (UTC) of the latest DNS server response (packet) as requested by dns_resolv() function (if 0 then no response received, or cache has expired)&lt;br /&gt;
   71       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   72       | u32     |  GET |  DNS RESOLV - get the last set hard TTL limit (0 = invalid (will use 1209600 as default), otherwise 1..MAX = time in seconds)&lt;br /&gt;
   72       | u32     |  SET |  DNS RESOLV - set the hard TTL value limit (in seconds)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   73..77   |         |  GET |  n/a (reserved) &lt;br /&gt;
   73..77   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   78       | u32     |  GET |  SDS HW availability detail (information): 0 = single PWM output / 4 = four PWM outputs&lt;br /&gt;
   78       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   79       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DP&amp;quot; (newer HW version) / 0 = basic BIG (no DP)&lt;br /&gt;
   79       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   80       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DS84&amp;quot; / 0 = no DS84&lt;br /&gt;
   80       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   81..84   |         |  GET |  n/a (reserved) &lt;br /&gt;
   81..84   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   85       | u32     |  GET |  SDS module type (BIG, BIG2 or STSW) discrimination:  0 = STSW or SMALL / 1 = BIG / 2 = BIG2&lt;br /&gt;
   85       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   86       | u32     |  GET |  FC: actual state (running, uploading, failed etc.) of the FULL-C program (0, 1, 2, 4, 8, 16, 32, 64)&lt;br /&gt;
   86       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   87       | u32     |  GET |  FC: unique identifier of the actually uploaded FULL-C program&lt;br /&gt;
   87       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   88       |         |  GET |  n/a (reserved) &lt;br /&gt;
   88       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   89       | u32     |  GET |  SDS IP-WatchDog: state (0 = OFF)&lt;br /&gt;
   89       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   90       | u32     |  GET |  SDS IP-WatchDog: last known RTT (msecs)&lt;br /&gt;
   90       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   91       | u32     |  GET |  SDS IP-WatchDog: logical output status&lt;br /&gt;
   91       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   92..131  |         |  GET |  n/a (reserved)&lt;br /&gt;
   92..131  |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   132      | u32     |  GET |  FC: UTC time value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   132      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   133      | u32     |  GET |  FC: UpTime value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   133      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   134      | a       |  GET |  FC: archived text of the last FC error&lt;br /&gt;
   134      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   135      | u32     |  GET |  FC: number of FC-WDF restarts of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   135      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   136      | u32     |  GET |  FC: total count of all FC program starts, since the SDS boot&lt;br /&gt;
   136      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   137      | u32     |  GET |  read an actual SDS CPU cycle counter (number of executed instructions since power-up/reboot), continuously wraps around, (1 step = approx. 2 nsec)&lt;br /&gt;
   137      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   138      | u32     |  GET |  get SDS internal RTC power-on status (0 = invalid data after powerup in RTC) (1 = RTC data OK and were used on powerup) &lt;br /&gt;
   138      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   139      | u32     |  GET |  NTP true actual raw epoch-time (secs since Linux Epoch) = clean UTC with *no* GMT nor DST offset applied&lt;br /&gt;
   139      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   140      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:401)&lt;br /&gt;
   140      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:401)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   141      | a       |  GET |  FC: custom TRAP variable - read (TRAP:402)&lt;br /&gt;
   141      | a       |  SET |  FC: custom TRAP variable - write to change (TRAP:402) (note. max 32 characters)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   142      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:403)&lt;br /&gt;
   142      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:403)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   143      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:404)&lt;br /&gt;
   143      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:404)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   144      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:405)&lt;br /&gt;
   144      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:405)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   145      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:406)&lt;br /&gt;
   145      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:406)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   146      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:407)&lt;br /&gt;
   146      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:407)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   147      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:408)&lt;br /&gt;
   147      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:408)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   148      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:409)&lt;br /&gt;
   148      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:409)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   149      |         |  GET |  n/a (reserved)&lt;br /&gt;
   149      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   150      |         |  GET |  FC: shared-variables access control - read state of the access control&lt;br /&gt;
   150      |         |  SET |  FC: shared-variables access control - use this to force a user-login in order to access the shared variables (0 = access without login is enabled)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   151..182 | u32 (a) |  GET |  OPTO1..OPTO32 status (warning: 0 = input ACTIVE = with signal) (non-zero = input not active = no signal)&lt;br /&gt;
   151..182 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   183      | u32     |  GET |  SDS FW date stamp (or just 0x00000000 for a very old firmware) - use this to verify the features or to ask user to update the firmware to a required newer version&lt;br /&gt;
   183      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   184      | u32     |  GET |  FC: information about how this actual running program was started (0 = none) (1 = normal) (2 = fc-wdg or manual restart) (4 = freshly loaded)&lt;br /&gt;
   184      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   185      | u32     |  GET |  FC: actual FULL-C WatchDog (decreasing) timeout counter value, v msec&lt;br /&gt;
   185      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   186      | u32     |  GET |  (common) frequency for PWM3 and PWM4 generator (1Hz .. 5MHz)&lt;br /&gt;
   186      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   187      | u32     |  GET |  PWM3 duty-cycle percent (0..100 [%])&lt;br /&gt;
   187      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   188      | u32     |  GET |  PWM3 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   188      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   189      | u32     |  GET |  PWM4 duty-cycle percent (0..100 [%])&lt;br /&gt;
   189      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   190      | u32     |  GET |  PWM4 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   190      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   191      | u32     |  GET |  (common) frequency for PWM1 and PWM2 generator (1Hz .. 5MHz)&lt;br /&gt;
   191      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   192      | u32     |  GET |  PWM1 duty-cycle percent (0..100 [%])&lt;br /&gt;
   192      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   193      | u32     |  GET |  PWM1 HW: read direct &amp;quot;pulse&amp;quot; (compare) register value&lt;br /&gt;
   193      | u32     |  SET |  PWM1 HW: write to direct &amp;quot;pulse&amp;quot; (compare) register value &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   194      | u32     |  GET |  reserved&lt;br /&gt;
   194      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   195      | u32     |  GET |  reserved&lt;br /&gt;
   195      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   196..228 | u32 (a) |  GET |  RELAY1..RELAY32 - &amp;quot;who&amp;quot; controls this output&lt;br /&gt;
   196..228 | u32     |  SET |  RELAY1..RELAY32 - (0 = manual = user via web) (2 = FULL-C) (4 = SDS IPwdg)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   229..230 |         |  GET |  n/a (reserved)&lt;br /&gt;
   229..230 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   231..262 | u32 (a) |  GET |  RELAY1..RELAY32 - output status (0 = off)&lt;br /&gt;
   231..262 | u32     |  SET |  RELAY1..RELAY32 - output status control (0 = off) (!0 = coil activated)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   263..265 |         |  GET |  n/a (reserved)&lt;br /&gt;
   263..265 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   266..297 | a       |  GET |  RELAY1..RELAY32 - identification/name (text, see webadmin)&lt;br /&gt;
   266..297 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   298..300 |         |  GET |  n/a (reserved)&lt;br /&gt;
   298..300 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   301      | u32     |  GET |  status (log0/log1) of GPIO-TOPBOARD pin&lt;br /&gt;
   301      | u32     |  SET |  control the GPIO-TOPBOARD pin value (if direction is set to output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   302      | u32     |  GET |  direction (in/out) of GPIO-TOPBOARD pin&lt;br /&gt;
   302      | u32     |  SET |  control the GPIO-TOPBOARD pin direction (input or output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   303..310 |         |  GET |  n/a (reserved)&lt;br /&gt;
   303..310 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   311..342 | f32 (a) |  GET |  AD: recalculated value (float) of A/D input&lt;br /&gt;
   311..342 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   343..374 | a       |  GET |  AD: input identification / name (text)&lt;br /&gt;
   343..374 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   375..406 | a       |  GET |  AD: input unit name (text)&lt;br /&gt;
   375..406 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   407..427 |         |  GET |  n/a (reserved)&lt;br /&gt;
   407..427 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   428      | u32     |  GET |  AD: user-selected type of the OpAmp chip (HW SDS) (0 = AD) (9 = LMV) &lt;br /&gt;
   428      |         |  SET |  n/a (read-only) (configuration to be done via web admin) - note. this must match the HW&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   429      | u32     |  GET |  AD: raw value of Vbatt (raw ADC value). To convert use: Vbatt = (raw * 3.3)/2048 (result in Volts)&lt;br /&gt;
   429      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   430      | u32     |  GET |  AD: value of VrefInt in miliVolts (typical value: 3300)&lt;br /&gt;
   430      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   431..438 | u32 (a) |  GET |  AD: raw value of A/D input in 12bits (0..4095) - for all SDS variants (64, 128 and 512)&lt;br /&gt;
   431..438 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   439..446 | u32 (a) |  GET |  AD: raw value of A/D input in 16bits (0..65535) - available only for the 512 SDS variant&lt;br /&gt;
   439..446 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   447..462 |         |  GET |  n/a (reserved)&lt;br /&gt;
   447..462 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   463..469 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [0]&lt;br /&gt;
   463..469 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   470..476 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [1]&lt;br /&gt;
   470..476 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   477..483 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [2]&lt;br /&gt;
   477..483 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   484..490 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [3]&lt;br /&gt;
   484..490 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   491..497 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [4]&lt;br /&gt;
   491..497 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   498..504 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [5]&lt;br /&gt;
   498..504 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   505..511 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [6]&lt;br /&gt;
   505..511 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   512..518 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [7]&lt;br /&gt;
   512..518 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   519..991 |         |  GET |  n/a (reserved)&lt;br /&gt;
   519..991 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   992      | u32     |  GET |  UTC timestamp (localtime) of the moment, when local clock gets to 23:59:59 (= last second of this day)&lt;br /&gt;
   992      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   993      | u32     |  GET |  UTC timestamp (localtime) marking a start of yesterday (as a moment since when we capture a new record) (or 0 = if there is no record for yesterday)&lt;br /&gt;
   993      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   994      | u32     |  GET |  UTC timestamp (localtime) marking a start of today (or a moment of SDS power on), since when a today's record is captured&lt;br /&gt;
   994      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   995      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T0 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   995      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   996      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T1 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   996      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   997      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T0 tariff being active&lt;br /&gt;
   997      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   998      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T1 tariff being active&lt;br /&gt;
   998      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   999      | u32     |  GET |  immediate state of the global Tariff Input (0 = T0 is active right now) (!0 = T1 is active right now)&lt;br /&gt;
   999      | u32     |  SET |  &amp;quot;manual&amp;quot; control of the global Tariff Input (write/control enabled only if the feature is set in web admin - control set to FULL-C)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1000..1031| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T0 tariff&lt;br /&gt;
  1000..1031| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1032..1063| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T1 tariff&lt;br /&gt;
  1032..1063| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1064..1095| u32 (a) |  GET |  [S0-input] time distance (in msec) between impulses&lt;br /&gt;
  1064..1095|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1096..1127| u32 (a) |  GET |  [S0-input] time (in msec) since the last captured impulse&lt;br /&gt;
  1096..1127|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1128..1159| u32     |  GET |  [S0-input] T0 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1128..1159|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1160..1191| u32     |  GET |  [S0-input] T1 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1160..1191|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1192..1223| u32     |  GET |  [S0-input] T0 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1192..1223|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1224..1255| u32     |  GET |  [S0-input] T1 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1224..1255|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1256..1499|         |  GET |  n/a (reserved)&lt;br /&gt;
  1256..1499|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1500..1531| a       |  GET |  [S0-input] master configuration struct for this input&lt;br /&gt;
  1500..1531| a       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1532..1999|         |  GET |  n/a (reserved)&lt;br /&gt;
  1532..1999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2000..2063| u32 (a) |  GET |  [1-W BUS (A)] device status&lt;br /&gt;
  2000..2063|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2100..2163| a       |  GET |  [1-W BUS (A)] master configuration struct for this OneWire device&lt;br /&gt;
  2100..2163|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2200..2263| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (basic value)&lt;br /&gt;
  2200..2263|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2300..2363| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (additional value)&lt;br /&gt;
  2300..2363|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2364..2487|         |  GET |  n/a (reserved)&lt;br /&gt;
  2364..2487|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2488..2495| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (A)&lt;br /&gt;
  2488..2495|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2496      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (A)&lt;br /&gt;
  2496      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2497      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (A)&lt;br /&gt;
  2497      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2498      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (A)&lt;br /&gt;
  2498      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2499      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (A)&lt;br /&gt;
  2499      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2500..2563| u32 (a) |  GET |  [1-W BUS (B)] device status&lt;br /&gt;
  2500..2563|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2600..2663| a       |  GET |  [1-W BUS (B)] master configuration struct for this OneWire device&lt;br /&gt;
  2600..2663|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2700..2763| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (basic value)&lt;br /&gt;
  2700..2763|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2800..2863| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (additional value)&lt;br /&gt;
  2800..2863|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2864..2986|         |  GET |  n/a (reserved)&lt;br /&gt;
  2864..2986|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2986..2993| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (B)&lt;br /&gt;
  2986..2993|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2994      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (B)&lt;br /&gt;
  2994      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2995      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (B)&lt;br /&gt;
  2995      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2996      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (B)&lt;br /&gt;
  2996      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2997      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (B)&lt;br /&gt;
  2997      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2998      | u32     |  GET |  general 1-W Master Chip status: 1 = detecting; 2 or 4 = failure; 8 = working; 16 = disabled by user&lt;br /&gt;
  2998      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2999      | u32     |  GET |  general 1-W Master Chip status: detection-retry countdown (*10msec)&lt;br /&gt;
  2999      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3000      |         |  GET |  n/a (reserved)&lt;br /&gt;
  3000      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3001      | a       |  GET |  custom 24-byte string (readable via SNMP .8.80)&lt;br /&gt;
  3001      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3002      | a       |  GET |  custom 24-byte string (readable via SNMP .8.81)&lt;br /&gt;
  3002      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3003      | a       |  GET |  custom 16-byte string (readable via SNMP .8.82)&lt;br /&gt;
  3003      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3004      | a       |  GET |  custom 16-byte string (readable via SNMP .8.83)&lt;br /&gt;
  3004      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3005      | a       |  GET |  custom 16-byte string (readable via SNMP .8.84)&lt;br /&gt;
  3005      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3006..3799|         |  GET |  n/a (reserved)&lt;br /&gt;
  3006..3799|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3800      | u32     |  GET |  PVD Active - (nonzero:) main power failure detected&lt;br /&gt;
  3800      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3801      | u32     |  GET |  PVD Was Active - this flag is only cleared by reading this index 3801&lt;br /&gt;
  3801      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3802..3849|         |  GET |  n/a (reserved)&lt;br /&gt;
  3802..3849|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3850      | u32     |  GET |  SD Card - fully mounted and useable&lt;br /&gt;
  3850      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3851      | i32     |  GET |  latest file i/o error code&lt;br /&gt;
  3851      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3852      | u32     |  GET |  SD Card - Block Size in bytes (typically 512)&lt;br /&gt;
  3852      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3853      | u32     |  GET |  SD Card - CardType&lt;br /&gt;
  3853      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3854      | u32     |  GET |  SD Card - CID - ProductSN&lt;br /&gt;
  3854      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3855      | u32     |  GET |  statistic counter: SDcard: all init attempts (= successful + failed)&lt;br /&gt;
  3855      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3856      | u32     |  GET |  statistic counter: SDcard: failed init attempts&lt;br /&gt;
  3856      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3857      | u32     |  GET |  SD Card - Total Sector Count in KiB (size of the card)&lt;br /&gt;
  3857      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3858      | u32     |  GET |  statistic counter: SDcard: sector reads&lt;br /&gt;
  3858      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3859      | u32     |  GET |  statistic counter: SDcard: sector writes&lt;br /&gt;
  3859      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3860      | u32     |  GET |  statistic counter: SDcard: sector r/w failures&lt;br /&gt;
  3860      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3861      | u32     |  GET |  statistic counter: number of opened files&lt;br /&gt;
  3861      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3862..3999|         |  GET |  n/a (reserved)&lt;br /&gt;
  3862..3999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4000..4099| i32     |  GET |  Shared Variables: S00 through S99 - read&lt;br /&gt;
  4000..4099| i32     |  SET |  Shared Variables: S00 through S99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4100..4199| u32     |  GET |  Shared Variables: U00 through U99 - read&lt;br /&gt;
  4100..4199| u32     |  SET |  Shared Variables: U00 through U99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4200..4299| f32     |  GET |  Shared Variables: F00 through F99 - read&lt;br /&gt;
  4200..4299| f32     |  SET |  Shared Variables: F00 through F99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4300..4399| a       |  GET |  Shared Variables: T00 through T99 - read&lt;br /&gt;
  4300..4399| a       |  SET |  Shared Variables: T00 through T99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4400..4989|         |  GET |  n/a (reserved)&lt;br /&gt;
  4400..4989|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4990..4999| u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #1..#10 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
  4990..4999| u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #1..#10&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  5000..5127| u/i/f 32|  GET |  BackUp-RAM (FC version 0x08+) - write&lt;br /&gt;
  5000..5127| u/i/f 32|  SET |  BackUp-RAM (FC version 0x08+) - read&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  5128..11197 |       |  GET |  n/a (reserved)&lt;br /&gt;
  5128..11197 |       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  11198     | u32     |  GET |  mqtt_publish PUBLISH Fixed Header value ( 0b0011dqqr : d=DUP, qq=QOS, r=RETAIN ) &lt;br /&gt;
  11198     | u32     |  SET |  write ( default: 0b00110001 )&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  11199     | u/i 32  |  GET |  FW support for MQTT-c (0 == NOT present)&lt;br /&gt;
  11199     |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12200     | i32     |  GET |  work progress (and result) of mqtt_connect()&lt;br /&gt;
  12200     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12201     | i32     |  GET |  &amp;quot;CONNACK Connect Return&amp;quot; - result of mqtt_connect()&lt;br /&gt;
  12201     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12202     | i32     |  GET |  result of: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
  12202     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12203     | i32     |  GET |  MQTT protocol error counter (informative)&lt;br /&gt;
  12203     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12204..12208 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12204..12208 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12209     | i32     |  GET |  Subscribe Table - total number of available rows&lt;br /&gt;
  12209     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12210     | a       |  GET |  latest received Topic Name (sent from broker)&lt;br /&gt;
  12210     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12211..12241 | a    |  GET |  Subscribe Table: Topic Name for each table row&lt;br /&gt;
  12211..12241 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12242..12249 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12242..12249 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12250     | a       |  GET |  latest received Value (sent from broker)&lt;br /&gt;
  12250     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12251..12281 | a    |  GET |  Subscribe Table: actual Value for each table row&lt;br /&gt;
  12251..12281 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12282..12289 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12282..12289 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12290     | u32     |  GET |  timestamp for the latest received data (Topic) from broker&lt;br /&gt;
  12290     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12291..12321 | u32 (a) |  GET |  Subscribe Table: timestamp for the last Value update, for each table row&lt;br /&gt;
  12291..12321 |         |  SET |  n/a&lt;br /&gt;
 --------------+------+--+---+--+--&lt;br /&gt;
  12322..12398 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12322..12398 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12399     | u/i 32  |  GET |  FW support for MODBUS-TCP-c (0 == NOT present)&lt;br /&gt;
  12399     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12400     | i32     |  GET |  work progress (and result) of modbus_tcp_connect()&lt;br /&gt;
  12400     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12401     | i32     |  GET |  progress/result for function 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
  12401     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12402     | i32     |  GET |  progress/result for function 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
  12402     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12403     | i32     |  GET |  progress/result for function 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
  12403     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12404     | i32     |  GET |  progress/result for function 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
  12404     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12405     | i32     |  GET |  progress/result for function 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
  12405     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12406     | i32     |  GET |  progress/result for function 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
  12406     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12407..12414 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12407..12414 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12415     | i32     |  GET |  progress/result for function 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
  12415     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12416     | i32     |  GET |  progress/result for function 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
  12416     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12417..12462 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12417..12462 |      |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12463     | u/i 32  |  GET |  latest Unit Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12463     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12464     | u/i 32  |  GET |  latest Transaction Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12464     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12465     | u/i 32  |  GET |  timestamp of the latest received message&lt;br /&gt;
  12465     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12466     | u/i 32  |  GET |  a count of received items inside the latest received message&lt;br /&gt;
  12466     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12467     | u/i 32  |  GET |  latest received Unit Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12467     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12468     | u/i 32  |  GET |  latest received Transaction Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12468     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12469     | u/i 32  |  GET |  an address of the first coil/input/register item (maps to a value in 12470)&lt;br /&gt;
  12469     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12470..12719 | i32 (a) |  GET |  received values (latest received message contents)&lt;br /&gt;
  12470..12719 |         |  SET |  n/a &lt;br /&gt;
 --------------+---------+------+--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Poznámky''' &lt;br /&gt;
&lt;br /&gt;
Položky obsahující: &amp;quot;konfigurační struktura&amp;quot; vyžadují dostatečně velký prostor pro uložení výsledku (při zavolání SDS_get_a() funkce). V takovém případě se do vámi určené cílové oblasti ukládá celý &amp;quot;struct&amp;quot; který obsahuje všechny potřebné údaje patřící pod danou položku (názvy, hodnoty, atd.). Pro detaily je nejlépe podívat se přímo na aktuální [[FULL-C:_set_and_get:_detailed|příklady]], které přesně popisují postup pro každý typ takové struktury - a vysvětlují tuto poznámku svým kódem.&lt;br /&gt;
&lt;br /&gt;
Indexy označené jako '''(a)''' lze ''blokově číst'' (pozor, označené specificky jako &amp;quot;a v závorce&amp;quot;). Vždy ale lze ''blokové čtení'' (tj. čtení více indexů najednou, za sebou, v rámci povoleného rozsahu) provést pouze od prvního indexu v bloku (ne od dalších v bloku).&lt;br /&gt;
Příklad: indexy 1000 až 1031 lze přečíst jako jeden souvislý blok, když se začne číst od prvního indexu v bloku (tj. 1000). Počet následně čtených indexů se udává dalším parametrem při volání SDS_get_a() funkce.&lt;br /&gt;
Pokud se pokusíte číst blok indexů ne od začátku bloku, čtení selže - pokud blok indexů začíná na 1000 tak musíte požádat o čtení od indexu 1000, přičemž začátek od 1001 a výše selže.&lt;br /&gt;
&lt;br /&gt;
BackUp-RAM funkce je dostupná je pro firmware který poskytuje verzi FULL-C o hodnotě 0x08 nebo novější. BackUp-RAM je sada 32-bit hodnot, které lze zapisovat a číst, a které jsou (především) uchovány v paměti, která je zálohovaná baterií (tzn. drží hodnotu i po výpadku napájení, tak dlouho než se baterie vybije). Výhodou BackUp-RAM oproti DF je možnost přímého přístupu a rychlosti (naopak DF vyžaduje čtení a zápis celých stránek).&lt;br /&gt;
&lt;br /&gt;
Sdílené proměnné je potřeba nejprve definovat, aby je šlo použít, a aby k nim šlo přistupovat přes set/get funkce - viz specifická stránka na této wiki.&lt;br /&gt;
&lt;br /&gt;
Detaily (významy hodnot) pro položky ''MQTT klient'' a ''MODBUS-TCP klient'' jsou rozepsány na příslušných odpovídajících stránkách na této wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vysvětlení položek'''&lt;br /&gt;
&lt;br /&gt;
V tabulce výše jsou uvedeny informace, které naleznete na jednotlivých indexech. Nicméně popisy uvedené v této tabulce jsou velmi zkrácené, a je k nim tedy potřeba mnohem širší vysvětlení.&lt;br /&gt;
To naleznete na dalších stránkách v rámci této wiki, nebo se nás rovnou zeptejte (přes forum).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vstupy pro měření napětí'''&lt;br /&gt;
&lt;br /&gt;
Detaily k A/D vstupům jsou uvedeny [[SDS_2PR:_ADC_vstupy_a_kalibrace|zde]]. Pro psaní programu je důležité mapování '''index'''u na jednotlivé vstupy, viz [[SDS_2PR:_ADC_vstupy_a_kalibrace|tabulka]].&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=955</id>
		<title>FULL-C dns resolv functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=955"/>
		<updated>2025-08-10T09:55:51Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Síťové funkce: dotaz na přidělenou IP adresu pro DNS jméno ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS umožňuje odeslat dotaz na DNS server, za účelem zjištění IP adresy přidělené k DNS názvu, který je obsahem právě takového dotazu.&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem jsou k dispozici tyto dvě funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void dns_resolv(char *domainNameInput);&lt;br /&gt;
 unsigned int dns_resolv_status(unsigned int *IP0value, unsigned int *IP1value, unsigned int *IP2value, unsigned int *IP3value);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
SDS odesílá dotaz na DNS server, který je nastaven uživatelem SDS ve webové administraci zařízení (popř. je adresa DNS serveru získána z DHCP serveru, opět záleží na konfiguraci).&lt;br /&gt;
&lt;br /&gt;
Po odeslání dotazu se čeká na odpověď, přičemž FULL-C program pravidelně kontroluje stav voláním '''dns_resolv_status()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''POZOR : Maximální délka názvu DNS domény je interně omezena na 96 znaků !'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příklad ==&lt;br /&gt;
&lt;br /&gt;
V tomto příkladu odesílá SDS dotaz (textový název domény) na DNS server a zobrazuje případnou získanou odpověď (IP adresu).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
 char DNSname[96];&lt;br /&gt;
 unsigned int status;&lt;br /&gt;
 unsigned int IP0, IP1, IP2, IP3;&lt;br /&gt;
&lt;br /&gt;
 sprintf((char *)DNSname, &amp;quot;www.google.com&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;RESOLVING %s \n&amp;quot;, DNSname);&lt;br /&gt;
&lt;br /&gt;
 // start - select the new DNSname for all the subsequent status function calls&lt;br /&gt;
 dns_resolv(DNSname);&lt;br /&gt;
&lt;br /&gt;
 // get the first status value&lt;br /&gt;
 status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 // only if truly working, keep waiting&lt;br /&gt;
 while (512 == status)&lt;br /&gt;
 {&lt;br /&gt;
   // keep getting a new status, until it is different than 512&lt;br /&gt;
   status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // check the final status value&lt;br /&gt;
 if (513 == status)&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;GOT RESULT: IP = %u.%u.%u.%u\n&amp;quot;, IP0, IP1, IP2, IP3);&lt;br /&gt;
   // only in this case, we can use the IPx address&lt;br /&gt;
   // ... OK&lt;br /&gt;
&lt;br /&gt;
   // we can print the additional internal DNS cache status, for this particular domain&lt;br /&gt;
   // note. the value is valid only if the status is 512, otherwise not&lt;br /&gt;
   unsigned int ttl;&lt;br /&gt;
   ttl = SDS_get_u(70); // index [70] = actual TTL value for the selected DNS cache item &lt;br /&gt;
   printf(&amp;quot;REMAINING DNS-CACHE TTL-VALUE IS %u SECONDS FOR DOMAIN %s\n&amp;quot;, ttl, DNSname);&lt;br /&gt;
 } else&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;DNS RESOLV FAILED (error %u) \n&amp;quot;, status);&lt;br /&gt;
   // in this case, the IPx adress is not valid, and you need to repeat the dns_resolv() call again&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interní DNS cache ==&lt;br /&gt;
&lt;br /&gt;
Po úspěšném provedení získání DNS překladu, kdy SDS odešle dotaz na určený DNS server, a získá z něj odpověď, &lt;br /&gt;
je výsledek k dispozici (dá se získat pomocí dns_resolv_status funkce).&lt;br /&gt;
&lt;br /&gt;
Funkce dns_resolv_status() vrací vždy výsledek toho úplně posledního dotazu, který byl vyvolán zavoláním funkce dns_resolv().&lt;br /&gt;
&lt;br /&gt;
Platná odpověď z DNS serveru je uložena do interní tabulky (DNS cache) v SDS. &lt;br /&gt;
&lt;br /&gt;
Pokud je zbývající hodnota TTL větší než 0, bude ihned k dispozici odpověď z interní cache.&lt;br /&gt;
&lt;br /&gt;
Pokud záznam v interní cache není (nebo už vypršel), bude automaticky odeslána žádost o nový překlad na DNS server.&lt;br /&gt;
&lt;br /&gt;
Toto si řídí SDS interně.&lt;br /&gt;
&lt;br /&gt;
Váš program tedy vždy, když potřebuje IP adresu pro jakoukoliv doménu, tak vždy musí nejprve zavolat dns_resolv(). Tím se jednak vybere aktuální doména, pro kterou chcete získat platnou aktuální IP adresu (a lze ji tedy přečíst pomocí dns_resolv_status() funkce), a také se spustí mechanismus kontroly interní cache a eventuálního odeslání nového dotazu.&lt;br /&gt;
&lt;br /&gt;
Nový dotaz není odeslán automaticky, tedy SDS samo neodesílá nové dotazy, když položka v interní DNS cache vyprší. Toto máte plně pod kontrolou vy, a to tak, že voláte funkci dns_resolv(), která se teprve v ten moment (kdy ji ze svého programu zavoláte) rozhodne, jestli bude nový dotaz posílat, nebo ne (čistě dle stavu obsahu interní DNS cache). Pokud v cache není záznam pro danou doménu, nebo je ale už vypršel (TTL na nule), tak dojde k odeslání dotazu, a váš program pak musí čekat na odpověď (viz příklad výše, periodickým voláním dns_resolv_status(), kdy se průběžně zařídí dle vrácené hodnoty od této funkce).&lt;br /&gt;
&lt;br /&gt;
Hodnota na indexu [71] ukazuje, kdy dorazila platná a očekávaná odpověď (paket) z DNS serveru. Pokud nedorazila, je hodnota na 0. Pokud odpověď dorazila (pro daný dotaz, položený posledním voláním funkce dns_resolv), tak je do indexu [71] zapsána časová známka (UTC čas) momentu, kdy byla odpověď přijata (paket ze serveru akceptován). Pomocí sledování indexu [71] můžete nezávisle kontrolovat činnost DNS resolveru v zařízení SDS. Např. při výpadku síťové komunikace (např. odpojení kabelu, porucha sítě atd.), dojde k vypršení položek v interní cache (to lze sledovat pomocí indexu [70]) a pokud nový dotaz nebude zodpovězen (nebude komunikace s DNS serverem), tak se hodnota v [71] ukáže jako nulová. Samozřejmě vždy jsou v těchto indexech k dispozici hodnoty pouze pro ten doménový název, který jste jako poslední použili při zavolání funkce dns_resolv().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upozornění ==&lt;br /&gt;
&lt;br /&gt;
Starší FW mělo bug, kdy při vypršení TTL v interní cache nedošlo ke smazání položky v interni cache. Toto je samozřejmě problém, který je vyřešen v novém firmware, všechny verze od 08/2025.&lt;br /&gt;
&lt;br /&gt;
DNS cache je (záměrně) vymazána při:&lt;br /&gt;
* nahrání nového FULLC programu&lt;br /&gt;
* restartu zařízení SDS&lt;br /&gt;
&lt;br /&gt;
DNS cache není vymazána při výpadku Ethernetového připojení.&lt;br /&gt;
&lt;br /&gt;
DNS cache lze ručně vymazat zapsáním hodnoty 0xE4A5ECAC do systémové proměnné na indexu [70]. Zápis této speciální hodnoty kompletně smaže interní DNS cache. Tato specifická funkcionalita vyžaduje aktuální firmware (bylo to přidáno až 08/2025).&lt;br /&gt;
&lt;br /&gt;
To, že je DNS cache vymazána, znamená pouze jedinou záležitost - a to, že při novém dotazu přes dns_resolv() dojde ke komunikace s DNS serverem, a bude se čekat na jeho novou, čerstvou odpověď. Ta jak přijde (a bude platná), tak je uložena do cache, po dobu hodnoty TTL (tuto dobu určuje DNS server!). Další volání dns_resolv(), dokud TTL pro danou doménu v interní cache nevyprší, jsou pak vyřízeny okamžitě, protože se nečeká na odpověď ze serveru, ale FULLC program dostane odpověď ihned z interní cache.&lt;br /&gt;
&lt;br /&gt;
GOOD PRACTICE: před každým opakovaným použitím IP adresy, která byla získána z DNS resolveru, je vhodné zavolat dns_resolv() pro danou doménu znovu. Pokud je výsledná adresa (výsledek překladu domény na IP adresu) stejná, je to také okamžitě potvrzeno. Pokud však mezitím došlo ke změně (DNS záznamu), tak se jedině takto dokáže tato změna projevit ! Pokud tedy periodicky voláte např. funkci http_get(), tak vždy před každým tímto voláním, musíte provést i celé kolečko s dns_resolv() pro danou doménu, se kterou takto chcete komunikovat. Pokud to neuděláte, časem se dostanete do obtížného problému, kdy daný cílový server už může být dávno na jiné IP adrese, ale váš program bude stále chodit na starou, neplatnou, a přestane fungovat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stavové hodnoty ==&lt;br /&gt;
&lt;br /&gt;
Program musí použít volání funkce '''dns_resolv_status''' pro zjištění okamžitého stavu. Dokud nezískáte finální stavovou hodnotu, musíte tuto funkci volat opakovaně (nezapomeňte na vlastní bezpečnostní timeout).&lt;br /&gt;
&lt;br /&gt;
  dns_resolv_status()       význam&lt;br /&gt;
 -------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
  0                       |  klid, můžete odeslat DNS dotaz, funkce dns_resolv_status() současně nevrací platnou IP adresu (musíte nejprve spustit DNS překlad)&lt;br /&gt;
  512                     |  pracuje, dotaz odeslán (překlad nenalezen v interní cache), čekejte (funkce současně nevrací platnou IP adresu, ta bude až po dokončení překladu)&lt;br /&gt;
  513                     |  hotovo OK, do *resolvedIPaddressOutput byla zapsána IP adresa (4 bajty), a záznam v interní cache je platný a živý (zbývající TTL větší než 0)&lt;br /&gt;
  514                     |  odpověď nebyla získána (chyba) a současně nemáme záznam v interní DNS cache, takže funkce nevrací platnou IP adresu (musíte znovu začít s dotazem)&lt;br /&gt;
  515                     |  funkce byla zavolána s neplatnými parametry - nic nebylo provedeno, funkce nevrací platnou IP adresu&lt;br /&gt;
  516                     |  dotaz selhal, protože došlo k odpojení Ethernetu&lt;br /&gt;
  517                     |  dotaz selhal, protože došlo ke ztrátě vlastní přidělené IP adresy zařízení SDS (typicky když vyprší IP z DHCP a není ještě obnovena)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pokud funkce dns_resolv_status() vrátila hodnotu 513, je možné číst systémovou proměnnou z indexu [70] (uint32_t), která ukáže hodnotu TTL v momentu, kdy tuto hodnotu právě čtete. Lze takto sledovat, jak se postupně TTL snižuje (o 1 každou sekundu). Hodnota TTL odpovídá dané položce v interní cache, která byla určena právě posledním voláním funkce dns_resolv().&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=954</id>
		<title>FULL-C dns resolv functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=954"/>
		<updated>2025-08-10T09:52:15Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Síťové funkce: dotaz na přidělenou IP adresu pro DNS jméno ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS umožňuje odeslat dotaz na DNS server, za účelem zjištění IP adresy přidělené k DNS názvu, který je obsahem právě takového dotazu.&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem jsou k dispozici tyto dvě funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void dns_resolv(char *domainNameInput);&lt;br /&gt;
 unsigned int dns_resolv_status(unsigned int *IP0value, unsigned int *IP1value, unsigned int *IP2value, unsigned int *IP3value);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
SDS odesílá dotaz na DNS server, který je nastaven uživatelem SDS ve webové administraci zařízení (popř. je adresa DNS serveru získána z DHCP serveru, opět záleží na konfiguraci).&lt;br /&gt;
&lt;br /&gt;
Po odeslání dotazu se čeká na odpověď, přičemž FULL-C program pravidelně kontroluje stav voláním '''dns_resolv_status()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''POZOR : Maximální délka názvu DNS domény je interně omezena na 96 znaků !'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příklad ==&lt;br /&gt;
&lt;br /&gt;
V tomto příkladu odesílá SDS dotaz (textový název domény) na DNS server a zobrazuje případnou získanou odpověď (IP adresu).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
 char DNSname[96];&lt;br /&gt;
 unsigned int status;&lt;br /&gt;
 unsigned int IP0, IP1, IP2, IP3;&lt;br /&gt;
&lt;br /&gt;
 sprintf((char *)DNSname, &amp;quot;www.google.com&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;RESOLVING %s \n&amp;quot;, DNSname);&lt;br /&gt;
&lt;br /&gt;
 // start - select the new DNSname for all the subsequent status function calls&lt;br /&gt;
 dns_resolv(DNSname);&lt;br /&gt;
&lt;br /&gt;
 // get the first status value&lt;br /&gt;
 status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 // only if truly working, keep waiting&lt;br /&gt;
 while (512 == status)&lt;br /&gt;
 {&lt;br /&gt;
   // keep getting a new status, until it is different than 512&lt;br /&gt;
   status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // check the final status value&lt;br /&gt;
 if (513 == status)&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;GOT RESULT: IP = %u.%u.%u.%u\n&amp;quot;, IP0, IP1, IP2, IP3);&lt;br /&gt;
   // only in this case, we can use the IPx address&lt;br /&gt;
   // ... OK&lt;br /&gt;
&lt;br /&gt;
   // we can print the additional internal DNS cache status, for this particular domain&lt;br /&gt;
   // note. the value is valid only if the status is 512, otherwise not&lt;br /&gt;
   unsigned int ttl;&lt;br /&gt;
   ttl = SDS_get_u(70); // index [70] = actual TTL value for the selected DNS cache item &lt;br /&gt;
   printf(&amp;quot;DNS CACHE TTL VALUE IS %u SECONDS FOR DOMAIN %s\n&amp;quot;, ttl, DNSname);&lt;br /&gt;
 } else&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;DNS RESOLV FAILED (error %u) \n&amp;quot;, status);&lt;br /&gt;
   // in this case, the IPx adress is not valid, and you need to repeat the dns_resolv() call again&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interní DNS cache ==&lt;br /&gt;
&lt;br /&gt;
Po úspěšném provedení získání DNS překladu, kdy SDS odešle dotaz na určený DNS server, a získá z něj odpověď, &lt;br /&gt;
je výsledek k dispozici (dá se získat pomocí dns_resolv_status funkce).&lt;br /&gt;
&lt;br /&gt;
Funkce dns_resolv_status() vrací vždy výsledek toho úplně posledního dotazu, který byl vyvolán zavoláním funkce dns_resolv().&lt;br /&gt;
&lt;br /&gt;
Platná odpověď z DNS serveru je uložena do interní tabulky (DNS cache) v SDS. &lt;br /&gt;
&lt;br /&gt;
Pokud je zbývající hodnota TTL větší než 0, bude ihned k dispozici odpověď z interní cache.&lt;br /&gt;
&lt;br /&gt;
Pokud záznam v interní cache není (nebo už vypršel), bude automaticky odeslána žádost o nový překlad na DNS server.&lt;br /&gt;
&lt;br /&gt;
Toto si řídí SDS interně.&lt;br /&gt;
&lt;br /&gt;
Váš program tedy vždy, když potřebuje IP adresu pro jakoukoliv doménu, tak vždy musí nejprve zavolat dns_resolv(). Tím se jednak vybere aktuální doména, pro kterou chcete získat platnou aktuální IP adresu (a lze ji tedy přečíst pomocí dns_resolv_status() funkce), a také se spustí mechanismus kontroly interní cache a eventuálního odeslání nového dotazu.&lt;br /&gt;
&lt;br /&gt;
Nový dotaz není odeslán automaticky, tedy SDS samo neodesílá nové dotazy, když položka v interní DNS cache vyprší. Toto máte plně pod kontrolou vy, a to tak, že voláte funkci dns_resolv(), která se teprve v ten moment (kdy ji ze svého programu zavoláte) rozhodne, jestli bude nový dotaz posílat, nebo ne (čistě dle stavu obsahu interní DNS cache). Pokud v cache není záznam pro danou doménu, nebo je ale už vypršel (TTL na nule), tak dojde k odeslání dotazu, a váš program pak musí čekat na odpověď (viz příklad výše, periodickým voláním dns_resolv_status(), kdy se průběžně zařídí dle vrácené hodnoty od této funkce).&lt;br /&gt;
&lt;br /&gt;
Hodnota na indexu [71] ukazuje, kdy dorazila platná a očekávaná odpověď (paket) z DNS serveru. Pokud nedorazila, je hodnota na 0. Pokud odpověď dorazila (pro daný dotaz, položený posledním voláním funkce dns_resolv), tak je do indexu [71] zapsána časová známka (UTC čas) momentu, kdy byla odpověď přijata (paket ze serveru akceptován). Pomocí sledování indexu [71] můžete nezávisle kontrolovat činnost DNS resolveru v zařízení SDS. Např. při výpadku síťové komunikace (např. odpojení kabelu, porucha sítě atd.), dojde k vypršení položek v interní cache (to lze sledovat pomocí indexu [70]) a pokud nový dotaz nebude zodpovězen (nebude komunikace s DNS serverem), tak se hodnota v [71] ukáže jako nulová. Samozřejmě vždy jsou v těchto indexech k dispozici hodnoty pouze pro ten doménový název, který jste jako poslední použili při zavolání funkce dns_resolv().&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upozornění ==&lt;br /&gt;
&lt;br /&gt;
Starší FW mělo bug, kdy při vypršení TTL v interní cache nedošlo ke smazání položky v interni cache. Toto je samozřejmě problém, který je vyřešen v novém firmware, všechny verze od 08/2025.&lt;br /&gt;
&lt;br /&gt;
DNS cache je (záměrně) vymazána při:&lt;br /&gt;
* nahrání nového FULLC programu&lt;br /&gt;
* restartu zařízení SDS&lt;br /&gt;
&lt;br /&gt;
DNS cache není vymazána při výpadku Ethernetového připojení.&lt;br /&gt;
&lt;br /&gt;
DNS cache lze ručně vymazat zapsáním hodnoty 0xE4A5ECAC do systémové proměnné na indexu [70]. Zápis této speciální hodnoty kompletně smaže interní DNS cache. Tato specifická funkcionalita vyžaduje aktuální firmware (bylo to přidáno až 08/2025).&lt;br /&gt;
&lt;br /&gt;
To, že je DNS cache vymazána, znamená pouze jedinou záležitost - a to, že při novém dotazu přes dns_resolv() dojde ke komunikace s DNS serverem, a bude se čekat na jeho novou, čerstvou odpověď. Ta jak přijde (a bude platná), tak je uložena do cache, po dobu hodnoty TTL (tuto dobu určuje DNS server!). Další volání dns_resolv(), dokud TTL pro danou doménu v interní cache nevyprší, jsou pak vyřízeny okamžitě, protože se nečeká na odpověď ze serveru, ale FULLC program dostane odpověď ihned z interní cache.&lt;br /&gt;
&lt;br /&gt;
GOOD PRACTICE: před každým opakovaným použitím IP adresy, která byla získána z DNS resolveru, je vhodné zavolat dns_resolv() pro danou doménu znovu. Pokud je výsledná adresa (výsledek překladu domény na IP adresu) stejná, je to také okamžitě potvrzeno. Pokud však mezitím došlo ke změně (DNS záznamu), tak se jedině takto dokáže tato změna projevit ! Pokud tedy periodicky voláte např. funkci http_get(), tak vždy před každým tímto voláním, musíte provést i celé kolečko s dns_resolv() pro danou doménu, se kterou takto chcete komunikovat. Pokud to neuděláte, časem se dostanete do obtížného problému, kdy daný cílový server už může být dávno na jiné IP adrese, ale váš program bude stále chodit na starou, neplatnou, a přestane fungovat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stavové hodnoty ==&lt;br /&gt;
&lt;br /&gt;
Program musí použít volání funkce '''dns_resolv_status''' pro zjištění okamžitého stavu. Dokud nezískáte finální stavovou hodnotu, musíte tuto funkci volat opakovaně (nezapomeňte na vlastní bezpečnostní timeout).&lt;br /&gt;
&lt;br /&gt;
  dns_resolv_status()       význam&lt;br /&gt;
 -------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
  0                       |  klid, můžete odeslat DNS dotaz, funkce dns_resolv_status() současně nevrací platnou IP adresu (musíte nejprve spustit DNS překlad)&lt;br /&gt;
  512                     |  pracuje, dotaz odeslán (překlad nenalezen v interní cache), čekejte (funkce současně nevrací platnou IP adresu, ta bude až po dokončení překladu)&lt;br /&gt;
  513                     |  hotovo OK, do *resolvedIPaddressOutput byla zapsána IP adresa (4 bajty), a záznam v interní cache je platný a živý (zbývající TTL větší než 0)&lt;br /&gt;
  514                     |  odpověď nebyla získána (chyba) a současně nemáme záznam v interní DNS cache, takže funkce nevrací platnou IP adresu (musíte znovu začít s dotazem)&lt;br /&gt;
  515                     |  funkce byla zavolána s neplatnými parametry - nic nebylo provedeno, funkce nevrací platnou IP adresu&lt;br /&gt;
  516                     |  dotaz selhal, protože došlo k odpojení Ethernetu&lt;br /&gt;
  517                     |  dotaz selhal, protože došlo ke ztrátě vlastní přidělené IP adresy zařízení SDS (typicky když vyprší IP z DHCP a není ještě obnovena)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pokud funkce dns_resolv_status() vrátila hodnotu 513, je možné číst systémovou proměnnou z indexu [70] (uint32_t), která ukáže hodnotu TTL v momentu, kdy tuto hodnotu právě čtete. Lze takto sledovat, jak se postupně TTL snižuje (o 1 každou sekundu). Hodnota TTL odpovídá dané položce v interní cache, která byla určena právě posledním voláním funkce dns_resolv().&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=953</id>
		<title>FULL-C: set and get</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=953"/>
		<updated>2025-08-10T09:39:15Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Jak je FULL-C program připojen k hardware ==&lt;br /&gt;
&lt;br /&gt;
Základním důvodem pro existenci FULL-C programu na zařízení SDS je možnost číst stav hardware (např. opto-vstupy) a také hardware řídit (např. spínat relé).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je k dispozici sada C funkcí, které může program volat a které buď navrátí aktuální stav (&amp;quot;get&amp;quot; funkce), nebo stav změní (&amp;quot;set&amp;quot; funkce).&lt;br /&gt;
&lt;br /&gt;
Zde je seznam těchto funkcí:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i32(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_i64(unsigned int index, int64_t value);&lt;br /&gt;
   signed int SDS_get_i64(unsigned int index);&lt;br /&gt;
  &lt;br /&gt;
         void SDS_set_u32(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u64(unsigned int index, uint64_t value);&lt;br /&gt;
 unsigned int SDS_get_u64(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_f32(unsigned int index, float value);&lt;br /&gt;
        float SDS_get_f32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_a(unsigned int index, void *ptr, unsigned int len);&lt;br /&gt;
         void SDS_get_a(unsigned int index, void *ptr, unsigned int maxlen);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Historicky zde původně byly i tyto funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u(unsigned int index);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ty &amp;quot;nezmizely&amp;quot; jen byly '''přejmenovány''' (i na i32, u na u32). &lt;br /&gt;
Pokud je váš program používá, vše vám bude fungovat i nadále, ale co nejdříve jejich název ve svém programu přepište na nový.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detailní Příklady ===&lt;br /&gt;
&lt;br /&gt;
Přečtěte si nejprve celou tuto stránku, ať pochopíte princip. Následně se podívejte na [[FULL-C:_set_and_get:_detailed|jednotlivé příklady zde]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
Základem je použití přístupu k informacím prostřednictvím tzv. '''index'''u.&lt;br /&gt;
&lt;br /&gt;
Pod každou položkou (číselným '''index'''em) je schována odpovídající činnost nebo hodnota (např. '''index = 3''' vrátí přes &amp;quot;get&amp;quot; funkci aktuální hodnotu &amp;quot;UpTime&amp;quot;, viz tabulka).&lt;br /&gt;
&lt;br /&gt;
Každá položka však může mít jiný obsah (číslo nebo text): podle toho je potřeba zvolit správný přístup (správnou set\get funkci):&lt;br /&gt;
&lt;br /&gt;
  typ položky              | rozsah         | typ proměnné    | postfix set\get funkce&lt;br /&gt;
 --------------------------+----------------+-----------------+-------------------------&lt;br /&gt;
   signed 32-bit integer   |  -2^31..+2^31  |  int            |  _i32&lt;br /&gt;
   signed 64-bit integer   |  -2^63..+2^63  |  int64_t        |  _i32&lt;br /&gt;
   unsigned 32-bit integer |      0..+2^32  |  unsigned int   |  _u64&lt;br /&gt;
   unsigned 64-bit integer |      0..+2^64  |  uint64_t       |  _u64&lt;br /&gt;
   IP address              |  uchar[4]      |  unsigned int   |  _u32&lt;br /&gt;
   float                   |  IEEE-754      |  float          |  _f32&lt;br /&gt;
   string (text)           |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
   binary array            |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, bude při psaní programu potřeba správně vybrat postfix u dané funkce.&lt;br /&gt;
&lt;br /&gt;
Příklad: chceme zapsat desetinné číslo &amp;quot;numf&amp;quot;, v tom případě se jedná o typ &amp;quot;float numf;&amp;quot; a musíme použít ''SDS_set_f(index, numf);''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Varování: ačkoliv je většina indexů podobných jako u SDS (pro pole ''sys[]''), nemají všechny indexy stejný význam mezi SDS-C a FULL-C. Vždy používejte tu správnou tabulku pro každý programovací jazyk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u32 \ _i32 \ _f32 ==&lt;br /&gt;
&lt;br /&gt;
Základní funkce určené pro získání číselné hodnoty &amp;quot;z&amp;quot; SDS, popř. zápisu číselné hodnoty &amp;quot;do&amp;quot; SDS. Vždy se jedná o kombinaci ''index''u (který určuje o co máme zájem) a hodnoty (která je vždy 32 bitová, tj. 4 bajty, ale obsah těchto 4 bajtů už je různý - buď celočíselná hodnota bez nebo se znaménkem (nejvyšší bit), nebo desetinné číslo - floating point).&lt;br /&gt;
&lt;br /&gt;
Čtení hodnoty je potřeba pro zjištění aktuálního stavu (např. stav optického vstupu, nebo poslední známá teplota z čidla). Zápis se pak používá pro ovládání (např. sepnutí relé).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: ''čtení'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
unsigned int NTPtime;&lt;br /&gt;
NTPtime = SDS_get_u32(4);&lt;br /&gt;
printf(&amp;quot;Aktuální Epoch Time je %u (secs).\n&amp;quot;, NTPtime);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: ''čtení'' 32bitové hodnoty se znaménkem&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int NTPoffset;&lt;br /&gt;
NTPoffset = SDS_get_i32(26);&lt;br /&gt;
printf(&amp;quot;Offset pro NTP čas je: %d hod.\n&amp;quot;, NTPoffset);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Třetí příklad: ''čtení'' float hodnoty&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float AD_Rinput__in_user_units;&lt;br /&gt;
AD_Rinput__in_user_units = SDS_get_f32(311);&lt;br /&gt;
printf(&amp;quot;Resistance Measure Input value is: %0.3f \n&amp;quot;, AD_Rinput__in_user_units);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čtvrtý příklad: ''zápis'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// zapni RELE 1 (zápisem nenulové hodnoty na index [231], viz tabulka)&lt;br /&gt;
SDS_set_u32(231, 0xFF); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samozřejmě musíte pro každý index použít správný typ hodnoty (tzn.: ''unsigned int'' \ ''int'' \ ''float''). Přesné přiřazení naleznete v tabulce na konci této stránky.&lt;br /&gt;
&lt;br /&gt;
Pozn.: i když například víte, že hodnota může být například jenom 0 nebo 1 (příklad), tak vždy se zapisuje nebo čte všech 32bitů (unsigned int \ int \ float). Nepoužité bity jsou vždy nastaveny na nulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u64 \ _i64 ==&lt;br /&gt;
&lt;br /&gt;
Princip je identický jako pro _u32 a _i32 funkce. &lt;br /&gt;
&lt;br /&gt;
Vždy se podívejte do tabulky, jaké informace můžete v 64bitové formě dostat; většina jich je pouze ve 32bit formě.&lt;br /&gt;
To ale nevadí, protože přeci například není problém do proměnné typu uint64_t zapsat 32bitové číslo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _a ==&lt;br /&gt;
&lt;br /&gt;
Funkce pracující s polem dat (''SDS_get_a'', ''SDS_set_a'') vyžadují oproti ostatním set+get funkcím specifické parametry. Vždy se jedná o ukazatel na pole dat, a o informaci o velikosti tohoto pole.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: čtení textového parametru&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o velikosti 32 bajtů; tzn. sem se vleze až 31 znaků plus jeden ukončovací 0x00&lt;br /&gt;
char sysLoc[32];&lt;br /&gt;
&lt;br /&gt;
// SDS uloží text z indexu [2] do pole &amp;quot;sysLoc&amp;quot;, o maximální velikosti 32 bajtů&lt;br /&gt;
SDS_get_a(2, (void *)sysLoc, 32);&lt;br /&gt;
&lt;br /&gt;
// a můžeme se podívat na výsledek (výpis do konzole)&lt;br /&gt;
printf(&amp;quot;Nastavená system location: %s \n&amp;quot;, sysLoc);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: čtení pole údajů - '''pouze''' položky z indexu označeného (a) v tabulce indexů&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o 8 položkách, které obsahuje prvky typu &amp;quot;unsigned int&amp;quot; (každý tento prvek má velikost: 4 bajty)&lt;br /&gt;
unsigned int OPTOvalues[8];&lt;br /&gt;
 &lt;br /&gt;
// SDS zapíše 8 pozic od indexu [151] do pole OPTOvalues&lt;br /&gt;
// maximální velikost zápisu = 8*4 , tzn. 8 položek v poli OPTOvalues, každá o 4 bajtech&lt;br /&gt;
SDS_get_a(151, (void *)OPTOvalues, 8 * 4);&lt;br /&gt;
&lt;br /&gt;
// a muzeme pristupovat na jednotlive polozky (jejich obsah je platny vuci okamziku zavolani GET funkce)&lt;br /&gt;
if (0 == OPTOvalues[0]) ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pro tyto přístupy je potřeba uvést, že blokové čtení funguje jen vždy od prvního indexu pro daný blok indexů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na zcela stejném přístupu funguje '''SDS_set_a()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Úplné detaily a všechny příklady ==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Detailní přehled, doplněný o příklady ve FULL-C, naleznete zde: [[FULL-C: set and get: detailed]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tabulka ==&lt;br /&gt;
&lt;br /&gt;
Podle typu každé položky lze použít jen právě tu danou specifickou funkci (_i32\_u32\_f32\_a\_i64\_u64), viz následující tabulka. &lt;br /&gt;
&lt;br /&gt;
Je li také uveden klíč &amp;quot;(a)&amp;quot;, lze mimo přístup k jedinému indexu využít blokový přístup pomocí funkce SDS_get_a(), která přečte určený počet indexů za sebou a uloží je do připraveného pole (toho se využívá při blokovém čtení většího počtu za-sebou ležících položek, např. blokové čtení stavu všech optovstupů atd.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   index    | i\u\f\a |  dir |  comment&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   0        | u32     |  GET |  firmware PAIRCODE (SDS device master-type identification)&lt;br /&gt;
   0        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   1        | u32     |  GET |  count of actually logged-in users (logged-in to SDS web admin)&lt;br /&gt;
   1        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   2        | u32     |  GET |  unique ID for SDS (serial number assigned during manufacturing)&lt;br /&gt;
   2        | a       |  GET |  sysLocation (user configured text)&lt;br /&gt;
   2        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   3        | u32     |  GET |  uptime (increased by 1 each every 10msec) (example: 100 = 1 sec)&lt;br /&gt;
   3        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   4        | u32     |  GET |  LOCAL time (NTP UTC Epoch, with GMT-offset and DST-offset applied), value in seconds&lt;br /&gt;
   4        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   5        | u32     |  GET |  LOCAL time decomposition = value of DAY (1 through 31)&lt;br /&gt;
   5        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   6        | u32     |  GET |  LOCAL time decomposition = value of MONTH (1 through 12)&lt;br /&gt;
   6        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   7        | u32     |  GET |  LOCAL time decomposition = value of YEAR (full value)&lt;br /&gt;
   7        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   8        | u32     |  GET |  LOCAL time decomposition = value of HOUR (0 through 23)&lt;br /&gt;
   8        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   9        | u32     |  GET |  LOCAL time decomposition = value of MINUTE (0 through 59)&lt;br /&gt;
   9        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   10       | u32     |  GET |  LOCAL time decomposition = value of SECOND (0 through 59)&lt;br /&gt;
   10       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   11       | u32     |  GET |  LOCAL time decomposition = day-of-week number = number of days since Sunday (0 to 6)&lt;br /&gt;
   11       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   12       | u32     |  GET |  SDS device IP address (web admin IP)&lt;br /&gt;
   12       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   13..15   |         |  GET |  n/a (reserved)&lt;br /&gt;
   13..15   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   16       | u32     |  GET |  network gateway IP address&lt;br /&gt;
   16       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   17..19   |         |  GET |  n/a (reserved)&lt;br /&gt;
   17..19   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   20       | u32     |  GET |  network IP MASK&lt;br /&gt;
   20       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   21       | a       |  GET |  SNMPv3 - EngineID (FC: prepare buffer for 32 chars + trailing zero)&lt;br /&gt;
   21       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   22       | u32     |  GET |  SNMPv3 - Engine Boots &lt;br /&gt;
   22       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   23       | u32     |  GET |  SNMPv3 - Engine Time &lt;br /&gt;
   23       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   24       | u32     |  GET |  Ethernet Link Status&lt;br /&gt;
   24       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   25       | u32     |  GET |  Ethernet Link Speed (0, 10 or 100)&lt;br /&gt;
   25       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   26       | i32     |  GET |  read NTP GMT offset (-11 .. 11) = offset, in hour(s), between UTC and LOCAL time&lt;br /&gt;
   26       | i32     |  SET |  set NTP GMT offset (warning: this is not stored to permanent memory - use web admin to store it permanently)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   27       | u32     |  GET |  validity of the assigned IP address (0 = SDS does not have any IP address assigned, at the moment)&lt;br /&gt;
   27       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   28       | u32     |  GET |  timestamp of last change (assignment) of IP address &lt;br /&gt;
   28       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   29       | u32     |  GET |  state of DHCP client (0 = disabled, OR: enabled = status value of 1 .. 11)&lt;br /&gt;
   29       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   30       | u32     |  GET |  DHCP lease time (secs) value&lt;br /&gt;
   30       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   31       | u32     |  GET |  MAC[0] (always use only the lowest 8 bits, for each item)&lt;br /&gt;
   31       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   32       | u32     |  GET |  MAC[1]&lt;br /&gt;
   32       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   33       | u32     |  GET |  MAC[2]&lt;br /&gt;
   33       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   34       | u32     |  GET |  MAC[3]&lt;br /&gt;
   34       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   35       | u32     |  GET |  MAC[4]&lt;br /&gt;
   35       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   36       | u32     |  GET |  MAC[5]&lt;br /&gt;
   36       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   37..39   |         |  GET |  n/a (reserved)&lt;br /&gt;
   37..39   |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   40       | u32     |  GET |  SoC power-up or reset reason (64/128 = read only LSB: 8 bits) (512 = read all 32 bits)&lt;br /&gt;
   40       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   41       | a       |  GET |  OEM branding (login web page) [32 chars]&lt;br /&gt;
   41       | a       |  SET |  set custom OEM branding (login web page) [32 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   42       | a       |  GET |  OEM branding (welcome web page) [128 chars]&lt;br /&gt;
   42       | a       |  SET |  set custom OEM branding (welcome web page) [128 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   43       | u32     |  GET |  NTP-server IP address&lt;br /&gt;
   43       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   44       | u32     |  GET |  NTP-client status (0 = NOT synchronized)&lt;br /&gt;
   44       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   45       | u32     |  GET |  UpTime value - units: msec (uptime is constantly counted since then latest SDS FW boot)&lt;br /&gt;
   45       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   46       | u32     |  GET |  temperature of SoC - the RAW value (you have to manually recalculate this raw value to get degC)&lt;br /&gt;
   46       | i32     |  GET |  temperature of SoC - already recalculated to degC (SDS does have, and uses, all the required calibration info)&lt;br /&gt;
   46       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   48..60   |         |  GET |  n/a (reserved)&lt;br /&gt;
   48..60   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   61       | u32     |  GET |  read this to get a 32-bit Random Number (HW RNG)&lt;br /&gt;
   61       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   62..63   |         |  GET |  n/a (reserved)&lt;br /&gt;
   62..63   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   64       | u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #0 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
   64       | u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #0&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   65       | u32     |  GET |  get state of the DST automatic (0 = not used) (1 = DST used and DST shift is applied) (2 = DST used but NO shift applied)&lt;br /&gt;
   65       | u32     |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   66       | u32     |  GET |  DNS-server IP address&lt;br /&gt;
   66       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   67       | u32     |  GET |  info about SDS device IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   67       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   68       | u32     |  GET |  info about DNS server IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   68       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   69       |         |  GET |  n/a (reserved) &lt;br /&gt;
   69       |         |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   70       | u32     |  GET |  DNS RESOLV - actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done or finished yet)&lt;br /&gt;
   70       | u32     |  SET |  write 0xE4A5ECAC to manually clear the WHOLE internal DNS cache (will force fresh DNS requests once dns_resolv() is again called by your program)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   71       | u32     |  GET |  DNS RESOLV - timestamp (UTC) of the latest DNS server response (packet) as requested by dns_resolv() function (if 0 then no response received, or cache has expired)&lt;br /&gt;
   71       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   72..77   |         |  GET |  n/a (reserved) &lt;br /&gt;
   72..77   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   78       | u32     |  GET |  SDS HW availability detail (information): 0 = single PWM output / 4 = four PWM outputs&lt;br /&gt;
   78       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   79       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DP&amp;quot; (newer HW version) / 0 = basic BIG (no DP)&lt;br /&gt;
   79       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   80       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DS84&amp;quot; / 0 = no DS84&lt;br /&gt;
   80       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   81..84   |         |  GET |  n/a (reserved) &lt;br /&gt;
   81..84   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   85       | u32     |  GET |  SDS module type (BIG, BIG2 or STSW) discrimination:  0 = STSW or SMALL / 1 = BIG / 2 = BIG2&lt;br /&gt;
   85       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   86       | u32     |  GET |  FC: actual state (running, uploading, failed etc.) of the FULL-C program (0, 1, 2, 4, 8, 16, 32, 64)&lt;br /&gt;
   86       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   87       | u32     |  GET |  FC: unique identifier of the actually uploaded FULL-C program&lt;br /&gt;
   87       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   88       |         |  GET |  n/a (reserved) &lt;br /&gt;
   88       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   89       | u32     |  GET |  SDS IP-WatchDog: state (0 = OFF)&lt;br /&gt;
   89       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   90       | u32     |  GET |  SDS IP-WatchDog: last known RTT (msecs)&lt;br /&gt;
   90       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   91       | u32     |  GET |  SDS IP-WatchDog: logical output status&lt;br /&gt;
   91       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   92..131  |         |  GET |  n/a (reserved)&lt;br /&gt;
   92..131  |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   132      | u32     |  GET |  FC: UTC time value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   132      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   133      | u32     |  GET |  FC: UpTime value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   133      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   134      | a       |  GET |  FC: archived text of the last FC error&lt;br /&gt;
   134      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   135      | u32     |  GET |  FC: number of FC-WDF restarts of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   135      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   136      | u32     |  GET |  FC: total count of all FC program starts, since the SDS boot&lt;br /&gt;
   136      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   137      | u32     |  GET |  read an actual SDS CPU cycle counter (number of executed instructions since power-up/reboot), continuously wraps around, (1 step = approx. 2 nsec)&lt;br /&gt;
   137      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   138      | u32     |  GET |  get SDS internal RTC power-on status (0 = invalid data after powerup in RTC) (1 = RTC data OK and were used on powerup) &lt;br /&gt;
   138      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   139      | u32     |  GET |  NTP true actual raw epoch-time (secs since Linux Epoch) = clean UTC with *no* GMT nor DST offset applied&lt;br /&gt;
   139      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   140      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:401)&lt;br /&gt;
   140      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:401)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   141      | a       |  GET |  FC: custom TRAP variable - read (TRAP:402)&lt;br /&gt;
   141      | a       |  SET |  FC: custom TRAP variable - write to change (TRAP:402) (note. max 32 characters)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   142      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:403)&lt;br /&gt;
   142      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:403)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   143      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:404)&lt;br /&gt;
   143      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:404)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   144      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:405)&lt;br /&gt;
   144      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:405)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   145      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:406)&lt;br /&gt;
   145      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:406)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   146      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:407)&lt;br /&gt;
   146      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:407)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   147      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:408)&lt;br /&gt;
   147      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:408)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   148      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:409)&lt;br /&gt;
   148      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:409)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   149      |         |  GET |  n/a (reserved)&lt;br /&gt;
   149      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   150      |         |  GET |  FC: shared-variables access control - read state of the access control&lt;br /&gt;
   150      |         |  SET |  FC: shared-variables access control - use this to force a user-login in order to access the shared variables (0 = access without login is enabled)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   151..182 | u32 (a) |  GET |  OPTO1..OPTO32 status (warning: 0 = input ACTIVE = with signal) (non-zero = input not active = no signal)&lt;br /&gt;
   151..182 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   183      | u32     |  GET |  SDS FW date stamp (or just 0x00000000 for a very old firmware) - use this to verify the features or to ask user to update the firmware to a required newer version&lt;br /&gt;
   183      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   184      | u32     |  GET |  FC: information about how this actual running program was started (0 = none) (1 = normal) (2 = fc-wdg or manual restart) (4 = freshly loaded)&lt;br /&gt;
   184      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   185      | u32     |  GET |  FC: actual FULL-C WatchDog (decreasing) timeout counter value, v msec&lt;br /&gt;
   185      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   186      | u32     |  GET |  (common) frequency for PWM3 and PWM4 generator (1Hz .. 5MHz)&lt;br /&gt;
   186      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   187      | u32     |  GET |  PWM3 duty-cycle percent (0..100 [%])&lt;br /&gt;
   187      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   188      | u32     |  GET |  PWM3 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   188      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   189      | u32     |  GET |  PWM4 duty-cycle percent (0..100 [%])&lt;br /&gt;
   189      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   190      | u32     |  GET |  PWM4 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   190      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   191      | u32     |  GET |  (common) frequency for PWM1 and PWM2 generator (1Hz .. 5MHz)&lt;br /&gt;
   191      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   192      | u32     |  GET |  PWM1 duty-cycle percent (0..100 [%])&lt;br /&gt;
   192      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   193      | u32     |  GET |  PWM1 HW: read direct &amp;quot;pulse&amp;quot; (compare) register value&lt;br /&gt;
   193      | u32     |  SET |  PWM1 HW: write to direct &amp;quot;pulse&amp;quot; (compare) register value &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   194      | u32     |  GET |  reserved&lt;br /&gt;
   194      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   195      | u32     |  GET |  reserved&lt;br /&gt;
   195      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   196..228 | u32 (a) |  GET |  RELAY1..RELAY32 - &amp;quot;who&amp;quot; controls this output&lt;br /&gt;
   196..228 | u32     |  SET |  RELAY1..RELAY32 - (0 = manual = user via web) (2 = FULL-C) (4 = SDS IPwdg)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   229..230 |         |  GET |  n/a (reserved)&lt;br /&gt;
   229..230 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   231..262 | u32 (a) |  GET |  RELAY1..RELAY32 - output status (0 = off)&lt;br /&gt;
   231..262 | u32     |  SET |  RELAY1..RELAY32 - output status control (0 = off) (!0 = coil activated)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   263..265 |         |  GET |  n/a (reserved)&lt;br /&gt;
   263..265 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   266..297 | a       |  GET |  RELAY1..RELAY32 - identification/name (text, see webadmin)&lt;br /&gt;
   266..297 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   298..300 |         |  GET |  n/a (reserved)&lt;br /&gt;
   298..300 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   301      | u32     |  GET |  status (log0/log1) of GPIO-TOPBOARD pin&lt;br /&gt;
   301      | u32     |  SET |  control the GPIO-TOPBOARD pin value (if direction is set to output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   302      | u32     |  GET |  direction (in/out) of GPIO-TOPBOARD pin&lt;br /&gt;
   302      | u32     |  SET |  control the GPIO-TOPBOARD pin direction (input or output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   303..310 |         |  GET |  n/a (reserved)&lt;br /&gt;
   303..310 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   311..342 | f32 (a) |  GET |  AD: recalculated value (float) of A/D input&lt;br /&gt;
   311..342 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   343..374 | a       |  GET |  AD: input identification / name (text)&lt;br /&gt;
   343..374 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   375..406 | a       |  GET |  AD: input unit name (text)&lt;br /&gt;
   375..406 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   407..427 |         |  GET |  n/a (reserved)&lt;br /&gt;
   407..427 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   428      | u32     |  GET |  AD: user-selected type of the OpAmp chip (HW SDS) (0 = AD) (9 = LMV) &lt;br /&gt;
   428      |         |  SET |  n/a (read-only) (configuration to be done via web admin) - note. this must match the HW&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   429      | u32     |  GET |  AD: raw value of Vbatt (raw ADC value). To convert use: Vbatt = (raw * 3.3)/2048 (result in Volts)&lt;br /&gt;
   429      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   430      | u32     |  GET |  AD: value of VrefInt in miliVolts (typical value: 3300)&lt;br /&gt;
   430      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   431..438 | u32 (a) |  GET |  AD: raw value of A/D input in 12bits (0..4095) - for all SDS variants (64, 128 and 512)&lt;br /&gt;
   431..438 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   439..446 | u32 (a) |  GET |  AD: raw value of A/D input in 16bits (0..65535) - available only for the 512 SDS variant&lt;br /&gt;
   439..446 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   447..462 |         |  GET |  n/a (reserved)&lt;br /&gt;
   447..462 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   463..469 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [0]&lt;br /&gt;
   463..469 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   470..476 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [1]&lt;br /&gt;
   470..476 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   477..483 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [2]&lt;br /&gt;
   477..483 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   484..490 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [3]&lt;br /&gt;
   484..490 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   491..497 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [4]&lt;br /&gt;
   491..497 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   498..504 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [5]&lt;br /&gt;
   498..504 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   505..511 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [6]&lt;br /&gt;
   505..511 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   512..518 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [7]&lt;br /&gt;
   512..518 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   519..991 |         |  GET |  n/a (reserved)&lt;br /&gt;
   519..991 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   992      | u32     |  GET |  UTC timestamp (localtime) of the moment, when local clock gets to 23:59:59 (= last second of this day)&lt;br /&gt;
   992      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   993      | u32     |  GET |  UTC timestamp (localtime) marking a start of yesterday (as a moment since when we capture a new record) (or 0 = if there is no record for yesterday)&lt;br /&gt;
   993      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   994      | u32     |  GET |  UTC timestamp (localtime) marking a start of today (or a moment of SDS power on), since when a today's record is captured&lt;br /&gt;
   994      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   995      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T0 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   995      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   996      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T1 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   996      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   997      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T0 tariff being active&lt;br /&gt;
   997      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   998      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T1 tariff being active&lt;br /&gt;
   998      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   999      | u32     |  GET |  immediate state of the global Tariff Input (0 = T0 is active right now) (!0 = T1 is active right now)&lt;br /&gt;
   999      | u32     |  SET |  &amp;quot;manual&amp;quot; control of the global Tariff Input (write/control enabled only if the feature is set in web admin - control set to FULL-C)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1000..1031| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T0 tariff&lt;br /&gt;
  1000..1031| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1032..1063| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T1 tariff&lt;br /&gt;
  1032..1063| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1064..1095| u32 (a) |  GET |  [S0-input] time distance (in msec) between impulses&lt;br /&gt;
  1064..1095|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1096..1127| u32 (a) |  GET |  [S0-input] time (in msec) since the last captured impulse&lt;br /&gt;
  1096..1127|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1128..1159| u32     |  GET |  [S0-input] T0 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1128..1159|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1160..1191| u32     |  GET |  [S0-input] T1 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1160..1191|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1192..1223| u32     |  GET |  [S0-input] T0 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1192..1223|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1224..1255| u32     |  GET |  [S0-input] T1 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1224..1255|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1256..1499|         |  GET |  n/a (reserved)&lt;br /&gt;
  1256..1499|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1500..1531| a       |  GET |  [S0-input] master configuration struct for this input&lt;br /&gt;
  1500..1531| a       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1532..1999|         |  GET |  n/a (reserved)&lt;br /&gt;
  1532..1999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2000..2063| u32 (a) |  GET |  [1-W BUS (A)] device status&lt;br /&gt;
  2000..2063|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2100..2163| a       |  GET |  [1-W BUS (A)] master configuration struct for this OneWire device&lt;br /&gt;
  2100..2163|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2200..2263| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (basic value)&lt;br /&gt;
  2200..2263|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2300..2363| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (additional value)&lt;br /&gt;
  2300..2363|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2364..2487|         |  GET |  n/a (reserved)&lt;br /&gt;
  2364..2487|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2488..2495| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (A)&lt;br /&gt;
  2488..2495|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2496      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (A)&lt;br /&gt;
  2496      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2497      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (A)&lt;br /&gt;
  2497      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2498      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (A)&lt;br /&gt;
  2498      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2499      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (A)&lt;br /&gt;
  2499      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2500..2563| u32 (a) |  GET |  [1-W BUS (B)] device status&lt;br /&gt;
  2500..2563|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2600..2663| a       |  GET |  [1-W BUS (B)] master configuration struct for this OneWire device&lt;br /&gt;
  2600..2663|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2700..2763| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (basic value)&lt;br /&gt;
  2700..2763|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2800..2863| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (additional value)&lt;br /&gt;
  2800..2863|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2864..2986|         |  GET |  n/a (reserved)&lt;br /&gt;
  2864..2986|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2986..2993| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (B)&lt;br /&gt;
  2986..2993|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2994      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (B)&lt;br /&gt;
  2994      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2995      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (B)&lt;br /&gt;
  2995      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2996      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (B)&lt;br /&gt;
  2996      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2997      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (B)&lt;br /&gt;
  2997      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2998      | u32     |  GET |  general 1-W Master Chip status: 1 = detecting; 2 or 4 = failure; 8 = working; 16 = disabled by user&lt;br /&gt;
  2998      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2999      | u32     |  GET |  general 1-W Master Chip status: detection-retry countdown (*10msec)&lt;br /&gt;
  2999      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3000      |         |  GET |  n/a (reserved)&lt;br /&gt;
  3000      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3001      | a       |  GET |  custom 24-byte string (readable via SNMP .8.80)&lt;br /&gt;
  3001      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3002      | a       |  GET |  custom 24-byte string (readable via SNMP .8.81)&lt;br /&gt;
  3002      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3003      | a       |  GET |  custom 16-byte string (readable via SNMP .8.82)&lt;br /&gt;
  3003      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3004      | a       |  GET |  custom 16-byte string (readable via SNMP .8.83)&lt;br /&gt;
  3004      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3005      | a       |  GET |  custom 16-byte string (readable via SNMP .8.84)&lt;br /&gt;
  3005      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3006..3799|         |  GET |  n/a (reserved)&lt;br /&gt;
  3006..3799|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3800      | u32     |  GET |  PVD Active - (nonzero:) main power failure detected&lt;br /&gt;
  3800      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3801      | u32     |  GET |  PVD Was Active - this flag is only cleared by reading this index 3801&lt;br /&gt;
  3801      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3802..3849|         |  GET |  n/a (reserved)&lt;br /&gt;
  3802..3849|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3850      | u32     |  GET |  SD Card - fully mounted and useable&lt;br /&gt;
  3850      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3851      | i32     |  GET |  latest file i/o error code&lt;br /&gt;
  3851      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3852      | u32     |  GET |  SD Card - Block Size in bytes (typically 512)&lt;br /&gt;
  3852      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3853      | u32     |  GET |  SD Card - CardType&lt;br /&gt;
  3853      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3854      | u32     |  GET |  SD Card - CID - ProductSN&lt;br /&gt;
  3854      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3855      | u32     |  GET |  statistic counter: SDcard: all init attempts (= successful + failed)&lt;br /&gt;
  3855      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3856      | u32     |  GET |  statistic counter: SDcard: failed init attempts&lt;br /&gt;
  3856      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3857      | u32     |  GET |  SD Card - Total Sector Count in KiB (size of the card)&lt;br /&gt;
  3857      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3858      | u32     |  GET |  statistic counter: SDcard: sector reads&lt;br /&gt;
  3858      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3859      | u32     |  GET |  statistic counter: SDcard: sector writes&lt;br /&gt;
  3859      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3860      | u32     |  GET |  statistic counter: SDcard: sector r/w failures&lt;br /&gt;
  3860      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3861      | u32     |  GET |  statistic counter: number of opened files&lt;br /&gt;
  3861      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3862..3999|         |  GET |  n/a (reserved)&lt;br /&gt;
  3862..3999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4000..4099| i32     |  GET |  Shared Variables: S00 through S99 - read&lt;br /&gt;
  4000..4099| i32     |  SET |  Shared Variables: S00 through S99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4100..4199| u32     |  GET |  Shared Variables: U00 through U99 - read&lt;br /&gt;
  4100..4199| u32     |  SET |  Shared Variables: U00 through U99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4200..4299| f32     |  GET |  Shared Variables: F00 through F99 - read&lt;br /&gt;
  4200..4299| f32     |  SET |  Shared Variables: F00 through F99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4300..4399| a       |  GET |  Shared Variables: T00 through T99 - read&lt;br /&gt;
  4300..4399| a       |  SET |  Shared Variables: T00 through T99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4400..4989|         |  GET |  n/a (reserved)&lt;br /&gt;
  4400..4989|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4990..4999| u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #1..#10 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
  4990..4999| u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #1..#10&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  5000..5127| u/i/f 32|  GET |  BackUp-RAM (FC version 0x08+) - write&lt;br /&gt;
  5000..5127| u/i/f 32|  SET |  BackUp-RAM (FC version 0x08+) - read&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  5128..11197 |       |  GET |  n/a (reserved)&lt;br /&gt;
  5128..11197 |       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  11198     | u32     |  GET |  mqtt_publish PUBLISH Fixed Header value ( 0b0011dqqr : d=DUP, qq=QOS, r=RETAIN ) &lt;br /&gt;
  11198     | u32     |  SET |  write ( default: 0b00110001 )&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  11199     | u/i 32  |  GET |  FW support for MQTT-c (0 == NOT present)&lt;br /&gt;
  11199     |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12200     | i32     |  GET |  work progress (and result) of mqtt_connect()&lt;br /&gt;
  12200     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12201     | i32     |  GET |  &amp;quot;CONNACK Connect Return&amp;quot; - result of mqtt_connect()&lt;br /&gt;
  12201     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12202     | i32     |  GET |  result of: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
  12202     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12203     | i32     |  GET |  MQTT protocol error counter (informative)&lt;br /&gt;
  12203     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12204..12208 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12204..12208 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12209     | i32     |  GET |  Subscribe Table - total number of available rows&lt;br /&gt;
  12209     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12210     | a       |  GET |  latest received Topic Name (sent from broker)&lt;br /&gt;
  12210     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12211..12241 | a    |  GET |  Subscribe Table: Topic Name for each table row&lt;br /&gt;
  12211..12241 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12242..12249 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12242..12249 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12250     | a       |  GET |  latest received Value (sent from broker)&lt;br /&gt;
  12250     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12251..12281 | a    |  GET |  Subscribe Table: actual Value for each table row&lt;br /&gt;
  12251..12281 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12282..12289 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12282..12289 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12290     | u32     |  GET |  timestamp for the latest received data (Topic) from broker&lt;br /&gt;
  12290     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12291..12321 | u32 (a) |  GET |  Subscribe Table: timestamp for the last Value update, for each table row&lt;br /&gt;
  12291..12321 |         |  SET |  n/a&lt;br /&gt;
 --------------+------+--+---+--+--&lt;br /&gt;
  12322..12398 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12322..12398 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12399     | u/i 32  |  GET |  FW support for MODBUS-TCP-c (0 == NOT present)&lt;br /&gt;
  12399     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12400     | i32     |  GET |  work progress (and result) of modbus_tcp_connect()&lt;br /&gt;
  12400     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12401     | i32     |  GET |  progress/result for function 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
  12401     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12402     | i32     |  GET |  progress/result for function 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
  12402     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12403     | i32     |  GET |  progress/result for function 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
  12403     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12404     | i32     |  GET |  progress/result for function 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
  12404     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12405     | i32     |  GET |  progress/result for function 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
  12405     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12406     | i32     |  GET |  progress/result for function 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
  12406     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12407..12414 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12407..12414 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12415     | i32     |  GET |  progress/result for function 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
  12415     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12416     | i32     |  GET |  progress/result for function 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
  12416     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12417..12462 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12417..12462 |      |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12463     | u/i 32  |  GET |  latest Unit Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12463     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12464     | u/i 32  |  GET |  latest Transaction Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12464     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12465     | u/i 32  |  GET |  timestamp of the latest received message&lt;br /&gt;
  12465     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12466     | u/i 32  |  GET |  a count of received items inside the latest received message&lt;br /&gt;
  12466     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12467     | u/i 32  |  GET |  latest received Unit Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12467     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12468     | u/i 32  |  GET |  latest received Transaction Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12468     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12469     | u/i 32  |  GET |  an address of the first coil/input/register item (maps to a value in 12470)&lt;br /&gt;
  12469     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12470..12719 | i32 (a) |  GET |  received values (latest received message contents)&lt;br /&gt;
  12470..12719 |         |  SET |  n/a &lt;br /&gt;
 --------------+---------+------+--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Poznámky''' &lt;br /&gt;
&lt;br /&gt;
Položky obsahující: &amp;quot;konfigurační struktura&amp;quot; vyžadují dostatečně velký prostor pro uložení výsledku (při zavolání SDS_get_a() funkce). V takovém případě se do vámi určené cílové oblasti ukládá celý &amp;quot;struct&amp;quot; který obsahuje všechny potřebné údaje patřící pod danou položku (názvy, hodnoty, atd.). Pro detaily je nejlépe podívat se přímo na aktuální [[FULL-C:_set_and_get:_detailed|příklady]], které přesně popisují postup pro každý typ takové struktury - a vysvětlují tuto poznámku svým kódem.&lt;br /&gt;
&lt;br /&gt;
Indexy označené jako '''(a)''' lze ''blokově číst'' (pozor, označené specificky jako &amp;quot;a v závorce&amp;quot;). Vždy ale lze ''blokové čtení'' (tj. čtení více indexů najednou, za sebou, v rámci povoleného rozsahu) provést pouze od prvního indexu v bloku (ne od dalších v bloku).&lt;br /&gt;
Příklad: indexy 1000 až 1031 lze přečíst jako jeden souvislý blok, když se začne číst od prvního indexu v bloku (tj. 1000). Počet následně čtených indexů se udává dalším parametrem při volání SDS_get_a() funkce.&lt;br /&gt;
Pokud se pokusíte číst blok indexů ne od začátku bloku, čtení selže - pokud blok indexů začíná na 1000 tak musíte požádat o čtení od indexu 1000, přičemž začátek od 1001 a výše selže.&lt;br /&gt;
&lt;br /&gt;
BackUp-RAM funkce je dostupná je pro firmware který poskytuje verzi FULL-C o hodnotě 0x08 nebo novější. BackUp-RAM je sada 32-bit hodnot, které lze zapisovat a číst, a které jsou (především) uchovány v paměti, která je zálohovaná baterií (tzn. drží hodnotu i po výpadku napájení, tak dlouho než se baterie vybije). Výhodou BackUp-RAM oproti DF je možnost přímého přístupu a rychlosti (naopak DF vyžaduje čtení a zápis celých stránek).&lt;br /&gt;
&lt;br /&gt;
Sdílené proměnné je potřeba nejprve definovat, aby je šlo použít, a aby k nim šlo přistupovat přes set/get funkce - viz specifická stránka na této wiki.&lt;br /&gt;
&lt;br /&gt;
Detaily (významy hodnot) pro položky ''MQTT klient'' a ''MODBUS-TCP klient'' jsou rozepsány na příslušných odpovídajících stránkách na této wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vysvětlení položek'''&lt;br /&gt;
&lt;br /&gt;
V tabulce výše jsou uvedeny informace, které naleznete na jednotlivých indexech. Nicméně popisy uvedené v této tabulce jsou velmi zkrácené, a je k nim tedy potřeba mnohem širší vysvětlení.&lt;br /&gt;
To naleznete na dalších stránkách v rámci této wiki, nebo se nás rovnou zeptejte (přes forum).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vstupy pro měření napětí'''&lt;br /&gt;
&lt;br /&gt;
Detaily k A/D vstupům jsou uvedeny [[SDS_2PR:_ADC_vstupy_a_kalibrace|zde]]. Pro psaní programu je důležité mapování '''index'''u na jednotlivé vstupy, viz [[SDS_2PR:_ADC_vstupy_a_kalibrace|tabulka]].&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=952</id>
		<title>FULL-C: set and get</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=952"/>
		<updated>2025-08-10T09:34:38Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Jak je FULL-C program připojen k hardware ==&lt;br /&gt;
&lt;br /&gt;
Základním důvodem pro existenci FULL-C programu na zařízení SDS je možnost číst stav hardware (např. opto-vstupy) a také hardware řídit (např. spínat relé).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je k dispozici sada C funkcí, které může program volat a které buď navrátí aktuální stav (&amp;quot;get&amp;quot; funkce), nebo stav změní (&amp;quot;set&amp;quot; funkce).&lt;br /&gt;
&lt;br /&gt;
Zde je seznam těchto funkcí:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i32(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_i64(unsigned int index, int64_t value);&lt;br /&gt;
   signed int SDS_get_i64(unsigned int index);&lt;br /&gt;
  &lt;br /&gt;
         void SDS_set_u32(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u64(unsigned int index, uint64_t value);&lt;br /&gt;
 unsigned int SDS_get_u64(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_f32(unsigned int index, float value);&lt;br /&gt;
        float SDS_get_f32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_a(unsigned int index, void *ptr, unsigned int len);&lt;br /&gt;
         void SDS_get_a(unsigned int index, void *ptr, unsigned int maxlen);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Historicky zde původně byly i tyto funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u(unsigned int index);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ty &amp;quot;nezmizely&amp;quot; jen byly '''přejmenovány''' (i na i32, u na u32). &lt;br /&gt;
Pokud je váš program používá, vše vám bude fungovat i nadále, ale co nejdříve jejich název ve svém programu přepište na nový.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detailní Příklady ===&lt;br /&gt;
&lt;br /&gt;
Přečtěte si nejprve celou tuto stránku, ať pochopíte princip. Následně se podívejte na [[FULL-C:_set_and_get:_detailed|jednotlivé příklady zde]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
Základem je použití přístupu k informacím prostřednictvím tzv. '''index'''u.&lt;br /&gt;
&lt;br /&gt;
Pod každou položkou (číselným '''index'''em) je schována odpovídající činnost nebo hodnota (např. '''index = 3''' vrátí přes &amp;quot;get&amp;quot; funkci aktuální hodnotu &amp;quot;UpTime&amp;quot;, viz tabulka).&lt;br /&gt;
&lt;br /&gt;
Každá položka však může mít jiný obsah (číslo nebo text): podle toho je potřeba zvolit správný přístup (správnou set\get funkci):&lt;br /&gt;
&lt;br /&gt;
  typ položky              | rozsah         | typ proměnné    | postfix set\get funkce&lt;br /&gt;
 --------------------------+----------------+-----------------+-------------------------&lt;br /&gt;
   signed 32-bit integer   |  -2^31..+2^31  |  int            |  _i32&lt;br /&gt;
   signed 64-bit integer   |  -2^63..+2^63  |  int64_t        |  _i32&lt;br /&gt;
   unsigned 32-bit integer |      0..+2^32  |  unsigned int   |  _u64&lt;br /&gt;
   unsigned 64-bit integer |      0..+2^64  |  uint64_t       |  _u64&lt;br /&gt;
   IP address              |  uchar[4]      |  unsigned int   |  _u32&lt;br /&gt;
   float                   |  IEEE-754      |  float          |  _f32&lt;br /&gt;
   string (text)           |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
   binary array            |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, bude při psaní programu potřeba správně vybrat postfix u dané funkce.&lt;br /&gt;
&lt;br /&gt;
Příklad: chceme zapsat desetinné číslo &amp;quot;numf&amp;quot;, v tom případě se jedná o typ &amp;quot;float numf;&amp;quot; a musíme použít ''SDS_set_f(index, numf);''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Varování: ačkoliv je většina indexů podobných jako u SDS (pro pole ''sys[]''), nemají všechny indexy stejný význam mezi SDS-C a FULL-C. Vždy používejte tu správnou tabulku pro každý programovací jazyk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u32 \ _i32 \ _f32 ==&lt;br /&gt;
&lt;br /&gt;
Základní funkce určené pro získání číselné hodnoty &amp;quot;z&amp;quot; SDS, popř. zápisu číselné hodnoty &amp;quot;do&amp;quot; SDS. Vždy se jedná o kombinaci ''index''u (který určuje o co máme zájem) a hodnoty (která je vždy 32 bitová, tj. 4 bajty, ale obsah těchto 4 bajtů už je různý - buď celočíselná hodnota bez nebo se znaménkem (nejvyšší bit), nebo desetinné číslo - floating point).&lt;br /&gt;
&lt;br /&gt;
Čtení hodnoty je potřeba pro zjištění aktuálního stavu (např. stav optického vstupu, nebo poslední známá teplota z čidla). Zápis se pak používá pro ovládání (např. sepnutí relé).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: ''čtení'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
unsigned int NTPtime;&lt;br /&gt;
NTPtime = SDS_get_u32(4);&lt;br /&gt;
printf(&amp;quot;Aktuální Epoch Time je %u (secs).\n&amp;quot;, NTPtime);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: ''čtení'' 32bitové hodnoty se znaménkem&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int NTPoffset;&lt;br /&gt;
NTPoffset = SDS_get_i32(26);&lt;br /&gt;
printf(&amp;quot;Offset pro NTP čas je: %d hod.\n&amp;quot;, NTPoffset);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Třetí příklad: ''čtení'' float hodnoty&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float AD_Rinput__in_user_units;&lt;br /&gt;
AD_Rinput__in_user_units = SDS_get_f32(311);&lt;br /&gt;
printf(&amp;quot;Resistance Measure Input value is: %0.3f \n&amp;quot;, AD_Rinput__in_user_units);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čtvrtý příklad: ''zápis'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// zapni RELE 1 (zápisem nenulové hodnoty na index [231], viz tabulka)&lt;br /&gt;
SDS_set_u32(231, 0xFF); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samozřejmě musíte pro každý index použít správný typ hodnoty (tzn.: ''unsigned int'' \ ''int'' \ ''float''). Přesné přiřazení naleznete v tabulce na konci této stránky.&lt;br /&gt;
&lt;br /&gt;
Pozn.: i když například víte, že hodnota může být například jenom 0 nebo 1 (příklad), tak vždy se zapisuje nebo čte všech 32bitů (unsigned int \ int \ float). Nepoužité bity jsou vždy nastaveny na nulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u64 \ _i64 ==&lt;br /&gt;
&lt;br /&gt;
Princip je identický jako pro _u32 a _i32 funkce. &lt;br /&gt;
&lt;br /&gt;
Vždy se podívejte do tabulky, jaké informace můžete v 64bitové formě dostat; většina jich je pouze ve 32bit formě.&lt;br /&gt;
To ale nevadí, protože přeci například není problém do proměnné typu uint64_t zapsat 32bitové číslo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _a ==&lt;br /&gt;
&lt;br /&gt;
Funkce pracující s polem dat (''SDS_get_a'', ''SDS_set_a'') vyžadují oproti ostatním set+get funkcím specifické parametry. Vždy se jedná o ukazatel na pole dat, a o informaci o velikosti tohoto pole.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: čtení textového parametru&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o velikosti 32 bajtů; tzn. sem se vleze až 31 znaků plus jeden ukončovací 0x00&lt;br /&gt;
char sysLoc[32];&lt;br /&gt;
&lt;br /&gt;
// SDS uloží text z indexu [2] do pole &amp;quot;sysLoc&amp;quot;, o maximální velikosti 32 bajtů&lt;br /&gt;
SDS_get_a(2, (void *)sysLoc, 32);&lt;br /&gt;
&lt;br /&gt;
// a můžeme se podívat na výsledek (výpis do konzole)&lt;br /&gt;
printf(&amp;quot;Nastavená system location: %s \n&amp;quot;, sysLoc);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: čtení pole údajů - '''pouze''' položky z indexu označeného (a) v tabulce indexů&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o 8 položkách, které obsahuje prvky typu &amp;quot;unsigned int&amp;quot; (každý tento prvek má velikost: 4 bajty)&lt;br /&gt;
unsigned int OPTOvalues[8];&lt;br /&gt;
 &lt;br /&gt;
// SDS zapíše 8 pozic od indexu [151] do pole OPTOvalues&lt;br /&gt;
// maximální velikost zápisu = 8*4 , tzn. 8 položek v poli OPTOvalues, každá o 4 bajtech&lt;br /&gt;
SDS_get_a(151, (void *)OPTOvalues, 8 * 4);&lt;br /&gt;
&lt;br /&gt;
// a muzeme pristupovat na jednotlive polozky (jejich obsah je platny vuci okamziku zavolani GET funkce)&lt;br /&gt;
if (0 == OPTOvalues[0]) ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pro tyto přístupy je potřeba uvést, že blokové čtení funguje jen vždy od prvního indexu pro daný blok indexů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na zcela stejném přístupu funguje '''SDS_set_a()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Úplné detaily a všechny příklady ==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Detailní přehled, doplněný o příklady ve FULL-C, naleznete zde: [[FULL-C: set and get: detailed]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tabulka ==&lt;br /&gt;
&lt;br /&gt;
Podle typu každé položky lze použít jen právě tu danou specifickou funkci (_i32\_u32\_f32\_a\_i64\_u64), viz následující tabulka. &lt;br /&gt;
&lt;br /&gt;
Je li také uveden klíč &amp;quot;(a)&amp;quot;, lze mimo přístup k jedinému indexu využít blokový přístup pomocí funkce SDS_get_a(), která přečte určený počet indexů za sebou a uloží je do připraveného pole (toho se využívá při blokovém čtení většího počtu za-sebou ležících položek, např. blokové čtení stavu všech optovstupů atd.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   index    | i\u\f\a |  dir |  comment&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   0        | u32     |  GET |  firmware PAIRCODE (SDS device master-type identification)&lt;br /&gt;
   0        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   1        | u32     |  GET |  count of actually logged-in users (logged-in to SDS web admin)&lt;br /&gt;
   1        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   2        | u32     |  GET |  unique ID for SDS (serial number assigned during manufacturing)&lt;br /&gt;
   2        | a       |  GET |  sysLocation (user configured text)&lt;br /&gt;
   2        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   3        | u32     |  GET |  uptime (increased by 1 each every 10msec) (example: 100 = 1 sec)&lt;br /&gt;
   3        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   4        | u32     |  GET |  LOCAL time (NTP UTC Epoch, with GMT-offset and DST-offset applied), value in seconds&lt;br /&gt;
   4        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   5        | u32     |  GET |  LOCAL time decomposition = value of DAY (1 through 31)&lt;br /&gt;
   5        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   6        | u32     |  GET |  LOCAL time decomposition = value of MONTH (1 through 12)&lt;br /&gt;
   6        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   7        | u32     |  GET |  LOCAL time decomposition = value of YEAR (full value)&lt;br /&gt;
   7        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   8        | u32     |  GET |  LOCAL time decomposition = value of HOUR (0 through 23)&lt;br /&gt;
   8        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   9        | u32     |  GET |  LOCAL time decomposition = value of MINUTE (0 through 59)&lt;br /&gt;
   9        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   10       | u32     |  GET |  LOCAL time decomposition = value of SECOND (0 through 59)&lt;br /&gt;
   10       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   11       | u32     |  GET |  LOCAL time decomposition = day-of-week number = number of days since Sunday (0 to 6)&lt;br /&gt;
   11       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   12       | u32     |  GET |  SDS device IP address (web admin IP)&lt;br /&gt;
   12       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   13..15   |         |  GET |  n/a (reserved)&lt;br /&gt;
   13..15   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   16       | u32     |  GET |  network gateway IP address&lt;br /&gt;
   16       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   17..19   |         |  GET |  n/a (reserved)&lt;br /&gt;
   17..19   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   20       | u32     |  GET |  network IP MASK&lt;br /&gt;
   20       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   21       | a       |  GET |  SNMPv3 - EngineID (FC: prepare buffer for 32 chars + trailing zero)&lt;br /&gt;
   21       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   22       | u32     |  GET |  SNMPv3 - Engine Boots &lt;br /&gt;
   22       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   23       | u32     |  GET |  SNMPv3 - Engine Time &lt;br /&gt;
   23       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   24       | u32     |  GET |  Ethernet Link Status&lt;br /&gt;
   24       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   25       | u32     |  GET |  Ethernet Link Speed (0, 10 or 100)&lt;br /&gt;
   25       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   26       | i32     |  GET |  read NTP GMT offset (-11 .. 11) = offset, in hour(s), between UTC and LOCAL time&lt;br /&gt;
   26       | i32     |  SET |  set NTP GMT offset (warning: this is not stored to permanent memory - use web admin to store it permanently)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   27       | u32     |  GET |  validity of the assigned IP address (0 = SDS does not have any IP address assigned, at the moment)&lt;br /&gt;
   27       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   28       | u32     |  GET |  timestamp of last change (assignment) of IP address &lt;br /&gt;
   28       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   29       | u32     |  GET |  state of DHCP client (0 = disabled, OR: enabled = status value of 1 .. 11)&lt;br /&gt;
   29       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   30       | u32     |  GET |  DHCP lease time (secs) value&lt;br /&gt;
   30       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   31       | u32     |  GET |  MAC[0] (always use only the lowest 8 bits, for each item)&lt;br /&gt;
   31       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   32       | u32     |  GET |  MAC[1]&lt;br /&gt;
   32       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   33       | u32     |  GET |  MAC[2]&lt;br /&gt;
   33       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   34       | u32     |  GET |  MAC[3]&lt;br /&gt;
   34       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   35       | u32     |  GET |  MAC[4]&lt;br /&gt;
   35       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   36       | u32     |  GET |  MAC[5]&lt;br /&gt;
   36       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   37..39   |         |  GET |  n/a (reserved)&lt;br /&gt;
   37..39   |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   40       | u32     |  GET |  SoC power-up or reset reason (64/128 = read only LSB: 8 bits) (512 = read all 32 bits)&lt;br /&gt;
   40       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   41       | a       |  GET |  OEM branding (login web page) [32 chars]&lt;br /&gt;
   41       | a       |  SET |  set custom OEM branding (login web page) [32 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   42       | a       |  GET |  OEM branding (welcome web page) [128 chars]&lt;br /&gt;
   42       | a       |  SET |  set custom OEM branding (welcome web page) [128 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   43       | u32     |  GET |  NTP-server IP address&lt;br /&gt;
   43       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   44       | u32     |  GET |  NTP-client status (0 = NOT synchronized)&lt;br /&gt;
   44       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   45       | u32     |  GET |  UpTime value - units: msec (uptime is constantly counted since then latest SDS FW boot)&lt;br /&gt;
   45       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   46       | u32     |  GET |  temperature of SoC - the RAW value (you have to manually recalculate this raw value to get degC)&lt;br /&gt;
   46       | i32     |  GET |  temperature of SoC - already recalculated to degC (SDS does have, and uses, all the required calibration info)&lt;br /&gt;
   46       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   48..60   |         |  GET |  n/a (reserved)&lt;br /&gt;
   48..60   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   61       | u32     |  GET |  read this to get a 32-bit Random Number (HW RNG)&lt;br /&gt;
   61       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   62..63   |         |  GET |  n/a (reserved)&lt;br /&gt;
   62..63   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   64       | u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #0 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
   64       | u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #0&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   65       | u32     |  GET |  get state of the DST automatic (0 = not used) (1 = DST used and DST shift is applied) (2 = DST used but NO shift applied)&lt;br /&gt;
   65       | u32     |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   66       | u32     |  GET |  DNS-server IP address&lt;br /&gt;
   66       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   67       | u32     |  GET |  info about SDS device IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   67       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   68       | u32     |  GET |  info about DNS server IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   68       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   69       |         |  GET |  n/a (reserved) &lt;br /&gt;
   69       |         |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   70       | u32     |  GET |  DNS RESOLV - actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done or finished yet)&lt;br /&gt;
   70       | u32     |  SET |  write 0xE4A5ECAC to manually clear the WHOLE internal DNS cache (will force fresh DNS requests once dns_resolv() is again called by your program)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   71       | u32     |  GET |  DNS RESOLV - timestamp (UTC) of the latest DNS server response (packet) as requested by dns_resolv() function (if 0 then no response received)&lt;br /&gt;
   71       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   72..77   |         |  GET |  n/a (reserved) &lt;br /&gt;
   72..77   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   78       | u32     |  GET |  SDS HW availability detail (information): 0 = single PWM output / 4 = four PWM outputs&lt;br /&gt;
   78       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   79       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DP&amp;quot; (newer HW version) / 0 = basic BIG (no DP)&lt;br /&gt;
   79       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   80       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DS84&amp;quot; / 0 = no DS84&lt;br /&gt;
   80       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   81..84   |         |  GET |  n/a (reserved) &lt;br /&gt;
   81..84   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   85       | u32     |  GET |  SDS module type (BIG, BIG2 or STSW) discrimination:  0 = STSW or SMALL / 1 = BIG / 2 = BIG2&lt;br /&gt;
   85       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   86       | u32     |  GET |  FC: actual state (running, uploading, failed etc.) of the FULL-C program (0, 1, 2, 4, 8, 16, 32, 64)&lt;br /&gt;
   86       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   87       | u32     |  GET |  FC: unique identifier of the actually uploaded FULL-C program&lt;br /&gt;
   87       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   88       |         |  GET |  n/a (reserved) &lt;br /&gt;
   88       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   89       | u32     |  GET |  SDS IP-WatchDog: state (0 = OFF)&lt;br /&gt;
   89       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   90       | u32     |  GET |  SDS IP-WatchDog: last known RTT (msecs)&lt;br /&gt;
   90       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   91       | u32     |  GET |  SDS IP-WatchDog: logical output status&lt;br /&gt;
   91       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   92..131  |         |  GET |  n/a (reserved)&lt;br /&gt;
   92..131  |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   132      | u32     |  GET |  FC: UTC time value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   132      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   133      | u32     |  GET |  FC: UpTime value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   133      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   134      | a       |  GET |  FC: archived text of the last FC error&lt;br /&gt;
   134      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   135      | u32     |  GET |  FC: number of FC-WDF restarts of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   135      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   136      | u32     |  GET |  FC: total count of all FC program starts, since the SDS boot&lt;br /&gt;
   136      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   137      | u32     |  GET |  read an actual SDS CPU cycle counter (number of executed instructions since power-up/reboot), continuously wraps around, (1 step = approx. 2 nsec)&lt;br /&gt;
   137      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   138      | u32     |  GET |  get SDS internal RTC power-on status (0 = invalid data after powerup in RTC) (1 = RTC data OK and were used on powerup) &lt;br /&gt;
   138      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   139      | u32     |  GET |  NTP true actual raw epoch-time (secs since Linux Epoch) = clean UTC with *no* GMT nor DST offset applied&lt;br /&gt;
   139      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   140      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:401)&lt;br /&gt;
   140      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:401)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   141      | a       |  GET |  FC: custom TRAP variable - read (TRAP:402)&lt;br /&gt;
   141      | a       |  SET |  FC: custom TRAP variable - write to change (TRAP:402) (note. max 32 characters)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   142      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:403)&lt;br /&gt;
   142      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:403)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   143      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:404)&lt;br /&gt;
   143      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:404)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   144      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:405)&lt;br /&gt;
   144      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:405)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   145      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:406)&lt;br /&gt;
   145      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:406)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   146      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:407)&lt;br /&gt;
   146      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:407)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   147      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:408)&lt;br /&gt;
   147      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:408)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   148      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:409)&lt;br /&gt;
   148      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:409)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   149      |         |  GET |  n/a (reserved)&lt;br /&gt;
   149      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   150      |         |  GET |  FC: shared-variables access control - read state of the access control&lt;br /&gt;
   150      |         |  SET |  FC: shared-variables access control - use this to force a user-login in order to access the shared variables (0 = access without login is enabled)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   151..182 | u32 (a) |  GET |  OPTO1..OPTO32 status (warning: 0 = input ACTIVE = with signal) (non-zero = input not active = no signal)&lt;br /&gt;
   151..182 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   183      | u32     |  GET |  SDS FW date stamp (or just 0x00000000 for a very old firmware) - use this to verify the features or to ask user to update the firmware to a required newer version&lt;br /&gt;
   183      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   184      | u32     |  GET |  FC: information about how this actual running program was started (0 = none) (1 = normal) (2 = fc-wdg or manual restart) (4 = freshly loaded)&lt;br /&gt;
   184      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   185      | u32     |  GET |  FC: actual FULL-C WatchDog (decreasing) timeout counter value, v msec&lt;br /&gt;
   185      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   186      | u32     |  GET |  (common) frequency for PWM3 and PWM4 generator (1Hz .. 5MHz)&lt;br /&gt;
   186      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   187      | u32     |  GET |  PWM3 duty-cycle percent (0..100 [%])&lt;br /&gt;
   187      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   188      | u32     |  GET |  PWM3 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   188      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   189      | u32     |  GET |  PWM4 duty-cycle percent (0..100 [%])&lt;br /&gt;
   189      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   190      | u32     |  GET |  PWM4 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   190      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   191      | u32     |  GET |  (common) frequency for PWM1 and PWM2 generator (1Hz .. 5MHz)&lt;br /&gt;
   191      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   192      | u32     |  GET |  PWM1 duty-cycle percent (0..100 [%])&lt;br /&gt;
   192      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   193      | u32     |  GET |  PWM1 HW: read direct &amp;quot;pulse&amp;quot; (compare) register value&lt;br /&gt;
   193      | u32     |  SET |  PWM1 HW: write to direct &amp;quot;pulse&amp;quot; (compare) register value &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   194      | u32     |  GET |  reserved&lt;br /&gt;
   194      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   195      | u32     |  GET |  reserved&lt;br /&gt;
   195      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   196..228 | u32 (a) |  GET |  RELAY1..RELAY32 - &amp;quot;who&amp;quot; controls this output&lt;br /&gt;
   196..228 | u32     |  SET |  RELAY1..RELAY32 - (0 = manual = user via web) (2 = FULL-C) (4 = SDS IPwdg)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   229..230 |         |  GET |  n/a (reserved)&lt;br /&gt;
   229..230 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   231..262 | u32 (a) |  GET |  RELAY1..RELAY32 - output status (0 = off)&lt;br /&gt;
   231..262 | u32     |  SET |  RELAY1..RELAY32 - output status control (0 = off) (!0 = coil activated)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   263..265 |         |  GET |  n/a (reserved)&lt;br /&gt;
   263..265 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   266..297 | a       |  GET |  RELAY1..RELAY32 - identification/name (text, see webadmin)&lt;br /&gt;
   266..297 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   298..300 |         |  GET |  n/a (reserved)&lt;br /&gt;
   298..300 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   301      | u32     |  GET |  status (log0/log1) of GPIO-TOPBOARD pin&lt;br /&gt;
   301      | u32     |  SET |  control the GPIO-TOPBOARD pin value (if direction is set to output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   302      | u32     |  GET |  direction (in/out) of GPIO-TOPBOARD pin&lt;br /&gt;
   302      | u32     |  SET |  control the GPIO-TOPBOARD pin direction (input or output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   303..310 |         |  GET |  n/a (reserved)&lt;br /&gt;
   303..310 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   311..342 | f32 (a) |  GET |  AD: recalculated value (float) of A/D input&lt;br /&gt;
   311..342 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   343..374 | a       |  GET |  AD: input identification / name (text)&lt;br /&gt;
   343..374 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   375..406 | a       |  GET |  AD: input unit name (text)&lt;br /&gt;
   375..406 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   407..427 |         |  GET |  n/a (reserved)&lt;br /&gt;
   407..427 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   428      | u32     |  GET |  AD: user-selected type of the OpAmp chip (HW SDS) (0 = AD) (9 = LMV) &lt;br /&gt;
   428      |         |  SET |  n/a (read-only) (configuration to be done via web admin) - note. this must match the HW&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   429      | u32     |  GET |  AD: raw value of Vbatt (raw ADC value). To convert use: Vbatt = (raw * 3.3)/2048 (result in Volts)&lt;br /&gt;
   429      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   430      | u32     |  GET |  AD: value of VrefInt in miliVolts (typical value: 3300)&lt;br /&gt;
   430      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   431..438 | u32 (a) |  GET |  AD: raw value of A/D input in 12bits (0..4095) - for all SDS variants (64, 128 and 512)&lt;br /&gt;
   431..438 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   439..446 | u32 (a) |  GET |  AD: raw value of A/D input in 16bits (0..65535) - available only for the 512 SDS variant&lt;br /&gt;
   439..446 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   447..462 |         |  GET |  n/a (reserved)&lt;br /&gt;
   447..462 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   463..469 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [0]&lt;br /&gt;
   463..469 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   470..476 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [1]&lt;br /&gt;
   470..476 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   477..483 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [2]&lt;br /&gt;
   477..483 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   484..490 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [3]&lt;br /&gt;
   484..490 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   491..497 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [4]&lt;br /&gt;
   491..497 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   498..504 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [5]&lt;br /&gt;
   498..504 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   505..511 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [6]&lt;br /&gt;
   505..511 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   512..518 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [7]&lt;br /&gt;
   512..518 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   519..991 |         |  GET |  n/a (reserved)&lt;br /&gt;
   519..991 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   992      | u32     |  GET |  UTC timestamp (localtime) of the moment, when local clock gets to 23:59:59 (= last second of this day)&lt;br /&gt;
   992      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   993      | u32     |  GET |  UTC timestamp (localtime) marking a start of yesterday (as a moment since when we capture a new record) (or 0 = if there is no record for yesterday)&lt;br /&gt;
   993      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   994      | u32     |  GET |  UTC timestamp (localtime) marking a start of today (or a moment of SDS power on), since when a today's record is captured&lt;br /&gt;
   994      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   995      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T0 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   995      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   996      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T1 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   996      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   997      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T0 tariff being active&lt;br /&gt;
   997      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   998      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T1 tariff being active&lt;br /&gt;
   998      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   999      | u32     |  GET |  immediate state of the global Tariff Input (0 = T0 is active right now) (!0 = T1 is active right now)&lt;br /&gt;
   999      | u32     |  SET |  &amp;quot;manual&amp;quot; control of the global Tariff Input (write/control enabled only if the feature is set in web admin - control set to FULL-C)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1000..1031| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T0 tariff&lt;br /&gt;
  1000..1031| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1032..1063| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T1 tariff&lt;br /&gt;
  1032..1063| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1064..1095| u32 (a) |  GET |  [S0-input] time distance (in msec) between impulses&lt;br /&gt;
  1064..1095|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1096..1127| u32 (a) |  GET |  [S0-input] time (in msec) since the last captured impulse&lt;br /&gt;
  1096..1127|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1128..1159| u32     |  GET |  [S0-input] T0 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1128..1159|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1160..1191| u32     |  GET |  [S0-input] T1 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1160..1191|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1192..1223| u32     |  GET |  [S0-input] T0 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1192..1223|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1224..1255| u32     |  GET |  [S0-input] T1 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1224..1255|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1256..1499|         |  GET |  n/a (reserved)&lt;br /&gt;
  1256..1499|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1500..1531| a       |  GET |  [S0-input] master configuration struct for this input&lt;br /&gt;
  1500..1531| a       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1532..1999|         |  GET |  n/a (reserved)&lt;br /&gt;
  1532..1999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2000..2063| u32 (a) |  GET |  [1-W BUS (A)] device status&lt;br /&gt;
  2000..2063|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2100..2163| a       |  GET |  [1-W BUS (A)] master configuration struct for this OneWire device&lt;br /&gt;
  2100..2163|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2200..2263| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (basic value)&lt;br /&gt;
  2200..2263|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2300..2363| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (additional value)&lt;br /&gt;
  2300..2363|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2364..2487|         |  GET |  n/a (reserved)&lt;br /&gt;
  2364..2487|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2488..2495| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (A)&lt;br /&gt;
  2488..2495|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2496      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (A)&lt;br /&gt;
  2496      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2497      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (A)&lt;br /&gt;
  2497      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2498      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (A)&lt;br /&gt;
  2498      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2499      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (A)&lt;br /&gt;
  2499      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2500..2563| u32 (a) |  GET |  [1-W BUS (B)] device status&lt;br /&gt;
  2500..2563|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2600..2663| a       |  GET |  [1-W BUS (B)] master configuration struct for this OneWire device&lt;br /&gt;
  2600..2663|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2700..2763| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (basic value)&lt;br /&gt;
  2700..2763|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2800..2863| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (additional value)&lt;br /&gt;
  2800..2863|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2864..2986|         |  GET |  n/a (reserved)&lt;br /&gt;
  2864..2986|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2986..2993| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (B)&lt;br /&gt;
  2986..2993|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2994      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (B)&lt;br /&gt;
  2994      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2995      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (B)&lt;br /&gt;
  2995      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2996      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (B)&lt;br /&gt;
  2996      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2997      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (B)&lt;br /&gt;
  2997      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2998      | u32     |  GET |  general 1-W Master Chip status: 1 = detecting; 2 or 4 = failure; 8 = working; 16 = disabled by user&lt;br /&gt;
  2998      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2999      | u32     |  GET |  general 1-W Master Chip status: detection-retry countdown (*10msec)&lt;br /&gt;
  2999      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3000      |         |  GET |  n/a (reserved)&lt;br /&gt;
  3000      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3001      | a       |  GET |  custom 24-byte string (readable via SNMP .8.80)&lt;br /&gt;
  3001      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3002      | a       |  GET |  custom 24-byte string (readable via SNMP .8.81)&lt;br /&gt;
  3002      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3003      | a       |  GET |  custom 16-byte string (readable via SNMP .8.82)&lt;br /&gt;
  3003      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3004      | a       |  GET |  custom 16-byte string (readable via SNMP .8.83)&lt;br /&gt;
  3004      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3005      | a       |  GET |  custom 16-byte string (readable via SNMP .8.84)&lt;br /&gt;
  3005      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3006..3799|         |  GET |  n/a (reserved)&lt;br /&gt;
  3006..3799|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3800      | u32     |  GET |  PVD Active - (nonzero:) main power failure detected&lt;br /&gt;
  3800      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3801      | u32     |  GET |  PVD Was Active - this flag is only cleared by reading this index 3801&lt;br /&gt;
  3801      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3802..3849|         |  GET |  n/a (reserved)&lt;br /&gt;
  3802..3849|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3850      | u32     |  GET |  SD Card - fully mounted and useable&lt;br /&gt;
  3850      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3851      | i32     |  GET |  latest file i/o error code&lt;br /&gt;
  3851      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3852      | u32     |  GET |  SD Card - Block Size in bytes (typically 512)&lt;br /&gt;
  3852      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3853      | u32     |  GET |  SD Card - CardType&lt;br /&gt;
  3853      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3854      | u32     |  GET |  SD Card - CID - ProductSN&lt;br /&gt;
  3854      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3855      | u32     |  GET |  statistic counter: SDcard: all init attempts (= successful + failed)&lt;br /&gt;
  3855      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3856      | u32     |  GET |  statistic counter: SDcard: failed init attempts&lt;br /&gt;
  3856      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3857      | u32     |  GET |  SD Card - Total Sector Count in KiB (size of the card)&lt;br /&gt;
  3857      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3858      | u32     |  GET |  statistic counter: SDcard: sector reads&lt;br /&gt;
  3858      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3859      | u32     |  GET |  statistic counter: SDcard: sector writes&lt;br /&gt;
  3859      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3860      | u32     |  GET |  statistic counter: SDcard: sector r/w failures&lt;br /&gt;
  3860      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3861      | u32     |  GET |  statistic counter: number of opened files&lt;br /&gt;
  3861      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3862..3999|         |  GET |  n/a (reserved)&lt;br /&gt;
  3862..3999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4000..4099| i32     |  GET |  Shared Variables: S00 through S99 - read&lt;br /&gt;
  4000..4099| i32     |  SET |  Shared Variables: S00 through S99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4100..4199| u32     |  GET |  Shared Variables: U00 through U99 - read&lt;br /&gt;
  4100..4199| u32     |  SET |  Shared Variables: U00 through U99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4200..4299| f32     |  GET |  Shared Variables: F00 through F99 - read&lt;br /&gt;
  4200..4299| f32     |  SET |  Shared Variables: F00 through F99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4300..4399| a       |  GET |  Shared Variables: T00 through T99 - read&lt;br /&gt;
  4300..4399| a       |  SET |  Shared Variables: T00 through T99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4400..4989|         |  GET |  n/a (reserved)&lt;br /&gt;
  4400..4989|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4990..4999| u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #1..#10 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
  4990..4999| u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #1..#10&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  5000..5127| u/i/f 32|  GET |  BackUp-RAM (FC version 0x08+) - write&lt;br /&gt;
  5000..5127| u/i/f 32|  SET |  BackUp-RAM (FC version 0x08+) - read&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  5128..11197 |       |  GET |  n/a (reserved)&lt;br /&gt;
  5128..11197 |       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  11198     | u32     |  GET |  mqtt_publish PUBLISH Fixed Header value ( 0b0011dqqr : d=DUP, qq=QOS, r=RETAIN ) &lt;br /&gt;
  11198     | u32     |  SET |  write ( default: 0b00110001 )&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  11199     | u/i 32  |  GET |  FW support for MQTT-c (0 == NOT present)&lt;br /&gt;
  11199     |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12200     | i32     |  GET |  work progress (and result) of mqtt_connect()&lt;br /&gt;
  12200     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12201     | i32     |  GET |  &amp;quot;CONNACK Connect Return&amp;quot; - result of mqtt_connect()&lt;br /&gt;
  12201     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12202     | i32     |  GET |  result of: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
  12202     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12203     | i32     |  GET |  MQTT protocol error counter (informative)&lt;br /&gt;
  12203     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12204..12208 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12204..12208 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12209     | i32     |  GET |  Subscribe Table - total number of available rows&lt;br /&gt;
  12209     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12210     | a       |  GET |  latest received Topic Name (sent from broker)&lt;br /&gt;
  12210     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12211..12241 | a    |  GET |  Subscribe Table: Topic Name for each table row&lt;br /&gt;
  12211..12241 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12242..12249 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12242..12249 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12250     | a       |  GET |  latest received Value (sent from broker)&lt;br /&gt;
  12250     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12251..12281 | a    |  GET |  Subscribe Table: actual Value for each table row&lt;br /&gt;
  12251..12281 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12282..12289 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12282..12289 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12290     | u32     |  GET |  timestamp for the latest received data (Topic) from broker&lt;br /&gt;
  12290     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12291..12321 | u32 (a) |  GET |  Subscribe Table: timestamp for the last Value update, for each table row&lt;br /&gt;
  12291..12321 |         |  SET |  n/a&lt;br /&gt;
 --------------+------+--+---+--+--&lt;br /&gt;
  12322..12398 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12322..12398 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12399     | u/i 32  |  GET |  FW support for MODBUS-TCP-c (0 == NOT present)&lt;br /&gt;
  12399     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12400     | i32     |  GET |  work progress (and result) of modbus_tcp_connect()&lt;br /&gt;
  12400     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12401     | i32     |  GET |  progress/result for function 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
  12401     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12402     | i32     |  GET |  progress/result for function 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
  12402     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12403     | i32     |  GET |  progress/result for function 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
  12403     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12404     | i32     |  GET |  progress/result for function 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
  12404     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12405     | i32     |  GET |  progress/result for function 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
  12405     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12406     | i32     |  GET |  progress/result for function 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
  12406     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12407..12414 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12407..12414 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12415     | i32     |  GET |  progress/result for function 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
  12415     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12416     | i32     |  GET |  progress/result for function 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
  12416     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12417..12462 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12417..12462 |      |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12463     | u/i 32  |  GET |  latest Unit Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12463     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12464     | u/i 32  |  GET |  latest Transaction Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12464     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12465     | u/i 32  |  GET |  timestamp of the latest received message&lt;br /&gt;
  12465     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12466     | u/i 32  |  GET |  a count of received items inside the latest received message&lt;br /&gt;
  12466     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12467     | u/i 32  |  GET |  latest received Unit Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12467     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12468     | u/i 32  |  GET |  latest received Transaction Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12468     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12469     | u/i 32  |  GET |  an address of the first coil/input/register item (maps to a value in 12470)&lt;br /&gt;
  12469     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12470..12719 | i32 (a) |  GET |  received values (latest received message contents)&lt;br /&gt;
  12470..12719 |         |  SET |  n/a &lt;br /&gt;
 --------------+---------+------+--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Poznámky''' &lt;br /&gt;
&lt;br /&gt;
Položky obsahující: &amp;quot;konfigurační struktura&amp;quot; vyžadují dostatečně velký prostor pro uložení výsledku (při zavolání SDS_get_a() funkce). V takovém případě se do vámi určené cílové oblasti ukládá celý &amp;quot;struct&amp;quot; který obsahuje všechny potřebné údaje patřící pod danou položku (názvy, hodnoty, atd.). Pro detaily je nejlépe podívat se přímo na aktuální [[FULL-C:_set_and_get:_detailed|příklady]], které přesně popisují postup pro každý typ takové struktury - a vysvětlují tuto poznámku svým kódem.&lt;br /&gt;
&lt;br /&gt;
Indexy označené jako '''(a)''' lze ''blokově číst'' (pozor, označené specificky jako &amp;quot;a v závorce&amp;quot;). Vždy ale lze ''blokové čtení'' (tj. čtení více indexů najednou, za sebou, v rámci povoleného rozsahu) provést pouze od prvního indexu v bloku (ne od dalších v bloku).&lt;br /&gt;
Příklad: indexy 1000 až 1031 lze přečíst jako jeden souvislý blok, když se začne číst od prvního indexu v bloku (tj. 1000). Počet následně čtených indexů se udává dalším parametrem při volání SDS_get_a() funkce.&lt;br /&gt;
Pokud se pokusíte číst blok indexů ne od začátku bloku, čtení selže - pokud blok indexů začíná na 1000 tak musíte požádat o čtení od indexu 1000, přičemž začátek od 1001 a výše selže.&lt;br /&gt;
&lt;br /&gt;
BackUp-RAM funkce je dostupná je pro firmware který poskytuje verzi FULL-C o hodnotě 0x08 nebo novější. BackUp-RAM je sada 32-bit hodnot, které lze zapisovat a číst, a které jsou (především) uchovány v paměti, která je zálohovaná baterií (tzn. drží hodnotu i po výpadku napájení, tak dlouho než se baterie vybije). Výhodou BackUp-RAM oproti DF je možnost přímého přístupu a rychlosti (naopak DF vyžaduje čtení a zápis celých stránek).&lt;br /&gt;
&lt;br /&gt;
Sdílené proměnné je potřeba nejprve definovat, aby je šlo použít, a aby k nim šlo přistupovat přes set/get funkce - viz specifická stránka na této wiki.&lt;br /&gt;
&lt;br /&gt;
Detaily (významy hodnot) pro položky ''MQTT klient'' a ''MODBUS-TCP klient'' jsou rozepsány na příslušných odpovídajících stránkách na této wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vysvětlení položek'''&lt;br /&gt;
&lt;br /&gt;
V tabulce výše jsou uvedeny informace, které naleznete na jednotlivých indexech. Nicméně popisy uvedené v této tabulce jsou velmi zkrácené, a je k nim tedy potřeba mnohem širší vysvětlení.&lt;br /&gt;
To naleznete na dalších stránkách v rámci této wiki, nebo se nás rovnou zeptejte (přes forum).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vstupy pro měření napětí'''&lt;br /&gt;
&lt;br /&gt;
Detaily k A/D vstupům jsou uvedeny [[SDS_2PR:_ADC_vstupy_a_kalibrace|zde]]. Pro psaní programu je důležité mapování '''index'''u na jednotlivé vstupy, viz [[SDS_2PR:_ADC_vstupy_a_kalibrace|tabulka]].&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=951</id>
		<title>FULL-C: set and get</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=951"/>
		<updated>2025-08-10T09:27:29Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Jak je FULL-C program připojen k hardware ==&lt;br /&gt;
&lt;br /&gt;
Základním důvodem pro existenci FULL-C programu na zařízení SDS je možnost číst stav hardware (např. opto-vstupy) a také hardware řídit (např. spínat relé).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je k dispozici sada C funkcí, které může program volat a které buď navrátí aktuální stav (&amp;quot;get&amp;quot; funkce), nebo stav změní (&amp;quot;set&amp;quot; funkce).&lt;br /&gt;
&lt;br /&gt;
Zde je seznam těchto funkcí:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i32(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_i64(unsigned int index, int64_t value);&lt;br /&gt;
   signed int SDS_get_i64(unsigned int index);&lt;br /&gt;
  &lt;br /&gt;
         void SDS_set_u32(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u64(unsigned int index, uint64_t value);&lt;br /&gt;
 unsigned int SDS_get_u64(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_f32(unsigned int index, float value);&lt;br /&gt;
        float SDS_get_f32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_a(unsigned int index, void *ptr, unsigned int len);&lt;br /&gt;
         void SDS_get_a(unsigned int index, void *ptr, unsigned int maxlen);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Historicky zde původně byly i tyto funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u(unsigned int index);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ty &amp;quot;nezmizely&amp;quot; jen byly '''přejmenovány''' (i na i32, u na u32). &lt;br /&gt;
Pokud je váš program používá, vše vám bude fungovat i nadále, ale co nejdříve jejich název ve svém programu přepište na nový.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detailní Příklady ===&lt;br /&gt;
&lt;br /&gt;
Přečtěte si nejprve celou tuto stránku, ať pochopíte princip. Následně se podívejte na [[FULL-C:_set_and_get:_detailed|jednotlivé příklady zde]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
Základem je použití přístupu k informacím prostřednictvím tzv. '''index'''u.&lt;br /&gt;
&lt;br /&gt;
Pod každou položkou (číselným '''index'''em) je schována odpovídající činnost nebo hodnota (např. '''index = 3''' vrátí přes &amp;quot;get&amp;quot; funkci aktuální hodnotu &amp;quot;UpTime&amp;quot;, viz tabulka).&lt;br /&gt;
&lt;br /&gt;
Každá položka však může mít jiný obsah (číslo nebo text): podle toho je potřeba zvolit správný přístup (správnou set\get funkci):&lt;br /&gt;
&lt;br /&gt;
  typ položky              | rozsah         | typ proměnné    | postfix set\get funkce&lt;br /&gt;
 --------------------------+----------------+-----------------+-------------------------&lt;br /&gt;
   signed 32-bit integer   |  -2^31..+2^31  |  int            |  _i32&lt;br /&gt;
   signed 64-bit integer   |  -2^63..+2^63  |  int64_t        |  _i32&lt;br /&gt;
   unsigned 32-bit integer |      0..+2^32  |  unsigned int   |  _u64&lt;br /&gt;
   unsigned 64-bit integer |      0..+2^64  |  uint64_t       |  _u64&lt;br /&gt;
   IP address              |  uchar[4]      |  unsigned int   |  _u32&lt;br /&gt;
   float                   |  IEEE-754      |  float          |  _f32&lt;br /&gt;
   string (text)           |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
   binary array            |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, bude při psaní programu potřeba správně vybrat postfix u dané funkce.&lt;br /&gt;
&lt;br /&gt;
Příklad: chceme zapsat desetinné číslo &amp;quot;numf&amp;quot;, v tom případě se jedná o typ &amp;quot;float numf;&amp;quot; a musíme použít ''SDS_set_f(index, numf);''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Varování: ačkoliv je většina indexů podobných jako u SDS (pro pole ''sys[]''), nemají všechny indexy stejný význam mezi SDS-C a FULL-C. Vždy používejte tu správnou tabulku pro každý programovací jazyk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u32 \ _i32 \ _f32 ==&lt;br /&gt;
&lt;br /&gt;
Základní funkce určené pro získání číselné hodnoty &amp;quot;z&amp;quot; SDS, popř. zápisu číselné hodnoty &amp;quot;do&amp;quot; SDS. Vždy se jedná o kombinaci ''index''u (který určuje o co máme zájem) a hodnoty (která je vždy 32 bitová, tj. 4 bajty, ale obsah těchto 4 bajtů už je různý - buď celočíselná hodnota bez nebo se znaménkem (nejvyšší bit), nebo desetinné číslo - floating point).&lt;br /&gt;
&lt;br /&gt;
Čtení hodnoty je potřeba pro zjištění aktuálního stavu (např. stav optického vstupu, nebo poslední známá teplota z čidla). Zápis se pak používá pro ovládání (např. sepnutí relé).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: ''čtení'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
unsigned int NTPtime;&lt;br /&gt;
NTPtime = SDS_get_u32(4);&lt;br /&gt;
printf(&amp;quot;Aktuální Epoch Time je %u (secs).\n&amp;quot;, NTPtime);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: ''čtení'' 32bitové hodnoty se znaménkem&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int NTPoffset;&lt;br /&gt;
NTPoffset = SDS_get_i32(26);&lt;br /&gt;
printf(&amp;quot;Offset pro NTP čas je: %d hod.\n&amp;quot;, NTPoffset);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Třetí příklad: ''čtení'' float hodnoty&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float AD_Rinput__in_user_units;&lt;br /&gt;
AD_Rinput__in_user_units = SDS_get_f32(311);&lt;br /&gt;
printf(&amp;quot;Resistance Measure Input value is: %0.3f \n&amp;quot;, AD_Rinput__in_user_units);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čtvrtý příklad: ''zápis'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// zapni RELE 1 (zápisem nenulové hodnoty na index [231], viz tabulka)&lt;br /&gt;
SDS_set_u32(231, 0xFF); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samozřejmě musíte pro každý index použít správný typ hodnoty (tzn.: ''unsigned int'' \ ''int'' \ ''float''). Přesné přiřazení naleznete v tabulce na konci této stránky.&lt;br /&gt;
&lt;br /&gt;
Pozn.: i když například víte, že hodnota může být například jenom 0 nebo 1 (příklad), tak vždy se zapisuje nebo čte všech 32bitů (unsigned int \ int \ float). Nepoužité bity jsou vždy nastaveny na nulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u64 \ _i64 ==&lt;br /&gt;
&lt;br /&gt;
Princip je identický jako pro _u32 a _i32 funkce. &lt;br /&gt;
&lt;br /&gt;
Vždy se podívejte do tabulky, jaké informace můžete v 64bitové formě dostat; většina jich je pouze ve 32bit formě.&lt;br /&gt;
To ale nevadí, protože přeci například není problém do proměnné typu uint64_t zapsat 32bitové číslo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _a ==&lt;br /&gt;
&lt;br /&gt;
Funkce pracující s polem dat (''SDS_get_a'', ''SDS_set_a'') vyžadují oproti ostatním set+get funkcím specifické parametry. Vždy se jedná o ukazatel na pole dat, a o informaci o velikosti tohoto pole.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: čtení textového parametru&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o velikosti 32 bajtů; tzn. sem se vleze až 31 znaků plus jeden ukončovací 0x00&lt;br /&gt;
char sysLoc[32];&lt;br /&gt;
&lt;br /&gt;
// SDS uloží text z indexu [2] do pole &amp;quot;sysLoc&amp;quot;, o maximální velikosti 32 bajtů&lt;br /&gt;
SDS_get_a(2, (void *)sysLoc, 32);&lt;br /&gt;
&lt;br /&gt;
// a můžeme se podívat na výsledek (výpis do konzole)&lt;br /&gt;
printf(&amp;quot;Nastavená system location: %s \n&amp;quot;, sysLoc);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: čtení pole údajů - '''pouze''' položky z indexu označeného (a) v tabulce indexů&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o 8 položkách, které obsahuje prvky typu &amp;quot;unsigned int&amp;quot; (každý tento prvek má velikost: 4 bajty)&lt;br /&gt;
unsigned int OPTOvalues[8];&lt;br /&gt;
 &lt;br /&gt;
// SDS zapíše 8 pozic od indexu [151] do pole OPTOvalues&lt;br /&gt;
// maximální velikost zápisu = 8*4 , tzn. 8 položek v poli OPTOvalues, každá o 4 bajtech&lt;br /&gt;
SDS_get_a(151, (void *)OPTOvalues, 8 * 4);&lt;br /&gt;
&lt;br /&gt;
// a muzeme pristupovat na jednotlive polozky (jejich obsah je platny vuci okamziku zavolani GET funkce)&lt;br /&gt;
if (0 == OPTOvalues[0]) ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pro tyto přístupy je potřeba uvést, že blokové čtení funguje jen vždy od prvního indexu pro daný blok indexů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na zcela stejném přístupu funguje '''SDS_set_a()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Úplné detaily a všechny příklady ==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Detailní přehled, doplněný o příklady ve FULL-C, naleznete zde: [[FULL-C: set and get: detailed]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tabulka ==&lt;br /&gt;
&lt;br /&gt;
Podle typu každé položky lze použít jen právě tu danou specifickou funkci (_i32\_u32\_f32\_a\_i64\_u64), viz následující tabulka. &lt;br /&gt;
&lt;br /&gt;
Je li také uveden klíč &amp;quot;(a)&amp;quot;, lze mimo přístup k jedinému indexu využít blokový přístup pomocí funkce SDS_get_a(), která přečte určený počet indexů za sebou a uloží je do připraveného pole (toho se využívá při blokovém čtení většího počtu za-sebou ležících položek, např. blokové čtení stavu všech optovstupů atd.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   index    | i\u\f\a |  dir |  comment&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   0        | u32     |  GET |  firmware PAIRCODE (SDS device master-type identification)&lt;br /&gt;
   0        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   1        | u32     |  GET |  count of actually logged-in users (logged-in to SDS web admin)&lt;br /&gt;
   1        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   2        | u32     |  GET |  unique ID for SDS (serial number assigned during manufacturing)&lt;br /&gt;
   2        | a       |  GET |  sysLocation (user configured text)&lt;br /&gt;
   2        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   3        | u32     |  GET |  uptime (increased by 1 each every 10msec) (example: 100 = 1 sec)&lt;br /&gt;
   3        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   4        | u32     |  GET |  LOCAL time (NTP UTC Epoch, with GMT-offset and DST-offset applied), value in seconds&lt;br /&gt;
   4        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   5        | u32     |  GET |  LOCAL time decomposition = value of DAY (1 through 31)&lt;br /&gt;
   5        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   6        | u32     |  GET |  LOCAL time decomposition = value of MONTH (1 through 12)&lt;br /&gt;
   6        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   7        | u32     |  GET |  LOCAL time decomposition = value of YEAR (full value)&lt;br /&gt;
   7        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   8        | u32     |  GET |  LOCAL time decomposition = value of HOUR (0 through 23)&lt;br /&gt;
   8        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   9        | u32     |  GET |  LOCAL time decomposition = value of MINUTE (0 through 59)&lt;br /&gt;
   9        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   10       | u32     |  GET |  LOCAL time decomposition = value of SECOND (0 through 59)&lt;br /&gt;
   10       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   11       | u32     |  GET |  LOCAL time decomposition = day-of-week number = number of days since Sunday (0 to 6)&lt;br /&gt;
   11       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   12       | u32     |  GET |  SDS device IP address (web admin IP)&lt;br /&gt;
   12       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   13..15   |         |  GET |  n/a (reserved)&lt;br /&gt;
   13..15   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   16       | u32     |  GET |  network gateway IP address&lt;br /&gt;
   16       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   17..19   |         |  GET |  n/a (reserved)&lt;br /&gt;
   17..19   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   20       | u32     |  GET |  network IP MASK&lt;br /&gt;
   20       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   21       | a       |  GET |  SNMPv3 - EngineID (FC: prepare buffer for 32 chars + trailing zero)&lt;br /&gt;
   21       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   22       | u32     |  GET |  SNMPv3 - Engine Boots &lt;br /&gt;
   22       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   23       | u32     |  GET |  SNMPv3 - Engine Time &lt;br /&gt;
   23       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   24       | u32     |  GET |  Ethernet Link Status&lt;br /&gt;
   24       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   25       | u32     |  GET |  Ethernet Link Speed (0, 10 or 100)&lt;br /&gt;
   25       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   26       | i32     |  GET |  read NTP GMT offset (-11 .. 11) = offset, in hour(s), between UTC and LOCAL time&lt;br /&gt;
   26       | i32     |  SET |  set NTP GMT offset (warning: this is not stored to permanent memory - use web admin to store it permanently)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   27       | u32     |  GET |  validity of the assigned IP address (0 = SDS does not have any IP address assigned, at the moment)&lt;br /&gt;
   27       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   28       | u32     |  GET |  timestamp of last change (assignment) of IP address &lt;br /&gt;
   28       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   29       | u32     |  GET |  state of DHCP client (0 = disabled, OR: enabled = status value of 1 .. 11)&lt;br /&gt;
   29       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   30       | u32     |  GET |  DHCP lease time (secs) value&lt;br /&gt;
   30       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   31       | u32     |  GET |  MAC[0] (always use only the lowest 8 bits, for each item)&lt;br /&gt;
   31       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   32       | u32     |  GET |  MAC[1]&lt;br /&gt;
   32       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   33       | u32     |  GET |  MAC[2]&lt;br /&gt;
   33       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   34       | u32     |  GET |  MAC[3]&lt;br /&gt;
   34       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   35       | u32     |  GET |  MAC[4]&lt;br /&gt;
   35       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   36       | u32     |  GET |  MAC[5]&lt;br /&gt;
   36       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   37..39   |         |  GET |  n/a (reserved)&lt;br /&gt;
   37..39   |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   40       | u32     |  GET |  SoC power-up or reset reason (64/128 = read only LSB: 8 bits) (512 = read all 32 bits)&lt;br /&gt;
   40       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   41       | a       |  GET |  OEM branding (login web page) [32 chars]&lt;br /&gt;
   41       | a       |  SET |  set custom OEM branding (login web page) [32 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   42       | a       |  GET |  OEM branding (welcome web page) [128 chars]&lt;br /&gt;
   42       | a       |  SET |  set custom OEM branding (welcome web page) [128 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   43       | u32     |  GET |  NTP-server IP address&lt;br /&gt;
   43       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   44       | u32     |  GET |  NTP-client status (0 = NOT synchronized)&lt;br /&gt;
   44       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   45       | u32     |  GET |  UpTime value - units: msec (uptime is constantly counted since then latest SDS FW boot)&lt;br /&gt;
   45       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   46       | u32     |  GET |  temperature of SoC - the RAW value (you have to manually recalculate this raw value to get degC)&lt;br /&gt;
   46       | i32     |  GET |  temperature of SoC - already recalculated to degC (SDS does have, and uses, all the required calibration info)&lt;br /&gt;
   46       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   48..60   |         |  GET |  n/a (reserved)&lt;br /&gt;
   48..60   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   61       | u32     |  GET |  read this to get a 32-bit Random Number (HW RNG)&lt;br /&gt;
   61       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   62..63   |         |  GET |  n/a (reserved)&lt;br /&gt;
   62..63   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   64       | u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #0 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
   64       | u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #0&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   65       | u32     |  GET |  get state of the DST automatic (0 = not used) (1 = DST used and DST shift is applied) (2 = DST used but NO shift applied)&lt;br /&gt;
   65       | u32     |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   66       | u32     |  GET |  DNS-server IP address&lt;br /&gt;
   66       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   67       | u32     |  GET |  info about SDS device IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   67       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   68       | u32     |  GET |  info about DNS server IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   68       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   69       |         |  GET |  n/a (reserved) &lt;br /&gt;
   69       |         |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   70       | u32     |  GET |  DNS RESOLV - actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done or finished yet)&lt;br /&gt;
   70       | u32     |  SET |  write 0xE4A5ECAC to manually clear the WHOLE internal DNS cache (will force fresh DNS requests once dns_resolv() is again called by your program)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   71       | u32     |  GET |  DNS RESOLV - source of the latest IP result, as requested by dns_resolv() function (0 = none, 1 = direct from DNS-server response, 2 = from internal DNS cache)&lt;br /&gt;
   71       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   72..77   |         |  GET |  n/a (reserved) &lt;br /&gt;
   72..77   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   78       | u32     |  GET |  SDS HW availability detail (information): 0 = single PWM output / 4 = four PWM outputs&lt;br /&gt;
   78       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   79       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DP&amp;quot; (newer HW version) / 0 = basic BIG (no DP)&lt;br /&gt;
   79       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   80       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DS84&amp;quot; / 0 = no DS84&lt;br /&gt;
   80       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   81..84   |         |  GET |  n/a (reserved) &lt;br /&gt;
   81..84   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   85       | u32     |  GET |  SDS module type (BIG, BIG2 or STSW) discrimination:  0 = STSW or SMALL / 1 = BIG / 2 = BIG2&lt;br /&gt;
   85       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   86       | u32     |  GET |  FC: actual state (running, uploading, failed etc.) of the FULL-C program (0, 1, 2, 4, 8, 16, 32, 64)&lt;br /&gt;
   86       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   87       | u32     |  GET |  FC: unique identifier of the actually uploaded FULL-C program&lt;br /&gt;
   87       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   88       |         |  GET |  n/a (reserved) &lt;br /&gt;
   88       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   89       | u32     |  GET |  SDS IP-WatchDog: state (0 = OFF)&lt;br /&gt;
   89       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   90       | u32     |  GET |  SDS IP-WatchDog: last known RTT (msecs)&lt;br /&gt;
   90       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   91       | u32     |  GET |  SDS IP-WatchDog: logical output status&lt;br /&gt;
   91       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   92..131  |         |  GET |  n/a (reserved)&lt;br /&gt;
   92..131  |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   132      | u32     |  GET |  FC: UTC time value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   132      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   133      | u32     |  GET |  FC: UpTime value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   133      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   134      | a       |  GET |  FC: archived text of the last FC error&lt;br /&gt;
   134      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   135      | u32     |  GET |  FC: number of FC-WDF restarts of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   135      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   136      | u32     |  GET |  FC: total count of all FC program starts, since the SDS boot&lt;br /&gt;
   136      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   137      | u32     |  GET |  read an actual SDS CPU cycle counter (number of executed instructions since power-up/reboot), continuously wraps around, (1 step = approx. 2 nsec)&lt;br /&gt;
   137      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   138      | u32     |  GET |  get SDS internal RTC power-on status (0 = invalid data after powerup in RTC) (1 = RTC data OK and were used on powerup) &lt;br /&gt;
   138      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   139      | u32     |  GET |  NTP true actual raw epoch-time (secs since Linux Epoch) = clean UTC with *no* GMT nor DST offset applied&lt;br /&gt;
   139      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   140      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:401)&lt;br /&gt;
   140      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:401)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   141      | a       |  GET |  FC: custom TRAP variable - read (TRAP:402)&lt;br /&gt;
   141      | a       |  SET |  FC: custom TRAP variable - write to change (TRAP:402) (note. max 32 characters)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   142      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:403)&lt;br /&gt;
   142      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:403)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   143      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:404)&lt;br /&gt;
   143      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:404)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   144      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:405)&lt;br /&gt;
   144      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:405)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   145      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:406)&lt;br /&gt;
   145      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:406)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   146      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:407)&lt;br /&gt;
   146      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:407)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   147      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:408)&lt;br /&gt;
   147      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:408)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   148      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:409)&lt;br /&gt;
   148      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:409)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   149      |         |  GET |  n/a (reserved)&lt;br /&gt;
   149      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   150      |         |  GET |  FC: shared-variables access control - read state of the access control&lt;br /&gt;
   150      |         |  SET |  FC: shared-variables access control - use this to force a user-login in order to access the shared variables (0 = access without login is enabled)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   151..182 | u32 (a) |  GET |  OPTO1..OPTO32 status (warning: 0 = input ACTIVE = with signal) (non-zero = input not active = no signal)&lt;br /&gt;
   151..182 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   183      | u32     |  GET |  SDS FW date stamp (or just 0x00000000 for a very old firmware) - use this to verify the features or to ask user to update the firmware to a required newer version&lt;br /&gt;
   183      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   184      | u32     |  GET |  FC: information about how this actual running program was started (0 = none) (1 = normal) (2 = fc-wdg or manual restart) (4 = freshly loaded)&lt;br /&gt;
   184      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   185      | u32     |  GET |  FC: actual FULL-C WatchDog (decreasing) timeout counter value, v msec&lt;br /&gt;
   185      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   186      | u32     |  GET |  (common) frequency for PWM3 and PWM4 generator (1Hz .. 5MHz)&lt;br /&gt;
   186      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   187      | u32     |  GET |  PWM3 duty-cycle percent (0..100 [%])&lt;br /&gt;
   187      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   188      | u32     |  GET |  PWM3 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   188      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   189      | u32     |  GET |  PWM4 duty-cycle percent (0..100 [%])&lt;br /&gt;
   189      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   190      | u32     |  GET |  PWM4 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   190      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   191      | u32     |  GET |  (common) frequency for PWM1 and PWM2 generator (1Hz .. 5MHz)&lt;br /&gt;
   191      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   192      | u32     |  GET |  PWM1 duty-cycle percent (0..100 [%])&lt;br /&gt;
   192      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   193      | u32     |  GET |  PWM1 HW: read direct &amp;quot;pulse&amp;quot; (compare) register value&lt;br /&gt;
   193      | u32     |  SET |  PWM1 HW: write to direct &amp;quot;pulse&amp;quot; (compare) register value &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   194      | u32     |  GET |  reserved&lt;br /&gt;
   194      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   195      | u32     |  GET |  reserved&lt;br /&gt;
   195      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   196..228 | u32 (a) |  GET |  RELAY1..RELAY32 - &amp;quot;who&amp;quot; controls this output&lt;br /&gt;
   196..228 | u32     |  SET |  RELAY1..RELAY32 - (0 = manual = user via web) (2 = FULL-C) (4 = SDS IPwdg)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   229..230 |         |  GET |  n/a (reserved)&lt;br /&gt;
   229..230 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   231..262 | u32 (a) |  GET |  RELAY1..RELAY32 - output status (0 = off)&lt;br /&gt;
   231..262 | u32     |  SET |  RELAY1..RELAY32 - output status control (0 = off) (!0 = coil activated)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   263..265 |         |  GET |  n/a (reserved)&lt;br /&gt;
   263..265 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   266..297 | a       |  GET |  RELAY1..RELAY32 - identification/name (text, see webadmin)&lt;br /&gt;
   266..297 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   298..300 |         |  GET |  n/a (reserved)&lt;br /&gt;
   298..300 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   301      | u32     |  GET |  status (log0/log1) of GPIO-TOPBOARD pin&lt;br /&gt;
   301      | u32     |  SET |  control the GPIO-TOPBOARD pin value (if direction is set to output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   302      | u32     |  GET |  direction (in/out) of GPIO-TOPBOARD pin&lt;br /&gt;
   302      | u32     |  SET |  control the GPIO-TOPBOARD pin direction (input or output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   303..310 |         |  GET |  n/a (reserved)&lt;br /&gt;
   303..310 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   311..342 | f32 (a) |  GET |  AD: recalculated value (float) of A/D input&lt;br /&gt;
   311..342 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   343..374 | a       |  GET |  AD: input identification / name (text)&lt;br /&gt;
   343..374 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   375..406 | a       |  GET |  AD: input unit name (text)&lt;br /&gt;
   375..406 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   407..427 |         |  GET |  n/a (reserved)&lt;br /&gt;
   407..427 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   428      | u32     |  GET |  AD: user-selected type of the OpAmp chip (HW SDS) (0 = AD) (9 = LMV) &lt;br /&gt;
   428      |         |  SET |  n/a (read-only) (configuration to be done via web admin) - note. this must match the HW&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   429      | u32     |  GET |  AD: raw value of Vbatt (raw ADC value). To convert use: Vbatt = (raw * 3.3)/2048 (result in Volts)&lt;br /&gt;
   429      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   430      | u32     |  GET |  AD: value of VrefInt in miliVolts (typical value: 3300)&lt;br /&gt;
   430      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   431..438 | u32 (a) |  GET |  AD: raw value of A/D input in 12bits (0..4095) - for all SDS variants (64, 128 and 512)&lt;br /&gt;
   431..438 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   439..446 | u32 (a) |  GET |  AD: raw value of A/D input in 16bits (0..65535) - available only for the 512 SDS variant&lt;br /&gt;
   439..446 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   447..462 |         |  GET |  n/a (reserved)&lt;br /&gt;
   447..462 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   463..469 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [0]&lt;br /&gt;
   463..469 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   470..476 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [1]&lt;br /&gt;
   470..476 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   477..483 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [2]&lt;br /&gt;
   477..483 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   484..490 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [3]&lt;br /&gt;
   484..490 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   491..497 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [4]&lt;br /&gt;
   491..497 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   498..504 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [5]&lt;br /&gt;
   498..504 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   505..511 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [6]&lt;br /&gt;
   505..511 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   512..518 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [7]&lt;br /&gt;
   512..518 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   519..991 |         |  GET |  n/a (reserved)&lt;br /&gt;
   519..991 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   992      | u32     |  GET |  UTC timestamp (localtime) of the moment, when local clock gets to 23:59:59 (= last second of this day)&lt;br /&gt;
   992      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   993      | u32     |  GET |  UTC timestamp (localtime) marking a start of yesterday (as a moment since when we capture a new record) (or 0 = if there is no record for yesterday)&lt;br /&gt;
   993      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   994      | u32     |  GET |  UTC timestamp (localtime) marking a start of today (or a moment of SDS power on), since when a today's record is captured&lt;br /&gt;
   994      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   995      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T0 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   995      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   996      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T1 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   996      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   997      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T0 tariff being active&lt;br /&gt;
   997      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   998      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T1 tariff being active&lt;br /&gt;
   998      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   999      | u32     |  GET |  immediate state of the global Tariff Input (0 = T0 is active right now) (!0 = T1 is active right now)&lt;br /&gt;
   999      | u32     |  SET |  &amp;quot;manual&amp;quot; control of the global Tariff Input (write/control enabled only if the feature is set in web admin - control set to FULL-C)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1000..1031| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T0 tariff&lt;br /&gt;
  1000..1031| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1032..1063| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T1 tariff&lt;br /&gt;
  1032..1063| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1064..1095| u32 (a) |  GET |  [S0-input] time distance (in msec) between impulses&lt;br /&gt;
  1064..1095|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1096..1127| u32 (a) |  GET |  [S0-input] time (in msec) since the last captured impulse&lt;br /&gt;
  1096..1127|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1128..1159| u32     |  GET |  [S0-input] T0 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1128..1159|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1160..1191| u32     |  GET |  [S0-input] T1 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1160..1191|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1192..1223| u32     |  GET |  [S0-input] T0 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1192..1223|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1224..1255| u32     |  GET |  [S0-input] T1 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1224..1255|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1256..1499|         |  GET |  n/a (reserved)&lt;br /&gt;
  1256..1499|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1500..1531| a       |  GET |  [S0-input] master configuration struct for this input&lt;br /&gt;
  1500..1531| a       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1532..1999|         |  GET |  n/a (reserved)&lt;br /&gt;
  1532..1999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2000..2063| u32 (a) |  GET |  [1-W BUS (A)] device status&lt;br /&gt;
  2000..2063|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2100..2163| a       |  GET |  [1-W BUS (A)] master configuration struct for this OneWire device&lt;br /&gt;
  2100..2163|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2200..2263| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (basic value)&lt;br /&gt;
  2200..2263|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2300..2363| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (additional value)&lt;br /&gt;
  2300..2363|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2364..2487|         |  GET |  n/a (reserved)&lt;br /&gt;
  2364..2487|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2488..2495| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (A)&lt;br /&gt;
  2488..2495|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2496      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (A)&lt;br /&gt;
  2496      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2497      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (A)&lt;br /&gt;
  2497      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2498      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (A)&lt;br /&gt;
  2498      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2499      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (A)&lt;br /&gt;
  2499      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2500..2563| u32 (a) |  GET |  [1-W BUS (B)] device status&lt;br /&gt;
  2500..2563|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2600..2663| a       |  GET |  [1-W BUS (B)] master configuration struct for this OneWire device&lt;br /&gt;
  2600..2663|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2700..2763| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (basic value)&lt;br /&gt;
  2700..2763|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2800..2863| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (additional value)&lt;br /&gt;
  2800..2863|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2864..2986|         |  GET |  n/a (reserved)&lt;br /&gt;
  2864..2986|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2986..2993| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (B)&lt;br /&gt;
  2986..2993|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2994      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (B)&lt;br /&gt;
  2994      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2995      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (B)&lt;br /&gt;
  2995      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2996      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (B)&lt;br /&gt;
  2996      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2997      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (B)&lt;br /&gt;
  2997      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2998      | u32     |  GET |  general 1-W Master Chip status: 1 = detecting; 2 or 4 = failure; 8 = working; 16 = disabled by user&lt;br /&gt;
  2998      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2999      | u32     |  GET |  general 1-W Master Chip status: detection-retry countdown (*10msec)&lt;br /&gt;
  2999      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3000      |         |  GET |  n/a (reserved)&lt;br /&gt;
  3000      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3001      | a       |  GET |  custom 24-byte string (readable via SNMP .8.80)&lt;br /&gt;
  3001      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3002      | a       |  GET |  custom 24-byte string (readable via SNMP .8.81)&lt;br /&gt;
  3002      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3003      | a       |  GET |  custom 16-byte string (readable via SNMP .8.82)&lt;br /&gt;
  3003      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3004      | a       |  GET |  custom 16-byte string (readable via SNMP .8.83)&lt;br /&gt;
  3004      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3005      | a       |  GET |  custom 16-byte string (readable via SNMP .8.84)&lt;br /&gt;
  3005      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3006..3799|         |  GET |  n/a (reserved)&lt;br /&gt;
  3006..3799|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3800      | u32     |  GET |  PVD Active - (nonzero:) main power failure detected&lt;br /&gt;
  3800      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3801      | u32     |  GET |  PVD Was Active - this flag is only cleared by reading this index 3801&lt;br /&gt;
  3801      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3802..3849|         |  GET |  n/a (reserved)&lt;br /&gt;
  3802..3849|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3850      | u32     |  GET |  SD Card - fully mounted and useable&lt;br /&gt;
  3850      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3851      | i32     |  GET |  latest file i/o error code&lt;br /&gt;
  3851      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3852      | u32     |  GET |  SD Card - Block Size in bytes (typically 512)&lt;br /&gt;
  3852      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3853      | u32     |  GET |  SD Card - CardType&lt;br /&gt;
  3853      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3854      | u32     |  GET |  SD Card - CID - ProductSN&lt;br /&gt;
  3854      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3855      | u32     |  GET |  statistic counter: SDcard: all init attempts (= successful + failed)&lt;br /&gt;
  3855      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3856      | u32     |  GET |  statistic counter: SDcard: failed init attempts&lt;br /&gt;
  3856      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3857      | u32     |  GET |  SD Card - Total Sector Count in KiB (size of the card)&lt;br /&gt;
  3857      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3858      | u32     |  GET |  statistic counter: SDcard: sector reads&lt;br /&gt;
  3858      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3859      | u32     |  GET |  statistic counter: SDcard: sector writes&lt;br /&gt;
  3859      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3860      | u32     |  GET |  statistic counter: SDcard: sector r/w failures&lt;br /&gt;
  3860      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3861      | u32     |  GET |  statistic counter: number of opened files&lt;br /&gt;
  3861      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3862..3999|         |  GET |  n/a (reserved)&lt;br /&gt;
  3862..3999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4000..4099| i32     |  GET |  Shared Variables: S00 through S99 - read&lt;br /&gt;
  4000..4099| i32     |  SET |  Shared Variables: S00 through S99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4100..4199| u32     |  GET |  Shared Variables: U00 through U99 - read&lt;br /&gt;
  4100..4199| u32     |  SET |  Shared Variables: U00 through U99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4200..4299| f32     |  GET |  Shared Variables: F00 through F99 - read&lt;br /&gt;
  4200..4299| f32     |  SET |  Shared Variables: F00 through F99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4300..4399| a       |  GET |  Shared Variables: T00 through T99 - read&lt;br /&gt;
  4300..4399| a       |  SET |  Shared Variables: T00 through T99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4400..4989|         |  GET |  n/a (reserved)&lt;br /&gt;
  4400..4989|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4990..4999| u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #1..#10 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
  4990..4999| u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #1..#10&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  5000..5127| u/i/f 32|  GET |  BackUp-RAM (FC version 0x08+) - write&lt;br /&gt;
  5000..5127| u/i/f 32|  SET |  BackUp-RAM (FC version 0x08+) - read&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  5128..11197 |       |  GET |  n/a (reserved)&lt;br /&gt;
  5128..11197 |       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  11198     | u32     |  GET |  mqtt_publish PUBLISH Fixed Header value ( 0b0011dqqr : d=DUP, qq=QOS, r=RETAIN ) &lt;br /&gt;
  11198     | u32     |  SET |  write ( default: 0b00110001 )&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  11199     | u/i 32  |  GET |  FW support for MQTT-c (0 == NOT present)&lt;br /&gt;
  11199     |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12200     | i32     |  GET |  work progress (and result) of mqtt_connect()&lt;br /&gt;
  12200     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12201     | i32     |  GET |  &amp;quot;CONNACK Connect Return&amp;quot; - result of mqtt_connect()&lt;br /&gt;
  12201     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12202     | i32     |  GET |  result of: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
  12202     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12203     | i32     |  GET |  MQTT protocol error counter (informative)&lt;br /&gt;
  12203     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12204..12208 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12204..12208 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12209     | i32     |  GET |  Subscribe Table - total number of available rows&lt;br /&gt;
  12209     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12210     | a       |  GET |  latest received Topic Name (sent from broker)&lt;br /&gt;
  12210     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12211..12241 | a    |  GET |  Subscribe Table: Topic Name for each table row&lt;br /&gt;
  12211..12241 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12242..12249 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12242..12249 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12250     | a       |  GET |  latest received Value (sent from broker)&lt;br /&gt;
  12250     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12251..12281 | a    |  GET |  Subscribe Table: actual Value for each table row&lt;br /&gt;
  12251..12281 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12282..12289 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12282..12289 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12290     | u32     |  GET |  timestamp for the latest received data (Topic) from broker&lt;br /&gt;
  12290     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12291..12321 | u32 (a) |  GET |  Subscribe Table: timestamp for the last Value update, for each table row&lt;br /&gt;
  12291..12321 |         |  SET |  n/a&lt;br /&gt;
 --------------+------+--+---+--+--&lt;br /&gt;
  12322..12398 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12322..12398 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12399     | u/i 32  |  GET |  FW support for MODBUS-TCP-c (0 == NOT present)&lt;br /&gt;
  12399     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12400     | i32     |  GET |  work progress (and result) of modbus_tcp_connect()&lt;br /&gt;
  12400     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12401     | i32     |  GET |  progress/result for function 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
  12401     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12402     | i32     |  GET |  progress/result for function 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
  12402     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12403     | i32     |  GET |  progress/result for function 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
  12403     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12404     | i32     |  GET |  progress/result for function 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
  12404     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12405     | i32     |  GET |  progress/result for function 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
  12405     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12406     | i32     |  GET |  progress/result for function 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
  12406     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12407..12414 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12407..12414 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12415     | i32     |  GET |  progress/result for function 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
  12415     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12416     | i32     |  GET |  progress/result for function 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
  12416     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12417..12462 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12417..12462 |      |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12463     | u/i 32  |  GET |  latest Unit Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12463     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12464     | u/i 32  |  GET |  latest Transaction Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12464     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12465     | u/i 32  |  GET |  timestamp of the latest received message&lt;br /&gt;
  12465     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12466     | u/i 32  |  GET |  a count of received items inside the latest received message&lt;br /&gt;
  12466     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12467     | u/i 32  |  GET |  latest received Unit Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12467     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12468     | u/i 32  |  GET |  latest received Transaction Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12468     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12469     | u/i 32  |  GET |  an address of the first coil/input/register item (maps to a value in 12470)&lt;br /&gt;
  12469     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12470..12719 | i32 (a) |  GET |  received values (latest received message contents)&lt;br /&gt;
  12470..12719 |         |  SET |  n/a &lt;br /&gt;
 --------------+---------+------+--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Poznámky''' &lt;br /&gt;
&lt;br /&gt;
Položky obsahující: &amp;quot;konfigurační struktura&amp;quot; vyžadují dostatečně velký prostor pro uložení výsledku (při zavolání SDS_get_a() funkce). V takovém případě se do vámi určené cílové oblasti ukládá celý &amp;quot;struct&amp;quot; který obsahuje všechny potřebné údaje patřící pod danou položku (názvy, hodnoty, atd.). Pro detaily je nejlépe podívat se přímo na aktuální [[FULL-C:_set_and_get:_detailed|příklady]], které přesně popisují postup pro každý typ takové struktury - a vysvětlují tuto poznámku svým kódem.&lt;br /&gt;
&lt;br /&gt;
Indexy označené jako '''(a)''' lze ''blokově číst'' (pozor, označené specificky jako &amp;quot;a v závorce&amp;quot;). Vždy ale lze ''blokové čtení'' (tj. čtení více indexů najednou, za sebou, v rámci povoleného rozsahu) provést pouze od prvního indexu v bloku (ne od dalších v bloku).&lt;br /&gt;
Příklad: indexy 1000 až 1031 lze přečíst jako jeden souvislý blok, když se začne číst od prvního indexu v bloku (tj. 1000). Počet následně čtených indexů se udává dalším parametrem při volání SDS_get_a() funkce.&lt;br /&gt;
Pokud se pokusíte číst blok indexů ne od začátku bloku, čtení selže - pokud blok indexů začíná na 1000 tak musíte požádat o čtení od indexu 1000, přičemž začátek od 1001 a výše selže.&lt;br /&gt;
&lt;br /&gt;
BackUp-RAM funkce je dostupná je pro firmware který poskytuje verzi FULL-C o hodnotě 0x08 nebo novější. BackUp-RAM je sada 32-bit hodnot, které lze zapisovat a číst, a které jsou (především) uchovány v paměti, která je zálohovaná baterií (tzn. drží hodnotu i po výpadku napájení, tak dlouho než se baterie vybije). Výhodou BackUp-RAM oproti DF je možnost přímého přístupu a rychlosti (naopak DF vyžaduje čtení a zápis celých stránek).&lt;br /&gt;
&lt;br /&gt;
Sdílené proměnné je potřeba nejprve definovat, aby je šlo použít, a aby k nim šlo přistupovat přes set/get funkce - viz specifická stránka na této wiki.&lt;br /&gt;
&lt;br /&gt;
Detaily (významy hodnot) pro položky ''MQTT klient'' a ''MODBUS-TCP klient'' jsou rozepsány na příslušných odpovídajících stránkách na této wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vysvětlení položek'''&lt;br /&gt;
&lt;br /&gt;
V tabulce výše jsou uvedeny informace, které naleznete na jednotlivých indexech. Nicméně popisy uvedené v této tabulce jsou velmi zkrácené, a je k nim tedy potřeba mnohem širší vysvětlení.&lt;br /&gt;
To naleznete na dalších stránkách v rámci této wiki, nebo se nás rovnou zeptejte (přes forum).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vstupy pro měření napětí'''&lt;br /&gt;
&lt;br /&gt;
Detaily k A/D vstupům jsou uvedeny [[SDS_2PR:_ADC_vstupy_a_kalibrace|zde]]. Pro psaní programu je důležité mapování '''index'''u na jednotlivé vstupy, viz [[SDS_2PR:_ADC_vstupy_a_kalibrace|tabulka]].&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=950</id>
		<title>FULL-C dns resolv functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=950"/>
		<updated>2025-08-10T08:19:11Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Síťové funkce: dotaz na přidělenou IP adresu pro DNS jméno ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS umožňuje odeslat dotaz na DNS server, za účelem zjištění IP adresy přidělené k DNS názvu, který je obsahem právě takového dotazu.&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem jsou k dispozici tyto dvě funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void dns_resolv(char *domainNameInput);&lt;br /&gt;
 unsigned int dns_resolv_status(unsigned int *IP0value, unsigned int *IP1value, unsigned int *IP2value, unsigned int *IP3value);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
SDS odesílá dotaz na DNS server, který je nastaven uživatelem SDS ve webové administraci zařízení (popř. je adresa DNS serveru získána z DHCP serveru, opět záleží na konfiguraci).&lt;br /&gt;
&lt;br /&gt;
Po odeslání dotazu se čeká na odpověď, přičemž FULL-C program pravidelně kontroluje stav voláním '''dns_resolv_status()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''POZOR : Maximální délka názvu DNS domény je interně omezena na 96 znaků !'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příklad ==&lt;br /&gt;
&lt;br /&gt;
V tomto příkladu odesílá SDS dotaz (textový název domény) na DNS server a zobrazuje případnou získanou odpověď (IP adresu).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
 char DNSname[96];&lt;br /&gt;
 unsigned int status;&lt;br /&gt;
 unsigned int IP0, IP1, IP2, IP3;&lt;br /&gt;
&lt;br /&gt;
 sprintf((char *)DNSname, &amp;quot;www.google.com&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;RESOLVING %s \n&amp;quot;, DNSname);&lt;br /&gt;
&lt;br /&gt;
 // start - select the new DNSname for all the subsequent status function calls&lt;br /&gt;
 dns_resolv(DNSname);&lt;br /&gt;
&lt;br /&gt;
 // get the first status value&lt;br /&gt;
 status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 // only if truly working, keep waiting&lt;br /&gt;
 while (512 == status)&lt;br /&gt;
 {&lt;br /&gt;
   // keep getting a new status, until it is different than 512&lt;br /&gt;
   status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // check the final status value&lt;br /&gt;
 if (513 == status)&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;GOT RESULT: IP = %u.%u.%u.%u\n&amp;quot;, IP0, IP1, IP2, IP3);&lt;br /&gt;
   // only in this case, we can use the IPx address&lt;br /&gt;
   // ... OK&lt;br /&gt;
&lt;br /&gt;
   // we can print the additional internal DNS cache status, for this particular domain&lt;br /&gt;
   // note. the value is valid only if the status is 512, otherwise not&lt;br /&gt;
   unsigned int ttl;&lt;br /&gt;
   ttl = SDS_get_u(70); // index [70] = actual TTL value for the selected DNS cache item &lt;br /&gt;
   printf(&amp;quot;DNS CACHE TTL VALUE IS %u SECONDS FOR DOMAIN %s\n&amp;quot;, ttl, DNSname);&lt;br /&gt;
 } else&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;DNS RESOLV FAILED (error %u) \n&amp;quot;, status);&lt;br /&gt;
   // in this case, the IPx adress is not valid, and you need to repeat the dns_resolv() call again&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interní DNS cache ==&lt;br /&gt;
&lt;br /&gt;
Po úspěšném provedení získání DNS překladu, kdy SDS odešle dotaz na určený DNS server, a získá z něj odpověď, &lt;br /&gt;
je výsledek k dispozici (dá se získat pomocí dns_resolv_status funkce).&lt;br /&gt;
&lt;br /&gt;
Funkce dns_resolv_status() vrací vždy výsledek toho úplně posledního dotazu, který byl vyvolán zavoláním funkce dns_resolv().&lt;br /&gt;
&lt;br /&gt;
Platná odpověď z DNS serveru je uložena do interní tabulky (DNS cache) v SDS. &lt;br /&gt;
&lt;br /&gt;
Pokud je zbývající hodnota TTL větší než 0, bude ihned k dispozici odpověď z interní cache.&lt;br /&gt;
&lt;br /&gt;
Pokud záznam v interní cache není (nebo už vypršel), bude automaticky odeslána žádost o nový překlad na DNS server.&lt;br /&gt;
&lt;br /&gt;
Toto si řídí SDS interně.&lt;br /&gt;
&lt;br /&gt;
Váš program tedy vždy, když potřebuje IP adresu pro jakoukoliv doménu, tak vždy musí nejprve zavolat dns_resolv(). Tím se jednak vybere aktuální doména, pro kterou chcete získat platnou aktuální IP adresu (a lze ji tedy přečíst pomocí dns_resolv_status() funkce), a také se spustí mechanismus kontroly interní cache a eventuálního odeslání nového dotazu.&lt;br /&gt;
&lt;br /&gt;
Nový dotaz není odeslán automaticky, tedy SDS samo neodesílá nové dotazy, když položka v interní DNS cache vyprší. Toto máte plně pod kontrolou vy, a to tak, že voláte funkci dns_resolv(), která se teprve v ten moment (kdy ji ze svého programu zavoláte) rozhodne, jestli bude nový dotaz posílat, nebo ne (čistě dle stavu obsahu interní DNS cache). Pokud v cache není záznam pro danou doménu, nebo je ale už vypršel (TTL na nule), tak dojde k odeslání dotazu, a váš program pak musí čekat na odpověď (viz příklad výše, periodickým voláním dns_resolv_status(), kdy se průběžně zařídí dle vrácené hodnoty od této funkce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upozornění ==&lt;br /&gt;
&lt;br /&gt;
Starší FW mělo bug, kdy při vypršení TTL v interní cache nedošlo ke smazání položky v interni cache. Toto je samozřejmě problém, který je vyřešen v novém firmware.&lt;br /&gt;
&lt;br /&gt;
DNS cache je (záměrně) vymazána při:&lt;br /&gt;
* nahrání nového FULLC programu&lt;br /&gt;
* restartu zařízení SDS&lt;br /&gt;
&lt;br /&gt;
DNS cache není vymazána při výpadku Ethernetového připojení.&lt;br /&gt;
&lt;br /&gt;
DNS cache lze ručně vymazat zapsáním hodnoty 0xE4A5ECAC do systémové proměnné na indexu [70]. Zápis této speciální hodnoty kompletně smaže interní DNS cache. Tato specifická funkcionalita vyžaduje aktuální firmware (bylo to přidáno až 08/2025).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stavové hodnoty ==&lt;br /&gt;
&lt;br /&gt;
Program musí použít volání funkce '''dns_resolv_status''' pro zjištění okamžitého stavu. Dokud nezískáte finální stavovou hodnotu, musíte tuto funkci volat opakovaně (nezapomeňte na vlastní bezpečnostní timeout).&lt;br /&gt;
&lt;br /&gt;
  dns_resolv_status()       význam&lt;br /&gt;
 -------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
  0                       |  klid, můžete odeslat DNS dotaz, funkce dns_resolv_status() současně nevrací platnou IP adresu (musíte nejprve spustit DNS překlad)&lt;br /&gt;
  512                     |  pracuje, dotaz odeslán (překlad nenalezen v interní cache), čekejte (funkce současně nevrací platnou IP adresu, ta bude až po dokončení překladu)&lt;br /&gt;
  513                     |  hotovo OK, do *resolvedIPaddressOutput byla zapsána IP adresa (4 bajty), a záznam v interní cache je platný a živý (zbývající TTL větší než 0)&lt;br /&gt;
  514                     |  odpověď nebyla získána (chyba) a současně nemáme záznam v interní DNS cache, takže funkce nevrací platnou IP adresu (musíte znovu začít s dotazem)&lt;br /&gt;
  515                     |  funkce byla zavolána s neplatnými parametry - nic nebylo provedeno, funkce nevrací platnou IP adresu&lt;br /&gt;
  516                     |  dotaz selhal, protože došlo k odpojení Ethernetu&lt;br /&gt;
  517                     |  dotaz selhal, protože došlo ke ztrátě vlastní přidělené IP adresy zařízení SDS (typicky když vyprší IP z DHCP a není ještě obnovena)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pokud funkce dns_resolv_status() vrátila hodnotu 513, je možné číst systémovou proměnnou z indexu [70] (uint32_t), která ukáže hodnotu TTL v momentu, kdy tuto hodnotu právě čtete. Lze takto sledovat, jak se postupně TTL snižuje (o 1 každou sekundu). Hodnota TTL odpovídá dané položce v interní cache, která byla určena právě posledním voláním funkce dns_resolv().&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=949</id>
		<title>FULL-C: set and get</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C:_set_and_get&amp;diff=949"/>
		<updated>2025-08-10T08:03:16Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Jak je FULL-C program připojen k hardware ==&lt;br /&gt;
&lt;br /&gt;
Základním důvodem pro existenci FULL-C programu na zařízení SDS je možnost číst stav hardware (např. opto-vstupy) a také hardware řídit (např. spínat relé).&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem je k dispozici sada C funkcí, které může program volat a které buď navrátí aktuální stav (&amp;quot;get&amp;quot; funkce), nebo stav změní (&amp;quot;set&amp;quot; funkce).&lt;br /&gt;
&lt;br /&gt;
Zde je seznam těchto funkcí:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i32(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_i64(unsigned int index, int64_t value);&lt;br /&gt;
   signed int SDS_get_i64(unsigned int index);&lt;br /&gt;
  &lt;br /&gt;
         void SDS_set_u32(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u64(unsigned int index, uint64_t value);&lt;br /&gt;
 unsigned int SDS_get_u64(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_f32(unsigned int index, float value);&lt;br /&gt;
        float SDS_get_f32(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_a(unsigned int index, void *ptr, unsigned int len);&lt;br /&gt;
         void SDS_get_a(unsigned int index, void *ptr, unsigned int maxlen);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Historicky zde původně byly i tyto funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void SDS_set_i(unsigned int index, signed int value);&lt;br /&gt;
   signed int SDS_get_i(unsigned int index);&lt;br /&gt;
 &lt;br /&gt;
         void SDS_set_u(unsigned int index, unsigned int value);&lt;br /&gt;
 unsigned int SDS_get_u(unsigned int index);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ty &amp;quot;nezmizely&amp;quot; jen byly '''přejmenovány''' (i na i32, u na u32). &lt;br /&gt;
Pokud je váš program používá, vše vám bude fungovat i nadále, ale co nejdříve jejich název ve svém programu přepište na nový.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Detailní Příklady ===&lt;br /&gt;
&lt;br /&gt;
Přečtěte si nejprve celou tuto stránku, ať pochopíte princip. Následně se podívejte na [[FULL-C:_set_and_get:_detailed|jednotlivé příklady zde]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
Základem je použití přístupu k informacím prostřednictvím tzv. '''index'''u.&lt;br /&gt;
&lt;br /&gt;
Pod každou položkou (číselným '''index'''em) je schována odpovídající činnost nebo hodnota (např. '''index = 3''' vrátí přes &amp;quot;get&amp;quot; funkci aktuální hodnotu &amp;quot;UpTime&amp;quot;, viz tabulka).&lt;br /&gt;
&lt;br /&gt;
Každá položka však může mít jiný obsah (číslo nebo text): podle toho je potřeba zvolit správný přístup (správnou set\get funkci):&lt;br /&gt;
&lt;br /&gt;
  typ položky              | rozsah         | typ proměnné    | postfix set\get funkce&lt;br /&gt;
 --------------------------+----------------+-----------------+-------------------------&lt;br /&gt;
   signed 32-bit integer   |  -2^31..+2^31  |  int            |  _i32&lt;br /&gt;
   signed 64-bit integer   |  -2^63..+2^63  |  int64_t        |  _i32&lt;br /&gt;
   unsigned 32-bit integer |      0..+2^32  |  unsigned int   |  _u64&lt;br /&gt;
   unsigned 64-bit integer |      0..+2^64  |  uint64_t       |  _u64&lt;br /&gt;
   IP address              |  uchar[4]      |  unsigned int   |  _u32&lt;br /&gt;
   float                   |  IEEE-754      |  float          |  _f32&lt;br /&gt;
   string (text)           |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
   binary array            |  len\maxlen    |  void* \ char*  |  _a&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, bude při psaní programu potřeba správně vybrat postfix u dané funkce.&lt;br /&gt;
&lt;br /&gt;
Příklad: chceme zapsat desetinné číslo &amp;quot;numf&amp;quot;, v tom případě se jedná o typ &amp;quot;float numf;&amp;quot; a musíme použít ''SDS_set_f(index, numf);''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Varování: ačkoliv je většina indexů podobných jako u SDS (pro pole ''sys[]''), nemají všechny indexy stejný význam mezi SDS-C a FULL-C. Vždy používejte tu správnou tabulku pro každý programovací jazyk.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u32 \ _i32 \ _f32 ==&lt;br /&gt;
&lt;br /&gt;
Základní funkce určené pro získání číselné hodnoty &amp;quot;z&amp;quot; SDS, popř. zápisu číselné hodnoty &amp;quot;do&amp;quot; SDS. Vždy se jedná o kombinaci ''index''u (který určuje o co máme zájem) a hodnoty (která je vždy 32 bitová, tj. 4 bajty, ale obsah těchto 4 bajtů už je různý - buď celočíselná hodnota bez nebo se znaménkem (nejvyšší bit), nebo desetinné číslo - floating point).&lt;br /&gt;
&lt;br /&gt;
Čtení hodnoty je potřeba pro zjištění aktuálního stavu (např. stav optického vstupu, nebo poslední známá teplota z čidla). Zápis se pak používá pro ovládání (např. sepnutí relé).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: ''čtení'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
unsigned int NTPtime;&lt;br /&gt;
NTPtime = SDS_get_u32(4);&lt;br /&gt;
printf(&amp;quot;Aktuální Epoch Time je %u (secs).\n&amp;quot;, NTPtime);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: ''čtení'' 32bitové hodnoty se znaménkem&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int NTPoffset;&lt;br /&gt;
NTPoffset = SDS_get_i32(26);&lt;br /&gt;
printf(&amp;quot;Offset pro NTP čas je: %d hod.\n&amp;quot;, NTPoffset);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Třetí příklad: ''čtení'' float hodnoty&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
float AD_Rinput__in_user_units;&lt;br /&gt;
AD_Rinput__in_user_units = SDS_get_f32(311);&lt;br /&gt;
printf(&amp;quot;Resistance Measure Input value is: %0.3f \n&amp;quot;, AD_Rinput__in_user_units);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Čtvrtý příklad: ''zápis'' 32bitové hodnoty bez znaménka&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// zapni RELE 1 (zápisem nenulové hodnoty na index [231], viz tabulka)&lt;br /&gt;
SDS_set_u32(231, 0xFF); &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Samozřejmě musíte pro každý index použít správný typ hodnoty (tzn.: ''unsigned int'' \ ''int'' \ ''float''). Přesné přiřazení naleznete v tabulce na konci této stránky.&lt;br /&gt;
&lt;br /&gt;
Pozn.: i když například víte, že hodnota může být například jenom 0 nebo 1 (příklad), tak vždy se zapisuje nebo čte všech 32bitů (unsigned int \ int \ float). Nepoužité bity jsou vždy nastaveny na nulu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _u64 \ _i64 ==&lt;br /&gt;
&lt;br /&gt;
Princip je identický jako pro _u32 a _i32 funkce. &lt;br /&gt;
&lt;br /&gt;
Vždy se podívejte do tabulky, jaké informace můžete v 64bitové formě dostat; většina jich je pouze ve 32bit formě.&lt;br /&gt;
To ale nevadí, protože přeci například není problém do proměnné typu uint64_t zapsat 32bitové číslo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Funkce _a ==&lt;br /&gt;
&lt;br /&gt;
Funkce pracující s polem dat (''SDS_get_a'', ''SDS_set_a'') vyžadují oproti ostatním set+get funkcím specifické parametry. Vždy se jedná o ukazatel na pole dat, a o informaci o velikosti tohoto pole.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
První příklad: čtení textového parametru&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o velikosti 32 bajtů; tzn. sem se vleze až 31 znaků plus jeden ukončovací 0x00&lt;br /&gt;
char sysLoc[32];&lt;br /&gt;
&lt;br /&gt;
// SDS uloží text z indexu [2] do pole &amp;quot;sysLoc&amp;quot;, o maximální velikosti 32 bajtů&lt;br /&gt;
SDS_get_a(2, (void *)sysLoc, 32);&lt;br /&gt;
&lt;br /&gt;
// a můžeme se podívat na výsledek (výpis do konzole)&lt;br /&gt;
printf(&amp;quot;Nastavená system location: %s \n&amp;quot;, sysLoc);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Druhý příklad: čtení pole údajů - '''pouze''' položky z indexu označeného (a) v tabulce indexů&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// definujeme si pole o 8 položkách, které obsahuje prvky typu &amp;quot;unsigned int&amp;quot; (každý tento prvek má velikost: 4 bajty)&lt;br /&gt;
unsigned int OPTOvalues[8];&lt;br /&gt;
 &lt;br /&gt;
// SDS zapíše 8 pozic od indexu [151] do pole OPTOvalues&lt;br /&gt;
// maximální velikost zápisu = 8*4 , tzn. 8 položek v poli OPTOvalues, každá o 4 bajtech&lt;br /&gt;
SDS_get_a(151, (void *)OPTOvalues, 8 * 4);&lt;br /&gt;
&lt;br /&gt;
// a muzeme pristupovat na jednotlive polozky (jejich obsah je platny vuci okamziku zavolani GET funkce)&lt;br /&gt;
if (0 == OPTOvalues[0]) ...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Pro tyto přístupy je potřeba uvést, že blokové čtení funguje jen vždy od prvního indexu pro daný blok indexů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Na zcela stejném přístupu funguje '''SDS_set_a()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Úplné detaily a všechny příklady ==&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
'''Detailní přehled, doplněný o příklady ve FULL-C, naleznete zde: [[FULL-C: set and get: detailed]]'''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tabulka ==&lt;br /&gt;
&lt;br /&gt;
Podle typu každé položky lze použít jen právě tu danou specifickou funkci (_i32\_u32\_f32\_a\_i64\_u64), viz následující tabulka. &lt;br /&gt;
&lt;br /&gt;
Je li také uveden klíč &amp;quot;(a)&amp;quot;, lze mimo přístup k jedinému indexu využít blokový přístup pomocí funkce SDS_get_a(), která přečte určený počet indexů za sebou a uloží je do připraveného pole (toho se využívá při blokovém čtení většího počtu za-sebou ležících položek, např. blokové čtení stavu všech optovstupů atd.).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   index    | i\u\f\a |  dir |  comment&lt;br /&gt;
 -----------+---------+------+--------------------------------------------------------------------------------------------------------&lt;br /&gt;
   0        | u32     |  GET |  firmware PAIRCODE (SDS device master-type identification)&lt;br /&gt;
   0        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   1        | u32     |  GET |  count of actually logged-in users (logged-in to SDS web admin)&lt;br /&gt;
   1        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   2        | u32     |  GET |  unique ID for SDS (serial number assigned during manufacturing)&lt;br /&gt;
   2        | a       |  GET |  sysLocation (user configured text)&lt;br /&gt;
   2        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   3        | u32     |  GET |  uptime (increased by 1 each every 10msec) (example: 100 = 1 sec)&lt;br /&gt;
   3        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   4        | u32     |  GET |  LOCAL time (NTP UTC Epoch, with GMT-offset and DST-offset applied), value in seconds&lt;br /&gt;
   4        |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   5        | u32     |  GET |  LOCAL time decomposition = value of DAY (1 through 31)&lt;br /&gt;
   5        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   6        | u32     |  GET |  LOCAL time decomposition = value of MONTH (1 through 12)&lt;br /&gt;
   6        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   7        | u32     |  GET |  LOCAL time decomposition = value of YEAR (full value)&lt;br /&gt;
   7        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   8        | u32     |  GET |  LOCAL time decomposition = value of HOUR (0 through 23)&lt;br /&gt;
   8        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   9        | u32     |  GET |  LOCAL time decomposition = value of MINUTE (0 through 59)&lt;br /&gt;
   9        |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   10       | u32     |  GET |  LOCAL time decomposition = value of SECOND (0 through 59)&lt;br /&gt;
   10       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   11       | u32     |  GET |  LOCAL time decomposition = day-of-week number = number of days since Sunday (0 to 6)&lt;br /&gt;
   11       |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   12       | u32     |  GET |  SDS device IP address (web admin IP)&lt;br /&gt;
   12       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   13..15   |         |  GET |  n/a (reserved)&lt;br /&gt;
   13..15   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   16       | u32     |  GET |  network gateway IP address&lt;br /&gt;
   16       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   17..19   |         |  GET |  n/a (reserved)&lt;br /&gt;
   17..19   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   20       | u32     |  GET |  network IP MASK&lt;br /&gt;
   20       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   21       | a       |  GET |  SNMPv3 - EngineID (FC: prepare buffer for 32 chars + trailing zero)&lt;br /&gt;
   21       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   22       | u32     |  GET |  SNMPv3 - Engine Boots &lt;br /&gt;
   22       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   23       | u32     |  GET |  SNMPv3 - Engine Time &lt;br /&gt;
   23       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   24       | u32     |  GET |  Ethernet Link Status&lt;br /&gt;
   24       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   25       | u32     |  GET |  Ethernet Link Speed (0, 10 or 100)&lt;br /&gt;
   25       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   26       | i32     |  GET |  read NTP GMT offset (-11 .. 11) = offset, in hour(s), between UTC and LOCAL time&lt;br /&gt;
   26       | i32     |  SET |  set NTP GMT offset (warning: this is not stored to permanent memory - use web admin to store it permanently)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   27       | u32     |  GET |  validity of the assigned IP address (0 = SDS does not have any IP address assigned, at the moment)&lt;br /&gt;
   27       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   28       | u32     |  GET |  timestamp of last change (assignment) of IP address &lt;br /&gt;
   28       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   29       | u32     |  GET |  state of DHCP client (0 = disabled, OR: enabled = status value of 1 .. 11)&lt;br /&gt;
   29       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   30       | u32     |  GET |  DHCP lease time (secs) value&lt;br /&gt;
   30       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   31       | u32     |  GET |  MAC[0] (always use only the lowest 8 bits, for each item)&lt;br /&gt;
   31       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   32       | u32     |  GET |  MAC[1]&lt;br /&gt;
   32       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   33       | u32     |  GET |  MAC[2]&lt;br /&gt;
   33       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   34       | u32     |  GET |  MAC[3]&lt;br /&gt;
   34       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   35       | u32     |  GET |  MAC[4]&lt;br /&gt;
   35       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   36       | u32     |  GET |  MAC[5]&lt;br /&gt;
   36       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   37..39   |         |  GET |  n/a (reserved)&lt;br /&gt;
   37..39   |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   40       | u32     |  GET |  SoC power-up or reset reason (64/128 = read only LSB: 8 bits) (512 = read all 32 bits)&lt;br /&gt;
   40       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   41       | a       |  GET |  OEM branding (login web page) [32 chars]&lt;br /&gt;
   41       | a       |  SET |  set custom OEM branding (login web page) [32 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   42       | a       |  GET |  OEM branding (welcome web page) [128 chars]&lt;br /&gt;
   42       | a       |  SET |  set custom OEM branding (welcome web page) [128 chars]&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   43       | u32     |  GET |  NTP-server IP address&lt;br /&gt;
   43       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   44       | u32     |  GET |  NTP-client status (0 = NOT synchronized)&lt;br /&gt;
   44       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   45       | u32     |  GET |  UpTime value - units: msec (uptime is constantly counted since then latest SDS FW boot)&lt;br /&gt;
   45       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   46       | u32     |  GET |  temperature of SoC - the RAW value (you have to manually recalculate this raw value to get degC)&lt;br /&gt;
   46       | i32     |  GET |  temperature of SoC - already recalculated to degC (SDS does have, and uses, all the required calibration info)&lt;br /&gt;
   46       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   48..60   |         |  GET |  n/a (reserved)&lt;br /&gt;
   48..60   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   61       | u32     |  GET |  read this to get a 32-bit Random Number (HW RNG)&lt;br /&gt;
   61       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   62..63   |         |  GET |  n/a (reserved)&lt;br /&gt;
   62..63   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   64       | u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #0 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
   64       | u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #0&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   65       | u32     |  GET |  get state of the DST automatic (0 = not used) (1 = DST used and DST shift is applied) (2 = DST used but NO shift applied)&lt;br /&gt;
   65       | u32     |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   66       | u32     |  GET |  DNS-server IP address&lt;br /&gt;
   66       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   67       | u32     |  GET |  info about SDS device IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   67       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   68       | u32     |  GET |  info about DNS server IP address origin (0=none, 1=manual, 2=dhcp)&lt;br /&gt;
   68       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   69       |         |  GET |  n/a (reserved) &lt;br /&gt;
   69       |         |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   70       | u32     |  GET |  DNS RESOLV - actual TTL live value (= 1..MAX, in seconds) for the very last resolved DNS name (or 0 = no resolv done/finished yet)&lt;br /&gt;
   70       | u32     |  SET |  write 0xE4A5ECAC to manually clear the WHOLE internal DNS cache (will force fresh DNS request once dns_resolv() is called by program)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   71..77   |         |  GET |  n/a (reserved) &lt;br /&gt;
   71..77   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   78       | u32     |  GET |  SDS HW availability detail (information): 0 = single PWM output / 4 = four PWM outputs&lt;br /&gt;
   78       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   79       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DP&amp;quot; / 0 = basic BIG (no DP)&lt;br /&gt;
   79       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   80       | u32     |  GET |  SDS HW sub-type (information): 1 = variant &amp;quot;DS84&amp;quot; / 0 = no DS84&lt;br /&gt;
   80       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   81..84   |         |  GET |  n/a (reserved) &lt;br /&gt;
   81..84   |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   85       | u32     |  GET |  SDS module type (BIG, BIG2 or STSW) discrimination:  0 = STSW or SMALL / 1 = BIG / 2 = BIG2&lt;br /&gt;
   85       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   86       | u32     |  GET |  FC: actual state (running, uploading, failed etc.) of the FULL-C program (0, 1, 2, 4, 8, 16, 32, 64)&lt;br /&gt;
   86       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   87       | u32     |  GET |  FC: unique identifier of the actually uploaded FULL-C program&lt;br /&gt;
   87       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   88       |         |  GET |  n/a (reserved) &lt;br /&gt;
   88       |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   89       | u32     |  GET |  SDS IP-WatchDog: state (0 = OFF)&lt;br /&gt;
   89       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   90       | u32     |  GET |  SDS IP-WatchDog: last known RTT (msecs)&lt;br /&gt;
   90       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   91       | u32     |  GET |  SDS IP-WatchDog: logical output status&lt;br /&gt;
   91       |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   92..131  |         |  GET |  n/a (reserved)&lt;br /&gt;
   92..131  |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   132      | u32     |  GET |  FC: UTC time value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   132      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   133      | u32     |  GET |  FC: UpTime value, of the last FC-WDG restart of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   133      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   134      | a       |  GET |  FC: archived text of the last FC error&lt;br /&gt;
   134      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   135      | u32     |  GET |  FC: number of FC-WDF restarts of this (same) program (zeroed when a new program is uploaded)&lt;br /&gt;
   135      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   136      | u32     |  GET |  FC: total count of all FC program starts, since the SDS boot&lt;br /&gt;
   136      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   137      | u32     |  GET |  read an actual SDS CPU cycle counter (number of executed instructions since power-up/reboot), continuously wraps around, (1 step = approx. 2 nsec)&lt;br /&gt;
   137      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   138      | u32     |  GET |  get SDS internal RTC power-on status (0 = invalid data after powerup in RTC) (1 = RTC data OK and were used on powerup) &lt;br /&gt;
   138      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   139      | u32     |  GET |  NTP true actual raw epoch-time (secs since Linux Epoch) = clean UTC with *no* GMT nor DST offset applied&lt;br /&gt;
   139      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   140      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:401)&lt;br /&gt;
   140      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:401)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   141      | a       |  GET |  FC: custom TRAP variable - read (TRAP:402)&lt;br /&gt;
   141      | a       |  SET |  FC: custom TRAP variable - write to change (TRAP:402) (note. max 32 characters)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   142      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:403)&lt;br /&gt;
   142      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:403)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   143      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:404)&lt;br /&gt;
   143      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:404)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   144      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:405)&lt;br /&gt;
   144      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:405)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   145      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:406)&lt;br /&gt;
   145      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:406)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   146      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:407)&lt;br /&gt;
   146      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:407)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   147      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:408)&lt;br /&gt;
   147      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:408)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   148      | u32     |  GET |  FC: custom TRAP variable - read (TRAP:409)&lt;br /&gt;
   148      | u32     |  SET |  FC: custom TRAP variable - write to change (TRAP:409)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   149      |         |  GET |  n/a (reserved)&lt;br /&gt;
   149      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   150      |         |  GET |  FC: shared-variables access control - read state of the access control&lt;br /&gt;
   150      |         |  SET |  FC: shared-variables access control - use this to force a user-login in order to access the shared variables (0 = access without login is enabled)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   151..182 | u32 (a) |  GET |  OPTO1..OPTO32 status (warning: 0 = input ACTIVE = with signal) (non-zero = input not active = no signal)&lt;br /&gt;
   151..182 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   183      | u32     |  GET |  SDS FW date stamp (or just 0x00000000 for a very old firmware) - use this to verify the features or to ask user to update the firmware to a required newer version&lt;br /&gt;
   183      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   184      | u32     |  GET |  FC: information about how this actual running program was started (0 = none) (1 = normal) (2 = fc-wdg or manual restart) (4 = freshly loaded)&lt;br /&gt;
   184      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   185      | u32     |  GET |  FC: actual FULL-C WatchDog (decreasing) timeout counter value, v msec&lt;br /&gt;
   185      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   186      | u32     |  GET |  (common) frequency for PWM3 and PWM4 generator (1Hz .. 5MHz)&lt;br /&gt;
   186      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   187      | u32     |  GET |  PWM3 duty-cycle percent (0..100 [%])&lt;br /&gt;
   187      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   188      | u32     |  GET |  PWM3 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   188      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   189      | u32     |  GET |  PWM4 duty-cycle percent (0..100 [%])&lt;br /&gt;
   189      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   190      | u32     |  GET |  PWM4 HW: direct &amp;quot;pulse&amp;quot; register value&lt;br /&gt;
   190      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   191      | u32     |  GET |  (common) frequency for PWM1 and PWM2 generator (1Hz .. 5MHz)&lt;br /&gt;
   191      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   192      | u32     |  GET |  PWM1 duty-cycle percent (0..100 [%])&lt;br /&gt;
   192      |         |  SET |  N/A (use SDS_PWMx_setDutyAsPercents)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   193      | u32     |  GET |  PWM1 HW: read direct &amp;quot;pulse&amp;quot; (compare) register value&lt;br /&gt;
   193      | u32     |  SET |  PWM1 HW: write to direct &amp;quot;pulse&amp;quot; (compare) register value &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   194      | u32     |  GET |  reserved&lt;br /&gt;
   194      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   195      | u32     |  GET |  reserved&lt;br /&gt;
   195      |         |  SET |  N/A&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   196..228 | u32 (a) |  GET |  RELAY1..RELAY32 - &amp;quot;who&amp;quot; controls this output&lt;br /&gt;
   196..228 | u32     |  SET |  RELAY1..RELAY32 - (0 = manual = user via web) (2 = FULL-C) (4 = SDS IPwdg)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   229..230 |         |  GET |  n/a (reserved)&lt;br /&gt;
   229..230 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   231..262 | u32 (a) |  GET |  RELAY1..RELAY32 - output status (0 = off)&lt;br /&gt;
   231..262 | u32     |  SET |  RELAY1..RELAY32 - output status control (0 = off) (!0 = coil activated)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   263..265 |         |  GET |  n/a (reserved)&lt;br /&gt;
   263..265 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   266..297 | a       |  GET |  RELAY1..RELAY32 - identification/name (text, see webadmin)&lt;br /&gt;
   266..297 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   298..300 |         |  GET |  n/a (reserved)&lt;br /&gt;
   298..300 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   301      | u32     |  GET |  status (log0/log1) of GPIO-TOPBOARD pin&lt;br /&gt;
   301      | u32     |  SET |  control the GPIO-TOPBOARD pin value (if direction is set to output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   302      | u32     |  GET |  direction (in/out) of GPIO-TOPBOARD pin&lt;br /&gt;
   302      | u32     |  SET |  control the GPIO-TOPBOARD pin direction (input or output)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   303..310 |         |  GET |  n/a (reserved)&lt;br /&gt;
   303..310 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   311..342 | f32 (a) |  GET |  AD: recalculated value (float) of A/D input&lt;br /&gt;
   311..342 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   343..374 | a       |  GET |  AD: input identification / name (text)&lt;br /&gt;
   343..374 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   375..406 | a       |  GET |  AD: input unit name (text)&lt;br /&gt;
   375..406 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   407..427 |         |  GET |  n/a (reserved)&lt;br /&gt;
   407..427 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   428      | u32     |  GET |  AD: user-selected type of the OpAmp chip (HW SDS) (0 = AD) (9 = LMV) &lt;br /&gt;
   428      |         |  SET |  n/a (read-only) (configuration to be done via web admin) - note. this must match the HW&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   429      | u32     |  GET |  AD: raw value of Vbatt (raw ADC value). To convert use: Vbatt = (raw * 3.3)/2048 (result in Volts)&lt;br /&gt;
   429      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   430      | u32     |  GET |  AD: value of VrefInt in miliVolts (typical value: 3300)&lt;br /&gt;
   430      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   431..438 | u32 (a) |  GET |  AD: raw value of A/D input in 12bits (0..4095) - for all SDS variants (64, 128 and 512)&lt;br /&gt;
   431..438 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   439..446 | u32 (a) |  GET |  AD: raw value of A/D input in 16bits (0..65535) - available only for the 512 SDS variant&lt;br /&gt;
   439..446 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   447..462 |         |  GET |  n/a (reserved)&lt;br /&gt;
   447..462 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   463..469 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [0]&lt;br /&gt;
   463..469 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   470..476 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [1]&lt;br /&gt;
   470..476 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   477..483 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [2]&lt;br /&gt;
   477..483 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   484..490 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [3]&lt;br /&gt;
   484..490 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   491..497 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [4]&lt;br /&gt;
   491..497 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   498..504 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [5]&lt;br /&gt;
   498..504 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   505..511 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [6]&lt;br /&gt;
   505..511 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   512..518 | f32 (a) |  GET |  AD: calibration constants (F0..F6) for A/D input nr. [7]&lt;br /&gt;
   512..518 |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   519..991 |         |  GET |  n/a (reserved)&lt;br /&gt;
   519..991 |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   992      | u32     |  GET |  UTC timestamp (localtime) of the moment, when local clock gets to 23:59:59 (= last second of this day)&lt;br /&gt;
   992      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   993      | u32     |  GET |  UTC timestamp (localtime) marking a start of yesterday (as a moment since when we capture a new record) (or 0 = if there is no record for yesterday)&lt;br /&gt;
   993      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   994      | u32     |  GET |  UTC timestamp (localtime) marking a start of today (or a moment of SDS power on), since when a today's record is captured&lt;br /&gt;
   994      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   995      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T0 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   995      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   996      | u32     |  GET |  count of seconds, during yesterday, capturing the total length of T1 tariff activity (captures the timespan since [993] to [994])&lt;br /&gt;
   996      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   997      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T0 tariff being active&lt;br /&gt;
   997      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   998      | u32     |  GET |  count of seconds since the moment of [994] (start of today) until NOW; counting the duration of T1 tariff being active&lt;br /&gt;
   998      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
   999      | u32     |  GET |  immediate state of the global Tariff Input (0 = T0 is active right now) (!0 = T1 is active right now)&lt;br /&gt;
   999      | u32     |  SET |  &amp;quot;manual&amp;quot; control of the global Tariff Input (write/control enabled only if the feature is set in web admin - control set to FULL-C)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1000..1031| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T0 tariff&lt;br /&gt;
  1000..1031| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1032..1063| u32 (a) |  GET |  [S0-input] actual live value of the impulse counter, for T1 tariff&lt;br /&gt;
  1032..1063| u32     |  SET |  [S0-input] modify the impulse counter, for T0 tariff&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1064..1095| u32 (a) |  GET |  [S0-input] time distance (in msec) between impulses&lt;br /&gt;
  1064..1095|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1096..1127| u32 (a) |  GET |  [S0-input] time (in msec) since the last captured impulse&lt;br /&gt;
  1096..1127|         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1128..1159| u32     |  GET |  [S0-input] T0 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1128..1159|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1160..1191| u32     |  GET |  [S0-input] T1 counter value difference for the yesterday (for timespan since [993] to [994])&lt;br /&gt;
  1160..1191|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1192..1223| u32     |  GET |  [S0-input] T0 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1192..1223|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1224..1255| u32     |  GET |  [S0-input] T1 counter value difference for the today - timespan since [994] (since start of today) to now&lt;br /&gt;
  1224..1255|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1256..1499|         |  GET |  n/a (reserved)&lt;br /&gt;
  1256..1499|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1500..1531| a       |  GET |  [S0-input] master configuration struct for this input&lt;br /&gt;
  1500..1531| a       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  1532..1999|         |  GET |  n/a (reserved)&lt;br /&gt;
  1532..1999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2000..2063| u32 (a) |  GET |  [1-W BUS (A)] device status&lt;br /&gt;
  2000..2063|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2100..2163| a       |  GET |  [1-W BUS (A)] master configuration struct for this OneWire device&lt;br /&gt;
  2100..2163|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2200..2263| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (basic value)&lt;br /&gt;
  2200..2263|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2300..2363| i32 (a) |  GET |  [1-W BUS (A)] obtained value from device (additional value)&lt;br /&gt;
  2300..2363|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2364..2487|         |  GET |  n/a (reserved)&lt;br /&gt;
  2364..2487|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2488..2495| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (A)&lt;br /&gt;
  2488..2495|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2496      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (A)&lt;br /&gt;
  2496      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2497      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (A)&lt;br /&gt;
  2497      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2498      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (A)&lt;br /&gt;
  2498      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2499      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (A)&lt;br /&gt;
  2499      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2500..2563| u32 (a) |  GET |  [1-W BUS (B)] device status&lt;br /&gt;
  2500..2563|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2600..2663| a       |  GET |  [1-W BUS (B)] master configuration struct for this OneWire device&lt;br /&gt;
  2600..2663|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2700..2763| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (basic value)&lt;br /&gt;
  2700..2763|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2800..2863| i32 (a) |  GET |  [1-W BUS (B)] obtained value from device (additional value)&lt;br /&gt;
  2800..2863|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2864..2986|         |  GET |  n/a (reserved)&lt;br /&gt;
  2864..2986|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2986..2993| a       |  GET |  (8-Byte) ROM code for a FamilyID OneWire device found with SDS_onewire_search_bus() for bus (B)&lt;br /&gt;
  2986..2993|         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2994      | u32     |  GET |  number of FamilyID OneWire devices found (via last SEARCH scan (SDS_onewire_search_bus)) on bus (B)&lt;br /&gt;
  2994      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2995      | i32     |  GET |  principal result of a last SEARCH scan (SDS_onewire_search_bus) of the OneWire bus (B)&lt;br /&gt;
  2995      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2996      | i32     |  GET |  principal result of a last MASTER rescan of the OneWire bus (B)&lt;br /&gt;
  2996      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2997      | u32     |  GET |  number of OneWire devices found (via MASTER rescan) on bus (B)&lt;br /&gt;
  2997      |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2998      | u32     |  GET |  general 1-W Master Chip status: 1 = detecting; 2 or 4 = failure; 8 = working; 16 = disabled by user&lt;br /&gt;
  2998      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  2999      | u32     |  GET |  general 1-W Master Chip status: detection-retry countdown (*10msec)&lt;br /&gt;
  2999      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3000      |         |  GET |  n/a (reserved)&lt;br /&gt;
  3000      |         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3001      | a       |  GET |  custom 24-byte string (readable via SNMP .8.80)&lt;br /&gt;
  3001      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3002      | a       |  GET |  custom 24-byte string (readable via SNMP .8.81)&lt;br /&gt;
  3002      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3003      | a       |  GET |  custom 16-byte string (readable via SNMP .8.82)&lt;br /&gt;
  3003      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3004      | a       |  GET |  custom 16-byte string (readable via SNMP .8.83)&lt;br /&gt;
  3004      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3005      | a       |  GET |  custom 16-byte string (readable via SNMP .8.84)&lt;br /&gt;
  3005      | a       |  SET |  write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3006..3799|         |  GET |  n/a (reserved)&lt;br /&gt;
  3006..3799|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3800      | u32     |  GET |  PVD Active - (nonzero:) main power failure detected&lt;br /&gt;
  3800      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3801      | u32     |  GET |  PVD Was Active - this flag is only cleared by reading this index 3801&lt;br /&gt;
  3801      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3802..3849|         |  GET |  n/a (reserved)&lt;br /&gt;
  3802..3849|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3850      | u32     |  GET |  SD Card - fully mounted and useable&lt;br /&gt;
  3850      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3851      | i32     |  GET |  latest file i/o error code&lt;br /&gt;
  3851      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3852      | u32     |  GET |  SD Card - Block Size in bytes (typically 512)&lt;br /&gt;
  3852      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3853      | u32     |  GET |  SD Card - CardType&lt;br /&gt;
  3853      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3854      | u32     |  GET |  SD Card - CID - ProductSN&lt;br /&gt;
  3854      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3855      | u32     |  GET |  statistic counter: SDcard: all init attempts (= successful + failed)&lt;br /&gt;
  3855      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3856      | u32     |  GET |  statistic counter: SDcard: failed init attempts&lt;br /&gt;
  3856      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3857      | u32     |  GET |  SD Card - Total Sector Count in KiB (size of the card)&lt;br /&gt;
  3857      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3858      | u32     |  GET |  statistic counter: SDcard: sector reads&lt;br /&gt;
  3858      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3859      | u32     |  GET |  statistic counter: SDcard: sector writes&lt;br /&gt;
  3859      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3860      | u32     |  GET |  statistic counter: SDcard: sector r/w failures&lt;br /&gt;
  3860      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3861      | u32     |  GET |  statistic counter: number of opened files&lt;br /&gt;
  3861      |         |  SET |  n/a (read-only)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  3862..3999|         |  GET |  n/a (reserved)&lt;br /&gt;
  3862..3999|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4000..4099| i32     |  GET |  Shared Variables: S00 through S99 - read&lt;br /&gt;
  4000..4099| i32     |  SET |  Shared Variables: S00 through S99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4100..4199| u32     |  GET |  Shared Variables: U00 through U99 - read&lt;br /&gt;
  4100..4199| u32     |  SET |  Shared Variables: U00 through U99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4200..4299| f32     |  GET |  Shared Variables: F00 through F99 - read&lt;br /&gt;
  4200..4299| f32     |  SET |  Shared Variables: F00 through F99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4300..4399| a       |  GET |  Shared Variables: T00 through T99 - read&lt;br /&gt;
  4300..4399| a       |  SET |  Shared Variables: T00 through T99 - write&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4400..4989|         |  GET |  n/a (reserved)&lt;br /&gt;
  4400..4989|         |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  4990..4999| u32     |  GET |  read this to get a value of an automatic SECOND DOWN-COUNTER #1..#10 (it does decrease its internal value by 1 for each 1 second, down to 0 where it stays, until restarted by writing)&lt;br /&gt;
  4990..4999| u32     |  SET |  write this to set/start/restart an automatic SECOND DOWN-COUNTER #1..#10&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  5000..5127| u/i/f 32|  GET |  BackUp-RAM (FC version 0x08+) - write&lt;br /&gt;
  5000..5127| u/i/f 32|  SET |  BackUp-RAM (FC version 0x08+) - read&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  5128..11197 |       |  GET |  n/a (reserved)&lt;br /&gt;
  5128..11197 |       |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+-+-------+------+--&lt;br /&gt;
  11198     | u32     |  GET |  mqtt_publish PUBLISH Fixed Header value ( 0b0011dqqr : d=DUP, qq=QOS, r=RETAIN ) &lt;br /&gt;
  11198     | u32     |  SET |  write ( default: 0b00110001 )&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  11199     | u/i 32  |  GET |  FW support for MQTT-c (0 == NOT present)&lt;br /&gt;
  11199     |         |  SET |  n/a&lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12200     | i32     |  GET |  work progress (and result) of mqtt_connect()&lt;br /&gt;
  12200     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12201     | i32     |  GET |  &amp;quot;CONNACK Connect Return&amp;quot; - result of mqtt_connect()&lt;br /&gt;
  12201     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12202     | i32     |  GET |  result of: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()&lt;br /&gt;
  12202     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12203     | i32     |  GET |  MQTT protocol error counter (informative)&lt;br /&gt;
  12203     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12204..12208 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12204..12208 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12209     | i32     |  GET |  Subscribe Table - total number of available rows&lt;br /&gt;
  12209     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12210     | a       |  GET |  latest received Topic Name (sent from broker)&lt;br /&gt;
  12210     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12211..12241 | a    |  GET |  Subscribe Table: Topic Name for each table row&lt;br /&gt;
  12211..12241 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12242..12249 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12242..12249 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12250     | a       |  GET |  latest received Value (sent from broker)&lt;br /&gt;
  12250     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12251..12281 | a    |  GET |  Subscribe Table: actual Value for each table row&lt;br /&gt;
  12251..12281 |      |  SET |  n/a&lt;br /&gt;
 --------------+------+------+--&lt;br /&gt;
  12282..12289 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12282..12289 |      |  SET |  n/a&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12290     | u32     |  GET |  timestamp for the latest received data (Topic) from broker&lt;br /&gt;
  12290     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12291..12321 | u32 (a) |  GET |  Subscribe Table: timestamp for the last Value update, for each table row&lt;br /&gt;
  12291..12321 |         |  SET |  n/a&lt;br /&gt;
 --------------+------+--+---+--+--&lt;br /&gt;
  12322..12398 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12322..12398 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12399     | u/i 32  |  GET |  FW support for MODBUS-TCP-c (0 == NOT present)&lt;br /&gt;
  12399     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12400     | i32     |  GET |  work progress (and result) of modbus_tcp_connect()&lt;br /&gt;
  12400     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12401     | i32     |  GET |  progress/result for function 0x01 - modbus_tcp_read(uid, 0x01, ...);&lt;br /&gt;
  12401     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12402     | i32     |  GET |  progress/result for function 0x02 - modbus_tcp_read(uid, 0x02, ...);&lt;br /&gt;
  12402     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12403     | i32     |  GET |  progress/result for function 0x03 - modbus_tcp_read(uid, 0x03, ...);&lt;br /&gt;
  12403     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12404     | i32     |  GET |  progress/result for function 0x04 - modbus_tcp_read(uid, 0x04, ...);&lt;br /&gt;
  12404     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12405     | i32     |  GET |  progress/result for function 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);&lt;br /&gt;
  12405     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12406     | i32     |  GET |  progress/result for function 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);&lt;br /&gt;
  12406     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12407..12414 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12407..12414 |      |  SET |  n/a (reserved)&lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12415     | i32     |  GET |  progress/result for function 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);&lt;br /&gt;
  12415     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12416     | i32     |  GET |  progress/result for function 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);&lt;br /&gt;
  12416     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12417..12462 |      |  GET |  n/a (reserved)&lt;br /&gt;
  12417..12462 |      |  SET |  n/a (reserved) &lt;br /&gt;
 -----------+--+------+------+--&lt;br /&gt;
  12463     | u/i 32  |  GET |  latest Unit Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12463     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12464     | u/i 32  |  GET |  latest Transaction Identifier value written to MBAP header (msg TX to server)&lt;br /&gt;
  12464     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12465     | u/i 32  |  GET |  timestamp of the latest received message&lt;br /&gt;
  12465     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12466     | u/i 32  |  GET |  a count of received items inside the latest received message&lt;br /&gt;
  12466     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12467     | u/i 32  |  GET |  latest received Unit Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12467     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12468     | u/i 32  |  GET |  latest received Transaction Identifier value (inside incoming MBAP header)&lt;br /&gt;
  12468     |         |  SET |  n/a &lt;br /&gt;
 -----------+---------+------+--&lt;br /&gt;
  12469     | u/i 32  |  GET |  an address of the first coil/input/register item (maps to a value in 12470)&lt;br /&gt;
  12469     |         |  SET |  n/a &lt;br /&gt;
 -----------+--+------+--+---+--+--&lt;br /&gt;
  12470..12719 | i32 (a) |  GET |  received values (latest received message contents)&lt;br /&gt;
  12470..12719 |         |  SET |  n/a &lt;br /&gt;
 --------------+---------+------+--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Poznámky''' &lt;br /&gt;
&lt;br /&gt;
Položky obsahující: &amp;quot;konfigurační struktura&amp;quot; vyžadují dostatečně velký prostor pro uložení výsledku (při zavolání SDS_get_a() funkce). V takovém případě se do vámi určené cílové oblasti ukládá celý &amp;quot;struct&amp;quot; který obsahuje všechny potřebné údaje patřící pod danou položku (názvy, hodnoty, atd.). Pro detaily je nejlépe podívat se přímo na aktuální [[FULL-C:_set_and_get:_detailed|příklady]], které přesně popisují postup pro každý typ takové struktury - a vysvětlují tuto poznámku svým kódem.&lt;br /&gt;
&lt;br /&gt;
Indexy označené jako '''(a)''' lze ''blokově číst'' (pozor, označené specificky jako &amp;quot;a v závorce&amp;quot;). Vždy ale lze ''blokové čtení'' (tj. čtení více indexů najednou, za sebou, v rámci povoleného rozsahu) provést pouze od prvního indexu v bloku (ne od dalších v bloku).&lt;br /&gt;
Příklad: indexy 1000 až 1031 lze přečíst jako jeden souvislý blok, když se začne číst od prvního indexu v bloku (tj. 1000). Počet následně čtených indexů se udává dalším parametrem při volání SDS_get_a() funkce.&lt;br /&gt;
Pokud se pokusíte číst blok indexů ne od začátku bloku, čtení selže - pokud blok indexů začíná na 1000 tak musíte požádat o čtení od indexu 1000, přičemž začátek od 1001 a výše selže.&lt;br /&gt;
&lt;br /&gt;
BackUp-RAM funkce je dostupná je pro firmware který poskytuje verzi FULL-C o hodnotě 0x08 nebo novější. BackUp-RAM je sada 32-bit hodnot, které lze zapisovat a číst, a které jsou (především) uchovány v paměti, která je zálohovaná baterií (tzn. drží hodnotu i po výpadku napájení, tak dlouho než se baterie vybije). Výhodou BackUp-RAM oproti DF je možnost přímého přístupu a rychlosti (naopak DF vyžaduje čtení a zápis celých stránek).&lt;br /&gt;
&lt;br /&gt;
Sdílené proměnné je potřeba nejprve definovat, aby je šlo použít, a aby k nim šlo přistupovat přes set/get funkce - viz specifická stránka na této wiki.&lt;br /&gt;
&lt;br /&gt;
Detaily (významy hodnot) pro položky ''MQTT klient'' a ''MODBUS-TCP klient'' jsou rozepsány na příslušných odpovídajících stránkách na této wiki.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vysvětlení položek'''&lt;br /&gt;
&lt;br /&gt;
V tabulce výše jsou uvedeny informace, které naleznete na jednotlivých indexech. Nicméně popisy uvedené v této tabulce jsou velmi zkrácené, a je k nim tedy potřeba mnohem širší vysvětlení.&lt;br /&gt;
To naleznete na dalších stránkách v rámci této wiki, nebo se nás rovnou zeptejte (přes forum).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Vstupy pro měření napětí'''&lt;br /&gt;
&lt;br /&gt;
Detaily k A/D vstupům jsou uvedeny [[SDS_2PR:_ADC_vstupy_a_kalibrace|zde]]. Pro psaní programu je důležité mapování '''index'''u na jednotlivé vstupy, viz [[SDS_2PR:_ADC_vstupy_a_kalibrace|tabulka]].&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=948</id>
		<title>FULL-C dns resolv functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=FULL-C_dns_resolv_functions&amp;diff=948"/>
		<updated>2025-08-10T08:01:54Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje programovací jazyk '''FULL-C''', který je dostupný na vybraných zařízeních SDS. &lt;br /&gt;
 Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.&lt;br /&gt;
&lt;br /&gt;
== Síťové funkce: dotaz na přidělenou IP adresu pro DNS jméno ==&lt;br /&gt;
__NOTOC__&lt;br /&gt;
&lt;br /&gt;
Zařízení SDS umožňuje odeslat dotaz na DNS server, za účelem zjištění IP adresy přidělené k DNS názvu, který je obsahem právě takového dotazu.&lt;br /&gt;
&lt;br /&gt;
Za tímto účelem jsou k dispozici tyto dvě funkce:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         void dns_resolv(char *domainNameInput);&lt;br /&gt;
 unsigned int dns_resolv_status(unsigned int *IP0value, unsigned int *IP1value, unsigned int *IP2value, unsigned int *IP3value);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Princip ==&lt;br /&gt;
&lt;br /&gt;
SDS odesílá dotaz na DNS server, který je nastaven uživatelem SDS ve webové administraci zařízení (popř. je adresa DNS serveru získána z DHCP serveru, opět záleží na konfiguraci).&lt;br /&gt;
&lt;br /&gt;
Po odeslání dotazu se čeká na odpověď, přičemž FULL-C program pravidelně kontroluje stav voláním '''dns_resolv_status()''' funkce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Příklad ==&lt;br /&gt;
&lt;br /&gt;
V tomto příkladu odesílá SDS dotaz (textový název domény) na DNS server a zobrazuje případnou získanou odpověď (IP adresu).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
 char DNSname[64];&lt;br /&gt;
 unsigned int status;&lt;br /&gt;
 unsigned int IP0, IP1, IP2, IP3;&lt;br /&gt;
&lt;br /&gt;
 sprintf((char *)DNSname, &amp;quot;www.google.com&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
 printf(&amp;quot;RESOLVING %s \n&amp;quot;, DNSname);&lt;br /&gt;
&lt;br /&gt;
 // start - select the new DNSname for all the subsequent status function calls&lt;br /&gt;
 dns_resolv(DNSname);&lt;br /&gt;
&lt;br /&gt;
 // get the first status value&lt;br /&gt;
 status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 // only if truly working, keep waiting&lt;br /&gt;
 while (512 == status)&lt;br /&gt;
 {&lt;br /&gt;
   // keep getting a new status, until it is different than 512&lt;br /&gt;
   status = dns_resolv_status(&amp;amp;IP0, &amp;amp;IP1, &amp;amp;IP2, &amp;amp;IP3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 // check the final status value&lt;br /&gt;
 if (513 == status)&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;GOT RESULT: IP = %u.%u.%u.%u\n&amp;quot;, IP0, IP1, IP2, IP3);&lt;br /&gt;
   // only in this case, we can use the IPx address&lt;br /&gt;
   // ... OK&lt;br /&gt;
&lt;br /&gt;
   // we can print the additional internal DNS cache status, for this particular domain&lt;br /&gt;
   // note. the value is valid only if the status is 512, otherwise not&lt;br /&gt;
   unsigned int ttl;&lt;br /&gt;
   ttl = SDS_get_u(70); // index [70] = actual TTL value for the selected DNS cache item &lt;br /&gt;
   printf(&amp;quot;DNS CACHE TTL VALUE IS %u SECONDS FOR DOMAIN %s\n&amp;quot;, ttl, DNSname);&lt;br /&gt;
 } else&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;DNS RESOLV FAILED (error %u) \n&amp;quot;, status);&lt;br /&gt;
   // in this case, the IPx adress is not valid, and you need to repeat the dns_resolv() call again&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Interní DNS cache ==&lt;br /&gt;
&lt;br /&gt;
Po úspěšném provedení získání DNS překladu, kdy SDS odešle dotaz na určený DNS server, a získá z něj odpověď, &lt;br /&gt;
je výsledek k dispozici (dá se získat pomocí dns_resolv_status funkce).&lt;br /&gt;
&lt;br /&gt;
Funkce dns_resolv_status() vrací vždy výsledek toho úplně posledního dotazu, který byl vyvolán zavoláním funkce dns_resolv().&lt;br /&gt;
&lt;br /&gt;
Platná odpověď z DNS serveru je uložena do interní tabulky (DNS cache) v SDS. &lt;br /&gt;
&lt;br /&gt;
Pokud je zbývající hodnota TTL větší než 0, bude ihned k dispozici odpověď z interní cache.&lt;br /&gt;
&lt;br /&gt;
Pokud záznam v interní cache není (nebo už vypršel), bude automaticky odeslána žádost o nový překlad na DNS server.&lt;br /&gt;
&lt;br /&gt;
Toto si řídí SDS interně.&lt;br /&gt;
&lt;br /&gt;
Váš program tedy vždy, když potřebuje IP adresu pro jakoukoliv doménu, tak vždy musí nejprve zavolat dns_resolv(). Tím se jednak vybere aktuální doména, pro kterou chcete získat platnou aktuální IP adresu (a lze ji tedy přečíst pomocí dns_resolv_status() funkce), a také se spustí mechanismus kontroly interní cache a eventuálního odeslání nového dotazu.&lt;br /&gt;
&lt;br /&gt;
Nový dotaz není odeslán automaticky, tedy SDS samo neodesílá nové dotazy, když položka v interní DNS cache vyprší. Toto máte plně pod kontrolou vy, a to tak, že voláte funkci dns_resolv(), která se teprve v ten moment (kdy ji ze svého programu zavoláte) rozhodne, jestli bude nový dotaz posílat, nebo ne (čistě dle stavu obsahu interní DNS cache). Pokud v cache není záznam pro danou doménu, nebo je ale už vypršel (TTL na nule), tak dojde k odeslání dotazu, a váš program pak musí čekat na odpověď (viz příklad výše, periodickým voláním dns_resolv_status(), kdy se průběžně zařídí dle vrácené hodnoty od této funkce).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Upozornění ==&lt;br /&gt;
&lt;br /&gt;
Starší FW mělo bug, kdy při vypršení TTL v interní cache nedošlo ke smazání položky v interni cache. Toto je samozřejmě problém, který je vyřešen v novém firmware.&lt;br /&gt;
&lt;br /&gt;
DNS cache je (záměrně) vymazána při:&lt;br /&gt;
* nahrání nového FULLC programu&lt;br /&gt;
* restartu zařízení SDS&lt;br /&gt;
&lt;br /&gt;
DNS cache není vymazána při výpadku Ethernetového připojení.&lt;br /&gt;
&lt;br /&gt;
DNS cache lze ručně vymazat zapsáním hodnoty 0xE4A5ECAC do systémové proměnné na indexu [70]. Zápis této speciální hodnoty kompletně smaže interní DNS cache. Tato specifická funkcionalita vyžaduje aktuální firmware (bylo to přidáno až 08/2025).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stavové hodnoty ==&lt;br /&gt;
&lt;br /&gt;
Program musí použít volání funkce '''dns_resolv_status''' pro zjištění okamžitého stavu. Dokud nezískáte finální stavovou hodnotu, musíte tuto funkci volat opakovaně (nezapomeňte na vlastní bezpečnostní timeout).&lt;br /&gt;
&lt;br /&gt;
  dns_resolv_status()       význam&lt;br /&gt;
 -------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
  0                       |  klid, můžete odeslat DNS dotaz, funkce dns_resolv_status() současně nevrací platnou IP adresu (musíte nejprve spustit DNS překlad)&lt;br /&gt;
  512                     |  pracuje, dotaz odeslán (překlad nenalezen v interní cache), čekejte (funkce současně nevrací platnou IP adresu, ta bude až po dokončení překladu)&lt;br /&gt;
  513                     |  hotovo OK, do *resolvedIPaddressOutput byla zapsána IP adresa (4 bajty), a záznam v interní cache je platný a živý (zbývající TTL větší než 0)&lt;br /&gt;
  514                     |  odpověď nebyla získána (chyba) a současně nemáme záznam v interní DNS cache, takže funkce nevrací platnou IP adresu (musíte znovu začít s dotazem)&lt;br /&gt;
  515                     |  funkce byla zavolána s neplatnými parametry - nic nebylo provedeno, funkce nevrací platnou IP adresu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pokud funkce dns_resolv_status() vrátila hodnotu 513, je možné číst systémovou proměnnou z indexu [70] (uint32_t), která ukáže hodnotu TTL v momentu, kdy tuto hodnotu právě čtete. Lze takto sledovat, jak se postupně TTL snižuje (o 1 každou sekundu). Hodnota TTL odpovídá dané položce v interní cache, která byla určena právě posledním voláním funkce dns_resolv().&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_firmware_changelog&amp;diff=947</id>
		<title>SDS BIG: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_firmware_changelog&amp;diff=947"/>
		<updated>2025-03-28T18:57:51Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-BIG(2) , SDS-SMALL(2), SDS-STSW a všechny OEM ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS-BIG a SDS-SMALL a SDS-STSW.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 28.3.2025 ==&lt;br /&gt;
* oprava odpovědi pro S-UDP příkaz 0x04 (Read FC)&lt;br /&gt;
&lt;br /&gt;
== 15.3.2025 ==&lt;br /&gt;
* oprava odpovědi pro S-UDP příkaz 0x08 (Write FC)&lt;br /&gt;
&lt;br /&gt;
== 27.2.2025 ==&lt;br /&gt;
* upraven timeout pro čtení souboru z SD karty přes webový server (poskytování obsahu z SD karty na web)&lt;br /&gt;
* 512: oprava nefunkčního čtení ze sériové linky COM6&lt;br /&gt;
&lt;br /&gt;
== 8.2.2025 ==&lt;br /&gt;
* oprava některých payloadů v protokolu SUDP &lt;br /&gt;
&lt;br /&gt;
== 22.7.2024 ==&lt;br /&gt;
* FULLC.EXE - odstraněna chyba, která neumožnila nahrát do SDS soubor FCB větší než 64kB&lt;br /&gt;
* možnost volby klidového stavu pro každý S0 vstup (umožňuje počítat impulsy i pro NC spínače v měřiči energie)&lt;br /&gt;
* FC: SDS_reset_program() nezanechává nadbytečnou chybouvou hlášku v konzoli&lt;br /&gt;
* FC: mqtt_publish() použije vámi nastavené bitové pole do PUBLISH hlavičky (viz index 11198)&lt;br /&gt;
* SMTP odesílání by mělo být robustnější při odesílání více emailů za sebou&lt;br /&gt;
&lt;br /&gt;
== 24.2.2024 ==&lt;br /&gt;
* možnost smazat nahraný TLS klíč+certifikát (tlačítko s heslem, ve webovém rozhraní)&lt;br /&gt;
* RSTD nesmaže (nanastaví na tovární hodnoty) vaše nastavení pro všechny AD vstupy (to lze teď udělat ručně, nově přidaným tlačítkem ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 31.10.2023 ==&lt;br /&gt;
* SNMP - oprava způsobu předání chyby v odpovědi&lt;br /&gt;
* SNMP v1 - možnost nastavit dvě nezávislé komunity&lt;br /&gt;
* 512: plná implementace SNMP v3 (včetně AUTHPRIV)&lt;br /&gt;
* 64,128: omezená implementace SNMP v3 (pouze NOAUTHNOPRIV)&lt;br /&gt;
* FC: indexy 66, 67, 68, 4990..4999&lt;br /&gt;
&lt;br /&gt;
== 19.8.2023 ==&lt;br /&gt;
* oprava SDS UDP SEARCH (příchozí paket na portu 20484 byl firewallem od verze 6.6.23 zahozen, teď už opraveno)&lt;br /&gt;
* 512: HTTPS server (aktivace nahráním certifikátu, jinak zůstává HTTP)&lt;br /&gt;
&lt;br /&gt;
== 14.7.2023 ==&lt;br /&gt;
* HTTP POST: oprava sekundární chyby (objevila se ve FW 6.6.2023), kdy FW akceptoval jen rozdělený krok č. 2 (teď už opět umí jak rozdělený, tak i nerozdělený krok č. 2)&lt;br /&gt;
* FC: umožněn přímý zápisu do indexu 193 (přímo zapíše do registru PWM - určeno pro nejjemnější uživatelskou přímo konfiguraci generátoru PWM)&lt;br /&gt;
&lt;br /&gt;
== 6.6.2023 ==&lt;br /&gt;
* funkce http_header_set_user_row() má zvětšenou maximální délku parametru na 255 znaků&lt;br /&gt;
* 512: počet MQTT subscribe zvětšen z max. 8 na max. 20&lt;br /&gt;
* 512: další zvětšení FC konzole&lt;br /&gt;
* webový admin: úprava (oprava) použití timerů v javascriptu &lt;br /&gt;
* FC: DNS resolv umí pracovat s širším rozsahem UDP portů (někdy způsobilo nepřijetí odpovědi a musel se resolv opakovat)&lt;br /&gt;
* HTTP POST: poradí si i s ne-oddělenou komunikací (když klient pošle úvodní konverzační data najednou, neodděleně, tzn. nečeká na odpověď ze serveru)&lt;br /&gt;
 &lt;br /&gt;
== 9.3.2023 ==&lt;br /&gt;
* FC: verze 0x12 (+ odpovídající FULLC.EXE): přidány funkce http_header_set_user_row() a http_header_set_content_type()&lt;br /&gt;
* 64 a 128: odstraněno možné zpomalení běhu po zapnutí v určité okrajové situaci&lt;br /&gt;
&lt;br /&gt;
== 28.2.2023 ==&lt;br /&gt;
* POST: přidán příkaz /wrdf&lt;br /&gt;
* POST: oprava chyby, kdy mohlo dojít k neprovedení akce na základě příkazu /changeip&lt;br /&gt;
* malá bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 9.1.2023 ==&lt;br /&gt;
* FC verze 0x11 (+ odpovídající FULLC.EXE)&lt;br /&gt;
* firmware pro všechny HW varianty BIG, BIG2-DP a BIG2-DP-DS84&lt;br /&gt;
* web: doplněno zobrazení surových hodnot, čtených z 1-Wire zařízení &lt;br /&gt;
* FC: přidána funkce SDS_onewire_config() pro varianty -DS84&lt;br /&gt;
* FC: doplněna funkčnost FC WatchDog (pro situaci, pokud spadne program na chybu a je zastaven, tak FC Watchdog pokračuje a provede restart FC programu)&lt;br /&gt;
* FC: doplněna archivace poslední chyby FC programu, a zobrazení na webu (i v případě restartu FC Watchdogem)&lt;br /&gt;
* FC: funkce pro prohledání složky (file_opendir, file_readdir, file_closedir)&lt;br /&gt;
* oprava PWM3 a PWM4 na BIG2-64/128 - funkce, ukládání nastavení&lt;br /&gt;
* HW BIG2 DS84: RTC běží na baterii na všech HW variantách DS84 - udržuje běžící aktuální čas i při vypnutém napájení&lt;br /&gt;
* FC: přidána funkce SDS_onewire_search_bus()&lt;br /&gt;
* FC: přidány indexy 132..136 , indexy 2488..2499, 2986..2997&lt;br /&gt;
&lt;br /&gt;
== 1.12.2022 ==&lt;br /&gt;
* bezpečnostní aktualizace (dle nahlášené záležitosti a testu)&lt;br /&gt;
* trvalé zobrazení archivovaného HW faultu v Logu (pokud dojde k faultu, je hned před restartem zařízení archivován a trvale zobrazován ve výpisu, i po libovolném novém spuštění)&lt;br /&gt;
* odstraněno eventuální čekání (a následný WDG restart) při komunikaci s externími I2C zařízeními (specifické chipy na sandwich deskách uživatelů)&lt;br /&gt;
&lt;br /&gt;
== 30.11.2022 ==&lt;br /&gt;
* FC: zvýšena výkonnost (512: optimalizace pro až několika-násobné celkové zrychlení vykonávání programu) (64,128: byť jen menší zrychlení, ale přece + zvětšená konzole echo.htm) &lt;br /&gt;
* zrychleno webové rozhraní (zpomaleno zřejmě o dvě verze zpět, byť to bylo bez vlivu na funkci, je vhodnější když to nezdržuje při zobrazování v prohlížeči)&lt;br /&gt;
* FC: přidán index 137&lt;br /&gt;
* zlepšena interní obsluha sériových linek (COMx/RS485), odstraněno možné náhodné zpoždění (byť jen ve specifickém případě a jen o několik msec, ale i tak se toto vyřešilo)&lt;br /&gt;
&lt;br /&gt;
== 22.11.2022 ==&lt;br /&gt;
* FC (64/128/512): verze 0x10 &lt;br /&gt;
* dns_resolv správně hlásí chybu 516 a 517 při výpadku připojení v průběhu dotazu&lt;br /&gt;
&lt;br /&gt;
== 18.11.2022 ==&lt;br /&gt;
* FC (64/128): verze 0x10 &lt;br /&gt;
* FC: nová funkce SDS_set_RTC&lt;br /&gt;
* FC: nové funkce pro práci s float&lt;br /&gt;
* oprava pro mounting některých typů SD karet&lt;br /&gt;
&lt;br /&gt;
== 14.11.2022 ==&lt;br /&gt;
* FC: oprava výpočtů v 64-bit doméně&lt;br /&gt;
* FC: file_expand() - detailnější rozvrstvení návratových chybových hodnot&lt;br /&gt;
* web: rozšířeny zobrazované informace o probíhajícím připojování SD karty&lt;br /&gt;
* web server: vrací korektně 503 pro soubory na SD kartě, které jsou zablokovány FC programem&lt;br /&gt;
* FC: rozšířena a zásadně zlepšena implementace printf/sprintf/snprintf/sscanf - viz detaily v návodu na wiki&lt;br /&gt;
* FC: zlepšen výpis (informace na web) při určitých chybách v FC programu, plus další drobky kolem echo.htm&lt;br /&gt;
&lt;br /&gt;
== 16.10.2022 ==&lt;br /&gt;
* tento firmware (od této verze) podporuje i hardware SDS 64/128/512 ve variantě DP&lt;br /&gt;
* podpora pro 4 PWM výstupy (pro vhodný hardware - BIG2)&lt;br /&gt;
* odpověď na (webový) příkaz /sv? , má doplněný obsah http hlavičky, takže by ji mělo být snazší zpracovat&lt;br /&gt;
* FC: watchdog programu je (nově) pozastaven po dobu mountování SD karty (protože je pozastaven i program)&lt;br /&gt;
* FC: zápis do indexu 999 funguje jak má&lt;br /&gt;
* FC: verze 0x0F (nové funkce PWMx)&lt;br /&gt;
&lt;br /&gt;
== 5.10.2022 ==&lt;br /&gt;
* pouze vše řady 512 (ostatní bez tohoto problému) - důležitá oprava situace kdy někdy chybně došlo ke smazání nahraného FC programu při nahrání nového UWEB projektu do SDS&lt;br /&gt;
&lt;br /&gt;
== 30.9.2022 ==&lt;br /&gt;
* FC: oprava běhu programu v situaci kdy v kódu je vnořený (nested) switch() v rámci jiného switch() (původně chybné chování, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 28.9.2022 ==&lt;br /&gt;
* FC: oprava výsledků maker (define), kdy chybně docházelo k pevnému přetypování na int32_t, což je teď opraveno (odstraněno)&lt;br /&gt;
&lt;br /&gt;
== 1.8.2022 ==&lt;br /&gt;
* správně zobrazovaná hláška (nápověda) na úvodní webové stránce ohledně stavu konfigurace&lt;br /&gt;
* FC: přidáno tlačítko (odkaz) pro restart FULLC programu (např. pokud skončil a chcete jej ručně spustit znovu)&lt;br /&gt;
* FC: do výpisu chyby při pádu programu je přidán UTC čas (pro identifikaci, kdy se chyba stala)&lt;br /&gt;
* FC: spolehlivostní úpravy při startu programu (načtení z DF), a při zápisu nového programu (práce s DF)&lt;br /&gt;
&lt;br /&gt;
== 11.7.2022 ==&lt;br /&gt;
* FC: verze 0x0E&lt;br /&gt;
* FC: přidána funkce mktime()&lt;br /&gt;
* FC: přidána funkce gmtime()&lt;br /&gt;
* FC: přidána funkce localtime()&lt;br /&gt;
* opraveno zachování konfigurace ipwdg (webové rozhraní) a obsluhy relé ipwdg&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* FC: verze 0x0D&lt;br /&gt;
* FC: upravena funkce SDS_TOPB_keyboard_status() pro lepší předané výsledky&lt;br /&gt;
* FC: přidána funkce SDS_TOPB_keyboard_updn()&lt;br /&gt;
* FC: přidána funkce SDS_rescan_onewire()&lt;br /&gt;
* FC: odstraněno náhodné hlášení o už probíhajícím nahrávání programu při nahrávání z EXE&lt;br /&gt;
* BIG 64/128 prodloužen čas pro sestavení Ethernetového spojení, což řeší problém s některými USB síťovými kartami atd.&lt;br /&gt;
* opraveno HTTP POST nastavení položek NTP&lt;br /&gt;
* opraveno HTTP POST který teď neuzavře spojení dříve než má, pokud mazání NVM pro nový FW (nebo nový UserWeb) trvá dlouho&lt;br /&gt;
&lt;br /&gt;
== 12.4.2022 ==&lt;br /&gt;
* doplněna informační stránka o vnitřním stavu OneWire Master (pro snazší identifikaci problémů při používání sběrnice)&lt;br /&gt;
* oprava v bootloaderu pro řadu 512 - vyžaduje přeprogramování u výrobce pro všechna SDS řady 512 s FW starším než 14.2.2022&lt;br /&gt;
&lt;br /&gt;
== 3.4.2022 ==&lt;br /&gt;
* FC verze 0x0C&lt;br /&gt;
* FC: přidána funkce SDS_I2C_rw&lt;br /&gt;
* OneWire stabilnější&lt;br /&gt;
&lt;br /&gt;
== 21.1.2022 ==&lt;br /&gt;
* prioritu mají vybrané konfigurační položky v NVM (jsou-li tam platné) před baterií zálohovanou pamětí&lt;br /&gt;
* aktivován HTTP POST protokol pro nahrávání a konfiguraci SDS (viz [[SDS:POST_upload]])&lt;br /&gt;
&lt;br /&gt;
== 18.1.2022 ==&lt;br /&gt;
* RSTD zapíše do NVM všechny konfigurační položky (i to co nenuluje), pro jistotu že v NVM bude vše skutečně zapsáno&lt;br /&gt;
* načítání konfigurace upraveno (větší spolehlivost)&lt;br /&gt;
&lt;br /&gt;
== 15.1.2022 ==&lt;br /&gt;
* přidána stránka cfgstatus.htm - pro možnost kontroly stavu uložené konfigurace v pevné paměti (např. co nemáte uloženo)&lt;br /&gt;
* přidán M2M výstup ip.xml&lt;br /&gt;
* FC: přidán algoritmus SHA-256 do funkce SDS_crypto()&lt;br /&gt;
* FC: každý program má unikátní identifikátor, podle kterého lze např. kontrolovat či zpětně poznat co máte v SDS nahráno&lt;br /&gt;
* identifikátor FC programu přidán na webové rozhraní a do M2M výstupů, a do exe aplikace&lt;br /&gt;
* zobrazeno unikátní identifikační čislo SDS hardware (napevno spojeno s modulem SDS, nezměnitelné), teď i ve M2M výstupech&lt;br /&gt;
* SNMP: nové položky .8.90 , .8.91 , .8.99&lt;br /&gt;
* FC: nové get(u32) položky 2 a 87&lt;br /&gt;
&lt;br /&gt;
== 31.12.2021 ==&lt;br /&gt;
* možnost vyřadit NTP z činnosti zadáním adresy 127.0.0.1 (vhodné pro uživatele kteří získávají čas odjinud, např. přes LoRA)&lt;br /&gt;
* web: informace na web (p=8) o stavu připojování SD karty (mounting...) a o stavu kdy je FC program pozastaven (PAUSED)&lt;br /&gt;
* web: opraven zámek zvětšené konzole (echo)&lt;br /&gt;
* důslednější kontrola platnosti konfigurace při startu&lt;br /&gt;
&lt;br /&gt;
== 27.12.2021 ==&lt;br /&gt;
* opravena chyba kdy na webu nešlo nastavit 100 procent PWM duty (jen 0 až 99, teď už jde i 100)&lt;br /&gt;
* FC: několikanásobně zvětšena konzole (echo.htm)&lt;br /&gt;
* HW: při poruše hlavního zdroje hodin (krystal) se použije záložní zdroj&lt;br /&gt;
* HW: využíváme RTC pro udržení času při přechodu přes reset (drží čas dokud zase nepřijde NTP)&lt;br /&gt;
* aktualizován bootloader (aktualizace bootloaderu jen prostřednictvím přeprogramování u výrobce) - umí znovu nahrát FW pokud se v SoC poškodí&lt;br /&gt;
* vydána varianta 512 - vlastní soubor s firmware&lt;br /&gt;
&lt;br /&gt;
== 25.12.2021 ==&lt;br /&gt;
* pouze interní vydání&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* FC: oprava nesprávného zacházení s unsigned typy (na některých místech interně přemapovány na signed)&lt;br /&gt;
* FC: chování varianty if pro speciální kombinaci signed/unsigned dle specifikace standardu C&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* FC: oprava TID v MODBUS-TCP&lt;br /&gt;
* MBTC výpis rozšířen&lt;br /&gt;
* FC: drobná úspora heap (více dostupného místa)&lt;br /&gt;
* FC: dns resolv drobný fix&lt;br /&gt;
* FC: http_get a http_post důležitý fix&lt;br /&gt;
* FC: nová funkce http_close&lt;br /&gt;
* FC: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
* vylepšený algoritmus S0, rozšířené možnosti nastavení detektoru S0 (nastavení přidáno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 22.12.2020 ==&lt;br /&gt;
* web: ruční přepnutí CBY pro relé (tzn. &amp;quot;kdo ovládá relé&amp;quot;), na &amp;quot;FULL-C&amp;quot;, dané relé nevypne (off) ale ponechá jeho stávající stav (on, off)&lt;br /&gt;
* security fix&lt;br /&gt;
&lt;br /&gt;
== 10.12.2020 ==&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení&lt;br /&gt;
* integrovaná korekce chyby A/D měření pro HW osazený LMV324; uživatel může povolit tuto automatickou opravu chyby LMV324 ve webové administraci&lt;br /&gt;
* počítání délky aktivace tarifního vstupu (doba T0 a T1 v sekundách za den) viz nové sys, pozor pro funkci vyžaduje NTP&lt;br /&gt;
* automatický odečet S0 počítadel (vždy za dnešek a včerejšek), viz nové sys, pozor pro funkci vyžaduje NTP&lt;br /&gt;
&lt;br /&gt;
== 23.11.2020 ==&lt;br /&gt;
* FC + FULLC.exe: oprava chyby v případě více #if / #ifdef / #endif bloků zapsaných hned za sebou&lt;br /&gt;
* FC: makra a define lze provést i uvnitř funkce (dříve jen venku)&lt;br /&gt;
* FC: detekce nesprávné dereference ukazatele&lt;br /&gt;
&lt;br /&gt;
== 14.11.2020 ==&lt;br /&gt;
* webová administrace: stránka p=42: index ck03 se propíše i do nastavení (chybělo od 23.10.2020, web byl aktualizován, nastavení ale přebíralo ck00)&lt;br /&gt;
&lt;br /&gt;
== 4.11.2020 ==&lt;br /&gt;
* FC + FULLC.exe: odstraněn problém při načtení nahraného FULL-C programu v SDS, kdy dříve mohlo u jedné specifické velikosti nahraného programu, dojít k jeho nespuštění kvůli neodpovídajícímu crc&lt;br /&gt;
&lt;br /&gt;
== 3.11.2020 ==&lt;br /&gt;
* FC: zobrazení (v konzoli) čísla řádku (ve zdrojovém kódu) při chybě (což velmi zlepší ladění programů)&lt;br /&gt;
* FULLC.exe: odstraněno omezení na 255 znaků na řádek&lt;br /&gt;
* FULLC.exe: zrychlení nahrávání do SDS&lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* webová administrace: stránka p=42: změna indexu ck00 na ck03 ať se dají uživatelským skriptem všechny prvky samostatně rozlišit&lt;br /&gt;
* FC: oprava http_get/post: správné vyplnění výsledků i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
&lt;br /&gt;
== 14.10.2020 ==&lt;br /&gt;
* oprava FULL-C funkce XTEA-CRYPT (bug o dvě verze dříve)&lt;br /&gt;
&lt;br /&gt;
== 13.10.2020 ==&lt;br /&gt;
* důležitá oprava chyby ve FULL-C (ternary operator, a další nahlášené nesrovnalosti)&lt;br /&gt;
&lt;br /&gt;
== 13.9.2020 ==&lt;br /&gt;
* oprava detekce SD karty (některé varianty SD karet nebyly detekovány, teď už ano)&lt;br /&gt;
&lt;br /&gt;
== 9.8.2020 ==&lt;br /&gt;
* FULL-C verze 0B (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* různé drobné opravy a zabezpečení&lt;br /&gt;
* zobrazení auditlogu (webové rozhraní SDS)&lt;br /&gt;
* FC: http_post&lt;br /&gt;
* FC: MQTT klient&lt;br /&gt;
* FC: MODBUS-TCP klient&lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* úprava obsluhy relé&lt;br /&gt;
* podpora OneWire modulu SDS-1W-T-RH&lt;br /&gt;
&lt;br /&gt;
== 3.10.2019 ==&lt;br /&gt;
* SMTP klient posílá v hlavičce i položku &amp;quot;Date&amp;quot; (ale jen za předpokladu správného času v SDS)&lt;br /&gt;
* RSTD při zapnutí zařízení, ve kterém není záložní baterie (nebo je vybitá), zachová původně nastavenou MAC adresu (vše ostatní ale už jde do defaultu, což je správně)&lt;br /&gt;
* SUDP: rozšířen NOP příkaz &lt;br /&gt;
* SUDP: přidány další nové příkazy (master_cmd: 32, 33, 40, 42, 44, 48)&lt;br /&gt;
&lt;br /&gt;
== 23.9.2019 ==&lt;br /&gt;
* oprava GUI (S0 Inputs)&lt;br /&gt;
* SNMP nabízí možnost číst všechny sdílené proměnné (FULL-C: Sxx, Uxx, Fxx, Txx)&lt;br /&gt;
* opraven nefunkční RSTD na modulu STSW-rev3&lt;br /&gt;
&lt;br /&gt;
== 23.6.2019 ==&lt;br /&gt;
* oprava chyby objevené ve FW 28.5.2019, kdy na některých specifických SDS nefungovaly AD vstupy&lt;br /&gt;
&lt;br /&gt;
== 28.5.2019 ==&lt;br /&gt;
* oprava funkce SD karty (pro případy kdy se stala po čase nedostupná pro FC/web)&lt;br /&gt;
&lt;br /&gt;
== 5.5.2019 ==&lt;br /&gt;
* dořešeno hlídání stavu (načtení, atd.) SD karty i v případě provozu náročného FULL-C programu (tedy i pro hluboce vnořené smyčky)&lt;br /&gt;
* oprava původně chybné implementace S-UDP příkazu &amp;quot;1Waccess: sub-command 8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 24.2.2019 ==&lt;br /&gt;
* překlopení z BETA do oficiálního FW&lt;br /&gt;
* automatika zimní/letní čas&lt;br /&gt;
* přístup na SD kartu: FULL-C pracuje se soubory (vytvoření, smazání, čtení a zápis, atd.) &lt;br /&gt;
* přístup na SD kartu: web server zobrazuje soubory ze SD karty (vše ve složce \web\ a podsložkách této složky)&lt;br /&gt;
* oprava čtení napětí baterie pro variantu 128K&lt;br /&gt;
* shared.xml&lt;br /&gt;
* odstraněno omezení délky ve shared.txt&lt;br /&gt;
* zprovozněno getsv&lt;br /&gt;
* verze FULL-C je teď FC 0x0A (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* FULL-C: nová možnost způsobu čtení teploty SoC&lt;br /&gt;
* FULL-C: index 64, 65, 184, 185, 429, 430, atd.&lt;br /&gt;
* FULL-C: doplněné set/get funkce pro sdílené proměnné&lt;br /&gt;
* FULL-C: s/printf umí správné zpracovat požadavek na určení desetinných míst pro float&lt;br /&gt;
* FULL-C: funkce pro reset FC programu&lt;br /&gt;
* FULL-C: funkce pro watchdog FC programu&lt;br /&gt;
* SNMP nové OIDy (dle přidaných věcí - čas, sdcard)&lt;br /&gt;
&lt;br /&gt;
== 1.7.2018 ==&lt;br /&gt;
* SNMP: sdsS0translatedUnitT0,1 je poskytováno jako hodnota od odečtu (ne od úplného začátku měření, jak to bylo předtím) &lt;br /&gt;
* FULL-C: přidán index 183 poskytující datum vydání FW který je právě nahrán v SDS&lt;br /&gt;
&lt;br /&gt;
== 27.6.2018 ==&lt;br /&gt;
* verze FULL-C je teď FC 0x09 (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* FULL-C: přidána podpora pro int64_t a uint64_t&lt;br /&gt;
* FULL-C: přejmenováno set a get funkce (rozlišení 32 a 64 bit)&lt;br /&gt;
* FULL-C: snprintf přesně dle standardu (zrušena nevhodná změna z 20.12.2017)&lt;br /&gt;
* drobné opravy&lt;br /&gt;
* drobná oprava v odchozím TCP-SYN a v generátoru ISN&lt;br /&gt;
&lt;br /&gt;
== 8.3.2018 ==&lt;br /&gt;
* oprava echo.htm - správně wrapuje obsah, a nejsou tam nadbytečné 0x00&lt;br /&gt;
* vhodnější řešení rexmitu částí webových stránek a dynamických dat (ocení to zejména uživatelé s mobilním připojením pro SDS)&lt;br /&gt;
&lt;br /&gt;
== 2.3.2018 ==&lt;br /&gt;
* aktulizace a oprava ve výpočtu &amp;quot;aktuálního výkonu&amp;quot; pro okrajové situace (např. krajní hodnoty impulsní konstanty)&lt;br /&gt;
&lt;br /&gt;
== 11.2.2017 ==&lt;br /&gt;
* zprovozněny funkce set/get pro indexy 4000 až 4300 (alternativní přístup k číselným sdíleným proměnným)&lt;br /&gt;
&lt;br /&gt;
== 21.12.2017 ==&lt;br /&gt;
* zvýšena stabilita spuštění po zapnutí&lt;br /&gt;
&lt;br /&gt;
== 20.12.2017 ==&lt;br /&gt;
* dočasná změna ve FULL-C (bude zrušena): funkce snprintf() má interně posunutý limit délky zápisu o 1 (toto je záměrný rozdíl proti C99). Změna v SDS je provedena z důvodu neznalosti programátorů FC v tom, že do snprintf() limitu je potřeba započítat i jeden byte pro ukončující nulu. Ve výsledku tedy zápis &amp;quot;snprintf(buf, limit, ...);&amp;quot; je v FC interně vykonán jako &amp;quot;snprintf(buf, limit+1, ...);&amp;quot;.&lt;br /&gt;
* oprava ve FULL-C: výpočet platné délky bufferu funguje i pro ukazatele vytvořené offsetem ze základní alokované adresy (příklad takového bufferu je: buf=malloc(x)+offset;)&lt;br /&gt;
* stav všech relé je načten z paměti vždy po zapnutí modulu, a ty relé které jsou ručně ovládány (manual control) a které byly před vypnutím v zapnutém (ON) stavu, jsou po zapnutí modulu aktivovány (zatímco relé ovládané z IP-W a FC jsou vždy po zapnutí modulu uvedeny do OFF stavu)&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
* UserWEB projekt má opravenu chybu, kdy nebylo možno použít delší Name Chain tabulku (tedy lze už vložit mnohem více souborů) &lt;br /&gt;
* nastavená MAC adresa je zachována i po průchodu RSTD (byla-li platná)&lt;br /&gt;
* opravena chyba způsobující nefunkční http_get(), teď už to opět funguje&lt;br /&gt;
* aktualizace obsluhy PWM (např. lépe přepočítává zobrazovaná &amp;quot;procenta&amp;quot;)&lt;br /&gt;
* oprava strcat() funkce (opraveno hlídání max velikosti bufferu ze &amp;quot;from&amp;quot; na &amp;quot;to&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
== 18.9.2017 ==&lt;br /&gt;
* FULL-C: printf() správně tiskne float i pokud se formátovací parametr zadá jako %d (tedy ne jako %f)&lt;br /&gt;
* FULL-C: snprint() opraven (když je 'from' kratší než 'to' tak je 'to' doplněn 0x00 - je to zvláštnost, nemá se to používat, ale C99 to předepisuje, tak to dodržíme)&lt;br /&gt;
&lt;br /&gt;
== 9.9.2017 ==&lt;br /&gt;
* vnitřní bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 29.8.2017 ==&lt;br /&gt;
* oprava chování RSTD - pokud je zapojen před zapnutím, nepřejde do automatického resetu po 10sec, ale RSTD je použit a SDS pracuje dále; přitom funkce &amp;quot;zapoj RSTD za běhu&amp;quot; je zachována správně&lt;br /&gt;
* zásadní zlepšení odolnosti FULL-C proti chybám programátora - vnitřní hlídání rozsahů bufferu a stringů, zamezující zápisu za hranice pole (typicky chybné použití sprintf() funkce, ale toto hlídání je aplikováno obecně všude)&lt;br /&gt;
&lt;br /&gt;
== 8.8.2017 ==&lt;br /&gt;
* oprava: FC teď správně převádí URL kód &amp;quot;sv?xxxx=yyyy...&amp;quot;, na text (vypadlo 31.3. při rozšíření počtu znaků pro sdílené proměnné Txx) &lt;br /&gt;
&lt;br /&gt;
== 10.7.2017 ==&lt;br /&gt;
* vydán firmware pro variantu &amp;quot;128kB&amp;quot; (od teď vychází dva typy firmware, pro variantu &amp;quot;64kB&amp;quot; a variantu &amp;quot;128kB&amp;quot;, vyberete si tu svou dle HW který máte)&lt;br /&gt;
* velká optimalizace využití paměti pro uložení a běh FULL-C programu (komprese, a zmenšení vyžadovaného heapu pro běh programu) - významně zvětšuje možnou velikost FC programu&lt;br /&gt;
* pin RSTD lze teď také použít i bez vypnutí a zapnutí SDS, stačí jej na 10 vteřin za běhu zkratovat (pak se provede RSTD a SDS se rebootuje) - výhodné pro zařízení kde vypnutí nelze provést&lt;br /&gt;
* drobné užitečné opravy dle hlášení uživatelů&lt;br /&gt;
* verze FC zvýšena na 0x08, a přidána možnost uložit 128 proměnných do baterií zálohované pamětí (tzn. obsah přežije výpadek napájení a FC program po restartu o tyto údaje nepřijde)&lt;br /&gt;
&lt;br /&gt;
== 2.6.2017 ==&lt;br /&gt;
* návratová hodnota funkce DF_read_page() je nastavena správně i v případě, kdy tato funkce čte data z cache (opakované čtení stejné stránky DF)&lt;br /&gt;
&lt;br /&gt;
== 6.4.2017 ==&lt;br /&gt;
* přidána FULL-C funkce AES-128-CTR, viz SDS_crypto(0x20, ...);&lt;br /&gt;
&lt;br /&gt;
== 31.3.2017 ==&lt;br /&gt;
* oprava RS485-MASTER drive, je teď zcela přesný (tzn. vypnut v přesném časování za úplně posledním vyslaným bitem)&lt;br /&gt;
* oprava čtení konfigurace 1-W, pomocí sds_get_a()&lt;br /&gt;
* přidán index 139&lt;br /&gt;
* odstraněno omezení na 32 znaků pro sdílené proměnné (přenos textu) &amp;quot;Txx&amp;quot; (xx = 00 až 99)&lt;br /&gt;
* fix návratových hodnot FULL-C funkcí pro práci s DF (teď to vrací správně 1 nebo 0, podle wiki)&lt;br /&gt;
* upřesněn název: (z BIG na BIG-64) / (z STSW na STSW-64)&lt;br /&gt;
* vyžaduje aktuální SDSLOAD.exe (6.3.2017 nebo novější) a FULLC.exe (6.3.2017 nebo novější)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== starší záznamy ==&lt;br /&gt;
&lt;br /&gt;
Nejsou k dispozici.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=946</id>
		<title>Firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=946"/>
		<updated>2025-03-28T18:57:11Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nový Firmware ==&lt;br /&gt;
&lt;br /&gt;
Aktualizujte si své SDS - nahrejte do něj nový firmware, který získáte na této stránce - '''naskrolujte dolů''' kde naleznete odkaz na BIN soubor pro vaše zařízení.&lt;br /&gt;
&lt;br /&gt;
Postup a řešení problémů: [[Manual_Firmware_Update|Návod pro aktualizaci Firmware v SDS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Odkazy ke stáhnutí ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;PC Software&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_sdsc_winexe.jpg]] '''Program SDSC.exe''' (programovací jazyk SDS-C, aktualizace firmware pro SDS '''první řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; stáhnout WinEXE pro SDS-C [https://sds.an-d.cz/firmware/SDSC_310123.exe zápis/simulace/upload SDS-C (SDS-C '''verze 09''') a UWEB, ze dne 31.1.2023]&amp;lt;br&amp;gt;SHA-256: daf1095f206404e33223f675f5d0bc09d4fc5dfd7d9f79f4f735af88f5ff1e6a&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program FULLC.exe''' (programovací jazyk FULL-C, aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; (FC verze '''0x12''' - '''aktuální'''): stáhnout WinEXE pro FULL-C [https://sds.an-d.cz/firmware/FULLC_220724.exe zápis/upload FULL-C a UWEB, ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro Firmware od 9.3.2023 včetně, pro všechny varianty SDS (64kB a 128kB a 512kB)&amp;lt;br&amp;gt;SHA-256: b4cb95d8ec8a6e844a3a4c9a2e9fc50ece60ccf44e8043f8c10f46b2294cae0b&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program SDSLOAD.exe''' (&amp;quot;jednokrokový&amp;quot; upload .FC souborů a aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; ('''aktuální''' verze, pro FW od 10.7.2017 včetně a dále) stáhnout WinEXE [https://sds.an-d.cz/firmware/SDSLOAD_220724.exe program SDSLOAD ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro všechny SDS varianty 64kB a 128kB a 512kB, (subvarianty DP a DS84)&amp;lt;br&amp;gt;SHA-256: ded5bf1aca2e04e22c33899a0976deccc8ff76eb88f53ecd9769788b7daa25a7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_empty.jpg]] '''Program SDS LOG'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; Program '''[[SDS LOG: intro|SDS LOG]]''' - verze 0.1 ze dne 26.8.2011 - [https://sds.an-d.cz/firmware/SDS_LOG.exe stáhnout EXE program]&lt;br /&gt;
&amp;lt;li&amp;gt; Zdrojové kódy programu SDS LOG (Creative Commons Licence) [[SDS LOG: source code|ke stáhnutí zde]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS LOG: changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;První Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMICROE.jpg]]  [[Soubor:Thumbnail_SDSMICRO.jpg]] [[Soubor:Thumbnail_SDS_DIN.jpg]] '''D0000001''' MICRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: LM]] varianty '''LIGHT''', '''LIGHT 2''' a '''E (DIN)'''.&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny varianty a revize SDS MICRO LM.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_CZ.bin SDS-MICRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_EN.bin SDS-MICRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B0000057''' MICRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_CZ.bin SDS-MICRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_EN.bin SDS-MICRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B000D957''' MICRO ST DP&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST DP]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST DP.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_CZ.bin SDS-MICRO-ST-DP-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_EN.bin SDS-MICRO-ST-DP-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MINI_1.png]] [[Soubor:Thumbnail_SDS_MINI_2.png]] '''B0000020''' MINI ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MINI: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MINI ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_CZ.bin SDS-MINI-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_EN.bin SDS-MINI-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[SDS MINI: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMACRO.jpg]] '''C0000001''' MACRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: LM]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_CZ.bin SDS-MACRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_EN.bin SDS-MACRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MACRO_ST_rev1.png]] '''C0000057''' MACRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_CZ.bin SDS-MACRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_EN.bin SDS-MACRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSTTCPRO.jpg]] '''B0000001''' TTCPRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS TTCPRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_CZ.bin SDS-TTCPRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_EN.bin SDS-TTCPRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS TTCPRO ST má shodný Change Log se SDS MINI ST, a to zde: [[SDS MINI: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSIO6.jpg|160px]] '''D0000006''' IO6 LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: LM]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_CZ.bin SDS-IO6-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_EN.bin SDS-IO6-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 LM má shodný Change Log se SDS MICRO LM, a to zde: [[SDS MICRO: LM: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_empty.jpg]] '''D0000011''' IO6 ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_CZ.bin SDS-IO6-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_EN.bin SDS-IO6-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 ST má shodný Change Log se SDS MICRO ST, a to zde: [[SDS MICRO: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_FTP_rev1.png]] '''F0000001''' FTP LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS FTP: LM]], výchozí firmware.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Firmware: ''SDS FTP ze dne 7.9.2010'' už nahrán ve výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS FTP: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_ONEDPS.jpg]] '''E000AAA1''' UPS ONEDPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: ONEDPS]], finální jednodesková verze (aktuální) (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stáhnout firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_CZ.bin (Česká lokalizace) SDS-UPS-ONEDPS-LM ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;Download firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_EN.bin (English language version) SDS-UPS-ONEDPS-LM released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS UPS: LM: ONEDPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_TWODPS.jpg]] '''C00xxxxx''' UPS TWODPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: TWODPS]], HW rev3u - DVOUDESKOVÁ (UŽ NEPRODÁVANÁ) varianta.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je zaslán na požádání (pošlete email), aktuální verze je z 1.3.2011 (dále aktualizováno na specifické požádání, raději proto přejděte na nový HW).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Každá deska má svou kalibraci, proto každá deska má svůj vlastní FW, proto musíte uvést S/N svého výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HISTORIE: [[SDS UPS: LM: TWODPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Druhá Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSBIG.jpg]] [[Soubor:Thumbnail_SDSSMALL.jpg]] '''B1900001''' / '''B1900002''' / '''B1900004''' : BIG, BIG2, SMALL, STSW, MBGW&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Společný firmware pro výrobky [[SDS BIG]], [[SDS SMALL]] a [[SDS STSW]] a [[SDS MBGW]]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je jednotný pro všechny varianty '''SDS Druhé Produktové Řady''', nutné je rozlišení dle varianty 64kB/128kB/512kB. Rozlišení podle dalších subvariant (DP, DS84) se neprovádí.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je společný pro BIG a BIG2, rozlišení je pouze dle varianty 64/128/512.&lt;br /&gt;
&amp;lt;li&amp;gt;Pozn. Modul SMALL a modul MBGW interně obsahuje modul STSW, nahrává se tam tedy stejný FW.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware vždy vyžaduje použití odpovídající, aktuální verze FULLC.EXE programu. &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS BIG/SMALL/STSW: [[SDS BIG: firmware changelog|firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;64kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 64kB) [https://sds.an-d.cz/firmware/SDS_BIG_64K_280325_EN.bin firmware &amp;quot;64kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 28.3.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;128kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 128kB) [https://sds.an-d.cz/firmware/SDS_BIG_128K_280325_EN.bin firmware &amp;quot;128kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 28.3.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;512kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [[firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 12.4.2022|informace pokud máte SDS512 s FW &amp;lt;b&amp;gt;starším&amp;lt;/b&amp;gt; než 12.4.2022]]&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [https://sds.an-d.cz/firmware/SDS_BIG_512K_280325_EN.bin firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 28.3.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;Informace: SDS BIG/SMALL/STSW 512 se starším FW než 12.4.2022 vyžaduje přeprogramování u výrobce.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| POZOR&lt;br /&gt;
'''Aktualizujte''' své doplňkové sandwich desky, tzn. [[SDS BIG: DALI]], [[SDS BIG: LORA]] - na verzi FW 5.12.2016 '''nebo novější'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Aktualizaci lze provést jen fyzicky u výrobce, ten ji provede bezplatně (zašlete výrobci vaše SDS pro jeho aktualizaci). Se starým FW nebude tento HW plně fungovat.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Informace ===&lt;br /&gt;
&lt;br /&gt;
 VŽDY MĚJTE VE SVÉM ZAŘÍZENÍ NEJNOVĚJŠÍ FIRMWARE, A POUŽÍVEJTE TAKÉ NEJNOVĚJŠÍ SDS-C EXE / FULL-C EXE PROGRAM.&lt;br /&gt;
 V opačném případě vám budou chybět nové funkce, které neustále přidáváme, a také nebudete mít opravené nalezené chyby.&lt;br /&gt;
 V případě že chcete získat podporu, musíte mít instalovaný nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historický Software ===&lt;br /&gt;
&lt;br /&gt;
Za účelem aktualizace takových SDS, kde už dlouho nebyl aktualizován firmware, je potřeba použít odpovídající EXE program pro aktualizaci takovéhoto zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== První Produktová Řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro SDS-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_151119.exe ze dne '''15.11.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 08, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020118.exe ze dne '''2.1.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 07, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020317.exe ze dne '''2.3.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 8.8.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_060216.exe ze dne '''6.2.2016''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které nemají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 24.1.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_231111.exe ze dne '''23.11.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 04&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_170211.exe ze dne '''17.2.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''února 2011''')&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro ''SDS-C verze č. 03'' (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_140511.exe ze dne '''14.5.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''konce května 2011''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Druhá Produktová řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro FULL-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_070323.exe ze dne '''7.3.2023''']&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_311222.exe ze dne '''31.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 11, (firmware od 9.1.2023 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_071222.exe ze dne '''7.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 10, (firmware od 18.11.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_161022.exe ze dne '''16.10.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0F, (firmware od 16.10.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_110722.exe ze dne '''11.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0E, (firmware od 11.7.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010722.exe ze dne '''1.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0D, (firmware od 6.8.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030422.exe ze dne '''3.4.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0C, (firmware od 23.3.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010322.exe ze dne '''1.3.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0B, (firmware od 6.8.2020 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030119.exe ze dne '''3.1.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0A, (firmware od 3.1.2019 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010718.exe ze dne '''1.7.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 09, (firmware od 27.6.2018 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_100717.exe ze dne '''10.7.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 08, (firmware od 10.7.2017 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_080617.exe ze dne '''8.6.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 06, (firmware starší než Červenec-2017, a pouze pro variantu SDS 64kB)&lt;br /&gt;
&lt;br /&gt;
* (historická verze) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_201022.exe ze dne 20.10.2022]&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_120417.exe ze dne 12.4.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB která používá ''starý'' firmware (2017 nebo starší)&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_100717.exe ze dne 10.7.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB a 128kB (nepodporuje variantu 512kB tak jako aktuální stáhnutelná verze aplikace)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beta Testing ==&lt;br /&gt;
&lt;br /&gt;
Než vydáme novou verzi, je potřeba změny a novinky otestovat.&lt;br /&gt;
&lt;br /&gt;
Pokud jste ochotní se testu zúčastnit, pak se podívejte [https://forum.sds.an-d.cz/viewtopic.php?id=129 na tento odkaz]. Zde jsou uveřejněny vždy nejnovější beta verze firmware.&lt;br /&gt;
&lt;br /&gt;
Diskuse s vývojem k aktuálnímu Firmware je k dispozici na našem fóru.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_firmware_changelog&amp;diff=945</id>
		<title>SDS BIG: firmware changelog</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=SDS_BIG:_firmware_changelog&amp;diff=945"/>
		<updated>2025-03-15T09:43:28Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== SDS-BIG(2) , SDS-SMALL(2), SDS-STSW a všechny OEM ==&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ &lt;br /&gt;
&lt;br /&gt;
Tato stránka se věnuje změnám ve firmware a v HW pro výrobek SDS-BIG a SDS-SMALL a SDS-STSW.&lt;br /&gt;
&lt;br /&gt;
Změny jsou seřazeny tak, že nejnovější verze (která je stáhnutelná z webu) je popsána jako první.&lt;br /&gt;
&lt;br /&gt;
Proč je vydáván nový firmware? Protože operativně řešíme požadavky uživatelů, a jsou doplňovány nové funkce.&lt;br /&gt;
&lt;br /&gt;
Firmware poskytujeme zcela zadarmo po celou dobu životnosti výrobku. Děláme to vše pro Vás.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 15.3.2025 ==&lt;br /&gt;
* oprava odpovědi pro S-UDP příkaz 0x08 (Write FC)&lt;br /&gt;
&lt;br /&gt;
== 27.2.2025 ==&lt;br /&gt;
* upraven timeout pro čtení souboru z SD karty přes webový server (poskytování obsahu z SD karty na web)&lt;br /&gt;
* 512: oprava nefunkčního čtení ze sériové linky COM6&lt;br /&gt;
&lt;br /&gt;
== 8.2.2025 ==&lt;br /&gt;
* oprava některých payloadů v protokolu SUDP &lt;br /&gt;
&lt;br /&gt;
== 22.7.2024 ==&lt;br /&gt;
* FULLC.EXE - odstraněna chyba, která neumožnila nahrát do SDS soubor FCB větší než 64kB&lt;br /&gt;
* možnost volby klidového stavu pro každý S0 vstup (umožňuje počítat impulsy i pro NC spínače v měřiči energie)&lt;br /&gt;
* FC: SDS_reset_program() nezanechává nadbytečnou chybouvou hlášku v konzoli&lt;br /&gt;
* FC: mqtt_publish() použije vámi nastavené bitové pole do PUBLISH hlavičky (viz index 11198)&lt;br /&gt;
* SMTP odesílání by mělo být robustnější při odesílání více emailů za sebou&lt;br /&gt;
&lt;br /&gt;
== 24.2.2024 ==&lt;br /&gt;
* možnost smazat nahraný TLS klíč+certifikát (tlačítko s heslem, ve webovém rozhraní)&lt;br /&gt;
* RSTD nesmaže (nanastaví na tovární hodnoty) vaše nastavení pro všechny AD vstupy (to lze teď udělat ručně, nově přidaným tlačítkem ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 31.10.2023 ==&lt;br /&gt;
* SNMP - oprava způsobu předání chyby v odpovědi&lt;br /&gt;
* SNMP v1 - možnost nastavit dvě nezávislé komunity&lt;br /&gt;
* 512: plná implementace SNMP v3 (včetně AUTHPRIV)&lt;br /&gt;
* 64,128: omezená implementace SNMP v3 (pouze NOAUTHNOPRIV)&lt;br /&gt;
* FC: indexy 66, 67, 68, 4990..4999&lt;br /&gt;
&lt;br /&gt;
== 19.8.2023 ==&lt;br /&gt;
* oprava SDS UDP SEARCH (příchozí paket na portu 20484 byl firewallem od verze 6.6.23 zahozen, teď už opraveno)&lt;br /&gt;
* 512: HTTPS server (aktivace nahráním certifikátu, jinak zůstává HTTP)&lt;br /&gt;
&lt;br /&gt;
== 14.7.2023 ==&lt;br /&gt;
* HTTP POST: oprava sekundární chyby (objevila se ve FW 6.6.2023), kdy FW akceptoval jen rozdělený krok č. 2 (teď už opět umí jak rozdělený, tak i nerozdělený krok č. 2)&lt;br /&gt;
* FC: umožněn přímý zápisu do indexu 193 (přímo zapíše do registru PWM - určeno pro nejjemnější uživatelskou přímo konfiguraci generátoru PWM)&lt;br /&gt;
&lt;br /&gt;
== 6.6.2023 ==&lt;br /&gt;
* funkce http_header_set_user_row() má zvětšenou maximální délku parametru na 255 znaků&lt;br /&gt;
* 512: počet MQTT subscribe zvětšen z max. 8 na max. 20&lt;br /&gt;
* 512: další zvětšení FC konzole&lt;br /&gt;
* webový admin: úprava (oprava) použití timerů v javascriptu &lt;br /&gt;
* FC: DNS resolv umí pracovat s širším rozsahem UDP portů (někdy způsobilo nepřijetí odpovědi a musel se resolv opakovat)&lt;br /&gt;
* HTTP POST: poradí si i s ne-oddělenou komunikací (když klient pošle úvodní konverzační data najednou, neodděleně, tzn. nečeká na odpověď ze serveru)&lt;br /&gt;
 &lt;br /&gt;
== 9.3.2023 ==&lt;br /&gt;
* FC: verze 0x12 (+ odpovídající FULLC.EXE): přidány funkce http_header_set_user_row() a http_header_set_content_type()&lt;br /&gt;
* 64 a 128: odstraněno možné zpomalení běhu po zapnutí v určité okrajové situaci&lt;br /&gt;
&lt;br /&gt;
== 28.2.2023 ==&lt;br /&gt;
* POST: přidán příkaz /wrdf&lt;br /&gt;
* POST: oprava chyby, kdy mohlo dojít k neprovedení akce na základě příkazu /changeip&lt;br /&gt;
* malá bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 9.1.2023 ==&lt;br /&gt;
* FC verze 0x11 (+ odpovídající FULLC.EXE)&lt;br /&gt;
* firmware pro všechny HW varianty BIG, BIG2-DP a BIG2-DP-DS84&lt;br /&gt;
* web: doplněno zobrazení surových hodnot, čtených z 1-Wire zařízení &lt;br /&gt;
* FC: přidána funkce SDS_onewire_config() pro varianty -DS84&lt;br /&gt;
* FC: doplněna funkčnost FC WatchDog (pro situaci, pokud spadne program na chybu a je zastaven, tak FC Watchdog pokračuje a provede restart FC programu)&lt;br /&gt;
* FC: doplněna archivace poslední chyby FC programu, a zobrazení na webu (i v případě restartu FC Watchdogem)&lt;br /&gt;
* FC: funkce pro prohledání složky (file_opendir, file_readdir, file_closedir)&lt;br /&gt;
* oprava PWM3 a PWM4 na BIG2-64/128 - funkce, ukládání nastavení&lt;br /&gt;
* HW BIG2 DS84: RTC běží na baterii na všech HW variantách DS84 - udržuje běžící aktuální čas i při vypnutém napájení&lt;br /&gt;
* FC: přidána funkce SDS_onewire_search_bus()&lt;br /&gt;
* FC: přidány indexy 132..136 , indexy 2488..2499, 2986..2997&lt;br /&gt;
&lt;br /&gt;
== 1.12.2022 ==&lt;br /&gt;
* bezpečnostní aktualizace (dle nahlášené záležitosti a testu)&lt;br /&gt;
* trvalé zobrazení archivovaného HW faultu v Logu (pokud dojde k faultu, je hned před restartem zařízení archivován a trvale zobrazován ve výpisu, i po libovolném novém spuštění)&lt;br /&gt;
* odstraněno eventuální čekání (a následný WDG restart) při komunikaci s externími I2C zařízeními (specifické chipy na sandwich deskách uživatelů)&lt;br /&gt;
&lt;br /&gt;
== 30.11.2022 ==&lt;br /&gt;
* FC: zvýšena výkonnost (512: optimalizace pro až několika-násobné celkové zrychlení vykonávání programu) (64,128: byť jen menší zrychlení, ale přece + zvětšená konzole echo.htm) &lt;br /&gt;
* zrychleno webové rozhraní (zpomaleno zřejmě o dvě verze zpět, byť to bylo bez vlivu na funkci, je vhodnější když to nezdržuje při zobrazování v prohlížeči)&lt;br /&gt;
* FC: přidán index 137&lt;br /&gt;
* zlepšena interní obsluha sériových linek (COMx/RS485), odstraněno možné náhodné zpoždění (byť jen ve specifickém případě a jen o několik msec, ale i tak se toto vyřešilo)&lt;br /&gt;
&lt;br /&gt;
== 22.11.2022 ==&lt;br /&gt;
* FC (64/128/512): verze 0x10 &lt;br /&gt;
* dns_resolv správně hlásí chybu 516 a 517 při výpadku připojení v průběhu dotazu&lt;br /&gt;
&lt;br /&gt;
== 18.11.2022 ==&lt;br /&gt;
* FC (64/128): verze 0x10 &lt;br /&gt;
* FC: nová funkce SDS_set_RTC&lt;br /&gt;
* FC: nové funkce pro práci s float&lt;br /&gt;
* oprava pro mounting některých typů SD karet&lt;br /&gt;
&lt;br /&gt;
== 14.11.2022 ==&lt;br /&gt;
* FC: oprava výpočtů v 64-bit doméně&lt;br /&gt;
* FC: file_expand() - detailnější rozvrstvení návratových chybových hodnot&lt;br /&gt;
* web: rozšířeny zobrazované informace o probíhajícím připojování SD karty&lt;br /&gt;
* web server: vrací korektně 503 pro soubory na SD kartě, které jsou zablokovány FC programem&lt;br /&gt;
* FC: rozšířena a zásadně zlepšena implementace printf/sprintf/snprintf/sscanf - viz detaily v návodu na wiki&lt;br /&gt;
* FC: zlepšen výpis (informace na web) při určitých chybách v FC programu, plus další drobky kolem echo.htm&lt;br /&gt;
&lt;br /&gt;
== 16.10.2022 ==&lt;br /&gt;
* tento firmware (od této verze) podporuje i hardware SDS 64/128/512 ve variantě DP&lt;br /&gt;
* podpora pro 4 PWM výstupy (pro vhodný hardware - BIG2)&lt;br /&gt;
* odpověď na (webový) příkaz /sv? , má doplněný obsah http hlavičky, takže by ji mělo být snazší zpracovat&lt;br /&gt;
* FC: watchdog programu je (nově) pozastaven po dobu mountování SD karty (protože je pozastaven i program)&lt;br /&gt;
* FC: zápis do indexu 999 funguje jak má&lt;br /&gt;
* FC: verze 0x0F (nové funkce PWMx)&lt;br /&gt;
&lt;br /&gt;
== 5.10.2022 ==&lt;br /&gt;
* pouze vše řady 512 (ostatní bez tohoto problému) - důležitá oprava situace kdy někdy chybně došlo ke smazání nahraného FC programu při nahrání nového UWEB projektu do SDS&lt;br /&gt;
&lt;br /&gt;
== 30.9.2022 ==&lt;br /&gt;
* FC: oprava běhu programu v situaci kdy v kódu je vnořený (nested) switch() v rámci jiného switch() (původně chybné chování, teď opraveno)&lt;br /&gt;
&lt;br /&gt;
== 28.9.2022 ==&lt;br /&gt;
* FC: oprava výsledků maker (define), kdy chybně docházelo k pevnému přetypování na int32_t, což je teď opraveno (odstraněno)&lt;br /&gt;
&lt;br /&gt;
== 1.8.2022 ==&lt;br /&gt;
* správně zobrazovaná hláška (nápověda) na úvodní webové stránce ohledně stavu konfigurace&lt;br /&gt;
* FC: přidáno tlačítko (odkaz) pro restart FULLC programu (např. pokud skončil a chcete jej ručně spustit znovu)&lt;br /&gt;
* FC: do výpisu chyby při pádu programu je přidán UTC čas (pro identifikaci, kdy se chyba stala)&lt;br /&gt;
* FC: spolehlivostní úpravy při startu programu (načtení z DF), a při zápisu nového programu (práce s DF)&lt;br /&gt;
&lt;br /&gt;
== 11.7.2022 ==&lt;br /&gt;
* FC: verze 0x0E&lt;br /&gt;
* FC: přidána funkce mktime()&lt;br /&gt;
* FC: přidána funkce gmtime()&lt;br /&gt;
* FC: přidána funkce localtime()&lt;br /&gt;
* opraveno zachování konfigurace ipwdg (webové rozhraní) a obsluhy relé ipwdg&lt;br /&gt;
&lt;br /&gt;
== 1.7.2022 ==&lt;br /&gt;
* FC: verze 0x0D&lt;br /&gt;
* FC: upravena funkce SDS_TOPB_keyboard_status() pro lepší předané výsledky&lt;br /&gt;
* FC: přidána funkce SDS_TOPB_keyboard_updn()&lt;br /&gt;
* FC: přidána funkce SDS_rescan_onewire()&lt;br /&gt;
* FC: odstraněno náhodné hlášení o už probíhajícím nahrávání programu při nahrávání z EXE&lt;br /&gt;
* BIG 64/128 prodloužen čas pro sestavení Ethernetového spojení, což řeší problém s některými USB síťovými kartami atd.&lt;br /&gt;
* opraveno HTTP POST nastavení položek NTP&lt;br /&gt;
* opraveno HTTP POST který teď neuzavře spojení dříve než má, pokud mazání NVM pro nový FW (nebo nový UserWeb) trvá dlouho&lt;br /&gt;
&lt;br /&gt;
== 12.4.2022 ==&lt;br /&gt;
* doplněna informační stránka o vnitřním stavu OneWire Master (pro snazší identifikaci problémů při používání sběrnice)&lt;br /&gt;
* oprava v bootloaderu pro řadu 512 - vyžaduje přeprogramování u výrobce pro všechna SDS řady 512 s FW starším než 14.2.2022&lt;br /&gt;
&lt;br /&gt;
== 3.4.2022 ==&lt;br /&gt;
* FC verze 0x0C&lt;br /&gt;
* FC: přidána funkce SDS_I2C_rw&lt;br /&gt;
* OneWire stabilnější&lt;br /&gt;
&lt;br /&gt;
== 21.1.2022 ==&lt;br /&gt;
* prioritu mají vybrané konfigurační položky v NVM (jsou-li tam platné) před baterií zálohovanou pamětí&lt;br /&gt;
* aktivován HTTP POST protokol pro nahrávání a konfiguraci SDS (viz [[SDS:POST_upload]])&lt;br /&gt;
&lt;br /&gt;
== 18.1.2022 ==&lt;br /&gt;
* RSTD zapíše do NVM všechny konfigurační položky (i to co nenuluje), pro jistotu že v NVM bude vše skutečně zapsáno&lt;br /&gt;
* načítání konfigurace upraveno (větší spolehlivost)&lt;br /&gt;
&lt;br /&gt;
== 15.1.2022 ==&lt;br /&gt;
* přidána stránka cfgstatus.htm - pro možnost kontroly stavu uložené konfigurace v pevné paměti (např. co nemáte uloženo)&lt;br /&gt;
* přidán M2M výstup ip.xml&lt;br /&gt;
* FC: přidán algoritmus SHA-256 do funkce SDS_crypto()&lt;br /&gt;
* FC: každý program má unikátní identifikátor, podle kterého lze např. kontrolovat či zpětně poznat co máte v SDS nahráno&lt;br /&gt;
* identifikátor FC programu přidán na webové rozhraní a do M2M výstupů, a do exe aplikace&lt;br /&gt;
* zobrazeno unikátní identifikační čislo SDS hardware (napevno spojeno s modulem SDS, nezměnitelné), teď i ve M2M výstupech&lt;br /&gt;
* SNMP: nové položky .8.90 , .8.91 , .8.99&lt;br /&gt;
* FC: nové get(u32) položky 2 a 87&lt;br /&gt;
&lt;br /&gt;
== 31.12.2021 ==&lt;br /&gt;
* možnost vyřadit NTP z činnosti zadáním adresy 127.0.0.1 (vhodné pro uživatele kteří získávají čas odjinud, např. přes LoRA)&lt;br /&gt;
* web: informace na web (p=8) o stavu připojování SD karty (mounting...) a o stavu kdy je FC program pozastaven (PAUSED)&lt;br /&gt;
* web: opraven zámek zvětšené konzole (echo)&lt;br /&gt;
* důslednější kontrola platnosti konfigurace při startu&lt;br /&gt;
&lt;br /&gt;
== 27.12.2021 ==&lt;br /&gt;
* opravena chyba kdy na webu nešlo nastavit 100 procent PWM duty (jen 0 až 99, teď už jde i 100)&lt;br /&gt;
* FC: několikanásobně zvětšena konzole (echo.htm)&lt;br /&gt;
* HW: při poruše hlavního zdroje hodin (krystal) se použije záložní zdroj&lt;br /&gt;
* HW: využíváme RTC pro udržení času při přechodu přes reset (drží čas dokud zase nepřijde NTP)&lt;br /&gt;
* aktualizován bootloader (aktualizace bootloaderu jen prostřednictvím přeprogramování u výrobce) - umí znovu nahrát FW pokud se v SoC poškodí&lt;br /&gt;
* vydána varianta 512 - vlastní soubor s firmware&lt;br /&gt;
&lt;br /&gt;
== 25.12.2021 ==&lt;br /&gt;
* pouze interní vydání&lt;br /&gt;
&lt;br /&gt;
== 26.3.2021 ==&lt;br /&gt;
* FC: oprava nesprávného zacházení s unsigned typy (na některých místech interně přemapovány na signed)&lt;br /&gt;
* FC: chování varianty if pro speciální kombinaci signed/unsigned dle specifikace standardu C&lt;br /&gt;
&lt;br /&gt;
== 9.2.2021 ==&lt;br /&gt;
* FC: oprava TID v MODBUS-TCP&lt;br /&gt;
* MBTC výpis rozšířen&lt;br /&gt;
* FC: drobná úspora heap (více dostupného místa)&lt;br /&gt;
* FC: dns resolv drobný fix&lt;br /&gt;
* FC: http_get a http_post důležitý fix&lt;br /&gt;
* FC: nová funkce http_close&lt;br /&gt;
* FC: chyba -7 pro MODBUS-TCP a pro MQTT&lt;br /&gt;
* vylepšený algoritmus S0, rozšířené možnosti nastavení detektoru S0 (nastavení přidáno ve webovém rozhraní)&lt;br /&gt;
&lt;br /&gt;
== 22.12.2020 ==&lt;br /&gt;
* web: ruční přepnutí CBY pro relé (tzn. &amp;quot;kdo ovládá relé&amp;quot;), na &amp;quot;FULL-C&amp;quot;, dané relé nevypne (off) ale ponechá jeho stávající stav (on, off)&lt;br /&gt;
* security fix&lt;br /&gt;
&lt;br /&gt;
== 10.12.2020 ==&lt;br /&gt;
* dřívější odeslání NTP požadavku po výpadku síťového spojení&lt;br /&gt;
* integrovaná korekce chyby A/D měření pro HW osazený LMV324; uživatel může povolit tuto automatickou opravu chyby LMV324 ve webové administraci&lt;br /&gt;
* počítání délky aktivace tarifního vstupu (doba T0 a T1 v sekundách za den) viz nové sys, pozor pro funkci vyžaduje NTP&lt;br /&gt;
* automatický odečet S0 počítadel (vždy za dnešek a včerejšek), viz nové sys, pozor pro funkci vyžaduje NTP&lt;br /&gt;
&lt;br /&gt;
== 23.11.2020 ==&lt;br /&gt;
* FC + FULLC.exe: oprava chyby v případě více #if / #ifdef / #endif bloků zapsaných hned za sebou&lt;br /&gt;
* FC: makra a define lze provést i uvnitř funkce (dříve jen venku)&lt;br /&gt;
* FC: detekce nesprávné dereference ukazatele&lt;br /&gt;
&lt;br /&gt;
== 14.11.2020 ==&lt;br /&gt;
* webová administrace: stránka p=42: index ck03 se propíše i do nastavení (chybělo od 23.10.2020, web byl aktualizován, nastavení ale přebíralo ck00)&lt;br /&gt;
&lt;br /&gt;
== 4.11.2020 ==&lt;br /&gt;
* FC + FULLC.exe: odstraněn problém při načtení nahraného FULL-C programu v SDS, kdy dříve mohlo u jedné specifické velikosti nahraného programu, dojít k jeho nespuštění kvůli neodpovídajícímu crc&lt;br /&gt;
&lt;br /&gt;
== 3.11.2020 ==&lt;br /&gt;
* FC: zobrazení (v konzoli) čísla řádku (ve zdrojovém kódu) při chybě (což velmi zlepší ladění programů)&lt;br /&gt;
* FULLC.exe: odstraněno omezení na 255 znaků na řádek&lt;br /&gt;
* FULLC.exe: zrychlení nahrávání do SDS&lt;br /&gt;
&lt;br /&gt;
== 23.10.2020 ==&lt;br /&gt;
* webová administrace: stránka p=42: změna indexu ck00 na ck03 ať se dají uživatelským skriptem všechny prvky samostatně rozlišit&lt;br /&gt;
* FC: oprava http_get/post: správné vyplnění výsledků i pro situaci kdy server ukončí spojení přes TCP RST&lt;br /&gt;
&lt;br /&gt;
== 14.10.2020 ==&lt;br /&gt;
* oprava FULL-C funkce XTEA-CRYPT (bug o dvě verze dříve)&lt;br /&gt;
&lt;br /&gt;
== 13.10.2020 ==&lt;br /&gt;
* důležitá oprava chyby ve FULL-C (ternary operator, a další nahlášené nesrovnalosti)&lt;br /&gt;
&lt;br /&gt;
== 13.9.2020 ==&lt;br /&gt;
* oprava detekce SD karty (některé varianty SD karet nebyly detekovány, teď už ano)&lt;br /&gt;
&lt;br /&gt;
== 9.8.2020 ==&lt;br /&gt;
* FULL-C verze 0B (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* různé drobné opravy a zabezpečení&lt;br /&gt;
* zobrazení auditlogu (webové rozhraní SDS)&lt;br /&gt;
* FC: http_post&lt;br /&gt;
* FC: MQTT klient&lt;br /&gt;
* FC: MODBUS-TCP klient&lt;br /&gt;
&lt;br /&gt;
== 4.8.2020 ==&lt;br /&gt;
* úprava obsluhy relé&lt;br /&gt;
* podpora OneWire modulu SDS-1W-T-RH&lt;br /&gt;
&lt;br /&gt;
== 3.10.2019 ==&lt;br /&gt;
* SMTP klient posílá v hlavičce i položku &amp;quot;Date&amp;quot; (ale jen za předpokladu správného času v SDS)&lt;br /&gt;
* RSTD při zapnutí zařízení, ve kterém není záložní baterie (nebo je vybitá), zachová původně nastavenou MAC adresu (vše ostatní ale už jde do defaultu, což je správně)&lt;br /&gt;
* SUDP: rozšířen NOP příkaz &lt;br /&gt;
* SUDP: přidány další nové příkazy (master_cmd: 32, 33, 40, 42, 44, 48)&lt;br /&gt;
&lt;br /&gt;
== 23.9.2019 ==&lt;br /&gt;
* oprava GUI (S0 Inputs)&lt;br /&gt;
* SNMP nabízí možnost číst všechny sdílené proměnné (FULL-C: Sxx, Uxx, Fxx, Txx)&lt;br /&gt;
* opraven nefunkční RSTD na modulu STSW-rev3&lt;br /&gt;
&lt;br /&gt;
== 23.6.2019 ==&lt;br /&gt;
* oprava chyby objevené ve FW 28.5.2019, kdy na některých specifických SDS nefungovaly AD vstupy&lt;br /&gt;
&lt;br /&gt;
== 28.5.2019 ==&lt;br /&gt;
* oprava funkce SD karty (pro případy kdy se stala po čase nedostupná pro FC/web)&lt;br /&gt;
&lt;br /&gt;
== 5.5.2019 ==&lt;br /&gt;
* dořešeno hlídání stavu (načtení, atd.) SD karty i v případě provozu náročného FULL-C programu (tedy i pro hluboce vnořené smyčky)&lt;br /&gt;
* oprava původně chybné implementace S-UDP příkazu &amp;quot;1Waccess: sub-command 8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 24.2.2019 ==&lt;br /&gt;
* překlopení z BETA do oficiálního FW&lt;br /&gt;
* automatika zimní/letní čas&lt;br /&gt;
* přístup na SD kartu: FULL-C pracuje se soubory (vytvoření, smazání, čtení a zápis, atd.) &lt;br /&gt;
* přístup na SD kartu: web server zobrazuje soubory ze SD karty (vše ve složce \web\ a podsložkách této složky)&lt;br /&gt;
* oprava čtení napětí baterie pro variantu 128K&lt;br /&gt;
* shared.xml&lt;br /&gt;
* odstraněno omezení délky ve shared.txt&lt;br /&gt;
* zprovozněno getsv&lt;br /&gt;
* verze FULL-C je teď FC 0x0A (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* FULL-C: nová možnost způsobu čtení teploty SoC&lt;br /&gt;
* FULL-C: index 64, 65, 184, 185, 429, 430, atd.&lt;br /&gt;
* FULL-C: doplněné set/get funkce pro sdílené proměnné&lt;br /&gt;
* FULL-C: s/printf umí správné zpracovat požadavek na určení desetinných míst pro float&lt;br /&gt;
* FULL-C: funkce pro reset FC programu&lt;br /&gt;
* FULL-C: funkce pro watchdog FC programu&lt;br /&gt;
* SNMP nové OIDy (dle přidaných věcí - čas, sdcard)&lt;br /&gt;
&lt;br /&gt;
== 1.7.2018 ==&lt;br /&gt;
* SNMP: sdsS0translatedUnitT0,1 je poskytováno jako hodnota od odečtu (ne od úplného začátku měření, jak to bylo předtím) &lt;br /&gt;
* FULL-C: přidán index 183 poskytující datum vydání FW který je právě nahrán v SDS&lt;br /&gt;
&lt;br /&gt;
== 27.6.2018 ==&lt;br /&gt;
* verze FULL-C je teď FC 0x09 (vyžaduje použít aktuální EXE pro překlad)&lt;br /&gt;
* FULL-C: přidána podpora pro int64_t a uint64_t&lt;br /&gt;
* FULL-C: přejmenováno set a get funkce (rozlišení 32 a 64 bit)&lt;br /&gt;
* FULL-C: snprintf přesně dle standardu (zrušena nevhodná změna z 20.12.2017)&lt;br /&gt;
* drobné opravy&lt;br /&gt;
* drobná oprava v odchozím TCP-SYN a v generátoru ISN&lt;br /&gt;
&lt;br /&gt;
== 8.3.2018 ==&lt;br /&gt;
* oprava echo.htm - správně wrapuje obsah, a nejsou tam nadbytečné 0x00&lt;br /&gt;
* vhodnější řešení rexmitu částí webových stránek a dynamických dat (ocení to zejména uživatelé s mobilním připojením pro SDS)&lt;br /&gt;
&lt;br /&gt;
== 2.3.2018 ==&lt;br /&gt;
* aktulizace a oprava ve výpočtu &amp;quot;aktuálního výkonu&amp;quot; pro okrajové situace (např. krajní hodnoty impulsní konstanty)&lt;br /&gt;
&lt;br /&gt;
== 11.2.2017 ==&lt;br /&gt;
* zprovozněny funkce set/get pro indexy 4000 až 4300 (alternativní přístup k číselným sdíleným proměnným)&lt;br /&gt;
&lt;br /&gt;
== 21.12.2017 ==&lt;br /&gt;
* zvýšena stabilita spuštění po zapnutí&lt;br /&gt;
&lt;br /&gt;
== 20.12.2017 ==&lt;br /&gt;
* dočasná změna ve FULL-C (bude zrušena): funkce snprintf() má interně posunutý limit délky zápisu o 1 (toto je záměrný rozdíl proti C99). Změna v SDS je provedena z důvodu neznalosti programátorů FC v tom, že do snprintf() limitu je potřeba započítat i jeden byte pro ukončující nulu. Ve výsledku tedy zápis &amp;quot;snprintf(buf, limit, ...);&amp;quot; je v FC interně vykonán jako &amp;quot;snprintf(buf, limit+1, ...);&amp;quot;.&lt;br /&gt;
* oprava ve FULL-C: výpočet platné délky bufferu funguje i pro ukazatele vytvořené offsetem ze základní alokované adresy (příklad takového bufferu je: buf=malloc(x)+offset;)&lt;br /&gt;
* stav všech relé je načten z paměti vždy po zapnutí modulu, a ty relé které jsou ručně ovládány (manual control) a které byly před vypnutím v zapnutém (ON) stavu, jsou po zapnutí modulu aktivovány (zatímco relé ovládané z IP-W a FC jsou vždy po zapnutí modulu uvedeny do OFF stavu)&lt;br /&gt;
&lt;br /&gt;
== 18.12.2017 ==&lt;br /&gt;
* UserWEB projekt má opravenu chybu, kdy nebylo možno použít delší Name Chain tabulku (tedy lze už vložit mnohem více souborů) &lt;br /&gt;
* nastavená MAC adresa je zachována i po průchodu RSTD (byla-li platná)&lt;br /&gt;
* opravena chyba způsobující nefunkční http_get(), teď už to opět funguje&lt;br /&gt;
* aktualizace obsluhy PWM (např. lépe přepočítává zobrazovaná &amp;quot;procenta&amp;quot;)&lt;br /&gt;
* oprava strcat() funkce (opraveno hlídání max velikosti bufferu ze &amp;quot;from&amp;quot; na &amp;quot;to&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
== 18.9.2017 ==&lt;br /&gt;
* FULL-C: printf() správně tiskne float i pokud se formátovací parametr zadá jako %d (tedy ne jako %f)&lt;br /&gt;
* FULL-C: snprint() opraven (když je 'from' kratší než 'to' tak je 'to' doplněn 0x00 - je to zvláštnost, nemá se to používat, ale C99 to předepisuje, tak to dodržíme)&lt;br /&gt;
&lt;br /&gt;
== 9.9.2017 ==&lt;br /&gt;
* vnitřní bezpečnostní aktualizace&lt;br /&gt;
&lt;br /&gt;
== 29.8.2017 ==&lt;br /&gt;
* oprava chování RSTD - pokud je zapojen před zapnutím, nepřejde do automatického resetu po 10sec, ale RSTD je použit a SDS pracuje dále; přitom funkce &amp;quot;zapoj RSTD za běhu&amp;quot; je zachována správně&lt;br /&gt;
* zásadní zlepšení odolnosti FULL-C proti chybám programátora - vnitřní hlídání rozsahů bufferu a stringů, zamezující zápisu za hranice pole (typicky chybné použití sprintf() funkce, ale toto hlídání je aplikováno obecně všude)&lt;br /&gt;
&lt;br /&gt;
== 8.8.2017 ==&lt;br /&gt;
* oprava: FC teď správně převádí URL kód &amp;quot;sv?xxxx=yyyy...&amp;quot;, na text (vypadlo 31.3. při rozšíření počtu znaků pro sdílené proměnné Txx) &lt;br /&gt;
&lt;br /&gt;
== 10.7.2017 ==&lt;br /&gt;
* vydán firmware pro variantu &amp;quot;128kB&amp;quot; (od teď vychází dva typy firmware, pro variantu &amp;quot;64kB&amp;quot; a variantu &amp;quot;128kB&amp;quot;, vyberete si tu svou dle HW který máte)&lt;br /&gt;
* velká optimalizace využití paměti pro uložení a běh FULL-C programu (komprese, a zmenšení vyžadovaného heapu pro běh programu) - významně zvětšuje možnou velikost FC programu&lt;br /&gt;
* pin RSTD lze teď také použít i bez vypnutí a zapnutí SDS, stačí jej na 10 vteřin za běhu zkratovat (pak se provede RSTD a SDS se rebootuje) - výhodné pro zařízení kde vypnutí nelze provést&lt;br /&gt;
* drobné užitečné opravy dle hlášení uživatelů&lt;br /&gt;
* verze FC zvýšena na 0x08, a přidána možnost uložit 128 proměnných do baterií zálohované pamětí (tzn. obsah přežije výpadek napájení a FC program po restartu o tyto údaje nepřijde)&lt;br /&gt;
&lt;br /&gt;
== 2.6.2017 ==&lt;br /&gt;
* návratová hodnota funkce DF_read_page() je nastavena správně i v případě, kdy tato funkce čte data z cache (opakované čtení stejné stránky DF)&lt;br /&gt;
&lt;br /&gt;
== 6.4.2017 ==&lt;br /&gt;
* přidána FULL-C funkce AES-128-CTR, viz SDS_crypto(0x20, ...);&lt;br /&gt;
&lt;br /&gt;
== 31.3.2017 ==&lt;br /&gt;
* oprava RS485-MASTER drive, je teď zcela přesný (tzn. vypnut v přesném časování za úplně posledním vyslaným bitem)&lt;br /&gt;
* oprava čtení konfigurace 1-W, pomocí sds_get_a()&lt;br /&gt;
* přidán index 139&lt;br /&gt;
* odstraněno omezení na 32 znaků pro sdílené proměnné (přenos textu) &amp;quot;Txx&amp;quot; (xx = 00 až 99)&lt;br /&gt;
* fix návratových hodnot FULL-C funkcí pro práci s DF (teď to vrací správně 1 nebo 0, podle wiki)&lt;br /&gt;
* upřesněn název: (z BIG na BIG-64) / (z STSW na STSW-64)&lt;br /&gt;
* vyžaduje aktuální SDSLOAD.exe (6.3.2017 nebo novější) a FULLC.exe (6.3.2017 nebo novější)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== starší záznamy ==&lt;br /&gt;
&lt;br /&gt;
Nejsou k dispozici.&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=944</id>
		<title>Firmware</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=Firmware&amp;diff=944"/>
		<updated>2025-03-15T09:42:27Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nový Firmware ==&lt;br /&gt;
&lt;br /&gt;
Aktualizujte si své SDS - nahrejte do něj nový firmware, který získáte na této stránce - '''naskrolujte dolů''' kde naleznete odkaz na BIN soubor pro vaše zařízení.&lt;br /&gt;
&lt;br /&gt;
Postup a řešení problémů: [[Manual_Firmware_Update|Návod pro aktualizaci Firmware v SDS]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Odkazy ke stáhnutí ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;PC Software&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_sdsc_winexe.jpg]] '''Program SDSC.exe''' (programovací jazyk SDS-C, aktualizace firmware pro SDS '''první řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; stáhnout WinEXE pro SDS-C [https://sds.an-d.cz/firmware/SDSC_310123.exe zápis/simulace/upload SDS-C (SDS-C '''verze 09''') a UWEB, ze dne 31.1.2023]&amp;lt;br&amp;gt;SHA-256: daf1095f206404e33223f675f5d0bc09d4fc5dfd7d9f79f4f735af88f5ff1e6a&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program FULLC.exe''' (programovací jazyk FULL-C, aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; (FC verze '''0x12''' - '''aktuální'''): stáhnout WinEXE pro FULL-C [https://sds.an-d.cz/firmware/FULLC_220724.exe zápis/upload FULL-C a UWEB, ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro Firmware od 9.3.2023 včetně, pro všechny varianty SDS (64kB a 128kB a 512kB)&amp;lt;br&amp;gt;SHA-256: b4cb95d8ec8a6e844a3a4c9a2e9fc50ece60ccf44e8043f8c10f46b2294cae0b&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_fullc_winexe.jpg]] '''Program SDSLOAD.exe''' (&amp;quot;jednokrokový&amp;quot; upload .FC souborů a aktualizace firmware pro SDS '''druhé řady''')&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; ('''aktuální''' verze, pro FW od 10.7.2017 včetně a dále) stáhnout WinEXE [https://sds.an-d.cz/firmware/SDSLOAD_220724.exe program SDSLOAD ze dne 22.7.2024],&amp;lt;br&amp;gt; určeno pro všechny SDS varianty 64kB a 128kB a 512kB, (subvarianty DP a DS84)&amp;lt;br&amp;gt;SHA-256: ded5bf1aca2e04e22c33899a0976deccc8ff76eb88f53ecd9769788b7daa25a7&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_empty.jpg]] '''Program SDS LOG'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| &amp;lt;li&amp;gt; Program '''[[SDS LOG: intro|SDS LOG]]''' - verze 0.1 ze dne 26.8.2011 - [https://sds.an-d.cz/firmware/SDS_LOG.exe stáhnout EXE program]&lt;br /&gt;
&amp;lt;li&amp;gt; Zdrojové kódy programu SDS LOG (Creative Commons Licence) [[SDS LOG: source code|ke stáhnutí zde]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[SDS LOG: changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;První Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMICROE.jpg]]  [[Soubor:Thumbnail_SDSMICRO.jpg]] [[Soubor:Thumbnail_SDS_DIN.jpg]] '''D0000001''' MICRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: LM]] varianty '''LIGHT''', '''LIGHT 2''' a '''E (DIN)'''.&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny varianty a revize SDS MICRO LM.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_CZ.bin SDS-MICRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_010722_EN.bin SDS-MICRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B0000057''' MICRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_CZ.bin SDS-MICRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_021123_EN.bin SDS-MICRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MICRO_ST_1.png]] '''B000D957''' MICRO ST DP&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MICRO: ST DP]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MICRO ST DP.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_CZ.bin SDS-MICRO-ST-DP-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MICRO_ST_DP_021123_EN.bin SDS-MICRO-ST-DP-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MICRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MINI_1.png]] [[Soubor:Thumbnail_SDS_MINI_2.png]] '''B0000020''' MINI ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MINI: ST]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09), firmware je jednotný pro všechny revize SDS MINI ST.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_CZ.bin SDS-MINI-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MINI_021123_EN.bin SDS-MINI-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
[[SDS MINI: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSMACRO.jpg]] '''C0000001''' MACRO LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: LM]].&lt;br /&gt;
&amp;lt;li&amp;gt;Výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_CZ.bin SDS-MACRO-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_010722_EN.bin SDS-MACRO-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_MACRO_ST_rev1.png]] '''C0000057''' MACRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS MACRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_CZ.bin SDS-MACRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_MACRO_ST_021123_EN.bin SDS-MACRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS MACRO: ST: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSTTCPRO.jpg]] '''B0000001''' TTCPRO ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS TTCPRO: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_CZ.bin SDS-TTCPRO-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_TTCPRO_021123_EN.bin SDS-TTCPRO-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS TTCPRO ST má shodný Change Log se SDS MINI ST, a to zde: [[SDS MINI: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:thumbnail_SDSIO6.jpg|160px]] '''D0000006''' IO6 LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: LM]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_CZ.bin SDS-IO6-LM-CZ ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_010722_EN.bin SDS-IO6-LM-EN released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 LM má shodný Change Log se SDS MICRO LM, a to zde: [[SDS MICRO: LM: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_empty.jpg]] '''D0000011''' IO6 ST&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS IO6: ST]], výchozí firmware (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ČESKÁ LOKALIZACE''' / FULL CZECH LOCALISATION&amp;lt;br&amp;gt; - stáhnout firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_CZ.bin SDS-IO6-ST-CZ ze dne 2.11.2023]&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&amp;lt;br&amp;gt; - download firmware [https://sds.an-d.cz/firmware/SDS_IO6_ST_021123_EN.bin SDS-IO6-ST-EN released on 2-Nov-2023]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS IO6 ST má shodný Change Log se SDS MICRO ST, a to zde: [[SDS MICRO: ST: firmware changelog]].&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDS_FTP_rev1.png]] '''F0000001''' FTP LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS FTP: LM]], výchozí firmware.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; Firmware: ''SDS FTP ze dne 7.9.2010'' už nahrán ve výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt; &lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS FTP: LM: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_ONEDPS.jpg]] '''E000AAA1''' UPS ONEDPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: ONEDPS]], finální jednodesková verze (aktuální) (SDS-C verze č. 09).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Stáhnout firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_CZ.bin (Česká lokalizace) SDS-UPS-ONEDPS-LM ze dne 1.7.2022]&lt;br /&gt;
&amp;lt;li&amp;gt;Download firmware [https://sds.an-d.cz/firmware/SDSUPS_ONEDPS_010722_EN.bin (English language version) SDS-UPS-ONEDPS-LM released on 1-Jul-2022]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;[[SDS UPS: LM: ONEDPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSUPS_TWODPS.jpg]] '''C00xxxxx''' UPS TWODPS LM&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Výrobek [[SDS UPS: LM: TWODPS]], HW rev3u - DVOUDESKOVÁ (UŽ NEPRODÁVANÁ) varianta.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je zaslán na požádání (pošlete email), aktuální verze je z 1.3.2011 (dále aktualizováno na specifické požádání, raději proto přejděte na nový HW).&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Každá deska má svou kalibraci, proto každá deska má svůj vlastní FW, proto musíte uvést S/N svého výrobku.&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;HISTORIE: [[SDS UPS: LM: TWODPS: firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;successbox&amp;quot;&amp;gt;Druhá Produktová Řada SDS&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 5px;background-color:#cdcdcd;&amp;quot;| [[Soubor:Thumbnail_SDSBIG.jpg]] [[Soubor:Thumbnail_SDSSMALL.jpg]] '''B1900001''' / '''B1900002''' / '''B1900004''' : BIG, BIG2, SMALL, STSW, MBGW&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;|&amp;lt;li&amp;gt;Společný firmware pro výrobky [[SDS BIG]], [[SDS SMALL]] a [[SDS STSW]] a [[SDS MBGW]]&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je jednotný pro všechny varianty '''SDS Druhé Produktové Řady''', nutné je rozlišení dle varianty 64kB/128kB/512kB. Rozlišení podle dalších subvariant (DP, DS84) se neprovádí.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware je společný pro BIG a BIG2, rozlišení je pouze dle varianty 64/128/512.&lt;br /&gt;
&amp;lt;li&amp;gt;Pozn. Modul SMALL a modul MBGW interně obsahuje modul STSW, nahrává se tam tedy stejný FW.&lt;br /&gt;
&amp;lt;li&amp;gt;Firmware vždy vyžaduje použití odpovídající, aktuální verze FULLC.EXE programu. &lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;SDS BIG/SMALL/STSW: [[SDS BIG: firmware changelog|firmware changelog]]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;64kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 64kB) [https://sds.an-d.cz/firmware/SDS_BIG_64K_150325_EN.bin firmware &amp;quot;64kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 15.3.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;128kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 128kB) [https://sds.an-d.cz/firmware/SDS_BIG_128K_150325_EN.bin firmware &amp;quot;128kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 15.3.2025]&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| VARIANTA HARDWARE &amp;quot;512kB&amp;quot;&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;'''PLNĚ ANGLICKÁ LOKALIZACE''' / FULL ENGLISH LOCALISATION&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [[firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 12.4.2022|informace pokud máte SDS512 s FW &amp;lt;b&amp;gt;starším&amp;lt;/b&amp;gt; než 12.4.2022]]&lt;br /&gt;
&amp;lt;li&amp;gt;- stáhnout firmware (varianta: 512kB) [https://sds.an-d.cz/firmware/SDS_BIG_512K_150325_EN.bin firmware &amp;quot;512kB&amp;quot; SDS-BIG/SMALL/STSW/OEM ze dne 15.3.2025]&lt;br /&gt;
&amp;lt;li&amp;gt;Informace: SDS BIG/SMALL/STSW 512 se starším FW než 12.4.2022 vyžaduje přeprogramování u výrobce.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px;&amp;quot;| POZOR&lt;br /&gt;
'''Aktualizujte''' své doplňkové sandwich desky, tzn. [[SDS BIG: DALI]], [[SDS BIG: LORA]] - na verzi FW 5.12.2016 '''nebo novější'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Aktualizaci lze provést jen fyzicky u výrobce, ten ji provede bezplatně (zašlete výrobci vaše SDS pro jeho aktualizaci). Se starým FW nebude tento HW plně fungovat.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;padding: 15px; background-color:#ffffff;&amp;quot;|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Informace ===&lt;br /&gt;
&lt;br /&gt;
 VŽDY MĚJTE VE SVÉM ZAŘÍZENÍ NEJNOVĚJŠÍ FIRMWARE, A POUŽÍVEJTE TAKÉ NEJNOVĚJŠÍ SDS-C EXE / FULL-C EXE PROGRAM.&lt;br /&gt;
 V opačném případě vám budou chybět nové funkce, které neustále přidáváme, a také nebudete mít opravené nalezené chyby.&lt;br /&gt;
 V případě že chcete získat podporu, musíte mít instalovaný nejnovější firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Historický Software ===&lt;br /&gt;
&lt;br /&gt;
Za účelem aktualizace takových SDS, kde už dlouho nebyl aktualizován firmware, je potřeba použít odpovídající EXE program pro aktualizaci takovéhoto zařízení.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== První Produktová Řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro SDS-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_151119.exe ze dne '''15.11.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 08, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020118.exe ze dne '''2.1.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 07, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware novějším než SRPEN 2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_020317.exe ze dne '''2.3.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které mají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 8.8.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_060216.exe ze dne '''6.2.2016''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 06, které nemají podporu pro UserWEB project (tj. SDS první řady, které jsou provozovány s firmware starším než 24.1.2017)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_231111.exe ze dne '''23.11.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s SDS-C ver 04&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro SDS-C (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_170211.exe ze dne '''17.2.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''února 2011''')&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro ''SDS-C verze č. 03'' (zápis/simulace/upload SDS-C), [https://sds.an-d.cz/firmware/archive/SDSC_140511.exe ze dne '''14.5.2011''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu se '''starým''' firmware (pro ty kteří zcela náhodou mají neaktualizovaný firmware s původem do '''konce května 2011''')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Druhá Produktová řada ====&lt;br /&gt;
&lt;br /&gt;
'''Nepoužívejte''' starý firmware a staré verze aplikace pro FULL-C. '''Aktualizujte''' své zařízení pravidelně.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Následující aplikace jsou poskytnuty pouze jako negarantovaná podpora zařízení, které jste ještě nestihli aktualizovat na nejnovější firmware. Jiný význam tyto aplikace už nemají.&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_070323.exe ze dne '''7.3.2023''']&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_311222.exe ze dne '''31.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 11, (firmware od 9.1.2023 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_071222.exe ze dne '''7.12.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 10, (firmware od 18.11.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_161022.exe ze dne '''16.10.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0F, (firmware od 16.10.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_110722.exe ze dne '''11.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0E, (firmware od 11.7.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010722.exe ze dne '''1.7.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0D, (firmware od 6.8.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030422.exe ze dne '''3.4.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0C, (firmware od 23.3.2022 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010322.exe ze dne '''1.3.2022''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0B, (firmware od 6.8.2020 včetně, varianty SDS 64kB a 128kB a 512kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_030119.exe ze dne '''3.1.2019''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 0A, (firmware od 3.1.2019 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_010718.exe ze dne '''1.7.2018''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 09, (firmware od 27.6.2018 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_100717.exe ze dne '''10.7.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 08, (firmware od 10.7.2017 včetně, varianty SDS 64kB a 128kB)&lt;br /&gt;
&lt;br /&gt;
* (HISTORICKÉ) stáhnout WinEXE pro FULL-C (zápis/upload FULL-C a UWEB), [https://sds.an-d.cz/firmware/archive/FULLC_080617.exe ze dne '''8.6.2017''']&amp;lt;br&amp;gt; - určeno pro zpětnou kompatibilitu pro zařízení s FULL-C ver 06, (firmware starší než Červenec-2017, a pouze pro variantu SDS 64kB)&lt;br /&gt;
&lt;br /&gt;
* (historická verze) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_201022.exe ze dne 20.10.2022]&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_120417.exe ze dne 12.4.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB která používá ''starý'' firmware (2017 nebo starší)&lt;br /&gt;
&lt;br /&gt;
* (historická verze, pro starší FW) stáhnout WinEXE program SDSLOAD [https://sds.an-d.cz/firmware/archive/SDSLOAD_100717.exe ze dne 10.7.2017],&amp;lt;br&amp;gt; určeno pouze pro SDS variantu 64kB a 128kB (nepodporuje variantu 512kB tak jako aktuální stáhnutelná verze aplikace)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Beta Testing ==&lt;br /&gt;
&lt;br /&gt;
Než vydáme novou verzi, je potřeba změny a novinky otestovat.&lt;br /&gt;
&lt;br /&gt;
Pokud jste ochotní se testu zúčastnit, pak se podívejte [https://forum.sds.an-d.cz/viewtopic.php?id=129 na tento odkaz]. Zde jsou uveřejněny vždy nejnovější beta verze firmware.&lt;br /&gt;
&lt;br /&gt;
Diskuse s vývojem k aktuálnímu Firmware je k dispozici na našem fóru.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=M2M:_S-UDP_protocol&amp;diff=943</id>
		<title>M2M: S-UDP protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=M2M:_S-UDP_protocol&amp;diff=943"/>
		<updated>2025-03-15T09:02:42Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje funkci zařízení SDS '''druhé produktové řady''' - protože SDS první produktové řady používají jiný protokol.&lt;br /&gt;
&lt;br /&gt;
== Rychlá komunikace: S-UDP ==&lt;br /&gt;
&lt;br /&gt;
Pomocí speciálního protokolu, kdy se data přenášejí prostřednictvím [http://en.wikipedia.org/wiki/User_Datagram_Protocol UDP], je možné získávat informace z výrobků řady SDS/OnlineTechnology.&lt;br /&gt;
&lt;br /&gt;
 S-UDP používá následující výchozí UDP PORT: 310&lt;br /&gt;
&lt;br /&gt;
Komunikace probíhá formou DOTAZ - ODPOVĚĎ. To znamená, že ten, kdo má o informace zájem (vzdálený uživatel) pošle dotaz (korektně vyplněný UDP paket, viz dále) a obratem obdrží od zařízení odpověď - UDP paket s informacemi. UDP Port na kterém je komunikace prováděna lze samozřejmě v administraci zařízení změnit.&lt;br /&gt;
&lt;br /&gt;
Přenos dat využívá specifického protokolu, který umožňuje bezpečně ovládat specifické zařízení SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Typické použití:''' komunikace zařízení SDS s protistranou (např. aplikace na mobilním telefonu).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Informace == &lt;br /&gt;
&lt;br /&gt;
Některé z FULL-C funkcí, které jsou zde popsány, jsou plně implementovány až ve firmware 03/2025 a dále. Je potřeba, aby jste měli svůj modul SDS aktualizován na nový firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bezpečnost ==&lt;br /&gt;
&lt;br /&gt;
Protokol S-UDP je založen na důsledné autentizaci strany, která posílá zprávu - zařízení SDS ověřuje identitu odesílatele příkazu, a ten může ověřit identitu SDS který odpovídá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to založeno na následujícím principu:&lt;br /&gt;
&lt;br /&gt;
- S-UDP protokol je zabezpečen symetrickou šifrou, se sdíleným klíčem který znají jen komunikující strany (bezpečnost je přímo úměrná úrovni zabezpečení tohoto klíče na obou stranách)&lt;br /&gt;
&lt;br /&gt;
- SDS má unikátní identifikátor (zaručeně unikátní, od výrobce) který nelze změnit (je fyzicky vypálen v SoC - nezměnitelně přímo v silikonu chipu).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S-UDP protokol ==&lt;br /&gt;
&lt;br /&gt;
Každý příkaz a odpověď jsou v samostatném, jediném, UDP paketu.&lt;br /&gt;
&lt;br /&gt;
Každý paket je sestaven v rámci společného formátu, který je zde popsán. Samotný doplňující datový obsah (payload) je dynamický, a u některých příkazů není potřeba.&lt;br /&gt;
&lt;br /&gt;
S-UDP Paket se tedy skládá z těchto základní částí (tyto části jsou právě přenášeny UDP paketem, v následující sestavě):&lt;br /&gt;
&lt;br /&gt;
  [MASTER PACKET CONTENTS]&lt;br /&gt;
 &lt;br /&gt;
   OFFSET    | LEN    |  DATA&lt;br /&gt;
   ----------+--------+---------------------------------------------------------------&lt;br /&gt;
     0       |     28 |  HEADER&lt;br /&gt;
    28       |  PL*16 |  ENCRYPTED PAYLOAD (contains: payload-header and payload-data)&lt;br /&gt;
&lt;br /&gt;
'''Pozor!''' Hodnota PL je velikost [ENCRYPTED PAYLOAD] vydělená 16. To znamená, že velikost [ENCRYPTED PAYLOAD] musí být beze zbytku dělitelná 16 (tzn. pouze hodnota 16, 32, 64, ...) ! Pokud je potřeba, doplní se na úplný konec (viz oblast &amp;quot;R&amp;quot;) zarovnání do potřebné délky, aby se dosáhlo čisté dělitelnosti 16.&lt;br /&gt;
&lt;br /&gt;
 LITTLE-ENDIAN&lt;br /&gt;
&lt;br /&gt;
Následující uvedené položky jsou ve formátu [http://en.wikipedia.org/wiki/Endianness#Little-endian Little-Endian] (procesory: ARM, x86):&lt;br /&gt;
* ''uword'' (unsigned 16-bit)&lt;br /&gt;
* ''dword'' (unsigned 32-bit)&lt;br /&gt;
* ''slong'' (signed   32-bit)&lt;br /&gt;
* ''qword'' (unsigned 64-bit)&lt;br /&gt;
&lt;br /&gt;
Položky typu: ''byte'', ''sbyte'', ''bytes'' - jsou jednotlivé samostatné bajty, nesdružené do společného čísla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zde jsou uvedeny detailní položky:&lt;br /&gt;
 &lt;br /&gt;
  [MASTER PACKET CONTENTS]&lt;br /&gt;
 &lt;br /&gt;
   OFFSET   | LEN  |  TYPE  | DATA&lt;br /&gt;
   ---------+------+--------+-----------------------------&lt;br /&gt;
 &lt;br /&gt;
                              [HEADER]&lt;br /&gt;
 &lt;br /&gt;
    0       |   3  |  bytes | header &amp;quot;SDS&amp;quot;&lt;br /&gt;
    3       |   1  |   byte | TV = (SDS-product-line) including (S-UDP protocol master-version)&lt;br /&gt;
    4       |   1  |   byte | PL = number of 16B chunks - this is the payload_length of [ENCRYPTED PAYLOAD] (example: PL==10 =&amp;gt; 160 bytes)&lt;br /&gt;
    5       |   1  |   byte | encryption-flag  (NOW ACCEPTS ONLY: 0x10 == XTEA-64-CTR)&lt;br /&gt;
    6       |   1  |   byte | reserved&lt;br /&gt;
    7       |   1  |   byte | CK1: basic additive checksum for [ENCRYPTED PAYLOAD] (start from (including) byte offset [28] and forward)&lt;br /&gt;
    8       |   4  |  dword | user_identifier (correlation identifier) - use this to correlate query to response&lt;br /&gt;
   12       |  16  |  bytes | CounterBlock&lt;br /&gt;
  ----------+------+--------+----------------------------&lt;br /&gt;
 &lt;br /&gt;
                              [ENCRYPTED PAYLOAD] -&amp;gt; everything from this point is included:&lt;br /&gt;
 &lt;br /&gt;
   28       |   1  |   byte | random number (shall be always different than what was used ever before)&lt;br /&gt;
   29       |   1  |   byte | CK2: basic additive checksum for [HEADER] (all bytes [0] to [27] included, BUT: skipping byte [7])&lt;br /&gt;
   30       |   2  |  uword | XR_MTU value (maximal size of the custom-payload data including R) ( XL + R &amp;lt;= XR_MTU )&lt;br /&gt;
   32       |   4  |  dword | CRC-32 (part-header and plain-text payload) -&amp;gt; byte [36] (included) up to [52+XL-1] (the R area is not included here)&lt;br /&gt;
   36       |   4  |  dword | uptime (msecs from boot)&lt;br /&gt;
   40       |   4  |  dword | time (epoch) (or, if no NTP is available to SDS, this will be a value of &amp;quot;seconds from boot&amp;quot;)&lt;br /&gt;
   44       |   4  |  dword | SDS device type (0xXXXXXXXX) - THIS MUST MATCH&lt;br /&gt;
   48       |   1  |   byte | master_command&lt;br /&gt;
   49       |   1  |   byte | sub_command&lt;br /&gt;
   50       |   2  |  uword | XL value (exact length of the actually useful payload-data): XL = (PL*16) - R - 24&lt;br /&gt;
 &lt;br /&gt;
   52       |  XL  |  bytes | custom payload-data [C-PAYLOAD]&lt;br /&gt;
 &lt;br /&gt;
   52+XL    |   R  |  bytes | specific set of (random data filling) to round-up (the PL*16 value) to a clean 16B multiply (16, 32, 64, etc.)&lt;br /&gt;
 &lt;br /&gt;
  ----------+------+--------+----------------------------&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;SDS device type&amp;quot; je určena podle typu SDS, se kterým komunikujete. Seznam hodnot viz [[Firmware]], například 0xB1900001 pro BIG-64 nebo 0xB1900002 pro BIG-128 atd.Pokud tato hodnota neodpovídá typu firmware v daném SDS, bude paket zcela ignorován a neproveden. Jediná vyjímka je master_command == NOP, což je záměrná vyjímka, která umožní zjištění typu SDS (a přítomnosti SDS) při zahájení komunikace.&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;random number&amp;quot; je zde proto, aby šifrované data byly pokaždé jiné, i když se přenáší stejný obsah (tzn. jedná se o zábranu stenografického odhadu obsahu payloadu).&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;time&amp;quot; umožňuje zařízení, které komunikuje s SDS, zabránit &amp;quot;replay&amp;quot; útoku (když se zaznamená paket a později se zopakuje - v takovém případě se na to přijde protože &amp;quot;time&amp;quot; bude významně starší). SDS kontrolu provádí vůči svému vnitřnímu času, vzdálené zařízení co se SDS komunikuje by tuto kontrolu mělo dělat také.&lt;br /&gt;
&lt;br /&gt;
Protože hodnota &amp;quot;time&amp;quot; se zvyšuje pouze co 1 vteřinu, je k dispozici i hodnota &amp;quot;uptime&amp;quot; která se po resetu/bootu (kde se nastaví na nulu) zvyšuje každou 1 milisekundu o jedničku. Kombinace umožňuje vhodně sestavit algoritmus detekce &amp;quot;replay&amp;quot; útoků.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CounterBlock&amp;quot; se využívá pro nastavení začátku šifrování a dešifrování. Všechny detaily jsou zcela shodné jako pro [[FULL-C_crypto_functions|FULL-C funkci SDS_Crypt()]]. Z hlediska bezpečnosti je důležité, aby obě strany neustále používaly zvyšující se CounterBlock obsah (začít &amp;quot;od jedničky&amp;quot; pouze a jenom po resetu/bootu), tzn. pro každou zprávu použít poslední hodnotu counteru a na té dále stavět pro novou zprávu atd. .&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;crc32&amp;quot; se počítá pro dešifrované data, algoritmus je identický jako pro [[FULL-C_crypto_functions|FULL-C funkci SDS_Crypt()]].&lt;br /&gt;
&lt;br /&gt;
Pro zvolené XTEA-64-CTR má &amp;quot;CounterBlock&amp;quot; následující sestavu svého obsahu:&lt;br /&gt;
&lt;br /&gt;
   CounterBlock:&lt;br /&gt;
 &lt;br /&gt;
   OFFSET    | LEN  |  TYPE  |  DATA&lt;br /&gt;
   ----------+------+--------+-----------------------------------------------------------------------------------------&lt;br /&gt;
    0        |   8  |  qword |  XTEA-64-CTR: 64-bit counter (counter is increased by 1, for each 16B of processed data)&lt;br /&gt;
    8        |   8  |  bytes |  (reserved) not-used area = reserved (fill with 0x00) &lt;br /&gt;
&lt;br /&gt;
Pro jiné mechanismy (do budoucna) je v CounterBlock oblasti přidána ještě 8B rezerva (např. pro AES-128 se pak využije všech 16 bajtů).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;TV&amp;quot; (v [HEADER] na offsetu [3]) je určení typu a verze protokolu. Skládá se ze dvou čtyřbitových údajů, viz následující tabulka.&lt;br /&gt;
&lt;br /&gt;
 TV: ttttVVVV&lt;br /&gt;
     76543210&lt;br /&gt;
 &lt;br /&gt;
 BIT OFFSET | LEN (bits) | content&lt;br /&gt;
 -----------+------------+--------------------------------------------------&lt;br /&gt;
  7 (MSB)   |          4 |  &amp;quot;t&amp;quot;: produc-line value: 1 == first, 2 == second&lt;br /&gt;
  3         |          4 |  &amp;quot;V&amp;quot;: version: 0 = first S-UDP protocol version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V konečném důsledku, skutečnou funkční důležitost ma '''[C-PAYLOAD]''', což je blok dat, který obsahuje hodnoty a příkazy, které pomocí S-UDP chceme přenést.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Postup při příjmu S-UDP paketu ==&lt;br /&gt;
&lt;br /&gt;
Každá strana, která přijme S-UDP paket, provede následující kroky:&lt;br /&gt;
&lt;br /&gt;
 1) Ověřit platnost hodnot v [HEADER]&lt;br /&gt;
    a. text &amp;quot;SDS&amp;quot; (platný obsah)&lt;br /&gt;
    b. hodnota &amp;quot;TV&amp;quot; (&amp;quot;master-version&amp;quot; a &amp;quot;product-line&amp;quot;) (platný obsah)&lt;br /&gt;
    c. hodnota &amp;quot;PL&amp;quot; v platných mezích&lt;br /&gt;
    d. hodnota &amp;quot;encryption_flag&amp;quot; (platný obsah)&lt;br /&gt;
 2) Ověřit základní additive-checksum pro [ENCRYPTED PAYLOAD]&lt;br /&gt;
    a. přečíst bajty [28] až [28+PL-1] a sečíst je (overflow osm bitů), výsledek musí odpovídat &amp;quot;CK1&amp;quot; hodnotě&lt;br /&gt;
 3) Nastavit dešifrování&lt;br /&gt;
    a. zvolit algoritmus podle &amp;quot;encryption-flag&amp;quot; hodnoty&lt;br /&gt;
    b. nastavit klíč (stejný jako na protistraně, samozřejmě není přenášen přes síť)&lt;br /&gt;
    c. nastavit &amp;quot;CounterBlock&amp;quot; (přečíst z [HEADER])&lt;br /&gt;
 4) Dešifrovat celou [ENCRYPTED PAYLOAD] na plain-text&lt;br /&gt;
    a. hodnota &amp;quot;PL&amp;quot; musí být dělitelná 16 beze zbytku (tato podmínka závisí na použitém šifrovaní)&lt;br /&gt;
 5) Ověřit základní additive-checksum pro [HEADER] - teď totiž už máme hodnotu &amp;quot;CK2&amp;quot;&lt;br /&gt;
    a. přečíst bajty [0] až [27] (ovšem přeskočit byte [7] - pozor!) a sečíst je (overflow osm bitů), výsledek musí odpovídat &amp;quot;CK2&amp;quot; hodnotě&lt;br /&gt;
 6) Ověřit další hodnoty&lt;br /&gt;
    a. &amp;quot;SDS-DEVICE-TYPE&amp;quot; musí odpovídat (záruka ovládání toho správného typu SDS) - pokud hodnotu nevíte, můžete si &amp;quot;pomoci&amp;quot; NOP příkazem&lt;br /&gt;
    b. uschovat hodnotu &amp;quot;XR_MTU&amp;quot; pro vytváření odpovědi (&amp;quot;XR_MTU&amp;quot; omezuje velikost odpovědi, kterou můžeme zpátky odeslat)&lt;br /&gt;
    c. ověřit časové údaje (&amp;quot;time&amp;quot; a &amp;quot;uptime&amp;quot;)&lt;br /&gt;
    d. ověřit &amp;quot;XL&amp;quot; vůči &amp;quot;PL&amp;quot;&lt;br /&gt;
 7) Ověřit CRC-32 dešifrovaného payloadu&lt;br /&gt;
    a. spočítat CRC-32 správným algoritmem, vučí bajtům (plain-text) z [36] až [52+XL-1] včetně&lt;br /&gt;
 &lt;br /&gt;
 8) Hotovo: teď se provede aktuální příkaz (Master Command, dle tabulky podle produktové řady viz &amp;quot;TV&amp;quot;)&lt;br /&gt;
            a odešle odpověď (ponechat user_identifier pro korelaci) (pozor na &amp;quot;XR_MTU&amp;quot; omezení)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Postup při odesílání S-UDP paketu ==&lt;br /&gt;
&lt;br /&gt;
Odesílatel zprávy provádí tyto kroky:&lt;br /&gt;
&lt;br /&gt;
 1) Je sestaven přesný obsah [C-PAYLOAD] a určena odpovídající hodnota XL&lt;br /&gt;
    a. obsah samozřejmě odpovídá tomu co chcete odeslat&lt;br /&gt;
    b. určí se i &amp;quot;master-command&amp;quot; a &amp;quot;sub-command&amp;quot; (pozor na produktovou řadu SDS - viz &amp;quot;TV&amp;quot;)&lt;br /&gt;
 2) Vyplní se [HEADER]&lt;br /&gt;
    a. hlavička &amp;quot;SDS&amp;quot;, &amp;quot;encryption-flag&amp;quot;&lt;br /&gt;
    b. zapsat správnou hodnotu &amp;quot;TV&amp;quot; podle protokolu a konkrétního SDS (&amp;quot;master-version&amp;quot;, &amp;quot;product-line&amp;quot;)&lt;br /&gt;
    c. určí se nová unikátní hodnota &amp;quot;user_identifier&amp;quot;, a zapíše se do [HEADER]&lt;br /&gt;
    d. zapíše se &amp;quot;CounterBlock&amp;quot; (hodnota pokračuje po předchozím paketu)&lt;br /&gt;
 3) Nachystá se zaokrouhlovací oblast &amp;quot;R&amp;quot; &lt;br /&gt;
    a. Pokud XL není beze zbytku dělitelná 16, musí se doplnit oblastí &amp;quot;R&amp;quot;&lt;br /&gt;
 4) Spočítá se hodnota &amp;quot;PL&amp;quot;&lt;br /&gt;
    a. PL = (XL + R)/16&lt;br /&gt;
    b. zapsat do [HEADER]&lt;br /&gt;
 5) Začne se vyplňovat [ENCRYPTED PAYLOAD]&lt;br /&gt;
    a. zapsat náhodný byte do &amp;quot;random number&amp;quot;&lt;br /&gt;
    b. spočítá se hodnota &amp;quot;CK2&amp;quot; (sečíst bajty [0] až [27] - ovšem přeskočit byte [7] - pozor!) &lt;br /&gt;
    c. zapsat hodnotu &amp;quot;XR_MTU&amp;quot; podle možností zařízení (tzn. jak velkou odpověď lze bezpečně přijmout, podle omezení sítě)&lt;br /&gt;
    d. zapíší se hodnoty &amp;quot;uptime&amp;quot; a &amp;quot;time&amp;quot;, zapsat hodnotu &amp;quot;SDS-DEVICE-TYPE&amp;quot;&lt;br /&gt;
    e. zapsat &amp;quot;master-command&amp;quot; a &amp;quot;sub-command&amp;quot;&lt;br /&gt;
 6) Spočítá se CRC-32 (před šifrováním)&lt;br /&gt;
    a. spočítat crc32 pro bajty (plain-text) z offsetu [36] až [52+XL-1] včetně&lt;br /&gt;
 7) Nastavit šifrování&lt;br /&gt;
    a. zvolit algoritmus (musí odpovídat tomu, co se zapsalo do &amp;quot;encryption-flag&amp;quot;)&lt;br /&gt;
    b. nastavit klíč (stejný jako na protistraně, samozřejmě není přenášen přes síť)&lt;br /&gt;
    c. nastavit &amp;quot;CounterBlock&amp;quot; (stejný jako byl zapsán [HEADER])&lt;br /&gt;
 8) Šifrovat celou [ENCRYPTED PAYLOAD] na plain-text&lt;br /&gt;
    a. hodnota &amp;quot;PL&amp;quot; musí být dělitelná 16 beze zbytku (tato podmínka závisí na použitém šifrovaní)&lt;br /&gt;
    b. aktualizovaná hodnota &amp;quot;CounterBlock&amp;quot; (zvýšená o průběh šifrování) se uschová pro další použití - viz bod &amp;quot; 2) c. &amp;quot;&lt;br /&gt;
 9) Spočítat základní additive-checksum pro [ENCRYPTED PAYLOAD]&lt;br /&gt;
    a. přečíst bajty [28] až [28+PL-1] a sečíst je (overflow osm bitů), výsledek se zapíše do &amp;quot;CK1&amp;quot; hodnoty&lt;br /&gt;
 &lt;br /&gt;
 10) Hotovo: paket se následně odešle přes síť do protistrany, která odpoví novým paketem - ten je vztažen k tomuto dotazu pomocí &amp;quot;user_identifier&amp;quot; hodnoty.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vzorové obsahy paketů ==&lt;br /&gt;
&lt;br /&gt;
Na stránce [[M2M: S-UDP protocol: examples]] naleznete ukázkové vzorové pakety a jejich vnitřní obsah, i se zobrazeních jednotlivých položek v paketu (před a po šifrování).&lt;br /&gt;
Toto je vhodné pro vývojáře komunikační protistrany, kterým nestačí popis postupu na této stránce, ale chtějí také vidět jednotlivé kroky s aktuálními hodnotami.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Seznam hlavních příkazů ==&lt;br /&gt;
&lt;br /&gt;
Obě produktové řady SDS, které jsou na trhu, mají svou sadu &amp;quot;master_command&amp;quot; příkazů. Proto je potřeba nejprve zjistit, do které produktové řady vaše SDS spadá, a podle toho dále pokračovat. Lze to přímo odvodit od typu SDS (&amp;quot;SDS-DEVICE-TYPE&amp;quot; hodnota), nebo se zeptat příkazem NOP.&lt;br /&gt;
&lt;br /&gt;
Zařazení SDS do produktových řad je v [[Seznam_Všech_SDS|tomto seznamu]].&lt;br /&gt;
&lt;br /&gt;
* První produktová řada: &amp;quot;TV = 0001....&amp;quot;  -&amp;gt; '''(1PŘ)'''&lt;br /&gt;
* Druhá produktová řada: &amp;quot;TV = 0010....&amp;quot;  -&amp;gt; '''(2PŘ)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2PŘ) Master Command (druhá produktová řada: &amp;quot;TV = 0010....&amp;quot; ) ==&lt;br /&gt;
&lt;br /&gt;
Jednotlivé základní příkazy (''master command''):&lt;br /&gt;
 &lt;br /&gt;
  MASTER COMMAND  |  command&lt;br /&gt;
  ----------------+-------------------------------------&lt;br /&gt;
     0            |   NOP (replies with NOP)&lt;br /&gt;
     1            |   general device status&lt;br /&gt;
     2            |   1-Wire access&lt;br /&gt;
     4            |   read FC-Get list&lt;br /&gt;
     8            |   write FC-Set list&lt;br /&gt;
    16            |   FULL-C shared variable(s) access&lt;br /&gt;
    32            |   serial port access&lt;br /&gt;
    64            |   DataFlash access&lt;br /&gt;
   128            |   reserved&lt;br /&gt;
 &lt;br /&gt;
Jak lze vidět, jednotlivé ''master command'' příkazy jsou dále rozlišeny pomocí hodnoty ''sub command''.&lt;br /&gt;
&lt;br /&gt;
Každý příkaz má doplňující datovou sadu, tzn. [C-PAYLOAD]. V rámci těchto dat jsou uvedeny všechny hodnoty, které přesně určují co se má stát (popř. jsou zde všechny odpovědi na dotaz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [0] '''NOP''' ==&lt;br /&gt;
&lt;br /&gt;
SDS odpoví na tento příkaz odesláním [0] NOP.&lt;br /&gt;
&lt;br /&gt;
Tohoto příkazu lze využít k ověření komunikace a k vzájemné základní synchronizace.&lt;br /&gt;
&lt;br /&gt;
Specifická vlastnost příkazu NOP, oproti všem ostatním příkazům, je to, že SDS odpoví i v případě, že v dotazu není správně uvedený SDS Device Type. Toto je záměr, aby bylo možné při začátku komunikace s SDS modulem, tento modul identifikovat. Samozřejmě všechny ostatní bezpečnostní prvky jsou stále aplikovány, jen tento detail je zde upraven.&lt;br /&gt;
&lt;br /&gt;
Tento příkaz je také velmi užitečný pro získání hodnoty &amp;quot;TV&amp;quot; z [HEADER], tím pádem pro určení číslo produktové řady SDS - a tím pádem k určení které &amp;quot;master_command&amp;quot; příkazy jsou k dispozici !&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 0, sent from SDS as reply)&lt;br /&gt;
 sub_command = 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN   | TYPE  | content&lt;br /&gt;
 -----------------+-------+-------+------------------------------------------------------&lt;br /&gt;
    0             |     6 | bytes |  MAC ADDRESS (bytes, not text)&lt;br /&gt;
    6             |     4 | bytes |  SDS Device Type&lt;br /&gt;
   10             |     4 | dword |  FW version &lt;br /&gt;
   14             |    32 | bytes |  sysLocation (missing the 0x00 terminator)&lt;br /&gt;
   46             |     8 | bytes |  reserved (0x00)&lt;br /&gt;
   54             |    32 | bytes |  OEM string (missing the 0x00 terminator)&lt;br /&gt;
   86             |     8 | bytes |  reserved (0x00)&lt;br /&gt;
   94             |     1 |  byte |  bylo aktivováno RSTD&lt;br /&gt;
   95             |     1 |  byte |  bylo aktivováno PVD&lt;br /&gt;
   96             |     1 |  byte |  SDS je: BIG (hodnota 1) nebo STSW (hodnota 0)&lt;br /&gt;
   97             |     8 | bytes |  reserved (0x00)&lt;br /&gt;
  105             |     2 | uword |  web interface TCP port number (typicky 80)&lt;br /&gt;
  107             |     1 |  byte |  SNMP-read enabled&lt;br /&gt;
  108             |     1 |  byte |  SNMP-write enabled&lt;br /&gt;
  109             |     1 |  byte |  FULLC shared vars access lock (0 = unlocked) tzn. sys[150]&lt;br /&gt;
  110             |     1 |  byte |  FULLC program run status&lt;br /&gt;
  111             |     1 |  byte |  FULLC program started-by info&lt;br /&gt;
  112             |     1 |  byte |  FULLC program watchdog active&lt;br /&gt;
  113             |     6 | bytes |  reserved&lt;br /&gt;
  119             |     4 |   f32 |  backup battery voltage (milliVolts)&lt;br /&gt;
&lt;br /&gt;
Pozn. rozšířená funkcionalita příkazu NOP (tedy vracení payloadu) bylo přidáno až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [1] '''General Device Status''' ==&lt;br /&gt;
&lt;br /&gt;
SDS odpoví zasláním vybraných údajů, jejichž seznam je přesně daný. Tato funkce je k dispozici pro umožnění rychlého přístupu k základnímu stavu zařízení SDS, bez složité přípravy.&lt;br /&gt;
&lt;br /&gt;
Základní odpověď s nejzajímavějšími živými údaji. Určeno např. pro průběžnou aktualizaci stavu zobrazeného uživateli.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 1, sent from SDS as reply)&lt;br /&gt;
 sub_command = 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN   | TYPE  | content&lt;br /&gt;
 -----------------+-------+-------+------------------------------------------------------&lt;br /&gt;
    0             |     6 | bytes |  MAC ADDRESS (bytes, not text)&lt;br /&gt;
    6             |     1 |  byte |  Ethernet Link Status / Speed (0, 10, 100)&lt;br /&gt;
    7             |     1 |  byte |  Amount of users logged into SDS Web Admin&lt;br /&gt;
    8             |    32 | bytes |  sysLocation (missing the 0x00 terminator)&lt;br /&gt;
   40             |     1 |  byte |  IP Watchdog Config status&lt;br /&gt;
   41             |     1 |  byte |  IP Watchdog Output (relay) status&lt;br /&gt;
   42             |     2 | uword |  IP Watchdog RTT value (note.: 0xFFFF = not available)&lt;br /&gt;
   44             |     1 |  byte |  DHCP status&lt;br /&gt;
   45             |     1 |  byte |  reserved&lt;br /&gt;
   46             |     1 |  byte |  NTP status&lt;br /&gt;
   47             |     1 | sbyte |  NTP offset (+/- hours) (signed char)&lt;br /&gt;
   48             |     2 | uword |  SoC chip temperature (degC)&lt;br /&gt;
   50             |     1 |  byte |  GPIO-TOPB PIN(s) direction (0 == input)&lt;br /&gt;
   51             |     1 |  byte |  GPIO-TOPB PIN(s) pin value&lt;br /&gt;
   52             |  32*1 |  byte |  OPTO [1]..[32] status (0xFF == signal) (0x00 == nosignal)&lt;br /&gt;
   84             |  32*1 |  byte |  RELAY [1]..[32] status (active/nonactive)&lt;br /&gt;
  116             |  32*2 | uword |  ADC [0]..[31] RAW value&lt;br /&gt;
  180             |     1 |  byte |  General 1-W BUS status&lt;br /&gt;
  181             |     1 |  byte |  1-W BUS A - active device count&lt;br /&gt;
  182             |     1 |  byte |  1-W BUS B - active device count&lt;br /&gt;
  183             |     3 | bytes |  reserved (0x00)&lt;br /&gt;
  186             |     1 |  byte |  S0 Tariff Value (active/nonactive)&lt;br /&gt;
  187             |     1 |  byte |  number of the following S0 INPUT DB data blocks:&lt;br /&gt;
  188             | 31*28 |  data |  S0 INPUT [1]..[ (max) 31] DB (data block)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 S0-INPUT DB offset | LEN | TYPE  | content&lt;br /&gt;
 -------------------+-----+-------+-------------------------------------------------------&lt;br /&gt;
    0               |   1 |  byte |  configuration status (combined flags: bit0 = enabled as S0; bit1 = is tariff used)&lt;br /&gt;
    1               |   3 | bytes |  reserved (filled with 0x00)&lt;br /&gt;
    4               |   4 | dword |  T0 impulse counter&lt;br /&gt;
    8               |   4 | dword |  T1 impulse counter&lt;br /&gt;
    12              |   4 | dword |  T0 offset&lt;br /&gt;
    16              |   4 | dword |  T1 offset&lt;br /&gt;
    20              |   4 | dword |  measured space between impulses (msec)&lt;br /&gt;
    24              |   4 | dword |  time since last registered impulse (msec)&lt;br /&gt;
&lt;br /&gt;
Sestava [C-PAYLOAD] je tedy zřejmá. &lt;br /&gt;
&lt;br /&gt;
Poslední blok (offset [188] až [1083] včetně) je určen pro přenos 32 S0 vstupů - často je jich ale v zařízení SDS fyzicky přítomno mnohem méně, např. jen devět - a potom zařízení SDS ve své odpovědi pošle jen devět záznamů (namísto 32) (toto se týká pouze a jenom S0 položek, né jiných v rámci paketu). To je provedeno z praktického důvodu: aby byl UDP paket dostatečně malý (a tedy rychlý na zpracování).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [2] '''1-Wire Access''' ==&lt;br /&gt;
&lt;br /&gt;
Tato funkce se používá pro čtení stavu hodnot získaných z obou 1-W sběrnic, kterými SDS disponuje (některé SDS mají jen jednu sběrnici). Maximální počet prvků (chipů) na sběrnici je 64, celkem je tedy k dispozici 2x64 = 128 prvků.&lt;br /&gt;
&lt;br /&gt;
 QUERY/COMMAND TO SDS (master_command == 2)&lt;br /&gt;
 &lt;br /&gt;
 sub_command | meaning&lt;br /&gt;
 ------------+-----------------------------------------------------------&lt;br /&gt;
           0 |  reserved&lt;br /&gt;
           1 |  obtain status, and list of found items on BUS A&lt;br /&gt;
           2 |  obtain status, and list of found items on BUS B&lt;br /&gt;
           4 |  list all read-values on BUS A&lt;br /&gt;
           8 |  list all read-values on BUS B&lt;br /&gt;
&lt;br /&gt;
První možností tedy je sub_command == 1 , tzn. výpis nalezených zařízení na sběrnici A respektive B:&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 1, sent from SDS as reply)&lt;br /&gt;
 sub_command = 1 or 2&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  global 1-W controller status (SDS status)&lt;br /&gt;
    1             |   1 |  byte |  number of active items on BUS A&lt;br /&gt;
    2             |   1 |  byte |  number of active items on BUS B&lt;br /&gt;
    3             |   1 |  byte |  reserved (0x00)&lt;br /&gt;
    4             |  12 |  data |  1-W item status #0&lt;br /&gt;
    . . .         | ... |   ... |  . . .&lt;br /&gt;
    4+12*63       |  12 |  data |  1-W item status #63&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;1-W item status&amp;quot; ofs | LEN | TYPE  | content&lt;br /&gt;
 ----------------------+-----+-------+-------------------------------------------------------&lt;br /&gt;
    0                  |   1 |  byte |  ctrl: main-status&lt;br /&gt;
    1                  |   1 |  byte |  ctrl: sub-status &lt;br /&gt;
    2                  |   2 | bytes |  reserved (filled with 0x00)&lt;br /&gt;
    4                  |   8 | bytes |  ROM-CODE [0]..[7]&lt;br /&gt;
&lt;br /&gt;
Následuje: výpis získaných hodnot (např. změřené teploty z teplotních čidel) pro jednotlivé sběrnice :&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 1, sent from SDS as reply)&lt;br /&gt;
 sub_command = 4 or 8&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  global 1-W controller status (SDS status)&lt;br /&gt;
    1             |   1 |  byte |  number of active items on BUS A&lt;br /&gt;
    2             |   1 |  byte |  number of active items on BUS B&lt;br /&gt;
    3             |   1 |  byte |  reserved (0x00)&lt;br /&gt;
    4             |  12 |  data |  1-W item value #0&lt;br /&gt;
    . . .         | ... |   ... |  . . .&lt;br /&gt;
    4+12*63       |  12 |  data |  1-W item value #63&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;1-W item value&amp;quot; ofs  | LEN | TYPE  | content&lt;br /&gt;
 ----------------------+-----+-------+-------------------------------------------------------&lt;br /&gt;
    0                  |   1 |  byte |  ctrl: main-status&lt;br /&gt;
    1                  |   1 |  byte |  ctrl: sub-status&lt;br /&gt;
    2                  |   1 |  byte |  value of ROM-CODE offset [0] (1-W DEVICE TYPE: ID)&lt;br /&gt;
    3                  |   1 |  byte |  value of ROM-CODE offset [7] (1-W DEVICE TYPE: CRC)&lt;br /&gt;
    4                  |   4 | slong |  1-W read: primary value&lt;br /&gt;
    8                  |   4 | slong |  1-W read: secondary value&lt;br /&gt;
&lt;br /&gt;
Každý chip na sběrnici 1-Wire má vždy primární a sekundární hodnotu, kterou SDS pro daný chip udržuje (ne vždy jsou však, v závislosti na konkrétním chipu, obě hodnoty použity). Aktuální význam je potřeba určit podle chipu (příklad: DS18B20 má &amp;quot;primary value&amp;quot; zpracovanou teplotu v degC, a &amp;quot;secondary value&amp;quot; přímou surovou 16-bit hodnotu přečtenou z čidla).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [4] '''Read FC-Get List''' ==&lt;br /&gt;
&lt;br /&gt;
Dotaz (query) který obsahuje seznam indexů jejichž hodnoty jsou tazatelem požadovány, se posílá do SDS, které následně odpoví (reply).&lt;br /&gt;
&lt;br /&gt;
Dotaz i odpověď má dynamický obsah, který je specificky strukturován.&lt;br /&gt;
&lt;br /&gt;
 QUERY (master_command == 4, sent to SDS)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------&lt;br /&gt;
  0               |   2 | uword | [#0] index value &lt;br /&gt;
  2               |   2 | uword | [#0] TBLEN#0: type-bits and data length (L#0)&lt;br /&gt;
  4               | L#0 |  data | [#0] space prepared for answer from SDS&lt;br /&gt;
 &lt;br /&gt;
  (4+(L#0))+0     |   2 | uword | [#1] index value&lt;br /&gt;
  (4+(L#0))+2     |   2 | uword | [#1] TBLEN#1: type-bits and data length (L#1)&lt;br /&gt;
  (4+(L#0))+4     | L#1 |  data | [#1] space prepared for answer from SDS&lt;br /&gt;
 &lt;br /&gt;
  . . .           | ... | . . . | ...&lt;br /&gt;
 &lt;br /&gt;
  Z+0             |   2 | uword | [#n] index value &lt;br /&gt;
  Z+2             |   2 | uword | [#n] TBLEN#n: type-bits and data length (L#n)&lt;br /&gt;
  Z+4             | L#n |  data | [#n] space prepared for answer from SDS&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, v dotazu (query) jsou za sebou naskládány položky (indexy), na které následně SDS odpoví. Vždy musíte u každého indexu, na který se ptáte, uvést typ odpovědi (viz dále) a prostor, kam bude odpověď zapsána - to znamená, musíte znát přesnou délku, kterou má obsah pro daný index !&lt;br /&gt;
&lt;br /&gt;
Pozor na množství dotazů v rámci jednoho paketu, protože velikost dotazu, a také velikost odpovědi, je omezena XR_MTU. Jakmile SDS při skládání odpovědi narazení na XR_MTU protistrany, už více odpovědí do paketu nepřidá (aby nebylo XR_MTU překročeno).&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 4, sent from SDS as reply to query)&lt;br /&gt;
 &lt;br /&gt;
 SDS writes the values into the &amp;quot;[#n] space prepared for answer from SDS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Odpověď tedy přesně sleduje (vyplňuje) původní dotaz, přičemž [C-PAYLOAD] teď obdrží skutečný datový obsah pro jednotlivé položky. Pokud poskytnete SDS menší prostor pro odpověď, než je potřeba, bude odpověď vyplněna 0x00.&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;sub_command&amp;quot; je nastavena SDS na počet položek (#n) v odpovědi. Toto omezuje maximální počet položek v jednom paketu na 255.&lt;br /&gt;
&lt;br /&gt;
Následující popis ukazuje kódování typu proměnné a její délky, ve společném slově:&lt;br /&gt;
&lt;br /&gt;
 TBLEN#x: (16-bit unsigned word, little-endian) Type-Bits and Data Length (L#x)&lt;br /&gt;
 &lt;br /&gt;
 TBLEN#x: TTTTvvvvvvvvvvvv&lt;br /&gt;
          FEDCBA9876543210&lt;br /&gt;
 &lt;br /&gt;
 BIT OFFSET (hex) | LEN (bits) | content&lt;br /&gt;
 -----------------+------------+-----------------------------------------&lt;br /&gt;
  F (MSB)         |          4 |  &amp;quot;T&amp;quot;: type (see bit-value in next table)&lt;br /&gt;
  B               |         12 |  &amp;quot;v&amp;quot;: length of data, in bytes&lt;br /&gt;
 &lt;br /&gt;
  &amp;quot;T&amp;quot; bit-values | meaning                     | FULL-C set/get&lt;br /&gt;
            FEDC |                             | (which function)&lt;br /&gt;
 ----------------+-----------------------------+------------------&lt;br /&gt;
            0000 |  unsigned integer (32-bit)  |  _u&lt;br /&gt;
            0001 |  signed integer (32-bit)    |  _i&lt;br /&gt;
            0010 |  float IEEE-754 (32-bit)    |  _f&lt;br /&gt;
            0100 |  string UTF-8 (L#x * 8-bit) |  _a&lt;br /&gt;
            1000 |  reserved (do not use)      |  &lt;br /&gt;
&lt;br /&gt;
Horní 4 bity z TBLEN#x tedy určují typ položky. Pro získání délky L#x položky 'x', je potřeba hodnotu TBLEN#x odmaskovat - použít jen dolních 12 bitů.&lt;br /&gt;
&lt;br /&gt;
Je vaším úkolem správně zvolit typ (T) pro každou položku, pokud zvolíte špatně, nebude údaj pro daný index zpracován.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Index Value''' - každá položka má svůj číselný index, viz [[FULL-C:_set_and_get|seznam všech FULL-C indexů]].&lt;br /&gt;
&lt;br /&gt;
POZOR: V případě chyby dojde k odpovědi S-UDP paketem [0] '''NOP''' bez payloadu. Vaše aplikace, komunikující s SDS, toto musí umět správné zpracovat (pokud dostane na požadavek [4] prázdnou odpověď [0], tak je zřejmé, že jste poslali chybný obsah ve svém požadavku [4] - přičemž SDS neposkytuje další bližší informace o tom, kde přesně ve vašem paketu [4] byla chyba). Odpověď paketem [0] NOP je samozřejmě s vaším požadavkem [4] svázána přes identifikátor v hlavičce.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [8] '''Write FC-Get List''' ==&lt;br /&gt;
&lt;br /&gt;
Pokud SDS obdrží zprávu s &amp;quot;master_command == 8&amp;quot;, tak nastaví příslušné FULL-C indexy na nové hodnoty (podle obsahu této přijaté zprávy). &lt;br /&gt;
&lt;br /&gt;
SDS na tuto zprávu odpovídá pouze ve smyslu &amp;quot;úspěch&amp;quot; nebo &amp;quot;neúspěch&amp;quot; - takže pro skutečné ověření hodnot (zda-li se zapsaly správně) musíte proto sami zaslat další zprávu &amp;quot;master_command == 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 COMMAND TO SDS (master_command == 8, sent to SDS)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------&lt;br /&gt;
  0               |   2 | uword | [#0] index value &lt;br /&gt;
  2               |   2 | uword | [#0] TBLEN#0: type-bits and data length (L#0)&lt;br /&gt;
  4               | L#0 |  data | [#0] new data value to write to SDS&lt;br /&gt;
 &lt;br /&gt;
  (4+(L#0))+0     |   2 | uword | [#1] index value&lt;br /&gt;
  (4+(L#0))+2     |   2 | uword | [#1] TBLEN#1: type-bits and data length (L#1)&lt;br /&gt;
  (4+(L#0))+4     | L#1 |  data | [#1] new data value to write to SDS&lt;br /&gt;
 &lt;br /&gt;
  . . .           | ... | . . . | ...&lt;br /&gt;
 &lt;br /&gt;
  Z+0             |   2 | uword | [#n] index value &lt;br /&gt;
  Z+2             |   2 | uword | [#n] TBLEN#n: type-bits and data length (L#n)&lt;br /&gt;
  Z+4             | L#n |  data | [#n] new data value to write to SDS&lt;br /&gt;
&lt;br /&gt;
Lze vidět, že formát je naprosto shodný jako formát odpovědi kterou SDS posílá pro &amp;quot;master_command == 4&amp;quot; zprávu. Nicméně, v tomto případě, je tento obsah [C-PAYLOAD] zapsán '''do''' SDS, které jej zpracuje a provede - pouze ale pokud je délka L#x přesně odpovídající danému indexu.&lt;br /&gt;
&lt;br /&gt;
Odpověď, kterou na tento příkaz SDS následně posílá, je velmi jednoduchá: [C-PAYLOAD] není vůbec použito (XL=0), a &amp;quot;sub_command&amp;quot; obsahuje následující možnost:&lt;br /&gt;
&lt;br /&gt;
 REPLY FROM SDS (master_command == 8)&lt;br /&gt;
 &lt;br /&gt;
 NOTE: THIS FEATURE (PROPER RESPONSE) IS IMPLEMENTED SINCE FW 15.March.2025 AND ONWARDS&lt;br /&gt;
 (previously no proper response was provided)&lt;br /&gt;
 &lt;br /&gt;
 sub_command | meaning&lt;br /&gt;
 ------------+-----------------------------------------------------------&lt;br /&gt;
           0 |  complete failure (no item modified)&lt;br /&gt;
           1 |  partial failure  (some items modified, some not modified)&lt;br /&gt;
           2 |  success          (all items modified OK)&lt;br /&gt;
 &lt;br /&gt;
Další, detailnější, rozlišení selhání (failure) se neprovádí (tzn. SDS neposílá více detailnější informaci ve své odpovědi, než uvedené tři možnosti).&lt;br /&gt;
&lt;br /&gt;
Pozor, odpověď se týka schopnosti převzít jednotlivé položky ze S-UDP příkazu, a předat je do FULL-C bloku k dalšímu zpracování (zápis do indexů). Pokud je specifický index pouze pro čtení, samozřejmě nedojde k zápisu, ovšem to není bráno jako chyba z hlediska odpovědi na tento paket (jen jednoduše nedojde k zápisu pro daný read-only index). Chybová hodnota (0 nebo 1) je v této celkové odpovědi vrácena pouze pokud je obsahem S-UDP příkazu nesmysl (částečný nebo úplný), např. jde o obsahově prázdný paket (není co zapisovat), nebo se snažíte zapsat nesmyslné velikosti nebo rozsahy hodnot, nebo příliš moc indexů najednou atd. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [16] '''FULL-C Shared Variable(s) Access''' ==&lt;br /&gt;
&lt;br /&gt;
Tento příkaz se využívá k přístupu ke [[FULL-C:_sharing|sdíleným proměnným]] programu FULL-C.&lt;br /&gt;
&lt;br /&gt;
Proměnné se označují vzorem, kde je na začátku velké písmeno určující typ, a pak dvě decimální číslice určující pořadí - tedy sto možných hodnot. &lt;br /&gt;
&lt;br /&gt;
Mohou existovat tyto sdílené proměnné :&lt;br /&gt;
* S00 až S99 (hodnoty: signed 32-bit)&lt;br /&gt;
* U00 až U99 (hodnoty: unsigned 32-bit)&lt;br /&gt;
* F00 až F99 (hodnoty: float 32-bit)&lt;br /&gt;
* T00 až T99 (hodnoty: array/text)&lt;br /&gt;
&lt;br /&gt;
Rozlišování jednotlivých funkcí je závislé na hodnotě &amp;quot;sub_command&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 QUERY-or-COMMAND TO SDS (master_command == 16, sent to SDS)&lt;br /&gt;
 &lt;br /&gt;
 sub_command | meaning&lt;br /&gt;
 ------------+---------------------------------------------&lt;br /&gt;
           0 | provide list of all active shared variables&lt;br /&gt;
           1 | read from shared variable (single variable)&lt;br /&gt;
           2 | reserved&lt;br /&gt;
           4 | write to shared variable (single variable)&lt;br /&gt;
           8 | reserved&lt;br /&gt;
&lt;br /&gt;
Pro &amp;quot;sub_command == 0&amp;quot; poskytne SDS odpověď, kde je uvedeno zda-li je specifická sdílená proměnná definována v právě aktivním FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
 RESPONSE:  LIST OF SHARED VARIABLES: sub_command = 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+--------------------------&lt;br /&gt;
   0              |  13 | bytes | Uxx existence: bit-field&lt;br /&gt;
  13              |  13 | bytes | Sxx existence: bit-field&lt;br /&gt;
  26              |  13 | bytes | Fxx existence: bit-field&lt;br /&gt;
  39              |  13 | bytes | Txx existence: bit-field&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, v odpovědi jsou čtyři samostatné bitové pole, každé o délce 100 bitů (plus nevyužitý zbytek 4 bitů na konci). Každý bit přestavuje existenci jedné ze sdílených proměnných, pokud je nastaven na 1 tak proměnná existuje.&lt;br /&gt;
&lt;br /&gt;
 Xxx existence: bit-field&lt;br /&gt;
 &lt;br /&gt;
 BYTE -&amp;gt; [0] . . . [13]&lt;br /&gt;
 BITS -&amp;gt;  0 . . .   100 (plus 4 at the end, which are not used)&lt;br /&gt;
 &lt;br /&gt;
 BYTE [0] = bit 0, 1, 2, ..., 7&lt;br /&gt;
 BYTE [1] = bit 8, 9, 10, ..., 15&lt;br /&gt;
 ...&lt;br /&gt;
 BYTE [13] = bit 96, 97, 98 ..., 103&lt;br /&gt;
 &lt;br /&gt;
 example: existence of &amp;quot;U11&amp;quot; =&amp;gt; bit 11 =&amp;gt; look at BYTE [1]&lt;br /&gt;
&lt;br /&gt;
Takže pro kteroukoliv sdílenou proměnnou si lze nalézt příslušnou pozici, která ukazuje, zda-li právě daná proměnná existuje.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Další,''' &amp;quot;sub_command == 1&amp;quot; umožňuje z konkrétní (jedné) sdílené proměnné číst.&lt;br /&gt;
&lt;br /&gt;
 QUERY TO SDS: READ ONE SHARED VARIABLE: sub_command = 1&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+--------------------------&lt;br /&gt;
  0               |   3 | bytes | [#0] name (example: &amp;quot;U25&amp;quot;)&lt;br /&gt;
  1               |   1 |  byte | reserved (0x00)&lt;br /&gt;
&lt;br /&gt;
A ''odpověď'' je:&lt;br /&gt;
&lt;br /&gt;
 REPLY FROM SDS: READ ONE SHARED VARIABLE: sub_command = 1&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+--------------------------&lt;br /&gt;
  0               |   3 | bytes | [#0] name (example: &amp;quot;F95&amp;quot;)&lt;br /&gt;
  1               |   1 |  byte | reserved (0x00)&lt;br /&gt;
  4               |   2 | uword | [#0] L#0: data length (L#0)&lt;br /&gt;
  6               |   2 | uword | reserved (0x0000)&lt;br /&gt;
  8               | L#0 |  data | [#0] data value from the shared variable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Dále,''' pro &amp;quot;sub_command == 4&amp;quot; dojde ke změně hodnoty.&lt;br /&gt;
&lt;br /&gt;
 COMMAND TO SDS: WRITE ONE SHARED VARIABLE: sub_command = 4&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+--------------------------&lt;br /&gt;
  0               |   3 | bytes | [#0] name (example: &amp;quot;T12&amp;quot;)&lt;br /&gt;
  1               |   1 |  byte | reserved (0x00)&lt;br /&gt;
  4               |   2 | uword | [#0] L#0: data length (L#0)&lt;br /&gt;
  6               |   2 | uword | reserved (0x0000)&lt;br /&gt;
  8               | L#0 |  data | [#0] new data value to write to shared variable&lt;br /&gt;
&lt;br /&gt;
A odpověď je zde shodná jako odpověd pro &amp;quot;sub_command == 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [32] '''S0 Input Configuration Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení kalibračních konstant pro S0 vstupy. Současně jsou předány i aktuální (živé) údaje pro daný S0 vstup.&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 32 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 32, sent from SDS as reply)&lt;br /&gt;
 sub_command == index to S0 array [1..MAX] (typical MAX value is 9)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  S0 input number for this reply (for a valid answer: 1..MAX , otherwise: 0x00).&lt;br /&gt;
    1             |   1 |  byte |  total number of S0 inputs for this SDS&lt;br /&gt;
    2             |   1 |  byte |  configuration status (combined flags: bit0 = enabled as S0; bit1 = is tariff used)&lt;br /&gt;
    3             |   1 |  byte |  reserved (0x00)&lt;br /&gt;
    4             |  32 | bytes |  text (name: unit)&lt;br /&gt;
    36            |  32 | bytes |  text (name: money)&lt;br /&gt;
    68            |  32 | bytes |  text (unit: power)&lt;br /&gt;
    100           |  32 | bytes |  text (name: power)&lt;br /&gt;
    132           |  32 | bytes |  text (name: device)&lt;br /&gt;
    168           |   4 | dword |  MTD value&lt;br /&gt;
    172           |   4 | dword |  minimal impulse length (msec)&lt;br /&gt;
    176           |   4 | dword |  impulse constant value (imp. per unit)&lt;br /&gt;
    180           |   4 | bytes |  price for T0&lt;br /&gt;
    184           |   4 | bytes |  price for T1&lt;br /&gt;
    188           |   8 | bytes |  reserved (0x00)&lt;br /&gt;
    196           |   4 | dword |  live value: T0 impulse counter&lt;br /&gt;
    200           |   4 | dword |  live value: T1 impulse counter&lt;br /&gt;
    204           |   4 | dword |  T0 offset&lt;br /&gt;
    208           |   4 | dword |  T1 offset&lt;br /&gt;
    212           |   4 | dword |  live value: measured space between impulses (msec)&lt;br /&gt;
    216           |   4 | dword |  live value: time since last registered impulse (msec)&lt;br /&gt;
    220           |   4 | bytes |  reserved (0x00)&lt;br /&gt;
    224           |   n | bytes |  live value: combined text&lt;br /&gt;
&lt;br /&gt;
Kombinovaný text (combined text) obsahuje vypočtené informace, oddělené znakem '|'. Tyto údaje lze přímo zobrazit uživateli. Výpočet provádí SDS, a stejné hodnoty ukazuje na svém webu. Jedná se zde o doplněk původní funkce GDS (master_command==0).&lt;br /&gt;
&lt;br /&gt;
Délka textu &amp;quot;n&amp;quot; je dynamická, text je zakončen 0x00 (nebo pokud vyjde přesně na maximální délku co se vleze do payloadu, zakončení nemá a je uříznut na posledním znaku, pozor na to).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''(sub_command = 0xFF)''': speciální odpověď pro Tarifní vstup :&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 32, sent from SDS as reply)&lt;br /&gt;
 sub_command == 0xFF (tariff)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  constant 0xFF&lt;br /&gt;
    1             |   3 | bytes |  reserved (0x00)&lt;br /&gt;
    4             |   1 |  byte |  tariff input&lt;br /&gt;
    5             |  32 | bytes |  text (name: tariff)&lt;br /&gt;
    37            |  32 | bytes |  text (name: tariff T0 input)&lt;br /&gt;
    69            |  32 | bytes |  text (name: tariff T1 input)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [33] '''S0 Input History Values''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení historických hodnot počítadel pro vybraný S0 vstup. Každá nová položka se do záznamu historie uloží co 15 minut.&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 33 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 33, sent from SDS as reply)&lt;br /&gt;
 sub_command == index to S0 array [1..MAX] (typical MAX value is 9)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  S0 input number for this reply (for a valid answer: 1..MAX , otherwise: 0x00).&lt;br /&gt;
    1             |   1 |  byte |  total number of S0 inputs for this SDS&lt;br /&gt;
    2             |   1 |  byte |  configuration status (combined flags: bit0 = enabled as S0; bit1 = is tariff used)&lt;br /&gt;
    3             |   3 | bytes |  reserved (0x00)&lt;br /&gt;
    6             |   2 |  word |  history depth (number of items) - value &amp;quot;n&amp;quot; (example: five items -&amp;gt; n == 5)&lt;br /&gt;
    8             |   4 | dword |  uptime value for the last element (#n) in the list&lt;br /&gt;
    12            |   4 | dword |  ntptime value for the last element (#n) in the list&lt;br /&gt;
    16            |   4 | dword |  history item #1: value of T0 counter (this is the most oldest item)&lt;br /&gt;
    20            |   4 | dword |  history item #1: value of T1 counter (this is the most oldest item)&lt;br /&gt;
    ...&lt;br /&gt;
    16+(n-1)*8    |   4 | dword |  history item #n: value of T0 counter (this is the most newest item)&lt;br /&gt;
    16+(n-1)*8+4  |   4 | dword |  history item #n: value of T1 counter (this is the most newest item)&lt;br /&gt;
&lt;br /&gt;
Historické údaje počítadel ukazují stav počítadel od současnosti dozadu. Položka #1 je nejstarší, pak #2 je mladší atd. až po položku #n která je nejaktuálnější (nejbližší současné chvíli).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [40] '''AD Input Configuration Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení kalibračních konstant pro AD vstupy.&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 40 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 40, sent from SDS as reply)&lt;br /&gt;
 sub_command == index to AD array [1..MAX]&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN  | TYPE  | content&lt;br /&gt;
 -----------------+------+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1  |  byte |  actual AD input index for this reply&lt;br /&gt;
    1             |   1  |  byte |  total number of AD inputs&lt;br /&gt;
    2             |   2  | bytes |  reserved (0x00)&lt;br /&gt;
    4             |   4  |   f32 |  F6 calibration constant&lt;br /&gt;
    8             |   4  |   f32 |  F5 calibration constant&lt;br /&gt;
   12             |   4  |   f32 |  F4 calibration constant&lt;br /&gt;
   16             |   4  |   f32 |  F3 calibration constant&lt;br /&gt;
   20             |   4  |   f32 |  F2 calibration constant&lt;br /&gt;
   24             |   4  |   f32 |  F1 calibration constant&lt;br /&gt;
   28             |   4  |   f32 |  F0 calibration constant&lt;br /&gt;
   32             |   1  |  byte |  is calibration factory locked&lt;br /&gt;
   33             |  32  | bytes |  unit&lt;br /&gt;
   65             |   4  | bytes |  reserved (0x00)&lt;br /&gt;
   69             |  32  | bytes |  name&lt;br /&gt;
  101             |   4  | bytes |  reserved (0x00)&lt;br /&gt;
  105             |   4  | dword |  raw value&lt;br /&gt;
  109             |   4  |   f32 |  real value (converted from raw)&lt;br /&gt;
  113             |   n  | bytes |  live value text&lt;br /&gt;
&lt;br /&gt;
Text &amp;quot;live value&amp;quot; obsahuje hodnotu vypočtenou interně v SDS. Text lze prezentovat uživateli (je to stejné jako co SDS ukáže na svém webu). Jedná se o doplňkovou funkci vůči vlastnímu výpočtu ze surových hodnot z GDS (master_command==0).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [42] '''PWM Output Configuration Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení nastavení pro PWM výstup (konfigurace a živý stav).&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 42 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 42, sent from SDS as reply)&lt;br /&gt;
 sub_command == 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN  | TYPE  | content&lt;br /&gt;
 -----------------+------+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1  |  byte |  reserved (0x00)&lt;br /&gt;
    1             |   1  |  byte |  &amp;quot;N&amp;quot; = total number of PWM outputs&lt;br /&gt;
    2             |   2  | bytes |  reserved (0x00)&lt;br /&gt;
 &lt;br /&gt;
    4+(i*12)+  0  |   4  | dword |  frequency (Hz) for PWMx&lt;br /&gt;
    4+(i*12)+  4  |   4  | dword |  &amp;quot;pulse&amp;quot; value for PWMx&lt;br /&gt;
    4+(i*12)+  8  |   1  |  byte |  &amp;quot;ValueB&amp;quot; value for PWMx&lt;br /&gt;
    4+(i*12)+  9  |   2  | uword |  &amp;quot;ValueS&amp;quot; value for PWMx&lt;br /&gt;
    4+(i*12)+ 11  |   1  |  byte |  output enabled for PWMx&lt;br /&gt;
&lt;br /&gt;
Pozn. PWM1 má hodnotu &amp;quot;i&amp;quot; = 0, PWM2 má hodnotu &amp;quot;i&amp;quot; = 1 atd.&lt;br /&gt;
&lt;br /&gt;
V případě, že je některý z PWMx výstupů nevyužit (&amp;quot;přeskočen&amp;quot;), je přesto v odpovědi uveden, aby bylo zachováno číslovaní pořadí všech PWMx výstupů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [44] '''RELAYs Configuration Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení konfigurace RELAY výstupů (nastavení a živý stav).&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 44 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 44, sent from SDS as reply)&lt;br /&gt;
 sub_command == index to RELAY array [1..MAX]&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN  | TYPE  | content&lt;br /&gt;
 -----------------+------+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1  |  byte |  actual RELAY output index for this reply&lt;br /&gt;
    1             |   1  |  byte |  total number of RELAY outputs&lt;br /&gt;
    2             |   2  | bytes |  reserved (0x00)&lt;br /&gt;
    4             |  32  | bytes |  name&lt;br /&gt;
   36             |   4  | bytes |  reserved (0x00)&lt;br /&gt;
   40             |   1  |  byte |  &amp;quot;relay-controlled-by&amp;quot; value&lt;br /&gt;
   41             |   1  |  byte |  &amp;quot;relay-output&amp;quot; value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [48] '''SD Card Status Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení stavu SD karty.&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 48 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 48, sent from SDS as reply)&lt;br /&gt;
 sub_command == 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  card mounted &lt;br /&gt;
    1             |   3 | bytes |  reserved&lt;br /&gt;
    4             |   4 | dword |  card type&lt;br /&gt;
    8             |   4 | dword |  card ProdSN&lt;br /&gt;
   12             |   4 | dword |  card init attempts counter&lt;br /&gt;
   16             |   4 | dword |  card init failures counter&lt;br /&gt;
   20             |   4 | dword |  card total sector count in FAT in KiB&lt;br /&gt;
   24             |   4 | dword |  total sector reads counter&lt;br /&gt;
   28             |   4 | dword |  total sector writes counter&lt;br /&gt;
   32             |   4 | dword |  total sector r/w failures counter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [50] '''Serial Port Access''' ==&lt;br /&gt;
&lt;br /&gt;
Tento příkaz není pro &amp;quot;version == 0x00&amp;quot; podporován. Potřebujete novější &lt;br /&gt;
firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [64] '''DataFlash (NVM) Access''' ==&lt;br /&gt;
&lt;br /&gt;
Tento příkaz není pro &amp;quot;version == 0x00&amp;quot; podporován. Potřebujete novější &lt;br /&gt;
firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [128] '''Reserved''' ==&lt;br /&gt;
&lt;br /&gt;
Tento příkaz není v současné verzi použit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (1-PŘ) Master Command (první produktová řada: &amp;quot;TV = 0001....&amp;quot; ) ==&lt;br /&gt;
&lt;br /&gt;
Jednotlivé základní příkazy (''master command'') - zatím nejsou pro &lt;br /&gt;
první produktovou řadu definovány.&lt;br /&gt;
&lt;br /&gt;
Detaily zde budou doplněny.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
	<entry>
		<id>https://wiki.merenienergie.cz/subdom/wiki/index.php?title=M2M:_S-UDP_protocol&amp;diff=942</id>
		<title>M2M: S-UDP protocol</title>
		<link rel="alternate" type="text/html" href="https://wiki.merenienergie.cz/subdom/wiki/index.php?title=M2M:_S-UDP_protocol&amp;diff=942"/>
		<updated>2025-03-15T08:47:17Z</updated>

		<summary type="html">&lt;p&gt;Adamn: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Tato stránka popisuje funkci zařízení SDS '''druhé produktové řady''' - protože SDS první produktové řady používají jiný protokol.&lt;br /&gt;
&lt;br /&gt;
== Rychlá komunikace: S-UDP ==&lt;br /&gt;
&lt;br /&gt;
Pomocí speciálního protokolu, kdy se data přenášejí prostřednictvím [http://en.wikipedia.org/wiki/User_Datagram_Protocol UDP], je možné získávat informace z výrobků řady SDS/OnlineTechnology.&lt;br /&gt;
&lt;br /&gt;
 S-UDP používá následující výchozí UDP PORT: 310&lt;br /&gt;
&lt;br /&gt;
Komunikace probíhá formou DOTAZ - ODPOVĚĎ. To znamená, že ten, kdo má o informace zájem (vzdálený uživatel) pošle dotaz (korektně vyplněný UDP paket, viz dále) a obratem obdrží od zařízení odpověď - UDP paket s informacemi. UDP Port na kterém je komunikace prováděna lze samozřejmě v administraci zařízení změnit.&lt;br /&gt;
&lt;br /&gt;
Přenos dat využívá specifického protokolu, který umožňuje bezpečně ovládat specifické zařízení SDS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Typické použití:''' komunikace zařízení SDS s protistranou (např. aplikace na mobilním telefonu).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Informace == &lt;br /&gt;
&lt;br /&gt;
Některé z FULL-C funkcí, které jsou zde popsány, jsou plně implementovány až ve firmware 03/2025 a dále. Je potřeba, aby jste měli svůj modul SDS aktualizován na nový firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bezpečnost ==&lt;br /&gt;
&lt;br /&gt;
Protokol S-UDP je založen na důsledné autentizaci strany, která posílá zprávu - zařízení SDS ověřuje identitu odesílatele příkazu, a ten může ověřit identitu SDS který odpovídá.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Je to založeno na následujícím principu:&lt;br /&gt;
&lt;br /&gt;
- S-UDP protokol je zabezpečen symetrickou šifrou, se sdíleným klíčem který znají jen komunikující strany (bezpečnost je přímo úměrná úrovni zabezpečení tohoto klíče na obou stranách)&lt;br /&gt;
&lt;br /&gt;
- SDS má unikátní identifikátor (zaručeně unikátní, od výrobce) který nelze změnit (je fyzicky vypálen v SoC - nezměnitelně přímo v silikonu chipu).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== S-UDP protokol ==&lt;br /&gt;
&lt;br /&gt;
Každý příkaz a odpověď jsou v samostatném, jediném, UDP paketu.&lt;br /&gt;
&lt;br /&gt;
Každý paket je sestaven v rámci společného formátu, který je zde popsán. Samotný doplňující datový obsah (payload) je dynamický, a u některých příkazů není potřeba.&lt;br /&gt;
&lt;br /&gt;
S-UDP Paket se tedy skládá z těchto základní částí (tyto části jsou právě přenášeny UDP paketem, v následující sestavě):&lt;br /&gt;
&lt;br /&gt;
  [MASTER PACKET CONTENTS]&lt;br /&gt;
 &lt;br /&gt;
   OFFSET    | LEN    |  DATA&lt;br /&gt;
   ----------+--------+---------------------------------------------------------------&lt;br /&gt;
     0       |     28 |  HEADER&lt;br /&gt;
    28       |  PL*16 |  ENCRYPTED PAYLOAD (contains: payload-header and payload-data)&lt;br /&gt;
&lt;br /&gt;
'''Pozor!''' Hodnota PL je velikost [ENCRYPTED PAYLOAD] vydělená 16. To znamená, že velikost [ENCRYPTED PAYLOAD] musí být beze zbytku dělitelná 16 (tzn. pouze hodnota 16, 32, 64, ...) ! Pokud je potřeba, doplní se na úplný konec (viz oblast &amp;quot;R&amp;quot;) zarovnání do potřebné délky, aby se dosáhlo čisté dělitelnosti 16.&lt;br /&gt;
&lt;br /&gt;
 LITTLE-ENDIAN&lt;br /&gt;
&lt;br /&gt;
Následující uvedené položky jsou ve formátu [http://en.wikipedia.org/wiki/Endianness#Little-endian Little-Endian] (procesory: ARM, x86):&lt;br /&gt;
* ''uword'' (unsigned 16-bit)&lt;br /&gt;
* ''dword'' (unsigned 32-bit)&lt;br /&gt;
* ''slong'' (signed   32-bit)&lt;br /&gt;
* ''qword'' (unsigned 64-bit)&lt;br /&gt;
&lt;br /&gt;
Položky typu: ''byte'', ''sbyte'', ''bytes'' - jsou jednotlivé samostatné bajty, nesdružené do společného čísla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zde jsou uvedeny detailní položky:&lt;br /&gt;
 &lt;br /&gt;
  [MASTER PACKET CONTENTS]&lt;br /&gt;
 &lt;br /&gt;
   OFFSET   | LEN  |  TYPE  | DATA&lt;br /&gt;
   ---------+------+--------+-----------------------------&lt;br /&gt;
 &lt;br /&gt;
                              [HEADER]&lt;br /&gt;
 &lt;br /&gt;
    0       |   3  |  bytes | header &amp;quot;SDS&amp;quot;&lt;br /&gt;
    3       |   1  |   byte | TV = (SDS-product-line) including (S-UDP protocol master-version)&lt;br /&gt;
    4       |   1  |   byte | PL = number of 16B chunks - this is the payload_length of [ENCRYPTED PAYLOAD] (example: PL==10 =&amp;gt; 160 bytes)&lt;br /&gt;
    5       |   1  |   byte | encryption-flag  (NOW ACCEPTS ONLY: 0x10 == XTEA-64-CTR)&lt;br /&gt;
    6       |   1  |   byte | reserved&lt;br /&gt;
    7       |   1  |   byte | CK1: basic additive checksum for [ENCRYPTED PAYLOAD] (start from (including) byte offset [28] and forward)&lt;br /&gt;
    8       |   4  |  dword | user_identifier (correlation identifier) - use this to correlate query to response&lt;br /&gt;
   12       |  16  |  bytes | CounterBlock&lt;br /&gt;
  ----------+------+--------+----------------------------&lt;br /&gt;
 &lt;br /&gt;
                              [ENCRYPTED PAYLOAD] -&amp;gt; everything from this point is included:&lt;br /&gt;
 &lt;br /&gt;
   28       |   1  |   byte | random number (shall be always different than what was used ever before)&lt;br /&gt;
   29       |   1  |   byte | CK2: basic additive checksum for [HEADER] (all bytes [0] to [27] included, BUT: skipping byte [7])&lt;br /&gt;
   30       |   2  |  uword | XR_MTU value (maximal size of the custom-payload data including R) ( XL + R &amp;lt;= XR_MTU )&lt;br /&gt;
   32       |   4  |  dword | CRC-32 (part-header and plain-text payload) -&amp;gt; byte [36] (included) up to [52+XL-1] (the R area is not included here)&lt;br /&gt;
   36       |   4  |  dword | uptime (msecs from boot)&lt;br /&gt;
   40       |   4  |  dword | time (epoch) (or, if no NTP is available to SDS, this will be a value of &amp;quot;seconds from boot&amp;quot;)&lt;br /&gt;
   44       |   4  |  dword | SDS device type (0xXXXXXXXX) - THIS MUST MATCH&lt;br /&gt;
   48       |   1  |   byte | master_command&lt;br /&gt;
   49       |   1  |   byte | sub_command&lt;br /&gt;
   50       |   2  |  uword | XL value (exact length of the actually useful payload-data): XL = (PL*16) - R - 24&lt;br /&gt;
 &lt;br /&gt;
   52       |  XL  |  bytes | custom payload-data [C-PAYLOAD]&lt;br /&gt;
 &lt;br /&gt;
   52+XL    |   R  |  bytes | specific set of (random data filling) to round-up (the PL*16 value) to a clean 16B multiply (16, 32, 64, etc.)&lt;br /&gt;
 &lt;br /&gt;
  ----------+------+--------+----------------------------&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;SDS device type&amp;quot; je určena podle typu SDS, se kterým komunikujete. Seznam hodnot viz [[Firmware]], například 0xB1900001 pro BIG-64 nebo 0xB1900002 pro BIG-128 atd.Pokud tato hodnota neodpovídá typu firmware v daném SDS, bude paket zcela ignorován a neproveden. Jediná vyjímka je master_command == NOP, což je záměrná vyjímka, která umožní zjištění typu SDS (a přítomnosti SDS) při zahájení komunikace.&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;random number&amp;quot; je zde proto, aby šifrované data byly pokaždé jiné, i když se přenáší stejný obsah (tzn. jedná se o zábranu stenografického odhadu obsahu payloadu).&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;time&amp;quot; umožňuje zařízení, které komunikuje s SDS, zabránit &amp;quot;replay&amp;quot; útoku (když se zaznamená paket a později se zopakuje - v takovém případě se na to přijde protože &amp;quot;time&amp;quot; bude významně starší). SDS kontrolu provádí vůči svému vnitřnímu času, vzdálené zařízení co se SDS komunikuje by tuto kontrolu mělo dělat také.&lt;br /&gt;
&lt;br /&gt;
Protože hodnota &amp;quot;time&amp;quot; se zvyšuje pouze co 1 vteřinu, je k dispozici i hodnota &amp;quot;uptime&amp;quot; která se po resetu/bootu (kde se nastaví na nulu) zvyšuje každou 1 milisekundu o jedničku. Kombinace umožňuje vhodně sestavit algoritmus detekce &amp;quot;replay&amp;quot; útoků.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;CounterBlock&amp;quot; se využívá pro nastavení začátku šifrování a dešifrování. Všechny detaily jsou zcela shodné jako pro [[FULL-C_crypto_functions|FULL-C funkci SDS_Crypt()]]. Z hlediska bezpečnosti je důležité, aby obě strany neustále používaly zvyšující se CounterBlock obsah (začít &amp;quot;od jedničky&amp;quot; pouze a jenom po resetu/bootu), tzn. pro každou zprávu použít poslední hodnotu counteru a na té dále stavět pro novou zprávu atd. .&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;crc32&amp;quot; se počítá pro dešifrované data, algoritmus je identický jako pro [[FULL-C_crypto_functions|FULL-C funkci SDS_Crypt()]].&lt;br /&gt;
&lt;br /&gt;
Pro zvolené XTEA-64-CTR má &amp;quot;CounterBlock&amp;quot; následující sestavu svého obsahu:&lt;br /&gt;
&lt;br /&gt;
   CounterBlock:&lt;br /&gt;
 &lt;br /&gt;
   OFFSET    | LEN  |  TYPE  |  DATA&lt;br /&gt;
   ----------+------+--------+-----------------------------------------------------------------------------------------&lt;br /&gt;
    0        |   8  |  qword |  XTEA-64-CTR: 64-bit counter (counter is increased by 1, for each 16B of processed data)&lt;br /&gt;
    8        |   8  |  bytes |  (reserved) not-used area = reserved (fill with 0x00) &lt;br /&gt;
&lt;br /&gt;
Pro jiné mechanismy (do budoucna) je v CounterBlock oblasti přidána ještě 8B rezerva (např. pro AES-128 se pak využije všech 16 bajtů).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;TV&amp;quot; (v [HEADER] na offsetu [3]) je určení typu a verze protokolu. Skládá se ze dvou čtyřbitových údajů, viz následující tabulka.&lt;br /&gt;
&lt;br /&gt;
 TV: ttttVVVV&lt;br /&gt;
     76543210&lt;br /&gt;
 &lt;br /&gt;
 BIT OFFSET | LEN (bits) | content&lt;br /&gt;
 -----------+------------+--------------------------------------------------&lt;br /&gt;
  7 (MSB)   |          4 |  &amp;quot;t&amp;quot;: produc-line value: 1 == first, 2 == second&lt;br /&gt;
  3         |          4 |  &amp;quot;V&amp;quot;: version: 0 = first S-UDP protocol version&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
V konečném důsledku, skutečnou funkční důležitost ma '''[C-PAYLOAD]''', což je blok dat, který obsahuje hodnoty a příkazy, které pomocí S-UDP chceme přenést.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Postup při příjmu S-UDP paketu ==&lt;br /&gt;
&lt;br /&gt;
Každá strana, která přijme S-UDP paket, provede následující kroky:&lt;br /&gt;
&lt;br /&gt;
 1) Ověřit platnost hodnot v [HEADER]&lt;br /&gt;
    a. text &amp;quot;SDS&amp;quot; (platný obsah)&lt;br /&gt;
    b. hodnota &amp;quot;TV&amp;quot; (&amp;quot;master-version&amp;quot; a &amp;quot;product-line&amp;quot;) (platný obsah)&lt;br /&gt;
    c. hodnota &amp;quot;PL&amp;quot; v platných mezích&lt;br /&gt;
    d. hodnota &amp;quot;encryption_flag&amp;quot; (platný obsah)&lt;br /&gt;
 2) Ověřit základní additive-checksum pro [ENCRYPTED PAYLOAD]&lt;br /&gt;
    a. přečíst bajty [28] až [28+PL-1] a sečíst je (overflow osm bitů), výsledek musí odpovídat &amp;quot;CK1&amp;quot; hodnotě&lt;br /&gt;
 3) Nastavit dešifrování&lt;br /&gt;
    a. zvolit algoritmus podle &amp;quot;encryption-flag&amp;quot; hodnoty&lt;br /&gt;
    b. nastavit klíč (stejný jako na protistraně, samozřejmě není přenášen přes síť)&lt;br /&gt;
    c. nastavit &amp;quot;CounterBlock&amp;quot; (přečíst z [HEADER])&lt;br /&gt;
 4) Dešifrovat celou [ENCRYPTED PAYLOAD] na plain-text&lt;br /&gt;
    a. hodnota &amp;quot;PL&amp;quot; musí být dělitelná 16 beze zbytku (tato podmínka závisí na použitém šifrovaní)&lt;br /&gt;
 5) Ověřit základní additive-checksum pro [HEADER] - teď totiž už máme hodnotu &amp;quot;CK2&amp;quot;&lt;br /&gt;
    a. přečíst bajty [0] až [27] (ovšem přeskočit byte [7] - pozor!) a sečíst je (overflow osm bitů), výsledek musí odpovídat &amp;quot;CK2&amp;quot; hodnotě&lt;br /&gt;
 6) Ověřit další hodnoty&lt;br /&gt;
    a. &amp;quot;SDS-DEVICE-TYPE&amp;quot; musí odpovídat (záruka ovládání toho správného typu SDS) - pokud hodnotu nevíte, můžete si &amp;quot;pomoci&amp;quot; NOP příkazem&lt;br /&gt;
    b. uschovat hodnotu &amp;quot;XR_MTU&amp;quot; pro vytváření odpovědi (&amp;quot;XR_MTU&amp;quot; omezuje velikost odpovědi, kterou můžeme zpátky odeslat)&lt;br /&gt;
    c. ověřit časové údaje (&amp;quot;time&amp;quot; a &amp;quot;uptime&amp;quot;)&lt;br /&gt;
    d. ověřit &amp;quot;XL&amp;quot; vůči &amp;quot;PL&amp;quot;&lt;br /&gt;
 7) Ověřit CRC-32 dešifrovaného payloadu&lt;br /&gt;
    a. spočítat CRC-32 správným algoritmem, vučí bajtům (plain-text) z [36] až [52+XL-1] včetně&lt;br /&gt;
 &lt;br /&gt;
 8) Hotovo: teď se provede aktuální příkaz (Master Command, dle tabulky podle produktové řady viz &amp;quot;TV&amp;quot;)&lt;br /&gt;
            a odešle odpověď (ponechat user_identifier pro korelaci) (pozor na &amp;quot;XR_MTU&amp;quot; omezení)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Postup při odesílání S-UDP paketu ==&lt;br /&gt;
&lt;br /&gt;
Odesílatel zprávy provádí tyto kroky:&lt;br /&gt;
&lt;br /&gt;
 1) Je sestaven přesný obsah [C-PAYLOAD] a určena odpovídající hodnota XL&lt;br /&gt;
    a. obsah samozřejmě odpovídá tomu co chcete odeslat&lt;br /&gt;
    b. určí se i &amp;quot;master-command&amp;quot; a &amp;quot;sub-command&amp;quot; (pozor na produktovou řadu SDS - viz &amp;quot;TV&amp;quot;)&lt;br /&gt;
 2) Vyplní se [HEADER]&lt;br /&gt;
    a. hlavička &amp;quot;SDS&amp;quot;, &amp;quot;encryption-flag&amp;quot;&lt;br /&gt;
    b. zapsat správnou hodnotu &amp;quot;TV&amp;quot; podle protokolu a konkrétního SDS (&amp;quot;master-version&amp;quot;, &amp;quot;product-line&amp;quot;)&lt;br /&gt;
    c. určí se nová unikátní hodnota &amp;quot;user_identifier&amp;quot;, a zapíše se do [HEADER]&lt;br /&gt;
    d. zapíše se &amp;quot;CounterBlock&amp;quot; (hodnota pokračuje po předchozím paketu)&lt;br /&gt;
 3) Nachystá se zaokrouhlovací oblast &amp;quot;R&amp;quot; &lt;br /&gt;
    a. Pokud XL není beze zbytku dělitelná 16, musí se doplnit oblastí &amp;quot;R&amp;quot;&lt;br /&gt;
 4) Spočítá se hodnota &amp;quot;PL&amp;quot;&lt;br /&gt;
    a. PL = (XL + R)/16&lt;br /&gt;
    b. zapsat do [HEADER]&lt;br /&gt;
 5) Začne se vyplňovat [ENCRYPTED PAYLOAD]&lt;br /&gt;
    a. zapsat náhodný byte do &amp;quot;random number&amp;quot;&lt;br /&gt;
    b. spočítá se hodnota &amp;quot;CK2&amp;quot; (sečíst bajty [0] až [27] - ovšem přeskočit byte [7] - pozor!) &lt;br /&gt;
    c. zapsat hodnotu &amp;quot;XR_MTU&amp;quot; podle možností zařízení (tzn. jak velkou odpověď lze bezpečně přijmout, podle omezení sítě)&lt;br /&gt;
    d. zapíší se hodnoty &amp;quot;uptime&amp;quot; a &amp;quot;time&amp;quot;, zapsat hodnotu &amp;quot;SDS-DEVICE-TYPE&amp;quot;&lt;br /&gt;
    e. zapsat &amp;quot;master-command&amp;quot; a &amp;quot;sub-command&amp;quot;&lt;br /&gt;
 6) Spočítá se CRC-32 (před šifrováním)&lt;br /&gt;
    a. spočítat crc32 pro bajty (plain-text) z offsetu [36] až [52+XL-1] včetně&lt;br /&gt;
 7) Nastavit šifrování&lt;br /&gt;
    a. zvolit algoritmus (musí odpovídat tomu, co se zapsalo do &amp;quot;encryption-flag&amp;quot;)&lt;br /&gt;
    b. nastavit klíč (stejný jako na protistraně, samozřejmě není přenášen přes síť)&lt;br /&gt;
    c. nastavit &amp;quot;CounterBlock&amp;quot; (stejný jako byl zapsán [HEADER])&lt;br /&gt;
 8) Šifrovat celou [ENCRYPTED PAYLOAD] na plain-text&lt;br /&gt;
    a. hodnota &amp;quot;PL&amp;quot; musí být dělitelná 16 beze zbytku (tato podmínka závisí na použitém šifrovaní)&lt;br /&gt;
    b. aktualizovaná hodnota &amp;quot;CounterBlock&amp;quot; (zvýšená o průběh šifrování) se uschová pro další použití - viz bod &amp;quot; 2) c. &amp;quot;&lt;br /&gt;
 9) Spočítat základní additive-checksum pro [ENCRYPTED PAYLOAD]&lt;br /&gt;
    a. přečíst bajty [28] až [28+PL-1] a sečíst je (overflow osm bitů), výsledek se zapíše do &amp;quot;CK1&amp;quot; hodnoty&lt;br /&gt;
 &lt;br /&gt;
 10) Hotovo: paket se následně odešle přes síť do protistrany, která odpoví novým paketem - ten je vztažen k tomuto dotazu pomocí &amp;quot;user_identifier&amp;quot; hodnoty.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vzorové obsahy paketů ==&lt;br /&gt;
&lt;br /&gt;
Na stránce [[M2M: S-UDP protocol: examples]] naleznete ukázkové vzorové pakety a jejich vnitřní obsah, i se zobrazeních jednotlivých položek v paketu (před a po šifrování).&lt;br /&gt;
Toto je vhodné pro vývojáře komunikační protistrany, kterým nestačí popis postupu na této stránce, ale chtějí také vidět jednotlivé kroky s aktuálními hodnotami.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Seznam hlavních příkazů ==&lt;br /&gt;
&lt;br /&gt;
Obě produktové řady SDS, které jsou na trhu, mají svou sadu &amp;quot;master_command&amp;quot; příkazů. Proto je potřeba nejprve zjistit, do které produktové řady vaše SDS spadá, a podle toho dále pokračovat. Lze to přímo odvodit od typu SDS (&amp;quot;SDS-DEVICE-TYPE&amp;quot; hodnota), nebo se zeptat příkazem NOP.&lt;br /&gt;
&lt;br /&gt;
Zařazení SDS do produktových řad je v [[Seznam_Všech_SDS|tomto seznamu]].&lt;br /&gt;
&lt;br /&gt;
* První produktová řada: &amp;quot;TV = 0001....&amp;quot;  -&amp;gt; '''(1PŘ)'''&lt;br /&gt;
* Druhá produktová řada: &amp;quot;TV = 0010....&amp;quot;  -&amp;gt; '''(2PŘ)'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2PŘ) Master Command (druhá produktová řada: &amp;quot;TV = 0010....&amp;quot; ) ==&lt;br /&gt;
&lt;br /&gt;
Jednotlivé základní příkazy (''master command''):&lt;br /&gt;
 &lt;br /&gt;
  MASTER COMMAND  |  command&lt;br /&gt;
  ----------------+-------------------------------------&lt;br /&gt;
     0            |   NOP (replies with NOP)&lt;br /&gt;
     1            |   general device status&lt;br /&gt;
     2            |   1-Wire access&lt;br /&gt;
     4            |   read FC-Get list&lt;br /&gt;
     8            |   write FC-Set list&lt;br /&gt;
    16            |   FULL-C shared variable(s) access&lt;br /&gt;
    32            |   serial port access&lt;br /&gt;
    64            |   DataFlash access&lt;br /&gt;
   128            |   reserved&lt;br /&gt;
 &lt;br /&gt;
Jak lze vidět, jednotlivé ''master command'' příkazy jsou dále rozlišeny pomocí hodnoty ''sub command''.&lt;br /&gt;
&lt;br /&gt;
Každý příkaz má doplňující datovou sadu, tzn. [C-PAYLOAD]. V rámci těchto dat jsou uvedeny všechny hodnoty, které přesně určují co se má stát (popř. jsou zde všechny odpovědi na dotaz).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [0] '''NOP''' ==&lt;br /&gt;
&lt;br /&gt;
SDS odpoví na tento příkaz odesláním [0] NOP.&lt;br /&gt;
&lt;br /&gt;
Tohoto příkazu lze využít k ověření komunikace a k vzájemné základní synchronizace.&lt;br /&gt;
&lt;br /&gt;
Specifická vlastnost příkazu NOP, oproti všem ostatním příkazům, je to, že SDS odpoví i v případě, že v dotazu není správně uvedený SDS Device Type. Toto je záměr, aby bylo možné při začátku komunikace s SDS modulem, tento modul identifikovat. Samozřejmě všechny ostatní bezpečnostní prvky jsou stále aplikovány, jen tento detail je zde upraven.&lt;br /&gt;
&lt;br /&gt;
Tento příkaz je také velmi užitečný pro získání hodnoty &amp;quot;TV&amp;quot; z [HEADER], tím pádem pro určení číslo produktové řady SDS - a tím pádem k určení které &amp;quot;master_command&amp;quot; příkazy jsou k dispozici !&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 0, sent from SDS as reply)&lt;br /&gt;
 sub_command = 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN   | TYPE  | content&lt;br /&gt;
 -----------------+-------+-------+------------------------------------------------------&lt;br /&gt;
    0             |     6 | bytes |  MAC ADDRESS (bytes, not text)&lt;br /&gt;
    6             |     4 | bytes |  SDS Device Type&lt;br /&gt;
   10             |     4 | dword |  FW version &lt;br /&gt;
   14             |    32 | bytes |  sysLocation (missing the 0x00 terminator)&lt;br /&gt;
   46             |     8 | bytes |  reserved (0x00)&lt;br /&gt;
   54             |    32 | bytes |  OEM string (missing the 0x00 terminator)&lt;br /&gt;
   86             |     8 | bytes |  reserved (0x00)&lt;br /&gt;
   94             |     1 |  byte |  bylo aktivováno RSTD&lt;br /&gt;
   95             |     1 |  byte |  bylo aktivováno PVD&lt;br /&gt;
   96             |     1 |  byte |  SDS je: BIG (hodnota 1) nebo STSW (hodnota 0)&lt;br /&gt;
   97             |     8 | bytes |  reserved (0x00)&lt;br /&gt;
  105             |     2 | uword |  web interface TCP port number (typicky 80)&lt;br /&gt;
  107             |     1 |  byte |  SNMP-read enabled&lt;br /&gt;
  108             |     1 |  byte |  SNMP-write enabled&lt;br /&gt;
  109             |     1 |  byte |  FULLC shared vars access lock (0 = unlocked) tzn. sys[150]&lt;br /&gt;
  110             |     1 |  byte |  FULLC program run status&lt;br /&gt;
  111             |     1 |  byte |  FULLC program started-by info&lt;br /&gt;
  112             |     1 |  byte |  FULLC program watchdog active&lt;br /&gt;
  113             |     6 | bytes |  reserved&lt;br /&gt;
  119             |     4 |   f32 |  backup battery voltage (milliVolts)&lt;br /&gt;
&lt;br /&gt;
Pozn. rozšířená funkcionalita příkazu NOP (tedy vracení payloadu) bylo přidáno až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [1] '''General Device Status''' ==&lt;br /&gt;
&lt;br /&gt;
SDS odpoví zasláním vybraných údajů, jejichž seznam je přesně daný. Tato funkce je k dispozici pro umožnění rychlého přístupu k základnímu stavu zařízení SDS, bez složité přípravy.&lt;br /&gt;
&lt;br /&gt;
Základní odpověď s nejzajímavějšími živými údaji. Určeno např. pro průběžnou aktualizaci stavu zobrazeného uživateli.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 1, sent from SDS as reply)&lt;br /&gt;
 sub_command = 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN   | TYPE  | content&lt;br /&gt;
 -----------------+-------+-------+------------------------------------------------------&lt;br /&gt;
    0             |     6 | bytes |  MAC ADDRESS (bytes, not text)&lt;br /&gt;
    6             |     1 |  byte |  Ethernet Link Status / Speed (0, 10, 100)&lt;br /&gt;
    7             |     1 |  byte |  Amount of users logged into SDS Web Admin&lt;br /&gt;
    8             |    32 | bytes |  sysLocation (missing the 0x00 terminator)&lt;br /&gt;
   40             |     1 |  byte |  IP Watchdog Config status&lt;br /&gt;
   41             |     1 |  byte |  IP Watchdog Output (relay) status&lt;br /&gt;
   42             |     2 | uword |  IP Watchdog RTT value (note.: 0xFFFF = not available)&lt;br /&gt;
   44             |     1 |  byte |  DHCP status&lt;br /&gt;
   45             |     1 |  byte |  reserved&lt;br /&gt;
   46             |     1 |  byte |  NTP status&lt;br /&gt;
   47             |     1 | sbyte |  NTP offset (+/- hours) (signed char)&lt;br /&gt;
   48             |     2 | uword |  SoC chip temperature (degC)&lt;br /&gt;
   50             |     1 |  byte |  GPIO-TOPB PIN(s) direction (0 == input)&lt;br /&gt;
   51             |     1 |  byte |  GPIO-TOPB PIN(s) pin value&lt;br /&gt;
   52             |  32*1 |  byte |  OPTO [1]..[32] status (0xFF == signal) (0x00 == nosignal)&lt;br /&gt;
   84             |  32*1 |  byte |  RELAY [1]..[32] status (active/nonactive)&lt;br /&gt;
  116             |  32*2 | uword |  ADC [0]..[31] RAW value&lt;br /&gt;
  180             |     1 |  byte |  General 1-W BUS status&lt;br /&gt;
  181             |     1 |  byte |  1-W BUS A - active device count&lt;br /&gt;
  182             |     1 |  byte |  1-W BUS B - active device count&lt;br /&gt;
  183             |     3 | bytes |  reserved (0x00)&lt;br /&gt;
  186             |     1 |  byte |  S0 Tariff Value (active/nonactive)&lt;br /&gt;
  187             |     1 |  byte |  number of the following S0 INPUT DB data blocks:&lt;br /&gt;
  188             | 31*28 |  data |  S0 INPUT [1]..[ (max) 31] DB (data block)&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 S0-INPUT DB offset | LEN | TYPE  | content&lt;br /&gt;
 -------------------+-----+-------+-------------------------------------------------------&lt;br /&gt;
    0               |   1 |  byte |  configuration status (combined flags: bit0 = enabled as S0; bit1 = is tariff used)&lt;br /&gt;
    1               |   3 | bytes |  reserved (filled with 0x00)&lt;br /&gt;
    4               |   4 | dword |  T0 impulse counter&lt;br /&gt;
    8               |   4 | dword |  T1 impulse counter&lt;br /&gt;
    12              |   4 | dword |  T0 offset&lt;br /&gt;
    16              |   4 | dword |  T1 offset&lt;br /&gt;
    20              |   4 | dword |  measured space between impulses (msec)&lt;br /&gt;
    24              |   4 | dword |  time since last registered impulse (msec)&lt;br /&gt;
&lt;br /&gt;
Sestava [C-PAYLOAD] je tedy zřejmá. &lt;br /&gt;
&lt;br /&gt;
Poslední blok (offset [188] až [1083] včetně) je určen pro přenos 32 S0 vstupů - často je jich ale v zařízení SDS fyzicky přítomno mnohem méně, např. jen devět - a potom zařízení SDS ve své odpovědi pošle jen devět záznamů (namísto 32) (toto se týká pouze a jenom S0 položek, né jiných v rámci paketu). To je provedeno z praktického důvodu: aby byl UDP paket dostatečně malý (a tedy rychlý na zpracování).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [2] '''1-Wire Access''' ==&lt;br /&gt;
&lt;br /&gt;
Tato funkce se používá pro čtení stavu hodnot získaných z obou 1-W sběrnic, kterými SDS disponuje (některé SDS mají jen jednu sběrnici). Maximální počet prvků (chipů) na sběrnici je 64, celkem je tedy k dispozici 2x64 = 128 prvků.&lt;br /&gt;
&lt;br /&gt;
 QUERY/COMMAND TO SDS (master_command == 2)&lt;br /&gt;
 &lt;br /&gt;
 sub_command | meaning&lt;br /&gt;
 ------------+-----------------------------------------------------------&lt;br /&gt;
           0 |  reserved&lt;br /&gt;
           1 |  obtain status, and list of found items on BUS A&lt;br /&gt;
           2 |  obtain status, and list of found items on BUS B&lt;br /&gt;
           4 |  list all read-values on BUS A&lt;br /&gt;
           8 |  list all read-values on BUS B&lt;br /&gt;
&lt;br /&gt;
První možností tedy je sub_command == 1 , tzn. výpis nalezených zařízení na sběrnici A respektive B:&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 1, sent from SDS as reply)&lt;br /&gt;
 sub_command = 1 or 2&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  global 1-W controller status (SDS status)&lt;br /&gt;
    1             |   1 |  byte |  number of active items on BUS A&lt;br /&gt;
    2             |   1 |  byte |  number of active items on BUS B&lt;br /&gt;
    3             |   1 |  byte |  reserved (0x00)&lt;br /&gt;
    4             |  12 |  data |  1-W item status #0&lt;br /&gt;
    . . .         | ... |   ... |  . . .&lt;br /&gt;
    4+12*63       |  12 |  data |  1-W item status #63&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;1-W item status&amp;quot; ofs | LEN | TYPE  | content&lt;br /&gt;
 ----------------------+-----+-------+-------------------------------------------------------&lt;br /&gt;
    0                  |   1 |  byte |  ctrl: main-status&lt;br /&gt;
    1                  |   1 |  byte |  ctrl: sub-status &lt;br /&gt;
    2                  |   2 | bytes |  reserved (filled with 0x00)&lt;br /&gt;
    4                  |   8 | bytes |  ROM-CODE [0]..[7]&lt;br /&gt;
&lt;br /&gt;
Následuje: výpis získaných hodnot (např. změřené teploty z teplotních čidel) pro jednotlivé sběrnice :&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 1, sent from SDS as reply)&lt;br /&gt;
 sub_command = 4 or 8&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  global 1-W controller status (SDS status)&lt;br /&gt;
    1             |   1 |  byte |  number of active items on BUS A&lt;br /&gt;
    2             |   1 |  byte |  number of active items on BUS B&lt;br /&gt;
    3             |   1 |  byte |  reserved (0x00)&lt;br /&gt;
    4             |  12 |  data |  1-W item value #0&lt;br /&gt;
    . . .         | ... |   ... |  . . .&lt;br /&gt;
    4+12*63       |  12 |  data |  1-W item value #63&lt;br /&gt;
 &lt;br /&gt;
 &amp;quot;1-W item value&amp;quot; ofs  | LEN | TYPE  | content&lt;br /&gt;
 ----------------------+-----+-------+-------------------------------------------------------&lt;br /&gt;
    0                  |   1 |  byte |  ctrl: main-status&lt;br /&gt;
    1                  |   1 |  byte |  ctrl: sub-status&lt;br /&gt;
    2                  |   1 |  byte |  value of ROM-CODE offset [0] (1-W DEVICE TYPE: ID)&lt;br /&gt;
    3                  |   1 |  byte |  value of ROM-CODE offset [7] (1-W DEVICE TYPE: CRC)&lt;br /&gt;
    4                  |   4 | slong |  1-W read: primary value&lt;br /&gt;
    8                  |   4 | slong |  1-W read: secondary value&lt;br /&gt;
&lt;br /&gt;
Každý chip na sběrnici 1-Wire má vždy primární a sekundární hodnotu, kterou SDS pro daný chip udržuje (ne vždy jsou však, v závislosti na konkrétním chipu, obě hodnoty použity). Aktuální význam je potřeba určit podle chipu (příklad: DS18B20 má &amp;quot;primary value&amp;quot; zpracovanou teplotu v degC, a &amp;quot;secondary value&amp;quot; přímou surovou 16-bit hodnotu přečtenou z čidla).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [4] '''Read FC-Get List''' ==&lt;br /&gt;
&lt;br /&gt;
Dotaz (query) který obsahuje seznam indexů jejichž hodnoty jsou tazatelem požadovány, se posílá do SDS, které následně odpoví (reply).&lt;br /&gt;
&lt;br /&gt;
Dotaz i odpověď má dynamický obsah, který je specificky strukturován.&lt;br /&gt;
&lt;br /&gt;
 QUERY (master_command == 4, sent to SDS)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------&lt;br /&gt;
  0               |   2 | uword | [#0] index value &lt;br /&gt;
  2               |   2 | uword | [#0] TBLEN#0: type-bits and data length (L#0)&lt;br /&gt;
  4               | L#0 |  data | [#0] space prepared for answer from SDS&lt;br /&gt;
 &lt;br /&gt;
  (4+(L#0))+0     |   2 | uword | [#1] index value&lt;br /&gt;
  (4+(L#0))+2     |   2 | uword | [#1] TBLEN#1: type-bits and data length (L#1)&lt;br /&gt;
  (4+(L#0))+4     | L#1 |  data | [#1] space prepared for answer from SDS&lt;br /&gt;
 &lt;br /&gt;
  . . .           | ... | . . . | ...&lt;br /&gt;
 &lt;br /&gt;
  Z+0             |   2 | uword | [#n] index value &lt;br /&gt;
  Z+2             |   2 | uword | [#n] TBLEN#n: type-bits and data length (L#n)&lt;br /&gt;
  Z+4             | L#n |  data | [#n] space prepared for answer from SDS&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, v dotazu (query) jsou za sebou naskládány položky (indexy), na které následně SDS odpoví. Vždy musíte u každého indexu, na který se ptáte, uvést typ odpovědi (viz dále) a prostor, kam bude odpověď zapsána - to znamená, musíte znát přesnou délku, kterou má obsah pro daný index !&lt;br /&gt;
&lt;br /&gt;
Pozor na množství dotazů v rámci jednoho paketu, protože velikost dotazu, a také velikost odpovědi, je omezena XR_MTU. Jakmile SDS při skládání odpovědi narazení na XR_MTU protistrany, už více odpovědí do paketu nepřidá (aby nebylo XR_MTU překročeno).&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 4, sent from SDS as reply to query)&lt;br /&gt;
 &lt;br /&gt;
 SDS writes the values into the &amp;quot;[#n] space prepared for answer from SDS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Odpověď tedy přesně sleduje (vyplňuje) původní dotaz, přičemž [C-PAYLOAD] teď obdrží skutečný datový obsah pro jednotlivé položky. Pokud poskytnete SDS menší prostor pro odpověď, než je potřeba, bude odpověď vyplněna 0x00.&lt;br /&gt;
&lt;br /&gt;
Hodnota &amp;quot;sub_command&amp;quot; je nastavena SDS na počet položek (#n) v odpovědi. Toto omezuje maximální počet položek v jednom paketu na 255.&lt;br /&gt;
&lt;br /&gt;
Následující popis ukazuje kódování typu proměnné a její délky, ve společném slově:&lt;br /&gt;
&lt;br /&gt;
 TBLEN#x: (16-bit unsigned word, little-endian) Type-Bits and Data Length (L#x)&lt;br /&gt;
 &lt;br /&gt;
 TBLEN#x: TTTTvvvvvvvvvvvv&lt;br /&gt;
          FEDCBA9876543210&lt;br /&gt;
 &lt;br /&gt;
 BIT OFFSET (hex) | LEN (bits) | content&lt;br /&gt;
 -----------------+------------+-----------------------------------------&lt;br /&gt;
  F (MSB)         |          4 |  &amp;quot;T&amp;quot;: type (see bit-value in next table)&lt;br /&gt;
  B               |         12 |  &amp;quot;v&amp;quot;: length of data, in bytes&lt;br /&gt;
 &lt;br /&gt;
  &amp;quot;T&amp;quot; bit-values | meaning                     | FULL-C set/get&lt;br /&gt;
            FEDC |                             | (which function)&lt;br /&gt;
 ----------------+-----------------------------+------------------&lt;br /&gt;
            0000 |  unsigned integer (32-bit)  |  _u&lt;br /&gt;
            0001 |  signed integer (32-bit)    |  _i&lt;br /&gt;
            0010 |  float IEEE-754 (32-bit)    |  _f&lt;br /&gt;
            0100 |  string UTF-8 (L#x * 8-bit) |  _a&lt;br /&gt;
            1000 |  reserved (do not use)      |  &lt;br /&gt;
&lt;br /&gt;
Horní 4 bity z TBLEN#x tedy určují typ položky. Pro získání délky L#x položky 'x', je potřeba hodnotu TBLEN#x odmaskovat - použít jen dolních 12 bitů.&lt;br /&gt;
&lt;br /&gt;
Je vaším úkolem správně zvolit typ (T) pro každou položku, pokud zvolíte špatně, nebude údaj pro daný index zpracován.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Index Value''' - každá položka má svůj číselný index, viz [[FULL-C:_set_and_get|seznam všech FULL-C indexů]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [8] '''Write FC-Get List''' ==&lt;br /&gt;
&lt;br /&gt;
Pokud SDS obdrží zprávu s &amp;quot;master_command == 8&amp;quot;, tak nastaví příslušné FULL-C indexy na nové hodnoty (podle obsahu této přijaté zprávy). &lt;br /&gt;
&lt;br /&gt;
SDS na tuto zprávu odpovídá pouze ve smyslu &amp;quot;úspěch&amp;quot; nebo &amp;quot;neúspěch&amp;quot; - takže pro skutečné ověření hodnot (zda-li se zapsaly správně) musíte proto sami zaslat další zprávu &amp;quot;master_command == 4&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 COMMAND TO SDS (master_command == 8, sent to SDS)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------&lt;br /&gt;
  0               |   2 | uword | [#0] index value &lt;br /&gt;
  2               |   2 | uword | [#0] TBLEN#0: type-bits and data length (L#0)&lt;br /&gt;
  4               | L#0 |  data | [#0] new data value to write to SDS&lt;br /&gt;
 &lt;br /&gt;
  (4+(L#0))+0     |   2 | uword | [#1] index value&lt;br /&gt;
  (4+(L#0))+2     |   2 | uword | [#1] TBLEN#1: type-bits and data length (L#1)&lt;br /&gt;
  (4+(L#0))+4     | L#1 |  data | [#1] new data value to write to SDS&lt;br /&gt;
 &lt;br /&gt;
  . . .           | ... | . . . | ...&lt;br /&gt;
 &lt;br /&gt;
  Z+0             |   2 | uword | [#n] index value &lt;br /&gt;
  Z+2             |   2 | uword | [#n] TBLEN#n: type-bits and data length (L#n)&lt;br /&gt;
  Z+4             | L#n |  data | [#n] new data value to write to SDS&lt;br /&gt;
&lt;br /&gt;
Lze vidět, že formát je naprosto shodný jako formát odpovědi kterou SDS posílá pro &amp;quot;master_command == 4&amp;quot; zprávu. Nicméně, v tomto případě, je tento obsah [C-PAYLOAD] zapsán '''do''' SDS, které jej zpracuje a provede - pouze ale pokud je délka L#x přesně odpovídající danému indexu.&lt;br /&gt;
&lt;br /&gt;
Odpověď, kterou na tento příkaz SDS následně posílá, je velmi jednoduchá: [C-PAYLOAD] není vůbec použito (XL=0), a &amp;quot;sub_command&amp;quot; obsahuje následující možnost:&lt;br /&gt;
&lt;br /&gt;
 REPLY FROM SDS (master_command == 8)&lt;br /&gt;
 &lt;br /&gt;
 NOTE: THIS FEATURE (PROPER RESPONSE) IS IMPLEMENTED SINCE FW 15.March.2025 AND ONWARDS&lt;br /&gt;
 (previously no proper response was provided)&lt;br /&gt;
 &lt;br /&gt;
 sub_command | meaning&lt;br /&gt;
 ------------+-----------------------------------------------------------&lt;br /&gt;
           0 |  complete failure (no item modified)&lt;br /&gt;
           1 |  partial failure  (some items modified, some not modified)&lt;br /&gt;
           2 |  success          (all items modified OK)&lt;br /&gt;
 &lt;br /&gt;
Další, detailnější, rozlišení selhání (failure) se neprovádí (tzn. SDS neposílá více detailnější informaci ve své odpovědi, než uvedené tři možnosti).&lt;br /&gt;
&lt;br /&gt;
Pozor, odpověď se týka schopnosti převzít jednotlivé položky ze S-UDP příkazu, a předat je do FULL-C bloku k dalšímu zpracování (zápis do indexů). Pokud je specifický index pouze pro čtení, samozřejmě nedojde k zápisu, ovšem to není bráno jako chyba z hlediska odpovědi na tento paket (jen jednoduše nedojde k zápisu pro daný read-only index). Chybová hodnota (0 nebo 1) je v této celkové odpovědi vrácena pouze pokud je obsahem S-UDP příkazu nesmysl (částečný nebo úplný), např. jde o obsahově prázdný paket (není co zapisovat), nebo se snažíte zapsat nesmyslné velikosti nebo rozsahy hodnot, nebo příliš moc indexů najednou atd. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [16] '''FULL-C Shared Variable(s) Access''' ==&lt;br /&gt;
&lt;br /&gt;
Tento příkaz se využívá k přístupu ke [[FULL-C:_sharing|sdíleným proměnným]] programu FULL-C.&lt;br /&gt;
&lt;br /&gt;
Proměnné se označují vzorem, kde je na začátku velké písmeno určující typ, a pak dvě decimální číslice určující pořadí - tedy sto možných hodnot. &lt;br /&gt;
&lt;br /&gt;
Mohou existovat tyto sdílené proměnné :&lt;br /&gt;
* S00 až S99 (hodnoty: signed 32-bit)&lt;br /&gt;
* U00 až U99 (hodnoty: unsigned 32-bit)&lt;br /&gt;
* F00 až F99 (hodnoty: float 32-bit)&lt;br /&gt;
* T00 až T99 (hodnoty: array/text)&lt;br /&gt;
&lt;br /&gt;
Rozlišování jednotlivých funkcí je závislé na hodnotě &amp;quot;sub_command&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 QUERY-or-COMMAND TO SDS (master_command == 16, sent to SDS)&lt;br /&gt;
 &lt;br /&gt;
 sub_command | meaning&lt;br /&gt;
 ------------+---------------------------------------------&lt;br /&gt;
           0 | provide list of all active shared variables&lt;br /&gt;
           1 | read from shared variable (single variable)&lt;br /&gt;
           2 | reserved&lt;br /&gt;
           4 | write to shared variable (single variable)&lt;br /&gt;
           8 | reserved&lt;br /&gt;
&lt;br /&gt;
Pro &amp;quot;sub_command == 0&amp;quot; poskytne SDS odpověď, kde je uvedeno zda-li je specifická sdílená proměnná definována v právě aktivním FULL-C programu.&lt;br /&gt;
&lt;br /&gt;
 RESPONSE:  LIST OF SHARED VARIABLES: sub_command = 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+--------------------------&lt;br /&gt;
   0              |  13 | bytes | Uxx existence: bit-field&lt;br /&gt;
  13              |  13 | bytes | Sxx existence: bit-field&lt;br /&gt;
  26              |  13 | bytes | Fxx existence: bit-field&lt;br /&gt;
  39              |  13 | bytes | Txx existence: bit-field&lt;br /&gt;
&lt;br /&gt;
Jak lze vidět, v odpovědi jsou čtyři samostatné bitové pole, každé o délce 100 bitů (plus nevyužitý zbytek 4 bitů na konci). Každý bit přestavuje existenci jedné ze sdílených proměnných, pokud je nastaven na 1 tak proměnná existuje.&lt;br /&gt;
&lt;br /&gt;
 Xxx existence: bit-field&lt;br /&gt;
 &lt;br /&gt;
 BYTE -&amp;gt; [0] . . . [13]&lt;br /&gt;
 BITS -&amp;gt;  0 . . .   100 (plus 4 at the end, which are not used)&lt;br /&gt;
 &lt;br /&gt;
 BYTE [0] = bit 0, 1, 2, ..., 7&lt;br /&gt;
 BYTE [1] = bit 8, 9, 10, ..., 15&lt;br /&gt;
 ...&lt;br /&gt;
 BYTE [13] = bit 96, 97, 98 ..., 103&lt;br /&gt;
 &lt;br /&gt;
 example: existence of &amp;quot;U11&amp;quot; =&amp;gt; bit 11 =&amp;gt; look at BYTE [1]&lt;br /&gt;
&lt;br /&gt;
Takže pro kteroukoliv sdílenou proměnnou si lze nalézt příslušnou pozici, která ukazuje, zda-li právě daná proměnná existuje.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Další,''' &amp;quot;sub_command == 1&amp;quot; umožňuje z konkrétní (jedné) sdílené proměnné číst.&lt;br /&gt;
&lt;br /&gt;
 QUERY TO SDS: READ ONE SHARED VARIABLE: sub_command = 1&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+--------------------------&lt;br /&gt;
  0               |   3 | bytes | [#0] name (example: &amp;quot;U25&amp;quot;)&lt;br /&gt;
  1               |   1 |  byte | reserved (0x00)&lt;br /&gt;
&lt;br /&gt;
A ''odpověď'' je:&lt;br /&gt;
&lt;br /&gt;
 REPLY FROM SDS: READ ONE SHARED VARIABLE: sub_command = 1&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+--------------------------&lt;br /&gt;
  0               |   3 | bytes | [#0] name (example: &amp;quot;F95&amp;quot;)&lt;br /&gt;
  1               |   1 |  byte | reserved (0x00)&lt;br /&gt;
  4               |   2 | uword | [#0] L#0: data length (L#0)&lt;br /&gt;
  6               |   2 | uword | reserved (0x0000)&lt;br /&gt;
  8               | L#0 |  data | [#0] data value from the shared variable&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Dále,''' pro &amp;quot;sub_command == 4&amp;quot; dojde ke změně hodnoty.&lt;br /&gt;
&lt;br /&gt;
 COMMAND TO SDS: WRITE ONE SHARED VARIABLE: sub_command = 4&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+--------------------------&lt;br /&gt;
  0               |   3 | bytes | [#0] name (example: &amp;quot;T12&amp;quot;)&lt;br /&gt;
  1               |   1 |  byte | reserved (0x00)&lt;br /&gt;
  4               |   2 | uword | [#0] L#0: data length (L#0)&lt;br /&gt;
  6               |   2 | uword | reserved (0x0000)&lt;br /&gt;
  8               | L#0 |  data | [#0] new data value to write to shared variable&lt;br /&gt;
&lt;br /&gt;
A odpověď je zde shodná jako odpověd pro &amp;quot;sub_command == 1&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [32] '''S0 Input Configuration Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení kalibračních konstant pro S0 vstupy. Současně jsou předány i aktuální (živé) údaje pro daný S0 vstup.&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 32 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 32, sent from SDS as reply)&lt;br /&gt;
 sub_command == index to S0 array [1..MAX] (typical MAX value is 9)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  S0 input number for this reply (for a valid answer: 1..MAX , otherwise: 0x00).&lt;br /&gt;
    1             |   1 |  byte |  total number of S0 inputs for this SDS&lt;br /&gt;
    2             |   1 |  byte |  configuration status (combined flags: bit0 = enabled as S0; bit1 = is tariff used)&lt;br /&gt;
    3             |   1 |  byte |  reserved (0x00)&lt;br /&gt;
    4             |  32 | bytes |  text (name: unit)&lt;br /&gt;
    36            |  32 | bytes |  text (name: money)&lt;br /&gt;
    68            |  32 | bytes |  text (unit: power)&lt;br /&gt;
    100           |  32 | bytes |  text (name: power)&lt;br /&gt;
    132           |  32 | bytes |  text (name: device)&lt;br /&gt;
    168           |   4 | dword |  MTD value&lt;br /&gt;
    172           |   4 | dword |  minimal impulse length (msec)&lt;br /&gt;
    176           |   4 | dword |  impulse constant value (imp. per unit)&lt;br /&gt;
    180           |   4 | bytes |  price for T0&lt;br /&gt;
    184           |   4 | bytes |  price for T1&lt;br /&gt;
    188           |   8 | bytes |  reserved (0x00)&lt;br /&gt;
    196           |   4 | dword |  live value: T0 impulse counter&lt;br /&gt;
    200           |   4 | dword |  live value: T1 impulse counter&lt;br /&gt;
    204           |   4 | dword |  T0 offset&lt;br /&gt;
    208           |   4 | dword |  T1 offset&lt;br /&gt;
    212           |   4 | dword |  live value: measured space between impulses (msec)&lt;br /&gt;
    216           |   4 | dword |  live value: time since last registered impulse (msec)&lt;br /&gt;
    220           |   4 | bytes |  reserved (0x00)&lt;br /&gt;
    224           |   n | bytes |  live value: combined text&lt;br /&gt;
&lt;br /&gt;
Kombinovaný text (combined text) obsahuje vypočtené informace, oddělené znakem '|'. Tyto údaje lze přímo zobrazit uživateli. Výpočet provádí SDS, a stejné hodnoty ukazuje na svém webu. Jedná se zde o doplněk původní funkce GDS (master_command==0).&lt;br /&gt;
&lt;br /&gt;
Délka textu &amp;quot;n&amp;quot; je dynamická, text je zakončen 0x00 (nebo pokud vyjde přesně na maximální délku co se vleze do payloadu, zakončení nemá a je uříznut na posledním znaku, pozor na to).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''(sub_command = 0xFF)''': speciální odpověď pro Tarifní vstup :&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 32, sent from SDS as reply)&lt;br /&gt;
 sub_command == 0xFF (tariff)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  constant 0xFF&lt;br /&gt;
    1             |   3 | bytes |  reserved (0x00)&lt;br /&gt;
    4             |   1 |  byte |  tariff input&lt;br /&gt;
    5             |  32 | bytes |  text (name: tariff)&lt;br /&gt;
    37            |  32 | bytes |  text (name: tariff T0 input)&lt;br /&gt;
    69            |  32 | bytes |  text (name: tariff T1 input)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [33] '''S0 Input History Values''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení historických hodnot počítadel pro vybraný S0 vstup. Každá nová položka se do záznamu historie uloží co 15 minut.&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 33 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 33, sent from SDS as reply)&lt;br /&gt;
 sub_command == index to S0 array [1..MAX] (typical MAX value is 9)&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  S0 input number for this reply (for a valid answer: 1..MAX , otherwise: 0x00).&lt;br /&gt;
    1             |   1 |  byte |  total number of S0 inputs for this SDS&lt;br /&gt;
    2             |   1 |  byte |  configuration status (combined flags: bit0 = enabled as S0; bit1 = is tariff used)&lt;br /&gt;
    3             |   3 | bytes |  reserved (0x00)&lt;br /&gt;
    6             |   2 |  word |  history depth (number of items) - value &amp;quot;n&amp;quot; (example: five items -&amp;gt; n == 5)&lt;br /&gt;
    8             |   4 | dword |  uptime value for the last element (#n) in the list&lt;br /&gt;
    12            |   4 | dword |  ntptime value for the last element (#n) in the list&lt;br /&gt;
    16            |   4 | dword |  history item #1: value of T0 counter (this is the most oldest item)&lt;br /&gt;
    20            |   4 | dword |  history item #1: value of T1 counter (this is the most oldest item)&lt;br /&gt;
    ...&lt;br /&gt;
    16+(n-1)*8    |   4 | dword |  history item #n: value of T0 counter (this is the most newest item)&lt;br /&gt;
    16+(n-1)*8+4  |   4 | dword |  history item #n: value of T1 counter (this is the most newest item)&lt;br /&gt;
&lt;br /&gt;
Historické údaje počítadel ukazují stav počítadel od současnosti dozadu. Položka #1 je nejstarší, pak #2 je mladší atd. až po položku #n která je nejaktuálnější (nejbližší současné chvíli).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [40] '''AD Input Configuration Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení kalibračních konstant pro AD vstupy.&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 40 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 40, sent from SDS as reply)&lt;br /&gt;
 sub_command == index to AD array [1..MAX]&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN  | TYPE  | content&lt;br /&gt;
 -----------------+------+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1  |  byte |  actual AD input index for this reply&lt;br /&gt;
    1             |   1  |  byte |  total number of AD inputs&lt;br /&gt;
    2             |   2  | bytes |  reserved (0x00)&lt;br /&gt;
    4             |   4  |   f32 |  F6 calibration constant&lt;br /&gt;
    8             |   4  |   f32 |  F5 calibration constant&lt;br /&gt;
   12             |   4  |   f32 |  F4 calibration constant&lt;br /&gt;
   16             |   4  |   f32 |  F3 calibration constant&lt;br /&gt;
   20             |   4  |   f32 |  F2 calibration constant&lt;br /&gt;
   24             |   4  |   f32 |  F1 calibration constant&lt;br /&gt;
   28             |   4  |   f32 |  F0 calibration constant&lt;br /&gt;
   32             |   1  |  byte |  is calibration factory locked&lt;br /&gt;
   33             |  32  | bytes |  unit&lt;br /&gt;
   65             |   4  | bytes |  reserved (0x00)&lt;br /&gt;
   69             |  32  | bytes |  name&lt;br /&gt;
  101             |   4  | bytes |  reserved (0x00)&lt;br /&gt;
  105             |   4  | dword |  raw value&lt;br /&gt;
  109             |   4  |   f32 |  real value (converted from raw)&lt;br /&gt;
  113             |   n  | bytes |  live value text&lt;br /&gt;
&lt;br /&gt;
Text &amp;quot;live value&amp;quot; obsahuje hodnotu vypočtenou interně v SDS. Text lze prezentovat uživateli (je to stejné jako co SDS ukáže na svém webu). Jedná se o doplňkovou funkci vůči vlastnímu výpočtu ze surových hodnot z GDS (master_command==0).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [42] '''PWM Output Configuration Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení nastavení pro PWM výstup (konfigurace a živý stav).&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 42 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 42, sent from SDS as reply)&lt;br /&gt;
 sub_command == 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN  | TYPE  | content&lt;br /&gt;
 -----------------+------+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1  |  byte |  reserved (0x00)&lt;br /&gt;
    1             |   1  |  byte |  &amp;quot;N&amp;quot; = total number of PWM outputs&lt;br /&gt;
    2             |   2  | bytes |  reserved (0x00)&lt;br /&gt;
 &lt;br /&gt;
    4+(i*12)+  0  |   4  | dword |  frequency (Hz) for PWMx&lt;br /&gt;
    4+(i*12)+  4  |   4  | dword |  &amp;quot;pulse&amp;quot; value for PWMx&lt;br /&gt;
    4+(i*12)+  8  |   1  |  byte |  &amp;quot;ValueB&amp;quot; value for PWMx&lt;br /&gt;
    4+(i*12)+  9  |   2  | uword |  &amp;quot;ValueS&amp;quot; value for PWMx&lt;br /&gt;
    4+(i*12)+ 11  |   1  |  byte |  output enabled for PWMx&lt;br /&gt;
&lt;br /&gt;
Pozn. PWM1 má hodnotu &amp;quot;i&amp;quot; = 0, PWM2 má hodnotu &amp;quot;i&amp;quot; = 1 atd.&lt;br /&gt;
&lt;br /&gt;
V případě, že je některý z PWMx výstupů nevyužit (&amp;quot;přeskočen&amp;quot;), je přesto v odpovědi uveden, aby bylo zachováno číslovaní pořadí všech PWMx výstupů.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [44] '''RELAYs Configuration Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení konfigurace RELAY výstupů (nastavení a živý stav).&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 44 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 44, sent from SDS as reply)&lt;br /&gt;
 sub_command == index to RELAY array [1..MAX]&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN  | TYPE  | content&lt;br /&gt;
 -----------------+------+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1  |  byte |  actual RELAY output index for this reply&lt;br /&gt;
    1             |   1  |  byte |  total number of RELAY outputs&lt;br /&gt;
    2             |   2  | bytes |  reserved (0x00)&lt;br /&gt;
    4             |  32  | bytes |  name&lt;br /&gt;
   36             |   4  | bytes |  reserved (0x00)&lt;br /&gt;
   40             |   1  |  byte |  &amp;quot;relay-controlled-by&amp;quot; value&lt;br /&gt;
   41             |   1  |  byte |  &amp;quot;relay-output&amp;quot; value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [48] '''SD Card Status Query''' ==&lt;br /&gt;
&lt;br /&gt;
Určeno pro čtení stavu SD karty.&lt;br /&gt;
&lt;br /&gt;
Pozn. master_command == 48 byl přidán až ve Firmware od verze 3.10.2019.&lt;br /&gt;
&lt;br /&gt;
 REPLY (master_command == 48, sent from SDS as reply)&lt;br /&gt;
 sub_command == 0&lt;br /&gt;
 &lt;br /&gt;
 C-PAYLOAD offset | LEN | TYPE  | content&lt;br /&gt;
 -----------------+-----+-------+------------------------------------------------------&lt;br /&gt;
    0             |   1 |  byte |  card mounted &lt;br /&gt;
    1             |   3 | bytes |  reserved&lt;br /&gt;
    4             |   4 | dword |  card type&lt;br /&gt;
    8             |   4 | dword |  card ProdSN&lt;br /&gt;
   12             |   4 | dword |  card init attempts counter&lt;br /&gt;
   16             |   4 | dword |  card init failures counter&lt;br /&gt;
   20             |   4 | dword |  card total sector count in FAT in KiB&lt;br /&gt;
   24             |   4 | dword |  total sector reads counter&lt;br /&gt;
   28             |   4 | dword |  total sector writes counter&lt;br /&gt;
   32             |   4 | dword |  total sector r/w failures counter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [50] '''Serial Port Access''' ==&lt;br /&gt;
&lt;br /&gt;
Tento příkaz není pro &amp;quot;version == 0x00&amp;quot; podporován. Potřebujete novější &lt;br /&gt;
firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [64] '''DataFlash (NVM) Access''' ==&lt;br /&gt;
&lt;br /&gt;
Tento příkaz není pro &amp;quot;version == 0x00&amp;quot; podporován. Potřebujete novější &lt;br /&gt;
firmware.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (2-PŘ) Master Command: [128] '''Reserved''' ==&lt;br /&gt;
&lt;br /&gt;
Tento příkaz není v současné verzi použit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== (1-PŘ) Master Command (první produktová řada: &amp;quot;TV = 0001....&amp;quot; ) ==&lt;br /&gt;
&lt;br /&gt;
Jednotlivé základní příkazy (''master command'') - zatím nejsou pro &lt;br /&gt;
první produktovou řadu definovány.&lt;br /&gt;
&lt;br /&gt;
Detaily zde budou doplněny.&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Adamn</name></author>
	</entry>
</feed>