Gépészmérnöki, Informatikai és Villamosmérnöki Kar Automatizálási Tanszék
Marcsa Dániel 2015. április 27.
Bevezet® a Scilab és Xcos használatába Laboratóriumi gyakorlathoz útmutató
1.
Bevezet®
Ez a gyakorlati útmutató három ingyenes program (Scilab, Xcos, PSpice) alapjainak megismeréséhez, azok alapszint¶ kezelésének elsajátításához nyújt segítséget. A programok bemutatásának célja, hogy a hallgatók készségszinten elmélyítsék és tovább gyarapítsák a programok használatához szükséges ismereteket.
A programok használatával elsajátított ismeret a
tanult tantárgyak (Szabályozástechnika, Elektrotechnika, ...) sikeres abszolválásához szükségesek, valamint a különféle házi feladatok, szakdolgozat, diplomamunka igényesebb elkészítésében nyújthatnak segítséget. A címben említett három programmal a hallgatók már korábban találkozhattak más tantárgyak keretein belül. Ennek dacára azt feltételezzük, hogy a hallgatók most találkoznak el®ször a programokkal, és mindegyik esetben az alapfogalmak bemutatásával, ismétlésével kezdjük a leírást.
2.
Scilab
A Scilab [1] egy nyílt forráskódú - s így ingyenesen letölthet® és szabadon használható - programr környezet, tudományos és mérnöki számítások elvégzésére. A Scilab a Matlab -hoz [2] hasonló környezet. Az el®bb említettek alátámasztására világszerte sikeresen alkalmazzák oktatási, kutatási és ipari feladatok megoldására.
Több száz el®re megvalósított matematikai függvényt
tartalmaz. Ezen függvénykészlethez az ATOMS portálon keresztül még rengeteg különböz® szakterülethez kapcsolódó modul letölthet®, mint például lineáris algebra, optimalizálás, modellezés és szabályozás, stb. . A program támogatja a 2D-s és 3D-s grakus ábrázolásokat. A Scilabhoz tartozik a kés®bbiekben szintén bemutatásra kerül® Xcos [3] dinamikus rendszermor dellez® és szimulátor. A Matlabot használók számára az Xcos a Simulink -re [4] emlékeztet.
2.1. Alapok A Scilab alapesetben az 1. ábrán látható felülettel indul. A felület f®bb elemei a következ®k:
•
Aktuális könyvtár
: az aktuális munkakönyvtár állományainak megjelenítése. A könyv-
tárban lév® állományok közvetlenül (kurzor segítségével) megnyithatók szerkesztésre, elindíthatók, törölhet®k.
•
Parancsablak
: az el®re deniált Scilab utasítások megadása, a Scilab szkriptek és függ-
vények meghívására szolgál. A parancsokat a parancs prompt (>) sorába írjuk. 1
1. ábra: A Scilab kezel®i felülete.
•
Változók
: az el®re deniált, megadott változók listája (név, érték vagy a mátrix mé-
rete, típus). A változóra duplán kattintva, annak értéke az erre szolgáló külön felületen szerkeszthet®.
•
Korábbi parancsok
adott parancsok. navigálhatunk.
: munkamenetenként csoportosítva hozzáférhet®ek a korábban ki-
Ezek között a
parancsablakban
A felület természetesen testre szabható. Ehhez az
a fel és le gombok segítségével is
Edit/Preferences menü használható, illetve
a felület f®bb elemei tetszés szerint eltüntethet®k, vagy külön ablakban megjeleníthet®ek, illetve a drag and drop módszerrel ismét csatlakoztathatóak. A Scilab rendszernek a Matlab-hoz hasonlóan a magja egy mátrix m¶veletekre, mátrixok használatára felkészített parancsértelmez®.
A m¶veletek alapeleme tehát a kétdimenziós (n
sorral és m oszloppal rendelkez®) mátrix. A mátrix speciális esete a skalár (egyelem¶ mátrix) és a sor- vagy oszlopvektor (egy sorból, vagy egy oszlopból álló mátrix).
A mátrix elemei
automatikusan 8 bájt széles lebeg®pontos módban (double - -1,7e-308-tól +1,7e308-ig) ábrázolt értékek.
A Scilab IEEE-szabvány (IEEE-754) szerinti számábrázolást használ, ami lehet®vé
teszi, hogy a valós számok mellett 3 kitüntetett kód is ábrázolható legyen: Nan, Inf, -Inf. Ezek rendre a deniálatlan értéket (Nan, not a number ), valamint a pozitív (Inf ) és negatív (-Inf ) végtelent jelölik.
Ezekkel bizonyos korlátozások mellett m¶veletek is végezhet®k.
A mátrix
elemeinek indexelése a soron és oszlopon belül 1-t®l kezd®dik. Deniálható az üres mátrix is, amelynek jelölése
[ ].
A mátrixok esetében deniált m¶veletek, mint az összeadás, kivonás, szorzás, transzponálás (komplex elem¶ mátrix esetén a konjugált komplex transzponáltja), közvetlenül elvégezhet®k.
2
Osztás esetében kétféle lehet®ség áll rendelkezésre: balosztás (X=K\B a
felírt egyenletrendszer megoldása), jobbosztás (X=B/K az
XK=B
KX=B
mátrix alakban
egyenletrendszer megoldása).
p>1 egész, akkor K^p ismételt szorzással képK^p=V*D.^p/V, ahol [V,D]=spec(K), ahol a spec utasítás
Hasonlóképpen végezhet® el a hatványozás (ha z®dik (K^p = kiszámítja a
K*K* | {z...*K}), K
különben
p
mátrix sajátértékeit), az elemenkénti szorzás a
.
(pont) operátor segítségé-
vel (X=K*.B), az elemenkénti osztás (X=K./B) és az elemenkénti hatványozás
X=K.^p.
Ezen
m¶veleteket, utasításokat kés®bb részletezzük. A standard függvények (sin,
cos, sqrt, exp, log, log10 stb.) és elemi matematikai függvények (fix, floor, ceil, round, real, imag, conj, abs, angle, sign stb.) elemenként hajtódnak végre. Vannak azonban mátrixfüggvények is, amelyeknek a neve 'm' bet¶re végz®dik (expm, logm, sqrtm, stb.), ezek argumentuma és eredménye is mátrix. Vannak speciális mátrixok, mint az egységmátrix, a csak nulla elemeket tartalmazó mátrix és a tiszta 1-elem¶ mátrix.
ones(n,m)
Ezek megadására rendre az
utasítások szolgálnak, ahol
n
és
m
eye(n,m),
a
zeros(n,m)
a sorok és az oszlopok száma.
tók véletlenszám-elem¶ mátrixok egyenletes vagy normális eloszlás szerint a
és az
Generálha-
rand(n,m)
és a
rand(n,m,'normal') függvényekkel. A véletlenszám generátor egy tetsz®leges kezd®értékre állítható be a rand('seed',k) paranccsal, ahol k egy tetsz®leges szám, ami mindig ugyanazokat a számokat eredményezi. Ez a programfejlesztéseknél hasznos lehet. A rand('seed') alaphelyzetbe állítja a normális eloszlás szerinti véletlenszám-generátort. A függvényeket újabb függvényekbe és programokba szervezhetjük. A C-nyelvhez hasonlóan használhatók feltételes utasítások (if,
else) és szervezhet®k ciklusok (for, while). Léteznek relációs és logikai függvények (find, exist, isnan, isempty, type, strcmp, stb.). Utasítások
.sce fájlba foglalhatók, és a exec .sce parancs hatására végrehajthatók. Kialakíthatók a szokásos módon függvények .sce fájlban a |function kulcsszó után, és meghívhatók a névvel paramétereket átadva neki. A függvények és szkriptek fejlesztése a Scilab saját szöveges szerkeszt®je, a SciNotes segítségével célszer¶, ahol a hibakeresést és javítást segít® szokásos eszközök rendelkezésre állnak. A tipikus lineáris algebrai és jelfeldolgozási feladatok megoldását professzionális (gyors és numerikusan robusztus) algoritmusokat használó függvények támogatják.
Az
inv(K)
a
mátrix invertálást, a balosztás és/vagy jobbosztás a lineáris egyenletrendszer megoldását, a
[V,D]=spec(K) a sajátvektor/sajátérték számítást, a pinv(K) a Moore-Penrose-féle inverz és az [U,S,V]=svd(K) a szinguláris érték felbontás számítását végzi el.
pszeudo-
2.2. Parancsablak használata A Scilab elindításakor a parancsértelmez® ablakban az alábbi üzenetet jelenik meg.
Startup execution: loading initial environment --> A fenti üzenet mellett a már telepített modulokat is kilistázza a Scilab. Itt említjük meg, hogy a Scilab igen jól szervezett és részletes súgóval rendelkezik, amely egyszerre több lehet®séget is biztosít valamely információhoz történ® hozzáféréshez. Rendelkezésre áll súgórendszer a hozzá tartozó böngész®vel, amely a Scilab és az összes telepített kiegészít® modul leírását
3
2. ábra: A Scilab súgójának felülete.
tartalmazza. A legtöbb utasításhoz, adott típusú m¶veletet végz® függvények csoportjához és a modulokhoz is tartoznak mintapéldák, a m¶ködés megértését el®segít® egyszer¶ programok. A súgó felületét az 2. ábra mutatja. A súgót a
help
parancs parancsablakba történ® begépelésével jeleníthetjük meg, melyben
tetsz®legesen kereshet®k az egyes utasítások. Emellett lehet®ség van adott utasításra rákeresni a parancsablakban, ha begépeljük:
-->help utasitás_név Ezen utasítás hatására a súgónak az adott utasításra vonatkozó fejezete nyílik meg. Ily módon még a
help
parancs használatáról is kaphatunk információt.
A parancsablakban végrehajthatunk egyszer¶ matematikai m¶veleteket, például:
-->sqrt(11*4+5) ans = 7
4
Az
sqrt(a)
függvény az
a
változó négyzetgyökét számítja. Az
ans (answer)
a Scilab egy
speciális, beépített változója, értéke mindig a legutolsó parancs végrehajtásakor keletkezett eredmény, ha nem adtuk meg, milyen változónéven tárolja az eredményt, vagyis a legutolsó parancs nem tartalmazott értékadást. A Scilab egyéb, fontosabb beépített változói közül csak az alábbiakat soroljuk fel.
Nagyon fontos, hogy a beépített változók elé mindig % jelet kell
tenni, például
%pi = 3.1415926535897931159980 %i = sqrt(-1) = i Az
%i változók deníciójából látszik, hogy a Scilab komplex számokat is képes kezelni.
Pél-
dául:
-->sqrt(- %pi)+ %pi ans = 3.1415927 + 1.7724539i Az értékadó utasítás pedig a következ®képpen néz ki:
-->THX = 1138 THX = 1138 A Scilab különbséget tesz nagy- és kisbet¶k között. Ha nem szeretnénk, hogy a Scilab minden utasítás végrehajtása után beszámoljon az eredményr®l, akkor az utasítás után tegyünk
;-t
(pontosvessz®t).
3. ábra: A munkaterület változói.
5
4. ábra: A változók értékeinek módosítása.
Bármely változó értékét egyszer¶en lekérdezhetjük nevének begépelésével. A rendelkezésre
Variable Browser részében táblázatos formában kerülnek Variable Browoser látható. A táblázat tartalmazza a változó
álló változók a Scilab felületének nyilvántartásra. A 3. ábrán a
nevét (Name ), értékét (Value ), típusát (Type ) és láthatóságát (Visibility ). A változók értékét új értékadással és egy szerkeszt®felület segítségével is módosíthatjuk. A szerkeszt®felület (lásd 4.
ábra) eléréshez az adott változó nevére kell kattintani.
A változók böngészésére szolgáló
ablak közvetlen lehet®séget biztosít a változók értékeinek grakus megjelenítésére, melyr®l a kés®bbiekben még szó lesz. Ahogy azt korábban említettük, a Scilab bels® számábrázolása igazodik a megfelel® IEEE szabványhoz. Ez azt jelenti, hogy lehet®ség van a mínusz és plusz végtelen (-inf, nálatára. Ha egy m¶velet a Scilab számára értelmezhetetlen, akkor az eredmény Number).
A nullával való osztás az, ami ezt eredményezi.
inf) haszNan (Not a
Azonban ha ezt beírjuk a Scilab
parancsablakába a kövekez® üzenetet kapjuk:
-->1/0 !--error 27 Division by zero... Ahhoz, hogy a nullával való osztás kezelni tudja a Scilab, a számábrázolását át kell állítani az alapbeállításként alkalmazott
ieee(0)
helyett
-->ieee(2) -->1/0 ans = Inf
6
ieee(2)-re:
--> %inf/%inf ans = Nan A Scilab széleskör¶ használhatóságának titka, hogy a mátrixokkal ugyanolyan könnyen végezhetünk m¶veleteket, mint skalárokkal. Bármely változó értéke (komplex elem¶) mátrix is lehet. A mátrixok elemeit [ ] zárójelek között sorfolytonosan adhatjuk meg. Az elemeket szóköz (space) vagy vessz® (,) választhatja el a soron belül. A sor végén új sor (enter) vagy pontosvessz® (;) állhat, az utolsó sor utolsó elemét közvetlenül a ] zárójel követi. Ha a gépelés során az összetartozó szintaktikai egységeket egy sorban nem tudjuk megadni (a mátrix sorának elemeit, vagy az utasítást, vagy egy függvény paramétereit stb.), akkor (elemhatáron, pl. valós szám vagy változó név után), három pontot (. . . ) téve a sor végére, az értékadás vagy függvényhívás stb. folytatható az új sorban. A mátrix egy absztrakt eleme lehet egy teljes mátrix is, így nehézség nélkül deniálhatunk és kezelhetünk blokkmátrixokat is. Világos, hogy használhatunk változókat is, amelyek szintén mátrixok. A mátrixok elemeire indexeikkel hivatkozunk, de skalár változó esetén nem kell indexet megadni, és vektor esetén pedig egy index megadása elegend®. Az indexek helyén változókat tartalmazó kifejezés is állhat.
A mátrix elemeinek megadásakor az elemet kijelöl® indexeket
vagy kifejezéseket gömböly¶ zárójelben (()), vessz®vel elválasztva adjuk meg, pl.
b(2).
K(1,2), vagy
Egyszerre egy mátrixblokkot is kijelölhetünk, amely az eredeti mátrixból úgy keletke-
zik, hogy megmondjuk, mely sorokból és oszlopokból kell kivenni a mátrixblokk elemeit, pl.
K([1,3],[2,4]).
Ilyenkor az elemet deniáló indexpár helyén egy-egy vektort (vagy vektort
eredményez® kifejezést) adunk meg, ahol az els® vektorban álló számok mondják meg, hogy mely sorokból szelektálunk, és a második vektorban álló számok mondják meg, hogy mely oszlopokból szelektálunk. A kijelölt sorok és oszlopok találkozási helyén álló elemek adják az eredménymátrixot. Létezik egy rövidített kijelölési lehet®ség is. Ha a vektor helyére kett®spontot teszünk, akkor az els® vektor helyén a mátrix minden sorát, a második vektor helyén pedig mindegyik oszlopát jelöljük ki, pl.
K(:,[3,4]),
illetve
K([1,2],:),
ami megadja a
harmadik és negyedik oszlopában lév® elemeket, illetve a
K
mátrix minden sorának
K mátrix els® és második sorában lév®
összes elemet. Bármelyik vektor helyén megadhatunk egy intervallumot is úgy, hogy a kezdete és vége közé kett®spontot teszünk, pl.
K(2:5,3)
illetve
K(5,1:3),
azaz a
K
mátrix második
sortól az ötödik sorig lév® elemek közül azokat, melyek a harmadik oszlopban helyezkednek el, illetve az ötödik sor azon elemeit, melyek az els® oszloptól a harmadik oszlopig helyezkednek el a
K
mátrixban. Bármelyik vektor helyén megadhatunk egy ekvidisztáns lépésköz¶ sorozatot is
úgy, hogy megadjuk a kezd® indexet, majd kett®spont után a lépésközt, majd újabb kett®spont után a fels® index korlátot, pl.
K(:,4:-1:1),
mely azt jelenti, hogy az összes sor azon elemei,
melyek az els® oszloptól a negyedik oszlopig helyezkednek el a mátrixban. A
4:-1:1
kifejezés
még annyit tesz, hogy a negyedik oszloptól az els® oszlopig (visszafelé) írja ki az elemeket. Lehetséges a mátrixot oszlopfolytonosan egy hosszú vektorba kiteríteni, pl.
b = K(:) révén.
Ilyenkor a hosszú vektorban az eredeti mátrix els® oszlopát a második oszlop, azt a harmadik oszlop stb.
követi.
Ha viszont az értékadó utasítás baloldalán áll A(:), amit a jobboldalon
egy vele összhangban lév® hosszúságú hosszú vektor követ, akkor az el®bbi fordítottja játszódik le, az új mátrix mérete az A mátrix aktuális méretének megfelel® lesz, de elemei a b hosszú
7
vektorból állnak majd el®
K(:) = b
esetén. Ez a parancs a mátrixok könny¶ átstrukturálását
teszi lehet®vé. Nézzünk néhány egyszer¶ példát. A mátrix megadása az alábbi módon történhet:
-->K = [2 4; 6 8] K = 2 6
4 8
vagy
-->K = [2 4;... -->6 8] A mátrix létrehozásakor az oszlop elemit
szóközzel vagy ','-vel (vessz®vel), a sorokat pedig
';'-vel (pontosvessz®vel) választjuk el egymástól. Tehát egy sorvektort például a
-->b = [3 9]; utasítással hozhatunk létre. Természetesen hivatkozhatunk egy mátrix (vagy vektor) bármelyik elemére, sorára vagy oszlopára, illetve blokkjára. A következ®kben erre látunk néhány példát:
-->K(2,1) ans =
% a második sor els® eleme
6 -->K(:,2) ans =
% a második oszlop összes eleme
4 8 -->K(1,:) ans = 2
% az els® sor összes eleme 4
Nagyobb mátrix esetében mindezt tovább bonyolíthatjuk. könnyedén összeszorozhatjuk:
-->K*b !--error 10 Inconsistent multiplication. 8
A
b
vektort és a
K
mátrixot
De nem így, mivel
b
sorvektor. A szorzás helyes sorrendje:
-->b*K ans = 14
20
vagy
-->K*b' ans = 10 22 ahol
'
(aposztróf ) a transzponált képzésének operátora (fordított aposztróf
`
nem m¶ködik).
Egy egyenletrendszer megoldásához rendelkezésre állnak különféle beépített direkt (LU felbontás, Cholesky felbontás stb.) megoldók.
és iteratív (GMRES, prekondícionált konjugált gradiens)
Azonban a legkézenfekv®bb, és többségében a legjobban alkalmazható módszer a
balosztás (\ - backslash), mely a következ®képpen néz ki, a már el®z®ekben deniált K mátrix b vektor esetében:
és
-->K\b' ans = 1.5 0 Még fontos megemlíteni az alapoknál már bemutatott mátrix hatványozását. leképpen történhet, a teljes mátrix hatványozásával (K^3
hatványozásával (K.^3). A
K
-->K^3 ans = 432 944
-->K.^3 ans = 8 216
vagy annak elemenkénti
mátrix harmadik hatványa és az elemenkénti harmadik hatványa
a következ® lesz:
296 648
= K*K*K),
Ez kétfé-
64 512 9
Adott mátrix determinánsának, inverzének, sajátértékeinek és szinguláris értékeinek számítására rendre a
det, inv, spec, svd
utasítások szolgálnak. Például az
K
mátrix sajátértékei
az alábbiak:
-->spec(K) ans = - 0.7445626 10.744563 length
Egy vektor vagy mátrix dimenzióinak lekérdezéséhez a
és a
size
utasításokat hasz-
nálhatjuk.
-->length(b') ans = 2 -->size(K) ans = 2
2
Természetesen egyéb függvényeknek is lehetnek mátrixok az argumentumai.
Egyes mátrix-
és vektortípusokra gyakran lehet szükségünk és ezek el®állítása f®leg nagy sor- és oszlopszám esetén igen fáradságos lenne a fenti módszerekkel. Ezért erre külön utasítások állnak rendelkezésre (pl.
eye, ones, zeros, hank, toeplitz).
Fontos még megemlíteni, hogy a Scilab-on belül különleges szerep tulajdonítható a sorvektoroknak. Minden sorvektorhoz hozzárendelhet® ugyanis egy olyan egyváltozós polinom, melynek együtthatói egy sorvektor elemei. Tehát például a
p = [1 1 3 8]
sorvektorhoz a
8x3 + 3x2 + 1x + 1 polinomot rendeljük hozzá. Ezt a következ®képpen lehet megtenni:
-->P = poly(p,"x","coeff") P = 2 3 1 + x + 3x + 8x A fentiekb®l látszik, hogy a polinom konstans tagja a
p
sorvektor els® eleme, míg a legma-
gasabb hatványkitev®j¶ tagja az utolsó eleme. Ebb®l következik, hogy egy
fokú polinom
n + 1 elem¶ sorvektor szükséges. A Scilabban a horner(p,x) p sorvektorral adott polinom tetsz®leges helyen felvett értékének (pl.: x = 2)
megadásához következésképp egy utasítás szolgál a
n-ed
számításához.
10
-->horner(P,x) ans = 79 A
P
polinom deriváltját a
derivat(P)
utasítással számíthatjuk.
-->q = derivat(P) q = 2 1 + 6x + 24x Természetesen kiszámolhatjuk két polinom szorzatát is melyhez nem kell külön függvény használni, hanem a
*
(szorzás) m¶velettel ez könnyen megtehet®, például:
-->P*Q ans = 2 3 4 5 1 + 7x + 33x + 50x + 120x + 192x
A Scilab természetesen eltárolja az összes létrehozott változót (lásd Adott változó törlésére a pedig a
clear
clear változó_neve
Variable Browser).
parancs szolgál, míg az összes változó törlésére
utasítást kell kiadni.
Ha munkánkat befejeztük, az eredményt tartalmazó változót vagy változókat elmenthetjük kés®bbi felhasználás céljára. Erre a
Polinom
save utasítás szolgál. Például a P és q polinomok elmentése save('Polinom.sod','P','q'). A .sod formátum a
néven a következ®képp tehet®:
Scilab saját formátuma (Scilan Open Data), mely HDF5 formátumban tárolja az elmentett adatokat. A
save
load utasítással tölthetjük be. Itt a változók Polinom.sod), mely betölti a Polinom.sod a P és q polinomokat) tölti be.
utasítással elmentett változókat a
neveit nem kell megadni, csak a le nevét (load állományba elmentett változókat (jelen esetben
Számos további utasítást a szaktárgyakban ismertetünk.
2.3. Adatok garkus megjelenítése A Scilab lehet®séget ad két- és háromdimenziós grakai objektumok létrehozására és megjelenítésére.
Ebben a fejezetben csak a kétdimenziós megjelenítéssel foglalkozunk, melyhez a
plot(x,y)
utasítást kell használni. Az utasítás segítségével az aktuális grakus ablakba (ha
plot utasítás létrehoz egyet) megjeleníthetjük a kívánt függvényt. A görbe hogy a síkban [x(i); y(i)] koordinátákkal adott pontokat a Scilab egyenes
nincs ilyen, akkor a úgy keletkezik,
szakaszokkal összeköti, például (lásd 5. ábra):
11
5. ábra: A
plot
utasítás eredménye a grakus ablakban.
-->f=50; t=0:1/50/100:1/50; y=1*sin(2*%pi*f*t); plot(t,y); plot utasítással több görbét is megjeleníthetünk, változtathatjuk a görbék színét típusát plot utasítás súgóját (help plot). A Scilab ezen kívül számos más síkbeli és térbeli grakus ábrázolási A
(szaggatott, pontozott, lépcs®s stb.). Ezekkel a lehet®ségekkel kapcsolatban lásd a
módot ismer. A grakont és a tengelyeket feliratokkal láthatjuk el. Erre a
6. ábra: Az ábra szerkesztése.
12
title, xlabel, ylabel
uta-
sítások szolgálnak (lásd 6.
ábra).
Vetít®vonalakat a
set(gca(),"grid",[1 1])
utasítással
rajzoltathatunk ki. Valamint tetsz®legesen állítható a vonal színe, a feliratok háttérszíne, illetve jelmagyarázat is rendelhet® a görbékhez, a t®ségek kihasználása után a 6. látható,
ATEX [5] L
ábrát kapjuk.
legend
parancs segítségével. Különféle lehe-
Valamint, ahogy a 6.
ábra jelmagyarázatánál
segítségével könnyen kiírathatók a görög bet¶k, vagy akár a megjelenített
függvény matematikai képlete is megjeleníthet®.
A 6.
ábrát a következ® néhány sor adja:
f=50; t=0:1/50/100:1/50; y=1*sin(2*%pi*f*t); plot(t,y); f=50; t=0:1/50/100:1/50; y=1*sin(2*%pi*f*t-2*%pi/3); plot(t,y,'r'); f=50; t=0:1/50/100:1/50; y=1*sin(2*%pi*f*t-4*%pi/3); plot(t,y,'k-.','thickness',2); xlabel('x tengely felirata',"fontsize",3,"fontname",4) ylabel('y tengely felirata',"fontsize",3,"fontname",4) title('Az ábra címe, ha szükséges.',"fontsize",3,"background","cyan","fontname",9) legend(["$\textbf{$\sin(\omega\cdot t)$}$";"$\textbf{$\sin(\omega\cdot t - ... 2\pi/3)$}$";"$\textbf{$\sin(\omega\cdot t - 4\pi/3)$}$"]); a=get("current_axes"); a.children(1).font_size = 3; a.children(3).children.polyline_style=2; set(gca(),"grid",[1 1]) Egy új
plot
utasítás esetében a legutoljára aktív grakus ablakba rajzolja a grakont,
az el®z® grakon törlése nélkül! Ha új grakus ablakba szeretnénk megjeleníteni a grakont, a
figure
utasítással hozhatunk létre egy új ablakot.
Minden létrehozott grakus ablakhoz
tartozik egy (pozitív egész) szám. Egy adott grakus ablakot vízszintesen és függ®legesen is több részre oszthatunk és az így keletkezett részeket külön-külön kezelhetjük.
Adott grakus ablak ilyen felosztására a
7. ábra: Több ábra megjelenítése azonos grakus ablakban.
13
subplot(s,o,p)
utasítás használható, ahol
és hány oszlopra osztjuk,
p
grakus kimenet, amelyre a
s
és
o
határozza meg, hogy az ablakot hány sorra
azt mutatja meg, hogy hányadik felületelem lesz éppen az aktuális
plot utasítás (vagy bármely más grakai utasítás) vonatkozik.
Ha
például az 2. sor 2. oszlopában lév® felületelemre szeretnénk a grakus kimenetet irányítani, akkor
p
értékét 4-re kell állítani.
A grakus ablak tartalmának (például a kirajzoltatott függvény) mentésére számos formá-
File/Export to... parancsnál. LATEX-ket használók számára az eps PostScript) és png (Portable Network Graphics) formátumokat javasoljuk.
tum áll rendelkezésre a (Encapsulated
14
3.
Xcos
Az Xcos a Scilab része, mely a dinamikus rendszerek modellezésére és vizsgálatára alkalmas. Az Xcos különösen hasznos olyan esetben, ahol a folytonos idej¶ és a diszkrét idej¶ komponensek egyaránt megtalálhatóak a modellben.
Az Xcos esetében el®re elkészített modulokból, blok-
kokból épül fel a vizsgálni kívánt modell. Az egymáshoz tartozó blokkok könnyen almodellekbe szervezhet®ek, melynek köszönhet®en egy bonyolult rendszer is áttekinthet®vé válik. Nagyon sok el®re elkészített modul és blokk áll rendelkezésre az Xcos-on belül.
Ezek a
blokkok többségében elemi m¶veletek, melyek szinte minden dinamikus rendszer felépítéséhez szükségesek.
Illetve itt is, ahogy Scilab esetében az ATOMS portál segítségével lehet®ség
van egy-egy speciális területhez (például Predictive Toolbox, SciPowerLab) tartozó blokkok letöltésére. Ha saját blokkra van szükség, lehetséges a Scilab saját nyelvén megírni a kívánt függvényt, és ezt mint blokkot használni a modellben. Természetesen van mód a hiányzó blokk függvényének C- vagy Fortran-nyelven történ® megírására is. Fontos megjegyezni, hogy az Xcos több mind egy modellezésre és szimulációra használható környezet.
Nagyon sok olyan egyéb funkciója van, amely a tervez®t segíti a modell paramé-
tereinek optimalizálásban, a modell validálásában, de lehet®ség van C-programot generálni az elkészült modellb®l.
3.1. Modell létrehozása Az Xcos-on belül a szimulálni kívánt dinamikus rendszert modellnek nevezzük, amely egy csomópontokból és irányított élekb®l álló, hierarchikusan felépíthet®, hatásvázlathoz hasonló gráf.
8. ábra: Az Xcos blokkok könyvtára.
15
A csomópontokban jelformálás és jelátalakítás végezhet®, a lehetséges átalakító elemek el®re deniált könyvtárakban kerültek csoportosításra. A modellek kerülnek tárolásra. rancsablakból az
.zcos kiterjesztés¶ állományokban
A modell elemeit tartalmazó könyvtár böngész®jének megnyitása a pa-
xcos
utasítással, vagy az eszközsorban található Xcos gomb megnyomásával
kezdeményezhet®. Új modellt létrehozni az automatikusan megnyíló üres diagram szerkeszt®ben tudunk. Ehhez a könyvtárból (lásd 8. ábra) a jelformáló elemeket áthúzzuk (drag and drop) a modellbe, vagy jobb egérgombbal hozzáadjuk a diagramszerkeszt®höz és ott a megfelel® módon összekötjük ®ket.
A szerkesztés módja értelemszer¶, bár gyakorlatot igényel.
A jelátalakító elemek
m¶ködését paramétereik értéke befolyásolja. A paramétereknek a paraméterablakban közvetlenül is adhatunk értéket, de szerepeltethetünk a Scilab-ban deniált változókat, illetve érvényes Scilab kifejezéseket is. Els® példaként hozzuk létre a következ® egyszer¶ modellt, melyet a 9. ábrán lehet látni. A
szinusz generátor a Sources könyvtárban található. Ebben a könyvtárban vannak elhelyezve a különféle jelgenerátorok és jelforrások. Az oszcilloszkóp a Sink könyvtárban található, ahol a különféle megjelenít® és kimeneti blokkok találhatóak. Az oszcilloszkóp esetében még szükség van
órajelre,
mely szintén a
Sources
könyvtárban található.
Az órajel egy el®re
deniált periódusid® szerint mindig aktiválja az oszcilloszkópot. Minden id®pillanatban, amikor aktív az
oszcilloszkóp,
beolvassa a bemenetén lév® jelértéket, és azt megjeleníti az adott
id®pillanatban. Végül, ha sikerült elhelyezni a három blokkot, kössük össze ®ket, a 9. ábrán látható módon. A blokkra történ® dupla kattintással lehet, azok paramétereit állítani. Duplán kattintva a
szinusz generátorra,
2*%pi*50-re, mely a magyarországi villamosenergia-hálózat körfrekvenciája (ω = 2πf ). Az oszcilloszkóp esetében az Ymin, Ymax és a Refresh period értékeket kell értelemszer¶en átállítani. Az Ymin = -1 és az Ymax = 1 nem más, mind a kirajzolandó periodikus jel minimuma és maximuma. A Refresh period értékét állítsuk 0.04 értékre. Mivel egy teljes periódus ideje T = 1/f = 1/50 = 0.02s, ezért mi két teljes szinuszhullámot rajzoltatunk ki. Az órajel esetében a Period értékhez kell megadni, mekkora legyen a mintavételi id®. Itt 0.04/100 értéket érdemes bea
Frequency (rad/s)
értéket állítsuk
9. ábra: Az Xcos blokkok könyvtára.
16
10. ábra: Az Xcos blokkok könyvtára.
állítani. ez
Az
nullára
menüben a
Initialization time
értéke azt adja meg, mikortól kezdje a mintavételezést,
is beállítható. Végül a futtatás el®tt, érdemes beállítani a
Final integration time
értékét
0.04-re,
Simulation / Setup 1.0E05, vagyis
mivel az apabeállítás
100000 másodperc, ami több mint egy nap (körülbelül 28 óra). Ha ezen beállítások megtörténtek, a modell futtatása (Simulation
/ Start)
után a 10. ábrán látható eredményt kell, hogy
kapjuk.
17
11. ábra: A PSpice Schematics grakus felülete és a
4.
Part Browser Basic
ablak.
PSpice
A PSpice (PC Simulation Program with Integrated Circuit Emphasis) egy, az elektronikus áramkörök tervezésére, szimulációjára kifejlesztett program.
A PSpice, és a hozzá hasonló
áramkörtervezést segít® számítógépes mérnöki eszközök nagy segítséget nyújtanak az áramkör megtervezésében, a m¶ködésének vizsgálatában, még azel®tt, hogy elkészülne a prototípus. A Berkeley Egyetemen fejlesztették ki az els® analóg szimulációs programot, mely áramkörök vizsgálatára volt alkalmas. A hetvenes években jelent meg a SPICE-nak nevezett program, mely az áttörést jelentette az elektronikus áramkörök vizsgálatában, és az áramkörök hatékonyságának drámai javulását eredményezte. Napjainkra szinte az összes nagyobb elektronikus alkatrészeket gyártó cégnek van egy saját szoftvere, melyben a saját alkatrészeit felhasználva lehet áramköröket tervezni, illetve olyan szoftverek, melyek segítségével a legkorszer¶bb áramkörök is könnyedén tervezhet®ek, és vizsgálhatóak.
4.1. Modell létrehozása és vizsgálata A gyakorlatok során a PSpice Schematics részét (lást 11. ábra) használjuk az áramkör megrajzolásához és vizsgálatához egyaránt.
Part Browser Basic ablakból lehet kiváDraw menü Get new part... almenüjéb®l, vagy a Ctrl+G paranccsal lehet megnyitni. A Part Browser Basic ablakban a Part Name mez®be kell beírni a keresend® elem nevének rövidítését. Minden elemr®l ad még egy rövid leírást is a Description: mez®ben. Az elemlista mellett található gombokkal lehet a kiválasztott elemeket a Schematics ablakban Egy áramkör létrehozásához szükséges elemeket a
lasztani. Ez az ablakot a
elhelyezni. Els® mintapéldánk legyen a mágneses körök elméleti részéb®l a 2.
példa.
A villamos és
mágneses körök közötti ekvivalencia miatt, lehetséges a PSpice-al mágneses köröket is vizsgálni. A magnetomotoros er® egy egyenfeszültség¶ forrásnak tekinthet®, vagyis az elemkeres®ben a
VDC
néven található elem lesz. A vasmag és a légrés reluktanciája pedig a rezisztenciával ekvivalens,
18
(a) A mágneses kör és a feladat paraméterei.
(b) Villamos körös ekvivalense.
12. ábra: A 2. példa és a mágneses körének villamos körös ekvivalense.
13. ábra: A 2. példa mágneses körének megoldása.
melyet
Wire
r
néven lehet az elemek között találni. A lerakott elemek összekötéséhez a
almenüjével, vagy a
Ctrl+W
Draw
menü
paranccsal lehetséges. Az elemek értékeinek megadásához,
duplán kell az értékre kattintani. Azonban, ahhoz, hogy az elkészült mágneses kört vizsgálni tudjuk, szükség van, hogy deniáljuk a nulla potenciált a körben. Ehhez a
GND_ANALOG
elem
szükséges. Az elkészült ekvivalenst a 12. ábrán láthatjuk. Az elkészült modell vizsgálatához, pontosabban a vasmagban létrejöv® uxus kiszámításához, az
Analysis
menüb®l a
Simulate-re
sával tehetjük meg ezt közvetlenül.
kell kattintani, vagy az
F11
gomb megnyomá-
A kapott eredmények megjelenítéséhez szükség van az
Enable Biad Current Display-t bekapcsolni, ami a menüsor alatt található gombok közül az I-vel jelölt (13. ábrán nyíllal jelölve). Az el®z® lépések analógiáján tetsz®leges mágneses kör vizsgálható PSpice segítségével.
19
5.
Tranziens szimuláció
A villamos gépek és a villamosenergia-rendszer esetében nagyon sokszor szükség van a tranziensek vizsgálatára. Elég csak a különféle bekapcsolási jelenségekre gondolni, vagy a forgógépek esetében egy-egy hirtelen sebesség, nyomaték változás. Az Elektrotechnika tárgy keretén belül nem foglalkozunk tranziens jelenségekkel, azonban a szakirányos tanulmányokra való tekintettel itt röviden bemutatásra kerülnek a dinamikus (tárolós) rendszerek vizsgálata PSpice segítségével. A szimulációkat minden esetben számítással is alátámasztjuk.
5.1. Egytárolós rendszer Els® példaként a (14). ábrán látható ellenállásokból és egy kapacitásból (dinamikus elem) álló hálózat lesz. A hálózat gerjesztéséhez az ábra bal oldalán látható négyszögejelet használjuk. A hálózat felépítéséhez
VPWL
PSpice-ban
a következ® komponensekre van szükség: feszültségforrás -
r
(Piecevise Linear Voltage Source), ellenállás -
földelés -
GND_ANALOG (analog ground). A hálózat Analysis/Setup menüpontban.
(resistor), kondenzátor -
c
(Capacitor),
elkészítése után a szimuláció paramétereit
kell beállítani az
Ahogy a fejezet címe is mutatja, tranzi-
ens szimuláció szükséges a kondenzátor áramának és feszültségének vizsgálatához.
Bias Point Detail a Transient Print Step: 1ps (1 · 1012 s), és a
szimulációt kell beállítani. szimuláció teljes ideje
Tehát a
Legyen a szimuláció id®lépése
Final Time: 6s.
Ha helyesen állí-
tottuk össze a halózatot, akkor eredményképpen a (15). ábrán látható eredményt kell, hogy kapjuk. A fenti görbe a kondenzátor áramának id®függvényét, az alsó ábrán a gerjeszt®jel és a kondenzátor feszültségének id®függvényét ábrázolja.
5.2. Többfázisú rendszer Az el®z® példa esetében könnyen el®állítható az analitikus megoldás, így nem feltétlenül lenne szükséges a számítógépes szimuláció. Azonban a valóságos rendszerek esetében az analitikus megoldást vagy nem lehet el®állítani, vagy csak elhanyagolásokkal.
R1
= 6kΩ
R2
Ennél a példánál (lásd
= 4kΩ
U 9 6
U
C
3 0
0
1
2
3
4
t
14. ábra: Egytárolós rendszer.
20
= 100µF
R3
= 8kΩ
15. ábra: A 2. példa mágneses körének megoldása.
16. ábra: Terhelt háromfázisú hálózat.
(16). ábra) kilenc dinamikus elemet tartalmaz a hálózat, vagyis egy kilenc ismeretlenes egyenletrendszert kell megoldani. használata.
Ilyen rendszer vizsgálata esetekben célszer¶ valamilyen szoftver
A mi esetünkben ez a szoftver a PSpice.
21
A hálózat elkészítése után a követ-
17. ábra: Terhelt háromfázisú hálózat megoldása.
kez® beállításokat kell alkalmazni a szimuláció során: a ábrázlásnál használt id®lépés mérete 100ns (Print
Step), a szimuláció teljes ideje 0.05s (Final Time), maximális id®lépés 100ns (Step Ceiling). Ezen beállítások mellett még érdemes kihagyni a kezdeti tranziens megoldást (Skip initial transient solution), mivel a megoldó enélkül rossz megoldást eredményez. A feledat megoldását a (15). ábrán lehet látni. Az eredményb®l jól látszik a bekapcsolásból származó tranziens.
Hivatkozások [1] Scilab - http://www.scilab.org/ [2] Matlab - http://www.mathworks.com/products/matlab/ [3] Xcos - https://www.scilab.org/scilab/gallery/xcos [4] Simulink - http://www.mathworks.com/products/simulink/
A
[5] Oetiker T., Partl H., Hyna I., Schlegl E., Egy nem túl rövid bevezet® a L TEX2ε használatába - avagy a
ATEX2e L
78 percben
http://www.math.bme.hu/latex/dl/latex78.pdf [6] PSpice -
http://www.scilab.org/
[7] OrCAD, User's Guide , 1998.
22