Académique Documents
Professionnel Documents
Culture Documents
ROMA
TOR VERGATA
FACOLTÀ DI INGEGNERIA
Tesi di Laurea
RELATORE CANDIDATO
CORRELATORE
Dott. Ing. Filippo Sartori
Alla mia famiglia
Ai miei amici
Indice
Ringraziamenti 1
Introduzione 2
1.2 Il Tokamak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 La stabilizzazione verticale 15
2.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
INDICE I
INDICE
2.6.1 FRFA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.6.5 ELM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.2.1 Le GAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.5 Linux-RTAI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.6 FCOMM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.7 RTAIConsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
INDICE II
INDICE
4 Risultati ottenuti 71
Appendices 77
A La BaseLib2 78
A.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
B.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
C Specifiche hardware 97
C.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
INDICE III
INDICE
Bibliografia 103
INDICE IV
Ringraziamenti
Colgo questa occasione per ringraziare tutti coloro che hanno reso possibile questa
esperienza, lunga ben sei mesi, al JET. Prima di tutti i miei genitori e mia nonna,
che mi sono stati vicini nonostante i chilometri che ci separavano, offrendomi sempre
un supporto incondizionato anche durante i momenti più difficili vissuti, ora come
durante l’intero arco della mia carriera scolastica prima, ed universitaria poi.
A loro si aggiunge quella lunga teoria di amici vicini e lontani che con affetto
hanno continuato a mantenere stretti rapporti, facendomi sentire spesso quasi come
se Oxford fosse a pochi passi dalle loro case. Insieme a questi ultimi l’ing. (e futuro
dottor) Salvatore Annunziata, conosciuto al JET e senza la cui solare presenza e co-
stante aiuto tutto sarebbe stato più difficile, e gli altri ragazzi del gruppo.
Infine voglio ringraziare il prof. Luca Zaccarian, senza il quale questa seconda
fantastica opportunità di lavorare nel campo della fusione non sarebbe stata nemmeno
Italy” del Plasma Operations Group, popolata da persone capaci di creare un clima
INTRODUZIONE 1
Introduzione
Il problema energetico è senza dubbio alcuno la più grande sfida che il genere umano
dovrà affrontare nel corso del secolo che stiamo vivendo. Il progressivo esaurirsi dei
combustibili fossili e la necessità di trovare sistemi per produrre energia quanto più
possibile “puliti” al fine di frenare l’inquinamento del pianeta, aggiunti alla sempre
questo campo.
Varie possibili risposte sono state date nel tempo a questo problema, nessuna delle
quali sembra essere, ad oggi, proponibile come alternativa ai combustibili fossili. Fonti
vista della potenza erogata, non può essere considerata una soluzione a lungo ter-
mine, sia a causa delle scorie prodotte altamente radioattive e con elevato tempo di
Una possibile soluzione al problema energetico potrebbe, invece, derivare dalla fu-
INTRODUZIONE 2
INTRODUZIONE
sione nucleare, che permetterebbe di accedere ad una fonte di energia sicura, pulita
crosta terrestre.
campo della scienza e della tecnica, dalla fisica, alla meccanica, all’ingegneria dei con-
ricerca sono sorti in varie parti del mondo. In particolare a Culham, piccola cittadina
nei pressi di Oxford, Regno Unito, nella prima metà degli anni ’80 è stato costruito,
grazie ad una collaborazione tra 25 stati europei, il JET (Joint European Torus), il
Al momento della costruzione del JET numerose considerazioni (relative sia alla
robustezza meccanica della struttura che all’efficienza del processo) hanno portato
alla decisione di conferire alla camera da vuoto una forma allungata verticalmente,
simile alla lettera “D”. Di conseguenza, al fine di sfruttare nel modo migliore lo spazio
a disposizione, si è scelto di dare al plasma una forma non più circolare come in altri
Questo ha causato, tuttavia, una perdita della naturale stabilità verticale posseduta
dai plasmi circolari, portando alla necessità di progettare un sistema in feedback per
garantire che il plasma stesso non terminasse rovinosamente contro le pareti del To-
kamak.
INTRODUZIONE 3
INTRODUZIONE
alla fusione ed al confinamento del plasma, pur se senza nessuna pretesa di comple-
mento dell’esecutore di thread realtime del JET (MARTe) e la logica modulare con
cui il controllore è stato realizzato (le GAM), e concentrandosi infine sul porting del
dice, verranno illustrate alcune delle specifiche tecniche più importanti (sia hardware
che software).
INTRODUZIONE 4
Capitolo 1
È noto che all’interno del nucleo atomico i protoni, essendo dotati di stessa carica
La prima, scoperta nella prima metà del ventesimo secolo da un gruppo di scienziati
(tra i quali una figura di spicco è sicuramente Enrico Fermi), anche grazie ai fondi
“donati” dal Ministero della Difesa americano in vista di un potenziale utilizzo bellico
Tuttavia la pericolosa produzione di scorie nucleari nocive per la salute, oltre a rendere
5
CAP. 1 Cenni sulla fusione nucleare 1.1 La fusione nucleare
zione i nuclei di elementi leggeri si fondono per formare un nucleo più pesante, la cui
massa è minore della somma delle masse dei nuclei “genitore”. La massa mancante si
neutrone.
fatto che, per soverchiare le forze di repulsione elettrica tra i nuclei, gli atomi devono
6
CAP. 1 Cenni sulla fusione nucleare 1.2 Il Tokamak
in regimi di altissima temperatura e/o pressione. In particolare, nel caso della fusione
Il plasma è un gas ionizzato la cui carica complessiva, a causa della possente forza
elettrostatica tra i due elementi costitutivi, resta generalmente neutra. Ciò nonostan-
te, grazie allo scorrimento relativo tra ioni ed elettroni, il plasma è un buon conduttore
l’utilizzo di campi magnetici [1] [2]. Tale processo, che permette di isolare il plasma
ad alta temperatura dalle pareti del suo contenitore, è definito confinamento ma-
gnetico.
1.2 Il Tokamak
Tra le varie strutture proposte per il confinamento magnetico del plasma, quella più
diffusa è senza dubbio il Tokamak (acronimo per la frase russa “TOroidalnaya KA-
sia per la sua relativa semplicità, che per la sua efficacia. Un Tokamak è generalmente
7
CAP. 1 Cenni sulla fusione nucleare 1.2 Il Tokamak
magnetici sia sul piano poloidale (ovvero lungo la sezione verticale della camera)
che toroidale (parallelamente alla camera)2 . Si confronti per maggior chiarezza con
la figura 1.2.
In figura 1.2 è anche possibile vedere come le due tipologie di avvolgimenti ma-
Portare un gas alle temperature richieste perché esso si trasformi in plasma non è,
8
CAP. 1 Cenni sulla fusione nucleare 1.2 Il Tokamak
Una parte del calore necessario deriva dall’effetto Joule dovuto alla corrente di
plasma che circola nel gas, generata dall’avvolgimento centrale (figura 1.2) per effetto
mente insufficiente perché possano avvenire reazioni di fusione nucleare. Tale limite
è legato al fatto che all’aumentare della temperatura la resistività del plasma tende a
Per fornire la potenza aggiuntiva richiesta sono state studiate tre tecniche fonda-
mentali:
la loro energia al plasma urtando contro gli atomi che lo compongono (Neutral
Beam Heating);
stesso verso regioni con campo magnetico maggiore, con conseguente aumento
di pressione e temperatura.
finché il plasma possa autoalimentarsi: perché ciò avvenga si deve riuscire ad arrivare
9
CAP. 1 Cenni sulla fusione nucleare 1.3 Lo stato dell’arte: il JET
camera da vuoto.
Il JET è una macchina costruita in collaborazione tra i vari stati membri dell’Unione
Europea, e rappresenta ad oggi, con i suoi quasi tre metri di raggio maggiore, il più
grande Tokamak esistente sulla Terra. L’entrata in funzione della macchina, avvenuta
nel 1983, ha rappresentato un enorme passo in avanti nel campo della ricerca sulla
fusione nucleare.
un fattore Q di 0.6.3
In figura 1.3 è riportato l’interno della camera da vuoto del Tokamak, cosı̀ come
le”) della parete a contatto col plasma (denominata first wall ), e la zona dei divertori
3
Il fattore Q rappresenta il rapporto tra potenza generata e potenza fornita al Tokamak per riscal-
dare il plasma. Un reattore capace di fornire tanta potenza quanta gliene viene fornita (breakeven)
ha un fattore Q = 1. Nel caso di ignition si ha Q = ∞.
4
Durante la sua storia, infatti, il JET ha subito un’enorme evoluzione, in particolare per quanto
riguarda l’interno del vessel, al fine di sperimentare nuovi scenari e correggere errori precedenti.
10
CAP. 1 Cenni sulla fusione nucleare 1.3 Lo stato dell’arte: il JET
Figura 1.3: Interno della camera vuoto del JET, con sovrapposta un’istantanea presa
in presenza di plasma.
In figura 1.4 sono riportati i principali circuiti poloidali che generano la struttura ma-
gnetica del JET. Si noti come alcuni di essi condividano fisicamente la stessa bobina.
Essi sono:
regolano l’elongazione verticale del plasma (PFX, Poloidal Field X-Point), e che
11
CAP. 1 Cenni sulla fusione nucleare 1.3 Lo stato dell’arte: il JET
• Circuito di campo radiale. Il circuito, composto dalla serie delle bobine P2R
questa Tesi;
• Circuito di forma. Composto dalla serie delle bobine P2S e P3S, è il circuito
del plasma;
del posizionamento degli strike points, ovverosia dei punti dove il plasma scarica
la maggior parte della sua energia termica nel caso di configurazione con X-
12
CAP. 1 Cenni sulla fusione nucleare 1.4 Le sfide future: ITER e DEMO
Point5 . Contrariamente agli altri, i circuiti di divertore sono gli unici psizionati
Dopo più di 20 anni di attività e studio, ci si sta rendendo conto che il JET inizia
ITER è uno sforzo collettivo internazionale dell’Unione Europea insieme alla Sviz-
zera, al Giappone, alla Corea, all’India, alla Federazione Russa agli Stati Uniti ed alla
iniziare a Cadarache, nel sud della Francia. Con i suoi 6 metri di raggio maggiore,
ma continua (steady-state); si spera inoltre di dare origine alla prima ignition della
5
In tale configurazione all’interno della camera da vuoto non sono presenti solo linee di campo
chiuse, ma anche aperte. La prima di queste ultime, che segna la transizione tra le due forme,
possiede un punto a campo nullo in cui le linee di campo si incrociano formando una X, da cui il
nome.
13
CAP. 1 Cenni sulla fusione nucleare 1.4 Le sfide future: ITER e DEMO
Il passo seguente, dipendente dal successo di ITER, sarà DEMO, il primo esempio
di reattore a fusione che, con i suoi previsti 2GW di potenza dovrebbe essere in scala
con una moderna centrale elettrica, dando il via allo sfruttamento pacifico della fusione
termonucleare.
14
Capitolo 2
La stabilizzazione verticale
In questo capitolo verrà affrontata la problematica della stabiliz-
zazione verticale del plasma, introducendo i concetti fisici fonda-
mentali necessari alla comprensione del problema, e quindi analiz-
zando come questo sia attualmente risolto al JET, segnalando le
problematiche ancora aperte.
2.1 Introduzione
Il problema della stabilizzazione verticale del plasma al JET nasce dall’aver deciso di
sezione circolare risulta essere verticalmente stabile, un plasma allungato perde tale
caratteristica.
siderazione meccanica: la forma a D risulta evidentemente più robusta sia per quanto
riguarda gli stress verticali1 , sia, e soprattutto, relativamente alla deformazione oriz-
zontale della camera da vuoto, soggetta alle enormi forze derivanti dall’interazione
15
CAP. 2 La stabilizzazione verticale 2.1 Introduzione
simità della parete interna. Un plasma D-shaped, quindi, espone un volume molto
Figura 2.1: Caduta della corrente di plasma in dipendenza dalla distanza dall’asse del
toro.
Col tempo, inoltre, man mano che le teorie sull’H-mode 2 andavano affermandosi,
si è visto che avere un plasma con una forte triangolarità (figura 2.2), definita come
[2]:
0.5 · (c + d)
δ=
a
2
L’H-mode è una modalità di funzionamento dei Tokamak caratterizzata da pressioni ed energie
decisamente maggiori rispetto al metodo di funzionamento standard, battezzato L-mode.
16
CAP. 2 La stabilizzazione verticale 2.1 Introduzione
favorisce di molto i rendimenti della macchina (e si noti come man mano che la forma
del plasma tende verso una “D” maiuscola -come al JET- la triangolarità aumenti).
sa, in generale, un’improvvisa disruzione nel plasma (anche detta VDE, o Vertical
Displacement Event) con conseguenti enormi stress per il Tokamak, soprattutto dal
punto di vista meccanico, mentre l’enorme quantità di energia elettrica posseduta dal
Mentre un VDE può essere tollerato dal JET, un evento del genere nel futuro ITER
17
CAP. 2 La stabilizzazione verticale 2.2 Analisi del problema fisico
Dal punto di vista fisico, il perché dell’instabilità verticale del plasma è relativamente
Figura 2.3: Instabilità verticale del plasma. I segni + e - indicano la direzione della
corrente circolante nel circuito.
Le espansioni polari (iron polar expansions, in viola nella figura), delle strutture
passive in ferro3 , e in parte minore i circuiti di forma (shaping coils, in azzurro nella
figura), sono i principali responsabili della forma allungata del plasma. Fino a quando
3
Una struttura passiva soggetta ad un campo magnetico, genera infatti a sua volta un campo
magnetico “riflesso” (a causa della corrente che lo attraversa) che, nel caso del Tokamak, attira il
plasma (poiché possiede il medesimo segno).
18
CAP. 2 La stabilizzazione verticale 2.2 Analisi del problema fisico
esso si trova in una posizione di equilibrio verticale nella camera (ovverosia nel punto
in cui le forze indotte sul plasma dalle due espansioni polari risultano essere uguali
mento da tale posizione perché una delle due forze diventi predominante, attirando il
infrangersi contro le pareti del Tokamak. L’inverso del tempo in cui questo avviene è
È possibile ottenere una stima abbastanza attendibile del growth rate utilizzando un
plasma può essere visto come uno o più filamenti rigidi, percorsi da una corrente
costante, con un unico grado di libertà coincidente con la posizione verticale del
menti poloidali e delle strutture passive in funzione del flusso magnetico per radiante,
( )
˙ ~
~ ~
ψ I(t), zp (t) + RI(t) = ~u(t)
( ) (2.1)
mp z̈p (t) = −2πrp Br ~
I(t), zp (t) Ip
~ è il flusso concatenato da circuiti, strutture passive e filamenti di plasma; R è
dove ψ
del campo poloidale e ~u è il vettore degli ingressi, ovvero delle tensioni applicate ai
4
In realtà viene usato il centroide dell’insieme di filamenti, ovvero una sorta di centro “pesato”
dall’intensità di corrente che scorre in ogni filamento.
19
CAP. 2 La stabilizzazione verticale 2.2 Analisi del problema fisico
Considerando ora che la massa del plasma risulta essere decisamente trascurabile
analizzando gli autovalori con parte reale positiva della matrice [16]:
( )−1
g · gT
− L− R
F
20
CAP. 2 La stabilizzazione verticale 2.3 Le misure magnetiche
Tramite tale modello si è visto che, in una scarica tipica, il growth rate del JET
uso di una vasta serie di sensori magnetici, posti in vari punti della camera da vuoto,
usati al JET due tipologie di sensori: i Mirnov coil (o pick-up coil) -riportati in
Figura 2.4: Esempio di Mirnov coil. In figura sono riportati il contenitore, la struttura
di supporto e il sensore vero e proprio.
Entrambi i sensori permettono la misura della derivata del flusso magnetico con-
catenato con il sensore (in particolare la componente perpendicolare alle spire del sen-
sore stesso). Segue quindi che i Mirnov coil misurano la componente tangenziale del
campo magnetico in un dato punto della camera, mentre i saddle loop quella normale.
5
In realtà tale autovalore, non fosse per le correnti parassita (eddy current) circolanti nelle strut-
ture metalliche passive a causa dei movimenti del plasma, sarebbe decisamente più alto (dell’ordine
di 106 s−1 ), rendendo virtualmente impossibile controllare il movimento verticale del plasma.
21
CAP. 2 La stabilizzazione verticale 2.4 Stima della posizione verticale del plasma
Figura 2.5: Posizione su un ottante dei sensori di misura del campo magnetico.
La tecnica usata per stimare la velocità verticale del plasma deriva dalle equazioni
22
CAP. 2 La stabilizzazione verticale 2.4 Stima della posizione verticale del plasma
radiale e verticale.
A fini pratici, assumendo di far coincidere l con la sezione della camera del
re misurate solo in posizioni discrete dai sensori posti sulla camera e differenziando
∑
18 ∑
14
Ip żp = ai Ḃt (i) + bi Ḃn (i) − I˙p zp − I˙pass zpass (2.2)
i=1 i=1
dove il termine I˙pass zpass relativo alle strutture passive è dato da:
∑
4
I˙pass zpass = I˙D(i) zD(i) − I˙rr zrr − I˙mk2 zmk2
i=1
Ip e żp rappresentano corrente e velocità verticale del plasma e ai e bi sono dei pesi
ottenuti risolvendo la (2.1) nei punti dove i sensori sono posti nella camera.
tangenziale) e 14 per i saddle loops (misura del campo normale) (figura 2.6) [16].
Si noti che, dopo l’introduzione dei divertori per gestire l’X-point, le Mirnov coils
presenti nella parte bassa della camera sono risultate essere inutilizzabili (proprio a
2.6).
23
CAP. 2 La stabilizzazione verticale 2.5 L’algoritmo di controllo
Modified Set
1.2
Mirnov Coils
Saddle Loops
1
0.8
0.6
Weight
0.4
0.2
−0.2
0 5 10 15 20 25 30 35
Coil Number
Figura 2.6: Pesi per i vari sensori magnetici, come da modifica dopo l’inserimento del
divertore.
namento ad isteresi;
• Speed observer: è un blocco che, sulla base delle misure magnetiche, determi-
vista precedentemente7 );
7
Si noti che in realtà si ottiene, come indicato dalla (2.2), il prodotto Ip Żp , rappresentante la
velocità verticale del plasma pesata dalla corrente di plasma.
24
CAP. 2 La stabilizzazione verticale 2.5 L’algoritmo di controllo
del plasma;
come l’azione di controllo sia la somma dei contributi dei due loop di controllo;
Figura 2.7: Schema generale dell’algoritmo per la stabilizzazione verticale del plasma.
Il blocco denominato velocity loop ha come compito quello di regolare a zero la velocità
verticale del plasma. Ciò viene effettuato attraverso un controllore di tipo proporzio-
25
CAP. 2 La stabilizzazione verticale 2.5 L’algoritmo di controllo
è quello di un controllore bang-bang, che fa sı̀ che il plasma tenda ad oscillare attorno
alla sua posizione di equilibrio verticale con un’ampiezza e una frequenza proporzio-
menti particolari). Il blocco current loop si occupa proprio di questo attraverso l’uso
di un controllore PI.
mento: all’inizio e alla fine dell’impulso (quando non si è in presenza di plasma) solo
che guida la nascita e la morte del plasma), mentre durante l’esperimento entrambi i
di switch di FRFA (misurando il numero di passaggi per zero della tensione misurata
stimato con quello desiderato (impostato a priori e posto pari ad un valore ottimo
26
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
per FRFA) e genera i due valori di guadagno per i controllori di velocità e corrente
Oltre al controllo sulla frequenza è previsto anche un controllo logico sulla tem-
peratura di FRFA: qualora essa sia troppo elevata il controllore passa in uno stato
Un’ulteriore forma di controllo, non riportata nello schema di figura 2.7 in quanto non
istanti precisi decisi a priori, o periodicamente, o anche sulla base degli Hα, misura di
radiazione che permette di determinare l’insorgere di un ELM. Un uso del Kick Con-
troller è infatti quello di sperimentare tecniche che consentano di limitare gli ELM
Il controllo di una macchina complessa come il JET è, ovviamente, soggetto a nu-
27
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
di misura.
dro quanto più completo possibile del sistema di stabilizzazione verticale, i principali
mente).
2.6.1 FRFA
FRFA, acronimo di Fast Radial Field Amplifier, è il nome dell’amplificatore che pren-
2.5 kV a 2.5 kA. L’attuale configurazione prevede il collegamento in serie dei moduli,
Ciascuna delle sotto-unità viene attivata o disattivata a seconda delle richieste del
al banco di filtri a monte di ogni modulo, il cui scopo è quello di limitare la variazione
V /µs). Tale banco di filtri è composto da due induttori di potenza (Lf ) da circa 200
28
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
µH e da una resistore da 14 Ω.
Rf (2Lc s + Rc )
W (s) =
2Lf Lc s2 + [2Lf (Rc + Rf ) + Lc Rf ]s + Rc Rf
I risultati simulativi ottenuti con la precedente sono stati successivamente confermati
29
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
30
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
renti8 , sono fortemente accoppiati in quanto condividono parte degli avvolgimenti ma-
Nella maggior parte dei casi tale fenomeno si verifica quando si adotta il sistema
di controllo completo della forma XSC (eXtreme Shape Controller ) a causa della sua
controllori, cosa che comporta un ridisegno sia hardware che software del sistema di
stabilizzazione verticale. Tale sistema farà parte del progetto di aggiornamento e mi-
Le principali fonti di rumore al JET derivano dai disturbi causati dagli alimentatori,
quelli posti all’esterno della camera da vuoto (in quanto non schermati dalle strutture
passive).
Analisi effettuate azionando gli attuatori non in presenza di plasma hanno mo-
strato che i circuiti che disturbano maggiormente i sensori, soprattutto nella banda di
frequenza attorno i 300 Hz, sono il circuito di sbilanciamento e FRFA, e le sonde ma-
8
In particolare il controllore di forma lavora a frequenze un’ordine di grandezza più piccole rispetto
quelle del sistema di stabilizzazione verticale.
31
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
gnetiche che registrano più rumore sono i saddle loop 1 e 14, e successivamente, una
volta che il campo magnetico generato dai disturbi è riuscito a penetrare le strutture
Si noti che attualmente, per quanto il rumore sia abbastanza forte e facilmente
misurabile, nessun tipo di filtro, sia esso analogico o digitale, è attivo al JET: ciò è
dovuto al fatto che l’attuale semplice sistema di controllo riesce comunque a svolgere
Uno dei principali problemi legati alle misurazioni magnetiche della posizione del pla-
sma derivano dai cosiddetti modi MHD (MHD modes, dove MHD sta per “magnetoi-
(detti N modes) e toroidale (M modes): mentre i primi causano deformazioni nel pla-
Gli N modes (cosı̀ come gli M ) sono caratterizzati da un numero che identifica la
loro armonica rispetto ad una decomposizione di Fourier spaziale9 (figura 2.10). Tali
32
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
0.1 0.1
0.05 0
0 −0.1
1 1
1 1
0 0 0 0
−1 −1 −1 −1
0.1 0.1
0 0
−0.1 −0.1
1 1
1 1
0 0 0 0
−1 −1 −1 −1
Uno spostamento dal centro verticale della camera, l’unico d’interesse per la sta-
gli unici che possono influenzare pesantemente le misure magnetiche del JET sono
stati visti essere quelli con N minore di 3, e di conseguenza sono gli unici a venir
considerati.
Come si può notare dal suo andamento, un N mode può profondamente falsare
avrebbe l’effetto di vedere, a valle dei sensori, un plasma oscillante attorno al centro
della camera, mentre in realtà il plasma non si è mosso dal suo punto di equilibrio.
33
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
continui (ed inutili) switch per inseguire il non esistente spostamento, fino a portarlo
mente l’influenza dei modi sulla misura [16]. Si noti, però, che la soppressione di tali
modi non è totale, giustificando quindi l’esistenza della parte adattativa del control-
2.6.5 ELM
Gli ELM (o Edge Localised Modes) sono delle instabilità che si verificano solo nel mo-
mento in cui si porti la macchina a lavorare in H-mode. In tale modalità viene infatti a
crearsi una sorta di barriera al bordo del plasma (ETB, Edge Transport Barrier ) che
macchina.
Gli ELM derivano dal collasso di tale barriera esterna, e si manifestano come eru-
zioni di plasma che, andando a colpire la parete della camera, più fredda, causano la
Un ELM causa un totale blackout dei circuiti magnetici, che vengono pratica-
34
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
Sawteeth
Edge Localized Modes
(ELMs)
L-mode
Edge Transport
Barrier (ETB)
JG03.35-27c
Pedestal (H-mode)
0 1
Normalised radius r/a
escursioni (ovviamente non reali) della posizione verticale del plasma e il conseguen-
Non essendo ancora conosciuta una tecnica per limitare tale problema, si è visto
spegnere il controllore per qualche millisecondo, lasciando che il plasma scarichi l’e-
nergia in eccesso in evoluzione libera, per poi ritornare in una zona controllabile. Tale
tecnica, tuttavia, risulta essere altamente empirica, e proprio per questa sua caratteri-
stica non utilizzabile in situazioni estreme, dove una perdita di controllo verticale, per
quanto breve, potrebbe portare a grandi disruzioni e addirittura danni alla macchina.
Un’altra tecnica in fase di sperimentazione è quella di limitare gli ELM più grandi
35
CAP. 2 La stabilizzazione verticale 2.6 Problematiche di controllo
usando il Kick Controller. Pur avendo ottenuto buoni risultati, tale tecnica non è
ancora “canonizzata”, e lo studio del controllo degli ELM è ancora un campo aperto.
36
Capitolo 3
3.1 Introduzione
Una delle prime domande che potrebbero sorgere considerando il lavoro svolto riguar-
da, senza dubbio, le motivazioni dietro lo spendere tempo e risorse per effettuare il
che rendono Linux-RTAI decisamente appetibile per un impiego pratico, sia esso nel
37
CAP. 3 Scrittura e porting del sistema di controllo 3.1 Introduzione
VxWorks, questa voce risulta sicuramente una delle più interessanti dal punto
di vista industriale;
nità piuttosto ampia di programmatori. Ciò implica che eventuali bug ri-
rese pubbliche, senza dover attendere il classico ciclo di rilascio dei software
closed-source;
fa uso di RTAI usando l’ottimo compilatore della GNU2 chiamato gcc, anch’esso
portabile3 ;
38
CAP. 3 Scrittura e porting del sistema di controllo 3.1 Introduzione
patch;
• Facilità di sviluppo. Essendo nulla più che una modifica al kernel standard,
RTAI permette l’uso di tutti i software che funzionano normalmente sotto Linux,
ivi compresi ambienti grafici quali Gnome o KDE, e strumenti di sviluppo quali
solo negli istanti di tempo in cui la CPU non è impegnata ad eseguire codice
realtime);
• Sorgenti liberi. La disponibilità dei sorgenti del kernel Linux e di RTAI rende
funzionamento5 .
39
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
campo della ricerca, rappresenta un notevole passo in avanti, verso un futuro in cui
della conoscenza, evitando perdite di tempo per ripercorrere i passi già compiuti da
altri, e slegandosi inoltre dai vincoli imposti dalle grandi multinazionali, siano esse
non è di certo un compito banale: per quanto gli algoritmi illustrati nel capitolo
e software capace delle prestazioni necessarie, ma che sia al contempo stabile, robusta,
nel modo più astratto possibile, delegando il compito di interfacciarsi con l’hardware
un’architettura all’altra6 .
Dal punto di vista controllistico, inoltre, uno dei punti di forza di questa libreria
6
In realtà la BaseLib2 è una libreria estremamente complessa che fornisce decine di funzionalità
aggiuntive al C++, arrivando anche a stravolgerne il funzionamento. Per maggiori dettagli ed una
visione d’insieme di questa libreria si rimanda all’appendice apposita.
40
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
3.2.1 Le GAM
I “blocchi di codice” denominati GAM (General Application Module) sono dei sem-
plici oggetti capaci di comunicare tra loro attraverso un database di segnali (detto
DDB, Dynamic Data Buffer ). Le GAM scelte per svolgere un dato compito vengono
eseguite da un esecutore realtime una dopo l’altra: ciascuna di esse leggerà i segnali
di interesse dal DDB, effettuerà le operazioni che le competono, e quindi salverà i suoi
segnali di uscita. Si noti come tale sistema sia concettualmente estremamente simile
classe astratta GAM, fornita dalla BaseLib2, della quale reimplementano due funzioni
• Execute(), che contiene il codice vero e proprio della GAM, eventualmente spe-
il diverso comportamento che una GAM che si occupa del salvataggio dati su
hard disk deve avere nel caso di idle o nel caso di esperimento in corso).
della comunicazione con l’hardware vero e proprio, facendo da interfaccia tra la logica
41
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
C u
P y
v
H
read(v)
GAM
write(u) C
D
read(u)
GAM
D write(y) P
TIME
B read(y)
GAM
write(v) H
la scrittura di segnali come fosse una normale parte del processo di elaborazione del
42
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
GAM distinte: una che si occupa di effettuare il controllo vero e proprio, nella parte
ControlGAM
La parte che effettua il controllo vero e proprio è riportata nei listati 3.1 e 3.28 .
prensibile, è da notare l’estrema semplicità con cui è possibile implementare una GAM.
Il codice verifica la presenza dei parametri necessari nel CDB fornito, crea le interfacce
8
Si noti che il codice qui riportato non è identico al codice effettivamente implementato: per motii
di spazio e semplicità sono state omesse tutte le istruzioni relative al debug ed al logging degli errori,
ed i commenti in formato Doxygen per la generazione automatica della documentazione.
9
Questa funzione non fa nient’altro che configurare i segnali leggendoli direttamente dal CDB se
scritti in un formato standard.
43
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
37 return True;
38 }
Il cuore del controllore, la funzione Execute(), è invece riportato nel listato 3.2. Le
44
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
6 case GAMOnline : {
7 // Read Input
8 float ∗data = (float ∗)input−>Buffer();
9 secTimeBase = data[0];
10 vGainProportionalityBase = data[1];
11 usecTime = ((int∗)data)[2];
12
13 // Waveform generation
14 GenerateWaveformControl(secTimeBase, waveStruct);
15 GenerateLookupTable(vGainProportionalityBase, waveStruct);
16
17 // Control
18 PerformControl(usecTime, waveStruct, waveOutput);
19
20 // Write Output
21 float ∗out = (float ∗)output−>Buffer();
22 out[0] = (−1)∗(waveOutput.velocityLoopGainOutput);
23 out[1] = waveOutput.frfaVoltageReferenceWaveform;
24 out[2] = waveOutput.frfaFrequency;
25 out[3] = waveOutput.frfaCommandVoltage;
26 output−>Write();
27 } break;
28
29 case GAMPrepulse :{
30 // Init parameter waveforms before pulse
31 waveStruct.InitControlWaveStruct();
32 waveOutput.InitOutputReferenceStruct();
33 waveStructMeasured.InitWaveformControlMeasuredDataStruct();
34 waveStructTrue.InitWaveformControlTrueDataStruct();
35 InitPulseWaveControlGenerator();
36 InitPulseControl();
37 }
38 case GAMOffline :
39 case GAMSafety :{
40 } break;
41 }
42 return True;
43 }
45
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
In particolare, nella fase di GAMOnline, le righe dalla 7 alla 11 caricano nelle varia-
bili locali della classe il contenuto del DDB, le righe 14 e 15 caricano nella struttura
trollo vero e proprio (incapsulato nella funzione PerformControl(), che a sua volta
richiama altre funzioni per effettuare i calcoli necessari, come riportato nel capitolo
sul DDB.
le linee dalla 13 alla 14 effettuano dei controlli sull’attuale condizione della macchina
a stati che segnala l’andamento dell’esperimento per attuare controlli particolari nelle
FRFA e gestire il cambio di segno del feedback nel passaggio tra plasma circolare
e plasma in H-mode; le righe 20-25 sulla base della frequenza di switch di FRFA
illustrata nel capitolo precedente), controllo che viene materialmente calcolato nelle
seguenti righe 28-30. Infine le ultime righe riempiono la struttura per l’output dei
46
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
37 return TRUE;
38 }
47
CAP. 3 Scrittura e porting del sistema di controllo 3.2 Implementazione del controllo
KickControlGAM
funzionamento di massima.
disattivare il Kick Controller sulla base della configurazione dello stesso. Qualora il
FRFA effettuate dal Kick Controller, e le salvano materialmente nella variabile fornita
al DDB10 .
10
Le ultime due funzioni sono, in verità, composte da poche righe di codice. Tale codice non è
stato inserito direttamente nel corpo di PerformKickControl() al fine di permettere una maggiore
modularità e comprensibilità del codice nel caso di modifiche future.
48
CAP. 3 Scrittura e porting del sistema di controllo 3.3 Il sistema RT del JET: MARTe
verticale del JET: numerosi altri elementi hanno bisogno di essere controllati via soft-
all’impulso, impulso, problemi tecnici, nascita e morte del plasma...), la ricezione delle
esecuzione in realtime...
BaseLib2.
MARTe è composto da una serie di classi che comunicano tra loro attraverso mes-
saggi, ciascuna con un compito specifico e ben determinato. Un grafico che illustra il
(Realime Thread Pool in figura), il quale a sua volta manda quanto ricevuto ad ogni
49
CAP. 3 Scrittura e porting del sistema di controllo 3.3 Il sistema RT del JET: MARTe
Ogni realtime thread è composto della serie di GAM ed I/O GAM che lo carat-
conversione digitale-analogico). Si noti che ogni oggetto hardware non può essere
“collegato” a più di una I/O GAM, al fine di evitare conflitti tra thread realtime.
50
CAP. 3 Scrittura e porting del sistema di controllo 3.4 Scelta del sistema operativo realtime
Finita questa operazione si è passati al porting del sistema sotto un ambiente Li-
stata quella relativa a quale patch del kernel adottare tra le varie proposte, in parti-
recchio codice per garantire un facile porting da altri sistemi operativi realtime13 ,
cosa che comporta, ovviamente, una riduzione delle prestazioni, fondamentali per la
stabilizzazione verticale.
12
Si noti che le due patch, seppure estremamente diverse come obiettivi, possiedono una base di
codice comune: Xenomai è infatti nato da un branch di RTAI.
13
Xenomai, infatti, introduce il concetto di maschera. Una maschera, nel gergo di Xenomai, è
un’interfaccia che “emula” il set di istruzioni di un altro sistema operativo realtime.
51
CAP. 3 Scrittura e porting del sistema di controllo 3.5 Linux-RTAI
3.5 Linux-RTAI
che non lo rendono ideale per un uso realtime, tra le quali [15]:
ne effettui una, un eventuale ulteriore processo con priorità realtime non po-
meno importanti;
• Operazioni batch, eseguite dal kernel Linux per “riorganizzare” l’uso delle
Col passare del tempo, soprattutto assecondando le richieste degli utilizzatori de-
sktop, numerose migliorie sono state apportate al kernel in modo da renderlo, quan-
52
CAP. 3 Scrittura e porting del sistema di controllo 3.5 Linux-RTAI
non fondamentali. Altro punto di sviluppo è stato quello del miglioramento dell’algo-
Queste evoluzioni nel codice del kernel hanno reso Linux un sistema operativo
pronto per il desktop, capace di riprodurre filmati e audio senza evidenti interruzioni,
computer moderno. Tuttavia tali miglioramenti non sono risultati essere sufficienti
per un uso industriale, più che per la velocità del sistema operativo in sé, quanto per
l’imprevedibilità dei tempi di esecuzione qualora il sistema venga messo sotto stress
(per esempio con un uso intensivo della rete). Per questo motivo numerosi studi sono
stati effettuati sulle possibili patch da applicare al kernel per migliorarne il compor-
tamento e renderlo hard-realtime. Tra di queste una delle migliori è, per l’appunto,
di Milano (DIAPM).
standard. Lo scheduler di Linux si trova a dover gestire sia i thread realtime che quelli
non realtime; da ciò derivano i problemi illustrati nel paragrafo precedente: qualora
un thread non realtime esegua istruzioni bloccanti, il thread realtime non potrà essere
53
CAP. 3 Scrittura e porting del sistema di controllo 3.5 Linux-RTAI
User Space
RT Non-RT Non-RT
Proc Proc Proc
System Process
Calls Scheduling
Kernel Space
RT Non-RT Non-RT
Task Task Task
Task Scheduling
HW Raw
Interrupts Data
Hardware
La patch RTAI cerca di risolvere questo problema utilizzando una strategia intel-
di permettere a più sistemi operativi di convivere su una stessa macchina, venendo ese-
in modo che esso intercetti le chiamate di sistema ed esegua i task realtime, assegnan-
14
ADEOS/iPipe funziona in modo simile ad una virtual machine (quale VMWare), ma usando
un principio di base diverso: laddove una virtual machine “sfrutta” il sistema operativo ospitante
per emularne un altro (ospite), fornendo a quest’ultimo periferiche hardware “virtuali” che si inter-
facciano a quelle reali, ADEOS/iPipe pone tutti i sistemi operativi sullo stesso piano, mettendoli
in comunicazione in sequenza con l’hardware reale della macchina. Tale tecnica, con l’avvento dei
nuovi processori dotati di un set di istruzioni dedicato specificamente alla virtualizzazione, è molto
promettente, specie per quanto riguarda le prestazioni.
54
CAP. 3 Scrittura e porting del sistema di controllo 3.5 Linux-RTAI
do una priorità bassa al kernel Linux. In questo modo i processi non realtime (che
“vivono” nello spazio del kernel Linux) non hanno possibilità di bloccare quelli real-
rimarrà infatti bloccato in coda nel livello di ADEOS/RTHAL, in attesa che la CPU
RTAI’s
Userspace Linux
Process User Space
(LXRT)
RTAI’s
Linux Kernel
Kernel Thread
ADEOS / RTHAL
HARDWARE
cessore, come quello previsto per l’hardware della stabilizzazione verticale; in parti-
55
CAP. 3 Scrittura e porting del sistema di controllo 3.5 Linux-RTAI
Per quanto riguarda il kernel Linux, è possibile specificare sulla riga di comando
del bootloader l’opzione isolcpus, indicando quali processori lo scheduler del kernel
Linux dovrà ignorare15 . Per ciò che concerne RTAI, invece, è possibile specificare con
Utilizzando queste due tecniche si è ottenuto che il kernel Linux lavori solo sul
primo processore della macchina, mentre i thread realtime vengono assegnati ai core
rimanenti. L’idea di fondo è quella di far sı̀ che ogni processore gestisca al più un
Si noti che allo stato attuale la macchina per la stabilizzazione verticale del plasma
dedicati ai processi non critici (ovverosia quelli dipendenti dal kernel Linux, quali il
logging, la gestione della rete, eccetera), e solo uno all’esecuzione esclusiva realtime.
estensioni di RTAI chiamate LXRT, che consentono di rendere realtime thread creati
56
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
per il debug del codice, quali gdb o ddd, ed il non dover riavviare la macchina ad ogni
crash dell’applicazione.
le prestazioni massime. A tal proposito si veda il grafico di figura 3.5 dove sono ri-
portati gli andamenti di latenza media e jitter16 nel caso di thread in kernelspace e
latenza dello scheduler standard rispetto a quello di LXRT, specie se confrontato con
Inoltre si osservi anche come la piattaforma Intel abbia dimostrato essere decisa-
mente più adatta ad applicazioni realtime rispetto a quella AMD: da questa considera-
3.6 FCOMM
Una volta scelto di lavorare in kernelspace, uno dei principali problemi da affrontare
è stato quello di trovare un modo per effettuare chiamate di sistema (quali lettura e
scrittura su disco, ascolto di socket e similari) da parte dei kernel thread realtime. Si
kernel” sono diverse da quelle userspace (la glibc 17 effettua lavoro intermedio per tra-
16
Per latenza e jitter si intendono rispettivamente il ritardo tra l’istante in cui si ha un interrupt
realtime e l’effettiva esecuzione del codice, e l’ampiezza della variazione della latenza nel tempo. In
un certo senso la latenza misura le prestazioni di un sistema realtime, mentre il jitter quanto esso sia
“deterministico”. Segue che in genere si preferisce, dovendo raggiungere un compromesso, un jitter
trascurabile ad una latenza bassa.
17
GNU C Library, la libreria standard C rilasciata dal progetto GNU.
57
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
0
RTAI-SCHED
RTAI-LXRT
Configuration
scritti al JET per utilizzare la diversa sintassi (cosa impensabile); inoltre, cosa ancora
più grave, essendo lo scheduler realtime slegato da quello di Linux, qualsiasi chiamata
Una prima ipotesi è stata quella di riscrivere parte del codice del kernel Linux
per quanto estremamente promettente dal punto di vista delle prestazioni (in quanto
non ci sarebbe stata la necessità di entrare ed uscire dal contesto del kernel come viene
ora fatto), questo avrebbe portato alla necessità di gestire un kernel personalizzato,
58
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
rigira al secondo che, composto da una serie di thread userspace, le esegue ritornando
il risultato della chiamata (figura 3.6). Un semaforo fa sı̀ che il modulo kernel attenda
Numerosi altri semafori nel codice di FCOMM, inoltre, garantiscono che esso sia
thread-safe, ovvero capace di lavorare con più thread realtime, cosa fondamentale da-
Dal punto di vista dell’usufruitore, FCOMM è totalmente trasparente: una volta in-
clusi nel codice i file che rimappano le chiamate di sistema, basterà effettuare tali
59
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
Internamente il modulo kernel non fa nient’altro che copiare i dati passati alla chi-
mata di sistema nell’area di memoria condivisa tra la parte kernel e user di FCOMM, e
quindi invocare la funzione call remote function (listato 3.5) indicando quale chia-
mata di sistema si vuole eseguire (l’intero fun id, i cui valori possibili sono definiti
dimensione (par ids e par size rispettivamente). Una volta completata la chiama-
resta bloccato finché la chiamata di sistema non è eseguita dal kernel Linux (rigorosamente non
realtime). Di conseguenza è necessario ricordare che eventuali thread con funzioni di controllore non
devono assolutamente compiere chiamate di questo tipo!
60
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
29 if(mem−>finished != 1) {
30 rt sem wait(fun caller kernel sem);
31 }
32
61
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
(fun caller mem block sem) al fine di evitare che più thread scrivano contempora-
gramma di flusso che illustra il comportamento della funzione è riportato in figura 3.7.
non appena viene richiesto di eseguire una chiamata di sistema con la già citata
call remote function, delega al primo thread disponibile l’esecuzione della medesi-
ma.
malmente in attesa di richieste di esecuzione, non appena arriva una segnalazione sul
funzione da chiamare dalla zona di memoria condivisa con il kernel, eseguire la funzio-
62
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
63
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
64
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
pato per risolvere ulteriori problemi relativi all’esecuzione della BaseLib2 sotto RTAI,
di effettuare dynamic cast tra i vari moduli kernel. Inoltre, al fine di rendere il
più agevole possibile l’uso di queste due ultime funzionalità in kernelspace, il codice
blocchi totali di sistema ad ogni minimo errore (cosa che ha messo a dura prova anche
modulo, un certo spazio di heap, spazio, ovviamente, condiviso tra tutti i thread.
65
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
ria destinata ai dati di un altro thread, causando errori imprevedibili e per giunta
volta in volta vari semafori atti a proteggere la memoria finché un thread non avesse
scrivere alcuni programmi di test per “stressare” sempre di più il meccanismo di sin-
cronizzazione, finché non si è stati sufficientemente sicuri di aver eliminato ogni errore.
figurata per un utilizzo “normale” del sistema: controllore in C che gira come modulo
kernel. L’enorme stress e quantitativo di oggetti RTAI19 generati dalla BaseLib2, tut-
analisi del codice (verificando anche nella versione Linux non-RTAI della BaseLib2 )
si è capito che il problema era proprio il limite imposto sul numero di oggetti RTAI
creabili. Il test principale della BaseLib2, infatti, instanzia numerosi oggetti, ciascuno
dei quali fa largo uso di semafori e mutex: al momento dell’esecuzione del test l’ap-
blocco. Tale problema è stato risolto aumentando la relativa voce nella configurazione
Un ulteriore problema è sorto in un test che faceva uso delle operazioni atomiche
19
Dove per “oggetto RTAI” si intendono, fondamentalmente, le primitive di sincronizzazione, quali
semafori e mutex.
66
CAP. 3 Scrittura e porting del sistema di controllo 3.6 FCOMM
fornite dalla BaseLib2 : poiché tali operazioni (incrementi e decrementi) vengono ese-
guite senza mai rilasciare il processore (al fine di non poter essere interrotte -da cui il
nome “atomiche”), qualora eseguite nello stesso processore del test portavano ad un
eseguirle).
Pur non esistendo una vera e propria soluzione a questo problema (in quanto di-
pendente dal funzionamento delle operazioni atomiche e di RTAI), la scoperta del bug
gli altri a RTAI. Questo ha indirettamente risolto anche il problema delle operazioni
operazioni si trovano su due processori distinti, non viene più a crearsi la situazione
semplice: usando in parte i suggerimenti trovati in rete di chi aveva già effettuato il
Il problema principale è nato relativamente agli oggetti statici (i.e. quelli non
Ciò causava la non corretta inizializzazione (seguita da inevitabile crash) di molti og-
getti della BaseLib2. Il problema è stato risolto con un semplice hack: due funzioni,
67
CAP. 3 Scrittura e porting del sistema di controllo 3.7 RTAIConsole
chiamate init all constructors e delete all deconstructors, ottengono una li-
sequenza. La soluzione del problema, quindi, si limita al dover lanciare tali funzioni
Ultimo problema affrontato, infine, è stato quello di permettere dynamic cast tra
diversi moduli del kernel, altra cosa fondamentale per il buon funzionamento del-
le chiamate a dynamic cast fallivano. La causa è stata infine individuata nel fatto
che, normalmente, la glibc effettua i cast dinamici confrontando puntatori e non com-
parando le stringhe contenenti il nome della classe vere e proprie. Poiché i moduli
kernel vengono visti come “eseguibili differenti” e non come librerie, il confronto tra
C++ in kernelspace in modo da eseguire la più lenta comparazione tra stringhe, im-
3.7 RTAIConsole
Per facilitare l’utilizzo di RTAI è stata sviluppata una shell, denominata RTAICon-
sole, sulla falsariga di quella già esistente per VxWorks. Tale console si compone di
68
CAP. 3 Scrittura e porting del sistema di controllo 3.7 RTAIConsole
figura 3.9.
Uno dei compiti principali della shell è quello, in fase di caricamento di un modulo,
Per ottenere gli indirizzi in kernelspace di una funzione, RTAIConsole legge il file
tali funzioni.
in VxWorks, dove non esiste lo spazio utente protetto), permettendo di eseguire sia
funzioni kernel che programmi userspace, e garantendo un supporto basilare per l’e-
69
CAP. 3 Scrittura e porting del sistema di controllo 3.7 RTAIConsole
secuzione di script con sintassi bash-like, utili per velocizzare operazioni ripetitive
classi C++ in modo da far sı̀ che la shell possa interagire direttamente, anche per
quindi una perfetta piattaforma di test per sistemi di controllo sotto RTAI.
20
CINT, o C INTerpreter, è un progetto sviluppato al CERN. Maggiori informazioni sono reperibili
sul sito ufficiale: http://root.cern.ch/twiki/bin/view/ROOT/CINT.
70
Capitolo 4
Risultati ottenuti
Il software è costituito da vari moduli kernel, ciascuno dei quali fornisce una par-
nucleo centrale sulla quale si basa il controllore usato per la stabilizzazione verticale
semplice.
Assieme al pacchetto di software “di base”, altre utility sono state sviluppate, in
particolare una shell che permette di manipolare in maniera agevole i moduli usati,
anche grazie alla capacità di eseguire dei file di script creati ad hoc per evitare di
71
CAP. 4 Risultati ottenuti
Inoltre numerosi applicativi di test sono stati scritti da zero o portati sulla nuova
cui esso potesse girare. Tale sistema, costruito a partire da una normale installazione
di Gentoo da “stage 1”, è stato progettato in modo da essere il più minimale possibile:
il kernel è stato ridotto all’osso, eliminando tutti i moduli non necessari e compilando
file di manualistica e documentazione sono stati rimossi, cosı̀ come i software non
Accanto a tale sistema è stata anche sviluppata una distribuzione Live, dotata
compito di facilitare il testing su varie macchine del codice scritto facendo uso della
stabilizzazione verticale dal punto di vista software, documentazione che prima dell’i-
nizio della scrittura di questa Tesi era praticamente nulla o sparsa su vari testi: si è
72
CAP. 4 Risultati ottenuti
Contributi da questo lavoro di Tesi sono stati usati per la preparazione dell’articolo
“Linux RTAI Real Time Framework for Fusion Devices”, approvato per la conferenza
73
Capitolo 5
Questa Tesi, interamente svolta presso gli uffici del JET, a Culham (Oxford), è stata
finanziata dalla borsa di studio fornita dal Programma “Leonardo da Vinci”, della
stabilizzazione verticale del plasma, problema che resta, ad oggi, ancora un campo
rivelato essere la soluzione definitiva, cosa che, specie in vista del futuro ITER (in cui
una perdita di stabilità verticale potrebbe causare danni irreversibili alla macchina),
Assieme alla ricerca di un metodo per garantire misure accurate e ampi margini
di stabilità, di pari passo procede la ricerca nel campo software, al fine di garantire
tempi di calcolo del controllo sempre minori, fondamentali data la velocità del modo
verticale instabile.
74
CAP. 5 Conclusioni e sviluppi futuri
stabilizzazione verticale del plasma, soprattutto per quanto riguarda il porting dalla
libero ed open source Linux, modificato con le patch RTAI al fine di garantirne le
prestazioni hard-realtime.
e ad ampio spettro del problema della stabilizzazione verticale, indicando (dove ne-
Il framework sviluppato, grazie alla sua semplicità d’uso, si propone come otti-
ma base di partenza per la conversione alla struttura a GAM dei numerosi controlli
zioni di conflitto tra i due sistemi. Questa idea è in fase di studio e dovrebbe essere
Altro elemento da migliorare sarà quello relativo all’interfaccia con l’utente del
pagine web, mentre per un accesso più a basso livello ci si propone di migliorare il
Da un punto di vista controllistico, sono iniziati degli studi sulle possibilità di mi-
75
CAP. 5 Conclusioni e sviluppi futuri
gliorare il ciclo di controllo, soprattutto per quanto riguarda il problema della quan-
Le possibilità di sviluppo future, sia per quanto concerne il software, sia riguardo il
miglioramento del controllore, saranno studiate ed implementate nel corso dei prossimi
sei mesi, durante i quali si tornerà a Culham per proseguire il lavoro al JET.
76
Appendices
77
Appendice A
La BaseLib2
In questa appendice vengono riassunti i principi di funzionamento
della BaseLib2, la libreria che si occupa di fornire i servizi di base
ai software sviluppati al JET, e le motivazioni che hanno spinto a
svilupparla.
A.1 Introduzione
gior ragione del Tokamak più grande attualmente esistente) risulta essere un compito
deve ovviamente essere failsafe 1 e garantire il minor tempo di non funzionamento pos-
obbligano ad una completa revisione del software per adattarlo alle nuove specifiche,
1
Per failsafe generalmente si intende un sistema che garantisca, in caso di errore, di causare danni
minimi. In questo caso specifico ci si riferisce alla necessità di avere software che in caso di problemi
non causi un crash di sistema.
78
APP. A La BaseLib2 A.2 Divisione in livelli
La BaseLib2 è una libreria scritta interamente in C++ (fatta eccezione per alcune
cui costruire programmi nel modo il più semplice e robusto possibile, favorendo la
Come precedentemente sottolineato, uno degli obiettivi della BaseLib2 è quello di per-
mettere una facile portabilità del software scritto con essa da un’architettura all’altra,
azzerando il numero di righe di codice da modificare. A tal fine la libreria stessa deve
essere agevolmente compilabile su più sistemi operativi. Essa è stata quindi struttu-
rata in sette livelli (la cui struttura è riportata in figura A.1), dei quali solo il primo
(Level0 ) contiene codice fortemente dipendente dal sistema operativo, e che quindi
necessita di essere riscritto ogni volta che si desideri effettuare il porting della libreria.
Ogni livello è stato pensato per utilizzare solamente i livelli a lui sottostanti. In
veloce (è sufficiente compilare uno dopo l’altro i vari livelli, e quindi effettuare il
linking della libreria completa). Inoltre ciò ha permesso anche una semplificazione
della prima fase di debug della BaseLib2 : una volta testato e funzionante un livello,
79
APP. A La BaseLib2 A.2 Divisione in livelli
O.S.
(Linux,RTAI,Win32..)
LEVEL 0
(+ LEVEL RTAI C++)
(console, mutexes, atomic ops, streams...)
LEVEL 1
(named objects, garbage collection...)
LEVEL 2
(files, advanced streams...)
LEVEL 3
(CDB, Lexical Analyzer...)
LEVEL 4
(HTTP server...)
LEVEL 5
(GAMs & DDB, Message Handling, State Machine)
LEVEL 6
(Matrix operations, filters...)
solamente a quest’ultimo2 .
Ai sette livelli di cui sopra ne va aggiunto un ottavo nella versione delle BaseLib2
per Linux-RTAI: ciò è giustificato dalla maggiore complessità del porting sotto tale
80
APP. A La BaseLib2 A.3 Le classi fondamentali
ve “portarsi dietro” tutto il bagaglio di cast dinamico delle classi e delle funzionalità
totalmente lo stile di programmazione “classico” del C++. Tuttavia, una volta acqui-
sita familiarità con i suoi meccanismi, ci si rende facilmente conto della mole di lavoro
sezione è fornire una visione d’insieme sulle “colonne portanti” di questa monolitica
libreria software.
Una parte (attorno al 20 %) degli oggetti della BaseLib2 ereditano in qualche modo
dalla classe Object, implementata nel secondo livello (Level1 ). Il compito assolto da
tale classe (oltre quello di garantire un padre comune a vari oggetti, al fine di poter
trospezione alle classi, dove per introspezione si intende la capacità di una classe di
81
APP. A La BaseLib2 A.3 Le classi fondamentali
lativi nomi, è uno dei maggiori punti di forza della BaseLib2 in quanto permette la
creazione di oggetti per nome. È possibile, cioè, creare a runtime un nuovo oggetto
Un evidente problema legato alla creazione di oggetti a runtime è quello della lo-
re, di generare dei problemi di memoria man mano che essa si riempie di oggetti
“spazzatura”.
Uno dei principi fondamentali della BaseLib2 è quello di limitare gli “errori uma-
prestito da Java) che si preoccupa al posto dell’utente di cancellare gli oggetti non
più usati.
GarbageCollectable. Questa classe non fa altro che aggiungere un sistema che con-
si”, liberando memoria. Si noti come tale sistema sia estremamente efficace dal punto
di vista delle prestazioni: l’unico codice aggiunto al proprio oggetto è in pratica quello
82
APP. A La BaseLib2 A.3 Le classi fondamentali
Una specializzazione della classe Object è quella dei Named Object, concetto preso
ad ogni sua istanza la proprietà di avere un “nome proprio”, tramite il quale possa
erediti da essa si vedrà garantite tutte le caratteristiche di cui sopra (si confronti la
Per finire la panoramica sugli oggetti fondamentali che compongono la BaseLib2 ri-
ed un contenitore di riferimenti.
83
APP. A La BaseLib2 A.3 Le classi fondamentali
ti, Server e WebPage, rappresentanti rispettivamente il server stesso ed una singola pa-
gendo (i.e. “creando per nome”) oggetti di tipo WebPage e inserendoli nel contenitore
Server per pagine di primo livello, o in un’altra WebPage per creare collegamenti tra
SERVER
Una volta generata questa struttura, l’oggetto Server non deve fare altro che
spostarsi tra le varie pagine, secondo le richieste effettuate dal browser, “navigando”
Il grafico di collaborazione tra i vari oggetti citati sinora è riportato in figura A.3, con
4
Un sistema simile è effettivamente utilizzato dal server web fornito dalla BaseLib2.
84
objectPointer
Object GarbageCollectable GCReference
APP. A La BaseLib2
GCNamedObject LinkedListable
gc
llhroot
next
GCReferenceContainer GCRCItem
list
Figura A.3: Schema UML degli oggetti di base della BaseLib2. Le frecce con trato continuo indicano ereditarietà, quelle
tratteggiate l’utilizzo (in corsivo è specificato il nome della variabile usata). I rettangoli con spessore doppio indicano le
classi più importanti.
A.3 Le classi fondamentali
85
APP. A La BaseLib2 A.3 Le classi fondamentali
Come visto sinora, sfruttando i potenti meccanismi di creazione per nome, garbage
di questa idea.
relative proprietà. Un esempio di tale sintassi è mostrato nel listato A.1. Si osservi
come la sintassi usata sia di tipo “C-like”, dove i parametri di ogni elemento sono
In particolare si notino, all’interno del codice, le varie occorrenze della parola chia-
ve Class, che indica al CDB il nome della classe di cui si desidera creare un’istanza, e
la configurazione della classe stessa, che avviene all’interno delle due parentesi graffe
nome stesso, una macchina a stati) è programmata in modo da prevedere più stati
(StateMachineState), ciascuno dei quali può a sua volta essere configurato per pre-
stream, sia esso una stringa in memoria, un file o i dati provenienti da un socket.
86
APP. A La BaseLib2 A.3 Le classi fondamentali
87
APP. A La BaseLib2 A.4 Comunicazione tra oggetti
Uno dei principi portanti della programmazione orientata agli oggetti è la possibilità di
interazione di più oggetti tra loro. Nel C++ classico questo avviene tramite l’utilizzo
si da Smalltalk. Tale tecnica consiste nel permettere agli oggetti di comunicare tra di
ProcessMessage
B
Message
Handler
MessageQueue
Thread
SendMessage ==Message 1== HandleMessage
A ==Message 2==
...
==Message N==
Figura A.4: Schema di funzionamento della gestione dei messaggi nelle BaseLib2.
Affinché un oggetto possa far uso di questo meccanismo, esso deve ereditare dalla
88
APP. A La BaseLib2 A.4 Comunicazione tra oggetti
89
Appendice B
B.1 Introduzione
La scelta della distribuzione Linux da usare per far girare il sistema di controllo del
JET è stata piuttosto importante. Tra le varie distribuzioni candidate (tra cui la
celebre Fedora Core), si è infine scelto di usare Gentoo a causa non solo della sua
munità. Inoltre il fatto di poter preparare il sistema partendo quasi da zero (o “da
90
APP. B Distribuzione Linux usata al JET B.2 Installazione di Gentoo
salienti e le difficoltà incontrate, delle guide pubblicate sul wiki mantenuto dal gruppo
http://fusion-rt.sourceforge.net/wiki/Installing_Gentoo_from_Stage1
http://fusion-rt.sourceforge.net/wiki/Creating_a_Gentoo_LiveCD/LiveUSB
Per la sua natura “tecnica”, Gentoo non prevede un installer grafico, lasciando
sistema.
Partizionamento
Il partizionamento del disco per l’installazione del sistema è stato effettuato, usando
il fatto di non dover installare un ambiente grafico) e una partizione di swap della
91
APP. B Distribuzione Linux usata al JET B.2 Installazione di Gentoo
sviluppo.
Il filesystem usato è l’ext3, sia per la sua diffusione e provata stabilità, sia per
lunga e laboriosa, sebbene favorita dall’uso di numerosi script costruiti ad hoc dal
team di sviluppo della distribuzione. La difficoltà del processo risulta essere ancora
maggiore a causa del fatto che, da qualche anno, tale forma di installazione non è
necessario procedere passo-passo, cercando nella rete informazioni sui passi più oscuri
e/o mancanti.
il file contenente lo stage 1 da uno dei numerosi mirror di Gentoo presenti in rete. A
della distribuzione (i.e. compilazione di GCC, perl e python, creazione dei file di
configurazione di base...).
sistema e ad aggiornare i file di base con un emerge --sync && emerge -uD world1 .
1
emerge è il comando che permette di lavorare con portage, il sistema di gestione pacchetti di
Gentoo, che automatizza il processo di scaricare dalla rete, compilare ed installare il software.
92
APP. B Distribuzione Linux usata al JET B.2 Installazione di Gentoo
La parte più complessa del lavoro è stata, senza dubbio alcuno, quella di configurare
il kernel della macchina. L’idea di base è stata quella di costruire un sistema il più
possibile snello, sia per garantire la massima efficienza, sia per eliminare quanto più
possibile codice “inutile” dalla memoria, al fine di limitare possibili conflitti tra i
A tal fine si è provveduto ad abilitare come elementi statici del kernel tutti e solo
i driver delle periferiche presenti effettivamente nella macchina, cosa che ha garantito
che è andata contro la portabilità del kernel stesso. Tuttavia si noti che, in effetti,
soggetta a frequenti cambiamenti, cambiamenti che, in ogni caso, non richiedono molto
più del cambiare alcune opzioni nella configurazione del kernel, e una ricompilazione
dello stesso.
Oltre a queste operazioni è stata anche applicata la patch RTAI in modo da otte-
Completamento dell’installazione
facilitare le operazioni da riga di comando (come VIM, per garantire delle funzionalià
93
APP. B Distribuzione Linux usata al JET B.3 Costruzione di un LiveCD/LiveUSB
tivo “portatile” con cui avviare la macchina in caso di problemi, facilitando di molto
operativo realtime “ufficiale” del JET: molte postazioni, infatti, richiedono software
funzionante in realtime pur non essendo “critiche” per il buon funzionamento della
macchina. Poter avviare tali macchine utilizzando un unico LiveCD uguale per tutti
94
APP. B Distribuzione Linux usata al JET B.4 Avvio del sistema da rete
Una volta costruita e compressa con SquashFS la directory contenente la “copia ri-
piuttosto semplice, consiste nel fornire a mkisofs, oltre ai fila da masterizzare sul
Viceversa, nel caso della LiveUSB, la procedura è stata leggermente più semplice:
poiché la penna USB viene vista da Linux come un vero e proprio hard disk, è stato
sufficiente installare su di essa grub. L’unico problema è stato causato dalla lentezza
con cui il kernel Linux riconosce le periferiche USB, lentezza che ha portato al dover
inserire artificialmente delle pause all’interno degli script di boot della LiveUSB per
L’ultimo passo nella preparazione del sistema è stato quello di effettuare il boot della
del kernel in un computer esterno alla sala macchine, col vantaggio di essere più facil-
95
APP. B Distribuzione Linux usata al JET B.4 Avvio del sistema da rete
Boot server IP
DHCP
Server
Kernel request (TFTP)
KERNEL IMAGE
PXE Client
Boot
Server
Tale sistema, fortunatamente già incorporato nella scheda di rete presente nella mac-
china, è illustrato nella figura B.1: PXE crea un ambiente di boot che, lanciando
richieste DHCP, ricerca un boot server da cui scaricare, via TFTP3 , l’immagine del
ciente far aggiungere alcune righe al file di configurazione del server DHCP affinché
indicare nei parametri del kernel dove trovare la partizione NFS da montare come
root.
3
TFTP è una versione “leggera” del classico protocollo FTP.
96
Appendice C
Specifiche hardware
C.1 Introduzione
La scelta della piattaforma hardware su cui far girare il controllore per la stabilizza-
zione verticale è, ovviamente, una delle più importanti e delicate. Ottenere un buon
soli 10 µs. Tale tempo di ritardo è dovuto fondamentalmente a due fattori, ovvero
possibilità di costruire sistemi multiprocessore. A tal fine si è scelto di far uso dello
97
APP. C Specifiche hardware C.2 Lo standard ATCA
standard ATCA.
tra gli elementi del crate (figura C.1), e il fatto di essere pensato per garantire un
e alla possibilità di inserire nello stesso crate il doppio delle schede necessarie, in
Lo standard ATCA definisce un crate di dimensioni ben precise (figure C.2 e C.3),
e una serie di interconnessioni, nel lato posteriore, seriali e con banda di un gigabit.
Il protocollo di comunicazione non è specificato a priori, e nel caso del JET si è scelto
98
APP. C Specifiche hardware C.4 Le schede DGP
Figura C.1: Schema delle connessioni interne al crate secondo lo standard ATCA.
dallo standard) collegata al crate ATCA attraverso un connettore PCI Express x16,
ed usa un processore standard x86, nel caso del JET un Intel Quad Core.
La cosa più evidente della soluzione proposta è il bassissimo costo derivante dal-
Processor ), ciascuna delle quali comprende porte I/O digitali e analogiche, un con-
trollore FPGA (Field-Programmable Gate Array), una porta per clock esterno e due
99
APP. C Specifiche hardware C.4 Le schede DGP
in ogni istante ai dati acquisiti da una qualsiasi altra scheda come fossero stati cat-
turati dalla stessa scheda dove l’unità risiede. Ciò permette un’esecuzione parallela
100
APP. C Specifiche hardware C.5 Prestazioni
C.5 Prestazioni
In particolare, proprio ai fini di quanto richiesto dal JET, sono stati pensati due
il secondo l’uso delle sole FPGA. I tempi calcolati sono risultati essere all’incirca pari,
rispettivamente, a 1.7µs e 0.7µs, indicando come effettivo collo di bottiglia del sistema
il canale PCI express. Si noti come l’accoppiata di una CPU veloce e dell’architettura
ATCA abbia buone possibilità di ridurre effettivamente il ritardo del loop di controllo
101
Elenco delle figure
del toro. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 Pesi per i vari sensori magnetici, come da modifica dopo l’inserimento
del divertore. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
102
ELENCO DELLE FIGURE ELENCO DELLE FIGURE
103
Bibliografia
[1] J. Wesson, The Science of Jet, JET Publication (Culham, Oxford), 2000.
[5] A. Pironti, M. Walker, Fusion, Tokamaks, and Plasma Control, IEEE Control
[7] M. Ariola, A. Pironti, Plasma Shape Control for the JET Tokamak, IEEE Control
Shape in Tokamaks, IEEE Control System Magazine, October 2005, pp. 76-91.
104
BIBLIOGRAFIA BIBLIOGRAFIA
[9] A. Pironti, M. Walker, Control of Tokamak Plasmas Part II, IEEE Control System
[11] F. Sartori, G. De Tommasi, F. Piccolo, The Joint European Torus, IEEE Control
[16] F. Piccolo, JET Vertical Stabilization System: Modelling and Control, PHD
Thesis, 2007.
105