Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
2 s 1
s 1 s 2
caratterizzata da due poli reali negativi ed uno zero positivo e la cui risposta al gradino unitario ha
valore finale unitario e valore iniziale della derivata pari a 2.
Primo passo (inserire nel sistema il blocco che rappresenta la funzione di trasferimento)
Aprire la libreria dei blocchi di tipo Continuous con un click del mouse qui
e trascinare nello schema il blocco che rappresenta
la generica funzione di trasferimento nella forma
zeri-poli.
Con un doppio click sul blocco appena inserito nel sistema, aprire la finestra per lassegnazione dei
parametri del blocco ed assegnare i valori di zeri, poli e guadagno (in realt sufficiente modificare
i poli ed il guadagno perch lo zero quello di default):
Una volta chiusa (cliccando su OK) la finestra per lassegnazione dei parametri del blocco il
sistema apparir come segue:
Secondo passo (inserire nel sistema il blocco che rappresenta lingresso a gradino)
Con procedura analoga a quella gi illustrata al primo passo, aprire la libreria Sources delle sorgenti
di segnale, aggiungere il blocco che rappresenta lingresso a gradino al sistema ed assegnare i
parametri del blocco.
Connettere i due blocchi tracciando una linea di connessione con il mouse (tasto sinistro) dalluscita
del blocco step allingresso del blocco che rappresenta la funzione di trasferimento (la procedura
assolutamente intuitiva e non necessita di alcun comando particolare).
Terzo passo (inserire nel sistema un blocco per la memorizzazione del segnale di uscita)
In modo del tutto analogo a quanto gi visto, aprire la libreria Sinks dei blocchi di memorizzazione
e visualizzazione grafica dei segnali, aggiungere al sistema un blocco di tipo To workspace e
connetterlo alluscita del blocco che rappresenta la funzione di trasferimento.
Il blocco To workspace permette di memorizzare il segnale di uscita nel work space (memoria di
lavoro) di Matlab sotto forma di vettore.
Con un doppio click sul blocco si pu aprire la finestra per lassegnazione dei parametri e scegliere
il nome che si preferisce per il vettore da memorizzare, ad esempio y:
La risposta al comando whos evidenzia il fatto che sia tempo che y sono vettori colonna di
53 elementi. Si noti il fatto che esiste anche una variabile tout che il nome di default che il
programma usa per memorizzare il tempo automaticamente (questo rende non indispensabile luso
del blocco Clock. Tuttavia comunque opportuno usare questultimo per motivi che saranno
illustrati pi avanti).
I dati disponibili nel workspace possono essere ovviamente utilizzati per qualunque tipo di analisi
ed in particolare, nel caso specifico, per ottenere un grafico dei risultati mediante il comando
plot(tempo,y) il cui risultato riportato di seguito.
con la quale si ottengono vettori di 161 elementi ed il seguente grafico della risposta:
Le versioni recenti di Simulink salvano i modelli in files con estensione .mdl. E opportuno
evitare caratteri bianchi sia nel nome del file che nella path.
10
Il bottone consente, semplicemente ciccando sul bottone stesso, di eseguire un qualunque comando
Matlab o di lanciare un programma Matlab scritto dallutente.
Il nome del comando o del programma da eseguire si inserisce nella casella delle properties del
bottone. La scritta sul bottone si inserisce tramite il comando edit ---> edit mask.
11
ATTENZIONE: quando si clicca su un bottone necessario che il puntatore di Matlab si trovi nella
cartella nella quale presente il programma .m da eseguire, altrimenti Matlab non trova il
programma (a meno che questo non sia un comando standard o non si trovi in una delle cartelle
definite nella path di Matlab).
In altri termini quando si digita sulla Command Window il comando pwd (print current working
directory) si deve ottenere la path della cartella contenente il modello Simulink che si vuole
eseguire, nonch il programma .m che effettua i grafici. A titolo di verifica si pu utilizzare il
comando dir che fornisce lelenco di tutti i files contenuti nella cartella corrente.
ESEMPIO:
>> pwd
ans = C:\.....\CorsoDDV\Introduzione_a_Simulink
>> dir
il_mio_primo_sistema.mdl
il_mio_primo_sistema_plot.m
>> pwd
ans = C:\MATLAB6p1\work
>> cd 'C:\.....\CorsoDDV\Introduzione_a_Simulink'
>> pwd
ans =
C:\.....\CorsoDDV\Introduzione_a_Simulink
Notare infine che un Modello Simulink pu essere aperto da Matlab digitando semplicemente nella
Command Window il nome del file .mdl che contiene il modello.
12
le modalit di utilizzazione degli stessi saranno inequivocabili. Vedere a questo proposito il modello
esempio_introduttivo.mdl che lesempio sviluppato nel corso di questa introduzione, reso pi
professionale applicando gli accorgimenti di cui sopra.
Pulisce la
memoria
Chiude tutte le
finestre
grafiche
Notare che qui la
FdT generica
(i dati sono
definiti nel file
dati).
Lancia il file:
esempio_introduttivo_dati.m
Versione 5 8 maggio 2009
Lancia il file:
esempio_introduttivo_plot.m
13
File: esempio_introduttivo_dati.m
% File dati per il modello Simulink che determina la risposta al gradino
% di una F.d.T. definita nella forma "poli-zeri-guadagno"
% Eugenio Denti - 8 ott. 2003
clear all
format compact
% Definizione della funzione di trasferimento
disp(' '),disp('Funzione di trasferimento:')
guadagno = 1
zeri = [ 1 ]
poli = [ -1 -2 ]
% Definizione del gradino
disp(' '),disp('Caratteristiche ingresso:')
tempo_inizio_gradino = 1
valore_gradino = 1
% FINE
File: esempio_introduttivo_plot.m
% File per la visualizzazione grafica dei risultati
% per il modello Simulink che determina la risposta al gradino
% di una F.d.T. definita nella forma "poli-zeri-guadagno"
% Eugenio Denti - 8 ott. 2003
% Apertura di una nuova figura
figure
% Esecuzione dei grafici
subplot(211),plot(tempo,u),ylabel('Ingresso u [-]'),xlabel('Tempo [sec]')
subplot(212),plot(tempo,y),ylabel('Uscita y [-]'), xlabel('Tempo [sec]')
subplot(211),title('Esempio introduttivo a Simulink')
% Modifica della scala del primo grafico
subplot(211)
scala = axis;
incremento = 0.05*(scala(4)-scala(3));
axis([scala(1) scala(2) scala(3)-incremento scala(4)+incremento]);
% FINE
14
3) S-function
Il metodo 1) il migliore in molti casi, soprattutto dal punto di vista della velocit di esecuzione in
fase di simulazione. Se tuttavia il modello molto complesso, in quanto costituito da un elevato
numero di equazioni che possono essere facilmente programmate in linguaggio Matlab (ma
richiederebbero un lavoro non indifferente per essere costruite mediante blocchi Simulink) e
soprattutto nel caso in cui il modello preveda numerose condizioni di scelta del tipo if-then-else,
allora pu essere conveniente ricorrere ad uno degli altri due metodi.
Il metodo 2) pi semplice dal punto di vista della velocit di programmazione, soprattutto nella
fase di sviluppo prototipale di un modello. Luso della M-function consente di realizzare una
dipendenza funzionale generica del tipo y=f(x). Quindi nel caso alcuni termini del vettore y siano
da integrare nel dominio del tempo, luso della M-function comporta la necessit di utilizzare i
blocchi Integrator di Simulink esternamente alla M-function.
Le M-function comportano per alcuni svantaggi sostanziali che ne sconsigliano lutilizzazione
nelle versioni definitive dei codici Simulink. Tra questi i pi importanti sono: lentezza di esecuzione
in fase di simulazione; impossibilit di compilare il modello e di realizzare simulazioni Real-time
(questa limitazione sembra superata nelle versioni pi recenti di Simulink); possibilit di utilizzare
esclusivamente metodi di integrazione numerica a passo fisso (o meglio, luso di metodi di
integrazione a passo variabile, con le M-function, comporta per utenti non esperti il rischio di
ottenere risultati errati).
Tutte le volte che appare opportuno programmare il modello in linguaggio Matlab, comunque
possibile utilizzare il terzo metodo che non presenta nessuno degli svantaggi delle M-function ed il
cui unico svantaggio consiste in una leggera difficolt iniziale, per lutente inesperto ad
impadronirsi della particolare sintassi con la quale devono essere realizzate le S-function.
La S-function una normale function di Matlab (nel senso che contenuta in un file di tipo .m) la
quale deve essere per realizzata con una particolare struttura interna (vedere esempio pi avanti) e
con la seguente dichiarazione dei dati di ingresso/uscita nella prima riga:
function [sys,x0]=nome_del_file(t,x,u,flag)
x f ( x, u, t )
y g ( x, u , t )
Versione 5 8 maggio 2009
15
Essa prevede in ingresso esclusivamente i segnali relativi al vettore degli ingressi ( u ) del sistema
ed in uscita esclusivamente i segnali relativi al vettore delle uscite ( y ) del sistema (rispettivamente
u e sys nella prima riga riportata sopra). Gli altri ingressi (t, x e flag) vengono gestiti
automaticamente da Simulink durante la simulazione. In particolare la variabile flag assume
valore 0 al primo passo, quando Simulink chiama la function per definire la struttura del sistema
dinamico e le condizioni iniziali; in questo caso i vettori di uscita sys ed x0 assumono il
significato spiegato nei commenti presenti allinterno della funcion;
valore 1 quando Simulink chiama la function per valutare le derivate x ;
valore 3 (per i sistemi continui) quando Simulink chiama la function per valutare le uscite y del
sistema.
Per maggiori dettagli vedere lhelp di Simulink.
A titolo di esempio si riportano nelle pagine che seguono i modelli di un sistema Massa-MollaSmorzatore realizzati con le tre metodologie sopra descritte (figure 1, 2 e 3).
Questi modelli sono disponibili anche in formato elettronico nelle seguenti cartelle che
accompagnano il presente documento:
SistemaMCK \ SistemaMCK
Metodologia full simulink
SistemaMCK \ SistemaMCK1 Metodologia Matlab function
SistemaMCK \ SistemaMCK2 Metodologia S-function
Sono inoltre disponibili in formato elettronico due ulteriori esempi di realizzazione del sistema
Massa-Molla-Smorzatore. Il primo, contenuto nella cartella:
SistemaMCK \ SistemaMCK3
del tutto analogo allMCK2. La sola differenza che luscita della S-function viene gestita come
vettore, evitando luso del blocco demux (figura 4).
Il secondo, pi interessante, contenuto nella cartella:
SistemaMCK \ SistemaMCK4
stato realizzato per mostrare come un sistema dinamico rappresentato mediante una S-function
possa essere lanciato anche da un programma Matlab (figure 5 e 6). Il sistema sistMCK4.mdl infatti
non contiene bottoni per caricare dati e non pensato per essere aperto e lanciato mediante un click
sullapposita freccia di avviamento della simulazione. E invece pensato per essere lanciato
mediante il programma run4.m presente nella stessa cartella. Per farlo funzionare, dunque,
sufficiente digitare il comando run4.m senza bisogno di aprire sistMCK4.mdl. Lesame dei
commenti presenti nel file run4.m consentir facilmente di comprenderne il funzionamento.
Le S-function utilizzate negli esempi MCK3 ed MCK4 non sono riportate nelle figure perch sono del
tutto analoghe a quella in figura 3.
16
17
Il nome della function di Matlab che contiene la descrizione del modello viene assegnato facendo
doppio click sul blocco M-function. Nel caso in esame la function stata memorizzata nel file di
nome Sistema1.m riportato di seguito:
File Sistema1.m:
function [y]=sistema1(x)
% Sistema massa molla smorzatore
%
Parametri
global m c k
F = x(1);
y = F/m -c/m*x(3) -k/m*x(2);
%
%
Nota: il comando global permette alla function di conoscere il valore dei parametri definiti nel
file di input (o comunque presenti nel Work Space). Nel file di input (o sul Work Space) deve essere
assegnato lo stesso comando global.
Figura 2): modello realizzato mediante M-function.
18
Il nome della function di Matlab che contiene la descrizione del modello nel formato previsto dalla
S-function viene assegnato facendo doppio click sul blocco S-function. Nel caso in esame la
function stata memorizzata nel file di nome Sistema2.m riportato di seguito:
File Sistema2.m:
function [sys,x0]=sistema2(t,x,u,flag)
% Sistema massa molla smorzatore
% Parametri del sistema utilizzati in questa S-function
global m c k
% Definizione del sistema dinamico e delle condizioni iniziali
if flag == 0
sys = [2; 0; 3; 1; 0; 1];
x0 = [0; 0];
% OUTPUTS: sys(1) number of continuous states
%
sys(2) number of discrete states.
%
sys(3) number of outputs
%
sys(4) number of inputs
%
sys(5) number of roots that the system has.
%
sys(6) set to 1 if the system has direct feed-through of
%
its inputs (used for systems within systems).
%
x0
vector of initial conditions
% Equazioni della dinamica del sistema nella forma x_dot = f(x,u,t)
elseif flag == 1,
F = u(1);
x_dot(1) = F/m -c/m*x(1) -k/m*x(2); % NOTA: x(1) e' la velocit
x_dot(2) = x(1);
%
x(2) e' la posizione
% uscite della S-function (per flag = 1 ---> sys = x_dot)
sys = x_dot;
% Definizione delle uscite del sistema dinamico nella forma y = g(x,u,t)
elseif flag == 3
F = u(1);
accelerazione = F/m -c/m*x(1) -k/m*x(2);
velocita
= x(1);
posizione
= x(2);
% uscite della S-function (per flag = 3 ---> sys = y)
sys = [ accelerazione velocita posizione ];
% Errore
else
sys = [];
end
19
20
File run.m:
%
%
%
%
% E. Denti 7/5/2009
clear all
close all
% Caricamento dati del sistema
dati4
% definizione della stosia temporale dell'ingresso
% (nella matrice u la prima colonna il tempo, la seconda l'ingresso)
u= [ 0
0
1
0
1.1
1
1000
1 ];
% definizione del tempo totale di simulazione
tempomax = 16;
% definizione dei parametri di simulazione
param = simset('OutputVariables','ty')
% NOTA: si possono definire tutti i parametri di simulazione
%
(dare il comando help simset per informazioni)
% in questo caso viene definito solo il valore ty per il
% parametro OutputVariables. Ci comporta il fatto che in
% uscita dal comando sim (vedi sotto) si abbia solo tempo e
% vettore delle uscite mentre il vettore di stato x rimane vuoto
% lancio simulazione
[tempo,x,y] = sim('sistMCK4',tempomax,param,u);
disp('Simulazione conclusa')
% plot risultati
grafici4
% NOTA: non volendo specificare parametri di simulazione
%
assegnare un alfanumerico bianco al posto di param:
%
ovvero: [tempo,x,y] = sim('sistMCK4',tempomax,[],u);
21