Simuleringseksempel Vi ønsker å simulere følge system (vanntank) i MathScript: Matematisk modell: Vi har funnet følge matematiske modell for systemet: [ ] der: er nivået i tanken er pådragssignalet til pumpa er tversnittarealet til vanntanken ( ) er pumpeforsterkningen er mengde vann som strømmer ut av tanken gjennom den manuelle ventilen i bunnen
2/7 Beskrivelse av systemet: Kontrollsignal: En pumpe sørger for å fylle tanken med vann fra et reservoar. Pumpehastigheten blir styrt vha en spenningssignal. Pumpa kan bli styrt fra et eksternt spenningssignal ved å bruke FROM PC koblingen. Måling: Målesignalet er et spenningssignal som er tilgjengelig fra TO PC koblingen. Spenningsignalet samsvarer med et nivåområde. Vi må derfor skalere spenningssignalet til vha. følge lineære sammenheng: Diskret modell: For å kunne simulere dette i MathScript, trenger vi å lage en diskret modell. Vi finner den diskrete modellen: Vi bruker Euler forover metoden: Hvor er samplingstiden i sekunder. Vi får da: [ ] Som gir følge diskrete system: [ ] MathScript: Vi starter med følge MathScript kode: Kp=15; At=80; Fout=10; h(1)=0; Ts=0.1; uk=1; k=1:100; N=length(k); for i=2:n h(i) = h(i-1) + (Ts/At)*(Kp*uk-Fout); plot(k,h) Vi lar pådraget være et sprang (så plottet vil da vise sprangresponsen til nivået i tanken), dvs fra til ved og forblir i hele simuleringsperioden. øker
3/7 Som gir følge resultat: Dette er vel og bra (resultatet er jo riktig?) men kan noe eventuelt forbedres? Man bør gå litt utover selve oppgaveteksten og gjøre/se på ting som nødvigvis ikke står med klartekst i oppgaven, dvs. vise initiativ og selvstighet. Dette viser at vedkomme har analytisk evne og forståelse, og kan se sammenhenger mellom teori og praksis. Man må vise at man kan anve den kunnskapen man har lært i dette faget, men også i tidligere fag. Vi kan forbedre koden med følge: Bruk kommentarer i koden, pluss litt «luft», dvs. linjeskift, innrykk, mellomrom, m.m. Vi får da følge MathScript kode: % Simulation of Water Tank clear, clc % Model parameters Kp = 15; %[(cm^3/s)/v] At = 80; %[cm^2] Fout = 10; %[cm^3/s] % Initial values h(1) = 0; %Initial value Ts = 0.1; %Sampling Time uk = 1; %Step k = 1:100; N = length(k);
4/7 % Simulation Loop for i = 2:N h(i) = h(i-1) + (Ts/At)*(Kp*uk-Fout); plot(k, h) Som vi ser har koden blitt mye mer lesbar (det synes i hvertfall jeg ). Andre ting: Ha med navn, beskrivelser og enheter i plottet MathScript kode: plot(k, h) title('simulation of discrete Level model after a step in u(k) at k=0') xlabel('k') ylabel('h(k) [cm]') Plottet blir da som følger: Som ingeniør er det viktig at man er presis, så bruk av enheter m.m. er viktig.
5/7 Andre ting: Vær nysgjerrig! Prøv med forskjellige verdier av and. Hva skjer? Vil nivået stige eller synke? Vil nivået stige/synke raskere eller vil det gå saktere? Diskuter resultatet (men du bør nødvigvis ikke vise 30 forskjellige plot i rapporten med ulike verdier det kan bli for mye av det gode ). Vi bør prøve å tilpasse simuleringen slik at den blir så realistisk som mulig. Hvis vil nivået synke. I den matematiske modellen vil nivået etterhvert bli mindre enn noe som naturlig ikke er praktisk mulig i den virkelige verden. Det samme problemet får vi hvis vil nivået stige. I den matematiske modellen vil nivået etterhvert bli større en noe som heller ikke er praktisk mulig i den virkelige verden. Vi kan da gjøre følge forbedring i MathScript koden: if h > hmax h = hmax if h < hmin h = hmin Denne kodesnutten gjør at vannivået vil holde seg mellom. Endelig MathScript kode blir da: % Simulation of Water Tank clear, clc % Model parameters Kp = 15; %[(cm^3/s)/v] At = 80; %[cm^2] Fout = 10; %[cm^3/s] % Initial values h(1) = 0; %Initial value Ts = 0.1; %Sampling Time uk = 1; %Step hmin = 0; hmax = 20; k = 1:100; N = length(k); % Simulation Loop for i = 2:N h(i) = h(i-1) + (Ts/At)*(Kp*uk-Fout); if h(i) > hmax h(i) = hmax; if h(i) < hmin h(i) = hmin;
6/7 plot(k, h) title('simulation of discrete Level model after a step in u(k) at k=0') xlabel('k') ylabel('h(k) [cm]') Det er sikkert mange flere forbedringer man kan gjøre Diskusjon av resultatene Av plottet ser vi at systemet er en integrator og det er jo nettopp det en vanntank er. Jevnfør en bøtte med vann som du fyller med hageslangen. +++ Diskusjon er viktig for å vise at du analytisk evne og forståelse, og kan se sammenhenger mellom teori og praksis. Men vær kort og presis ikke «gå rundt grøten» eller prøv deg på forklaringer som du ikke forstår det kan fort virke mot sin hensikt og er lett å gjennomskue. For «ekspertene»: Vise at svaret er riktig ved å utlede matematisk Vi starter med å finne transferfunksjonen Differensiallikningen er som følger: [ ] Laplace gir: Dvs. vi setter (dvs. vi setter alle andre innganger/utganger lik 0) Dette gir: Vi introduserer for enkelhetens skyld, som gir: Som vi ser er dette transferfunksjonen for en Integrator. Vi ønsker nå å finne sprangresponsen for denne,.
7/7 Laplace transformasjonsparet for et sprang er som følger: Sprangresponsen for integratoren blir da (med et sprang i pådraget ): Vi bruker følge transformasjonspar til å finne : Dermed er vi opp med: Vi ser at sparangresponsen til en integrator er en rampe. En større gir større stigningstall og integreringen går fortere noe også simuleringen i MathScript underbygger. +++ Det er sikkert mange andre forbedringer, m.m.. Overrask meg