FULL-C

Z onlinetechnology.cz

Přejít na: navigace, hledání
Tato stránka popisuje programovací jazyk FULL-C, který je dostupný na vybraných zařízeních SDS. Některá zařízení používají SDS-C, pro který máme návody jinde na této WiKi.


Obsah

Co to je?

Zařízení SDS (OnlineTechnology.cz) je možné uživatelsky programovat (PAC / PLC).

Pro zařízení SDS jsou k dispozici dva různé způsoby zápisu programu (dva programovací jazyky), a jejich výběr závisí na typu zařízení SDS: máme "FULL-C" jazyk (popsaný zde) a jeho zjednodušení - "SDS-C" jazyk.

FULL-C je nasazeno na výrobcích SDS druhé produktové řady (výrobky první produktové řady používají striktně jazyk SDS-C).

Pokud tedy máte SDS-BIG nebo jiné SDS druhé produktové řady, bude vás čistě zajímat programovací jazyk FULL-C (a vše ohledně SDS-C ignorujte).


Návod pro začátek

Přejděte na stránku s návodem úvod krok-za-krokem.


Jaký je vztah SDS-C a FULL-C ?

A proč jsou pro SDS vůbec tyto dvě možnosti ?

SDS-C je zjednodušená varianta FULL-C. Tak jak před mnoha lety vznikla první produktová řada SDS, tak bylo potřeba použít jen zjednodušený programovací jazyk. To už ale neplatí pro druhou produktovou řadu SDS, o které se bavíme na této stránce.

FULL-C je plnohodnotný ANSI-C programovací jazyk, bez omezení. Je určen pro zápis vašeho programu, který používá vyhrazené funkce a proměnné pro interakci s HW zařízení SDS.

SDS-C ve výsledku umožňuje zcela to samé jako FULL-C - přičemž ale SDS-C má oproti FULL-C řadu zjednodušení a omezení, především z historických důvodů (první zařízení SDS měli omezenou paměť a výkon).


Informace

Dokumentace pro FULL-C je zde na WiKi a v současné době se dokončují detaily.

Protože FULL-C je určeno pro zařízení SDS druhé produktové řady, které jsou v prodeji od roku 2015, na zcela úplné dokumentaci se stále pracuje.


Jak FULL-C funguje

Na této WiKi naleznete kompletní návody a příklady pro použití FULL-C v rámci zařízení SDS druhé produktové řady. Jednotlivé návody jsou postupně doplňovány.


+-----------------+        +-----------------------+        +--------------------------+
|  HARDWARE       | <====> |  FULL-C               | <====> |  Ethernet / Internet     |
|                 |        |                       |        |                          | 
|   - vstupy      |        |   - vlastní program   |        |   - server (HTTP GET)    | 
|   - výstupy     |        |   - reálný čas (NTP)  |        |   - uživatelská stránka  | 
|   - sběrnice    |        |   - sdílené proměnné  |        |   - SMTP server (email)  | 
|   - SD-card     |        |   - FC funkce         |        |   - SNMP dohled          | 
|   - DF storage  |        |                       |        |   - ostatní M2M (XML)    | 
|   - GSM, LoRa   |        |                       |        |                          | 
|   - CAN         |        |                       |        |                          | 
|   - DALI        |        |                       |        |                          | 
|   - bkp-RAM     |        |                       |        |                          | 
|                 |        |                       |        |                          | 
+-----------------+        +-----------------------+        +--------------------------+

Jak lze na obrázku vidět, FULL-C program je umístěn "mezi" hardware zařízení SDS, a vnější svět (reprezentovaný přístupem z Internetu: ePortál, XML, User-HTML, atd.).

Jako programátor FULL-C máte možnost napsat takový C program, který se do zařízení SDS "vleze", a který bude mít možnost číst stav hardware (například číst vstupy), měnit stav hardware (například relé), přistupovat na komunikační sběrnice (například RS485) a být interaktivní se síťovým okolím (posílat emaily, trapy, poskytovat hodnoty přes XML, nebo si nechat měnit své proměnné "z venku").

Samozřejmě FULL-C program je schopný i zcela samostatné práce v zařízení SDS, které není připojeno k Internetu.

FULL-C od dob SDS-C "vyrostlo" a poskytuje nové možnosti, podložené použitím neomezeného ANSI-C jazyka.


Jak FULL-C ovládá zařízení SDS

Toto je první důležitá část návodu pro FULL-C.

Pomocí set a get funkci, viz informace na příslušné stránce.

Na další stránce jsou k dispozici i krátké příklady ve FULL-C pro zcela všechny dostupné funkce.


Základy programování ve FULL-C

Programování ve FULL-C zvládne každý, kdo umí programovat v jazyce C, a má k dispozici potřebné detaily poskytnuté na této WiKi.

 // hlavni funkce
 void main(void)
 {
 
   // napis vzkaz do konzole
   printf("Hello World !\n");
 
   // a zustan navzdy zde
   for (;;);
 
 }

Toto je příklad úplného zdrojového kódu vzorového FULL-C programu. Je zřejmé co tento program udělá: napíše Hello World do konzole (echo.html) a pak zůstane navždy stát na místě (nekonečná smyčka for). Vyzkoušejte !

Program zadáte do prostředí FULLC.exe (aplikace ke stažení z této WiKi), kde se program přeloží do "bytecode" a tento "bytecode" se následně přes síť nahraje do vašeho SDS (které musí podporovat FULL-C, pozor, nelze například do SDS které má v sobě podporu pro SDS-C nahrávát FULL-C, a naopak). Jakmile se program nahraje, tak se spustí (spustí se také po každém novém zapnutí zařízení SDS).

