SDS-C: sdsc sysp

Tato stránka popisuje programovací jazyk SDS-C, který je dostupný na vybraných zařízeních SDS. 
Zařízení Druhé Produktové Řady používají jazyk FULL-C (jiná část této Wiki).

Definice systémových proměnných SDS-C : pole sys[]

Tzv. "systémová proměnná" 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é).

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.

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í).

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í).


Legenda k tabulce:

Proměnná typu i je 32-bit signed integer (nejvyšší bit je znaménko, a zbývajících 31 bitů je číselná hodnota).

Proměnná typu s je soubor znaků (string) - tj. text (řetězec znaků) - a tyto proměnné lze použít jen pro čtení.

Některé proměnné lze jen číst (R), do některých lze kromě čtení i zapisovat (RW).

Údaj XX v seznamu proměnných udává verzi firmware, kdy byla daná proměnná zavedena. Význam hodnot:

  • 01 - první verze, výchozí firmware ze začátku roku 2010
  • 02 - druhá verze, bylo vydáno na přelomu roku 2010 a 2011
  • 03 - třetí verze, tj. pouze pro firmware od 03.2011
  • 04 - čtvrtá verze, tj. pouze pro firmware od 06.2011 a novější
  • 05 - pátá verze, tj. pouze pro firmware od 11.2011 a novější
  • 06 - šestá verze, tj. pouze pro firmware od 03.2012 a novější
  • 07 - sedmá verze, tj. pouze pro firmware od 07.2017 a novější
  • 08 - osmá verze, tj. pouze pro firmware od 12.2018 a novější
  • 09 - devátá verze, tj. pouze pro firmware od 06.2020 a novější

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.

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í.

Jazyk SDS-C indexuje všechny pole od čísla 0 (nula) - všechna pole, tj. "sys[]", "ram[]", "text[]", začínají se svým obsahem od indexu nula.

Pozor však na číslování hardware vstupů a výstupů, ty jsou číslovány dle "elektrikářských" zvyklostí, to znamená že číslování začíná od čísla 1 (jednička) - toto ale nemá hlubší vliv na SDS-C.

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.


Důležité upozornění

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í "sys[]" hodnot).

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 "mění" pohled na to, co který bit znamená, viz text dále.

Příklad: Hodnota "sys[625]" reprezentuje "uplynulý čas od posledního zachyceného S0 impulsu na daném S0 vstupu". Tato hodnota je udržována uvnitř SDS a program SDS-C k ní má přístup. 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í "sys[625]" 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.

  skutečná binární hodnota         | 32-bit signed | 32-bit unsigned
  (32-bit)                         | SDS-C integer | (internal SDS)
 ----------------------------------+---------------+-----------------
  00000000000000000000000000000000 |             0 |               0
  00000000000000000000000000000001 |             1 |               1
  00000000000000001111111111111111 |         65535 |           65535
  01111111111111111111111111111111 |    2147483647 |      2147483647
  10000000000000000000000000000000 |   -2147483648 |      2147483648
  10000000000000000000000000000001 |   -2147483647 |      2147483649
  10000000000000001111111111111111 |   -2147418113 |      2147549183
  11111111111111111111111111111111 |            -1 |      4294967295
  11111111111111111111111111111110 |            -2 |      4294967294
  11111111111111111111111111111101 |            -3 |      4294967293

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á).

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 "zpět" 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é.

V tabulce jsou konkrétní "sys[]" položky, kterých se toto týká, označeny tímto symbolem: (!)


Použítí v SDS-C programu

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.

Příklad zápisu v programu: jaká je teplota na čidle 1 (celé stupně Celsia)?

teplota0_ve_stupnich_C = sys[310] / 100;

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:

if (sys[310] > sys[311]) { echo('Prvni cidlo je teplejsi nez druhe.'); };

Příklad zápisu v programu: jak zapnu relé RE1? (musíte vědět "co" "kam" zapsat):

sys[231] = 255; // v tomto okamžiku dojde k ovládnutí relé č. 1 (- viz index 231 dole v seznamu)

Můžete (od 03 verze SDS-C) použít i #define, příklad:

#define RELE1 sys[231]

#define TEPLOTA sys[310]

// ...
 
RELE1 = 255;
 
if (TEPLOTA > 3200) goto x;


Pole ram[]

Pole ram[] je samostatné nezávislé pole, dostupné pro SDS-C program od verze č. 03 (a výše).

Obsah pole ram[] je uložen samostatně v RAM paměti, a je při resetu zařízení ztracen.

Obsah pole ram[] se nekryje s dalšími proměnnými programu a tak dále (je to zcela samostatné paměťové pole).

Pole ram[] lze indexovat číslem nebo proměnnou. Příkladem:

hodnota = ram[10];

index = 23;
ram[index] = 15 * 2;

index = sys[1023];
ram[index] = 30;

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í.

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).

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.


Ukládání trvalých dat

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[].

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í.

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).

Více informací, způsob použití a důležité varování je uvedeno na stránce ohledně DataFlash.

Další možnost:
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).


Pole text[]

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).

Za tímto účelem je připraveno pole text[]. Detailní popis je zde.

SDS-C je omezený programovací jazyk z hlediska "práce s textem". Pokud potřebujete intenzivně s textem pracovat, použijte zařízení SDS které má FULL-C jazyk.

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).


Pole share[]

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 sdílené proměnné).

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.


Vyhrazené funkce

Seznam konkrétních zabudovaných funkcí naleznete na jiné stránce.


Jednotné proměnné (pole sys[]) pro všechny výrobky řady SDS

STAV SYSTÉMU

sys[0]   01 i R   "pair code" firmware (nastaven výrobcem napevno: identifikátor vázanosti firmware na hardware)
                   - lze využít pro rozeznání typu zařízení SDS, na kterém je spuštěn SDS-C program

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é)

sys[2]   01 s R   text SNMP-sysLocation, nastaveno ve webové administraci

sys[3]   01 i R   hodnota UpTime10 (doba běhu zařízení)
                   - počítá se od nuly (0) od každého zapnutí zařízení
                   - pouze 31 bitové počítadlo
                     (SDS si pro sebe interně počítá UpTime10 jako 32bit, nicméně
                      nejvyšší bit je odmaskován před předáním hodnoty do SDS-C programu)
                   - platné hodnoty: 0 až 2147483647 (včetně)
                   - po překročení 2147483647 (zde odpovídá up-time 248 dnů) začíná hodnota opět na nule
                   - jeden krok (zvýšení o jedničku) této hodnoty UpTime10 odpovídá právě 10 msec uplynulému času 

sys[4]   01 i R   hodnota LOCAL času (UNIX čas, v sekundách)
                   - jedná se o lokální (eventuálně posunutý) čas, synchronizovaný se NTP serverem
                   - je zde už předem započítán GMT offset sys[26] (ten lze nastavit ve webovém rozhraní)
                   - je zde aplikován automatický posun letního času (je-li to povoleno ve webovém rozhraní)
                   - poskytnuto je pouze 31 bitové číslo (bude platné až do 19. leden 2038 včetně, 
                     pak hodnota roluje na nulu - nejvyšší bit je odmaskován před předáním do SDS-C programu)
                   - platné hodnoty: 0 až 2147483647 (včetně)

sys[5]   01 i R   rozpad LOCAL času: den (1 až 31)
sys[6]   01 i R   rozpad LOCAL času: měsíc (1 až 12)
sys[7]   01 i R   rozpad LOCAL času: rok (2011 a dále)
sys[8]   01 i R   rozpad LOCAL času: hodina (0 až 23)
sys[9]   01 i R   rozpad LOCAL času: minuta (0 až 59)
sys[10]  01 i R   rozpad LOCAL času: sekunda (0 až 59)
sys[11]  01 i R   rozpad LOCAL času: číslo dne v týdnu - počet dní od Neděle (0 až 6)

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.

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).


Ethernet, Internet

sys[12]  01 i R   IP[0] adresa zařízení (nastaveno ve webové administraci)
sys[13]  01 i R   IP[1] adresa zařízení
sys[14]  01 i R   IP[2] adresa zařízení
sys[15]  01 i R   IP[3] adresa zařízení

sys[16]  01 i R   GW_IP[0] adresa brány (nastaveno ve webové administraci)
sys[17]  01 i R   GW_IP[1] adresa brány
sys[18]  01 i R   GW_IP[2] adresa brány
sys[19]  01 i R   GW_IP[3] adresa brány

sys[20]  01 i R   NETMASK[0] síťová maska (nastaveno ve webové administraci)
sys[21]  01 i R   NETMASK[1] síťová maska
sys[22]  01 i R   NETMASK[2] síťová maska
sys[23]  01 i R   NETMASK[3] síťová maska
sys[24]  01 i R   stav rozhraní Ethernet (je spuštěno?)
                   == 0 : komunikace přes Ethernet není k dispozici (odpojený kabel, vypnutá protistrana nebo switch, atd.)
                   != 0 : Ethernetová komunikace je funkční (LINK OK)

sys[25]  01 i R   rychlost připojení k síti Ethernet (hodnoty: 0, 10, 100)
                   == 0   : neznámá rychlost (není k dispozici Ethernet)
                   == 10  : 10 MBit per sec
                   == 100 : 100 MBit per sec
