Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Simulink: równania różniczkowe

W niniejszym wpisie zakładam że czytelnikowi znane jest pojęcie „równanie różniczkowe” i całkowanie. Pierwotna wersja wpisu miała powstać przy użyciu XCOS wbudowanego w scilab. Niestety pojawiły się problemy. Uściślając za modelowanie prostego równania różniczkowego nie stanowiło problemu, aczkolwiek pojawiły się bardzo poważne problemy z stabilnością xcos. O ile sam scilab jest dość stabilny to moduł xcos już nie, wyłączanie się programu po symulacji czy w trakcie zdarzało się bardzo często na linuksie, a na windows już nie co rzadziej ale nadal było to normą. Niestety przyczyny mi nie są znane zważywszy na to że linuks korzystał z Openjre 6 a Windows oracle jre 7, zaryzykuję stwierdzenie że program jest stabilniejszy na wydaniu jre oracle ,aczkolwiek zauważmy oracle zapowiedział oparcie swoich wydań jre o openjre. Dodatkowo po za modelowaniu przykładu drugiego okazało się że wyniki nie są takie jak powinny być. Jeśli znajdzie się osoba która za modeluje przykład drugi w xcos i wyniki będą się zgadzały z wynikami z simulinka proszę o podesłanie pliku.

„...Mathematics is the language of nature...”

Powyższy cytat pochodzi z filmu PI i niesie w sobie niezwykle istotną informację. Zjawiska fizyczne mogą być opisane za pomocą równań(mniej lub bardziej dokładnie). Czytelniku jeśli nie wierzysz porównaj kształt huraganu z tzw. złotym podziałem.

Masa-Tłumik-Sprężyna

Zaczniemy od prostego przykładu układu II rzędu, który to w tego typu opracowaniach jest oklepany jak chabeta po westernie :) W poniższym dokumencie przykład 1LinkPrzekształćmy równanie nieco(apostrofy to kolejne pochodne).F=mx''+cx'+kx F-siłam-masac-stała tłumieniak-wsp. Sprężystości Nasuwa się pytanie jak przekształcić takie równanie aby można było je zapisać w simulinku.Otóż po jednej stronie musi zostać najwyższa pochodna a reszta po drugiej czyli:x''=1/m(F-cx'-kx) (1.1)Zapiszmy to teraz w simulinku:

Źródłem siły F jest blok Step czyli w chwili równej t=0, Pojawia się stały w czasie sygnał o wartości 1(po kliknięciu lpm, można zmienić wartość), następnie jest on przekazywany do sumatora, aby stworzyć odpowiedni sumator przeciągamy go z biblioteki(Math Operations) klikamy lpm po czym w list of signs wpisujemy |-+- ,a icon shape na rectangual. Przejdźmy do implementacji równania, w równaniu (1.1) mnoży się współczynniki w nawiasie przez odwrotność masy, w takim wypadku musimy skorzystać z bloku Gain, klikamy lpm na niego i wpisujemy po prostu 1/0.1 ,gdzie 0.1 to masa. Teraz każdy sygnał jaki do niego wejdzie(z sumatora) na wyjściu jest pomnożony przez ta wartość, następnie wyjście tego bloku musimy połączyć z Integratorem(będziemy to całkować), na wyjściu tego integratora pojawia się wtedy x' co musimy pomnożyć przez stałą c, czyli po raz kolejny Gain którego wejściem jest wyjście pierwszego integratora a wyjście wędruje do sumatora(nic innego jak sprzężenie zwrotne), dodatkowo z wyjścia pierwszego integratora ciągniemy do wejścia drugiego integratora na którego wyjściu pojawi się x czyli nasze rozwiązanie(konkretni położenie), z mnożeniem postępujemy tak jak wcześniej. Aby wykreślić rozwiązanie korzystamy z bloku Scope, po zakończeniu symulacji klikamy na niego.

A odpowiedź to:

Proponuje w celu polepszenia wyniku pobawić się solverem(ctr+e lub opcje konfiguracji).

Pokój

W niniejszym przykładzie zostanie pokazane krzywa temperatury nagrzewania się pokoju, zostanie także użyty regulator PI w celu polepszenia charakterystyki. Dlatego za nim pójdziesz dalej czytelniku zapoznaj się z regulatorami PID, opis znajduje się na Wikipedii a ponadto wiele uczelni udostępnia PDF'y wraz z opisem tego typu urządzeń.

Zacznijmy od implementacji równania, zauważmy że mamy tu układ równań. Stworzenie opisu w simulinku takich równań jest dość łatwe i podobne do poprzedniego. Używamy takich samych bloków jak poprzednio, zapewne zauważyłeś że wartości których szukamy są ze sobą połączone(Tg-temp. Grzejnika, Tp-temp. pomieszczenia) czyli mówiąc najoględniej wyjścia(czyli rozwiązania) są wejściami niektórych węzłów sumatorów. Zauważyłeś także zapewne że nie ma skąd pobrać wartości (Pg-moc grzania,tzew-temp. Zewnętrzna), dane te będą pochodziły z zewnątrz a nasza implementacja równań zostanie zamknięta w tzw. subsystemie czyli stworzymy tka jak by własny blok z 2 wejściami i wyjściami.

