MATLAB-SIMULINK Ing. Alessandro Pisano [email protected] 1 Bergamo, 17-19/11/2009 Simulink.

136
MATLAB-SIMULINK Ing. Alessandro Pisano [email protected] 1 Bergamo, 17-19/11/2009 Simulink

Transcript of MATLAB-SIMULINK Ing. Alessandro Pisano [email protected] 1 Bergamo, 17-19/11/2009 Simulink.

Page 1: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

1

MATLAB-SIMULINK

Ing. Alessandro Pisano

[email protected]

Bergamo, 17-19/11/2009

Simulink

Page 2: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

2

IntroduzioneLibrerie e blocchi elementari (1) Realizzazione di un modello Esempio: costruzione e visualizzazione di una sinusoide Scelta del solutore Modifica delle impostazioni predefinite Utilizzo di variabili dal workspace Librerie e blocchi elementari (2) Esportazione dati verso il Workspace e su file esterno Esempio: filtro passa basso Integratore Esecuzione automatizzata di test Analisi spettrali (FFT) Filtraggio digitale Esempio: sistema termico ad 1 e 2 gradi di libertàUtilizzo di blocchi Trasnfer functionEsempio: Simulazione di un sistema di regolazione di temperaturaCreazione di sottosistemiMaskEsempio Distribuzione di temperatura nel rotore di una turbinaRealizzazione di sistemi MIMO LTIVariabili popup e checkboxEsempio: sistema di frenatura con ABSEmbedded Matlab FunctionToolbox avanzati. SimMechanics e SimDriveline

379111620272831374043445963687381859099109112123133

Indice

Page 3: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

3

Finestra di avvio (v. 7.8.0)

Cartella corrente

Avvio SIMULINK

Editor M-files

Page 4: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

4

Programmazione dei modelli di simulazione per via grafica

Page 5: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

5

Possibilità di suddividere il modello complessivo in sottosistemi paralleli o embricati (un sottosistema può essere importato direttamente in un modello di simulazione differente)

Possibilità di definire finestre di parametrizzazione (Masks)

Esportazione nel workspace Matlab dei risultati della simulazione

Esecuzione automatizzata di test

Toolbox avanzati: SimDrivelline e SimMechanics

Page 6: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

6

Avvio SIMULINK

Librerie principali

New

Page 7: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

7

Libreria “Commonly used blocks”

Page 8: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

8

Libreria “Sinks”

Libreria “Sources”

Page 9: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

9

Pagina di lavoro

Realizzazione di un modello Simulink

Page 10: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

10

Realizzazione di un modello Simulink

1. Importare nella pagina di lavoro i blocchi elementari Simulink necessari, trascinandoli con il mouse dalla rispettiva libreria (drag-and-drop)

3. Collegare tra loro i blocchi Simulink tracciando le opportune linee di interconnessione in modo da realizzare le funzionalità desiderate

2. Parametrizzare i blocchi Simulink nelle rispettive finestre di parametrizzazione, alle quali si accede dalla pagina di lavoro facendo doppio click con il mouse sopra il blocco stesso.

3 fasi

Page 11: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

11

Esempio introduttivo: costruzione e visualizzazione di un segnale sinusoidale

Sono sufficienti due blocchi elementari: un blocco che generi il segnale desiderato, ed un blocco che ne permetta la visualizzazione.

Il primo blocco lo troveremo nella libreria “Sources” (blocco Sine Wave),Il secondo blocco (blocco Scope), si trova nella libreria “Sinks”.

I blocchi necessari vanno importati nella pagina di lavoro Untitled trascinando con il mouse (drag-and-drop) l’icona del blocco all’interno della pagina di lavoro. Il risultato di tale procedura è mostrato in Figura.

Salvare il modello e attribuire un nome al file con estensione .mdl

Page 12: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

12

Si deve ora collegare l’uscita del generatore di funzione “Sine Wave” con l’ingresso del blocco di visualizzazione “Scope”.

Per effettuare un collegamento tra due blocchi vi è una procedura rapida. Si deve selezionare il blocco di origine (cliccandovi sopra), e si deve successivamente selezionare il blocco di destinazione con il tasto ctrl premuto.

Un collegamento correttamente eseguito viene indicato come in Figura

In alternativa, si può portare la freccia del mouse nel punto di origine del collegamento e quindi “tracciarlo” tenendo premuto il tasto sinistro del mouse, portandosi fino al punto di destinazione.

Page 13: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

13

Devono ora essere impostati i parametri di ampiezza, frequenza e sfasamento che definiscono la particolare sinusoide che si desidera generare. A tal fine è necessario fare doppio click sul blocco “Sine Wave”, e come risultato si apre una finestra di dialogo all’interno della quale vanno impostati i parametri di funzionamento.

Ampiezza

Bias

Frequenza

Sfasamento

Tasto OK

Page 14: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

14

Si deve ora impostare la durata (cioè l’intervallo temporale) della simulazione.

Cliccando sul tasto RUN viene eseguita la simulazione. Dopo che è stata eseguita la simulazione si può visualizzare il segnale generato cliccando sul blocco Scope.

La durata si può impostare direttamente dai menù della pagina di lavoro

Durata (valore di default 10.0)

Tasto RUN

Page 15: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

15

Ora si aumenti la frequenza della sinusoide da 1 rad/s a 2 rad/sSi ripeta la simulazione. Si ri-aggiorni il grafico della finestra grafica Scope

cliccando sul pulsante nella barra dei menu della finestra Scope

Grafico “spigoloso”

Si deve andare a modificare il “metodo di integrazione”, che definisce il passo di discretizzazione temporale che viene impiegato nella simulazione del modello.

Page 16: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

16

Il metodo di integrazione (Solver) si imposta selezionando il menu della pagina di lavoro Simulation->Configuration Parameters

Page 17: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

17

La scelta del solutore con il quale di risolvono numericamente le equazioni differenziali del modello è ovviamente irrilevante per il semplice esempio in esame che non coinvolge alcun legame differenziale.Il motivo della spigolosità del grafico sta nel fatto che il metodo proposto di default (ode45 a passo variabile) ha “scelto” dei passi di discretizzazione temporale piuttosto elevati, e sono stati quindi generati “pochi campioni” del segnale In modelli di simulazione complessi, la scelta del solutore numerico (Runge-Kutta, Dormand-Prince, Eulero,…) e delle relative caratteristiche (passo fisso/variabile, etc) va fatta con criterio.

Page 18: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

18

