WYDZIAŁ ELEKTROTECHNIKI I AUTOMATYKI Katedra Inżynierii Systemów Sterowania PODSTAWY AUTOMATYKI MATLAB - instrukcje i funkcje zewnętrzne. Grafika w Matlabie. Wprowadzenie do biblioteki Control System Toolbox. Materiały pomocnicze do ćwiczeń laboratoryjnych - część III - termin T2 Opracowanie: Kazimierz Duzinkiewicz, dr hab. inż. Michał Grochowski, dr inż. Robert Piotrowski, dr inż. Tomasz Rutkowski, dr inż. Rafał Łangowski, dr inż. Gdańsk
1. Przykłady Przykład 1: Wyjaśnij działanie poszczególnych części poniższego skryptu: % Część 1 % Część 2 disp('przykładowy M-plik') % Część 3 t=0:1:1000; k=10; % Część 4 T=input ('Podaj dodatnią wartość parametru T='); while T<=0 T=input('Wprowadziłeś niedodatnią wartość parametru T, podaj dodatnią wartość tego parametru T=') end % Część 5 y1=6*t+k; y2=t*t.^2+5; % Część 6 subplot(2,1,1); plot(t,y1,'g'); title('wykres funkcji y1'); xlabel('czas [s]'); ylabel('y1'); % Część 7 pause(3); % Część 8 subplot(2,1,2); plot(t,y2,'r'); title('wykres funkcji y2'); xlabel('czas [s]'); ylabel('y2'); % Czyszczenie przestrzeni roboczej (workspace) i okna Command Window % Wyświetlenie napisu w oknie Command Window disp('przykładowy M-plik') % Określenie czasu symulacji w [sek] i wartości parametru k t=0:1:1000; k=10; - 2 -
% Wprowadzenie z klawiatury wartości parametru T z warunkiem, że ma być dodatni T=input ('Podaj dodatnią wartość parametru T='); while T<=0 T=input('Wprowadziłeś niedodatnią wartość parametru T, podaj dodatnią wartość tego parametru T=') end % Obliczenie wartości pierwszej i drugiej funkcji dla kolejnych wartości t y1=6*t+k; y2=t*t.^2+5; % Podział okna na 2 części i wykreślenie w kolorze zielonym wykresu funkcji y1 w pierwszym ekranie, narysowanie siatki, podpisanie wykresu i obu osi subplot(2,1,1); plot(t,y1,'g'); title('wykres funkcji y1'); xlabel('czas [s]'); ylabel('y1'); % Wykonanie 3 sekundowej przerwy pause(3); % Podział okna na 2 części i wykreślenie w kolorze czerwonym wykresu funkcji y2 w drugim ekranie, narysowanie siatki, podpisanie wykresu i obu osi subplot(2,1,2); plot(t,y2,'r'); title('wykres funkcji y2'); xlabel('czas [s]'); ylabel('y2'); Wynik działania M-pliku (T=3): Rys. 1. Wynik działania M-pliku z Przykładu 1-3 -
Przykład 2: Rozważmy następujące zadanie: Wykorzystując instrukcję for napisz M-plik obliczający wartość funkcji,. Wynik wyświetl na ekranie monitora. dla czterech wartości % M-plik wykorzystujący instrukcję for disp('m-plik wykorzystujący instrukcję for') % Wprowadzenie danych p=4; % Wykorzystanie instrukcji for for x = 1:p y = x+2*x end Wynik działania M-pliku : M-plik wykorzystujący instrukcję for y = y = y = y = 3 6 9 12 Przykład 3: Rozważmy następujące zadanie: Wykorzystując instrukcję if napisz M-plik, który dla oblicza wartość funkcji, a w przeciwnym przypadku obliczana jest wartość funkcji. Wartości parametrów a i b zmieniaj w M-pliku. % M-plik wykorzystujący instrukcję if disp('m-plik wykorzystujący instrukcję if') % Wprowadzenie danych a=5 b=5 % Wykorzystanie instrukcji if if a == b - 4 -
y = a+b else y = a-b end Wynik działania M-pliku : M-plik wykorzystujący instrukcję if a = b = y = 5 5 10 Przykład 4: Rozważmy następujące zadanie: Napisz M-plik kreślący na jednym wykresie następujące funkcje:, dla. Przyjmij następujące wartości parametrów:, i załóż możliwość zmiany ich wartości w M-pliku. Podpisz osie - czcionka 12 z wytłuszczeniem, umieść siatkę, tytuł wykresu - czcionka 14 z wytłuszczeniem w kolorze czerwonym oraz legendę w prawym dolnym rogu obszaru kreślenia. Wykres funkcji y1 wykonaj linią przerywaną w kolorze czerwonym, natomiast y2 linią kropkowaną w kolorze żółtym z zaznaczeniem poszczególnych punktów gwiazdkami. % M-plik kreślący wykres dwóch funkcji: y1 i y2 disp('m-plik kreślący wykres dwóch funkcji: y1 i y2') % Określenie wartości x x=-10:0.1:10; % Wprowadzenie danych k1=3; k2=2; %Obliczenie wartości pierwszej funkcji y1=k1*x; %Obliczenie wartości drugiej funkcji y2=x.^k2; %Wykreślenie dwóch funkcji y1 i y2 na jednym wykresie, narysowanie siatki, podpisanie wykresu i obu osi plot(x,y1,'r--',x,y2,'y:*'); title('dwa wykresy funkcji','fontsize',14,'fontweight','bold','color','r'); xlabel('x','fontsize',12,'fontweight','bold'); ylabel('y','fontsize',12,'fontweight','bold'); legend('red - wykres funkcji y1','yellow - wykres funkcji y2','location','southeast') - 5 -
Wynik działania M-pliku: Przykład 5: Rozważmy następujące zadanie: Rys. 2. Wynik działania M-pliku z Przykładu 4 Działanie nieobciążonego prądowo czwórnika RC (rys. 3) opisane jest równaniem: u R (t) R i R (t) i obc (t) i C (t) u we (t) C u C (t) u wy (t) Rys. 3. Schemat czwórnika z Przykładu 5 Zakładając zerowe warunki początkowe i korzystając z pojęcia transmitancji operatorowej napisz M-plik kreślący na dwóch wykresach w dwóch oknach charakterystyki skokowe obiektu ( ): Przypadek 1: dla jednej wartości rezystancji oraz trzech różnych wartości pojemności:, i, Przypadek 2: dla jednej wartości rezystancji oraz trzech różnych wartości pojemności:, i. Podpisz osie, umieść siatkę, tytuły wykresów i legendę. % M-plik kreślący odpowiedź skokową obiektu inercyjnego pierwszego rzędu % Przypadek 1 - R = 3 [Ohm], C = 4 [mf] lub C = 6 [mf] lub C = 1 [mf] % Przypadek 2 - C = 2 [mf], R = 3 [Ohm] lub R = 6 [Ohm] lub R = 10 [Ohm] - 6 -
disp('m-plik kreślący odpowiedź skokową obiektu inercyjnego pierwszego rzędu') % Wprowadzenie danych % Przypadek 1 R=3; C_1=4/1000; C_2=6/1000; C_3=1/1000; % Przypadek 2 C=2/1000; R_1=3; R_2=6; R_3=10; % Obliczenie stałych czasowych bezwładności (inercji) % Przypadek 1 Tb1_1=R*C_1; Tb1_2=R*C_2; Tb1_3=R*C_3; % Przypadek 2 Tb2_1=C*R_1; Tb2_2=C*R_2; Tb2_3=C*R_3; % Liczniki i mianowniki transmitancji operatorowej % Przypadek 1 L1_1=[1]; M1_1=[Tb1_1 1]; L1_2=[1]; M1_2=[Tb1_2 1]; L1_3=[1]; M1_3=[Tb1_3 1]; % Przypadek 2 L2_1=[1]; M2_1=[Tb2_1 1]; L2_2=[1]; M2_2=[Tb2_2 1]; L2_3=[1]; M2_3=[Tb2_3 1]; % Transmitancje operatorowe % Przypadek 1 G1_1=tf(L1_1,M1_1); G1_2=tf(L1_2,M1_2); G1_3=tf(L1_3,M1_3); % Przypadek 2 G2_1=tf(L2_1,M2_1); G2_2=tf(L2_2,M2_2); G2_3=tf(L2_3,M2_3); % Wykreślenie na jednym wykresie odpowiedzi skokowej dla przypadku 1 figure(1); step(g1_1,'r'); hold on step(g1_2,'b'); hold on - 7 -
step(g1_3,'y'); title('odpowiedź skokowa dla trzech różnych wartości C'); xlabel('czas'); ylabel('uwy [V]'); legend('uwy1 dla C = 4[mF]','Uwy2 dla C = 6[mF]','Uwy3 dla C = 1[mF]') pause(2); % Wykreślenie na jednym wykresie odpowiedzi skokowej dla przypadku 2 figure(2); step(g2_1,'r',g2_2,'b',g2_3,'y'); title('odpowiedź skokowa dla trzech różnych wartości R'); xlabel('czas'); ylabel('uwy [V]'); legend('uwy1 dla R = 3[Ohm]','Uwy2 dla R = 6[Ohm]','Uwy3 dla R = 10[Ohm]') Wynik działania M-pliku: Rys. 4. Wynik działania M-pliku z Przykładu 5-8 -
Przykład 6: Rozważmy następujące zadanie: Dany jest obiekt inercyjny drugiego rzędu o transmitancji operatorowej postaci: Napisz M-plik kreślący na czterech wykresach w jednym oknie charakterystykę impulsową, charakterystykę skokową, rozkład zer i biegunów oraz charakterystykę Nyquist a tego obiektu. Podpisz osie, umieść siatkę i tytuły wykresów. % M-plik kreślący odpowiedzi obiektu inercyjnego drugiego rzędu % Wprowadzenie danych Kp=3; % współczynnik wzmocnienia (statycznego) obiektu Tb1=2; % stałe czasowe (stałe czasowe inercji) obiektu Tb2=5; % Transmitancja operatorowa s=tf('s'); G=tf(Kp/((1+Tb1*s)* (1+Tb2*s))); % Wykreślenie na jednym wykresie odpowiedzi impulsowej, odpowiedzi skokowej, zer i biegunów oraz charakterystyki Nyquista figure; subplot(2,2,1); impulse(g); title('odpowiedź impulsowa'); xlabel('czas'); ylabel('odpowiedź'); subplot(2,2,2); step(g); title('odpowiedź skokowa'); xlabel('czas'); ylabel('odpowiedź'); subplot(2,2,3); pzmap(g); title('zera i bieguny'); xlabel('re'); ylabel('im'); subplot(2,2,4); nyquist(g); title('charakterystyka Nyquista'); xlabel('re'); ylabel('im'); - 9 -
Wynik działania M-pliku: Przykład 7: Rozważmy następujące zadanie: Rys. 5. Wynik działania M-pliku z Przykładu 6 Dane są dwa obiekty: całkujący rzeczywisty o transmitancji operatorowej równej: oraz i różniczkujący rzeczywisty o transmitancji operatorowej równej:. Napisz M-plik kreślący na dwóch wykresach w jednym oknie logarytmiczne charakterystyki Bode a tych obiektów. Podpisz osie, umieść siatkę i tytuły wykresów. % M-plik kreślący charakterystyki Bode'a obiektu całkującego rzeczywistego i różniczkującego rzeczywistego % Wprowadzenie danych obiektu całkującego rzeczywistego Ti=5; % stała czasowa całkowania Tb1=10; % stała czasowa inercji (bezwładności) % Transmitancja operatorowa obiektu całkującego rzeczywistego s=tf('s'); G1=tf(1/(Ti*s*(Tb1*s+1))); % Wprowadzenie danych obiektu różniczkującego rzeczywistego Td=10; % stała czasowa różniczkowania - 10 -
Tb2=5; % stała czasowa inercji (bezwładności) % Transmitancja operatorowa obiektu różniczkującego rzeczywistego G2=tf(Td*s/(Tb2*s+1)); % Wykreślenie charakterystyki Bode'a obiektu całkującego rzeczywistego i różniczkującego rzeczywistego subplot(2,1,1); bode(g1); title('charakterystyka Bodea - obiekt całkujący rzeczywisty'); subplot(2,1,2); bode(g2); title('charakterystyka Bodea - obiekt różniczkujący rzeczywisty'); Wynik działania M-pliku: Przykład 8: Rozważmy następujące zadanie: Rys. 6. Wynik działania M-pliku z Przykładu 7 Dane jest następujące równanie charakterystyczne układu regulacji:. Napisz M-plik umożliwiający zbadanie stabilności tego układu z wykorzystaniem kryterium Routh a (Routh a - Hurwitz a). % M-plik służący do badania stabilności układu za pomocą kryterium stabilności Routh a - 11 -
% Określenie współczynników równania charakterystycznego a0=2; a1=1; a2=1; a3=10; % Określenie dwóch pierwszych wierszy tablicy Routh a disp('dwa pierwsze wiersze tablicy Routh a są postaci:') poczatek_tablicy=[a3 a1; a2 a0] % Określenie kolejnych elementów tablicy Routh a licząc odpowiednie wyznaczniki disp('wyznaczamy kolejne elementy tablicy Routh a licząc odpowiednie wyznaczniki:') b1=-det([a3 a1; a2 a0])/a2 b2=-det([a3, 0; a2, 0])/a2 c1=-det([a2, a0; b1, b2])/b1 % Określenie całej tablicy Routh a disp('zatem cala tablica Routh a jest postaci:') cala_tablica=[a3, a1; a2, a0; b1, b2; c1, 0; a0, 0] if (a3>0)&(a2>0)&(b1>0)&(c1>0)&(a0>0) disp('zgodnie z kryterium Routh a układ jest stabilny.') elseif ((a3>0)&((a2<0) (b1<0) (c1<0) (a0<0))) ((a2>0)&((a3<0) (b1<0) (c1<0) (a0<0))) ((b1>0)&((a3<0) (a2<0) (c1<0) (a0<0))) ((c1>0)&((a3<0) (a2<0) (b1<0) (a0<0)) ) ((a0>0)&((a3<0) (a2<0) (b1<0) (c1<0))) disp('zgodnie z kryterium Routh a układ jest niestabilny.') end Wynik działania M-pliku: Dwa pierwsze wiersze tablicy Routh a są postaci: poczatek_tablicy = 10 1 1 2 Wyznaczamy kolejne elementy tablicy Routh a licząc odpowiednie wyznaczniki: b1 = -19 b2 = 0 c1 = 2 Zatem cala tablica Routh a jest postaci: cala_tablica = 10 1 1 2-19 0 2 0 2 0-12 -
Zgodnie z kryterium Routh a układ jest niestabilny. Przykład 9: Rozważmy następujące zadanie: Dany jest układ regulacji pokazany na rysunku 7. X(s) E(s) G r (s) G ob (s) Rys. 7. Schemat do Przykładu 9 Transmitancje operatorowe obiektu i regulatora typu PI są równe odpowiednio: Napisz M-plik kreślący na dwóch wykresach w jednym oknie odpowiedź układu na skok jednostkowy i odpowiedź na sygnał liniowy. Podpisz osie, umieść siatkę i tytuł wykresu. % M-plik kreślący odpowiedzi układu regulacji % Wprowadzenie danych obiektu K=15; % współczynnik wzmocnienia (statycznego) obiektu T1=0.01; % stałe czasowe obiektu T2=5; % Transmitancja operatorowa obiektu s=tf('s'); Gob=tf(K/((T1*s+1)*(T2*s+1))); % Wprowadzenie danych regulatora typu PI kp=13.3; % współczynnik wzmocnienia regulatora Ti=250; % stała czasowa regulatora % Transmitancja operatorowa regulatora typu PI Gr=tf(kp*(1+(1/(Ti*s)))); % Transmitancja operatorowa układu otwartego Go=series(Gob,Gr); % Transmitancja operatorowa układu zamkniętego (ujemne sprzężenie zwrotne) Gz=feedback(Go,1,-1); % Wykreślenie odpowiedzi układu regulacji subplot(2,1,1); step(gz); - 13 -
title('odpowiedz skokowa układu regulacji'); xlabel('czas [s]'); ylabel('y(t)'); subplot(2,1,2); t = 0:0.1:100; xwe=t; lsim(gz,xwe,t) title('odpowiedz układu regulacji na sygnał liniowy'); xlabel('czas'); ylabel('y(t)'); Wynik działania M-pliku: Rys. 8. Wynik działania M-pliku z Przykładu 9 2. Bibliografia Brzózka J. Ćwiczenia z automatyki w Matlabie i Simulinku. Wydawnictwo MIKOM, 1997. Brzózka J., Dorobczyński L. Matlab - środowisko obliczeń naukowo-technicznych. Wydawnictwo MIKOM, 2005. Mrozek B., Mrozek Z. Matlab i Simulink. Poradnik użytkownika. Wydanie II. Wydawnictwo HELION, 2004. Pratap R. Matlab 7 dla naukowców i inżynierów. Wydawnictwo HELION, 2010. Sradomski W. Matlab. Praktyczny poradnik modelowania. Wydawnictwo HELION, 2015. The Mathworks. Control System Toolbox for use with Matlab. Natick, 2001. Zalewski A., Cegieła R. Matlab - obliczenia numeryczne i ich zastosowania. Wydawnictwo NAKOM, 1996. - 14 -