sys[26]  04 i RW  hodnota GMT offsetu pro NTP (nastaveno v administraci ve webovém rozhraní)
                   - platné hodnoty: -11 až 11 (včetně) (údaj v hodinách)
                   - zápis je možný, ale změněná hodnota (ze SDS-C) není uložena do pevné paměti 
                     (po resetu zařízení se vráti na poslední uloženou hodnotu)
sys[27]  06 i R   platnost přidělené IP adresy zařízení SDS
                   == 0 : zařízení SDS nemá přidělenou platnou IP adresu (typický důvod: čeká se na DHCP)
                   != 0 : zařízení SDS má přidělenou platnou IP adresu a může komunikovat přes Ethernet

sys[28]  06 i R   poslední okamžik kdy byla změněna IP adresa,
                  buď ručně z webového rozhraní (administrace) nebo DHCP serverem (je-li DHCP zapnuto)
                   - údaj odpovídá stavu UpTime10 (1 krok = 10 msec) v daný okamžik

sys[29]  06 i R   DHCP: stav (lze použít pro kontrolu správné funkce DHCP klienta v SDS)
                   == 0 : v klidu (nic se neprovádí, nebo DHCP je vypnuté)
                   == 1 : odesláno DHCP DISCOVER
                   == 2 : obdrženo DHCP OFFER
                   == 3 : odesláno DHCP REQUEST
                   == 4 : obdrženo DHCP ACK
                   == 5 : IP adresa je přidělena (BOUND)
                   == 6,7,8,9,10,11 : zpracování DHCP RENEW

sys[30]  06 i R   aktuální hodnota "DHCP Lease Time"
                   - hodnota je nastavena v okamžiku DHCP BOUND (při přidělení (nové) IP adresy)
                   - hodnota je každou 1 sec snížena o jednotku (když dojde na nulu, klient začne obnovovat IP adresu)
                   - údaj je uveden v jednotkách [sec]
sys[31]  04 i R   MAC[0] (celá MAC je nastavena ve webovém rozhraní)
sys[32]  04 i R   MAC[1] 
sys[33]  04 i R   MAC[2] 
sys[34]  04 i R   MAC[3] 
sys[35]  04 i R   MAC[4] 
sys[36]  04 i R   MAC[5] (vždy je vyplněno dolních 8 bitů)
sys[37]  06 i R   NTP Client Status (synchronizace času)
                   == 0 : nesynchronizováno
                   == 1 : úspěšně přijal paket od NTP Serveru
              W   zápis hodnoty 10 (přesně a pouze: 10) do tohoto indexu vyvolá nucený NTP dotaz 
                  (dotaz se odešle za 10sec od takovéhoto zápisu)

sys[38]  07 i R   čistý UTC čas - v sekundách (UNIX Epoch čas)
                   - není zde aplikován offset, ani automatika letního času
                   - přímá hodnota získaná z NTP serveru (tj. jeho odpověď), 
                     uvnitř SDS je sice udržována jako 32bit, 
                     ale do SDS-C programu je hodnota předána jen jako 31bit číslo (nejvyšší 32.bit je odmaskován).

sys[39]  07 i R   stav automatiky přepínání Letního Času
                   == 0 : automatika zakázána, lokální čas není ovlivněn
                   == 1 : automatika povolena, ale v současné době (podle NTP UTC času) je letní čas neaktivní (tzn. je "SEČ").
                   == 2 : automatika povolena, a v současné době (podle NTP UTC času) je letní čas aktivní (tzn. je "SELČ").
                          (tzn. do sys[4] je připočten nejen offset ze sys[26], ale teď také plus 1 hodina kvůli SELČ).
         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)
                   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í
                   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  

sys[40]  09 i R   stav RTC (záloha času - pouze SDS se záložní baterií)
                  zatím stále 0, tzn. nepoužito, další obsah se chystá (nový FW)

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í).

sys[41] až sys[44]  RESERVED vyhrazeno


Provozní údaje

sys[45]  06 i R   relativní čas v milisekundách, počítaný od zapnutí zařízení (tj. UpTime1)
                   - po resetu zařízení začíná vždy počítat od nuly
                   - každou milisekundu se zvýší o 1 (narozdíl od UpTime10);
                     tzn. toto je velmi podobná hodnota jako UpTime, ale je v jiných jednotkách!
                   - pro sys[45] je k dispozici 31 bitů,
                     takže po 2147483648 msec dojde k vynulování sys[45] a počítá se opět od nuly nahoru
                     (pozn.: SDS si interně udržuje hodnotu jako 32bitů, ale do SDS-C programu se předává jen 31bitů).
sys[46]  06 i R   "surová" (raw) hodnota teploty SoC chipu (není to přímo teplota v degC, ale speciální digitální hodnota),
                  význam hodnot závisí na typu konkrétního zařízení SDS. 
                  Je to dáno způsobem měření této teploty, a převod na stupně Celsia je jednoduchý, přes vzorec.

SDS MICRO (LM), MACRO (LM), UPS, IO6 (LM): 
 Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = ((5*(59-30*((3/1024)*sys[46])))/2) ]

SDS TTCPRO, MINI, MACRO-ST, MICRO-ST, IO6-ST: 
 Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = (((((sys[46]/4096)*3.3)-0.76)/0.0025)+25) ]

Teplota SoC je pouze orientační, a je měřena s přesností +/- 5 degC.

Rozhraní sériové komunikace

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.

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ě.

Poznámka: čtení z UART RX bufferů je k dispozci jen od verze SDS-C č. 04 (včetně) a výše. 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í.

Rozhraní COM1:

sys[48]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM1 prázdný. Možné hodnoty:
                   == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)
                   == 1 : RX buffer je prázdný (nebyl přijat znak od posledního vyprázdnění bufferu)

sys[49]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM1
                   - čtením tohoto sys[49] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici), 
                     takže si dejte pozor protože po vyjmutí už tento znak v bufferu samozřejmě není ! 
                     (Toto může způsobit nezkušenému programátorovi potíže). 
                     Proto je vhodnější čtení ze sys[49] provést vždy jednou do vlastní proměnné, 
                     a s tou pak dále dle libosti pracovat.
                  Možné hodnoty: 
                   == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)
                   == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)

Poznámka: UART-COM1 buffer je vymazán vždy tehdy, když se připojí TCP klient k převodníku Eth/UART - pozor!

sys[50]  02 i R   je připojen klient (Ethernet) k převodníku Eth/UART ?
                   == 0 : není připojen klient
                   != 0 : je připojen klient (přes TELNET port)
sys[51]  02 i R   rychlost [bps] rozhraní UART - COM1 (viz převodník Eth/UART)
sys[52]  02 i R   počet datových bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 5,6,7,8)
sys[53]  02 i R   počet stop bitů rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 1,2)
sys[54]  02 i R   nastavení paritního bitu rozhraní UART - COM1 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)

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í).

Rozhraní COM6:

sys[55]  04 i R   informace, je-li přijímací (RX) buffer rozhraní UART-COM6 prázdný. Možné hodnoty:
                   == 0 : v RX bufferu je jeden popř. více znaků, lze je přečíst (buffer není prázdný)
                   == 1 : RX buffer je prázdný (nebyl přijat znak od posledního vyprázdnění bufferu)

sys[56]  04 i R   čtení (vyjmutí) znaku z přijímacího (RX) bufferu rozhraní UART-COM6
                   - čtením tohoto sys[56] se vyjme právě jeden znak (je-li v bufferu nějaký k dispozici)
                  Možné hodnoty: 
                   == 0 až 255 : hodnota právě vyjmutého znaku z RX bufferu (znak přijatý UARTem)
                   == -1       : v bufferu není jakýkoliv znak k dispozici (prázdný buffer)
sys[57]  02 i R   rychlost [bps] rozhraní UART - COM6 
sys[58]  02 i R   počet datových bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 5,6,7,8,9)
sys[59]  02 i R   počet stop bitů rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 1,2)
sys[60]  02 i R   nastavení paritního bitu rozhraní UART - COM6 (platné hodnoty - podle typu SDS: 0,1,2,3,4,5)

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.


Generátor náhodných čísel

sys[61]  06 i R   generátor náhodných čísel
                   - při každém přečtení sys[61] je poskytnuto náhodné číslo


Výsledek převodu textu na číslo

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].

sys[62]  06 i RW  výsledek převodu provedeného funkcí atoi(text[index]);

Pro více informací se podívejte přímo na návod k této funkci.


Nastavení rychlosti provádění SDS-C programu

SDS-C program může ovlivnit rychlost svého vykonávání. Buď se každá instrukce provede právě přesně co 1 msec, nebo se dá tato (často žádoucí) vlastnost snadno vypnout.

sys[63]  04 i RW  vypnutí rychlostního omezení běhu programu, nastavte na:
                   == 0   : (výchozí hodnota po spuštění programu) - jeden celý příkaz se provede co 1 msec
                   == 128 : program je prováděn s co největší rychlostí (bez zarovnávacího 1 msec kroku) 
                            ( pozor ale na realizaci čekacích smyček, pak lze použít jen k tomu určené SDS-C funkce nebo sys[64] )

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).

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. 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 "čekání" pouze k tomu určené funkce, nebo případně sys[64].


Časování

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:

sys[64]  01 i RW  sekundový odpočítávač 
                   - zapište libovolné kladné číslo, a systém každou vteřinu toto číslo sníží o 1, 
                     až do nuly, kde v sys[64] zůstane nula (dokud tam zase něco nezapíšete)
                   - nejvyšší možná použitelná hodnota: (31-bitů) 2147483647 secs (včetně)