Runge-Kutta e Dormand-Prince sono degli ottimi solutori “general-purpose”.

Per simulazioni “multi-domain” con la copresenza di costanti di tempo molto differenti tra loro sono consigliati i metodi a passo variabile dedicati ai problemi Stiff (es. ode15s/stiff).

Per simulazioni con elementi discontinui (non-smooth dynamics) i metodi a passo variabile talvolta forniscono risposte non veritiere. Il solutore Eulero a passo fisso, con un passo sufficientemente piccolo, è ritenuto affidabile per sistemi non-smooth.

Si scelga il solutore ode1 (Eulero) a passo fisso, e se ne imposti il Fixed-Step size a 0.001

Page 19: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

19

Una scelta ottimale per il solutore bilancia, per il problema in esame, la precisione della soluzione e la mole di calcoli richiesta, che influenza il tempo di simulazione.

Per identificare un solutore adeguato serve esperienza. Il passo di campionamento deve essere commisurato alla rapidità di variazione dei segnali in gioco. Quando si sceglie un solutore a passo variabile si può pensare di introdurre un limite massimo per il passo adattativo.

Quando il modello non contiene stati continui (non vi sono cioe blocchi “dinamici” come Integratori, blocchi Transfer Fcn, etc.) Simulink usa il solutore “discrete” anche se viene specificato un solutore differente,.

Considerazioni aggiuntive

Page 20: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

20

Modifica delle impostazione predefinite per i files Simulink all’apertura

Page 21: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

21

Modificare le Solver Options come in figura

Page 22: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

22

Modificare le Data Import/Export Options come in figura

Page 23: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

23

Si ripeta la simulazione e si riaggiorni il grafico

La sinusoide viene però mostrata a partire dall’istante t=5. Sono stati “persi” i campioni precedenti.

Il motivo è che, al fine di non saturare rapidamente la memoria del programma, vige in Simulink una impostazione di default in base alla quale nei blocchi di tipo Scope vengono visualizzati e mantenuti in memoria solo gli ultimi 5000 campioni del segnale.

Il grafico della sinusoide è ora correttamente rappresentato. In base alla scelta fatta per il passo fisso del solutore, vengono ora generati, e interpolati dal grafico, 1000 campioni per ogni secondo di evoluzione del segnale.

Page 24: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

24

Per modificare tale impostazione per uno specifico blocco si deve cliccare sul pulsante Parameters nella finestra del blocco Scope

La finestra “Scope Parameters” ha due sottomenu: “General” e “Data History”.Dal sottomenu Data History si deve disselezionare la check-box “Limit data points to last ..”

Page 25: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

25

Ora ripetendo la simulazione e riaggiornando il grafico la sinusoide viene visualizzata per intero

Per visualizzare un segnale costituito dalla somma di tre sinusoidi importiamo nella pagina di lavoro due nuove istanze del blocco elementare Sine Wave, ed importiamo anche un blocco che rappresenti un nodo sommatore (blocco Sum dalla libreria dei Commonly Used Blocks)

Page 26: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

26

Dopo aver cancellato la linea di collegamento preesistente tra il primo blocco Sine Wave ed il blocco Scope, si realizzi la connessione riportata in Figura.

Il blocco Sum deve essere preliminarmente parametrizzato specificando il numero di segnali in ingresso, ed il segno con il quale concorrono alla sommatoria, per mezzo di una stringa (es. +++ +)

Scegliamo +++L’aspetto del blocco diventa

Page 27: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

27

Ora si possono assegnare i parametri di ampiezza, frequenza, bias e sfasamento, delle tre sinusoidi, rieseguire la simulazione e visualizzare il grafico prodotto dal blocco Scope .

I parametri di un modello possono essere espressi utilizzando delle variabili (es. A1,f1,b1, …) alle quali si può assegnare un valore con un file script Matlab da eseguirsi prima della esecuzione della simulazione.

Tutte le variabili definite nel workspace di Matlab sono disponibili e accessibili da parte dei blocchi Simulink.

Il modello può essere in questo modo riparametrizzato con estrema facilità.

A1=1;f1=1;b1=5;phi1=0;A2=4;f2=pi;b2=2;phi2=pi/2;A3=1;f3=4*pi;b3=2;phi3=0;

Page 28: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

28

Libreria “Continuous”

Libreria “Discontinuities”

Libreria “Discrete”

Page 29: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

29

Libreria “Lookup Tables”

Libreria “Math operations”

Page 30: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

30

Libreria “Model Verification”

Libreria “Signal routing”

Page 31: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

31

Il blocco To Workspace riceve in ingresso il segnale (scalare o vettoriale) che salva nel workspace. Il blocco si interconnette agli altri come in Figura. Per tracciare un collegamento a partire da un collegamento preesistente si deve portare il mouse nel punto di diramazione, premere il tasto destro, e poi allontanarsi e tracciare il collegamento tenendo il tasto destro premuto, fino a giungere al punto di destinazione del collegamento

Vediamo come esportare in Matlab i dati prodotti eseguendo i modelli Simulink.

Serve il blocco To Workspace dalla libreria Sinks

Page 32: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

32

Il blocco To Workspace va parametrizzato specificando il nome della variabile che verrà creata nel workspace di Matlab (scegliere y) ed il formato di salvataggio (è opportuno modificare il formato di default Structure e selezionare invece Array) .Per ottimizzare l’impiego della memoria del programma si può anche impostare un fattore intero di decimazione (es. con decimation = 10 i dati vengono salvati nel workspace con uno step temporale 10 volte superiore, quindi si avranno meno elementi nel vettore y). Si mantenga il valore unitario di default.

Il vettore dei tempi viene salvato di default sotto forma di array con il nome tout.Bisogna però disabilitare una impostazione che limita a 1000 il numero massimo di elementi per tout. Si deve andare ne Simulation->Configuration Parameters, e nel menu Data Import/Export disselezionare la check-box Limit Data Points to Last

Page 33: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

33

Lanciando la simulazione vengono creati nel workspace di Matlab gli array y e tout. Verificarlo digitando il comando whosSi può visualizzare in Matlab il grafico del segnale con il comando

plot(tout,y),grid

Page 34: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

34

Se si desidera che i dati siano non solo esportati nel workspace di Matlab ma anche salvati in modo permanente su un file, si può generare un file dati nel formato binario .mat con il blocco To File, dalla libreria SinksI files con estensione mat sono detti mat-files.

Esportazione su file dei dati prodotti da modelli Simulink.

