TVORBA MWS PREZENTÁCIE
Vytvorenie prezentácie pre MATLAB Web Server možno rozdeliť do niekoľkých krokov.
Prvým krokom by mala byť analýza úlohy, ktorú chceme spracovať ako MWS prezentáciu. Musíme si definovať vstupné dáta, t.j. aké dáta bude užívateľ zadávať a aké dáta je potrebné mať na výstupe, teda čo presne chceme získať (grafy, obrázky, hodnoty veličín, čísla, matice atď.).
Druhým krokom je vytváranie samotnej MWS prezentácie, ktorá sa skladá z troch častí.
Prvú časť tvorí HTML stránka, ktorá sa nazýva vstupný formulár a slúži na zadávanie dát užívateľom. Druhou časťou je vytvorenie funkcie pre Matlab (m-file), ktorá vykonáva súbor príkazov (program) v nej zapísaných, pričom celý výpočet sa realizuje prostredníctvom MATLAB Web Serveru. Vstupné dáta pre tento m-file sú prevzaté zo vstupného formulára metódou post. Po spracovaní dát je vygenerovaná HTML stránka, ktorá sa nazýva výstupný formulár a tvorí tretiu časť MWS prezentácie. Výstupný formulár obsahuje výsledky, ktoré sme si zvolili ako výstupné dáta.
Takže kvôli prehľadnosti, si zhrňme jednotlivé kroky:
- Užívateľ (klient) sa pripojí na HTTP server pomocou internetového prehliadača a vyberie si prezentáciu, zobrazením príslušného vstupného formulára.
- Užívateľ vyplní vstupný formulár a odošle ho.
- Dáta z formulára sa spracujú cez MWS v Matlabe.
- Užívateľ získa vo svojom internetovom prehliadači výstupný formulár s výsledkami výpočtov.
VSTUPNÝ FORMULÁR
Vstupný formulár je klasický HTML dokument a tvorí vstup pre každú prezentáciu. Vo vstupnom formulári sú prvky pomocou, ktorých sa získava z tohto formulára súbor dát použitých následne m-filom pre výpočet.
Deklarácia formuláru
Každý formulár musí obsahovať nasledovnú časť HTML kódu
<html> <form action="/cgi-bin/matweb.exe" method="post"> <input type="hidden" name="mlmfile" value="názov_m-filu" /> <!--časť HTML kódu, obsahujúcu prvky pre zadanie vstupných dát--> <input type="submit" value="Odoslať údaje" /> </html>
Parametre tagu <form>
<form> ... </form> je párový tag vymedzujúci formulár, ktorým sa získavajú dáta od užívateľa. Jednotlivé formuláre nemožno vnoriť!
| ACTION | url | určuje adresu alebo cestu k programu (skriptu), ktorý sa spustí po odoslaní údajov formulára. Tomuto programu odovzdá prehliadač všetky údaje z formulára. |
| METHOD | get | údaje z formulára (premenné a ich hodnoty) pripoja k URL adrese programu, ktorá je zadaná v parametri ACTION, v tvare. O spracovanie týchto údajov sa musí postarať daný program. Používa sa ako všeobecná metóda v prípade, že sa nevyžaduje bezpečnosť. V MWS môže dôjsť k problémom, ak sú odosielané dáta dlhšie než je maximálna povolená dĺžka URL. |
| post | údaje z formulára sprístupní program uvedený v hodnote parametra ACTION načítaním zo štandardného vstupu. Údaje majú rovnaký tvar ako pri metóde GET. Používa sa, ak prenášame údaje, ktoré nechceme zobrazovať ako časť URL. Okrem toho umožňuje posielať s formulármi aj súbory. Preto budeme používať túto metódu. |
Parametre tagu <input>
Vo formuláre musí byť deklarovaný skrytý vstup, ktorý určuje m-file pre spracovanie dát.
<input type="hidden" name="mlmfile" value=" názov_m-filu " />
Nepárový tag <input> vloží prvok (položku) formulára daného typu. Každá položka je označená svojim menom. Po odoslaní formulára sa zašlú hodnoty všetkých položiek programu, ktorý je uvedený v parametri ACTION príkazu <form>.
| TYPE | hidden | umožní vložiť do formulára skrytú informáciu, ktorá sa bude prenášať pri každom odoslaní formulára. Položka sa nezobrazuje v prehliadači. Hodnotou skrytého poľa je hodnota uvedená v parametri VALUE. |
| text | vloží jednoriadkové textové vstupné pole formulára. | |
| password | vloží jednoriadkové textové pole na zadanie hesla. Namiesto znakov zadávaných užívateľom sa zobrazí znak "*". | |
| checkbox | vytvorí zaškrtávacie políčko formulára. Počiatočné "zaškrtnutie" možno dosiahnuť použitím parametra CHECKED. | |
| radio | vytvorí prepínač, t.j. zo skupiny vstupných polí typu "radio", ktoré majú rovnaké meno (parameter NAME) a z ktorých môže byť aktívny práve jeden. Počiatočné "zaškrtnutie" možno dosiahnuť použitím parametra CHECKED v jednom z prepínačov. | |
| file | vytvorí textové pole a tlačidlo "browse" na výber súboru na lokálnom počítači a umožní odoslať súbor spolu s formulárom. | |
| image | vloží obrázok, ktorý má funkciu ako tlačidlo "submit". Hodnoty súradníc x, y kurzora sa uchovajú v premenných formulára MM.X a MM.Y, kde MM je hodnota parametra NAME. | |
| button | vloží tlačidlo, ktoré možno využiť iba pomocou skriptov na stránke. | |
| submit | vloží tlačidlo na odoslanie formulára. | |
| reset | vygeneruje formulár s pôvodnými hodnotami. | |
| NAME | text | určuje meno formulárovej položky pre účely neskoršieho spracovania hodnoty. Funguje ako meno premennej. |
| VALUE | text | určuje počiatočnú hodnotu formulárovej položky (a zodpovedajúcej premennej). Jej zmysel závisí od typu položky. |
| SIZE | veľkosť | určuje počiatočnú šírku položky formulára. |
M-FILE
Súbor nazývaný m-file spracúva dáta na strane servera a je to vlastne postupnosť príkazov pre Matlab. M-file vytvorený pre MWS prezentáciu musí byť schopný prevziať údaje zo vstupného formulára a tie následne spracovať a odovzdať výsledné hodnoty výstupnému formuláru. Na vstupnej stránke sa pomocou skrytého vstupu s názvom mlfile a parametrom VALUE, ktorý obsahuje názov volaného súboru, odkazujeme na m-file, ktorý zabezpečí spracovanie vstupných dát. Názov m-filu musí byť rovnaký ako je názov MWS prezentácie zapísanej v skripte matweb.conf, spolu s URL adresou, kde sa daný m-file nachádza.
Všeobecný skript m-filu so základnými časťami kódu vyzerá nasledovne:
function HTMLout = nazov_m-file(in,out)
imdir = 'D:/www/images'; % ==>> umiestnenie generovaných obrázkov
cd (in.mldir); % ==>> nastavenie cesty pracovného adresára
mlid = in.mlid; % ==>> získanie jedinečného reťazca
wscleanup('*.jpeg',0.2,imdir); % ==>> vymazanie grafov starších ako je daná hodnota,
% ==>> napr. 0.2hod v adresári
premenna1 = in.premenna1; % ==>> Načítanie dát zo vstupného HTML formulára
premenna2 = in.premenna2;
premenna1 = str2num(premenna1); % ==>> Prevod údajov z formulára na dáta spracovateľné Matlabom
premenna2 = str2num(premenna2);
% ==>>
%%% Nasledujú všeobecné príkazy pre výpočet, v tvare v akom sa udávajú bežne v Matlabe
% ==>>
out.premenna1 = premenna1; % ==>> Výstupné dáta pre výstupný HTML formulár
out.premenna2 = premenna2;
templatefile = which('nazov_vystup.form.html'); % ==>> načítanie výstupnej šablony
HTMLout = htmlrep(out, templatefile); % ==>> vygenerovanie výstupného formulára
Ako funguje táto štruktúra:
Dáta sú po odoslaní užívateľom prevzaté CGI skriptom matweb.exe. Tento skript vytvorí štruktúrovanú premennú, ktorej jednotlivé prvky sú tvorené hodnotami položiek NAME zo vstupného formulára. V jednotlivých prvkoch tejto štruktúry sú uložené hodnoty položiek VALUE pre jednotlivé prvky. Okrem toho sa do štruktúrovanej premennej pridávajú
položky mldir a mlid. Premenná mldir určuje názov pracovného adresára MWS prezentácie, ktorý sa získa z súboru matweb.conf a premenná mlid obsahuje jedinečný reťazec, ktorý sa používa pri tvorbe obrázkov a grafov, za pomoci ktorého je možné rozlíšiť, ktorému užívateľovi vygenerované údaje patria, resp. ktoré dáta boli generované ako posledné.
Takto vytvorená štruktúrovaná premenná je predaná príslušnému súboru m-file ako vstupný parameter nazvaný v našom prípade in. Po spracovaní sa výsledky výpočtov, názvy vygenerovaných obrázkov atď. uložia do výstupnej štruktúrovanej premennej nazvanej napr. out. Príkaz htmlrep vygeneruje výstupný formulár obsahujúci potrebné výstupné údaje.
Použitie Simulinku
Pre zložitejšie výpočty a vytváranie grafov je nutné využitie Simulinku. Toto je možné len použitím príkazov Matlabu zadaných v m-file.
Základné príkazy sú:
open_system('nazov_modelu');
set_param('nazov_modelu/nazov_bloku','parameter1', 'hodnota1',...);
sim('nazov_modelu','simulacne_parametre');
Formát dát
Pri práci s jednotlivými údajmi treba dávať pozor na to, aký formát dát kde použijeme. Nemožno spracovávať textový reťazec rovnako ako číslo a nemožno číslo odosielať ako textový reťazec. Preto si treba uvedomiť, že zo vstupnej stránky sa všetky údaje načítvajú ako textové reťazce, pritom nezáleží na tom, že do formulára sú zadávané užívateľom čísla. Keďže na výpočet v Matlabe sú potrebné číselné údaje, musíme jednotlivé textové reťazce na ne previesť.
Slúžia nám na to nasledovné funkcie Matlabu:
%%% Prevod textového reťazca z formulára na číslo premenna1 = str2num(premenna1); % resp. premenna1 = eval(premenna1);
Keď sa dáta odosielajú pre výstupný formulár je treba, aby boli znovu vo forme textového reťazca. Použiť možno tieto funkcie
%%% Prevod čísla na textový reťazec premenna1 = num2str(premenna1); % resp. premenna1 = feval(premenna1);
Tak isto pre Simulink sa jednotlivé parametre blokov udávajú ako textové reťazce a je dôležité použiť správny formát týchto dát.
%%% Prevod a vloženie čísla ako textového reťazca
set_param('pr_11/System','Numerator',num2str(Z1));
%%% Vloženie vektora ako textového reťazca, treba aby bol v zátvorkách
set_param('pr_11/System','Denominator',sprintf('[%s]',num2str(men)));
%% príkaz sprinft vloží na miesto premennej %s textový reťazec num2str(men)
% resp.
set_param('pr_11/System','Denominator',strcat('[',num2str(men),']'));
%% príkaz strcat spája niekoľko textových reťazcov do jedného
VÝTUPNÝ FORMULÁR
Súčasťou každej MWS prezentácie je šablóna výstupného formuláru. Je to rovnako, ako vstupný formulár klasický HTML súbor, ktorý sa zobrazí užívateľovi v internetovom prehliadači. Tento formulár obsahuje výsledky výpočtov z Matlabu, t.j. čísla, vektory, matice, grafy atď. Výstupný formulár je generovaný po ukončení výpočtov v Matlabe pomocou funkcie htmlrep, ako výsledok MWS prezentácie. Výstupnými parametrami htmlrep sú štruktúrovaná premenná out a šablóna výstupného formuláru.
Funkcia htmlrep pracuje nasledovne:
Nech napr.:
out.premenna1 = "15"; out.premenna2 = "10";
potom, ak v príslušnej šablóne MWS prezentácie chceme zobraziť dané hodnoty, časť jej kódu by mala vyzerať približne takto:
<html> <body> Hodnota prvej premennej je: $premenna1$ <br /> Hodnota druhej premennej je: $premenna2$ </body> </html>
Vykonaním príkazu htmlrep, reťazce $premenna1$ a $premenna2$ budú nahradené príslušnými hodnotami premenných získaných z Matlabu.