Samozřejmě lze využít i jiné způsoby, ale tento je k tomu explicitně určen.


OSI7 funkce

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).

Všechny funkce OSI7 poskytují průběžný stav své činnosti:

sys[65]  01 i R   status code - hlášení průběhu, úspěšnosti, nebo chyby OSI7 funkcí (DNS, HTTP-GET, email, ...)
                   - význam hodnot viz popis zde

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.

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.

sys[66]  01 i R   bajt IP[0] - vystup DNS resolveru, funkce dns_resolve("dotazovanadomena.cz");
sys[67]  01 i R   bajt IP[1] - vystup DNS resolveru, funkce dns_resolve("dotazovanadomena.cz");
sys[68]  01 i R   bajt IP[2] - vystup DNS resolveru, funkce dns_resolve("dotazovanadomena.cz");
sys[69]  01 i R   bajt IP[3] - vystup DNS resolveru, funkce dns_resolve("dotazovanadomena.cz");

Pro funkci DNS resolveru je potřeba provést konfiguraci (přes webové rozhraní).

sys[70]  01 i R   bajt DNS_R_IP[0] - adresa samotného DNS resolveru (DNS server)
sys[71]  01 i R   bajt DNS_R_IP[1] - adresa samotného DNS resolveru
sys[72]  01 i R   bajt DNS_R_IP[2] - adresa samotného DNS resolveru
sys[73]  01 i R   bajt DNS_R_IP[3] - adresa samotného DNS resolveru
sys[74]  01 s R   text, reserved (v této verzi nepoužito)
sys[75]  01 i R   návratový kód webového serveru pro HTTP GET (odpověď z webového serveru)
                   - nastaveno po dokončení práce funkce http_get()
                   - např. číslo 200 pro 'OK', 404 pro 'not found', a tak dále.

sys[76]  03 i RW  číslo portu který chcete aby HTTP klient použil (výchozí hodnota po startu je 80)
                   - pozn. hodnota tohoto sys[76] se přebere v okamžiku zavolání http_get,
                     pozdější zápisy mají vliv až zase v okamžiku dalšího zavolání http_get.

sys[77]  04 i RW  ukládat data přijatá z HTTP serveru po obdržení odpovědi na HTTP GET požadavek
                  do pole ram[]. Tato funkce je výhodná pro okamžité řízení SDS-C programu. 
                  Nastavte na:

                   == 0 : jakékoliv přijaté data jsou zahozena, 
                          neuloží se (nedojde ke změně obsahu ram[] nebo text[])

                   == 1 : prvních sys[78] bajtů odpovědi je vloženo do pole ram[] v rozsahu ram[1] až ram[sys[78]]
                          a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).
                          (tzn. původní obsah této oblasti pole ram[] je přepsán)
                          (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], 
                           bude zápis přerušen a přijatý 0x00 nebude uložen)

                   == 2 : prvních sys[78] bajtů odpovědi je vloženo do pole text[] v rozsahu text[0] až text[sys[78]]
                          a do ram[0] je uložena délka odpovědi (tj. hodnota: -1, 0, 1, 2, ... až sys[78]).
                          (tzn. původní obsah této oblasti pole text[] a položka ram[0] je přepsán)
                          (pokud bude obdržen znak 0x00 dříve, než se zapíše sys[78] bajtů do ram[], 
                           bude zápis přerušen a přijatý 0x00 nebude uložen)

                  Hodnota do ram[0] je vždy zapsaná, ať je sys[77] jakékoliv. Počítejte s tím ve svém programu !

sys[78]  04 i RW  počet bajtů, které CHCETE uložit do ram[] nebo text[] po přijetí HTTP GET odpovědi
                   - výchozí hodnota je 32 (tzn. uloží se 32 znaků + samostatně délka do ram[0])
                   - maximální hodnota je omezena velikostí pole ram[] nebo text[]
                   - pozor! pokud zapíšete 0, budou všechna data zahozena, 
                     ale i v takovém případě dojde k přepisu ram[0] (viz výše)
sys[79] až sys[80]  RESERVED vyhrazeno

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 "problémů" 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.

Pro funkci SMTP je potřeba provést konfiguraci (přes webové rozhraní):

sys[81]  01 i R   bajt SMTP_S_IP[0] - adresa SMTP serveru (je použita pro funkci smtp_send())
sys[82]  01 i R   bajt SMTP_S_IP[1] - adresa SMTP serveru
sys[83]  01 i R   bajt SMTP_S_IP[2] - adresa SMTP serveru
sys[84]  01 i R   bajt SMTP_S_IP[3] - adresa SMTP serveru
sys[85] až sys[88]  RESERVED vyhrazeno

Informace z (interní) ICMP PING funkcionality "IP Watchdog" (konfigurace a ovládání přes webové rozhraní SDS) (nemá souvislost s SDS-C funkcí "ping()" ) :

sys[89]  06 i R   IP-Watchdog: stav
                   == 0 : není v provozu (neaktivováno ve webovém rozhraní)
                   != 0 : v provozu (uživatel aktivoval IP-Watchdog ve webovém rozhraní)

sys[90]  06 i R   IP-Watchdog: poslední známé RTT
                   == 0 .. 65533 : hodnota RTT v msec
                   >= 65534      : hodnota není k dispozici (nebyl obdržen PING response)

sys[91]  06 i R   IP-Watchdog: stav výstupu
                   == 0 : výstup není aktivován
                   != 0 : výstup je aktivován (nebyl obdržen PING response podle zadaných požadavků)

Informace z (SDC-C) ICMP PING funkce - ping() :

sys[92]  04 i R   stav ICMP PING RESPONSE v okamžiku čtení tohoto sys[92] 
                   == 0 : klid (není odeslán paket, nečekám na odpověď), 
                          popř. byla zadána neplatná IP adresa do funkce ping() a proto se nic neodešle
                   == 1 : funkce ping() byla právě zavolána, 
                          takže se teprve chystá provést svou činnost, zatím se neví výsledek odesílání
                   == 2 : čeká se na odpověď od ARP 
                          (POZOR! Znamená to že místo ICMP PING REQUEST paketu byl odeslán ARP paket, 
                          protože v ARP tabulce nebyl příslušný záznam)
                   == 4 : poslán ECHO REQUEST, čekám na ECHO REPLY 
                         (požadovaný stav, funkce ping() funguje ok)
                   == 8 : právě obdržel ECHO REPLY 
                         (byla přijata odpověď od vzdáleného zařízení)

sys[93]  04 i R   PING SEQ number 
                   - hodnota je nastavena na -1 dokud není přijata odpověď ICMP PING RESPONSE 
                     na ICMP PING REQUEST odeslaný funkcí ping()

sys[94]  04 i R   Round Trip Time, v milisekundách
                   - dokud není přijata platná ICMP PING RESPONSE tak je zde hodnota 0xFFFF
                   - č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)

Pozn.: ICMP Quench (32bit) je sestaven z "identifier" (16bit) a z "sequence number". Pomocí sys[93] můžete nastavit číslo sekvence na libovolnou hodnotu, přičemž hodnota "identifier" je napevno nastavena na "0x0280" .


Funkce send_udp():

sys[95]  06 i R   výsledek posledního volání send_udp()
                  Hodnoty:
                   == 0 : nic neprovedeno
                          Hodnota 0 je nastavena po startu SDS-C programu
                   == 1 : právě bylo zahájeno odesílání paketu (provádí se)
                          nastaveno okamžitě po jakémkoliv zavolání send_udp().
                   == 2 : byl odeslán UDP paket, úspěšně
                          Hodnota 2 je nastavena až v okamžiku úspěšného skutečného odeslání UDP paketu
                   == 3 : nebyl odeslán UDP paket, protože byl místo toho odeslán ARP dotaz 
                          Hodnota 3 je nastavena, pokud není známá MAC pro zadanou IP 
                          a byl tedy místo požadovaného UDP paketu odeslán ARP dotaz
                   == 4 : zavolali jste funkci send_udp() dříve, 
                          než byla dokočena činnost předchozího požadavku 
                          (sledujte hodnotu sys[95] a správně ji vyhodnocujte, a nestane se vám to)
                   == 5 : byly zadány neplatné parametry (neplatná IP, nebo port, nebo index či délka dat)


Funkce snmp_send_trap():

sys[96]  06 i R   výsledek posledního volání snmp_send_trap()
                  Hodnoty:
                   == 0 : odesílání neprobíhá
                   == 1 : probíhá odesílání, výsledek ještě není znám
                   == 2 : odeslání se povedlo 
                   == 3 : odeslání se nepovedlo (neplatné parametry při zavolání funkce)
                   == 4 : odeslání se nepovedlo (není známý ARP záznam pro udanou host IP)
                   == 5 : odeslání se nepovedlo (právě pracuje (odesílá své data) některá jiná funkce, např. http_get)
sys[97]           RESERVED vyhrazeno


Zápis textu do pole, Porovnání textů

Položka sys[98] je využita více SDS-C funkcemi, přičemž všechny tyto funkce pracují s polem text[].

