ELEC-A5140 - Matematiikkaohjelmistot, Luento-opetus, 22.4.2024-27.5.2024
This course space end date is set to 27.05.2024 Search Courses: ELEC-A5140
Simulink-tutoriaali
1) Simulinkin käynnistäminen
Simulink on MATLABin kanssa toimiva ohjelmisto, ja helpoin tapa käynnistää se on joko MATLAB-komennolla tai klikkaamalla omistettua nappia käyttöliittymässä.
Painamalla
nappia pitäisi aueta jotakuinkin tämännäköinen ikkuna. Tässä on
aloitusvaihtoehdot, hieman kuin Office-ohjelmistoissa jos luot uuden
dokumentin. Examples-välilehdellä voi tutustua kivoihin esimerkkeihin,
jos mielenkiintoa on. Tällä kurssilla haluat "Blank Model"-vaihtoehdon.
2) Mallin luominen
Tässä esimerkissä luodaan erittäin yksinkertainen malli, jossa havainnollistetaan Matlab-kytkentä ja jokainen lohkotyyppi.
Jos seurasit edellisiä askelia, pitäisi aueta tämännäköinen ikkuna:
Lohkoja voi selata "Library Browser"-nappulasta aukeavalla ikkunalla, mutta nopein ja käytännöllisin menetelmä (jos tiedät jotakuinkin mitä haluat) on kaksoisklikkaus paikkaan mihin haluat uuden lohkon, jolloin aukeavasta käyttöliittymästä voit hakea lohkoja. Haluamme ensimmäiseksi "Gain"-lohkon:
Nuolinäppäimet+Enter / Leftclick valitsee halutun lohkon, korostettuna kuvassa. Listaan tulevien lohkojen määrä riippuu asentamiesi kirjastojen, työkalulaatikoiden (toolbox) ja itse luomiesi lohkojen määrästä.
Gain-lohko
on yksinkertaisesti vakiolla kertominen, eli jos dynaamista systeemiä
mallintavassa differentiaaliyhtälössä olisi termi \( a \cdot x(t) \),
niin sen voi toteuttaa tällä palikalla. Lohko on kaaviossa kolmion
muotoinen, ja kertoo suunnan; ulostulo on sen kärki, sisääntulo sen
kanta.
Oletusarvoisesti kertoimen arvo on 1. Lohkon parametrejä voi
muokata tuplaklikkauksella tai rightclick-valikosta "Block Parameters
(*nimi*)". Aukeaa tämä valikko:
Kyseisellä lohkolla on vain yksi parametri, mutta sille on monia vaihtoehtoja. Kertolaskun tyylin voi muuttaa myös tästä, jos haluaisit suorittaa esimerkiksi matriisituloa. Tätä ei voikkaan tehdä yhdellä numerolla, ja palaamme tähän vielä. Muuta kerroin 1 -> 5 ja sulje ikkuna. Muutoksen pitäisi näkyä kaaviossa.
Tarvitsemme kaavioon vielä kaksi lohkoa; jonkin syötön, ja jonkin mihin viedä tulos. Oppimisen vuoksi käytetään tällä kertaa "Library Browser"-työkalua. Avaa se sen kuvakkeesta (vasen ylälaita, simulation-valikko). Aukeaa tämännäköinen näkymä:
Vaikka samat lohkot saattavat löytyä "Commonly Used Blocks"-alavalikosta, varmasti ne löytyvät "Sinks"- ja "Sources"-valikoista. Etsi ensimmäisestä "Scope", ja vastaavasti toisesta "Sine Wave". Tuplaklikkaamalla avautuu kuvaus- ja parametrikkuna; rightclick+add block to model *nimi* lisää sen kyseiseen malliin. Lisää yksi "Sine Wave"-lohkoa ja kaksi "Scope"-lohkoa. Kun olet lisännyt molemmat, sinulla pitäisi olla nämä lohkot mallissasi:
Asettele ne jotakuinkin näin. Lohkojen yhdistäminen on helppoa: klikkaa nuolenpäätä mistä haluat aloittaa, ja sitten klikkaa sinne minne haluat sen yhdistää. Tämä piirtää nuolen, jonka suunta kertoo mihin suuntaan informaatio kulkee. Yhdestä portista voidaan viedä useampaan; klikkaa nuolta ja sitten toista kohdetta, ja sama tieto viedään myös sinne. Yhdistä siniaaltolähde Gain- ja Scope IN - lohkoihin, ja Gain-lohko Scope OUT-lohkoon, kuten alla. Nimet voi lisätä valitsemalla lohkon, vetämällä kursorin "..." -merkin päälle ja valitsemalla "Show Block Name", ja nimeä voi muokata klikkaamalla. Mallisi pitäisi näyttää tältä:
Jätetään siniaallon parametrit oletusasetuksille. Malli on nyt valmis simuloimista varten.
3) Simuloiminen
Kun malli on valmis simuloimista varten, "Simulation"-valikosta löytyy tälle omistettu osuus. Siitä voi säätää simulaation pituuden, ja simuloida muutamalla erilaisella tavalla. Jätä asetukset paikalleen, ja paina "Run"-nappulaa. Näin yksinkertaisella mallilla ei pitäisi kestää pitkään.
Hetken
puksuttamisen jälkeen Simulink palaa alkuperäiseen tilaan. Nähdäksesi
tulokset (tällä mallilla) pitää meidän avata kuvaajat: tuplaklikkaa
"Scope"-lohkoja, ja aukeaa kummallekkin oma kuvaajaikkuna. Alla olevassa
kuvassa on ikkunat viety tasaisesti vierekkäin ja piirretty viiva
huipputasolle; nähdään että malli toimii kuten pitäisikin.
Näitä taitoja soveltamalla pääset jo pitkälle. Tehtäviä varten esitellään vielä MATLABiin kytkeminen.
4) MATLABiin kytkeminen ja skriptissä käyttö
Päätämme että haluamme käyttää tätä simulaatiota MATLAB-skriptissä; haluamme ottaa ulostulot työtilaan käyttöön ja määrittää sisääntulot myös työtilassa. Tehdään ensin muutama muutos Simulink-malliin.
- Ensiksi, poista Scope-lähdöt, ja korvaa esimerkkikuvan "Scope OUT" "To Workspace"-lohkolla.
- Muuta "To Workspace"-lohkon parametreista tallennusformaatti oletusarvosta "Timeseries" arvoon "Array".
- Vaihda Sine Wave - lohkon parametreista Amplitude = A ja Frequency = f.
- Lisäksi,
muuta Gain-lohkon parametriksi Gain = a. Halutessasi voit myös muuttaa
Workspace-lohkon muuttujan nimeä; esimerkkikuvassa on tehty näin.
Näiden operaatioiden jälkeen malli näyttää tältä:
Kaksi lohkoa hohtavat punaisena, koska Simulink ei tiedä niiden muuttujien arvoa. Ei kuitenkaan tarvitse huolia; tämä korjautuu kun simulaatiota käytetään skriptistä ja muuttujat löytyy MATLABin työtilasta. Siirytään nyt MATLABin puolelle.
Luo uusi MATLAB-skripti ja kopioi tämä koodinpätkä siihen:
%% Malli 1: vakiovahvistettu signaali
% yksinkertainen demonstraatio matlab-kytkennästä.
% Simulink-mallin nimi: simulink_intro.slx
clc, clear
a = 2; % Gain-parametrit
A = 1; f = 1; % Sine Wave - parametrit
out = sim('simulink_intro');
t = linspace(0,10,length(out.signal));
plot(t, out.signal), grid on
hold on
plot(t, sin(t))
hold off
Jotta kaikki toimii luotettavasti, tee kaksi asiaa: tallenna tämä skripti ja simulink-malli samaan kansioon ja aseta working directory tähän kansioon. Tällöin kaiken pitäisi toimia. Ota myös muistiin mallin tiedostonimi, tarvitset sitä pyörittääksesi sen skriptistä. Simulaation käyttäminen tapahtuu sim-komennolla (help sim / doc sim kertoo tarkemmin toiminnasta).
Huomioitavaa on, että out-muuttujaan tallentuu kaikki sim-kommennon paluuarvot, ja haluttu data löytyy out.*to workspace - lohkon parametri* - muuttujasta. Huomaa "dot notation"! Skriptin tulos pitäisi näyttää tältä: