Sdsc sysp

Z onlinetechnology.cz

Přejít na: navigace, hledání
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).

Obsah

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

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), tak dochází k (očekávané) konverzi 32-bit unsigned čísel (tj. bez znaménka 32-bitů číslo) mezi vnitřními hodnotamy 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

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

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žeté varování je uvedeno na stránce ohledně dataflash.

Zařízení SDS TTCPRO a SDS MINI mají k dispozici, kromě podpory pro DataFlash, i možnost využít zálohovanou paměť RAM (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).

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, LoRA), které komunikují prostřednictvím textových příkazů (viz vzorové programy).


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 týdne (TBD: x = neděle, y = pondělí, z = ... , . . . )

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

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[40] 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   "zakódovaná" hodnota teploty SoC chipu (není to přímo teplota v degC, ale speciá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, MACRO, UPS, IO6: 
 Vzorec pro přepočet na degC je [ teplota_SoC_v_degC = ((5*(59-30*((3/1024)*sys[46])))/2) ]

SDS TTCPRO: 
 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 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) 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, 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 1msec) 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)
                   - nejvýšší možná použitelná hodnota: (31-bitů) 2147483647 secs (včetně)

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


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 odbrž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 má pouze dva reléové výstupy, kdežto SDS MACRO 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 "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

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.

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

Reserved

Reserved (plán využít tyto sys pro DHT)

sys[185] až sys[188]  RESERVED vyhrazeno

Reserved (future)

sys[189] až sys[190]  RESERVED vyhrazeno

Pulse-Width Modulation výstup

Konfigurace PWM výstupu nejprve vyžaduje zápis do sys[191], aby se nejprve nastavila provozní základní frekvence generátoru. Následně lze PWM 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 PWM 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 a SDS TTCPRO 

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

Další typy SDS:

SDS MICRO a SDS MACRO

sys[191] 01 i RW  "Fm" = frekvence PWM 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" PWM 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 PWM 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 nejvýše ve stovkách kHz.

Další typy SDS:

SDS MINI

sys[191] 07 i RW  "Fm" = frekvence PWM výstupu [Hz]
                   - zápis hodnot: 1 až 1000000 (odpovídá 1Hz až 1MHz) aktivuje PWM (lze dále řídit podle sys[192] a nebo sys[193])
                   - zápis hodnoty 0 vypne PWM výstup (výstup trvale neaktivní) - pro opětovné zapnutí zapište nenulovou hodnotu

sys[192] 07 i RW  duty-cycle PWM 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 PWM 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)

Doporučení je vždy si ověřit vzájemné závislosti konfigurace PWM výstupu osciloskopem. Všimněte si rozdílu významu jednotlivých indexů pro SDS-MINI vůči ostatním SDS.

Reserved

sys[194] až sys[195]  RESERVED vyhrazeno

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: mosfet není sepnut)
                   != 0 : relé je aktivní 
                          (cívka relé pod proudem, MICRO: 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

PDx je sběrnice osmi samostatných bitů. SDS TTCPRO má k dispozici všech osm, zatímco všechny ostatní zařízení SDS buď jen jeden bit (název: "D0" nebo také "PD0" nebo také jako "TOPB-PD0"), nebo žádný.

sys[301] 01 i RW  SDS MICRO LIGHT: stav pinu D0 - samostatný pin na systémovém konektoru, sys[301] nastavit buď na 0 (=D0 na log0) nebo jakoukoliv nenulovou hodnotu (=D0 na log1)
                  SDS MICRO DIN a SDS MACRO: stav pinu D0 - MOSFET spínač na GND. Při jakékoliv nenulové hodnotě v sys[301] je MOSFET sepnutý (=D0 na GND), jinak je D0 jako HiZ
                  SDS TTCPRO: stav pinů v portu PDx (nastavením/čtením sys[301] se přistupuje k jednotlivých osmi bitů v bajtu, kde: bit0=PD0 až bit7=PD7)
                  SDS MINI: bit0 = stav pinu TOPB-PD0, bit1 = stav padu PD1, ostatní bity (2..7) nepoužity
                  SDS UPS: nepoužito
                  SDS IO6: nepoužito
sys[302] 06 i RW  SDS MICRO LIGHT: směr pinu D0 (zápisem do sys[302] lze nastavit D0 buď jako vstup nebo jako výstup)
                  SDS MICRO DIN a SDS MACRO: 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ů v bajtu, bit0=PD0 až bit7=PD7)
                  SDS MINI: bit0 = směr pinu TOPB-PD0, bit1 = směr padu PD1, ostatní bity (2..7) nepoužity
                  SDS UPS: nepoužito
                  SDS IO6: nepoužito