Il blocco deve essere parametrizzato specificando nella apposita finestra di configurazione:

-Il nome (comprensivo dell’estensione) del mat-file che verrà creato (es. y_test1.mat).

-Il nome che verrà assegnato alla variabile quando il mat-file sarà successivamente aperto in Matlab (scegliere y)E’ possibile impostare una decimazione dei dati.Se si sceglie una “Decimation” > 1 è bene generare anche un vettore dei tempi “sincrono” con la variabile sottocampionata

Page 35: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

35

Lanciare la simulazione, e verificare come nella cartella di lavoro sia ora presente il file y_test1.mat

Possono essere esportati segnali vettoriali. Per mezzo del blocco Mux (libreria Commonly Used Blocks) si possono “aggregare” i tre segnali sinusoidali in un unico segnale vettoriale con tre componenti.

Page 36: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

36

La struttura interna dei mat-files prevede la memorizzazione dei dati in una struttura rettangolare

...

321

2322212

1312111

1321

Nmmmm

N

N

NN

tytytyty

tytytyty

tytytyty

ttttt

I mat-files possono essere aperti successivamente in Matlab con il comando load.

>> load y_test1

Viene generata nel workspace di Matlab una variabile matriciale avente il nome specificato nella finestra di configurazione del blocco To File e la struttura rettangolare riportata sopra.

Page 37: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

37

Filtro passabasso

Consideriamo un filtro passa-basso RC

+Vin Vout

tVtVtVRC inoutout Equazione differenziale

Equazione differenziale esplicitata rispettoalla derivata di ordine più elevato tVtV

RCtV outinout

1

Posso realizzare uno schema di simulazione utilizzando un blocco Integrator, un blocco Sum e un blocco Gain, oltre che ovviamente un generatore di segnale per costruire la tensione di ingresso ed un blocco Scope per visualizzare la tensione di uscita.

Page 38: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

38

Modello Simulink. Grazie al blocco Mux è possibile visualizzare i segnali Vin e Vout nel medesimo blocco Scope. Inseriamo anche un blocco “To Workspace” (nome variabile vout, tipo array)

R=1e4; % 10k OhmC=1e-5; % 10 pF

Assegniamo un valore ai parametri scrivendo un semplice script

La costante di tempo del filtro vale RC=0.1 s

tVtVRC

tV outinout 1

Page 39: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

39

Finestra di parametrizzazione del Signal Generator.4 tipologie di segnali disponibili (sinusoidale, onda quadra, dente di sega, random)

Il filtro può essere implementato in forma più compatta mediante un blocco Transfer Function

Si devono specificare i coefficienti dei polinomi a numeratore e denominatore della FdT utilizzando la notazione Matlab per la rappresentazione dei polinomi

1

1

sRCsV

sVsF

in

