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
- OSI7
- 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
- lze pracovat také s 64-bit proměnnými (int64_t, uint64_t)
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.