sys[98]     i R   společné využití viz (1) a (2)

         06 i R   (1) číslo indexu do pole text[] kam byla zapsána terminační 0x00,
                      tj. ukazatel kde byl aktuální konec zápisu do pole text[], 
                      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:
                       - kam byla zapsána terminační 0x00 funkcí sprintf()
                       - kam byla zapsána terminační 0x00 funkcí itoh() 
                       - kam byla zapsána terminační 0x00 funkcí itoa() 

         08 i R   (2) výsledek porovnání textů
                       - hodnota výsledku zavolání funkce textcmp()
                           X < 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v poli text[] než v porovnávaném řetězci
                           X == 0 : oba texty jsou identické
                           X > 0  : (texty jsou rozdílné): první nalezený nestejný znak má nižší vlastní hodnotu v porovnávaném řetězci než v poli text[]

Význam "nižší vlastní hodnoty": znak 'a' má nižší hodnotu než 'b', a to o 1; nebo např. '1' má nižší hodnotu než '4' a to o 3.

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[]).


Uživatelské pozice v pevné paměti

sys[99]  05 i RW  předávací proměnná pro čtení a zápis z/do paměti dataflash
sys[100] až sys[115]  
         01 i RW  data uložená do permanentní paměti = co se sem napíše zůstane i po vypnutí zařízení,
                  můžete si sem uložit co chcete (tj. 16x signed long délky 32bit),
                   - po speciálním systémovém resetu (RSTD) je vše nastaveno na 0xFFFFFFFF 
                   - pozor! minimalizujte množství zápisů, životnost této paměti není neomezená !
                   - zápis do těchto sys[] přímo ihned fyzicky zapíše do pevné paměti 
                   - čtení těchto sys[] způsobí přímé fyzické čtení pevné paměti 

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 nezálohované paměti RAM, do které se přistupuje pomocí pole ram[]).

Reserved

sys[116] až sys[139]  RESERVED vyhrazeno


Proměnné nastavitelné uživatelem z webového rozhraní

Pomocí "uživatelských proměnných" (někdy taky "sdílených proměnných") 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.

sys[140] až sys[149] 
         01 i RW  "uživatelské proměnné", které můžete měnit "z webu" (správně formulovaným HTTP GET dotazem)
                  (vždy 32-bit signed integer)
sys[150] 01 i RW  blokování přístupu k možnosti změny obsahu "uživatelských proměnných" z webu
                  Nastavení:
                   == 0 : stránka "control" je přístupná bez hesla, 
                   != 0 : pro přístup je nutno se přihlásit (uživatel je vyzván k příhlášení)

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).

Zápisem do sys[150] můžete nastavit bezpečnost přístupu k této webové stránce.

Adresa webové stránky je (IP je zde pro příklad): http://192.168.1.250/control (více informací zde).

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í.


Proměnné vstupů a výstupů pro všechny výrobky SDS

POZOR

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.

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í).

Pokračování výpisu:

sys[151] až sys[182]  
         01 i R   stav binárního vstupu OPTO1 až OPTO32 (optočlen)
                   - hodnota odpovídá fyzickému stavu vstupů (zda-li je nebo není přítomen signál na LED optočlenu)
                   - pozor, hodnota 0 skutečně znamená přítomnost signálu
                  Hodnoty:
                   == 0 : (nulová hodnota)             signál přítomen (napětí na LED = svítící LED v optočlenu)
                   != 0 : (libovolná nenulová hodnota) bez signálu (LED v optočlenu nesvítí)

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.

Důležité info:

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).

Pozor - "logika" optických vstupů je tedy na první pohled "obrácená" (avšak dává to přesný smysl). Jen je to potřeba vědět při psaní SDS-C programu.


Stav SDS-C programu

Informace o verzi firmware modulu SDS (vhodné např. pro kontrolu, že uživatel používá nejnovější firmware, tak jak má).

sys[183] 08 i RW  verze nainstalovaného firmware v SDS modulu
                  (hex: 0x00DDMMYY, nebo jen 0x00000000 u starších FW)

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.

Informace o způsobu, jakým byl aktuální běh SDS-C programu spuštěn:

sys[184] 08 i RW  způsob spuštění SDS-C programu
                  == 0 : bez informace
                  == 1 : standardní spuštění SDS-C programu po běžném startu zařízení SDS
                  == 2 : program SDS-C byl (znovu) spuštěn na základě restartu od watchdogu (byl timeout)
                  == 4 : program SDS-C byl čerstvě nahrán z EXE aplikace

Stav SDS-C watchdogu:

sys[185] 08 i R   hodnota odpočítávání SDS-C watchdogu v msec
                  == -1 : wdg není aktivní
                  ==  0 : odpočet vypršel, dojde k resetu SDS-C programu
                  1..2147482000 : aktuální hodnota odpočtu (snižuje se o 1 každou milisekundu)


Pulse-Width Modulation výstupy

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).

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. 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). Alternativně lze zápis do sys[192] nahradit zápisem do sys[193], toto lze kombinovat. 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). 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]).

Různé typy SDS mají jiný způsob obsluhy PWM generátoru - pozor !

Pozor, pro tyto typy SDS:

SDS UPS, SDS IO6 (LM), SDS IO6-ST a SDS TTCPRO 

Tyto výrobky nemají PWM výstup (zápis do příslušných sys[] zde nemá význam).


Podle typu SDS:

SDS MICRO (LM) a SDS MACRO (LM) - pouze jeden PWM výstup (PWM1)

sys[191] 01 i RW  "Fm" = frekvence PWM1 výstupu [Hz]
                   - do SDS-C č. 03: specifický omezený rozsah (souvisí se starým firmware)(bylo v rozsahu: 2 až 10000000).
                   - pozn. od SDS-C č. 04: lze nastavit hodnotu od 24 (24Hz) do 49999998 (49.999998Mhz)

sys[192] 01 i RW  poměr nastavení "pulse-width" PWM1 výstupu (výchozí způsob nastavování PWM generátoru)
                   - do SDS-C č. 03: specifický omezený rozsah (souvisí se starým firmware)
                   - od SDS-C č. 04: lze nastavit hodnotu od 0 do "Fm" (např. "Fm / 2" představuje PWM signál 1:1).

sys[193] 06 i RW  ruční přímý zápis do registru PWM1 generátoru 
                   - tzn. není předzpracováno jako sys[192], tzn. jedná se o alternativu k sys[192]
                   - tato hodnota není aktualizována vůči sys[192], ani není archivována
                   - rozsah: 0 až "Fm" (tj. 0 až sys[191]).

Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupu osciloskopem.

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.


Další typy SDS - všimněte si rozdílu významu jednotlivých indexů vůči vůči tabulce výše.

SDS MINI, SDS MICRO-ST - pouze jeden PWM výstup (PWM1)
SDS MACRO-ST - čtyři PWM výstupy (zde: první skupina PWM1 a PWM2, druhá skupina je popsána dále)

sys[191] 07 i RW  "Fm" = (společná) frekvence pro PWM1 a PWM2 výstupy [Hz]
                   - 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])
                   - zápis hodnoty 0 vypne PWM1 a PWM2 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu

sys[192] 07 i RW  duty-cycle PWM1 výstupu v procentech (výchozí způsob nastavování PWM generátoru)
                   - povolené rozmezí 0 až 100 (0% až 100%)
                   - před zápisem do sys[192] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])
                   - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[192] ignorovány (nejsou zapamatovány)

sys[193] 07 i  W  duty-cycle PWM1 výstupu v mikrosekundách (druhý možný způsob nastavování PWM generátoru)
                   - pouze pro zápis, pozor !
                   - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)
                   - před zápisem do sys[193] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])
                   - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[193] ignorovány (nejsou zapamatovány)
                   - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru

sys[194] 07 i RW  duty-cycle PWM2 v procentech (výchozí způsob nastavování PWM generátoru)
                   - povolené rozmezí 0 až 100 (0% až 100%)
                   - před zápisem do sys[194] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])
                   - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[194] ignorovány (nejsou zapamatovány)

sys[195] 07 i  W  duty-cycle PWM2 výstupu v mikrosekundách
                   - pouze pro zápis, pozor !
                   - povolené rozmezí 0 až X (kde X závisí na sys[191] a vypočte se jako: X = 1000000 / sys[191]; - pozor !)
                   - před zápisem do sys[195] musí být nastavena frekvence generátoru (nenulový zápis do sys[191])
                   - pokud je aktuální hodnota sys[191] == 0 (nula), tak jsou všechny zápisy do sys[195] ignorovány (nejsou zapamatovány)
                   - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru
SDS MACRO-ST - čtyři PWM výstupy (zde druhá skupina: PWM3 a PWM4)

sys[186] 09 i RW  "Fm" = (společná) frekvence pro PWM3 a PWM4 výstupy [Hz]
                   - 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])
                   - zápis hodnoty 0 vypne PWM3 a PWM4 výstupy (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu

sys[187] 09 i RW  duty-cycle PWM3 v procentech
                   - povolené rozmezí 0 až 100 (0% až 100%)
                   - před zápisem do sys[187] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])
                   - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[187] ignorovány (nejsou zapamatovány)
sys[188] 09 i  W  duty-cycle PWM3 výstupu v mikrosekundách
                   - pouze pro zápis, pozor !
                   - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)
                   - před zápisem do sys[188] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])
                   - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[188] ignorovány (nejsou zapamatovány)
                   - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru

sys[189] 09 i RW  duty-cycle PWM4 v procentech
                   - povolené rozmezí 0 až 100 (0% až 100%)
                   - před zápisem do sys[189] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])
                   - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[189] ignorovány (nejsou zapamatovány)

