15. Subsystém a maska subsystému
15.1. Subsystém
Subsystém obyčajne zahrňuje logický celok, ktorý si s okolím vymieňa relatívne obmedzené
množstvo informácií. Táto výmena informácií je realizovaná prostredníctvom vstupných a
výstupných premenných (signálov).
Postup tvorby subsystémov a ich maskovania bude vysvetlený na príklade modelu "lineárnej závislosti".
Príklad 15.1:
Vytvorme model, ktorý predstavuje nasledujúcu závislosť
y = a + b u
[in 1] -> [gain b] -> +[sum] -> [out 1]
[const a] -> +
Subsystém v Simulinku vytvoríme tak, že zostavíme model a označíme vstupné a výstupné
signály pomocou blokov In a Out (obr. 1). Tieto bloky môžeme pomenovať. Názvy sa prenesú
do označenia vstupných a výstupných signálov bloku, ktorý vznikne po vytvorení subsystému.
Po označení vstupov a výstupov vyberieme všetky bloky, ktoré majú byť v subsystéme, a voľbou
Edit->Create Subsystem vytvoríme subsystém (obr. 2). Vznikne nový blok, ktorý možno kopírovať či
otvoriť do samostatného okna a ďalej upravovať.
Obr. 1. Model pripravený na tvorbu subsystému
Obr. 2. Subsystém
Vytvorený subsystém môžeme kopírovať a upravovať, avšak ak chceme použiť kópie z rôznymi
hodnotami parametrov, musíme nové kópie editovať. Tento problém je možné vyriešiť napr.
maskovaním subsystému.
15.2. Maska subsystému
Maskovanie subsystému je dostupné po zvolení subsystému voľbou Edit->Mask Subsystem.
Okno, ktoré sa následne otvorí, dovoľuje zadať:
- ikonu subsystému (obr. 3, 4). Zadáva sa pomocou štandardných príkazov MATLABu. V tomto prípade je použitý
iba jednoduchý príkaz na výpis textu disp (obr. 4). Je možné použiť aj príkaz plot(obr. 5)
alebo patch (disp('text'); text(x,y,'text'); disp('sample\ntext');
port_label('input',1,'a'); plot(X,Y); dpoly(num,den,'z-')).
- názvy a prípadné implicitné hodnoty premenných použitých v parametroch blokov maskovaného subsystému,
prípadne príkazy MATLABu, ktoré sa majú vykonať po zadaní hodnôt (obr. 6). Podrobnejší opis:
- jednotlivé zadávacie polia sú v tom poradí, ako sme ich definovali (najskôr a, potom b)
- Assignment môže byť Evaluate (číslo), alebo Literal (reťazec)
- zadavame Prompt (opis premennej) a Variable (meno premennej), ktorá existuje iba v
Mask workspace
- Control type môže byť Edit, Checkbox (1->'on', 0->'off'), Popup
(výber). Ak Popup, potom Popup string obsahuje jednotlivé položky oddelené značkou
| napr. red|blue|green (evaluate=1,2,3, literal='red',...)
- Initialization commands môžeme využiť napr. na kontrolu zadaných parametrov
- Dialógy môžu byť dynamické (zjavovať sa, meniť hodnoty iných parametrov, ...) - cez set_param - viď help
- popis (obr. 7, 8) a prípadne "help" vo formáte html (obr. 7)
Obr. 3. Mask editor - záložka Icon
Obr. 4. Subsystém s maskou
Obr. 5. Subsystém s maskou (Drawing commands: plot([0,1],[0,b]+[b<0]))
Obr. 6. Mask editor - záložka Initialization
Obr. 7. Mask editor - záložka Documentation
Obr. 8. Okno definovania parametrov pre subsystém
Ak chceme zadávať parametre pomocou masky t.j. cez názvy premenných musíme tieto názvy použiť
v parametroch blokov subsystému. Úprava zamaskovaného subsystému je možná voľbou
Edit->Look under mask. Dvojklik na zamaskovanom subsystéme totiž teraz otvorí dialógové
okno (masku) t.j. v našom prípade sa objaví okno ako je ukázané na obr. 8.
Úprava masky zamaskovaného subsystému je možná voľbou Edit->Edit mask....
15.3. Úlohy
- Vytvorte schému uzavretého regulačného obvodu, ktorá sa skladá zo systému
2. rádu s prenosovou funkciou Gr(s) = 1/(s^2+2s+1) a PID regulátora. PID regulátor je poskladaný z proporcionálnej
(Gain), integračnej (Integrator) a derivačnej (Derivative) zložky.
PID regulátor má tvar Gr(s)=Zr+1/(Is)+Ds
- Vytvorte subsystém pozostávajúci z jednotlivých časti (P,I,D) regulátora
- Zamaskujte subsystém. Vytvorte zadávacie polia pre jednotlivé zložky PID regulátora
- Testujte integračnú položku (delenie nulou)
- Vytvorte jednoduchý opis PID regulátora v okne, v ktorom sa definujú položky P, I a D
(popis zadávania, rovnicu regulátora, ...)
- Vytvorte "Help", ktorý podrobne opisuje funkciu regulátora a jeho nastavenie
- Simulujte priebeh riadenia. Výsledky zobrazte pomocou bloku Scope, ktorý má dva vstupy
u a y (t.j. aj dva zobrazované priebehy)