Laboratorium Modelowania w Elektrotechnice
1
1
Wizualizacja wyników
Przykład 1. Poniższy program przykładowy oblicza przebiegi napięcia na kondensatorze w szeregowym obwodzie RLC
po skokowym załączeniu stałego napięcia, w przestrzennym układzie współrzędnych, dla wybranych wartości rezystancji.
Należy sprawdzić działanie programu i dołączyć dodatkowe rozwiązanie dla wybranej wartości rezystancji.
Listing 1: Program RLC2.m
g l o b a l
R L C U
L = 0 . 0 0 1 ;
% I n d u k c y j n o ś ć 1 mH
C =10 e -6;
% P o j e m n o ś ć 10 uF
U = 1 0 ;
% N a p i ę c i e z a s i l a j ą c e 10 V
R1 = 5 0 ;
% P i e r w s z a w a r t o ś ć r e z y s t a n c j i 50 Ohm
R2 = 1 5 ;
% P i e r w s z a w a r t o ś ć r e z y s t a n c j i 15 Ohm
R3 =5;
% P i e r w s z a w a r t o ś ć r e z y s t a n c j i 5 Ohm
% P i e r w s z y p r z e b i e g
R = R1 ;
% P r z y p i s a n i e w a r t o ś c i r e z y s t a n c j i
[ t1 , y1 ]=
o d e 2 3
(
’ r l c f u n ’
, [ 0 , 0 . 0 0 3 ] , [ 0 ; 0 ] ) ;
% D r u g i p r z e b i e g
R = R2 ;
% P r z y p i s a n i e w a r t o ś c i r e z y s t a n c j i
[ t2 , y2 ]=
o d e 2 3
(
’ r l c f u n ’
, [ 0 , 0 . 0 0 3 ] , [ 0 ; 0 ] ) ;
% T r z e c i p r z e b i e g
R = R3 ;
% P r z y p i s a n i e w a r t o ś c i r e z y s t a n c j i
[ t3 , y3 ]=
o d e 2 3
(
’ r l c f u n ’
, [ 0 , 0 . 0 0 3 ] , [ 0 ; 0 ] ) ;
% R y s o w a n i e w y k r e s ó w
R 1 x x = R1 * o n e s (
s i z e
( t1 ));
% w e k t o r e l e m e n t ó w o w a r t o ś c i R1 i d ł u g o ś c i z g o d n e j z t1
R 2 x x = R2 * o n e s (
s i z e
( t2 ));
% j . w . dla R2 i t2
R 3 x x = R3 * o n e s (
s i z e
( t3 ));
% j . w . dla R3 i t3
% F u n k c j a p 1 o t 3 r y s u j e t r z y w y k r e s y w p r z e s t r z e n i t r ó j w y m i a r o w e j
p l o t 3
( t1 , R1xx , y1 (: ,2) , t2 , R2xx , y2 (: ,2) , t3 , R3xx , y3 (: ,2));
% w s z y s t k i e a r g u m e n t y f u n k c j i p 1 o t 3 m a j a ten sam w y m i a r
% O p i s osi w y k r e s u
x l a b e l
(
’ t ’
)
y l a b e l
(
’ R ’
)
z l a b e l
(
’ U_c ( t ) ’
)
t i t l e
(
’ N a p i e c i e na k o n d e n s a t o r z e ’
)
g r i d
% W ł ą c z e n i e s i a t k i na w y k r e s i e
v i e w
( -50 ,20)
% Z m i a n a k ą t a p a t r z e n i a na w y k r e s
Listing 2: Funkcja rlcfun.m
f u n c t i o n
dy = r l c f u n ( t , y )
% R L C F U N o b l i c z a p r a w ą s t r o n ę u k ł a d u r ó w n a ń o p i s u j ą c e g o s e r e g o w y o b w ó d RLC
g l o b a l
R L C U
i = y ( 1 ) ;
Uc = y ( 2 ) ;
di =( U - R * i - Uc )/ L ;
dUc = i / C ;
dy =[ di ; dUc ];
Ćwiczenie 1. Zmodyfikować M–pliki z ostatniego przykładu tak, aby
• poprawić wygodę i ograniczyć możliwość pomyłki przy zmianach parametrów symulacji takich jak czas obserwacji
lub warunki początkowe,
• wyeliminować użycie zmiennych globalnych, a prarametry do rtlfun przekazywać jako dodatkowe argumenty ode23,
• wyeliminować powtarzające się fragmenty kodu,
Laboratorium Modelowania w Elektrotechnice
2
• umożliwić zadawanie listy (o nieznanej z góry długości) wartości rezystancji na początku programu,
• wyeliminować użycie zmiennych w głównej przestrzeni roboczej (nadać M–plikowi charakter M–funkcji).
Ćwiczenie 2. Dwa ładunki q o przeciwnych znakach umieszczone w odległości 2a tworzą dipol elektryczny. Wyznaczyć
rozkład potencjału elektrycznego w dowolnej płaszczyźnie, w której leżą oba ładunki.
Wskazówka.
V =
q
2π
0
1
r
1
−
1
r
2
gdzie
0
= 8.85 · 10
−12
F/m- stała przenikalności dielektrycznej, r
1
– odległość punktu od ładunku dodatniego, r
2
–
odległość punktu od ładunku ujemnego. Zjawisko opisano w literaturze – na przykład: Halliday D., Resnick.R.: Fizyka.
t.2. PWN. Warszawa 1972.
Przyjąć q = 10
−9
C, a = 0.05 m. Potencjał wyznaczyć w kwadracie o bokach 4a. Ładunki położone są na symetralnej
boku kwadratu w odległości a od boku.
Funkcje: meshgrid, mesh
Ćwiczenie 3. Zaznajomić się na powyższym przykładzie z innymi funkcjami do tworzenia wykresów trójwymiarowych:
surf, surfl, pcolor. Zapoznać się z działaniem polecenia shading.
Ćwiczenie 4. Wyznaczyć rozkład sił pola pochodzącego od dwóch jednakowych ładunków punktowych oraz przebieg linii
ekwipotencjalnych. Przyjąć odległość ładunków równą a = 2.2m. Rozkład sił wyznaczyć w dowolnej płaszczyźnie, w której
leżą oba ładunki. Natężenie pola wyznaczyć z potencjału. Potencjał pola odnieść do wielkości
q
2π
0
, gdzie q – ładunek,
0
–
stała przenikalności dielektrycznej. Sprawdzić, jak zależy rozwiązanie od znaku ładunków. Polecenia meshgrid, gradient,
quiver, contour, contourf
Ćwiczenie 5. Zmodyfikować plik RLC2.m tak, aby rysował powierzchnię (funkcją surf albo mesh) U
c
(t, R) dla zadanego
jako parametr zakresu rezystancji.
Ćwiczenie 6. Napisać program, w którym modelowany jest układ trzeciego rzędu opisany równaniem różniczkowym
...
y + a
2
¨
y + a
1
˙
y + a
0
y = u
Sygnał wejściowy u(t) może być np. funkcją jednostkową. Współczynniki dobierać w ten sposób, aby uzyskać przebiegi
przejściowe różnego typu (aperiodyczne i oscylacyjne).
2
Wstęp do zastosowań graficznego interfejsu użytkownika (GUI)
Do elementów interfejsu graficznego GUI należą suwaki, okna dialogowe oraz różnego rodzaju przyciski i menu. Przygo-
towanie własnego interfejsu graficznego odbywa się przy wykorzystaniu obiektów uicontrol i uimenu.
2.1
Obiekt uicontrol
Funkcja
uicontrol
(
’Cecha_1’
,wartość_1,
’Cecha_2’
, wartość_2,...)
tworzy elementy interfejsu graficznego użytkownika i zwraca uchwyt (ang. handle – rodzaj identyfikatora, a raczej unikalny
numer) obiektu graficznego.
Właściwości uicontrol są ustalane przez pary cecha/wartość w poleceniu lub, zmieniane później za pomocą polecenia
set. Polecenie
get(h)
gdzie h – uchwyt (handle), podaje listę właściwości obiektu i ich aktualne wartości.
Polecenie
set(h)
wyświetla listę właściwości obiektu uicontrol i dopuszczalne wartości cech obiektu.
Cecha „Style” może mieć następujące wartości
pushbutton przycisk; generuje działanie przy każdym uaktywnieniu czyli naciśnięciu (myszą). Zwolnienie tego przycisku
(tj. zwolnienie klawisza myszy) nie pozostawia go w stanie załączonym. Stosuje się go w przypadkach, gdy jakieś
działanie powinno być wykonane i nie pozostawione na stałe (np. close)
checkbox przycisk; generuje działanie po uaktywnieniu i pozostawia je aż do chwili ponownego naciśnięcia tego przycisku.
Stan załączenia lub wyłączenia jest wyświetlany. Jest przydatny przy realizacji wyboru pewnej ilości niezależnych
operacji. Przy takim grupowym zastosowaniu może służyć do wyboru jednej lub kilku opcji
Laboratorium Modelowania w Elektrotechnice
3
radiobutton przycisk; ma podobne działanie jak checkbox, lecz przy grupowym zastosowaniu tylko jeden radiobutton
w grupie może być załączony. Stan załączenia lub wyłączenia jest wyświetlany
popupmenu rozwijane menu; w chwili naciśnięcia myszą wyświetla listę dopuszczlnych opcji. Po wybraniu jednej z moż-
liwości menu zostaje zwinięte, a wybrana opcja jest wyświetlana.
slider suwak; umożliwia wybór wartości parametru wpisanego do pola Value z pewnego zakresu. Wyboru dokonuje się
przemieszczając suwak przy wciśniętym klawiszu myszy. Zakres ustawia się w polach Min i Max. Wartość pola Value
jest określane przez ustawienie suwaka
edit pole edycyjne; umożliwia wprowadzenie tekstu lub liczb z klawiatury, które po naciśnięciu klawisza Enter są przy-
pisywane do wskazanej zmiennej
text opis; wyświetla tekst zawarty w polu String. Jest używany do wykonywania opisów informacyjnych w oknie graficz-
nym. Użytkownik nie może zmieniać informacji zawartej w tekście statycznym.
frame ramka; wyświetla prostokątne obramowanie wokół jednego lub kilku elementów sterujących. Umożliwia grupowanie
elementów interfejsu.
W celu zapoznania się z niektórymi elementami interfejsu należy przejrzeć tekst przykładu 1
Przykład 2. Przepisać przedstawiony program i sprawdzić jego działanie.
Program rysuje bryłę poprzez obrót krzywej wokół osi Z układu za pomocą poleceń cylinder i surf. Bryłę można
oglądać pod kątem określanym w funkcji view. Argumentami tej funkcji są azymut i kąt elewacji [a, e]. Standardowo a
= -37.5
◦
i kąt elewacji e=30
◦
.
Sposób obserwacji ustala się za pomocą suwaka. Wysokość e jest wyświetlana w okienku edycyjnym poniżej suwaka.
Zadana na początku długość osi Z równa 1 może być zmieniona przez wpisanie odpowiedniej liczby w okienku edycyjnym
i zatwierdzenie za pomocą klawisza [Enter] lub myszy.
Przycisk radiowy (radiobutton) służy do włączenia skali barw. Menu rozwijane służy do ustawiania odcieni barw. Po-
la Callback służą do definiowania reakcji na użycie odpowiedniego obiektu interfejsu. Wartości tego pola mają postać
łańcuchów będących niemal dowolnym poleceniem (czy ciągiem poleceń) Matlab’a – w najprostszym przypadku – jak
w rozważanym przykładzie – nazwami M–plików, w których określono reakcję programu. Pliki te to sliderE, editZ, oraz
popme.
Listing 3: Plik cyl_01.m
% Ć w i c z e n i a z p r z y g o t o w a n i a i n t e r f e j s u g r a f i c z n e g o u ż y t k o w n i k a
t = 2 / 3 : 1 / 6 : . 7 *
pi
;
% t = 0 : 1 / 6 : 1 . 2 * pi ;
y =
sin
( t );
[ a , b , c ]=
c y l i n d e r
( y );
hh =
s u r f
( a , b , c );
% i d e n t y f i k a t o r r y s u n k u
[ a , e ]=
v i e w
% [ k i e r u n e k w y s o k o ś ć ] p a t r z e n i a na o b i e k t
% z m i a n a n a g ł ó w k a o k n a g r a f i c z n e g o
set
(
gcf
,
’ N a m e ’
,
’ H a n d l e G r a p h i c s E X A M P L E ’
);
% U t w o r z e n i e s u w a k a o i d e n t y f i k a t o r z e V s l i d e r
% do z m i a n k ą t a w y s o k o ś c i o b s e r w a c j i n a r y s o w a n e j b r y ł y
V s l i d e r =
u i c o n t r o l
(
’ S t y l e ’
,
’ s l i d e r ’
);
% p r z y g o t o w a n i e s u w a k a
set
( Vslider ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
% o k r e ś l e n i e p o ł o ż e n i a i r o z m i a r ó w s u w a k a [ xs ys s z e r . d l u g .]
set
( Vslider ,
’ P o s i t i o n ’
, [ . 0 1 . 0 5 5 . 0 5 . 4 ] ) ;
set
( Vslider ,
’ Min ’
, -180 ,
’ Max ’
,180);
% z a k r e s z m i a n k ą t a o b s e r w a c j i
set
( Vslider ,
’ C a l l b a c k ’
,
’ s l i d e r E ’
);
% C A L L B A C K
% s l i d e r E . m p r z e t w a r z a p o ł o ż e n i e s u w a k a na w a r t o ś ć z a d a n e j z m i e n n e j
% U t w o r z e n i e o k n a d i a l o g o w e g o o i d e n t y f i k a t o r z e V e d i t
% do i n f o r m o w a n i a o a k t u a l n y m k ą c i e o b s e r w a c j i
V e d i t =
u i c o n t r o l
(
’ S t y l e ’
,
’ e d i t ’
);
% p r z y g o t o w a n i e o k n a
set
( Vedit ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
% o k r e ś l e n i e p o ł o ż e n i a i r o z m i a r ó w o k n a [ xe ye s z e r . d l u g .]
set
( Vedit ,
’ P o s i t i o n ’
,[0.01 , 0.01 , 0.085 , 0 . 0 4 ] ) ;
set
( Vedit ,
’ S t r i n g ’
,
n u m 2 s t r
( e ));
% w a r t o ś ć p o c z ą t k o w a n a s t a w y
% b r a k ’ C a l l b a c k ’ : e f e k t e m j e s t w p i s a n i e w o k n i e n a s t a w y s u w a k a
Laboratorium Modelowania w Elektrotechnice
4
% U t w o r z e n i e o k n a d i a l o g o w e g o o i d e n t y f i k a t o r z e e d i t B o x
% do w p r o w a d z a n i a z m i a n z a k r e s u w a r t o ś c i dla osi Z ( Z m a x )
e d i t B o x =
u i c o n t r o l
(
’ S t y l e ’
,
’ e d i t ’
);
% p r z y g o t o w a n i e o k n a
set
( editBox ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
% o k r e ś l e n i e p o ł o ż e n i a i r o z m i a r ó w o k n a [ xb yb s z e r . d l u g .]
set
( editBox ,
’ P o s i t i o n ’
,[0.01 , 0.8 , 0.05 , 0 . 0 4 ] ) ;
set
( editBox ,
’ S t r i n g ’
,
’ 1 ’
);
% w a r t o ś ć p o c z ą t k o w a z a k r e s u
set
( editBox ,
’ C a l l b a c k ’
,
’ e d i t Z ’
);
% C A L L B A C K
% e d i t Z . m p r z e t w a r z a t e k s t o k n a d i a l o g o w e g o na w a r t o ś ć Z m a x
% U t w o r z e n i e p r z y c i s k u o i d e n t y f i k a t o r z e R b u t t o n
% do w y ś w i e t l a n i a s k a l i b a r w
R b u t t o n =
u i c o n t r o l
(
’ S t y l e ’
,
’ r a d i o b u t t o n ’
);
set
( Rbutton ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
% o k r e ś l e n i e p o ł o ż e n i a i r o z m i a r ó w o k n a [ xb yb s z e r . d l u g .]
set
( Rbutton ,
’ P o s i t i o n ’
, [0.87 ,0 .94 , 0.12 , 0 . 0 4 5 ] ) ;
set
( Rbutton ,
’ S t r i n g ’
,
’ c o l b a r ’
,...
’ C a l l b a c k ’
,
’ if get ( Rbutton , ’ ’ V a l u e ’ ’ )==1 , c o l o r b a r , end ’
);
% ’ if get ( Rbutton , ’ ’ Value ’ ’)==1 , c o l o r b a r , else , d e l e t e ( c o l o r b a r ) , end ’);
% U t w o r z e n i e m e n u r o z w i j a n e g o o i d e n t y f i k a t o r z e p o p c o l
% do z m i a n y m a p y k o l o r ó w
p o p c o l =
u i c o n t r o l
(
gcf
,
’ S t y l e ’
,
’ p o p u p ’
,...
’ U n i t s ’
,
’ n o r m a l i z e d ’
,...
’ S t r i n g ’
,
’ hsv | c o o l | g r a y | hot ’
,...
’ P o s i t i o n ’
, [0.14 , 0.90 , 0.13 , 0 . 0 8 ] , . . .
’ C a l l B a c k ’
,
’ p o p m e ’
);
% C A L L B A C K
Listing 4: Plik sliderE.m
% s l i d e r E . m o k r e s l a n o w y kąt w y s o k o s c i z u s t a w i e n i a s u w a k a
n e w _ e =
get
( Vslider ,
’ V a l u e ’
);
% W p i s a n i e w a r t o s c i n a s t a w i o n e j s u w a k i e m w o k n i e V e d i t
set
( Vedit ,
’ S t r i n g ’
,
n u m 2 s t r
( n e w _ e ));
% U s t a w i e n i e o k n a o b s e r w a t o r a pod n o w y m k ą t e m p o d n i e s i e n i a
v i e w
( a , n e w _ e )
Listing 5: Plik editZ.m
% e d i t Z . m - p r z e t w a r z a t e k s t w p i s a n y w o k n o d i a l o g o w e na w a r t o ś ć
n e w Z =
s t r 2 n u m
(
get
( editBox ,
’ S t r i n g ’
));
set
(
gca
,
’ Z l i m ’
,[0 , n e w Z ]);
% N o w e w a r t o ś c i s k a l o w a n i a osi z
Listing 6: Plik popme.m
% p o p m e . m - w y b i e r a z m e n u w y b r a n e m a p y k o l o r ó w
val =
get
( popcol ,
’ V a l u e ’
);
if
( val == 1) ,
c o l o r m a p
(
hsv
);
e l s e i f
( val == 2) ,
c o l o r m a p
(
c o o l
);
e l s e i f
( val == 3) ,
c o l o r m a p
(
g r a y
);
e l s e i f
( val == 4) ,
c o l o r m a p
(
hot
);
end
Powyższe pliki demonstrują styl programowania użyteczny przy najprostszych, czy naprędce tworzonych projektach,
gdy można pozwolić sobie na przechowywanie uchwytów do elementów GUI w głównej przestrzeni roboczej oraz pisanie
oddzielnych M–plików dla każdej własności Callback. Jest to też podejście zgodne z wcześniejszymi wersjami Matlab’a.
Bardziej wyrafinowany wariant programu realizującego te same funkcje przedstawiono poniżej.
Laboratorium Modelowania w Elektrotechnice
5
Listing 7: Program cyl01popr.m
f u n c t i o n
c y l 0 1 p o p r ( a c t i o n )
if n a r g i n
==0 ,
a c t i o n =
’ i n i t i a l i z e ’
;
end
s w i t c h action ,
c a s e
’ i n i t i a l i z e ’
% Ć w i c z e n i a z p r z y g o t o w a n i a i n t e r f e j s u g r a f i c z n e g o u z y t k o w n i k a
t =
l i n s p a c e
( -0.4*
pi
, 0 . 4 *
pi
, 1 5 ) ;
y =
cos
( t );
[ a , b , c ] =
c y l i n d e r
( y );
hh =
s u r f
( a , b , c );
% i d e n t y f i k a t o r r y s u n k u
[ a , e ] =
v i e w
;
% [ k i e r u n e k w y s o k o s c ] p a t r z e n i a na o b i e k t
% z m i a n a n a g ł ó w k a o k n a g r a f i c z n e g o
set
(
gcf
,
’ N a m e ’
,
’ H a n d l e G r a p h i c s E X A M P L E ’
,
’ M e n u B a r ’
,
’ n o n e ’
);
% U t w o r z e n i e s u w a k a o i d e n t y f i k a t o r z e V s l i d e r
% do z m i a n k a t a w y s o k o s c i o b s e r w a c j i n a r y s o w a n e j b r y ł y
V s l i d e r =
u i c o n t r o l
(
’ S t y l e ’
,
’ s l i d e r ’
);
% p r z y g o t o w a n i e s u w a k a
set
( Vslider ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
% o k r e s l e n i e p o ł o z e n i a i r o z m i a r ó w s u w a k a [ xs ys s z e r . d l u g .]
set
( Vslider ,
’ P o s i t i o n ’
, [0.01 , 0.055 , 0.03 , 0 . 4 ] ) ;
set
( Vslider ,
’ Min ’
, -90 ,
’ Max ’
, 9 0 ) ;
% z a k r e s z m i a n k ą t a o b s e r w a c j i
set
( Vslider ,
’ V a l u e ’
, e );
% u s t a w w a r t o ś ć d o m y ś l n ą
set
( Vslider ,
’ C a l l b a c k ’
, [ m f i l e n a m e ,
’ ( ’ ’ s l i d e r ’ ’ ); ’
]);
% C a l l b a c k
% U t w o r z e n i e o k n a d i a l o g o w e g o o i d e n t y f i k a t o r z e V e d i t
% do i n f o r m o w a n i a o a k t u a l n y m k ą c i e o b s e r w a c j i
V e d i t =
u i c o n t r o l
(
’ S t y l e ’
,
’ e d i t ’
);
% p r z y g o t o w a n i e o k n a
set
( Vedit ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
% o k r e s l e n i e p o ł o z e n i a i r o z m i a r ó w o k n a [ xe ye s z e r . d l u g .]
set
( Vedit ,
’ P o s i t i o n ’
, [0.01 , 0.01 , 0.085 , 0 . 0 4 ] ) ;
set
( Vedit ,
’ S t r i n g ’
,
n u m 2 s t r
( e ));
% w a r t o s c p o c z a t k o w a n a s t a w y
set
( V e d i t ,
’ C a l l b a c k ’
,[ m f i l e n a m e ,
’ ( ’ ’ e d i t e ’ ’ ); ’
]);
% ’ C a l l b a c k ’
% o k n o e d y c y j n e i s u w a k są " s p r z ę ż o n e " , w i ę c " z n a j ą " s w o j e u c h w y t y :
% z a p i s a n i e tej i n f o r m a c j i p o z w o l i na w z a j e m n ą a k t u a l i z a c j ę
set
( Vedit ,
’ U s e r D a t a ’
, V s l i d e r );
set
( Vslider ,
’ U s e r D a t a ’
, V e d i t );
% U t w o r z e n i e o k n a d i a l o g o w e g o o i d e n t y f i k a t o r z e e d i t B o x
% do w p r o w a d z a n i a z m i a n z a k r e s u w a r t o s c i dla osi Z ( Z m a x )
e d i t B o x =
u i c o n t r o l
(
’ S t y l e ’
,
’ e d i t ’
);
% p r z y g o t o w a n i e o k n a
set
( editBox ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
% o k r e s l e n i e p o ł o z e n i a i r o z m i a r ó w o k n a [ xb yb s z e r . d l u g .]
set
( editBox ,
’ P o s i t i o n ’
, [0.01 , 0.8 , 0.05 , 0 . 0 4 ] ) ;
set
( editBox ,
’ S t r i n g ’
,
’ 1 ’
);
% w a r t o s c p o c z a t k o w a z a k r e s u
set
( e d i t B o x ,
’ C a l l b a c k ’
,[ m f i l e n a m e ,
’ ( ’ ’ e d i t z ’ ’ ); ’
]);
% C A L L B A C K
% O p i s do p o w y ż s z e g o
tx =
u i c o n t r o l
(
’ S t y l e ’
,
’ t e x t ’
);
set
( tx ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
% o k r e s l e n i e p o ł o z e n i a i r o z m i a r ó w o k n a [ xb , yb , s z e r . , d l u g .]
set
( tx ,
’ P o s i t i o n ’
, [0.01 , 0.85 , 0.05 , 0 . 0 4 ] ) ;
set
( tx ,
’ S t r i n g ’
,
’ Z m a x ’
);
% U t w o r z e n i e p r z y c i s k u o i d e n t y f i k a t o r z e R b u t t o n
% do w y s w i e t l a n i a s k a l i b a r w
R b u t t o n =
u i c o n t r o l
(
’ S t y l e ’
,
’ r a d i o b u t t o n ’
);
set
( Rbutton ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
% j e d n o s t k i z z a k r e s u 0 . . 1
Laboratorium Modelowania w Elektrotechnice
6
% o k r e s l e n i e p o ł o z e n i a i r o z m i a r ó w o k n a [ xb yb s z e r . d l u g .]
set
( Rbutton ,
’ P o s i t i o n ’
,[0.87 , 0.94 , 0.12 , 0 . 0 4 5 ] ) ;
c b s t r =
’ if get ( gcbo , ’ ’ V a l u e ’ ’ )==1 , c o l o r b a r ; else , d e l e t e ( c o l o r b a r ); end ’
;
set
( Rbutton ,
’ S t r i n g ’
,
’ c o l b a r ’
,...
’ C a l l b a c k ’
, c b s t r );
% U t w o r z e n i e m e n u r o z w i j a n e g o o i d e n t y f i k a t o r z e p o p c o l
% do z m i a n y m a p y k o l o r ó w
p o p c o l =
u i c o n t r o l
(
gcf
,
’ S t y l e ’
,
’ p o p u p ’
,...
’ U n i t s ’
,
’ n o r m a l i z e d ’
,...
’ S t r i n g ’
,
’ hsv | c o o l | g r a y | hot ’
,...
’ P o s i t i o n ’
, [0.14 , 0.90 , 0.13 , 0 . 0 8 ] , . . .
’ C a l l B a c k ’
, [ m f i l e n a m e ,
’ ( ’ ’ p o p m e ’ ’ ); ’
]);
% C a l l b a c k
e n d m n u =
u i m e n u
(
gcf
,
’ L a b e l ’
,
’ Q u i t ’
,
’ C a l l b a c k ’
,
’ c l o s e ’
);
s h a m n u =
u i m e n u
(
gcf
,
’ L a b e l ’
,
’ S h a d i n g ’
);
s h 1 m n u =
u i m e n u
( shamnu ,
’ L a b e l ’
,
’ f a c e t e d ’
,
’ C h e c k ’
,
’ on ’
);
s h 2 m n u =
u i m e n u
( shamnu ,
’ L a b e l ’
,
’ i n t e r p ’
);
s h 3 m n u =
u i m e n u
( shamnu ,
’ L a b e l ’
,
’ f l a t ’
);
m n u g r p =[ sh1mnu , sh2mnu , s h 3 m n u ];
set
( mnugrp ,
’ U s e r D a t a ’
, mnugrp ,
’ C a l l b a c k ’
, [ m f i l e n a m e ,
’ ( ’ ’ s h a d i n g ’ ’ ); ’
]);
c a s e
’ s l i d e r ’
n e w _ e =
get
( g c b o ,
’ V a l u e ’
);
% W p i s a n i e w a r t o s c i n a s t a w i o n e j s u w a k i e m w o k n i e V e d i t
set
(
get
( gcbo ,
’ U s e r D a t a ’
) ,
’ S t r i n g ’
,
n u m 2 s t r
( n e w _ e ));
% U s t a w i e n i e o k n a o b s e r w a t o r a pod n o w y m k a t e m w y s o k o s c i [ a , n e w _ e ]
[ a , e ] =
v i e w
;
v i e w
( a , n e w _ e );
c a s e
’ e d i t e ’
n e w _ e =
s t r 2 n u m
(
get
( gcbo ,
’ S t r i n g ’
));
V s l i d e r =
get
( gcbo ,
’ U s e r D a t a ’
);
m i n _ e =
get
( Vslider ,
’ Min ’
);
m a x _ e =
get
( Vslider ,
’ Max ’
);
n e w _ e =
max
( min_e ,
min
( new_e , m a x _ e ));
set
( gcbo ,
’ S t r i n g ’
,
n u m 2 s t r
( n e w _ e ));
set
( V s l i d e r ,
’ V a l u e ’
, n e w _ e );
% N o w a w a r t o ś ć k ą t a e l e w a c j i
[ a , e ] =
v i e w
;
v i e w
( a , n e w _ e );
c a s e
’ e d i t z ’
n e w Z =
s t r 2 n u m
(
get
( gcbo ,
’ S t r i n g ’
));
set
(
gca
,
’ Z l i m ’
,[0 , n e w Z ]);
% N o w e w a r t o s c i s k a l o w a n i a osi z
c a s e
’ p o p m e ’
val =
get
( g c b o ,
’ V a l u e ’
);
if
( val == 1) ,
c o l o r m a p
(
hsv
)
e l s e i f
( val ==2) ,
c o l o r m a p
(
c o o l
)
e l s e i f
( val ==3) ,
c o l o r m a p
(
g r a y
)
e l s e i f
( val ==4) ,
c o l o r m a p
(
hot
)
end
% if
c a s e
’ s h a d i n g ’
m n u g r p =
get
( gcbo ,
’ U s e r D a t a ’
);
set
( mnugrp ,
’ C h e c k ’
,
’ off ’
);
set
( gcbo ,
’ C h e c k ’
,
’ on ’
);
Laboratorium Modelowania w Elektrotechnice
7
s h a d i n g
(
get
( gcbo ,
’ L a b e l ’
));
end
% s w i t c h
Porównać działanie obu wersji programu. Zidentyfikować fragmenty kodu realizujące dodatkowe funkcje. Porównać frag-
menty kodu w obu wersjach realizujące te same funkcje.
Przykład 3. W przykładzie przedstawiono sterowanie symulacją przebiegów przejściowych w szeregowym obwodzie RLC.
Zastosowano m.in. przycisk pushbutton do zamknięcia okna oraz utworzono menu do nastawiania czasu symulacji i za-
mknięcia programu.
Przepisać i sprawdzić program.
Listing 8: Program RLCgui.m
% w i z u a l i z a c j a i s t e r o w a n i e s y m u l a c j ą u k ł a d u d r g a j ą c e g o II r z ę d u
% Z a s t o s o w a n o i n t e r f e j s GUI - s u w a k i e m z m i e n i a się t ł u m i e n i e u k ł a d u
% p o p r z e z z m i a n y r e z y s t a n c j i
c l e a r
g l o b a l
R L C U t2
R = 1 5 ; L = 0 . 0 0 1 ; C =1 e -6; U = 1 0 ;
t0 =0; t2 =2 e -3;
% t0 c z a s p o c z a t k o w y , t2 w s t e p n y c z a s k o n c a s y m u l a c j i
r l c p l o t ;
% W p r o w a d z e n i e n a g ł ó w k a o k n a g r a f i c z n e g o
set
(
gcf
,
’ M e n u B a r ’
,
’ n o n e ’
,...
’ N a m e ’
,
’ S z e r e g o w y o b w ó d RLC ’
);
% U t w o r z e n i e s u w a k a o i d e n t y f i k a t r z e V s l i d e r
V s l i d e r =
u i c o n t r o l
(
’ S t y l e ’
,
’ s l i d e r ’
);
% u t w o r z e n i e s u w a k a
set
( Vslider ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
set
( Vslider ,
’ P o s i t i o n ’
,[0.94 , 0.055 , 0.035 , 0 . 4 ] ) ;
set
( Vslider ,
’ C a l l b a c k ’
,
’ r l c s l i d e ’
);
set
( Vslider ,
’ Min ’
, 0 ,
’ Max ’
, 1 0 0 ) ;
set
( Vslider ,
’ V a l u e ’
, R )
% U t w o r z e n i e o k n a d i a l o g o w e g o o i d e n t y f i k a t o r z e V e d i t
% do i n f o r m o w a n i a o a k t u a l n e j w a r t o s c i t ł u m i e n i a ’ beta ’
V e d i t =
u i c o n t r o l
(
’ S t y l e ’
,
’ e d i t ’
);
set
( Vedit ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
set
( Vedit ,
’ P o s i t i o n ’
, [0.80 , 0.01 , 0.175 , 0 . 0 4 ] ) ;
set
( Vedit ,
’ S t r i n g ’
,[
’ r e z y s t a n c j a ’
, R ])
% U t w o r z e n i e p r z y c i s k u o i d e n t y f i k a t o r z e P b u t t o n
% do z a m y k a n i a o k n a g r a f i c z n e g o
P b u t t o n =
u i c o n t r o l
(
’ S t y l e ’
,
’ p u s h ’
);
set
( Pbutton ,
’ U n i t s ’
,
’ n o r m a l i z e d ’
);
set
( Pbutton ,
’ P o s i t i o n ’
, [0.0 , 0.94 , 0.1 , 0 . 0 5 ] ) ;
set
( Pbutton ,
’ S t r i n g ’
,
’ S t o p ’
,
’ C a l l B a c k ’
,
’ c l o s e ’
);
% U t w o r z e n i e m e n u do n a s t a w i a n i a c z a s u s y m u l a c j i
t i m M e n u =
u i m e n u
(
gcf
,
’ L a b e l ’
,
’ C z a s s y m u l a c j i ’
);
r0 =
u i m e n u
( timMenu ,
’ L a b e l ’
,
’ T e n d =1 ms ’
,
’ C a l l B a c k ’
,
’ t2 =1 e -3 , r l c p l o t ’
);
r1 =
u i m e n u
( timMenu ,
’ L a b e l ’
,
’ T e n d =2 ms ’
,
’ S e p a r a t o r ’
,
’ on ’
,...
’ C a l l B a c k ’
,
’ t2 =2 e -3 , r l c p l o t ’
);
r2 =
u i m e n u
( timMenu ,
’ L a b e l ’
,
’ T e n d =3 ms ’
,
’ S e p a r a t o r ’
,
’ on ’
,...
’ C a l l B a c k ’
,
’ t2 =3 e -3 , r l c p l o t ’
);
r3 =
u i m e n u
( timMenu ,
’ L a b e l ’
,
’ T e n d =5 ms ’
,
’ S e p a r a t o r ’
,
’ on ’
,...
’ C a l l B a c k ’
,
’ t2 =5 e -3 , r l c p l o t ’
);
r4 =
u i m e n u
( timMenu ,
’ L a b e l ’
,
’ T e n d =10 ms ’
,
’ S e p a r a t o r ’
,
’ on ’
,...
’ C a l l B a c k ’
,
’ t2 =10 e -3 , r l c p l o t ’
);
s t o p M e n u =
u i m e n u
(
gcf
,
’ L a b e l ’
,
’ S T O P ’
,
’ C a l l B a c k ’
,
’ c l o s e ’
);
Do wykonania programu wymagane są następujące pliki dodatkowe:
rlcfun – inny wariant pliku używanego wcześniej
Laboratorium Modelowania w Elektrotechnice
8
rlcslide
rlcplot
Listing 9: Plik rlcfun.m
f u n c t i o n
dy = r l c f u n ( t , y )
% R L C F U N o b l i c z a p r a w ą s t r o n ę u k ł a d u r ó w n a ń o p i s u j ą c e g o s e r e g o w y o b w ó d RLC
g l o b a l
R L C U
dy =
z e r o s
(2 ,1);
dy ( 1 ) = ( U - R * y (1) - u ( 2 ) ) / L ;
dy ( 2 ) = y ( 1 ) / C ;
Listing 10: Plik rlcslide.m
% W y w o ł y w a n y p r z e z R L C g u i w t r y b i e ’ C a l l b a c k ’
% r e a l i z u j e o b s ł u g ę p r z e r w a n i a dla s u w a k a s t e r u j a c e g o s y m u l a c j ą
g l o b a l
R
R =
get
( Vslider ,
’ V a l u e ’
);
% P o b r a n i e p o ł o ż e n i a s u w a k a
f p r i n t f
(
’ wsp . t ł u m i e n i a ksi w y n o s i % g \ n ’
, 0 . 5 * R *
s q r t
( C / L ));
% w p i s a n i e n o w e j w a r t o s c i do o k n a V e d i t
set
( Vedit ,
’ S t r i n g ’
, [
’ r e z y s t a n c j a ’
,
n u m 2 s t r
( R ) ] ) ;
r l c p l o t ;
Listing 11: Plik rlcplot.m
% r l c p l o t w y w o ł y w a n y z m p l i k u R L C g u i
% r e z y s t a n c j a j a k o z m i e n n a g l o b a l n a
g l o b a l
R L C U t2
x0 = [ 0 ; 0];
% W a r t o s c i p o c z a t k o w e
[ t , x ]=
o d e 2 3
(
’ r l c f u n ’
,[ t0 , t2 ] , x0 );
% r o z w i ą z a n i e u k ł a d u r ó w n a ń
s u b p l o t
(2 ,1 ,1)
p l o t
( t , x (: ,1));
t i t l e
(
’ P r a d w s z e r e g o w y m o b w o d z i e RLC ’
);
x l a b e l
(
’ t ’
);
y l a b e l
(
’ i ’
);
s u b p l o t
(2 ,1 ,2);
p l o t
( t , x (: ,2));
t i t l e
(
’ N a p i e c i e na k o n d e n s a t o r z e ’
);
x l a b e l
(
’ t ’
);
y l a b e l
(
’ U_c ’
);
Ćwiczenie 7. Zmodyfikować programy z ostatniego przykładu tak, aby zrealizować następujące cele:
• ograniczyć liczbę M–plików do dwóch: sterującego interfejsem użytkownika i obliczającego prawą stronę równania
różniczkowego.
• Umożliwić wprowadzanie pozostałych – obok rezystancji – parametrów układu za pomocą interfejsu graficznego:
– czasu końcowego przy pomocy suwaka,
– indukcyjności, pojemności i napięcia przy pomocy pól edycyjnych (wyposażonych w etykiety).
• Wprowadzić wyświetlanie współczynnika tłumienia w oknie graficznym zamiast na konsoli.
• Wprowadzić wyświetlanie pulsacji trgań nietłumionych w oknie graficznym.
• Wyeliminować użycie zmiennych globalnych.
• Dodać menu pozwalające wybierać sposób wyświetlania wyników (tylko przebieg napięcia na kondensatorze albo
tylko przebieg prądu albo obydwa w dwóch podokienkach).
Wszystkie parametry zależne muszą być aktualizowane po zmianie parametru od którego zależą
Ćwiczenie 8. Sprawdzić działanie programu graf2d.m ze zbiorów bibliotecznych Matlaba. Odszukać fragment odpowie-
dzialny za tworzenie tekstów informacyjnych (help) i napisać rozbudować program z poprzedniego ćwiczenia o zastosowanie
okna informacyjnego (pomocy).
Laboratorium Modelowania w Elektrotechnice
9
3
Praca z Simulinkiem
Ćwiczenie 9. Korzystając z programu Simulink utworzyć schemat układu z elementem oscylacyjnym drugiego rzędu
o nazwie oscy.mdl. Użyć skoku jednostkowego jako sygnału wymuszającego. Element oscylacyjny należy utworzyć z blo-
ków całkujących i proporcjonalnych.
W tym celu w linii poleceń Matlab’a wydać polecenie simulink, a z menu otwartego w ten sposób okna wybrać
File | New. Model złożyć z bloków Integrator i Gain oraz sumatora („Sum”) z biblioteki Linear; Jako źródła sy-
gnału wymuszającego użyć bloku Step z biblioteki Sources, a do obserwacji wyników symulacji jednego z bloków Scope,
z biblioteki Sinks. Przeanalizować korzyści i niedogodności użycia zamiast integratorów i elementów proporcjonalnych
bloku Transfer function, potem sprawdzić zawartość biblioteki Simulink Extras.
Przypomnienie: Równanie różniczkowe elementu oscylacyjnego:
¨
x(t) + 2ξω
0
˙
x(t) + ω
2
0
x(t) = kω
2
0
u(t)
a jego transmitancja operatorowa:
G(s) =
kω
2
0
s
2
+ 2ξω
0
s + ω
2
0
Ćwiczenie 10. Zamodelować układ trzeciego rzędu opisany równaniem różniczkowym
...
y + a
2
¨
y + a
1
˙
y + a
0
y = u
Za sygnał wymuszający przyjąć skok jednostkowy. Współczynniki dobierać w ten sposób, aby uzyskać przebiegi przejściowe
różnego typu (aperiodyczne i oscylacyjne).
Ćwiczenie 11. Traktując model układu stworzony w ćwiczeniu 10 jako obiekt regulacji, zbudować model układu regulacji
z dyskretnym regulatorem PI. Porównać przebiegi sygnału wyjściowego uzyskiwane w układzie z ciągłym i dyskretnym
regulatorem.
Ćwiczenie 12. Rozbudować model układu regulacji z ciągłym regulatorem PI o układ „anti reset windup”. Użyć bloku
Saturation z biblioteki Nonlinear i odpowiednich sprzężeń zwrotnych. Porównać przebiegi uzyskane we wszystkich
wersjach rozważanego dotąd układu regulacji.
Ćwiczenie 13. Dokonać opisanych niżej modyfikacji utworzonego w ćwiczeniu 9 modelu oscy.mdl. Fragment schematu
blokowego z elementem oscylacyjnym należy zgrupować (polecenia menu Edit | Create Subsystem) a następnie zama-
skować (polecenia menu Edit | Mask) tworząc nowy blok.
Zakładka Icon
Mask type:
Blok oscylacyjny
Drawing commands:
disp(’Blok \n oscylacyjny’)
Zakładka Initialization
Mask type: Blok oscylacyjny
Wprowadzić następujące pary przyciskiem Add (pozostawić Control type: Edit, Assignment: Evaluate):
Prompt: Warunek początkowy:
Variable: x0
Prompt: Współczynnik wzmocnienia:
Variable: k
Prompt: Pulsacja:
Variable: w0
Prompt: Tłumienie:
Variable: dz
Ćwiczenie 14. Modyfikując wyłącznie parametry maski dostosować model bloku oscylacyjnego do modelowania szere-
gowego obwodu RLC, którego sygnałem wejściowym jest napięcie zasilające, a wyjściowym – napięcie na kondensatorze.
Należy to rozumieć w ten sposób, że ustawianymi w oknie dialogowym (zamaskowanego) bloku parametrami mają być
teraz rezystancja, pojemność i indukcyjność.
Ćwiczenie 15. Wykorzystując plik z elementem oscylacyjnym utworzyć nowy plik o nazwie oscy1.mdl. Zamiast linii
Drawing commands: disp(’Blok \n oscylacyjny’)
należy wprowadzić dane z rysunku tworzonego za pomocą polecenia iconedit wydanego z linii poleceń. Podczas kon-
wersacji podać nazwę edytowanego pliku Simulink’a oraz nazwę bloku, w którym ma być umieszczona ikona. W oknie
rysunku narysować przebieg imitujący odpowiedź bloku oscylacyjnego.
Ćwiczenie 16. Wykorzystując plik z elementem oscylacyjnym utworzyć nowy plik o nazwie oscy2.mdl. Zamiast linii
Drawing commands: Blok \n oscylacyjny
wpisać polecenie
Drawing commands: plot(0,0,100,100, [ 20,80,80,20,20 ] , [20,20,70,70,20], [15,50,85,15], [70,90,70,70], [42,42,29,29],
[20,44,44,20], [52,68,68,52,52], [55,55,44,44,55])
i sprawdzić efekt.
Laboratorium Modelowania w Elektrotechnice
10
Rysunek 1: Okno dialogowe do definiowania właściwości „zamaskowanego” podsystemu
Rysunek 2: Zamaskowany blok elementu oscylacyjnego
Laboratorium Modelowania w Elektrotechnice
11
Ćwiczenie 17. Wykorzystując plik z elementem oscylacyjnym utworzyć nowy plik o nazwie oscy4.mdl. Na schema-
cie umieścić dodatkowy blok, za pomocą którego będą wczytywane parametry schematu blokowego. W tym celu należy
skopiować z biblioteki Signals & Systems blok Subsystem i wybrać z menu polecenie maskowania tego bloku. Podczas
maskowania wpisać na zakładce Icon
Mask type:
Przycisk
Drawing commands:
disp(’Wczytaj dane’)
następnie wybrać z menu Edit albo z menu kontekstowego Block Properties i wpisać
Open function: oscydat4
gdzie oscydat4.m jest nazwą pliku skryptowego z danymi modelu.
Dla dociekliwych: możliwe jest powiązanie pewnych działań, na przykład wczytania danych, z załadowaniem modelu do
pamięci tak, że nie trzeba pamiętać o inicjowaniu (uruchamianiu skryptu wczytującego dane). Osiąga się to poleceniem
set_param(<model>, ’PreLoadFcn’, <akcja>) lub set_param(<model>, ’PostLoadFcn’, <akcja>), a więc w rozwa-
żanym przykładzie mogło by to być set_param(’oscy4’, ’PreLoadFcn’, ’oscydat4’)
Ćwiczenie 18. Wykorzystując model z elementem oscylacyjnym utworzyć nowy plik o nazwie oscy5.mdl. Na schemacie
umieścić dodatkowe bloki, za pomocą których będzie uruchamiany M–skrypt inicjujący potrzebne zmienne w przestrzeni
roboczej z danymi modelu o nazwie oscy5dat.m oraz wywoływany będzie edytor z tym plikiem.
Wskazówka: Zastosować polecenia oscy5dat, edit oscy5dat.m.
Ćwiczenie 19. Zastąpić blok Scope w modelu z poprzedniego ćwiczenia blokiem To Workspace (można też po pro-
stu dodać taki blok) i stworzyć przez maskowanie „przycisk” kolekcjonujący na wspólnym wykresie przebiegi (rysowane
poleceniem plot) dla różnych wartości parametrów wprowadzanych w oknie poleceń Matlab’a (albo przez edycję i uru-
chamianie M–skryptu inicjującego).
Uwaga: potrzebny będzie jeszcze drugi blok To Workspace przyłączony do bloku Clock z biblioteki Sources jako źró-
dło informacji o chwilach czasowych w których obliczono sygnał wyjściowy (można zamiast tego odpowiednio ustawić
parametry pierwszego bloku To Workspace).