sys[190] 09 i  W  duty-cycle PWM4 výstupu v mikrosekundách
                   - pouze pro zápis, pozor !
                   - povolené rozmezí 0 až X (kde X závisí na sys[186] a vypočte se jako: X = 1000000 / sys[186]; - pozor !)
                   - před zápisem do sys[190] musí být nastavena frekvence generátoru (nenulový zápis do sys[186])
                   - pokud je aktuální hodnota sys[186] == 0 (nula), tak jsou všechny zápisy do sys[190] ignorovány (nejsou zapamatovány)
                   - POZOR čtení nedává hodnotu v mikrosekundách, ale přímo hodnotu z registru generátoru

Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupů osciloskopem.


Ovládání výstupů - Relé

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é.

sys[196] až sys[228]   
         01 i RW  informace, kdo ovládá RE1RE32
                   - lze nastavit i z webového rozhraní
                  Hodnoty:
                   == 0 : ovládáno z webového rozhraní (ruční řízení - trvale zapnuto, trvale vypnuto)
                   == 2 : ovládáno z SDS-C programu (zápis do sys[], je ignorováno nastavení na webu)
                   == 4 : ovládáno z IP Watchdogu (interní IP watchdog, nastavuje se přes web)
sys[229] až sys[230]  RESERVED vyhrazeno
sys[231] až sys[262]   
         01 i RW  stav výstupu RE1 až RE32 (= zápis do tohoto sys[] přímo ovládá relé)
                  Hodnoty:
                   == 0 : relé není aktivní 
                          (cívka relé bez proudu, MICRO-LM: mosfet není sepnut)
                   != 0 : relé je aktivní 
                          (cívka relé pod proudem, MICRO-LM: mosfet je sepnut = výstup REx je spojen na GND)
sys[263] až sys[265]  RESERVED vyhrazeno
sys[266] až sys[298]   
         01 s R   uživatelský textový název pro RE1RE32 
                   - nastaveno ve webovém rozhraní
sys[264] až sys[300]  RESERVED vyhrazeno


Ovládání PDx

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.

Stav vstupu (je-li PDx jako vstup) nebo výstupu (je-li PDx jako výstup):

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)
                  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)
                  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)
                  SDS MINI: bit0 = stav i/o pinu TOPB, bit1 = stav padu PD1, ostatní bity (2..7) nepoužity
                  SDS UPS: nepoužito
                  SDS IO6: nepoužito
                  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
                  SDS IO6-ST: nepoužito
                  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

Řízení směru pro jednotlivé PDx resp. TOPB:

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)
                  SDS MICRO LM DIN a SDS MACRO LM: pozor, D0 je vždy výstup (nastavení je napevno, nelze změnit)
                  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)
                  SDS MINI: bit0 = směr i/o pinu TOPB, bit1 = směr i/o padu PD1, ostatní bity (2..7) nepoužity
                  SDS UPS: nepoužito
                  SDS IO6: nepoužito
                  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
                  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

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í.

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.

MICRO-ST: výstup PD0 je zapojen formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).

MACRO-ST: výstupy PD0 a PD1 jsou zapojeny formou FET spínače (log0 = HiZ = rozepnuto) (log1 = ACT = sepnuto na GND).

Nezapomeňte vždy ve svém programu správně nastavit hodnoty do sys[302] (toto je častá chyba když se to zapomene).

sys[303] až sys[309]  RESERVED vyhrazeno

Tlačítka na desce display pro SDS-MACRO-ST

Č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).

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.


Vstupy - teploměry na externí sběrnici 1-Wire®

Č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.

sys[310] až sys[341]   
         01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire® sběrnici

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).

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.

sys[342] až [345]  RESERVED vyhrazeno
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)
sys[347] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici B

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)
sys[349] 01 i R   počet všech detekovaných (připojených) čidel teploty na sběrnici A
sys[350] až sys[381]   
         01 i R   čidlo 1 až 32 - aktuální stav/chyba čidla v okamžiku čtení tohoto sys[]
                   == 0  : default, čidlo neexistuje, nic nevim (stav ihned po zapnutí, popř. trvale pro prázdnou pozici)
                   == 2  : vše ok, komunikuje, odpovidá, právě byl získán výsledek
                   == 4  : ví se jen že existuje (byl získán ROMCODE) (obvykle dočasný stav po spuštění zařízení)
                   == 8  : začal další převod, čidlo je OK, komunikuje (správný stav)
                   == 16 : nepovedlo se začít nový převod, CHYBA (obvykle fyzický problém se sběrnicí)
                   == 32 : bylo přijato neplatné CRC, chyba (obvykle fyzický problém se sběrnicí)
sys[382] až [389]  RESERVED vyhrazeno
sys[391] až sys[422]  
         01 s R   uživatelský textový název pro čidlo 1 až 32 (nastaveno ve webovém rozhraní)

Reserved

sys[423] až sys[430]  RESERVED vyhrazeno


Vstupy: analogové vstupy pro měření napětí

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.

sys[431] 01 i R   RAW hodnota A/D převodu ze vstupu AD1
sys[432] 01 i R   RAW hodnota A/D převodu ze vstupu AD2
sys[433] 01 i R   RAW hodnota A/D převodu ze vstupu AD3
sys[434] 01 i R   RAW hodnota A/D převodu ze vstupu AD4

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.

Rozsah hodnoty RAW je:

  • SDS-MICRO-LM, SDS-MACRO-LM, SDS-UPS-ONEDPS: 0..1023 (10bit rozlišení)
  • SDS-MINI a všechny varianty SDS ST: 0..4095 (12bit rozlišení)

Všechny převodní konstanty A/D, nastavené ve webovém rozhraní (viz admin stránka):

sys[435] 01 i R   Offset pro A/D 1  [jen pro informaci, dále už nepoužít - viz pozn.]
sys[436] 01 i R   Div pro A/D 1
sys[437] 01 s R   textový název A/D 1
sys[438] 01 s R   jednotka A/D 1
sys[439] 01 i R   Offset pro A/D 2  [jen pro informaci, dále už nepoužít - viz pozn.]
sys[440] 01 i R   Div pro A/D 2
sys[441] 01 s R   textový název A/D 2
sys[442] 01 s R   jednotka A/D 2
sys[443] 01 i R   Offset pro A/D 3  [jen pro informaci, dále už nepoužít - viz pozn.]
sys[444] 01 i R   Div pro A/D 3
sys[445] 01 s R   textový název A/D 3
sys[446] 01 s R   jednotka A/D 3
sys[447] 01 i R   Offset pro A/D 4  [jen pro informaci, dále už nepoužít - viz pozn.]
sys[448] 01 i R   Div pro A/D 4
sys[449] 01 s R   textový název A/D 4
sys[450] 01 s R   jednotka A/D 4

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) ! 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 "Div".

Poznámka: zařízení SDS-MINI (a další z řady SDS ST) už mohou mít text v položce "jednotka A/D x" delší než jeden znak (na rozdíl od původního SDS-MICRO-LM atd., kde to bylo omezeno na jeden jediný znak).

Reserved

sys[451] až sys[458]  RESERVED vyhrazeno


Proměnné pro S0 impulsní vstup

sys[459] 01 i RW  stav tarifu 
                   == 0 : T0 (vysoký tarif)
                   == 1 : T1 (nízký tarif)
sys[460] až sys[492]  
         06 i RW  konfigurace - uživatelem nastavený (webové rozhraní) poměr MTD, pro vstup S0 [1] až [32],
                                je-li MTD pro tento vstup použit (pokud není použit (přímé měření), má zde být 1 )
                   - příklad: pro MTD s poměrem 300A:5A je zapsaná hodnota 60
                   - pozor, nezapočítávejte vliv MTD do hodnoty imp./1kWh
                   - pozor, některé elektroměry mají MTD už započítané do vlastní impulsní konstanty, 
                            pak sem v takovém případě nastavte číslo 1
                   - platné hodnoty: 1 až 65280 (včetně)

sys[493] až sys[525]  
         01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T0
                   - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)
                         ale SDS-C čte sys[] jako 32-bit signed hodnoty;
                         při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).

sys[526] až sys[558]  
         01 i RW  hodnoty impulsních akumulátorů (počítadel) pro vstup S0 [1] až [32] pro tarif T1
                   - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)
                         ale SDS-C čte sys[] jako 32-bit signed hodnoty;
                         při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed).

sys[559] až sys[591]  
         01 i RW  konfigurace - uživatelem nastavené přepočtové konstanty S0: počet imp./1kWh (z webového rozhraní)
                   - pozor, tato hodnota platí pro samotný elektroměr, není to hodnota ve které je započítán vliv MTD
                   - pozn. v případě, že měřícím prvkem není elektroměr ale jiný přístroj, bude zde odpovídající
                     jiná konfigurační hodnota (např. vodoměr: počet imp./m^3).

sys[592] až sys[624]  
         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)
                   - měřeno v msec
                   - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)
                         ale SDS-C čte sys[] jako 32-bit signed hodnoty;
                         při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).

sys[625] až sys[657]  
         01 i R   změřený čas od úplně posledního impulsu zachyceného na S0 vstupu, tzn. "doba bez impulsu" nebo také "doba od posledního impulsu"
                   - měřeno v msec
                   - (!) pozor SDS interně drží počítadla jako 32-bit unsigned hodnoty (0 až 4294967295)
                         ale SDS-C čte sys[] jako 32-bit signed hodnoty;
                         při čtení tedy dostanete stejné hodnoty 32 bitů, ale reprezentace čísla bude jiná (signed - viz vysvětlení nahoře).

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.

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.

