• Non ci sono risultati.

CAPITOLO 2: Il codice di simulazione ABS

N/A
N/A
Protected

Academic year: 2021

Condividi "CAPITOLO 2: Il codice di simulazione ABS"

Copied!
16
0
0

Testo completo

(1)

CAPITOLO 2: Il codice di simulazione

ABS

(2)

2.1 L’AMBIENTE MATLAB/SIMULINK

Il Matlab è un codice di calcolo molto usato nella pratica ingegneristica ed in ambito universitario a fini di ricerca. Caratteristica principale è la sua versatilità ed è a tutti gli effetti un linguaggio di programmazione con una interfaccia utente molto semplice. La parte interattiva è formata da due “finestre”: La finestra di “Command”, attraverso la quale facciamo eseguire al Matlab i comandi da tastiera, e la finestra di “Editor”.

Le operazioni eseguibili da Command sono relativamente poche, e la vera forza del Matlab sta nel semplice linguaggio di programmazione, tramite il quale, con l’”Editor” è possibile scrivere i veri e propri programmi per gli scopi più diversi: Calcolo, progettazione e, appunto, simulazione.

Il Matlab è corredato anche da una serie di toolbox che agevolano alcuni tipi di programmazione.

Il Simulink è uno di questi, ed è essenzialmente un modulo di programmazione attraverso il quale si sostituiscono i listati (i testi scritti in linguaggio Matlab) dei programmi con dei diagrammi a blocchi. In pratica i modelli matematici vengono realizzati in blocchi che possono scambiare i dati tra loro mediante comunicazioni rappresentate da semplice linee. Dentro questi blocchi, o celle, stanno operazioni già impostate o vi si richiamano funzioni Matlab scritte oppure altri diagrammi a blocchi Simulink.

(3)

2.2 IL CODICE DI SIMULAZIONE ABS

Il codice di simulazione ABS, fu sviluppato dal DIA per un lavoro di cooperazione con il progetto europeo SAMBA (Smart Attuator and Modulator Bracking Application, dicembre ’97) avente come obbiettivo il miglioramento delle prestazioni dei sistemi di controllo della frenata degli aerei.

Il codice è stato implementato in ambiente Matlab/Simulink ed è composto da due sistemi principali:

uno per la simulazione della dinamica dell’aereo e uno per l’iniziale determinazione dell’equilibrio a terra.

In Fig. 2.1 si può osservare il modello che simula la dinamica dell’aereo.

I blocchi colorati posti in alto costituiscono la semplice interfaccia utente, e permettono di caricare i dati di ingresso, far partire la fase di inizializzazione, far partire la simulazione e accedere a tutti i grafici degli input e degli output.

Il modello dinamico è composto da otto sottosistemi: pilota, aereo, ruote, carrelli di atterraggio, pedaliera, controllori di frenata, servovalvole e freni.

A loro volta ogni sottosistema è diviso in altri fino ad arrivare al livello più basso rappresentato da funzioni Matlab di tipo M-function o S-function.

(4)

Fig. 2.2 Sistema di inizializzazione

Prima di far partire la simulazione occorre calcolare i valori iniziali di tutte le variabili. Si è supposto di porre l’aereo in una condizione di equilibrio rappresentata dal Taxiig simmetrico ad una certa velocità costante. Questa configurazione è completamente definita da: l’altezza del centro di gravità dell’aereo, l’angolo di pitch, la deformazione degli ammortizzatori, la deformazione e la velocità angolare dei pneumatici.

Di solito occorrerebbe un metodo iterativo abbastanza complicato per una tale inizializzazione. Invece, per il codice ABS è stato sviluppato un metodo molto semplice e veloce, basato sul modello Simulink mostrato dalla Fig. 2.2. Il metodo è basato sull’ipotesi l’altezza del baricentro, e l’angolo di pitch (θ) siano quantità note, insieme alla velocità di taxiing (VCG). Questo porta a grandi semplificazioni. Infatti, conoscendo VCG e

