FULL-C: intro

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.

Co je FULL-C

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 (přičemž 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.
Rychlé odkazy: 
 set+get funkce
 ovládací funkce SDS


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

A proč jsou pro různé moduly SDS právě tyto dvě různé 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 této WiKi. Pokud vám to nestačí a potřebujete nějaký velmi specifický detail, neváhejte si o něj napsat na naše Fórum, obratem odpovíme.


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.


+-----------------+        +-----------------------+        +--------------------------+
|  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é  |        |   - SNMP dohled          | 
|   - SD-card     |        |   - FC funkce         |        |   - ostatní M2M (XML...) | 
|   - DF storage  |        |                       |        |                          | 
|   - GSM, LoRa   |        |                       |        |   - http klient          | 
|   - CAN         |        |                       |        |   - SMTP klient (email)  | 
|   - DALI        |        |                       |        |   - MODBUS-TCP           | 
|   - M-BUS       |        |                       |        |   - MQTT                 | 
|   - ZigBee      |        |                       |        |   - atd.                 | 
|   - 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 či MBUS) 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.

Základní svázání FULL-C programu se zařízením SDS a světem okolo, se provádí přes set a get funkce - viz NÁVOD NA TÉTO STRÁNCE.

Samozřejmě dokumentace použití FULL-C je mnohem širší, viz další odkazy na této stránce.


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 (IDE) (tato aplikace je ke stažení přímo z této WiKi), kde se program přeloží do "bytecode" (instrukcí) 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).

Přejděte na stránku s návodem: 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í vybrané C funkce
    • stdlib, stdio, strings, atd.
  • Funkce pro ovládání a ladění programu
    • printf, echoclear
    • watchdog, reset
  • Funkce pro ovládání SDS (hardware, úložný prostor, sběrnice)
    • I/O: set, get
    • PWM
    • DF read/write/erase
    • serial (uart/rs232/rs485)
  • Funkce pro komunikaci přes síť (Ethernet / Internet)
    • OSI7
      • SMTP email, HTTP GET/POS, DNS resolver, PING
      • SNMP trap
      • MQTT klient
      • MODBUS-TCP klient
      • oneshot UDP send
  • Funkce pro manipulaci dat
    • crypto
    • base64
  • Funkce pro obsluhu doplňujícího HW (sandwich top-board)
    • DALI
    • CAN
    • MBUS
    • keyboard, LCD
  • Funkce pro přístup na SD kartu
    • file open, close, read, write, seek, size, delete, mkdir ...


Úplný seznam i s detaily:

Přejděte na stránku s návodem: Seznam FULL-C funkcí je zde.


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žňuje 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ěžící 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).

Přejděte na stránku s návodem: Návod pro použití sdílených proměnných je zde.


Přístup k SD kartě

Všechny SDS Druhé Produktové Řady mají podporu pro MicroSD kartu. K obsahu karty (tedy k souborům) lze přistupovat přes FULL-C program.

Přejděte na stránku s návodem: Seznam FULL-C funkcí pro práci se soubory na MicroSD kartě.

SD karta má více sdílených využití v rámci výrobku SDS, úplné informace najdete 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 - ale:

Jsou aplikovány tyto doplňující pravidla a omezení která musíte respektovat:


  • Zdrojový kód může být pouze v jediném ".c" souboru (include soubory nejsou podporovány v této verzi IDE)
  • Nelze získat a/nebo 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)
  • define, použitý pro nastavení velikosti pole, musí být zapsán mimo funkci
  • inicializace obsahu polí se může provádět jen programovým kódem, nikoliv přímo v deklaraci
  • ternární operátor (? tzn. otazník) vždy provede obě své strany (před a za dvojtečkou), byť nakonec vrací správný výsledek jen z určené strany
  • více položek ve smyčkách (for) oddělených čarkou (,) nelze použít, vždy lze použít jen jednu položku
  • výchozí rozměr proměnné a paměťového místa je 32-bit, nicméně lze použít i 8-bit nebo 16-bit deklaraci


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 - nenachytejte se

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

Přejděte na stránku s návodem: Jsou k dispozici na samostatné stránce (tento odkaz).


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:

Úplný příklad FULL-C programu pro zabezpečený přenos dat z SDS přes síť na server.


Důležitá informace

Každý program je jinak složitý, a tím pádem potřebuje jinak veliký "zásobník", kam si průběžně ukládá svůj provozní stav.

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. Zvyšte ji, a nahrajte 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.