poznámka: "Poměr MTD" 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 "druhý dělitel" 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é.

sys[658] až sys[670]  reserved for future use

poznámka: další sys[] indexy pro S0 vstupy jsou uvedeny ještě dále v tomto celém seznamu (dole na stránce).


Speciální vstupy a výstupy

Toto je funkce dostupná jen na omezeném rozsahu výrobků SDS.

Pouze pro SDS MICRO (LM) LIGHT:

sys[671] 02 i W   zápis na pin M4 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)
sys[672] 02 i W   zápis na pin M5 (pouze SDS MICRO LIGHT s EEPROM, všechny ostatní výrobky toto nemají)
sys[673] 02 i W   zápis na pin B1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)
sys[674] 02 i W   zápis na pin A1 (SDS MICRO LIGHT, LIGHT2, SDS MICRO DIN)

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ší.

SDS MICRO LIGHT s pamětí EEPROM: k dispozici jsou všechny čtyři výstupy.

SDS MICRO LIGHT s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).

SDS MICRO LIGHT 2 s pamětí DATAFLASH: k dispozici jsou jen dva výstupy (A1, B1).

SDS MICRO DIN: k dispozici jsou jen dva výstupy (A1, B1).

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.

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).

Pouze pro SDS MACRO ST:

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).

sys[671] 02 i R   čtení stavu TL1
sys[672] 02 i R   čtení stavu TL2

Pájecí plošky CFG:

Zkratovací CFG plošky jsou k dispozici jen pro SDS TTCPRO. Vhodné pro pevnou konfiguraci uživatelem.

V současné době není k dispozici firmware, které přenáší hodnotu z pájecích plošek (CFG1, CFG2) do sys[]. 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). Takový firmware se teprve chystá (SDS TTCPRO).

sys[675] 07 i R   stav plošky CFG1 (zkratována = je zde 0)
sys[676] 07 i R   stav plošky CFG2 (zkratována = je zde 0)


Speciální proměnné pro SDS-UPS

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 .

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í.

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).

sys[700] 02 i R   reserved
sys[701] 02 i R   reserved
sys[702] 02 i R   reserved
sys[703] 02 i R   reserved

Přepínač algoritmů:

sys[704] 02 i RW  řízení nabíjení - hodnoty které lze zapsat:
                   == 0   : nabíjení je ovládáno pomocí firmware (výchozí chování výrobku)
                   == 345 : pouze nabíjení (a ne jiné funkce) jsou řízeny programem SDS-C (= chování programujete vy)
                   == 824 : kompletní řízení (= volba funkce, nabíjení) je řízeno programem SDS-C

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.

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.

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.

sys[705] až sys[731]  reserved

Pro realizaci vlastního nabíjecího algoritmu potřebujete zpracovávat všechny vstupy a důsledně nastavovat všechy výstupy.

Pokud váš program pouze sleduje činnost původního nabíjecího algoritmu, pak může samozřejmě všechny sys[] jen číst.

Vstupy a konfigurace:

sys[732] 02 i R   surová hodnota z A/D převodu - hodnota 2.5V vstupu - odpovídá hodnotě proudu 0.0A
sys[733] 02 i R   surová hodnota z A/D převodu - hodnota proudu do-z akumulátoru
sys[734] 02 i R   surová hodnota z A/D převodu - hodnota proudu z primárního vstupu
sys[735] 02 i R   surová hodnota z A/D převodu - hodnota napětí akumulátoru
sys[736] 02 i R   surová hodnota z A/D převodu - hodnota napětí primárního vstupu

Rozsah surových hodnot z A/D převodu je 0 až 4095. Lineárně to odpovídá příslušné měřené hodnotě. Měření napětí má 0 na 0V a maximální hodnot (4095) na maximu rozsahu. 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.).

sys[737] až sys[739]  reserved

Následuje konfigurace provedená uživatelem ve webovém rozhraní. 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á.

sys[740] 02 i R   primary voltage to say target is ok (pri_pvts)
sys[741] 02 i R   primary zadany odpocet v msec (pri_pvat)
sys[742] 02 i R   primary voltage to allow charging (at what voltage to allow chargin) (pri_fchg)
sys[743] 02 i R   accu disconnect voltage level (at what voltage to disconnect accu) (aku_avdv)
sys[744] 02 i R   accu target voltage when charging (when to switch to CV) (aku_avcd)
sys[745] 02 i R   accu target current when charging (constant current when in CC) (aku_accc)
sys[746] 02 i R   target charging voltage (final voltage on accu when fully charged)
sys[747] 02 i R   flag: do not answer ping when primary gone (pri_ping)
sys[748] 02 i R   flag: do not switch accu off (aku_dach)

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.

sys[749] až sys[760]  reserved

Výstupy:

Tyto všechny výstupy musíte správně ovládat po celou dobu, co bude zařízení SDS UPS zapnuto !


sys[761] 02 i RW  ovládání vypínání nabíječe
                   == 0 : nabíječ v provozu (zapnuto = nabíjí se, regulujte jiným sys[])
                   != 0 : nabíječ mimo provoz (vypnuto = nenabíjí se)

sys[762] 02 i RW  ovládání posunu rozsahu regulace nabíječe 
                   == 0 : bez zásahu do zpětné vazby (původní regulační rozsah)
                   != 0 : zásah do zpětné vazby (posun rozsahu)
                          (vhodné pro skokové zvýšení výstupního napětí nabíječe, 
                           když už nereaguje v původním rozsahu)

sys[763] 02 i RW  ovládání odpojovače baterie 
                   == 0 : spínač vypnutý (baterie odpojena od zátěže)
                   != 0 : spínač sepnutý (baterie připojena)

sys[764] 02 i RW  indikační LED - nabíjení akumulátoru
                   == 0 : LED svítí (informace: akumulátor je nabíjen)
                   != 0 : LED nesvítí (informace: akumulátor není nabíjen)

sys[765] 02 i RW  indikační LED - výpadek primárního vstupu
                   == 0 : LED svítí (informace: napětí primárního vstupu pod dolním limitem)
                   != 0 : LED nesvítí (informace: primární vstup má napětí vyšší než je dolní limit)

Řízení nabíjení: Je potřeba správně regulovat pomocí následujícího výstupu:

sys[766] 02 i RW  přímé řízení nabíjecího bloku (výstup vaší regulace sem - hodnota řídí nabíječ)
                   - minimální hodnota = 1
                   - maximální hodnota = 2497
sys[767] až sys[769]  RESERVED vyhrazeno

Následující údaje jsou určeny pro zobrazování na webovém rozhraní:

sys[770] 02 i RW  provozní režim: vždy jedno z UPS_PROVOZ_xxx

sys[771] 02 i RW  nabíjecí režim: vždy jedno z UPS_NABREZIM_xxx

sys[772] 02 i RW  výsledek odhadu stavu baterie: vždy jedno z UPS_BATERIE_ODHAD_xxx

Konstanty pro zápis (je to potřeba dodržet, protože se to přímo zobrazuje na webovém rozhraní):

UPS_PROVOZ_START            0
UPS_PROVOZ_PRIOK            1
UPS_PROVOZ_PRIOK_CHARGING   2
UPS_PROVOZ_ONLY_BATT        4
UPS_PROVOZ_NO_BATT          8

UPS_NABREZIM_CC             0
UPS_NABREZIM_CV             2
UPS_NABREZIM_PAUZA          4
UPS_NABREZIM_URCENI_REZIMU  8

UPS_BATERIE_ODHAD_NEZNAM            0
UPS_BATERIE_ODHAD_MOC_NIZKE_NAPETI  1
UPS_BATERIE_ODHAD_OK_NABIJIM        2
UPS_BATERIE_ODHAD_PLNE_NABITO       4


Výsledky z 1-Wire sensoru vlhkosti (T/RH) SDS-1W-T-RH

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. SDS interně provádí výpočet relativní vlhkosti (RH) pomocí kompenzační rovnice, určené výrobcem sensoru vlhkosti.

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.


Změřená teplota je uložena na standardních indexech:

sys[310] až sys[341]   
         01 i R   hodnota údaje (teplota) z konkrétního čidla na 1-Wire® sběrnici, hodnota v násobku 0.01 degC

Dále jsou k dispozici surové hodnoty, nutné pro výpočet hodnoty RH (Relative Humidity):

sys[800] až sys[831]   
         08 i R   hodnota údaje (napětí Vad = výstupu čidla RH) z konkrétního čidla na 1-Wire® sběrnici, hodnota v násobku 0.01 V
sys[832] až sys[863]   
         08 i R   hodnota údaje (napětí Vdd = napájení čidla RH) z konkrétního čidla na 1-Wire® sběrnici, hodnota v násobku 0.01 V

SDS provádí přepočet na údaj RH v procentech (0 až 100):

sys[864] až sys[895]   
         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).

Rezerva (zatím nepoužito):

sys[896] až sys[899]  RESERVED vyhrazeno


Doplňující informace pro 1-Wire zařízení

1-Wire sběrnice u zařízení SDS umožňuje komunikaci s celou řadů 1-W chipů: 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).