θ, è immediatamente possibile calcolare le forze aerodinamiche, i momenti aerodinamici e quindi le forze di equilibrio a terra. note queste ultime si possono ottenere i valori delle deformazioni degli ammortizzatori e dei pneumatici.

(5)

2.3 MODELLO MATEMATICO IMPLEMENTATO IN ABS

2.3.1 Equazioni della dinamica del velivolo

Il modello di simulazione della dinamica del velivolo si basa sull’ipotesi che il velivolo si comporti come un corpo rigido. Sotto tale ipotesi la dinamica del velivolo è completamente descritta dalle due equazioni cardinali di seguito riportate, scritte in un sistema di riferimento solidale all’aereo e in forma vettoriale:

m d dt . V m.( V) FeFeFe (2.1) d dt H Ω H MMM (2.2) Dove: m = massa dell’aereo. V = velocità del baricentro. Ω = velocità angolare.

Fe = risultante delle forze esterne.

H = momento della quantità di moto rispetto al baricentro. M = momento delle forze esterne.

2.3.2 Azioni aerodinamiche

In Fig. 2.3 si mostrano i sistemi di riferimento.

Fig. 2.3 sistemi di riferimento

Xi e Zi sono gli assi della terna inerziale.

Le forze esterne sono divise in forze gravitazionali, forze aerodinamiche, forze propulsive, forze trasmesse dai carrelli.

Le forze aerodinamiche, di portanza (Lift) e di resistenza (Drag) possono essere scritte tramite formule che usano coefficienti adimensionali:

L 1 2. Sρ. CL . .V2 ρρ (2.3) D 1 2. Sρ. CD . .V2 ρρ (2.4) Dove: ρ = densità dell’aria S = superficie alare

(6)

CL = Coefficiente di portanza adimensionalizzato CD = Coefficiente di resistenza adimensionalizzato Ed essendo:

CL CLα α. CLδe δe. CLq q.CLqCLq CD CD0 k CLkk. 2

con CLi = derivate parziali di CL rispetto a:

α = incidenza

δe = angolo di equilibratore

q = velocità angolare di beccheggio.

Allo stesso modo i momenti aerodinamici sono:

M 1 2. Sρ. c. Cm. V 2 . ρρ (2.5) Dove:

c = corda media aerodinamica dell’ala

Cm = coefficiente di momento (beccheggio) adimensionalizzato Essendo

Cm Cm0 Cmα α. Cmαp αp. Cmq q. Cmδe δeCmδeCmδe.

Con Cm0 = coefficiente di momento a incidenza nulla, Cmi = derivate parziali di Cm

rispetto a: α = incidenza

αp = derivata rispetto al tempo dell’incidenza δe = angolo di equilibratore

q = velocità angolare di beccheggio.

Il modello delle forze aerodinamiche sul piano laterodirezionale non è riportato in quanto non interessa nell’ambito del presente lavoro.

2.3.3 Azioni propulsive

La spinta del motore si considera costante e parallela all’asse Xb

F T maxδtT maxT max. (2.6)

Con Tmax = spinta massima del motore e δt = percentuale di manetta

M H thr T maxH thrH thr. .δt (2.7)

Con Hthr = distanza lungo l’asse z corpo del motore dal baricentro.

2.3.4 Azioni dei carrelli

Il modello di carrello sviluppato per le simulazioni è a due gradi di libertà (Fig. 2.4). La geometria adottata non ricalca un’architettura specifica al fine di semplificare al massimo il modello matematico senza però lederne la generalità.

Con riferimento alla Fig. 2.4 la forza trasmessa dai carrelli diretta lungo l’asse x può essere scritta come:

F lgx K lgx dx. C lgx dxpC lgxC lgx. (2.8)

In cui Klgx è la rigidezza flessionale e Clgx lo smorzamento flessionale della gamba del