out

]1 [ 1 RCsRC

Rappresentazioni equivalenti

tVtVtVRC inoutout

Page 40: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

40

IntegratoreNella finestra di parametrizzazione dell’integratore il parametro piu importante da settare è la condizione iniziale (Initial Condition), che di default viene impostata pari a zero

Possono essere introdotte saturazioni inferiori e/o superiori sulle uscite dell’integratore.

Se l’integratore riceve in ingresso un segnale vettoriale, genera in uscita un vettore di pari dimensione che contiene l’integrale delle diverse componenti del vettore di ingresso

Può essere anche applicato un reset sull’uscita del’integratore. Il reset riporta l’uscita dell’integratore al valore della condizione iniziale

Page 41: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

41

Integratore con ingresso vettoriale

Condizioni iniziali diverse per le uscite

Page 42: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

42

Integratore con saturazione superiore

Page 43: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

43

% VERIFICA CHE IL MODELLO SIA APERTO, E IN CASO CONTRARIO LO APREif isempty(find_system('Name','filtropassabasso')) open_system('filtropassabasso')end

R=1e4; % 10k OhmC=1e-5; % 10 pF

sim('filtropassabasso');y1=vout;figure(1)plot(tout,vout) R=1e4; % 10k OhmC=2e-5; % 20 pF sim('filtropassabasso');y2=vout;figure(2)plot(tout,vout) figure(3)plot(tout,y1,tout,y2)

Esecuzione automatica di testIl seguente codice lancia in sequenza due simulazioni con valori diversi dei parametri R e C, memorizza la Vout nelle due prove nei vettori y1 ed y2, e traccia dei grafici delle varie soluzioni in tre finestre grafiche distinte

IMP. Utilizzo della funzione sim(‘model’)

Page 44: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

44

Risposte in frequenza e analisi spettrali

Impariamo ora a visualizzare la risposta in frequenza di filtri lineari, e a visualizzare lo spettro di frequenza di un segnale campionato.

Con i valori consigliati per R e C, la pulsazione di taglio è pari a 1/RC = 10 rad/sec ft=1.6 Hz

1

1

sRCsV

sVsF

in

out1.0RC

Per il filtro considerato

omega_t=1/(R*C);disp(['La frequenza di taglio è: ', num2str(omega_t/(2*pi)),‘ rad/sec']);

R=input('Inserire il valore di R [Ohm] (valore consigliato: R=1e4): \n');C=input('Inserire il valore di C [Farad] (valore consigliato C=1e-5): \n');

Le seguenti istruzioni richiedono all’utente l’inserimento da tastiera dei parametri R e C

Page 45: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

45

Posso definire in Matlab un oggetto di tipo “Transfer Function”

e visualizzarne quindi la sua risposta in frequenza (più precisamente: i diagrammi semilogaritmici del modulo in dB e della fase della Funzione di Risposta Armonica F(jw) in funzione della pulsazione w) con il comando Bode

bode(F),grid;

Cambiamo il valore della costante di tempo RC, e ritracciamo i diagrammi

Page 46: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

46

Ora riferiamoci allo schema modificato

Il generatore di segnali è sostituito da un blocco Fcn (libreria User-Defined Functions) che riceve in ingresso il segnale prodotto dal blocco Clock (libreria Sources) , cioè il tempo corrente.Il blocco To Workspace scrive la variabile out, di tipo array.

Il blocco Fcn puo implementare una qualunque funzione statica, e si parametrizza compilando, nella apposita finestra di configurazione del blocco, una casella di testo in linguaggio Matlab, con la variabile standard “u” che denota la variabile in ingresso al blocco

Il codice A1*sin(omega1*u)+A2*sin(omega2*u) definisce un segnale somma di due sinusoidi con ampiezza e pulsazione parametrizzate dai coefficienti A1, omega1, A2, omega2.

Il blocco Fcn consente di implementare facilmente segnali con una espressione analitica anche complessa, che potrebbero richiedere un elevato numero di blocchi elementari.

Page 47: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

47

A1=1;omega1=1.6*(2*pi); %rad/s (pari alla pulsazione di taglio)A2=0;omega2=0;

Assegniamo un valore alle costanti.

Vogliamo visualizzare l’ingresso e l’uscita del filtro, ed i relativi spettri di potenza figure(1)plot(tout,out(:,1),'k',tout,out(:,2),'k--'),grid,title('Segnale di ingresso V_{in} e segnale di uscita V_{out}'),xlabel('Tempo [s]'),legend('V_{in}','V_{out}')axis([0 10 -2 2])

ZOOM

Page 48: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

48

function spettro(t,x,n) % calcolo del vettore delle frequenzef=0:1/t(length(t)):1/t(2);f=f';

% calcolo della Fast Fourier TransformY=fft(x);

% calcolo dello densità spettrale di potenza normalizzato% che permette di ottenere un'ampiezza unitaria dello spettro% per una sinusoide di ampiezza unitariaP=2*abs(Y)/length(Y); % creazione grafico nella finestra n-esimafigure(n),plot(f(1:ceil(length(f)/2)),P(1:ceil(length(P)/2)))xlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')

Si salvi nella cartella di lavoro il seguente codice nel file spettro.m

La funzione spettro riceve come argomenti, nell’ordine: il vettore dei tempi, il vettore del segnale, ed il numero della finestra nella quale tracciare il diagramma

Page 49: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

49

Ora si può utilizzare la funzione spettro() per produrre i grafici desiderati

>>spettro(tout,out(:,1),1), axis([0 3 0 1.1])>>spettro(tout,out(:,2),2), axis([0 3 0 1.1])

Vin Vout

Page 50: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

50

Per ottenere uno spettro maggiormente fedele a quello, ideale, a larghezza nulla, si deve aumentare il tempo di simulazione.

Tsim=100

Tsim=10

Vin Vout

Vin Vout

Page 51: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

51

function [freq data]=spettro2(t,x) % calcolo del vettore delle frequenzef=0:1/t(length(t)):1/t(2);f=f';

% calcolo della Fast Fourier TransformY=fft(x);

% calcolo dello densità spettrale di potenza normalizzato% che permette di ottenere un'ampiezza unitaria dello spettro% per una sinusoide di ampiezza unitariaP=2*abs(Y)/length(Y); freq=f(1:ceil(length(f)/2));data=P(1:ceil(length(P)/2));

Si salvi nella cartella di lavoro il seguente codice nel file spettro2.m

Rispetto alla funzione spettro, la funzione spettro2 non produce il grafico, ma restituisce all’esterno i due vettori che consentono di produrre il grafico successivamente (ad esempio, all’interno di una struttura subpplot)

Page 52: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

52

[F,X]=spettro2(tout,out(:,1));figure(4),subplot(2,1,1),plot(tout,out(:,1)),title('Segnale di ingresso'), xlabel(‘Tempo[s]')grid,axis([0 10 -1.5 1.5])subplot(2,1,2)plot(F,X),gridxlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')axis([0 5 0 1.1]) [F,X]=spettro2(tout,out(:,2));figure(5),subplot(2,1,1),plot(tout,out(:,2)),title('Segnale di uscita'), xlabel(‘Tempo[s]')grid,axis([0 10 -1.5 1.5])subplot(2,1,2)plot(F,X),gridxlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')axis([0 5 0 1.1])

Analizziamo il seguente codice

Page 53: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

53

L’output del precedente codice è il seguente

Concludiamo questo esempio puntualizzando come il modello possa essere reso completamente parametrizzabile e gestibile da script avendo cura di specificare le grandezze come la durata della simulazione, le condizioni iniziali degli integratori, il passo di discretizzazione, etc, per mezzo di costanti simboliche.

Definiamo la variabile Tsim

Page 54: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

54

% VERIFICA CHE IL MODELLO SIA APERTO, E IN CASO CONTRARIO LO APREif isempty(find_system('Name','filtropassabasso2')) open_system('filtropassabasso2')end A1=1;omega1=1.6*(2*pi);A2=0;omega2=0;Tsim=20; sim('filtropassabasso2'); [F,X]=spettro2(tout,out(:,1));figure(6),subplot(4,1,1),plot(tout,out(:,1)),title('Segnale di ingresso'), xlabel('Tempo[s]')grid,axis([0 10 -1.5 1.5])subplot(4,1,2)plot(F,X),gridxlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')axis([0 5 0 1.1])[F,X]=spettro2(tout,out(:,2));subplot(4,1,3),plot(tout,out(:,2)),title('Segnale di uscita'), xlabel('Tempo[s]')grid,axis([0 10 -1.5 1.5])subplot(4,1,4)plot(F,X),gridxlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')axis([0 5 0 1.1])

Analizziamo il seguente codice

Page 55: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

55

A1=1;omega1=3*(2*pi);A2=0;omega2=0;Tsim=20; sim('filtropassabasso2'); [F,X]=spettro2(tout,out(:,1));figure(7),subplot(4,1,1),plot(tout,out(:,1)),title('Segnale di ingresso'), xlabel('Tempo[s]')grid,axis([0 10 -1.5 1.5])subplot(4,1,2)plot(F,X),gridxlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')axis([0 5 0 1.1])[F,X]=spettro2(tout,out(:,2));subplot(4,1,3),plot(tout,out(:,2)),title('Segnale di uscita'), xlabel('Tempo[s]')grid,axis([0 10 -1.5 1.5])subplot(4,1,4)plot(F,X),gridxlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')axis([0 5 0 1.1])

Analizziamo il seguente codice (cont.)

Page 56: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

56

L’output del precedente codice è il seguente

Page 57: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

57

% VERIFICA CHE IL MODELLO SIA APERTO, E IN CASO CONTRARIO LO APREif isempty(find_system('Name','filtropassabasso2')) open_system('filtropassabasso2')end R=1e4; % 10k OhmC=1e-5; % 10 pF A1=1;omega1=1.6*(2*pi);A2=2;omega2=10*(2*pi);Tsim=20; sim('filtropassabasso2'); [F,X]=spettro2(tout,out(:,1));figure(8),subplot(4,1,1),plot(tout,out(:,1)),title('Segnale di ingresso'), xlabel('Tempo[s]')grid,axis([0 10 -4 4])subplot(4,1,2)plot(F,X),gridxlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')axis([0 15 0 2.1])[F,X]=spettro2(tout,out(:,2));subplot(4,1,3),plot(tout,out(:,2)),title('Segnale di uscita'), xlabel('Tempo[s]')grid,axis([0 10 -4 4])subplot(4,1,4)plot(F,X),gridxlabel('Frequenza [Hz]')ylabel('X(j2 \pi f)')title('Spettro di potenza normalizzato')axis([0 15 0 2.1])