1-Wire chipy interně zpracovávané SDS

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.

Poznámka: Pro změřené hodnoty z 1-W čidel teplot, jsou k dispozici tyto indexy: sys[310]sys[430], a sys[900]sys[931].

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.

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ů. Jednotlivé platné ROM CODE jsou v sys[] uloženy za sebou, viz výpis:

sys[900] 06 s RW  ROM CODE pro první chip na [A] sběrnici 1-Wire
                   - formát textu "0011223344556677" (8x HEX kód, bez uvozovek)

sys[901] 06 s R   ROM CODE pro druhý chip na [A] sběrnici 1-Wire
                   - formát textu "0011223344556677" (8x HEX kód, bez uvozovek)

A tak dále až

sys[915] 06 s R   ROM CODE pro šestnáctý chip na [A] sběrnici 1-Wire
                   - formát textu "0011223344556677" (8x HEX kód, bez uvozovek)

Následuje sběrnice [B], je-li přítomná v daném zařízení (dostupné pouze pro SDS-MACRO):

sys[916] 06 s R   ROM CODE pro první chip na [B] sběrnici 1-Wire
                   - formát textu "0011223344556677" (8x HEX kód, bez uvozovek)

A tak dále . . . až

sys[931] 06 s R   ROM CODE pro šestnáctý chip na [B] sběrnici 1-Wire
                   - formát textu "0011223344556677" (8x HEX kód, bez uvozovek)

Pozor: pokud sběrnice [B] v zařízení není, tak sys[916] až sys[931] vrátí znak '-'.

Tak jak jsou jednotlivé ROM CODE viditelné ve webové administraci, tak jsou tedy dostupné i přes sys[] položky.

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.

sys[931] až sys[939]  reserved


Ostatní 1-Wire chipy

Pro ostatní 1-W chipy, které SDS "nezná" (tzn. nekomunikuje s nimi, jen je umí na sběrnici vyhledat), jsou jejich ROM CODE odděleny do samostatných sys[] položek.

Čtení ostatních 1-W chipů se spouští v rámci SDS-C programu, který musí zavolat příslušnou SDS-C funkci. 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. 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[], nebo bude nastaven chybový kód.

Pozor, k SDS lze připojit více různých "ostatních" chipů, ale zdejší funkce najde jenom ten první z nich a ostatní už ignoruje. 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).

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.

Obecný stav sběrnic:

sys[940] 06 i R   Stav 1-W sběrnice [A] pro rescan ostatních 1-W chipů
sys[941] 06 i R   Stav 1-W sběrnice [B] pro rescan ostatních 1-W chipů
:
                   == 0  : ještě nebylo provedeno jediné/jakékoliv čtení ostatních chipů na 1-W sběrnici

                   == 1  : došlo k chybě: nebylo dokončeno předchozí čtení sběrnice
                           (nesmíte požadovat nové čtení, dokud se plně neprovedlo to poslední)

                   == 2  : probíhá čtení ROM CODE z připojeného ostatního chipu
                           (dokud se toto nedokončí, nelze provést opětovný požadavek na další rescan/čtení)

                   == 4  : nebyl nalezen jakýkoliv ostatní chip (s odpovídajícím Family Code byte)

                   == 8  : byl přečten ROM CODE z připojeného ostatního chipu
                           (už lze také požádat o další nové čtení 1-W sběrnice)

                   == 16 : došlo k chybě: nepovedlo se přečíst data po 1-W sběrnici 
                           (zkuste provést rescan/čtení znovu)
sys[942] až sys[949]  reserved

Pro sběrnici [A]:

sys[950] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire
                  (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).
                   - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),
                     a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze sys[3]
sys[951] 06 s R   celý text ROM CODE:
                   - ROM CODE pro chip na [A] sběrnici 1-Wire
                   - formát textu "0011223344556677" (8x HEX kód, bez uvozovek)

sys[952] až sys[959]: bajtový rozpad ROM CODE pro chip na [A] sběrnici 1-Wire
:
sys[952] 06 i R   romcode[0] (1-W: ID family-code byte)
sys[953] 06 i R   romcode[1] (1-W: serial code)
sys[954] 06 i R   romcode[2] (1-W: serial code)
sys[955] 06 i R   romcode[3] (1-W: serial code)
sys[956] 06 i R   romcode[4] (1-W: serial code)
sys[957] 06 i R   romcode[5] (1-W: serial code)
sys[958] 06 i R   romcode[6] (1-W: serial code)
sys[959] 06 i R   romcode[7] (1-W: CRC byte)
sys[960] až sys[969]  reserved

Pro sběrnici [B]:

sys[970] 06 i R   časová značka posledního okamžiku komunikace s chipem na [B] sběrnici 1-Wire
                  (nebo: 0 (nula) = pokud ještě nebyla komunikace provedena).
                   - v okamžiku každého nového pokusu o čtení je nastavena na 0 (nula),
                     a pak v okamžiku přečtení ROM CODE, je zde hodnota převzatá ze sys[3]
sys[971] 06 s R   celý text ROM CODE:
                   - ROM CODE pro chip na [B] sběrnici 1-Wire
                   - formát textu "0011223344556677" (8x HEX kód, bez uvozovek)

sys[972] až sys[979]: bajtový rozpad ROM CODE pro chip na [B] sběrnici 1-Wire
:
sys[972] 06 i R   romcode[0] (1-W: ID family-code byte)
sys[973] 06 i R   romcode[1] (1-W: serial code)
sys[974] 06 i R   romcode[2] (1-W: serial code)
sys[975] 06 i R   romcode[3] (1-W: serial code)
sys[976] 06 i R   romcode[4] (1-W: serial code)
sys[977] 06 i R   romcode[5] (1-W: serial code)
sys[978] 06 i R   romcode[6] (1-W: serial code)
sys[979] 06 i R   romcode[7] (1-W: CRC byte)
sys[980] až sys[989]  reserved

Všimněte si, že SDS v tuto chvíli umožňuje pouze rescan 1-W sběrnice, kdy hledá pouze jeden připojený "ostatní 1-W chip" (ten první na který narazí, ten ohlásí, a nehledá dále).

Pozor:

Pokud je takových chipů připojeno na sběrnici více, popř. pokud jsou smíchány s "teploměrnými" chipy, 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ů).


Reserved

sys[990] až sys[1023]   reserved


Speciální položky jen pro SDS-MACRO-LM a SDS-MACRO-ST

Přímý přístup do LCD Frame Buffer paměti:

sys[1024] až sys[1551]   LCD buffer (dostupné jen pro SDS MACRO LM a SDS MACRO ST !)
         01 i RW  každý index v rámci tohoto rozsahu sys[] lze zapisovat i číst
                  - jedná se o pole 528 bajtů (4 řádky x 132 sloupců)
                  - každý bajt pole obsluhuje přesně danou oblast (několika pixelů) LCD displaye
                  - platné hodnoty pro každý index : 0 až 255 včetně  - zapisujte a čtěte jen hodnoty 0 až 255 (včetně)

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).

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 !

Č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).

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.

Pozor SDS-MACRO-ST

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.

Vyhrazená oblast

Zbytek:

sys[1552] až sys[1663]   reserved


Bateriově Zálohovaná Paměť

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!

Pozor! Tato funkce vyžaduje FW od 18.8.2017 a nebo novější.

sys[1664] až sys[1791]   (pouze pro SDS TTCPRO a SDS MINI a SDS MICRO-ST a SDS MACRO-ST a SDS IO6-ST)
         07 i RW  sada 128 samostatných pozic v zálohované paměti RAM, pro ukládání libovolných hodnot
                   - každý index má k dispozici 32 bitů (tj. celý signed integer)
                   - čtení a zápis je rychlé (je to v RAM, takže se nemusí čekat jako při práci s DF)
                   - lze použít nezávisle (lze přístupovat ke kterékoliv položce "na přeskáčku")

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).

(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).


Další informace ze S0 vstupů

Následující položky jsou k dispozici pro všechny SDS První Produktové Řady.

Od verze SDS-C č. 07 jsou přidány tyto systémové proměnné:

sys[1792] až sys[1823]  
         07 i R   cena za jednotku v režimu T0
                   - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)

sys[1824] až sys[1855]  
         07 i R   cena za jednotku v režimu T1
                   - původní hodnota je poskytnuta jako násobek 1000 (např. nastavená hodnota 3.40 je zde předána jako číslo 3400)

sys[1856] až sys[1887]  
         07 s R   název jednotky se vztahem k času, podle nastavení (např. text "kWh")
                   - text

sys[1888] až sys[1919]
         07 s R   název měny, podle nastavení (např. text "CZK")
                   - text

sys[1920] až sys[1951]  
         07 s R   název jednotky bez vztahu k času, podle nastavení (např. text "kW")
                   - text

sys[1952] až sys[1983]  
         07 s R   název činnosti, podle nastavení (např. text "spotřeba")
                   - text

sys[1984] až sys[2015]  
         07 s R   název měřiče, podle nastavení (např. text "elektroměr č. 1")
                   - text

sys[2016] až sys[2047]  
         07 i R   konfigurační detaily pro daný S0 vstup
                   - bit 0 nastaven = je to aktivní S0 vstup
                   - bit 1 nastaven = tento S0 vstup je rozdělen na dvoutarif T0/T1 (jinak je to jedno-tarif)