carrello (in generale funzioni non lineari della deformazione e della velocità di deformazione, nel nostro caso costanti), mentre dx e dxp sono rispettivamente lo spostamento lungo x del mozzo della ruota (estremo libero della “trave” carrello) e la derivata rispetto al tempo di questo.

(7)

F lgz K lgz dz. C lgz dxpC lgzC lgz. 2 (2.9)

Dove Klgz è costante elastica dell’ammortizzatore (funzione non lineare della deformazione

dz) e Clgz è il coefficiente di smorzamento dell’ammortizzatore (funzione non lineare della

deformazione dz e con valori diversi a seconda che l’ammortizzatore sia in allungamento o in accorciamento ).

Fig. 2.4 Schema gradi di libertà carrello

2.3.5 Dinamica dei pneumatici

Si considera solo il modello longitudinale; Facendo riferimento alla successiva Fig. 2.5:

F hz K w dr. C w drpC wC w. (2.10)

Dove Kw è la rigidezza del pneumatico ed è una funzione non lineare dello schiacciamento

dr e Cw è lo smorzamento (in generale funzione non lineare di deformazione e velocità di

deformazione drp).

Si definisce lo slittamento come:

S x V hx ω w R w . V hx ω w ω w ω w 2.11 ( ) S

con Vhx = velocità lungo x del mozzo della ruota, ωw = velocità angolare del pneumatico,

Rw = raggio della ruota.

In questo modo la forza frenante è data da:

F b F hz µ. S x S x . F hz

F hz (2.12)

con µ = coefficiente di attrito, funzione non lineare dello slittamento (e in generale anche della forza verticale Fhz e della velocità del mozzo Vhx.

Il momento resistente al rotolamento è dato da:

M r F hz X rollF hzF hz. (2.13)

Dove Xroll, come da figura, è la distanza lungo x tra il centro della ruota e il punto di

(8)
(9)

2.4 INTERVENTI FATTI SU ABS

2.4.1 Cenni introduttivi

In §2.1 è stato descritto lo schema Simulink di ABS, costituito da un diagramma a blocchi (cfr. Fig. 2.1); all’interno di ogni blocco può trovarsi o un sottosistema a blocchi, o una funzione predefinita (una sommatoria, un integratore, un comando per immettere un dato nel workspace, un selettore…..), oppure un comando che richiama un programma. Nel codice ABS questi “programmi” sono scritti in linguaggio Matlab e sono: S-functions se preposti alla risoluzione di sistemi dinamici, oppure M-function se le relazioni tra le variabili in ingresso e in uscita sono algebriche.

Uno degli scopi di questo lavoro è quello di verificare l’efficacia e l’efficienza di un'altra forma di programmazione per le functions:

Precedenti attività di tesi avevano dimostrato che è possibile diminuire molto i tempi di calcolo usando, al posto delle M-function e S-function Matlab, delle s-function scritte in C++ (cfr. [3]). Si è, quindi, modificato il codice sostituendo alle functions scritte in linguaggio Matlab, functions analoghe scritte in C++.

2.4.2 Struttura delle functions

- S-functions: all’interno di una S-function Matlab troviamo più parti di codice, relative alla fase di inizializzazione, alla risoluzione del sistema dinamico, al calcolo delle uscite (Fig. 2.6). Nella fase di inizializzazione vengono definiti i valori iniziali delle variabili di stato; segue la procedura che, ad ogni passo di integrazione, calcola i valori delle variabili di stato e delle loro derivate, e le uscite. La struttura delle S-function in C++ è simile a quella delle S-function Matlab.

(10)

- M-function: le M-functions sono routines prive di dinamiche temporali. In C++ è possibile realizzare M-function solo come S-function “mascherate”, nelle quali, cioè, non viene sviluppata la parte relativa alla risoluzione dei sistemi dinamici. In Fig. 2.7 se ne mostra una schematizzazione.

Fig. 2.7 Schema del funzionamentodi una M-function

2.4.3 Lavoro svolto

Il lavoro svolto per creare un codice in grado di operare con functions scritte in linguaggio C++ è riassumibile nelle seguenti fasi:

1) Scrittura delle functions di ABS in linguaggio C++.

