Matlab Compiler a CGI skripty

  

Použitím Matlab Compilera je možné vytvárať spustiteľné súbory (skripty), ktoré môžu byť volané WEB serverom pomocou rozhrania CGI (Common Gateway Interface). CGI skripty generujú HTML kód a zapisujú ho na štandardný výstup (stdout). Vstup údajov do CGI skriptu je v prípade metódy GET, realizovaný pomocou  systémových premenných. Obzvlášť dôležitá je QUERY_STRING, z ktorej môže skript čítať vstupné dáta, napríklad z formulára. Skript vytvoríme priamo v jazyku Matlab. Použitím funkcií getenv() sa načíta obsah systémovej premennej QUERY_STRING. Jej obsah je reťazec obsahujúci dáta zo vstupnej stránky. Dáta z jednotlivých vstupných polí v tomto reťazci sú navzájom oddelené znakom '&' a sú formátované nasledovne:

            pole1=hodnota1&pole2=hodnota2&pole3=hodnota3& . . .

Dáta je následovne potrebné načítať z reťazca. Ak sa medzi vstupnými údajmi nachádzajú matice zapísané ako reťazce v tvare [1 2; 3 4],  prehliadač v URL nepovolené znaky '[', ';' a ']' konvertuje do hexadecimálneho kódu v tvare  '%xx', kde xx je hexadecimálny kód znaku. Tieto znaky je potrebne v Matlabe konvertovať naspäť do pôvodného tvaru, napr. funkciou strrep() .
N
asledovne je potrebné štandardnými metódami rozdeliť reťazec na jednotlivé polia výberom z textového reťazca a ich hodnoty  konvertovať, a prideliť správnym matlabovským premenným funkciami str2double() a str2num().

Ďalším postupom je výpočet a spracovanie vstupných údajov.
Výpis HTML stránky so spracovanými dátami CGI skriptom na štandardný výstup musí začať predpísanou hlavičkou s typom obsahu:

     
fprintf(1,'Content-type: text/html\n');  % typ vystupnych udajov
      fprintf(1,'\n');  % povinny prazdny riadok

Prvý parameter funkcie fprintf  interface object je nastavený na 1, čo znamená zápis na štandardný výstup. Za hlavičkou nasleduje výpis samotnej HTML stránky s vloženými výstupnými hodnotami.
V prípade potreby grafického výstupu zo CGI skriptu, je potrebné urobiť snímok otvoreného „figure window“  funkciou hardcopy(), ktorá vráti maticu s grafickým objektom ďalej spracovávateľnými funkciami image processing toolboxu. To je vhodné najmä vtedy, ak potrebujeme zmeniť veľkosť snímku alebo robiť iné grafické úpravy snímku. Potom obrázok uložíme funkciou imwrite(). Druhá, jednoduchšia možnosť je použiť funkciu print(), ktorá vloží aktuálny obsah „figure window“  priamo do súboru. Zmena rozlíšenia je možná parametrom –rcislo , kde číslo znamená počet bodov na palec. Lepšie výsledky však dosiahneme prvou metódou.
Hotový skript (M-file) treba dôkladne odskúšať a odladiť v Matlabe. Aj keď obsah QUERY_STRING je nutné napísať ručne, je to oveľa jednoduchšie, ako hľadať chybu v nefunkčnej aplikácii už nasadenej na serveri.

Skript skompilujeme Matlab Compilerom príkazom mcc:

            Príklad:            mcc -m mycgi.m

Matlab Compiler vytvorí súbory mycgi.exe (samotný CGI skript), mycgi.ctf (Component Technology File), zdrojové súbory aplikácie v jazyku C a niekoľko ďalších súborov. Pre nasadenie na server sú dôležité iba súbory  mycgi.exe a mycgi.ctf.
 Pri ich inštalácii na server je potrebné dôsledne nastaviť server pre použitie CGI skriptov, obzvlášť si treba dávať pozor na práva na spúšťanie skriptov, a ďalej, aby skript, resp. používateľ IUSR_<meno pocitaca>,  mal práva zapisovať dáta na disk minimálne v priečinku, v ktorom sa nachádza. CTF archív sa pri prvom spustení skriptu musí rozbaliť do pracovného priečinka CGI skriptu. Ak sa tak nestane, pravdepodobne sa jedná o problém s právami. Pri prvom spustení aplikácie sa môže v prehliadači objaviť chybové hlásenie:

„CGI Error: The specified CGI application misbehaved by not returning a complete set of HTTP headers.“

V tom prípade treba spustiť aplikáciu ešte raz. Pri ďalšom spustení by malo všetko prebehnúť bez problémov.



  Zopár ukážkových príkladov:

Metóda slučkových prúdov

    Stránka pre výpočet prúdov v jednotlivých vetvách metódou slučkových prúdov podľa zadaných parametrov obvodu. Aplikácia demonštruje jednoduchý vstup a výstup numerických údajov.

Metóda uzlových napätí

    Stránku pre výpočet prúdov v jednotlivých vetvách metódou uzlových napätí podľa zadaných parametrov obvodu. Aplikácia demonštruje jednoduchý vstup a výstup numerických údajov

Simulácia URO

    Stránku generujúcu výstupný graf zo simulácie vloženého diskrétneho systému, s vloženou periódou vzorkovania a parametrami regulátora v zložkovom tvare. Aplikácia demonštruje vstup numerických údajov a výstup vo forme grafu.

Simulácia URO v Simulinku

    Stránku generujúcu výstupný graf zo simulácie pevne daného systému pomocou simulácie vytvorenej v Simulinku. Do formulára je možné vložiť koeficienty regulátora Aplikácia demonštruje hlavne použitie simulinkovských modelov v nových technológiách výstup vo forme grafu.


Návod:
nastavenie práv pre zápis
        Aplikácie musia byť v priečinku s nastavenými právami na zápis pre používateľa IUSR_<meno pocitaca>.
        Pre aplikácie používajúce Simulinkovské schémy musí byť vo Windows\System32\ povolené práva pre používateľa       IUSR_<meno pocitaca> na spustenie príkazu cmd.