12 Vstup a výstup dat, diskrétní systémy, algebraická smyčka Studijní cíl První část dvanáctého bloku je věnována výměně dat mezi SIMULINKem a oko‐ lím. Zabývat se budeme pouze standardními způsoby tj. výměnou dat mezi SIMULINKem a pracovním prostorem MATLABu a čtením a zápisem do soubo‐ ru. Tématem druhé části jsou systémy obsahující výpočty pouze ve vybraných časových okamžicích tj. diskrétní (či vzorkované) systémy popsané diferenčními rovnicemi. V poslední, třetí části si vysvětlíme co to je algebraická smyčka a jak lze problémy, které ji obsahují, v SIMULINKu řešit.
Doba nutná k nastudování
1 ‐ 2 hodiny
Průvodce studiem Předpokládá se, že čtenář je seznámen s prostředím MATLABu a možnostmi SIMULINKu popsanými v předchozích kapitolách. Pro řešení příkladů jsou též potřeba základní znalosti matematiky, fyziky a z oblasti diferenciálních rovnic. Při studiu je vhodné mít spuštěný MATLAB a SIMULINK a jednotlivé příkazy či funkce hned vyzkoušet a případně získat podrobnější informace využíváním nápovědy k programu. Na závěr jsou opět uvedeny řešené příklady na procvi‐ čení. V textu jsou použity následující typografické konvence: Calibri 11, Bold, Italic Calibri 11 Courier New Courier New Courier New
Courier New
nové pojmy k zapamatování označení klávesy 10, Bold názvy nástrojů MATLABu 10 názvy bloků použitých v programu 10, Italic názvy proměnných použitých v programu názvy parametrů bloků či dialogových oken 10, Bold upřesnění nápovědy (help téma)
KŘP/IMSW Modelování ve výpočtových software
12‐1 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
12.1 Vstup a výstup dat Použitelnost každého programu významně ovlivňuje, jaké jsou možnosti zadá‐ vání vstupních dat a uložení výsledků. V případě, že vstupních dat je málo je možné tato data zadávat v nějakém dialogu 1 po spuštění programu. Podobně je výsledkem několik čísel je možné výsledky (pro použití v dalším programu) ručně přepsat či jednotlivě zkopírovat. V případě, že je potřeba zpracovat větší objemy dat (např. data získaná měřením či jako výsledek jiných výpočtů) je nutná možnost načtení (či zápisu) externích dat z různých zdrojů. SIMULINK (obecně MATLAB) umožňuje načtení a zápis dat v různých formátech nejen standardně do souboru ale podporuje i další zdroje. Např. je možné číst a zapisovat data přímo do zařízení pro sběr dat (s využitím Data Acquisition Tbx, Instrument Control Tbx nebo OPC Tbx), zpracovat a generovat zvuková a obra‐ zová data v různých formátech (příkazy MATLABu, Image Acquisition Tbx) číst či zapisovat do různých databází (s využitím Database Tbx), vyměňovat si dat s jinými běžícími programy prostřednictvím komunikace DDE, ActiveX či TCP/IP. V tomto bloku se budeme zabývat jen základními možnostmi výměny dat mezi modelem SIMULINKu a pracovním prostorem MATLABu a čtením/zápisem dat ze/do souboru. Je potřeba rozlišovat mezi čtením/zápisem jedné hodnoty (da‐ tové struktury) a zápisem časového průběhu (posloupnosti hodnot). V druhém případě je nutné řešit problém dodatečné informace o čase (time stamp) jed‐ notlivých hodnot.
12.1.1 Výměna dat v paměti Nejjednodušší způsob načtení dat do SIMULINKu jsme již používali. Pokud uve‐ deme jako parametr nějakého nemaskovaného bloku modelu SIMULINku sym‐ bolickou konstantu 2 tak se předpokládá, že proměnná s odpovídajícím názvem existuje v pracovním prostoru (base workspace) MATLABu a její hodnota se použije pro inicializaci lokální kopie v pracovním prostoru modelu použitém při výpočtu modelu. V případě maskovaného subsystému musí být příslušná pro‐ měnná vytvořena v rámci vytváření masky a stává se součástí pracovního pro‐ storu modelu. Ukládání do a čtení dat z lokální proměnné Pokud v modelu potřebujeme dočasně uložit nějakou hodnotu (do pracovního prostoru modelu) a na jiném místě zapojení modelu ji přečíst, jsou k dispozici bloky Goto a From z knihovny Signal Routing. Umožňují zejména na jed‐ nom místě ukončit spoj (signál) a na jiných (jednom či více) místech v něm „po‐ kračovat“. Propojení bloku Goto s příslušnými bloky From je pomocí stejného parametru (tag, identifikátor). Viditelnost 3 tagu (Tag Visibility) lze nasta‐ 1
Maskovaný subsystém v SIMULINKu
2
Proměnná, jejíž hodnota je před zahájením výpočtu definována a tato hodnota se během vý‐ počtu nemění
3
Tj. místo, kde lze použít blok From s tímto tagem
KŘP/IMSW Modelování ve výpočtových software
12‐2 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
vit v bloku Goto (viz Obrázek 12‐1) buď na local (tag je dostupný pouze v subsys‐ tému, kde byl použit blok Goto), global (tag je do‐ stupný všude) nebo scope (tag je dostupný ve všech subsystémech, kde se použije 4 blok Goto Tag Visibility s příslušným ta‐ gem). Nastavení viditelnosti je Obrázek 12‐1 Viditelnost tagu bloku Goto zobrazeno v ikoně příslušného bloku. Je‐li tag v hranatých závorkách, jde o lokální viditelnost, bez závorek glo‐ bální a složené závorky označují viditelnost typu scope.
Obecnější řešení umožňují bloky Data Store Memory (vytvoření a inicializa‐ ci paměťového prostoru), Data Store Write (uložení aktuální hodnoty sig‐ nálu) a Data Store Read (vyčtení posledně uložené hodnoty) také z knihovny Signal Routing. Tyto bloky jsou užitečné v případě, že hodnotu určitého signálu potřebujeme na několika místech modelu zapisovat a na něko‐ lika jiných místech číst. Příslušný pojmenovaný prostor pro uložení dat včetně počáteční inicializace se vytvoří pomocí bloku Data Store Memory v pracovním prostoru modelu (ne ve workspace MATLABu). Prostor je dostup‐ ný prostřednictvím bloků Data Store Write a Data Store Read a svého jména v modelu (či subsystému), kde byl vytvořen a ve všech subsystémech zde použitých. Rozměry vytvořeného prostoru musí přesně odpovídat rozmě‐ rům dat ukládaných blokem Data Store Write. V důsledku možnosti zapi‐ sovat na více místech nemusí být zřejmé (zejména v případě použití modelu s různým vzorkováním signálů) z jakého zdroje je aktuální vyčtená hodnota. Data z bloku Data Store Memory nejsou přístupná ve workspace MATLABu po skončení řešení ani v případě, že pro inicializaci použijeme proměnnou defi‐ novanou v MATLABu. Její hodnota a rozměry se použijí pouze pro inicializaci paměťového prostoru v dočasném workspace modelu, který je využíván při výpočtu. Další informace viz nápověda k těmto blokům. Principiální ukázka použití výše uvedených bloků je na Obrázku 12‐ 1. Modře je označena jednodušší varianta s nastavenou lokální viditelností. Složitější varianta je označena červeně. V obou pří‐ padech je signál o třech složkách na jednom místě zapisován do lokální proměnné a na dvou místech jsou hodnoty vyčítány.
Data A
A
Data Store Read
Sine Wave B
B
D
Pulse Generator
C
Data
Data
Data Store Write
Data Store Read1
[A]
[A]
Scope
Scope1
C
Repeating Sequence
Initial value: [0;0;0] Data Data Store Memory
Goto
From
Scope2
[A] From1
Scope3
Obrázek 12‐2 Zápis a čtení z lokální proměnné
4
Podobný význam má použití klíčového slova global před názvem proměnné ve funkcích MATLABu
KŘP/IMSW Modelování ve výpočtových software
12‐3 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
Výměna dat s pracovním prostorem MATLABu Skutečné propojení s pracovním prostorem MATLABu ve smyslu načítání a zapisování časového průběhu signálu umožňují až bloky From Workspace a To Workspace z knihoven Sources a Sinks. U použití těchto bloků je po‐ třeba použít správnou datovou strukturu pro data v pracovním prostoru MATLABu. V případě bloku From Workspace (parametr je název proměnné v pracovním prostoru MATLABu) musí proměnná obsahovat informaci o čase platnosti jed‐ notlivých hodnot (časovou značku, time stamp). Možné jsou dva formáty – dvousloupcová matice a struktura. Maticový formát je možný pouze pro jeden signál (one dimensional). V tomto případě musí první sloupec obsahovat vzrůs‐ tající hodnoty času 5 (v sekundách) a druhý sloupec obsahuje hodnoty signálu v odpovídajícím čase. Pokud je použita struktura pak musí mít následující po‐ ložky nazev.time vektor hodnot časů nazev.signals.dimensions hodnota počtu signálů ve struktuře nazev.signals.values matice hodnot jednotlivých signálů, počet řád‐ ků odpovídá počtu hodnot časů (vektor .time), počet sloup‐ ců odpovídá počtu signálů (hodnota .signals.values)
V parametrech bloku lze nastavit, zda se mají v případě potřeby hodnoty signá‐ lu na při řešení požadovaný čas interpolovat či nikoliv a jaká data mají být pou‐ žita v případě, že simulační čas překročí maximální čas uvedený ve vstupní proměnné. V případě bloku To Workspace se data ukládají do proměnné s názvem uve‐ deným jako parametr bloku ve zvoleném formátu a časech. Jedna možnost je ukládat přivedené signály ve formě matice bez informace o čase. Počet sloupců odpovídá počtu složek signálu při vedeného na vstup bloku. Počet řádků odpo‐ vídá počtu hodnot simulačního času, ve kterých byly prováděny výpočty řešení modelu. Toto platí, pokud jsou parametry bloku Sample time: -1. a Decimation: 1. Hodnoty času je možné získat v automaticky vytvářené proměnné tout v pracovním prostoru MATLABu. Pokud je parametr Sample time na‐ staven na kladnou hodnotu, pak hodnoty na řádcích matice jsou hodnoty sig‐ nálů v časech odpovídajícím násobkům 6 zadané hodnoty času. Kromě intervalu vzorkování lze nastavit ukládání pouze každého n‐tého vzorku – parametr Decimation: n. Dalšími možnými datovými formáty proměnné bloku To Workspace je struktura bez nebo s informací o čase (položka .time). Kromě položek shodných se strukturou popsanou v souvislosti s blokem From Workspace, (tj. .signals. )obsahuje tato struktura ještě položky další a to nazev.blockName
řetězec obsahující jednoznačnou identifikaci bloku (model/subsystem1/…/název_bloku), který proměn‐ nou vytvořil
5
Hodnoty času musí být vzrůstající nicméně nemusí být ekvidistantní
6
Protože je řešení počítáno v jiných časových okamžicích, je odpovídající hodnota signálu získá‐ na interpolací z hodnot řešení v okolí požadovaného času
KŘP/IMSW Modelování ve výpočtových software
12‐4 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
nazev.signals.label
řetězec obsahující název vstupního signálu (pokud existuje)
Na Obrázku 12‐3 je ukázka modelu zapisujícího průběh dvou signálů do proměn‐ né Data v pracovním prostoru MATLABu. V modelu jsou pojmenovány výstup‐ ní signály bloků Sine Wave (A,B) a výstupní signál bloku Mux (C). Ve vlastnos‐ tech (Signal Properties …) signálu C (pravé tlačítko myši nebo položka menu Edit při vybraném signálu) je nastavena vlastnost Show propagated signals na hodnotu on. Název vstupního signálu se uloží jako součást struk‐ tury proměnné Data uvedené v bloku To Workspace. A
Sine Wave
A B
C
Data To Workspace
B
Sine Wave1
Obrázek 12‐3 Uložení průběhu signálu do workspace MATLABu
Další možností jak uložit průběh signálu do proměnné v pracovním prostoru MATLABu je nastavení parametrů okna bloku Scope. Pokud dvojklikneme na ikonu Parametres okna Scope a zvolíme záložku History můžeme nastavit volbu Save data to workspace a následně název proměnné (Variable name) a její formát (stejné možnosti jako u bloku To workspace) – viz Obrázek 12‐4.
12.1.2 Zápis a čtení ze souboru Obrázek 12‐4 Parametry okna bloku Scope
Možnosti SIMULINKu číst a zapisovat data z/do souboru jsou limitovány datovým formátem souboru, který je omezen pouze na binární formát MATLABu. Nelze tedy v SIMULINKu přímo načíst data v jiném formátu. Čtení ze souboru se provede blokem From File z knihovny Sources a zápis blokem To File z knihovny Sinks. Opět je pomocí předepsaného formátu dat v souboru řešen problém současného uložení informace o času (time stamp) jednotlivých hodnot. Parametry bloku From File jsou ukázány KŘP/IMSW Modelování ve výpočtových software
12‐5 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
na Obrázku 12‐5 a parametry bloku To File jsou na Obrázku 12‐6. Výhodou bi‐ nárního formátu MATLABu je, že v jednom souboru pro uložení průběhů (blok To File) může být uloženo několik průběhů. Uložená data jsou buď ve formá‐ tu matice nebo ve formě objektu typu timeseries.
Obrázek 12‐5 Parametry bloku From File
Obrázek 12‐6 Parametry bloku To File
Ukládání do diskového souboru ukažme na následujícím příkladu. Mějme sys‐ tém popsaný diferenciální rovnicí druhého řádu
y′′ + a1 y′ + a0 y = b1u′ + b0u y (t = 0) = y00 y′(t = 0) = y10
u (t = 0) = u00
Tento systém realizujme jako maskovaný subsystém s jedním vstupem a jed‐ ním výstupem. Na vstup subsystému přivedeme po dobu 60 s signál tvaru sinu‐ sovky s amplitudou 2 a periodou T(t) měnící se lineárně od hodnoty T0(t=0) = 10 s po hodnotu T60(t =60) = 2 s. Průběh vstupního i výstupního signálu v ča‐ sech po 0.2 s uložíme do diskového souboru DataSys.mat. Pro snazší zápis modelu SIMULINKu (viz Obrázek 12‐7) upravíme původní dife‐ renciální rovnici druhého řádu na soustavu dvou diferenciálních rovnic řádu prvního. Osamostatníme nejvyšší derivaci a dvojím integrováním převedeme do tvaru bez derivací, přičemž zavedeme substituci integrálu po první integraci veličinou r(t)
y′′ = b1u ′ − a1 y ′ + b0u − a0 y t
y ′ = b1u − a1 y + ∫ (b0u − a0 y )dt 0
t
r (t ) = ∫ (b1u − a1 y )dt 0
t
y = ∫ (b1u − a1 y + r (t ) )dt 0
KŘP/IMSW Modelování ve výpočtových software
12‐6 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
Dále je potřeba dopočítat počáteční hodnotu nové veličiny r(t=0) z počátečních podmínek pů‐ vodní rovnice a rovnice pro první derivaci a ozna‐ čit vstup a výstup modelu
a0
y(t=0)=y00 y'(t=0)=y10 u(t=0)=u 00
y′ = b1u − a1 y + r (t ) y′(t = 0) = y10 = b1u00 − a1 y00 + r (t = 0) ⇒
1
r(0)=y +a y 10
b0
1 s
Gain1
r
1 00
-b u
1 00
r(t)
y(0)=y
00
1 s
b1
u(t)
Gain
y'' + a1y' + a0y = b 1u' + b 0u
Gain2
y (t)
1 y(t)
y
⇒ r (t = 0) = y10 + a1 y00 − b1u00
a1 Ga in3 Z modelu na Obrázku 12‐7 vytvoříme maskovaný Obrázek 12‐7 Model pro volání z MATLABu subsystém, kde všechny potřebné parametry (a1=1, a0=2, b1=2, b0=1) včetně počátečních hodnot (y00=2, y10=‐1, u00=‐1) se zadávají v masce. Tento subsystém doplníme blokem Chirp Signal a blokem To File, kde zadáme hodnoty parametrů v souladu se zadáním podle Obrázku 12‐8.
a =1
a =2
y =+2
b =2
b =1
u =-1
1
0
1
0
y =-1
00
10
00
T =10 s 0 T =2 s
60
u
u(t) y (t)
y
Chirp Signal Subsystem
Sample time> 0.2 s DataSys.mat To File
Scope
Obrázek 12‐8 Model s ukládáním do souboru
V souboru DataSys.mat je proměnná data – objekt typu Timeseries.
12.2 Diskrétní systémy Model v SIMULINKu dovoluje, aby obsahoval jak části spojité v čase (popsané diferenciálními rovnicemi) tak i části diskrétní v čase (popsané diferenčními rovnicemi tj. jejichž hodnoty se mění pouze ve vybraných časových okamži‐ cích). Časové okamžiky změny jedné diskrétní části jsou určeny (ekvidistantním tj. stále stejným) intervalem vzorkování. Model však může obsahovat více dis‐ krétních částí s různým intervalem vzorkování. Základní bloky umožňující vy‐ tvářet diskrétní části modelu jsou soustředěny do knihovny Discrete. Jde jak o bloky ekvivalentní spojitým blokům z knihovny Continuous – např. bloky Unit Delay, Discrete Transfer Function, Discrete State Space – tak o bloky specifické pro diskrétní systémy –např. Zero Order Hold, First Order Hold, Memory.
KŘP/IMSW Modelování ve výpočtových software
12‐7 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
Použití základních bloků Unit Delay a Zero Order Hold pro tvorbu dis‐ krétní části modelu ukážeme na příkladu realizace chování systému popsaného diferenční rovnicí ve tvaru
y (k ) + a1 y (k − 1) + a2 y (k − 2) = b1u (k − 1) + b2u (k − 2) kde symbol k je zkrácené vyjádření diskrétního času Sample time: T tk=t0+kT a T je ekvidistantní interval vzorkování. Rea‐ 1 y(k)=b 1u(k-1)+b 2u(k-2)u(t) lizace provedeme ve formě maskovaného systému, Zero-Order -a1y(k-1)-a2y(k-2) Hold kde vstupem je spojitý průběh vstupního signálu 1 u(t). Výstupem je spojitý signál y(k), který se mění b1 z Gain Unit Delay pouze v časech odpovídajících násobkům intervalu vzorkování T a mezi nimi má konstantní hodnotu. 1 b2 z Interval vzorkování T a koeficienty diferenční rovnice Gain1 Unit Delay1 druhého řádu (a1, a2, b1, b2) jsou parametry masko‐ vaného systému. Zapojení modelu je uvedeno na 1 a2 z Obrázku 12‐9. Spojitý signál u(t) je blokem ZeroGain2 Unit Delay2 Order Hold s parametrem (interval vzorkování) T 1 a1 vyvzorkován tj. v časech vzorkování se sejme aktuál‐ z Gain3 Unit Delay3 ní hodnota spojitého signálu a ta zůstane konstantní do času dalšího intervalu, kdy se opět může změnit. Obrázek 12‐9 Realizace diferenční rovnice Tento signál je bloky Unit Delay zpožděn o jeden krok změny. Parametr Sample time je u všech bloků Unit Delay nastaven na implicitní hodnotu ‐1. To znamená, že doba změny se určí z vlastností vstupního signálu. Podobně je zpracován také výstupní signál y(k) kde sice do‐ chází ke vzniku cyklu (zpětná vazba) ale nejde o algebraickou smyčku (viz ná‐ sledující kapitola), protože vzniklý cyklus obsahuje aspoň blok Unit Delay, který nemá přímý průchod signálu. u(k)
u(k-1)
y (k)
1 y(k)
y (k-1)
y (k-1)
Použití tohoto subsystému včetně průběhů signálů ukážeme na modelu obsahujícím spojitou část (dife‐ renciální rovnice) a tři subsystémy (dife‐ Step -5s+1 renční rovnice) vzorkované s různým interva‐ 24s2 +10s+1 lem vzorkování. Číselné hodnoty parametrů uvede‐ Transfer Fcn né na Obrázku 12‐10 jsou zvoleny tak, aby diskrétní FiM
u(t)
u(t)
Cont
y(t)
y (t)
u(t)
y (k)
D1
y(k)
Scope
System 1 u(t)
y (k)
H
D2
y5(k)
y 5(k)
System 2 u(t)
y (k)
D3 y 10(k)
y10(k)
System 3
System 24y''(t)+10y'(t)+y(t)= = -5u'(t)+u(t) System 1 T = 1 s y(k) - 1.625y(k-1) + .6592y(k-2) = = - 0.151u(k-1) + .1850u(k-2) System 2 T = 5 s y(k) -.7211y(k-1) + .1245y(k-2) = = -.1010u(k-1) + .5044u(k-2) System 3 T = 10 s y(k) -.2710y(k-1) + .0155y(k-2) = = .3306u(k-1) + .4140u(k-2)
Obrázek 12‐10 Model s různým vzorkováním
KŘP/IMSW Modelování ve výpočtových software
12‐8 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
subsystémy dávaly v intervalech vzorkování stejné hodnoty jako spojitá dife‐ renciální rovnice v případě vstupního signálu ve tvaru skoku. Zároveň je využita možnost SIMULINKu označit odlišně vzorkované části jak barevně tak popisem – položka hlavního menu Format->Sample Time Displey->All. Okno s legendou k popisu a barvám signálů je uvedeno na Obrázku 12‐10 též. Na Obrázku 12‐11 je ukázka průběhu vstupních a výstupních signálů celého modelu.
1
0.8
0.6 0.4
0.2 u(t) y(t) y(k) T=1 y(k) T=5 y(k) T=10
0
-0.2
0
10
20
30
40
50
60
Obrázek 12‐11 Průběh spojitých a diskrétních signálů
12.3 Algebraická smyčka Algebraická smyčka vznikne v situaci, kdy pro vyhodno‐ cení bloku (či posloupnosti bloků) je potřeba výsledek vyhodnocení. Odpovídá to zápisu algebraické rovnice ve tvaru x = f(x). Příkladem algebraické smyčky může např. řešení kvadratické rovnice x2 + 4x + 3 = 0 ve tvaru x = ‐ Obrázek 12‐12 Algebraická smyčka ¼(x2+3) (model SIMULINKu na Obráz‐ Warning: Block diagram 'untitled' contains 1 algebraic loop(s). To see more details ku 12‐12). Po startu řešení se v okně about the loops use the command line Simulink debugger by typik "sldebug untitled" MATLABu zobrazí informace o exis‐ in the MATLAB command window. To eliminate this message, set the Algebraic tenci algebraické smyčky (viz text loop option in the Diagnostics page of the Simulation Parameters Dialog to "None" v textovém rámečku) a provede se Found algebraic loop containing: iterační řešení, které by 7 se opako‐ 'untitled/Gain' valo v každém časovém kroku řešení 'untitled/Math Function' modelu. Kromě zvýšené výpočetní 'untitled/Sum' (algebraic variable) náročnosti je zde zejména obecný
7
V uvedeném příkladě nejsou hodnoty signálů časově závislé, tudíž řešení je v jednom časovém kroku a není nutné iterační výpočet opakovat (navíc se v algebraické smyčce žádné parametry nemění).
KŘP/IMSW Modelování ve výpočtových software
12‐9 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
problém řešení nelineárních algebraických rovnic. Pokud řešení vůbec existuje, pak jich může být více. A které se vlastně najde? Numerické řešení vždy začíná z nějakého prvotního odhadu. SIMULINK začíná zřejmě z nulové hodnoty a proto v našem případě najde řešení nejbližší 0 tj. x = ‐1. Ale i řešení x = ‐3 je správné. Pokud potřebujeme jiné řešení, musíme donutit výpočet začít z jiné hodnoty. To je možné docílit buď použitím bloku IC (s parametrem počáteční hodnota výpočtu) z knihovny Signal Attributes nebo použitím bloku Algebraic Constraint z knihovny Math Operations, který ale vyžaduje jiný zápis úlohy. Blok Algebraic Constraint při řešení generuje na svém výstu‐ pu takovou hodnotu, aby dosáhl nulové hodnoty na svém vstupu, tj. úloha musí být formulována ve tvaru f(x) = 0. Parametr bloku opět představu‐ je hodnotu, ze které hledání řešení začíná. Oba způsoby jsou ukázány na Obrázku 12‐13.
Jak se ale pozná algebraická smyčka, když na‐ prosto stejným způsobem zapisujeme diferenci‐ ální rovnici, kde o algebraické smyčce nehovoří‐ me? V případě diferenciální či diferenční rovnice Obrázek 12‐13 Algebraická smyčka s počá‐ teční hodnotou smyčka mezi výstupem a vstupem téhož bloku obsahuje aspoň jeden blok, který nemá přímý průchod (Direct Feedthrough) signálu tj. výstup závisí na stavu 8 bloku, nikoliv přímo na aktuální hodnotě vstupu. Bloků, jejichž výstup závisí na stavu, je poměrně málo. Jsou to některé bloky z knihovny Continuous (např. Integrator, Transfer Fcn, StateSpace, Transport Delay) a z knihovny Discrete (např. Unit Delay, Discrete Transfer Fcn, Discrete State-Space). Zda blok umožňuje či neumožňuje přímý průchod signálu, se dozvíme v nápovědě k bloku v tabulce Characteristic na konci shrnu‐ jící základní vlastnosti bloku – viz např. shrnutí vlastností bloku Transport Delay v následující tabulce. Direct Feedthrough
No
Sample Time
Continuous
Scalar Expansion
Yes, of input and all parameters except Initial buffer size
Dimensionalized
Yes
Zero‐Crossing Detection No
Uveďme příklad obsahující algebraickou smyčku v řešení diferenciální rovnice, kde volba startovací hodnoty iteračního výpočtu algebraické smyčky ovlivní výsledné řešení celé úlohy. Mějme úlohu popsanou soustavou rovnic
8
Stav je vnitřní proměnná bloku, jejíž hodnota je po ukončení zpracování bloku zachována. Výstup bloku se počítá na základě původní hodnoty stavu při zahájení zpracování bloku a vstupy bloku ovlivní hodnotu stavu, která zůstane zachována po ukončení zpracování bloku.
KŘP/IMSW Modelování ve výpočtových software
12‐10 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
u + 3xu − 4 = 0 y′ + y = u 2
y (0) = 0 x(0) = 0 x′(0) = 0
x′′ + x′ + x = y
a chceme získat časové průběhy veličin x a u pro 0 ≤ t ≤ 20. Pro zápis diferenci‐ álních rovnic můžeme využít přepis na soustavu rovnic prvního řádu tj.
u 2 + 3xu − 4 = 0
y′ = u − y
y = ∫ (u − y )dt
y (0) = 0
x′ = r
x = ∫ rdt
x(0) = 0
r′ = y − r − x
r = ∫ ( y − r − x )dt r (0) = 0
Odpovídající model používající blok Algebraic Constraint je na Obrázku 12‐ 2 14. Pro počáteční hodnotu x = 0 jsou možné dvě řešení rovnice u + 0u – 4 = 0 tj. dvě možné počáteční hodnoty u = ±2. Zadáme‐li počáteční hodnotu výpočtu (Initial guess) bloku Algebraic Constraint kladnou dostaneme jedno řešení, zadáme‐li hodnotu zápornou, dostaneme druhé řešení. Obě řešení jsou ukázány na Obrázku 12‐15. Constant
x
y(0)=0 Initial guess: + => u(0)=+2
4
1 s
Initial guess: - => u(0)=-2 Solve f (z) f(z) = 0
3 Product
Gain
z
y
x'(0)=0 r'
Integrator3
1 s
x(0)=0 1 s
r
Integrator1
r
x
Integrator2
x
u
Algebraic Constraint1 Math Function1 u
u2
Add
u
Scope
Obrázek 12‐14 Diferenciální rovnice s algebraickou smyčkou Initial guess: +5 2 u x
1.5 1 0.5 0
0
2
4
6
8
10
12
14
16
18
20
Initial guess: -5 0 u x
-0.5 -1 -1.5 -2
0
2
4
6
8
10
12
14
16
18
20
Obrázek 12‐15 Dvě řešení diferenciální rovnice s algebraickou smyčkou
KŘP/IMSW Modelování ve výpočtových software
12‐11 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
12.4 Příklady na procvičení V kapitole 12.4.1 jsou zadání a v kapitole 12.4.2 řešení příkladů zahrnujících možnosti SIMULINKu zmiňované v této a předchozích kapitolách. Předpokládá se, že při řešení příkladů má čtenář k dispozici MATLAB a SIMULINK a aktivně využívá nápovědu k programu.
12.4.1 Zadání příkladů Př01. Nalezněte časový průběh výstupních signálů všech subsytémů složeného systému po dobu prvních 10 s. Systém je tvořen pěti stejnými subsystémy v zapojení podle schématu. Každý subsystém je popsán stejnou rovnicí se stejnými parametry (a=1, b=2, y0=0, y1=‐1). Signál uB je tvořen pilovým signá‐ lem v rozsahu ±1 a periodou 10 s hodnotou uB(t=0)=0. Pro předání hodnoty signálu uB do jednotlivých subsystémů využijte bloky Goto a From.
3
uA
uB
y
uA
uB
y
uA
uB
y
uA
uB
y
uA
uB
y
y′′ + ay′ + by =
uB 0.2 + u A2
y (t = 0) = y0
y′(t = 0) = y1
Návod: Vytvořte subsystém popisující jednu rovnici (včetně bloku From), zkopí‐ rujte 5x, pospojujte a vytvořte složený výstupní signál. Vytvořte maskovaný subsystém s hodnotami parametrů a, b, y0, y1 zadávanými v masce. Doplňte zdrojem pilového signálu (blok Repeating Sequence) a zobrazením vý‐ sledku. Signál vstupující do bloku Scope uložte do proměnné v pracovním prostoru MATLABu a vytvořte skript pro vykreslení grafu pomocí příkazu plot. Př02. Nalezněte časový průběh (0 ≤ t ≤ 30) řešení – funkce y(t) i x(k) – soustavy diferenciálně‐diferenčních rovnic pro hodnoty α=0.25, α=0.75 a interval vzorkování diferenční rovnice T=0.5 a T=1.5 s. Výsledky vykreslete pomocí skriptu MATLABu (všechna čtyři řešení do jednoho okna obsahujícího 4 gra‐ fy).
y′′ + αx(k − 1) y′ + y = x(k ) + 1 y (t = 0) = 2α x(k ) = (1 − α )x(k − 1) + αy x(−1) = −2
y′(t = 0) = −α
Návod: Vytvořte maskovaný subsystém s hodnotami parametrů α, T zadáva‐ nými v masce a 4x zkopírujte. Samostatně uložte do pracovního prostoru MATLABu diskrétní signály a spojité signály. Vytvořte skript pro vykreslení grafu příkazem plot pro spojité a příkazem stairs pro diskrétní signály. Pro umístění do jednoho okna využijte příkaz subplot.
KŘP/IMSW Modelování ve výpočtových software
12‐12 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
Př03. Nalezněte časový průběh signálů x, y a u po dobu prvních 10 s, je‐li dána soustava rovnic
x′′ + x′ + x = +u y′′ + y′ + y = −u
x′(0) = 0.2 y′(0) = −0.2
x(0) = 0.5 y (0) = −0.5
x 2 − x′y′ + y 2 + u = 0 Návod: Použijte blok Algebraic Constraint s počáteční hodnotou 0.
KŘP/IMSW Modelování ve výpočtových software
12‐13 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
12.4.2 Řešení příkladů Z důvodu menší velikosti souboru a lepšího tisku nebudou grafické průběhy zobrazovány v textu jako hardcopy grafu bloku Scope, ale průběhy budou vy‐ kreslovány v MATLABu pomocí příkazu plot. Př01. Nalezněte časový průběh výstupních signálů všech subsytémů složeného systému po dobu prvních 40 s. Pro snazší zápis převedeme integrací původní rovnice popisující jeden subsys‐ tém na soustavu dvou integrálních rovnic (je potřeba dopočítat počáteční hodnotu substituce r)
⎛ uB ⎞ ⎛ uB ⎞ − by ⎟⎟dt − ay r = ∫ ⎜⎜ y′ = ∫ ⎜⎜ − by ⎟⎟dt 2 2 ⎝ 0. 2 + u A ⎠ ⎝ 0. 2 + u A ⎠ y = ∫ (r − ay )dt
r (0) = y1 + ay0
y ( 0) = y 0
Potom je řešení možné zapsat jako model obsahující zdroj signálu uB a jeho zavedení do bloku Goto (s nastavením viditelnosti global), jedním maskova‐ ným subsystémem obsahujícím pět dalších subsystémů, kde vstup signálu uB je řešen blokem From a blokem Scope pro zobrazení průběhu, který je zároveň využit pro uložení zobrazovaných průběhů do proměnné v pracovním prostoru MATLABu. Zapojení a nastavení parametrů bloků From a Goto následuje
b uB From uA
y1+a*y0
y0
Math Function
1 s
1 s
2
Integrator1
Integrator
1
u
1
y
y
a
0.2
Product Gain
Constant
1 y 3
uA
y
Gain Subsystem 1
uA
y
uA
Subsystem 2
y
Subsystem 3
uA
y
Subsystem 4
uA
y
Subsystem 5
uB
u
Goto
Repeating Sequence
Time values: [0 2.5 7.5 10] Output values: [0 -1 1 0] a=1 b=2 y0=0 y1=1
y
Scope
Subsystem
KŘP/IMSW Modelování ve výpočtových software
12‐14 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
Výsledný průběh signálů včetně nastavení parametru bloku Scope a skriptu MATLABu pro vykreslení grafu je uveden dále 2
uB
y1
y2
y3
y4
y5
1.5 1 0.5 0 -0.5 -1 -1.5 -2
0
5
10
15
20
25
30
35
40
t =ScopeData.time; u =ScopeData.signals.values(:,1); y1=ScopeData.signals.values(:,2); y2=ScopeData.signals.values(:,3); y3=ScopeData.signals.values(:,4); y4=ScopeData.signals.values(:,5); y5=ScopeData.signals.values(:,6); h=plot(t,u,'k--',t,y1,t,y2,t,y3,t,y4,t,y5); axis([0,40,-2.0,2.2]) set(h,'LineWidth',3) grid h=legend('u_B','y1','y2','y3','y4','y5'); set(h,'Location','NorthEast') set(h,'Orientation','horizontal')
Př02. Nalezněte časový průběh (0 ≤ t ≤ 30) řešení soustavy diferenciálně‐ diferenčních rovnic pro hodnoty α=0.25, α=0.75 a interval vzorkování dife‐ renční rovnice T=0.1 a T=1.5 s.
y′′ + αx(k − 1) y′ + y = x(k ) + 1 y (t = 0) = 2α x(k ) = (1 − α )x(k − 1) + αy x(−1) = −2
y′(t = 0) = −α
Pro snazší zápis převedeme diferenciální rovnici na soustavu dvou rovnic
v(0) = y′(0) = −α y (0) = 2α
y′ = v v′ = x(k ) + 1 − αx(k − 1)v − y
a výsledné zapojení subsystému 1 a celkového modelu je Sample time: T
α =0.25
1 y(t)
D1
Gain1
α =0.75
In.cond.: -alfa Cont
2
1
FiM
x(k)
1
x(k)
z
Cont v (t)
x(k-1)
1 s
T=0.5 y (t)
Cont
x(k)
y (t)
Cont
alfa Gain
D1
Cont
α =0.25
T=1.5
y (t)
Save format: Structure With Time Sample time: -1
Cont D1
v (t) Cont
α =0.75 T=1.5
x(k-1)
Product
y (t)
1-alfa Gain2
KŘP/IMSW Modelování ve výpočtových software
x(k)
x(k)
DataS To Workspace
D1
Subsystem2
Integrator
x(k)
Cont Subsystem1
Add
D1
Unit Delay
D1
1 s
In.cond.: 2*alfa
Integrator1
In.cond.: 1 D1
Cont
alfa
Cont
Zero-Order Hold
T=0.5
y (t)
D2
DataD1 To Workspace2
Cont Subsystem3 D2 D2
Subsystem4
12‐15 (18) 3.12.11
DataD2 To Workspace1
František Dušek KŘP FEI Univerzita Pardubice
Skript pro vykreslení grafů z hodnot uložených v proměnných DataS, DataD1 a DataD2 může být např. ve tvaru ts=DataS.time; t1=DataD1.time; t2=DataD2.time;
ys=DataS.signals.values; x1=DataD1.signals.values(:,1); x2=DataD1.signals.values(:,2); x3=DataD2.signals.values(:,1); x4=DataD2.signals.values(:,2);
subplot(2,2,1), plot(ts,ys(:,1),'r','LineWidth',2) hold on, stairs(t1,x1,'b','LineWidth',2), grid title('\alpha=0.25 T=0.5','FontSize',14) subplot(2,2,2), plot(ts,ys(:,2),'r','LineWidth',2) hold on, stairs(t1,x2,'b','LineWidth',2), grid title('\alpha=0.75 T=0.5','FontSize',14) subplot(2,2,3), plot(ts,ys(:,3),'r','LineWidth',2) hold on, stairs(t2,x3,'b','LineWidth',2), grid title('\alpha=0.25 T=1.5','FontSize',14) subplot(2,2,4), plot(ts,ys(:,4),'r','LineWidth',2) hold on, stairs(t2,x4,'b','LineWidth',2), grid title('\alpha=0.75 T=1.5','FontSize',14)
α=0.25 T=0.5
α=0.75 T=0.5
10
9 8
8 7 6
6 5
4 4 2
3 2
0 1 -2
0
5
10
15
20
25
30
0
0
5
10
α=0.25 T=1.5
15
20
25
30
20
25
30
α=0.75 T=1.5
5
20
4 15 3 2
10
1 5
0 -1
0 -2 -3
0
5
10
15
20
25
30
-5
0
5
10
15
KŘP/IMSW Modelování ve výpočtových software
12‐16 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
Př03. Nalezněte časový průběh signálů x, y a u po dobu prvních 10 s, je‐li dána soustava rovnic. Pro zápis diferenciálních rovnic můžeme využít přepis na soustavu rovnic prvního řádu tj.
x′ = r x(0) = 0.5 r ′ = u − x − v r (0) = 0.2
y′ = s s′ = −u − y − s
y (0) = −0.5 s(0) = −0.2
x 2 − rs + y 2 + u = 0
Potom odpovídající model v SIMULINKu je např. u2
x
Math Function1
x'(0)=0.2 1 s
u r'
x(0)=0.5 1 s
r
x
x^2
Integrator1
r
r
Integrator2
x
s f (z)
y ^2
Solve f(z) = 0
z
u u y
Algebraic Constraint1
u
Scope
s
Add
y'(0)=-0.2
y(0)=-0.5
1 s
1 s
u
Math Function2 u
s' y
2
s
Integrator
y
Integrator3
a časové průběhy sledovaných signálů jsou 0.6 u x y
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
0
1
2
3
4
5
6
7
8
9
10
KŘP/IMSW Modelování ve výpočtových software
12‐17 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice
Pojmy k zapamatování Okruhy problémů: výměna dat mezi SIMULINKem a MATLABem, čtení a zápis průběhu signálů do souboru, diskrétní systémy v SIMULINKu, algeb‐ raická smyčka a její řešení Použité nástroje:
Library Browser, Mask Editor
Bloky: Chirp Signal, Data Store Memory, Data Store Read, Data Store Write, From Workspace, Gain, Goto, In, Mux, Out, Scope, Sum, To Workspace, Unit Delay, Zero-Order Hold
Otázky na procvičení 1. 2. 3. 4. 5. 6. 7. 8. 9.
Použijeme‐li symbolickou konstantu jako parametr bloku kde musí být definována? Jaké informace musí obsahovat signál, který má být načítán během řešení modelu SIMULINKu? Který další blok kromě To Workspace umožňuje zapsat (uložit) průběh signálu do pracovního prostoru MATLABu? Jaké je hlavní omezení – z pohledu využití datových souborů jinými pro‐ gramy – bloků From File a To File? Co zajišťují bloky Unit Delay a Zero-Order Hold? Jaké jsou možnosti zadat interval vzorkování signálu? Jak vznikne algebraická smyčka? Jak můžeme ovlivnit řešení algebraické smyčky, jaké bloky máme pro ten‐ to účel k dispozici? Co označuje pojem Direct Feedthrough?
Odkazy a další studijní prameny • • •
•
elektronická dokumentace k programu SIMULINK – v „Reference / Simu‐ link Graphical User Interface“ část „Simulink Mask Editor“ elektronická dokumentace k programu SIMULINK – v „User's Guide / Managing Blocks“ část „Using the Embedded MATLAB Function Block“ elektronická dokumentace k programu SIMULINK – v „Blocks “ části „User‐Defined Functions / Embedded MATLAB Function“ a „User‐ Defined Functions / Fcn“ elektronická dokumentace – www.mathworks.com/help/
KŘP/IMSW Modelování ve výpočtových software
12‐18 (18) 3.12.11
František Dušek KŘP FEI Univerzita Pardubice