2) Compilazione dei files.c con Matlab per creare files.dll utilizzabili da Simulink.

3) Sostituzione, nello Schema Simulink, dei blocchi originali M-function e S-function con nuovi blocchi S-function, contenenti le informazioni necessarie per richiamare correttamente le nuove functions in C++.

2.4.3.1 Scrittura delle functions in C++

Per quanto riguarda la scrittura delle nuove functions in C++, bisogna dire che non si è trattato di una semplice traduzione da quelle originali in Matlab: infatti, se da un lato lo schema del funzionamento delle M-function e S-function Matlab è identico a quello delle loro controparti in C++, vanno sottolineate alcune differenze nella struttura sintattica e nella grammatica:

- Nel testo di una function Matlab, sia S-function che M-function, la parte dedicata alle espressioni matematiche è preceduta da una in cui si esplicitano i nomi delle variabili globali e delle variabili in ingresso. In particolare, i parametri globali sono quei parametri, costanti durante la simulazione, presenti nel “Workspace”, che sono utilizzati nella successiva sezione dedicata ai calcoli matematici. Essi sono elencati senza nessun ordine logico sotto la voce “Global” e, se sono vettori o matrici, vengono indicati semplicemente con il nome del vettore o della matrice. Gli input invece sono elencati secondo l’ordine in cui, nello schema Simulink, sono immessi nel blocco della

function e, in questo caso, vettori e matrici sono scissi nei loro componenti. Anche in

C++ è presente una parte introduttiva in cui vengono esplicitati sia gli input che i

parametri globali. Questa parte introduttiva però è molto più estesa e comprende uno schema fisso in cui vanno inserite varie informazioni; tra queste, il numero degli input e il numero dei parametri globali. Ogni parametro, così come ogni input, deve essere uno scalare, quindi è necessario, in questo caso, esplicitare ogni singolo componente di vettori o matrici. Nelle functions in C++ l’ordine degli input rimane quello originale, mentre l’ordine in cui sono definiti i parametri globali assume un’importanza che in

(11)

sono elencati nell’apposita finestra dello schema Simulink (Fig. 2.13). Gli outputs sono trattati in entrambi i linguaggi nello stesso modo: Viene creato un vettore di output le cui componenti sono disposte secondo l’ordine in cui escono dal blocco della function nello schema Simulink.

- Per quanto riguarda la parte di scrittura delle espressioni matematiche, tra tante piccole differenze grammaticali tra i due linguaggi di programmazione, vale la pena evidenziarne una, in particolare, che ha comportato un grosso carico di lavoro in più rispetto alla semplice traduzione: e’ stato impossibile (con le limitate conoscenze a disposizione) far eseguire automaticamente le operazioni tra matrici, anche le più semplici. Ogni operazione tra matrici o vettori (inversione di matrici, determinante, prodotto tra matrici…) è stata eseguita facendo i calcoli a mano, e scrivendo le espressioni delle componenti, della matrice o del vettore, risultato dell’operazione. Questa operazione è stata particolarmente lunga e fonte della maggior parte degli errori che si sono verificati durante il lavoro.

2.4.3.2 Compilazione dei Files.c

Una volta scritte le functions in linguaggio C++ è stato necessario compilarle usando il comando “mex” di Matlab, per ottenere files in formato .dll, utilizzabili dal simulatore Simulink al posto delle functions Matlab.

2.4.3.3 Aggiornamento del diagramma Simulink con nuovi blocchi S-function

Tutte le functions scritte in C++, sia quelle derivate da S-functions, che quelle derivate da M-function, sono utlizzate in Simulink come S-function. Si distinguono quindi due diverse procedure per modificare lo schema Simulink, a seconda che la function originale fosse una M-function o una S-function.