Ve webové administraci SDS můžete sledovat stav programu, jaká je jeho paměťová náročnost, a případný důvod selhání (některé složité programy mohou narazit například na nedostatek paměti, malý zásobník, atd. viz dále).

Bližší popis použití FULL-C v zařízení SDS.


Funkce poskytované ve FULL-C

Toto je druhá důležitá část návodu pro FULL-C.

Základem pro psaní programu je mít k dispozici seznam funkcí, které může program po SDS chtít vykonat. Tyto funkce představují přímou vazbu na hardware a vnější svět (síť).

Funkce jsou rozděleny na několik skupin:

  • Základní C funkce (stdlib)
  • Funkce pro ovládání SDS (hardware, úložný prostor, sběrnice)
  • Funkce pro komunikaci přes síť (Ethernet / Internet)

Seznam FULL-C funkcí je na této stránce.


Sdílení proměnných s vnějším světem

Toto je třetí důležitá část návodu pro FULL-C.

FULL-C umožnuje deklarovat řadu speciálních proměnných (číselné hodnoty a textové pole), které lze "z venku" (přes "síť") číst a do kterých lze zapisovat. Lze tak snadno provázat běžicí FULL-C program v zařízení SDS s uživatelskou webovou stránkou nebo jiným systémem. Program může tyto proměnné využít pro své nastavení, a toto nastavení si pak může i uložit do DF (pokud si to ve FULL-C naprogramujete).

Návod pro použití sdílených proměnných je zde.


Detaily v rozdílech mezi FULL-C a SDS-C

Protože se najde řada uživatelů, kteří budou chtít převést své původní SDS-C programy do nového FULL-C, je zde uveden seznam základních rozdílů mezi SDS-C a FULL-C programovacími jazyky.


FULL-C odpovídá standardu C90

Jsou aplikovány tyto doplňující pravidla a omezení:

  • Zdrojový kód může být pouze v jediném ".c" souboru (include soubory nejsou podporovány v této verzi IDE)
  • Nelze použít ukazatele (pointer) na funkci (ostatní použití ukazatelů není omezeno)
  • Nelze použít bit-fields (např. v definici struktury) (toto je jediné omezení v oblasti struktur)
  • "goto" skoky lze použít pouze dopředu (nelze skákat zpět / nahoru) v kódu
  • deklarace "static" jsou překladačem ignorovány (občasné je použití "static" pro proměnné uvnitř funkce, FULL-C to nepodporuje, nepoužívejte to tedy)
  • všechny proměnné jsou automaticky označeny jako "volatile" (i když to specificky do deklarace proměnné neuvedete), tzn. nedojde k nechtěné optimalizaci (vynechání čtení či zápisu)
  • výchozí rozměr proměnné je 32-bit


Nejvíce viditelné rozdíly mezi FULL-C a SDS-C

  • FULL-C nemá omezení v použití jazyka C, která obsahuje jazyk SDS-C
  • Zápis textu (string) v SDS-C používá znak jednoduchá-čárka ('), zatímco FULL-C používá uvozoky (") tak jak se od C očekává
  • FULL-C umožňuje plnohodnotné využití deklarace a volání funkcí (ve SDS-C není např. možné použít návratovou hodnotu funkce)
  • "goto" ve SDS-C umožnuje skoky i zpět v kódu - toto se používalo z důvodů chybějících funkcí "for", "while", "do" v SDS-C - kdežto FULL-C podporuje "goto" jen dopředu
  • FULL-C vykonává program bez pevného časového kroku, tzn. v neomezené rychlosti (u SDS-C je krok 1 msec na řádek kódu; byť i toto lze nastavením v programu odstranit)
  • FULL-C neopakuje volání main() pokud program opustí main(), tzn. FULL-C program je po opuštění main() ukončen (znovu se spustí po resetu nebo nahráním jiného); SDS-C spouští main() neustále dokola
  • FULL-C neposkytuje funkci init(), tak jak ji poskytuje SDS-C
  • Indexy pro set a get ve FULL-C nejsou zcela identické jako indexy pro sys[] pole v SDS-C

Pokud jste zvyklí programovat ve SDS-C, bude se vám na FULL-C přecházet snadno (přesto pozor, SDS-C a FULL-C jsou v mnohem rozdílné).


Vybrané tipy a triky

Jsou k dispozici na samostatné stránce (tento odkaz).

Úplný příklad FULL-C programu pro zabezpečený přenos dat z SDS přes síť na server - tento příklad ukazuje celou řadu FULL-C funkcí, takže slouží jako dobrý základ pro další rozšíření či použití ve vašem vlastním FULL-C programu.


Důležitá informace

Každý program je jinak složitý, a tím pádem potřebuje jinak veliký "zásobník".

Detaily jsou popsány v rámci této dokumentace, na příslušné stránce.

Vždy dbejte na to, aby nastavená celková velikost zásobníku (stack) a haldy (heap) byla dost velká na to, aby program vždy spolehlivě fungoval.

Pokud vám program náhodně nefunguje, nebo nesmyslně "padá", na 99% to je tím, že máte nastavenou příliš malou velikost zásobníku. Zvětšte ji, a nahrejte program do SDS znovu.

S výhodou můžete využít informační okno překladače programu, který číselně a graficky zobrazuje obsazení paměti programem v SDS.

Pokud se váš program už "nevleze", můžete zvážit použití výkonnějšího hardware (tj. místo "malé" varianty SDS-"64kB" použít hardware SDS-"128kB").


Stav návodů

Základní návod a souhrnný popis všech vlastností a funkcí, je k dispozici na této WiKi. Pro další detailnější dotazy použijte naše oficiální forum.

Osobní nástroje
Translate