Samozřejmě pro využití těchto systémových proměnných, potřebujete mít v SDS aktuální firmware.


Reserved

sys[2048] až sys[2198]   reserved


MQTT klient

Vždy si zjistěte, jestli máte v SDS takové FW, které podporuje funkci MQTT klient:

sys[2199] 09 i R   podpora MQTT
                    0 = NE
                    1 = ANO, verze MQTT 3.1.1, SDS první část implementace
                    2..max = (reserved)

Každé nové připojení k Brokeru:

sys[2200] 09 i R   stav průběhu mqtt_connect()
                    -7 = obdrželi jsme CONNACK, ale negativní = nepřipojeno ( výsledek viz sys[2201] )
                    -6 = timeout při čekání na připojení, nepřipojeno
                    -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno
                    -4 = nespravne parametry (počet parametrů), nepřipojeno
                    -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
                    -2 = pokus o TCP připojení selhal
                    -1 = nepoužito
                     0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)
                     1 = bylo zahájeno připojování (otevírá se TCP spojení)
                     2 = TCP připojeno a odeslán CONNECT požadavek
                     4 = obdrželi jsme CONNACK, připojeno ( výsledek viz sys[2201] )
                     8 = probíhá odpojování, čekáme na výsledek (na odpojení)

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.

sys[2201] 09 i R   výsledek mqtt_connect() = hodnota "CONNACK Connect Return"
                    -7 = nepoužito
                    -6 = timeout při čekání na CONNACK, nepřipojeno
                    -5 = nepoužito
                    -4 = nepoužito
                    -3 = nepoužito
                    -2 = probíhá připojování, čekáme na CONNACK (zatím nepřišel)
                    -1 = idle, nepřipojeno
                     0 = (výsledek:) MQTT 0x00: broker akceptoval připojení - LZE POKRAČOVAT (provádět Publish, Subscribe)
                     1 = MQTT 0x01: Connection Refused, unacceptable protocol version
                     2 = MQTT 0x02: Connection Refused, identifier rejected
                     3 = MQTT 0x03: Connection Refused, Server unavailable
                     4 = MQTT 0x04: Connection Refused, bad user name or password
                     5 = MQTT 0x05: Connection Refused, not authorized

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).

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:

sys[2202] 09 i R   výsledek pro tyto funkce: mqtt_publish(), mqtt_subscribe(), mqtt_unsubscribe_index(), mqtt_unsubscribe_name()
                    -8 = SUBACK dorazil z Broker ale s indikovanou chybou (Failure Bit), můžete volat další funkci
                    -7 = vybraná položka (řádek) subscribe tabulky je prázdná, není co odhlašovat
                    -6 = timeout (možnosti: publish neprovedeno, nebo: SUBACK vůbec nedorazil, nebo: UNSUBACK vůbec nedorazil), můžete volat další funkci
                    -5 = nespravne parametry (hodnoty, např. index) např. jejich celková délka se nevleze do paketu
                    -4 = nespravne parametry (počet parametrů)
                    -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
                    -2 = SDS není připojeno k brokeru (buď právě ještě probíhá připojování, nebo není vůbec připojeno)
                    -1 = bez aktivity
                     0 = nepoužito
                     1 = mqtt_publish() probíhá
                     2 = mqtt_publish() hotovo (OK - obdržen TCP ACK), můžete volat další funkci
                     4 = mqtt_subscribe() probíhá - čekám na SUBACK
                     8 = SUBACK dorazil z Broker, bez chyby (OK), můžete volat další funkci
                    16 = čekám na UNSUBACK (pouze pro unsubscribe funkce)
                    32 = UNSUBACK dorazil z Brokeru, můžete volat další funkce

Informativní položka:

sys[2203] 09 i R   počet chyb v protokolu MQTT směrem z Brokeru
                   (objeví-li se chyba, dojde k okamžitému odpojení)

Zatím nepoužité pozice:

sys[2204] až sys[2208]   reserved

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)

sys[2210] 09 s R   poslední přijatý Topic Name z Brokeru (broker publish)
sys[2250] 09 s R   poslední přijatý Value z Brokeru (broker publish)
sys[2290] 09 i R   timestamp pro poslední přijatou zprávu (broker publish)

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.

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 !

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)

Jednotlivé položky v tabulce příchozích zpráv:

sys[2211] až sys[2241] 
         09 s R   název položky (Topic Name) pro daný index #1 - #31
                  (max délka záznamu dle SDS)

sys[2242] až sys[2249]   reserved

sys[2251] až sys[2281] 
         09 s R   poslední přijatá hodnota (Value) ze publish zprávy ze brokeru pro daný index #1 - #31
                  (max délka záznamu dle SDS)

sys[2282] až sys[2289]   reserved

sys[2291] až sys[2321] 
         09 i R   timestamp (hodnota uptime) v okamžiku příchodu zprávy z Brokeru
                  (pro detekci změny - příchozí zprávy z Brokeru)
                  0 = zatím nic nepřišlo
                  1..MAX = hodnota uptime v okamžiku poslední změny

Nastavení Topic názvů každé položky (tedy "zápis" 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.


Reserved

sys[2322] až sys[2398]   reserved


MODBUS-TCP klient

Ověření FW v SDS:

sys[2399] 09 i R   podpora pro MODBUS TCP
                    0 = NE
                    1 = ANO (první verze implementace v SDS)

Každé nové TCP spojení na server:

sys[2400] 09 i R   stav průběhu modbus_tcp_connect()
                    -6 = timeout při čekání na připojení, nepřipojeno
                    -5 = nespravne parametry (hodnoty např. IP, port), nepřipojeno
                    -4 = nespravne parametry (počet parametrů), nepřipojeno
                    -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
                    -2 = pokus o TCP připojení selhal
                    -1 = nepoužito
                     0 = klid, nic se neprovádí, ODPOJENO ! (lze se začít připojovat)
                     1 = bylo zahájeno připojování (otevírá se TCP spojení)
                     2 = TCP připojeno, můžete komunikovat 

MODBUS funkce - každá má svůj nezávislý stavový údaj:

sys[2401] 09 i R   stav průběhu zpracování funkce 0x01 - modbus_tcp_read(uid, 0x01, ...);
sys[2402] 09 i R   stav průběhu zpracování funkce 0x02 - modbus_tcp_read(uid, 0x02, ...);
sys[2403] 09 i R   stav průběhu zpracování funkce 0x03 - modbus_tcp_read(uid, 0x03, ...);
sys[2404] 09 i R   stav průběhu zpracování funkce 0x04 - modbus_tcp_read(uid, 0x04, ...);
sys[2405] 09 i R   stav průběhu zpracování funkce 0x05 - modbus_tcp_writesingle(uid, 0x05, ...);
sys[2406] 09 i R   stav průběhu zpracování funkce 0x06 - modbus_tcp_writesingle(uid, 0x06, ...);
sys[2415] 09 i R   stav průběhu zpracování funkce 0x0F - modbus_tcp_writemultiple(uid, 0x0F, ...);
sys[2416] 09 i R   stav průběhu zpracování funkce 0x10 - modbus_tcp_writemultiple(uid, 0x10, ...);
                    pro všechny tyto stavy platí následující hodnoty:
                     -6 = timeout (neprovedeno), můžete volat další funkci
                     -5 = nespravne parametry (hodnoty), můžete volat další funkci
                     -4 = nespravne parametry (počet parametrů), můžete volat další funkci
                     -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
                     -2 = SDS není připojeno (buď právě ještě probíhá připojování, nebo není vůbec připojeno)
                     -1 = bez aktivity, lze volat funkci
                      0 = provedeno OK (obdržena platná odpověď bez chybového kódu), můžete volat další funkci
                      1 .. 15 = obdržena odpověď s chybou 0x01 až 0x0F, můžete volat další funkci
                    256 = pracuji, čekejte na aktualizovanou hodnotu
sys[2417] až sys[2462]   reserved
sys[2463] 09 i R  poslední hodnota Unit Identifier zapsaná do MBAP hlavičky při odeslání zprávy

sys[2464] 09 i R  poslední hodnota Transaction Identifier zapsaná do MBAP hlavičky při odeslání zprávy

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).

sys[2465] 09 i R  timestamp poslední přijaté zprávy
                  (vhodné pro detekci nové přijaté zprávy)

sys[2466] 09 i R  počet přijatých položek, pro poslední přijatou zprávu
                  (počet celých položek)

sys[2467] 09 i R  přijatá hodnota Unit Identifier z příchozí MBAP hlavičky
                  (hodnota adresy je převzata z příchozí zprávy)

sys[2468] 09 i R  přijatá hodnota Transaction Identifier z příchozí MBAP hlavičky
                  (hodnota adresy je převzata z příchozí zprávy) 

sys[2469] 09 i R  adresa první položky coil/input/register (které odpovídá údaj v sys[2470])
                  (MODBUS způsob číslování položek - adresa 1..n)

sys[2470] až sys[2719]
         09 i R   přijaté hodnoty pro poslední přijatou zprávu
                   MODBUS funkce 0x01 a 0x02: každý sys[] má hodnotu 0 až 255, jednotlivé bity určují coils/input
                   MODBUS funkce 0x03 a 0x04: každý sys[] má hodnotu -32768 až 32767, tedy hodnotu pro každý jeden registr

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.

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.


Rezerva

sys[2715] až sys[2800]   reserved


Konec dokumentu

Konec dokumentu.