Směr: hodnota bitu jako 0 nastaví PDx-bit jako vstup, 1 jako výstup.

Pro SDS TTCPRO jsou jednotlivé piny namapovány na dolních osm bitů v obou sys[] položkách.

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

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

Čidla teploty 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 má navíc 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.

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í

sys[431] 01 i R   RAW hodnota A/D převodu ze vstupu AD1 [SoC přímý výstup, 0..1023 (nebo pro SDS-MINI: 0..4095)], tato hodnota poskytnuta už po odečtu offsetu
sys[432] 01 i R   RAW hodnota A/D převodu ze vstupu AD2 [SoC přímý výstup, 0..1023 (nebo pro SDS-MINI: 0..4095)], tato hodnota poskytnuta už po odečtu offsetu
sys[433] 01 i R   RAW hodnota A/D převodu ze vstupu AD3 [SoC přímý výstup, 0..1023 (nebo pro SDS-MINI: 0..4095)], tato hodnota poskytnuta už po odečtu offsetu
sys[434] 01 i R   RAW hodnota A/D převodu ze vstupu AD4 [SoC přímý výstup, 0..1023 (nebo pro SDS-MINI: 0..4095)], tato hodnota poskytnuta už po odečtu offsetu

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 může mít text "jednotka A/D x" delší než jeden znak (na rozdíl od SDS-MICRO).

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, 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


Speciální vstupy a výstupy

Toto je funkce dostupná jen na jediném typu výrobku SDS.

Pouze pro SDS MICRO 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, SDS UPS, SDS IO6, 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).

Pájecí plošky CFG:

Zkratovací CFG plošky jsou k dispozici jen pro SDS TTCPRO.

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


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) pro měření teploty, a všechny ostatní chipy.

1-Wire chipy pro měření teploty

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 teplotního čidla na 1-W sběrnici.

Zařízení 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é ROM CODE jsou v sys[] uloženy za sebou, viz výpis:

sys[900] 06 s RW  ROM CODE pro první čidlo 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é čidlo 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é čidlo 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í čidlo 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é čidlo na [B] sběrnici 1-Wire
                   - formát textu "0011223344556677" (8x HEX kód, bez uvozovek)

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 dostupné i přes sys[] položky.

Poznámka: ROM CODE pro čidla teploty 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

Protože požadavky na použití "ne-teploměrných" chipů jsou zcela odlišné než na chipy pro měření teploty, jsou ROM CODE pro "ne-teploměrné" chipy odděleny do samostatných sys[] položek.

Čtení "ne-teploměrného" chipu, připojeného ke sběrnici, 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[] pro danou sběrnici, a provede se pokus o přečtení 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.

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í 1-W sběrnice

                   == 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 "ne-teploměrného" chipu
                           (dokud se toto nedokončí, nelze provést opětovný požadavek na další rescan/čtení)

                   == 4  : nebyl nalezen jakýkoliv "ne-teploměrný" chip (s odpovídajícím Family Code byte)

                   == 8  : byl přečten ROM CODE z připojeného "ne-teploměrneho" 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[960] až sys[969]  reserved

Všimněte si, že software v tuto chvíli umožňuje pouze rescan 1-W sběrnice, kdy hledá jeden připojený "ne-teploměrný" 1-W chip. 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ý "ne-teploměrný" chip (tj. ten, který má nejnižší ROM-CODE ze všech připojených "ne-teploměrných" chipů).


Zbývající položky

Zbytek:

sys[970] až sys[1023]   reserved

Tyto položky nejsou v současné době použity, čtení a zápis z/do těchto položek nemá význam.


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

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

sys[1024] až sys[1551]   LCD buffer (dostupné jen pro SDS MACRO !)
         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 a navíc je vyžadován firmware od 24.11.2016 nebo novější.

Jakékoliv změny (zápis) se promítnou pouze do frame bufferu - aby se následně frame buffer vykreslil na LCD, je potřeba zavolat příslušnou SDS-C funkci ! Čtení poskytuje přímý přístup do frame bufferu (jeho aktuální obsah, 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.


Vyhrazená oblast

Zbytek:

sys[1552] až sys[1663]   reserved


Bateriově Zálohovaná Paměť

POUZE PRO: SDS-TTCPRO a SDS-MINI ! - 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)
         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.


Konec dokumentu

Konec dokumentu.

Osobní nástroje
Translate