2 armoniche distinte

Page 58: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

58

L’output del precedente codice è il seguente

Page 59: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

59

Filtraggio digitale

Molto importante nei sistemi di acquisizione dati

m

jjkj

n

j

jkF

jkF ybyay

01

kkF

kF ybyay 011 1n 0mEs.

Un filtro digitale del primo ordine rappresenta una implementazione discreta del filtro passa-basso studiato nell’esempio precedente

/1

sTea /0 1 sTeb

= costante di tempo del filtro

Ts = passo di campionamento della sequenza di input

Page 60: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

60

Schema SIMULINK

Blocco UNIT DELAY(libreria discrete)

A1=1;omega1=2*(2*pi);Tc=0.01;tau=0.1;a1=exp(-Tc/tau)b0=1-exp(-Tc/tau)

Per ruotare di 90° un blocco lo si deve selezionare e si devono premere successivamente i tasti CTRL + R

Page 61: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

61

A1=1;omega1=2*(2*pi);Tc=0.01;tau=0.1;a1=exp(-Tc/tau)b0=1-exp(-Tc/tau)

Page 62: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

62

clear allclose allclc Tc=0.01;tau=0.1;a1=exp(-Tc/tau);a2=0;b0=1-exp(-Tc/tau);b1=0;ordine=2; t=0:0.01:20;y=sin(t);rum=0.1*rand(1,length(t));y_rum=y+rum; figure(1)plot(t,y);grid,title('segnale senza rumore') figure(2)plot(t,rum);grid,title('rumore') figure(3)plot(t,y_rum);grid,title('segnale rumoroso') yf=zeros(1,length(t));for i=(ordine+1):length(t) yf(i)=a1*yf(i-1)+a2*yf(i-2)+b0*y_rum(i)+b1*y_rum(i-1)+;end figure(4)plot(t,yf);grid,title('segnale FILTRATO ')

Implementazione del filtraggio digitale in Matlab

Page 63: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

63

Ora simuliamo un sistema termico

Consideriamo un sistema termico rappresentato da un volume V circondato da una parete e contenente un gas

Sia Te(t) [K] la temperatura esterna alla parete, Tf(t) [K] la temperatura del gas interno al volume, e q(t) [J/s] una sorgente di calore interna al volume. Sia Cf [J/K] la capacita termica del fluido, e sia Kie (J/K s) il coefficiente di scambio termico tra interno ed esterno.

tT f tTe tq

tTtTKtqtTC feieff

Page 64: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

64

Per tradurre una equazione differenziale in termini di una combinazione tra blocchi Simulink si deve esplicitare l’equazione differenziale rispetto alle derivate di ordine piu elevato.

tTKtTKtqC

tTC

KtT

C

Ktq

CtT fieeie

fi

f

iee

f

ie

ff

11

Con un blocco integratore (Integrator) e con dei blocchi “Constant” e “Gain” si può realizzare il seguente modello di simulazione che ipotizza dei valori costanti per q e Te

Si noti come all’ingresso dell’integratore, punto cui corrisponde il segnale dTf/dt, venga

“costruita” elemento per elemento la formula tTtTKtq

CtT feie

ff

1

Page 65: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

65

Per eseguire la simulazione bisogna assegnare un valore ai parametri Cf [J/K] e Kfe [J/Ks], alla condizione iniziale Tf(0), ed al valore costante dei segnali Te e q.

La condizione iniziale dell’integratore si specifica nella relativa finestra di dialogo

Tf_zero=298.16; %[K], pari a 25°Cq=2000; % J/sTe=323.16; %[K], pari a 50°C; Cf=2e3; % J/KKie=1e2; % J / K s

Script di parametrizzazione

Page 66: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

66

