Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
SimulinkFeb 2011dmdm
SimulinkFeb 2011dmdm
MATLAB-SIMULINK
Simulink
Indice
3
7
9
11
16
20
27
28
31
37
40
43
44
59
63
68
73
81
85
90
99
109
112
123
133
Introduzione
Librerie 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 function
Esempio: Simulazione di un sistema di regolazione di temperatura
Creazione di sottosistemi
Mask
Esempio Distribuzione di temperatura nel rotore di una turbina
Realizzazione di sistemi MIMO LTI
Variabili popup e checkbox
Esempio: sistema di frenatura con ABS
Embedded Matlab Function
Toolbox avanzati. SimMechanics e SimDriveline
Cartella corrente
Avvio SIMULINK
New
Librerie principali
Libreria Sinks
Libreria Sources
Pagina di lavoro
10
11
Esempio introduttivo:
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.
12
Si deve ora collegare luscita del generatore di funzione Sine Wave con
lingresso del blocco di visualizzazione Scope.
Un collegamento correttamente
indicato come in Figura
eseguito
viene
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 allinterno della quale vanno impostati i parametri di
funzionamento.
Ampiezza
Bias
Frequenza
Sfasamento
Tasto OK
14
Durata
(valore di default 10.0)
15
Ora si aumenti la frequenza della sinusoide da 1 rad/s a 2 rad/s
Si ripeta la simulazione. Si ri-aggiorni il grafico della finestra grafica Scope
cliccando sul pulsante
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.
16
Il metodo di integrazione (Solver) si imposta selezionando il menu della pagina di
lavoro Simulation->Configuration Parameters
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.
18
19
Considerazioni aggiuntive
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,.
20
Modifica delle impostazione predefinite per i files Simulink allapertura
21
Modificare le Solver Options come in figura
22
Modificare le Data Import/Export Options come in figura
23
Si ripeta la simulazione e si riaggiorni il grafico
24
25
Ora ripetendo la simulazione e riaggiornando il grafico la sinusoide viene
visualizzata per intero
26
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 +++
Laspetto del blocco diventa
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 .
28
Libreria Continuous
Libreria Discontinuities
Libreria Discrete
29
30
31
modelli
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 limpiego 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
Alessandro Pisano - pisano@diee.unica.it
33
Lanciando la simulazione vengono creati nel workspace di Matlab gli array y e
tout.
Verificarlo digitando il comando whos
Si pu visualizzare in Matlab il grafico del segnale con il comando
plot(tout,y),grid
34
Esportazione su file dei dati prodotti da modelli Simulink.
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 Sinks
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.
36
La struttura interna dei mat-files prevede la memorizzazione dei dati in una struttura
rettangolare
t1
t2
y1 t1 y1 t 2
y2 t1 y2 t 2
...
ym t1 ym t 2
t3
t N 1
y1 t3
y2 t3
ym t3
tN
y1 t N
y2 t N
ym t N
37
Filtro passabasso
Consideriamo un filtro passa-basso RC
Vin
Equazione differenziale
Equazione differenziale esplicitata rispetto
alla derivata di ordine pi elevato
Vout
1
Vin t Vout t
Vout t
RC
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)
1
Vin t Vout t
Vout t
RC
39
F s
Vout s
1
Vin s sRC 1
Rappresentazioni equivalenti
Si devono specificare i
coefficienti dei polinomi a
numeratore
e
denominatore della FdT
utilizzando la notazione
Matlab
per
la
rappresentazione
dei
polinomi
sRC 1
[ RC 1]
40
Integratore
Nella finestra di parametrizzazione dellintegratore il parametro piu importante da settare
la condizione iniziale (Initial Condition), che di default viene impostata pari a zero
41
Integratore con ingresso vettoriale
42
Integratore con saturazione superiore
43
44
F s
Vout s
1
Vin s sRC 1
RC 0.1
Con i valori consigliati per R e C, la pulsazione di taglio pari a 1/RC = 10 rad/sec ft=1.6 Hz
omega_t=1/(R*C);
disp(['La frequenza di taglio : ',
num2str(omega_t/(2*pi)), rad/sec']);
45
Posso definire in Matlab un oggetto di tipo Transfer Function
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.
Alessandro Pisano - pisano@diee.unica.it
47
Assegniamo un valore alle costanti.
A1=1;
omega1=1.6*(2*pi); %rad/s
A2=0;
omega2=0;
ZOOM
48
Si salvi nella cartella di lavoro il seguente codice nel file spettro.m
function spettro(t,x,n)
% calcolo del vettore delle frequenze
f=0:1/t(length(t)):1/t(2);
f=f';
% calcolo della Fast Fourier Transform
Y=fft(x);
% calcolo dello densit spettrale di potenza normalizzato
% che permette di ottenere un'ampiezza unitaria dello spettro
% per una sinusoide di ampiezza unitaria
P=2*abs(Y)/length(Y);
% creazione grafico nella finestra n-esima
figure(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')
La funzione spettro riceve come argomenti, nellordine: il vettore dei tempi, il vettore del
segnale, ed il numero della finestra nella quale tracciare il diagramma
49
Vin
Vout
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
51
Si salvi nella cartella di lavoro il seguente codice nel file spettro2.m
function [freq data]=spettro2(t,x)
% calcolo del vettore delle frequenze
f=0:1/t(length(t)):1/t(2);
f=f';
% calcolo della Fast Fourier Transform
Y=fft(x);
% calcolo dello densit spettrale di potenza normalizzato
% che permette di ottenere un'ampiezza unitaria dello spettro
% per una sinusoide di ampiezza unitaria
P=2*abs(Y)/length(Y);
freq=f(1:ceil(length(f)/2));
data=P(1:ceil(length(P)/2));
Rispetto alla funzione spettro, la funzione spettro2 non produce il grafico, ma restituisce
allesterno i due vettori che consentono di produrre il grafico successivamente (ad esempio,
allinterno di una struttura subpplot)
Alessandro Pisano - pisano@diee.unica.it
52
Analizziamo il seguente codice
[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),grid
xlabel('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),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])
53
Loutput del precedente codice il seguente
54
Analizziamo il seguente codice
% VERIFICA CHE IL MODELLO SIA APERTO, E IN CASO CONTRARIO LO APRE
if 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),grid
xlabel('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),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])
55
Analizziamo il seguente codice (cont.)
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),grid
xlabel('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),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 5 0 1.1])
56
Loutput del precedente codice il seguente
57
% VERIFICA CHE IL MODELLO SIA APERTO, E IN CASO CONTRARIO LO APRE
if isempty(find_system('Name','filtropassabasso2'))
open_system('filtropassabasso2')
end
R=1e4; % 10k Ohm
C=1e-5; % 10 pF
A1=1;
omega1=1.6*(2*pi);
A2=2;
omega2=10*(2*pi);
Tsim=20;
2 armoniche distinte
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),grid
xlabel('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),grid
xlabel('Frequenza [Hz]')
ylabel('X(j2 \pi f)')
title('Spettro di potenza normalizzato')
axis([0 15 0 2.1])
58
Loutput del precedente codice il seguente
59
Filtraggio digitale
Molto importante nei sistemi di acquisizione dati
n
aj y
j 1
Es.
k j
b j yk j
j 0
y F k a1 y F k 1 b0 yk
n 1
m0
a1 e Ts /
b0 1 e Ts /
60
Schema SIMULINK
A1=1;
omega1=2*(2*pi);
Tc=0.01;
tau=0.1;
a1=exp(-Tc/tau)
b0=1-exp(-Tc/tau)
61
A1=1;
omega1=2*(2*pi);
Tc=0.01;
tau=0.1;
a1=exp(-Tc/tau)
b0=1-exp(-Tc/tau)
62
clear all
close all
clc
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 ')
63
Ora simuliamo un sistema termico
Consideriamo un sistema termico rappresentato da un volume V circondato da una
parete e contenente un fluido
qt
T f t
Te t
Sia Te(t) [K] la temperatura esterna alla parete, Tf(t) [K] la temperatura del fluido 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.
C f Tf t qt Kie Te t T f t
Alessandro Pisano - pisano@diee.unica.it
64
Per tradurre una equazione differenziale in termini di una combinazione tra blocchi Simulink
si deve esplicitare lequazione differenziale rispetto alle derivate di ordine piu elevato.
K
K
1
1
Tf t qt ie Te t ie Ti t
qt KieTe t KieT f t
Cf
Cf
Cf
Cf
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 allingresso dellintegratore, punto cui corrisponde il segnale dTf/dt, venga
1
Tf t
qt Kie Te t T f t
Cf
65
Per eseguire la simulazione bisogna assegnare un valore ai parametri Cf [J/K] e Kie [J/Ks],
alla condizione iniziale Tf(0), ed al valore costante dei segnali Te e q.
La condizione iniziale dellintegratore si specifica nella relativa finestra di dialogo
Script di parametrizzazione
Tf_zero=298.16;
q=2000;
Te=323.16;
Cf=2e3;
Kie=1e2;
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
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 lespressione della funzione,
denotando con u (parola riservata) la variabile in
ingresso al blocco
q(t)
q
100
67
Si realizzi lo schema seguente
68
sC f T f s KieT f s Qs KieTe s
T f s
sC
KieTe t
+
q(t)
Kie T f s Qs KieTe s
1
qt KieTe t
sC f Kie
Schema a blocchi
T f t
1
sC f K ie
T f s
1
Qs KieTe s
sC f Kie
69
Parametrizzazione del blocco Transfer Function
Il blocco deve rappresentare la Funz. di Trasf.
F s
1
sC f K ie
sC f Kie
[C f
Kie ]
C f Tf t KieT f t ut
ut qt KieTe t
[1]
u t
[C f
T f t
Kie ]
70
FdT del secondo ordine
u t
[b1 b0 ]
a2
a1 a0
T t
71
a2 yt a1 y t a0 yt b1ut b0ut
72
Obbiettivi aggiuntivi
Nellipotesi 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
73
Schema SIMULINK
FILE: termico1dof_feedback.mdl
Tf_zero=298;.16
%[K], pari a 25C
q=2000; % J/s
Te=323;.16
%[K], pari a 50C;
Cf=2e3;
% J/K
Kie=1e2;
% J / K s
74
Sistema a ciclo aperto
75
Ampiezza
isteresi = 4C
Ampiezza
isteresi = 2C
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 levoluzione temporale della
temperatura della parete Tp(t).
Tp t
qt T f t
Te t
C f Tf t qt Kip Tp t T f t
C pTp t K pe Te t Tp t Kip Tp t T f t
77
Esplicitiamo il sistema di equazioni rispetto alle derivate di ordine pi elevato
Kip
1
T f t qt Tp t T f t
Cf
Cf
K pe
Te t Tp t Kip Tp t Tf t
Tp t
Cp
Cp
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
78
Script di configurazione dei parametri
Tf_zero=25+273.15;
%[K], pari a 25C
Tp_zero=10+273.15;
%[K], pari a 10C
Cf=2e3;
% J/K
Cp=10e3; % J/K
Kip=1e2; % J/K s
Kpe=1e2; % J/K s
q=2000;
% J/s
Te=20+273.15
%[K], pari a 20C;
79
Si desidera acquisire il segnale q(t) da un file esterno.
Il segnale q(t) sia disponibile nella forma di un file dati di tipo ASCII
File dati_problema.dat
80
Per importare il segnale si pu utilizzare il blocco Simulink From File, dalla libreria Sources
Schema Simulink
81
Creazione di sottosistemi
Si vuole rendere pi compatta la rappresentazione del modello attraverso la definizione di un
macroblocco come in figura
qt
Te t
Tp t
T f t
Tp t
Simulink consente di definire dei macroblocchi (sottosistemi) che rappresentano una particolare
interconnessione tra altri blocchi, alla quale si accede esplorando il contenuto del sottosistema.
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.
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 Subsystem
Ridisponendo i blocchi dello schema si puo realizzare la seguente configurazione
84
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 questultimo
85
Creazione di MASK
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
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.
Alessandro Pisano - pisano@diee.unica.it
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.
Per accedere al contenuto del blocco mascherato premere il
tasto destro del mouse e poi selezionare Look Under Mask
Script semplificato
%clear all
load dati_problema.dat
M=dati_problema;
tempi=M(1,:);
%non utilizzato
segnale=M(2,:);
%non utilizzato
save dati_mat M
q=2000;
% J/s
Te=20+273.16;
%[K], pari a 20C;
FILE:
termico_2dof_matfile_mask01.mdl
89
FILE:
termico_2dof_matfile_mask02.mdl
Script
%clear all
load dati_problema.dat
M=dati_problema;
tempi=M(1,:);
%non utilizzato
segnale=M(2,:);
%non utilizzato
save dati_mat M
90
Esercizio
91
92
X0=0.1;
Y0=0.1;
A=1;
B=1;
C=5;
D=1;
93
x0
xL
T x, t
T x, t
2T x, t
2
C p
k
T x, t
2
t
x
Alessandro Pisano - pisano@diee.unica.it
94
T x, t
2T x, t
2
C p
k
T x, t
2
t
x
Cp
Valori per il ferro puro (rif. Schaum Trasmissione del calore, Tabella B-1 pag. 306)
7856 kg/m
k
C p
c p 435 J/kgK
T x, t
2T x, t
t
x 2
k 63 W/mK (a 100 C)
PDE
95
2T x
0
2
x
T x, t T x
T0 T 0 TL T L
T T
T x T0 L 0 x
L
h
x0
h
x x1
x x2 x x3 x x4
4 NODI SOLUZIONE
h L/5
h
x
xL
96
Definiamo il vettore che contiene le temperature incognite nei nodi soluzione.
T T1 , T2 , T3, .T4
T2 2T1 T0
2
T
x
2
x 2
h
x x
T4 2T3 T2
2
T
x
2
x 2
h
x x
T3 2T2 T1
2
T
x
2
x 2
h
x x
TL 2T4 T3
2
T
x
2
x 2
h
x x
T2 2T1 T0 0
T3 2T2 T1 0
T4 2T3 T2 0
TL 2T4 T3 0
97
Isoliamo alla sinistra delluguale le temperature incognite, ordinandole
2T1 T2 T0
T1 2T2 T3 0
T2 2T3 T4 0
T3 2T4 TL
Sistema di equazioni lineari
AT b
0
0
2 1
1 2 1
A
0
1 2 1
0
0
1
T1
T
T 2 A 1b
T3
T4
T0
0
b
0
T
L
98
50
b=[-T0;0;0;-TL];
disp('il vettore incognito :')
T=inv(A)*b
40
Temperatura [C]
45
35
30
25
20
15
disp('Vettore completo:')
T_tot=[T0 T' TL]'
x=0:h:L;
T_teorica=T0+(TL-T0)/L*x
plot(x,T_tot,'*',x,T_teorica,'r'),grid
xlabel('Ascissa lungo la sbarra [m]')
ylabel('Temperatura [C]')
10
0.05
0.1
0.15
0.2
0.25
0.3
0.35
Ascissa lungo la sbarra [m]
0.4
0.45
0.5
99
100
50
A=zeros(N,N);
for i=1:N,
A(i,i)=-2;
end
for j=1:N-1,
A(j,j+1)=1;
A(j+1,j)=1;
end
b=zeros(N,1);
b(1)=-T0;
b(N)=-TL;
disp('il vettore incognito :')
T=inv(A)*b
%ISTRUZIONE ALTERNATIVA
T=A\b;
disp('Vettore completo:')
T_tot=[T0 T' TL]'
x=0:h:L;
T_teorica=T0+(TL-T0)/L*x
plot(x,T_tot,'*',x,T_teorica,'r'),grid
xlabel('Ascissa lungo la sbarra [m]')
ylabel('Temperatura [C]')
45
40
Temperatura [C]
35
30
25
20
15
10
0.05
0.1
0.15
0.2
0.25
0.3
0.35
Ascissa lungo la sbarra [m]
0.4
0.45
0.5
101
Ora studiamo un problema differente
E noto e prefissato il valore di temperatura T0 allestremo sinistro, mentre la
temperatura allestremo destro non imposta.
Poich la sbarra termicamente isolata si avr che il flusso termico nei bordo
destro pari a zero
T x 0
x
x L
La soluzione in regime permanente ancora calcolabile in forma chiusa
T x T0
0
2
T x
2
x
x x
4
T x T x
x
x
xL
x x4
h
T T
4 3
h T3 T4
h
h2
102
2T1 T2 T0
T1 2T2 T3 0
T2 2T3 T4 0
T3 T4 0
AT b
0
0
2 1
1 2 1
A
0
1 2 1
0
0
1
T0
0
b
0
103
Ora analizziamo il caso in cui anche la temperatura allestremo sinistro non
imposta.
Seguendo il medesimo ragionamento adottato in precedenza si ottiene il sistema:
T1 T2 0
T1 2T2 T3 0
T2 2T3 T4 0
T3 T4 0
AT b
0
0
1 1
1 2 1
A
0
1 2 1
0
0
1
0
0
b
0
0
T x cost.
104
T x, t
2T x, t
t
x 2
Il ragionamento svolto in precedenza va opportunamente modificato.
La discretizzazione del dominio sempre valida.
h
x0
h
x x1
x x2 x x3 x x4
h L/5
h
x
xL
105
Definiamo il vettore che contiene le temperature incognite nei nodi soluzione, che a
differenza dal caso stazionario non sono pi delle costanti, ma sono delle funzioni del tempo.
Tt T1 t , T2 t , T3 t , T4 t
T0 t
TL t
T x, t
2T x, t
t
x 2
T 0, t T0 t
T L, t TL t
Ti t T xi , t
i 1,2,3,4
L
xi i h i
5
106
2
T x, t
Ti t
x 2 x x
T xi , t
T x, t
t
x 2 x x
2
i 1,2,3,4
T2 t 2T1 t T0 t
2
T
x
,
t
2
x 2
h
x x
1
T3 t 2T2 t T1 t
2
T
x
,
t
2
x 2
h
x x
2
T4 t 2T3 t T2 t
2
T x, t
2
x 2
h
x x
3
TL t 2T4 t T3 t
2
T
x
,
t
2
x 2
h
x x
4
107
2
T x, t
Ti t
x 2 x x
i 1,2,3,4
T1 t 2 T2 t 2T1 t T0 t
h
T2 t 2 T3 t 2T2 t T1 t
h
T3 t 2 T4 t 2T3 t T2 t
h
T4 t 2 TL t 2T4 t T3 t
h
108
Risulta conveniente separare alla destra delluguale le quantit incognite dalle quantit note
T0(t) e TL(t)
T1 t 2 2T1 t T2 t 2 T0 t
h
h
T2 t 2 T1 t 2T2 t T3 t
h
T3 t 2 T2 t 2T3 t T4 t
h
T4 t 2 T3 t 2T4 t 2 TL t
h
h
t ATt But
T
Tt T1 t , T2 t , T3 t , T4 t
ut T0 t , TN 1 t
0
0
1 0
2 1
0 0
1 2 1
0
B 2
A 2
h 0 0
1 2 1
h 0
0 1
0
1 2
0
109
T0 T1 0, T2 0, T3 0, T4 0
110
clear all
clc
L=0.5;
N=20;
x=linspace(h,L-h,N);
t=0:Tcamp:Tfinale;
numsample=length(t);
rho=7856;
Cp=435;
k=63;
alfa=k/(rho*Cp);
Tinit=10*ones(1,N);
h=L/(N+1);
T_soluz(1,:)=Tinit;
A=zeros(N,N);
for i=1:N,
A(i,i)=-2;
end
for j=1:N-1,
A(j,j+1)=1;
A(j+1,j)=1;
end
T0=30+5*sin(0.1*t)';
TL=30*ones(numsample,1);
B=zeros(N,2);
B(1,1)=1;
B(N,2)=1;
Ac=(alfa/h^2)*A;
Bc=(alfa/h^2)*B;
Tcamp=0.1;
Tfinale=100;
T_soluz=zeros(numsample,N);
T_dot=zeros(numsample,1);
for i=1:numsample-1
Tdot=Ac*T_soluz(i,:)'+Bc*[T0(i);TL(i)];
T_soluz(i+1,:)=T_soluz(i,:)+Tcamp*Tdot';
end
Cond. al contorno
Eulero esplicito
x_ext=linspace(0,L,N+2);
T_soluz_ext=[T0 T_soluz TL];
[X,Y] = meshgrid(x_ext,t);
h=mesh(X,Y,T_soluz_ext);
title('Distribuzione temperatura lungo la sbarra.');
xlabel('Coordinata spaziale x [m] ','FontName','times','FontSize',14);
ylabel('Tempo [s]','FontName','times','FontSize',14);
zlabel('T(x,t)','FontName','times','FontSize',14);
set(gca,'FontSize',14,'FontName','Times');
Grafica
111
Profilo spaziotemporale della soluzione
112
clear all
clc
L=0.5;
N=5;
rho=7856;
Cp=435;
k=63;
x=linspace(h,L-h,N);
t=0:Tcamp:Tfinale;
numsample=length(t);
Tinit=30*ones(1,N);
T_soluz=zeros(numsample,N);
T_dot=zeros(numsample,1);
T_soluz(1,:)=Tinit;
alfa=k/(rho*Cp);
h=L/(N+1);
A=zeros(N,N);
for i=1:N,
A(i,i)=-2;
end
for j=1:N-1,
A(j,j+1)=1;
A(j+1,j)=1;
end
B=zeros(N,2);
B(1,1)=1;
B(N,2)=1;
Ac=(alfa/h^2)*A;
Bc=(alfa/h^2)*B;
Tcamp=0.01;
Tfinale=100;
T0=30+20*sin(0.1*t)';
TL=30*ones(numsample,1);
for i=1:numsample-1
Tdot=Ac*T_soluz(i,:)'+Bc*[T0(i);TL(i)];
T_soluz(i+1,:)=T_soluz(i,:)+Tcamp*Tdot';
end
x_ext=linspace(0,L,N+2);
T_soluz_ext=[T0 T_soluz TL];
[X,Y] = meshgrid(x_ext,t);
h=mesh(X,Y,T_soluz_ext);
title('Distribuzione temperatura lungo la sbarra.');
xlabel('Coordinata spaziale x [m]
','FontName','times','FontSize',14);
ylabel('Tempo [s]','FontName','times','FontSize',14);
zlabel('T(x,t)','FontName','times','FontSize',14);
set(gca,'FontSize',14,'FontName','Times');
113
114
Ora applichiamo una condizione al contorno che non fissi il valore della temperatura
nellestremo destro, ma imponga lisolamento termico dellestremo destro x=L in
analogia con quanto fatto nella analisi a regime.
T x, t
2T x, t
t
x 2
T 0, t T0 t
T
L, t 0
x
T
L, t TL t TN t
x
h
115
t ATt But
T
Tt T1 t , T2 t , T3 t , T4 t
ut T0 t , 0
t ATt But
T
Tt T1 t , T2 t , T3 t , T4 t
ut T0 t
0
0
1 0
2 1
0 0
1 2 1
0
B 2
A 2
h 0 0
1 2 1
h 0
0 1
0
1 1
0
0
0
2 1
1 2 1 0
A 2
1 2 1
h 0
0
0
1
1
0
B 2
h 0
0
116
clear all
clc
Tcamp=0.1;
Tfinale=1000;
L=0.5;
N=20;
x=linspace(h,L-h,N);
t=0:Tcamp:Tfinale;
numsample=length(t);
rho=7856;
Cp=435;
k=63;
alfa=k/(rho*Cp);
Tinit=10*ones(1,N);
T_soluz=zeros(numsample,N);
T_dot=zeros(numsample,1);
h=L/(N+1);
T_soluz(1,:)=Tinit;
A=zeros(N,N);
T0=10+5*sin(0.1*t)';
TL=0*ones(numsample,1);
for i=1:N,
A(i,i)=-2;
end
for j=1:N-1,
A(j,j+1)=1;
A(j+1,j)=1;
end
A(N,N)=-1;
B=zeros(N,2);
B(1,1)=1;
B(N,2)=1;
Ac=(alfa/h^2)*A;
Bc=(alfa/h^2)*B;
for i=1:numsample-1
Tdot=Ac*T_soluz(i,:)'+Bc*[T0(i);TL(i)];
T_soluz(i+1,:)=T_soluz(i,:)+Tcamp*Tdot';
end
x_ext=linspace(0,L,N+2);
T_soluz_ext=[T0 T_soluz T_soluz(:,end)];
[X,Y] = meshgrid(x_ext,t);
h=mesh(X,Y,T_soluz_ext);
title('Distribuzione temperatura lungo la sbarra.');
xlabel('Coordinata spaziale x [m] ','FontName','times','FontSize',14);
ylabel('Tempo [s]','FontName','times','FontSize',14);
zlabel('T(x,t)','FontName','times','FontSize',14);
set(gca,'FontSize',14,'FontName','Times');
117
k=63
118
k=630
119
t ATt But
T
ut
Uso di Matrix Gain
But
t
T
Integratore saturato
Tt
120
statore
Coordinata
radiale
rotore
rmax
121
Es. Sezione di una turbina a vapore
122
Ipotesi: simmetria angolare della distribuzione di temperatura
Si desidera calcolare la distribuzione di temperatura nel rotore (in uno dei suoi raggi)
T r , t
rmin r rmax
Mediante misure acquisite in una turbina in esercizio, si suppone nota la temperatura nella
parte bianca (regione del vapore in alta temperatura)
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.
Problema complesso (anche nella formulazione semplificata sotto esame) perche il modello
matematico una equazione alle derivate parziali (sistema a parametri distribuiti, sistema
infinito-dimensionale)
Alessandro Pisano - pisano@diee.unica.it
123
Eq. di diffusione (Equazione del calore) monodimensionale in coord.
cilindriche , con unica variabile spaziale la coordinata cilindrica radiale r
k
C p
Cp
la densit [g /m3 ]
124
r rmax
ri rmin i h
i 0, 1, 2, ..., N 1
r rmin
r =0
rmax rmin
h
N 1
Ti t T ri , t
125
Approssimazione delle derivate spaziali mediante differenze finite
Ti 1 t Ti t
Ti t
r
h
Ti 1 t 2Ti t Ti 1 t
2
T
t
i
r 2
h2
Sistema di ODE
1 Ti 1 t Ti t Ti 1 t 2Ti t Ti 1 t
Ti t K
2
h
h
ri
2
1
1
1
K 2 Ti 1 t 2 Ti t 2 Ti 1 t
ri h
ri h
h
h
h
K
h2
T
t
T
t
T
t
i 1
i
i 1
ri
ri
i 1, 2, ..., N
126
Sistema di ODE
K h
h
T1 t 2 1 T2 t 2 T1 t T0 t
h r1
r1
K h
h
T2 t 2 1 T3 t 2 T2 t T1 t
h r2
r2
K
h
TN t 2 1
h rN
h
TN 1 t 2
rN
TN t TN 1 t
Tt T1 t , T2 t , T3, ..., TN 2 , TN t
T0 t
TN 1 t
Boundary conditions
ut T0 t , TN 1 t
t ATt But
T
127
t ATt But
T
h
h
0
0 0
0
r
r
1
1
h
h
0 0
0
r
r
2
2
h
K
0
0
1
0
A 2
r
3
h
0
0
1
0
0
0
0
rN 1
0
0
0
0
1
rN
T0 T1 0, T2 0, T3, ..., TN 2 , TN 1 0
Condizioni iniziali
0
1
0
K
B 2
h 0
0
h
0 1
rN
128
Modello Simulink
FILES
TurbinaVapore01.mdl
T_centrorotore.mat
T_vapor.mat
Esportazione dati
verso il Workspace
129
130
Costruzione della maschera di parametrizzazione
131
Calcolo delle Matrici A e B
132
Codice copiabile
ed seguibile
Matrici A e B
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));
end
for 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;
(per
n = 6)
133
134
Analisi dei risultati
Impostiamo preliminarmente due valori costanti per le temperature al contorno
T
ut T0 t , TN t
30
C
300
135
Profilo di temperatura al nodo 40
136
Con dei profili differenti per le boundary conditions, levoluzione 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')
137
Invertiamo la direzione dellasse dei tempi
138
Completiamo questo esempio mostrando limpiego, nella Mask, di variabili di configurazione
tipo popup o checkbox e un loro possibile impiego.
Si apportino le seguenti modifiche alla lista dei Parameters
139
Si apportino le seguenti modifiche alle istruzioni di Initialization
140
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.mdl
T_centrorotore.mat
T_vapor.mat
Alessandro Pisano - pisano@diee.unica.it
141
I T f Rr Fps
m
v Fps
4
mg
Fps
s
4
mg
I T f Rr
s
4
m
mg
v
s
4
4
= velocit ruota
s 1
Rr = raggio ruota
I = inerzia ruota
T f = coppia frenante
s = scorrimento
v / Rr
142
I T f Rr
mg
s
4
Modello SIMULINK
m
mg
v
s
4
4
Lookup Table
143
Integratori saturati
144
145
Integratori saturati
Soluzione semplificata per
interrompere la simulazione quando
il veicolo si ferma
146
Ora modelliamo lABS
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). Lapposito blocco Relay si trova nella libreria
Discontinuities
Kf = 3; %guadagno
PBmax = 1500; % saturazione
TB = 0.01; %costante di tempo
147
Modello complessivo
FILES:
ABS_OpenClosedLoop.mdl
ABS_OpenClosedLoop_DATI.m
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
Alessandro Pisano - pisano@diee.unica.it
148
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
149
Frenatura con ABS attivato
150
Con ABS
Con ABS
v0 = 40 m/s
145 km/h
v0 = 70 m/s
250 km/h
151
qt T f t
Kip
1
T f t qt Tp t T f t
Cf
Cf
K pe
Kip
Te t Tp t Tp t Tf t
Tp t
Cp
Cp
Tp t
Te t
152
Realizziamo il modello SIMULINK in maniera differente, generando i segnali q e Te con dei
blocchi Signal Builder (libreria Sources) ..
FILE:
termico_2dof_matfile_mask01_EMF.mdl
153
y = uscite
u = ingressi
p = parametri
Integratore
vettoriale
(bidimensionale)
154
Il blocco Camera di Combustione conserva la medesima maschera della
implementazione precedente
155
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];
156
Parametrizzazione dei Signal Builder
Target
157
Zoom on T
Spostiamo
verso
sinistra
questa linea
(dopppio click su di essa)
Alessandro Pisano - pisano@diee.unica.it
158
Spostiamo
verso
destra
questa linea con modalit
analoghe
159
Profilo completo q(t)
160
Non serve piu un file script in abbinamento
161
Toolbox avanzati
SimMechanics
Modellazione di sistemi
meccanici multi-body
162
Modello VMRL 3D
163
Vista differente
164
165
Toolbox avanzati
SimDriveline
Componenti e modelli
area automotive
Animazione 3D