- Function originale Æ M-function: il blocco Simulink M-function si presenta come in

Fig. 2.9. In Fig 2.10 si mostra la finestra di dialogo che appare cliccando sull’icona del

blocco.

(12)

Fig. 2.9 Blocco M-function

Fig. 2.10 Finestra di dialogo di una M-function

Questo blocco va sostituito con un blocco S-function in cui occorre inserire nell’apposita finestra il nome del nuovo file formato “dll” e l’elenco di tutti i parametri globali. Come già specificato in §2.4.3.1 il loro ordine deve essere lo stesso con cui sono scritti nel testo

della function. Nelle seguenti figure Fig. 2.11, Fig. 2.12, Fig. 2.13 viene mostrato come bisogna modificare il sottosistema per poter utilizzare il file.dll.

(13)

Fig. 2.11 Sottosistema modificato

Fig. 2.12 Blocco S-function

(14)

- Function originale Æ S-function: Se la function originale è una S-function occorre solamente aprire la finestra di dialogo del blocco, eventualmente modificare il nome del file qualora risultasse diverso, e inserire l’elenco dei parametri sotto l’apposita voce.

Fig. 2.14 Sottosistema con S-functions

(15)

Fig. 2.16 Finestra di dialogo della S-function Acdyn21.dll

Si noti come, nel caso della S-function Matlab (Fig. 2.15), non sono specificati i parametri globali sotto l’apposita voce, in quanto essi sono letti automaticamente dal Workspace, mentre, nel caso della S-function in C++ (Fig. 2.16), è stato necessario inserirli. Si osservi, inoltre, come i parametri I e Iinv, che sono vettori, sono stati inseriti dividendoli nelle loro componenti.

(16)

2.4.4 Modifiche al modello matematico

Per rendere più semplice la costruzione del modello ADAMS, si è deciso di modificare alcune routines di ABS, in maniera, però, non sostanziale:

Nelle funzioni DZ34 è stata tolta la dipendenza dal parametro deformazione massima del pneumatico; in pratica si è evitato di simulare la battuta al massimo schiacciamento possibile del pneumatico.

Va detto che questa funzione può essere implementata in ADAMS, attraverso l’uso di una forza di contatto, peraltro già impostata, che però ha il difetto di rallentare molto la simulazione. Si è deciso di togliere questa funzione perché le simulazioni riguardano una fase successiva al touch-down e si ritiene quindi che non si giunga mai allo schiacciamento massimo dei pneumatici per l’effetto della sola frenata.

Inoltre, è stata tolta nella funzione che calcola le forze aerodinamiche, la dipendenza di queste dalla derivata dell’angolo di incidenza, per poter utilizzare una specifica formulazione preimpostata su ADAMS per semplificare la costruzione del modello.

Figura

Fig. 2.1 Sistema Simulink pricipale
Fig. 2.2 Sistema di inizializzazione
Fig. 2.3 sistemi di riferimento
Fig. 2.4 Schema gradi di libertà carrello
+7

Riferimenti

Documenti correlati

Sono state sperimentate due diverse tipologie di pneumatici: in un primo caso si è ricreato lo stesso modello di pneumatico presente nel simulatore Simulino, con le stesse

Due to the several food-related incidents happened over the years, the food safety issue has become more and more important and has gained its attention on an international

C’est le cas notamment de la Cour de justice, interprète autorisé du droit de l’Union européenne, qui en a défini de manière assez précise la

Come si può osservare inizialmente viene prodotto un campo di vento bidimensionale orizzontale di primo tentativo, che può essere costante, variabile o

DYNAMIC MODELING 3.18..

Verifica giunti sismici strutture campus e polo ABV.

[r]

TOTALE Lavori server farm e Lavori uffici del Rettore e. della Direzione Amministrativa Lavori