Si desidera visualizzare Tf sia in gradi Kelvin che in gradi centigradi in 2 finestre Scope separate.La conversione da °K a °C può essere realizzata con il blocco Fcn (libreria User Defined Functions

Si desidera anche modificare il profilo di q(t)

100t

q

q(t)

Si può utilizzare il blocco Step, libreria Sources.

Il blocco Fcn consente di realizzare una funzione statica tra un parametro di ingresso (scalare o vettoriale) e un parametro di uscita scalare.Si deve scrivere l’espressione della funzione, denotando con u (parola riservata) la variabile in ingresso al blocco

Page 67: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

67

Si realizzi lo schema seguente

Grafico della temperatura Tf in gradi centigradi

Page 68: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

68

Realizziamo lo stesso modello in maniera più compatta, utilizzando il blocco “Transfer Function” (libreria Continuous).

sTKsQsTKsTsC eiefieff sTKsQsTKsC eiefief

tTKtqKsC

sT eieief

f

1

Notazione impropria, ma chiara

ief KsC 1

q(t)

+

tTK eie

+

Schema Simulink compattoSchema a blocchi

tTKtTKtqtTtTKtqtTC iieeieieieff

sTKsQKsC

sT eieief

f

1

Trasformiamo secondo Laplace l’equazione differenziale

Page 69: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

69

Parametrizzazione del blocco Transfer Function

Si devono specificare i coefficienti dei polinomi a numeratore e denominatore della FdT utilizzando la notazione Matlab per la rappresentazione dei polinomi (un vettore che contiene i coefficienti dl polinomio in ordine decrescente rispetto alle potenze di s)

ief KsC

sF

1

Il blocco deve rappresentare la Funz. di Trasf.

] [ iefief KCKsC

tutTKtTC fieff

tTKtqtu eie ] [ ief KC

]1[ tu tT f

Si può “aggirare” la trasformazione secondo Laplace ragionando sui coefficienti della equazione differenziali

Page 70: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

70

][ 01 bb tu tT

tubtubtTatTatTa 01012

012 aaa

FdT del secondo ordine

Page 71: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

71

tubtubtyatyatya 01012

Page 72: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

72

Far variare nel tempo la temperatura esterna ed osservare le corrispondenti fluttuazioni della temperatura interna

Nell’ipotesi che q(t) possa assumere solo due valori (il valore nullo q=0, ed un valore costante q=Q* ) realizzare un sistema di controllo ON-OFF per regolare ad un valore desiderato la temperatura del fluido interno al volume

Confrontare i risultati ottenuti impiegando come controllore un rele’ con e senza isteresi

Obbiettivi aggiuntivi

Page 73: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

73

Schema SIMULINK FILE: termico1dof_feedback.mdlTf_zero=298;.16 %[K], pari a 25°Cq=2000; % J/sTe=323;.16 %[K], pari a 50°C; Cf=2e3; % J/KKie=1e2; % J / K s

Page 74: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

74

Sistema a ciclo aperto

Page 75: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

75

Ampiezza isteresi = 4°C

Ampiezza isteresi = 2°C

Page 76: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

76

Complichiamo il modello

Trattiamo in maniera distinta gli accumuli termici nel volume e nella parte di contorno. Definiamo quindi un modello più complesso che mi fornisca anche l’evoluzione temporale della temperatura della parete Tp(t).

Cf [J/K] è la capacita termica del gas interno al volumeCp [J/K] è la capacita termica del materiale che costituisce la pareteKip [J/K s] è il coefficiente di scambio termico tra l’interno del volume e la parete. Kpe [J/K s] è il coefficiente di scambio termico tra la parete e l’esterno.

tT f tTe tq

tTp temperatura della parete

tTtTKtqtTC fpipff

tTtTKtTtTKtTC fpippepepp

Page 77: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

77

Esplicitiamo il sistema di equazioni rispetto alle derivate di ordine più elevato

tTtTC

Ktq

CtT fp

f

ip

ff

1

Importiamo nella pagina di lavoro un ulteriore blocco integratore la cui uscita sarà la temperatura Tp della parete. Utilizziamo anche un visualizzatore a Display (libreria Sinks)Lo schema può essere realizzato come segue

tTtTC

KtTtT

C

KtT fp

p

ippe

p

pep

Page 78: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

78

Script di configurazione dei parametri

Tf_zero=25+273.16; %[K], pari a 25°CTp_zero=10+273.16; %[K], pari a 10°CCf=2e3; % J/KCp=10e3; % J/KKip=1e2; % J/K sKpe=1e2; % J/K sq=2000; % J/sTe=20+273.16 %[K], pari a 20°C;

Risultati della simulazione

Page 79: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

79

Si desidera acquisire il segnale q(t) da un file esterno.

File “dati_problema.dat”

Il segnale q(t) sia disponibile nella forma di un file dati di tipo ASCII

La prima riga riporta i tempi e la seconda riporta il valore del segnale

Bisogna creare un mat-file (lo chiamiamo dati_mat.mat) che contenga tali informazioni.

%clear allload dati_problema.datM=dati_problema;tempi=M(1,:); %non utilizzatosegnale=M(2,:); %non utilizzatosave dati_mat M %si puo’ fare direttamente >> save dati_mat dati_problema Tf_zero=298.16; %[K], pari a 25°CTp_zero=10+273.16; %[K], pari a 10°CCf=2e3; % J/KCp=10e3; % J/KKip=1e2; % J/K sKpe=1e2; % J/K sq=2000; % J/sTe=20+273.16; %[K], pari a 20°C;

Page 80: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

80

Per importare il segnale si può utilizzare il blocco Simulink “From File”, dalla libreria Sources

Schema Simulink

In accordo con i dati acquisiti, la durata della simulazione deve essere posta pari a 2.

Page 81: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

81

Creazione di sottosistemi

Si vuole rendere più compatta la rappresentazione del modello attraverso la definizione di un macroblocco come in figura

tT f

tTe

tq

tTp

tTp

Simulink consente di definire dei macroblocchi (sottosistemi) che rappresentano una particolare interconnessione tra altri blocchi, alla quale si accede esplorando il contenuto del sottosistema.

Page 82: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

82

Creazione di sottosistemi

Si dispongano i blocchi del modello come in figura, in modo che sia possibile tracciare un rettangolo nel quale entrano i segnali di input del sottosistema e dal quale escono i segnali di output.

Page 83: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

83

Con il mouse si deve “tracciare” nella pagina di lavoro un rettangolo come quello nella slide precedente. Poi, dal menu Edit della pagina di lavoro Simulink, si deve selezionare il comando Create SubsystemRidisponendo i blocchi dello schema si puo realizzare la seguente configurazione

Cliccando sul blocco Subsystem si accede al suo contenuto.Si notino i blocchi “In1”, “In2” , “Out1” ed “Out2”

Page 84: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

84

Rinominando i blocchi “In1”, “In2”, “Out1” ed “Out2” si può fare in modo che nelle porte di input e di Output del Subsystem compaia il nome della grandezza associata

La parametrizzazione del modello è attualmente effettuata per mezzo del file di script precedentemente illustrato, che assegna una valore alle costanti simboliche usate nel modello Simulink definendo opportune variabili omologhe nel workspace di Matlab. Tale m-file di script deve sempre accompagnare il file Simulink (che ha estensione .mdl) e deve essere lanciato prima di quest’ultimo

Può essere conveniente disporre di una maschera di parametrizzazione interna al modello Simulink.

In questo modo tutte le informazioni associate al modello sono contenute in un unico file (il file .mdl) e la riparametrizzazione del modello avviene in maniera più semplice, senza dovere ogni volta rilanciare il file script con estensione .m

Page 85: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

85

Creazione di MASK

Bisogna portarsi con il mouse sul Subsystem “Camera di Combustione”, premere il tasto destro del mouse, e selezionare Mask Subsystem dal menu che compare

Page 86: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

86

Dopo avere selezionato Mask Subsystem si deve nuovamente portarsi con il mouse sul Subsystem “Camera di Combustione”, premere il tasto destro del mouse, e selezionare stavolta Edit Mask dal menu che compare.

Finestra di configurazione della mask

Andare nel sottomenù: Parameters

Page 87: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

87

Nel sottomenù Parameters completare le voci “Dialog Parameters” come in Figura, creando una riga per ognuno dei 6 parametri da settare .

Pulsante “Add”

Per ciascun parametro , oltre al nome della relativa variabile (Cf, Cp, …) si può riportare una frase descrittiva che comparirà nella maschera di configurazione, che riportiamo nella slide seguente.

Aggiunge una riga.

Page 88: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

88

Maschera di parametrizzazione del Subsystem

Viene visualizzata facendo doppio click sul blocco Simulink del Sottosistema

E’ possibile inserire manualmente il valore dei parametri nelle opportune caselle di testo. I valori inseriti vengono memorizzati al salvataggio del file, e riproposti alla sua riapertura.

%clear allload dati_problema.datM=dati_problema;tempi=M(1,:); %non utilizzatosegnale=M(2,:); %non utilizzatosave dati_mat Mq=2000; % J/sTe=20+273.16; %[K], pari a 20°C;

Script semplificato

Per accedere al contenuto del blocco “mascherato” premere il tasto destro del mouse e poi selezionare “Look Under Mask”

FILE:termico_2dof_matfile_mask01.mdl

Page 89: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

89

Si inserisca una ulteriore mask che consenta l’impostazione manuale di q e Te

FILE: termico_2dof_matfile_mask02.mdl

%clear allload dati_problema.datM=dati_problema;tempi=M(1,:); %non utilizzatosegnale=M(2,:); %non utilizzatosave dati_mat M

Script

Page 90: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

90

Un processo termico a parametri distribuiti

Cilindro cavo.

Parti grigie in acciaio.

Parte bianca: volume con vapore ad alta temperatura.

Parte nera: piccolo volume interno

Es. Sezione di una turbina a vapore

statore

rotorerCoordinata radiale

maxr

Page 91: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

91

Es. Sezione di una turbina a vapore

Page 92: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

92

Ipotesi: simmetria angolare della distribuzione di temperatura

trT ,

Si desidera calcolare la distribuzione di temperatura nel rotore (in uno dei suoi raggi)

maxmin rrr

Mediante misure acquisite in una turbina in esercizio, si suppone nota la temperatura nella “parte bianca” (regione del vapore in alta temperatura)

Problema complesso (anche nella formulazione semplificata sotto esame) perche il modello matematico è una equazione alle derivate parziali (sistema a parametri distribuiti, sistema infinito-dimensionale)

In una modellazione più dettagliata, si potrebbe essere interessati a valutare la distribuzione di temperatura nella superficie delle pale di rotore, onde valutare gli stress termici sui materiali.

Page 93: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

93

Eq. di diffusione (Equazione del calore) monodimensionale in coord. cilindriche , con unica variabile spaziale la coordinata cilindrica radiale r

pC

kK

è il coefficiente di diffusione [m2/s]

pCè la capacita termica a pressione costante per unita di massa [J/gK]

è la conduttività termica [J/K s m]k

è la densità [g /m3 ]

Page 94: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

94

minrr

maxrr hirri min

1..., ,2 ,1 ,0 Ni

1minmax

N

rrh

trTtT ii ,

r =0

Page 95: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

95

Approssimazione delle derivate spaziali mediante differenze finite

h

tTtTtT

rii

i

1

2

112

2 2

h

tTtTtTtT

riii

i

Sistema di ODE

tTtTr

htT

r

h

h

K

tTh

tThrh

tThrh

K

h

tTtTtT

h

tTtT

rKtT

iii

ii

iii

ii

iiiii

ii

112

12212

2111

21

11211

21

Ni ..., ,2 ,1

Page 96: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

96

Sistema di ODE

tTtT

r

htT

r

h

h

KtT 01

12

121 21

tTtT

r

htT

r

h

h

KtT 12

23

222 21

tTtT

r

htT

r

h

h

KtT NN

NN

NN 112

21

TN tTtTt 10 , u

TNN tTTTtTtTt ,...,,, 2,321 T

tT0 tTN 1 Boundary conditions ttt BuATT

Page 97: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

97

N

N

r

h

r

h

r

h

r

h

r

h

r

h

r

h

h

K

210000

1000

0100

00210

000121

000012

1

3

22

11

2

A

ttt BuATT

Nr

hh

K

10

00

00

01

2B

TNN TTTTT 0,...,,0,00 12,321 T Condizioni iniziali

Page 98: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

98

Modello Simulink

Due diverse modalità di specificare i due segnali di input. Linee spesse che rappresentano segnali multidimensionali

Contenuto del Subsystem “Modello termico Rotore”

FILES TurbinaVapore01.mdlT_centrorotore.matT_vapor.mat

Esportazione dati verso il Workspace

Page 99: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

99

Sistema LTI (Linear Time Invariant) MIMO (multi-input-multi-output)

tT tT

tAT

tBu tu

ttt BuATT

Uso di Matrix Gain Integratore saturato

Page 100: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

100

Parametrizzazione del modello

Utilizziamo una mask

Page 101: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

101

Costruzione della maschera di parametrizzazione

Page 102: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

102

Calcolo delle Matrici A e B

Page 103: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

103

Matrici A e B (per n = 6)

n=40;r_min=0.05;r_max=0.392;rho=7900;C=0.45;k=73;T_in=80;

h=(r_max-r_min)/n;K=k/(rho*C*1e3)/h^2; A=zeros(n,n);B=zeros(n,2); for i=1:n, A(i,i)=-(2+h/(r_min+i*h));endfor j=1:n-1, A(j,j+1)=1+h/(r_min+j*h); A(j+1,j)=1;end B(1,1)=1;B(n,2)=1+h/r_max;A=K*A; B=K*B;

Codice copiabileed seguibile

Page 104: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

104

Documentation - descrizione della MASK

Page 105: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

105

Profili temporali degli elementi del vettore T Uscita del blocco Scope “T”

Analisi dei risultatiImpostiamo preliminarmente due valori costanti per le temperature al contorno

CtTtTt TN

300

30,0u

Page 106: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

106

Profilo di temperatura al nodo 40

Page 107: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

107

Con dei profili differenti per le boundary conditions, l’evoluzione del profilo di temperatura è differente.

Ora processiamo in Matlab i risultati della simulazione, creando dei grafici 3D.

r_min=0.05;r_max=0.392;n=40; [X,Y] = meshgrid(linspace(r_min,r_max,n),tout); h=mesh(X,Y,Trot)title('Distribuzione temperatura rotore.')xlabel('Coordinata radiale r [m] ','FontName','times','FontSize',14)ylabel('Tempo [s]','FontName','times','FontSize',14)zlabel('T(r,t)','FontName','times','FontSize',14)set(gca,'FontSize',14,'FontName','Times')

Page 108: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

108

Invertiamo la direzione dell’asse dei tempi

Page 109: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

109

Completiamo questo esempio mostrando l’impiego, nella Mask, di variabili di configurazione tipo “popup” o “checkbox” e un loro possibile impiego.

Si apportino le seguenti modifiche alla lista dei Parameters

Page 110: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

110

Si apportino le seguenti modifiche alle istruzioni di Initialization

Page 111: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

111

Si apportino le seguenti modifiche allo schema Simulink

Ora si esegua il modello con diverse scelte per le variabili pop up e checkbox, e si analizzino i risultati.

FILES: TurbinaVapore02.mdlT_centrorotore.matT_vapor.mat

Page 112: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

112

Anti-lock bracking system (ABS)

Simulazione di un sistema di frenatura con ABS Modello quarto di veicolo

psrf FRTI = velocità ruota

I = inerzia ruota = forza da interazione pneumatico/strada

psF

= coppia frenantefTpsFvm

4

smgFps

4

eRvs

/1

s = scorrimento

Rr = raggio ruota

smgRTI rf

4

smgv

m 44

Caratteristica -s nota in forma tabellare

Sistema dinamico NON LINEARE, del secondo ordine

Page 113: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

113

Modello SIMULINK smgRTI rf

4

smgv

m 44

clear allg = 9.81;v0 = 40; % velocita iniziale (m/s)Rr = 0.6; % raggiom = 200; % massaJ = 5; % inerzia% Curva mu-slipslip = 0:.05:1.0; mu = [0 .4 .8 .97 1.0 .98 .96 .94 .92 .9 .88 .855 .83 .81 .79 .77 .75 .73 .72 .71 .7];

Blocco Fcn per il calcolo dello scorrimento

Lookup Table

Stop a veicolo fermo

Page 114: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

114

Lookup Table (libreria Lookup Tables)

La caratteristica viene disegnata sulla maschera del blocco

Blocco Stop Simulation (libreria Sinks )

Interrompe la simulazione quando il veicolo si ferma

Integratori saturati

Page 115: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

115

Dettaglio sulla parte che interrompe la simulazione

Page 116: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

116

Soluzione semplificata per interrompere la simulazione

quando il veicolo si ferma

Integratori saturati

Page 117: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

117

Ora modelliamo l’ABS

La dinamica del sistema di frenatura idraulico è approssimata da un filtro del primo ordine (dinamica cassetti distributori) e da un integratore saturato (pressurizzazione). Il controllo è un relè (controllo bang-bang). L’apposito blocco Relay si trova nella libreria Discontinuities

Kf = 3; %guadagnoPBmax = 1500; % saturazioneTB = 0.01; %costante di tempo

Page 118: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

118

Modello complessivo

E’ stato aggiunto un blocco “Manual Switch” (libreria Signal Routing) per poter simulare una frenatura non controllata (Tf=-1000).Eseguiamo una simulazione, e visualizziamo i risultati nei blocchi Scope

FILES: ABS_OpenClosedLoop.mdlABS_OpenClosedLoop_DATI.m

Page 119: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

119

Frenatura non controllata (ABS disattivato)

Il pneumatico si blocca dopo 1.5 secondi circa, mentre la marcia del veicolo continua per altri 4 secondi.

Lo scorrimento diventa unitario quando il pneumatico si blocca

Page 120: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

120

Frenatura con ABS attivato

Il pneumatico ora si blocca solo nell’ultima parte della frenata.

Il bloccaggio del pneumatico avviene quando ormai la velocita di marcia del veicolo è prossima a zero, la marcia del veicolo si arresta infatti dopo pochi decimi di secondo.

Lo scorrimento viene regolato attorno al set point desiderato 0.2. diventando unitario solo a frenata ormai conclusa.

Nella prossima slide si confrontano due diversi test del sistema ABS con una diversa velocita di marcia iniziale V0.

Page 121: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

121

Con ABS

v0 = 40 m/s 145 km/h

Con ABS

v0 = 70 m/s 250 km/h

Page 122: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

122

Variare il controllo sul FUEL (Subsystem Control)

Osservare la velocità dell’albero motore in RPM, e correlarne le variazioni ai corrispondenti incrementi e decrementi del fuel rate

Page 123: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

123

Embedded Matlab Function block

Consideriamo nuovamente il sistematermico del secondo ordine

tTtTC

Ktq

CtT fp

f

ip

ff

1

tTtTC

KtTtT

C

KtT fp

p

ippe

p

pep

tT f tTe tq

tTp temperatura della parete

Page 124: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

124

FILE: termico_2dof_matfile_mask01_EMF.mdl

Realizziamo il modello SIMULINK in maniera differente, generando i segnali q e Te con dei blocchi Signal Builder (libreria Sources) …..

Page 125: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

125

….. e realizzando le equazioni per mezzo di un blocco Emdebbed MATLAB Function (EMF)

Integratore“vettoriale”

(bidimensionale)y = usciteu = ingressip = parametri

Page 126: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

126

Il blocco Camera di Combustione conserva la medesima maschera della implementazione precedente

Page 127: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

127

Codice del blocco EMF

function ydot = fcn(y,u,p) Cf=p(1);Cp=p(2);Kip=p(3);Kpe=p(4); q=u(1);Te=u(2); Tf=y(1);Tp=y(2); Tfdot=q/Cf+(Kip/Cf)*(Tp-Tf);Tpdot=(Kpe/Cp)*(Te-Tp)-(Kip/Cp)*(Tp-Tf); ydot=[Tfdot Tpdot];

Variabili globali non concesseall’interno di blocchi EMF.

I parametri della mask non sono direttamente accessibili da parte della EMF

Codice analogo a quello di un Function file

Page 128: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

128

Parametrizzazione dei Signal Builder

Target

Page 129: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

129

Zoom on T

Spostiamo verso sinistra questa linea(dopppio click su di essa)

Page 130: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

130

Spostiamo verso destra questa linea con modalita analoghe

Spostiamo verso l’alto questa linea con modalita analoghe

Page 131: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

131

Profilo completo q(t)Profilo più complicato per q(t)

Proflo piu complicato per T(t)

Page 132: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

132

Non serve piu un file script in abbinamento

Risultati della simulazione

Page 133: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

133

SimMechanics

Modellazione di sistemi meccanici multi-body

Toolbox avanzati

Page 134: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

134

Modello 3D

Page 135: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

135

Vista differente

Page 136: MATLAB-SIMULINK Ing. Alessandro Pisano pisano@diee.unica.it 1 Bergamo, 17-19/11/2009 Simulink.

136

Toolbox avanzati

SimDriveline

Componenti e modelliarea automotive

Animazione 3D