W bibliotece sources odnajdujemy blok In1(tylko jedno wyj.), potrzebne są dwa jeden z nich to zmienna Pg a drugi tzew. Teraz potrzebne są nam wyjścia Tp i Tg. W Sinks znajduje się blok Out1(tylko jedno wej.), potrzebne są dwa. Wyjście In łączymy do odpowiednich wejść sumatora a wyjścia do wyjść integrtorów. Teraz zaznaczamy wszystko i klikamy prawym przyciskiem i wybieramy create subsytem. Tada !

Mając pojedynczy blok opisujący równania Przystąpmy do stworzenia systemu sterowania.Potrzebny będzie blok Step symbolizujący zadaną temperaturę, sine wave(sinusoida) reprezentujący zmianę temperatury na zewnątrz(lpm i ustawiamy amplitudę na 5), Saturation który ograniczy sygnał(sygnał to moc grzejnika) ustawiamy wartość na 5000 a na koniec blok PI, możemy go zbudować sami(tak jak ma to zrobione) lub skorzystać z wbudowanego PID, aby otrzymać PI wartość D ustawiamy na zero. Skorzystamy także z bloku to workspace(wysłanie do matlaba) aby za pomocą polecenia plot wykreślić przebiegi(można też bezpośrednio w simulinku użyć scope i multipleksera), ustaw w save format bloku Array. Teraz łączymy wszystko jak na rysunku i symulujemy. Ustawienia symulacji to Type:fixed-step i ode1(Euler), 7000 sekund.

Celowo nie podaje nastaw PI. Spróbuj się pobawić czytelniku lub po prostu użyj jakieś metody doboru współczynników. Poniżej jest wykres w którym przedstawiam wyniki dla dwóch przykładów kiedy mamy do czynienia z regulatorem P tylko(nastawa P=5000) i regulatorem PI.

 

oprogramowanie programowanie

Komentarze

flaszer  19.02.2012 21:23 #1

Ahh, wspomnienia z jednego z przedmiotów uczelnianych wracają ;) Praca z Matlabem, po zapoznaniu się z jego możliwościami była wręcz przyjemnością ;)

djfoxer WSPÓŁPRACOWNIK 19.02.2012 22:41 #2

Zgadam się z flaszerem, scilab jest fajny, ale w porównaniu do Matlaba to kalkulator do zabawy ;)

revcorey  19.02.2012 22:49 #3

Zależy jak na to popatrzysz. Jeśli popatrz na matlaba jako całość to tak. Jeśli popatrzeć od strony interpretatora bez dokumentacji i simulinka to nie jest tak źle. Z tego co wiem to w airbusie niektóre obliczenia przeprowadzano w excelu także czasami prostsze narzędzia są dobre.

djfoxer WSPÓŁPRACOWNIK 19.02.2012 23:00 #4

Na pewno masz racje, do prostych obliczeń, czy na studiach do wprowadzenia w aplikacje inżynierskie, jak najbardziej. Pamiętam jak na studiach robiliśmy w scilabie (+ SIP do grafiki) aplikację do obróbki grafik i nakładania filtrów. Ogólnie działało, ale szybkość obliczeń pozostawiała wiele do życzenia, a na Matlabie to samo działało dużo szybciej.

pendulum (niezalogowany) 19.02.2012 23:41 #5

Poprzez T oznaczamy temperaturę wyrażaną w Kelwinach. Temperaturę wyrażaną w °C oznaczamy t.

Pzdr!

revcorey  20.02.2012 09:26 #6

Scilab jest znacznie szybszy na linuksie powiedzmy około 2-3 razy aczkolwiek zależy od operacji.

rafx85 (niezalogowany) 01.03.2012 15:17 #7

Jest jakiś bloczek do wyrażenia pochodnej? Mam regulator PID i chciałbym zrobić jego pochodną w układzie w simulinku da się zrobić coś takiego?

revcorey  08.03.2012 22:37 #8

Tak pochodna jest jak najbardziej derivative

toch88 (niezalogowany) 02.02.2013 12:28 #9

Czyżby z akademii morskiej :) pozdr

revcorey  05.02.2013 19:31 #10

nie, pwr

sylwucha (niezalogowany) 14.12.2013 16:46 #11

co jesli zrobilam wszytko tak jak jest powyzej a wyskakuje mi tylko w matlabie : "Using a default value of 0.4 for maximum step size. The simulation step size will be limited to be less than this value. You can disable this diagnostic by setting 'Automatic solver parameter selection' diagnostic to 'none' in the Diagnostics page of the configuration parameters dialog"

Łukasz z (niezalogowany) 20.01.2014 23:12 #12

Witaj revcorey, czy mógłbym uzyskać jakiś kontakt do cd? np mail

revcorey  29.01.2014 10:34 #13

Witaj, obecnie przebywam na wyjeździe służbowym(paro miesięcznym) więc kontakt emailowy jest ze mną bardzo utrudniony :) I cierpię na brak czasu.

mechatronika88 (niezalogowany) 15.04.2014 11:15 #14

Witam,

w sumie ponawiam pytanie poprzednika:), czy można uzyskać jakiś kontakt do Ciebie, ponieważ potrzebuje pomocy w sterowaniu układu w Simulinku

mechatronika321 (niezalogowany) 15.04.2014 12:58 #15

Witam,

w sumie ponawiam pytanie poprzednika:), czy można uzyskać jakiś kontakt do Ciebie, ponieważ potrzebuje pomocy w sterowaniu układu w Simulinku

revcorey  20.04.2014 11:08 #16

@revcorey
Jak już mówiłem w zasadzie mnie nie ma :) Ostatnio już też nie mam czasu się simulinkiem zajmować.