Memo, 2/2012 - Osservatorio di Arcetri

Transcript

Memo, 2/2012 - Osservatorio di Arcetri
INAF-OAA Gruppo Strumentazione Infrarossa
Progetto Giano
I file ausiliari di Giano
E.Giani, C.Baffa
Memo Versione 1.04, Firenze Febbraio 2012
Sommario
Nel presente memo diamo una descrizione dei file di configurazione dei moduli software di Giano, il loro utilizzo, la loro locazione e i loro attributi di accesso.
1
Introduzione
Il sistema di controllo di Giano è costituito da diversi moduli software indipendenti che si
appoggiano ad alcuni di file esterni per la configurazione del sistema complessivo. Questi file
devono essere accessibili in lettura a un utente generico ed è opportuno che appartengano ad una
directory di sistema per essere facilmente indirizzabili dal programma che ne fa uso. Facciamo
riferimento alle specifiche del documento [1] che descrive le linee guida seguite per la collocazione
delle varie componenti del progetto all’interno del filesystem.
Ogni applicazione possiede una directory propria nell’area di sistema /opt/softir/ identificata dal nome del pacchetto software: i file ausiliari sono salvati in queste locazioni. Ad
esempio la directori di gianoMotors è /opt/softir/share/gianoMotors.
2
I file ausiliari di gianoMotors
Il sistema criogenico di posizionamento delle ottiche di Giano (reticolo, filtri e fenditure) viene
controllato dall’applicazione gianoMotors attraverso l’intermediazione del modulo Couatl che
processa i comandi proveniente della GUI e li instrada a destinazione.
Il programma gianoMotors preleva le informazioni sui device fisici da alcuni file che devono
risiedere in una specifica sub-directory di quella in cui è presente il programma gianoMotors.
Ad ogni componente ottica corrisponde un file con le posizioni del motore e i parametri di
inizializzazione: solo al reticolo sono associati due file, uno per ognuno dei due motori che ne
controllano lo spostamento.
Per uniformare il comportamento di questo programma alle indicazioni riportate in [1],
abbiamo duplicato nella directory di sistema /opt/softir/share/gianoMotors la gerarchia del
programma gianoMotors creando la sub-directory IS2 e quelle discendenti in essa contenute.
L’applicazione tcl/tk cerca in questa locazione i file di configurazione, di utility, di log e
di errore indispensabili per l’avvio. Nella sub-directory IS2/doc deve esistere il file ChangeLog
a cui gianoMotors si appoggia per ricavare il proprio numero di versione.
L’esecuzione di gianoMotors dipende inoltre dall’attributo di accesso di alcuni file: ad
esempio tutti i file di log di IS2/log devono essere leggibili e scrivibili da tutti (attributo 777)
2.1
Il file delle posizioni del reticolo
Ognuno dei due file con l’elenco delle posizioni dei motori Z1 e Z2 del reticolo è formattato su
tre colonne: nella prima sono riportate le posizioni logiche, nella seconda le posizioni in ohm e
nella terza gli alias delle posizioni comunemente usate nelle osservazioni.
Lo spostamento del reticolo avviene per passi successivi, muovendo prima il motore 1 e
poi il motore 2 di un numero fissato di step (circa 300) e ripetendo questa procedura fino al
raggiungimento della posizione finale.
Questa procedura richiede del tempo per essere portata a termine ma in questo modo
il reticolo non risulta disassato durante gli spostamenti. È stato verificato che se i motori
non sono mossi contemporaneamente (operazione possibile perchè ogni motore è controllato
separatamente da un singolo controller) ma spostati uno di seguito all’altro, la posizione finale
non è riproducibile.
Il metodo di spostamento alternato dei due motori per brevi distanze1 permette invece
di ottenere la stessa posizione finale anche se a spese di una procedura piú lunga. Durante una
nottata osservativa il reticolo non è spostato molto frequentemente e questa operazione incide
in modo minimo sul tempo di setting dello strumento.
Nel file con la lista delle posizioni dei due motori del reticolo, oltre alle posizioni canoniche
SHR (Shifted High Resolution) e HR (High Resolution) sono state aggiunte una serie di posizioni
intermedie indentificate dai tre caratteri iniziali INT seguiti da un indice numerico consecutivo
che indica la posizione intermedia. Per entrambi i motori del reticolo la posizione intermedia
INT0 coincide con la posizione HR, INT10 con SHR.
Nella prima versione del codice di movimento del reticolo, il file GratingZ1.pos come pure
quello relativo al secondo motore, aveva la seguente formattazione:
# |
# |
# Name
SHR
GMAX
INT9
INT8
INT7
INT6
INT5
INT4
INT3
INT2
INT1
HR
GMIN
+--------------------- value (in Ohm)
|
value
3665
3665
# ottimizzato al freddo 16/11/2010
3945
4225
4505
4785
5065
5345
5625
5905
6185
6540
6540
# ottimizzato al freddo 16/11/2010
La routine del reticolo accettava come argomento solo due posizioni finali: SHR o HR.
Erano possibili due soli movimenti: SHR → HR e quello nella direzione opposta HR→SHR.
Come spiegato in precedenza, il movimento avviene attraverso una serie di posizionamenti
intermedi, con movimenti alternati tra i due motori.
1
Questo metodo evita il disassamento del reticolo ma permette la serializzazione dello spostamento. Per
ottenere la gestione contemporanea dei due motori è necessario intervenire a mano attraverso la GUI ICS di
gianoMotors. Questa operazione non risulta possibile quando gianoMotors è controllato da Couatl.
La selezione SHR→HR prevedeva ad esempio la sequenza:
Motore
Motore
Motore
Motore
.
.
Motore
Motore
1:
2:
1:
2:
1:
2:
SHR ->INT9
SHR ->INT9
INT9->INT8
INT9->INT8
.
.
INT1->HR
INT1->HR
In un secondo momento è stato richiesto che fosse introdotta una posizione HR1 tra HR
e SHR.
Per ridurre al minimo le modifiche da apportare al codice della funzione preposta al movimento del reticolo, abbiamo modificato il file delle posizioni duplicando le posizioni in ohm di
HR e SHR, etichettandole con le label INT0 e INT10 con l’aggiunta di una terza colonna dove in
corrispondenza delle posizioni INT0 e INT10 compare come alias il nome della posizione logica
corrispondente. Abbiamo proceduto in modo analogo per la nuova posizione HR1.
Il file delle posizioni per il motore Z1 del reticolo risulta essere:
# |
# |
# Name
SHR
GMAX
INT10
INT9
INT8
INT7
INT6
INT5
INT4
INT3
HR1
INT2
INT1
HR
INT0
GMIN
+--------------------- value (in Ohm)
|
|
value
alias position
3665
3665
# ottimizzato al freddo 16/11/2010
3665 SHR
3945
4225
4505
4785
5065
5345
5625
5905
5905 HR1
6185
6540
6540 HR
6540
# ottimizzato al freddo 16/11/2010
Si puó notare come le posizioni di tipo INT che non corrispondono a posizioni osservative,
non abbiano un’entrata nella colonna degli alias.
Al codice del programma gianoMotors abbiamo aggiunto una procedura che, invocata
prima della inizializzazione, restituisce in uscita il numero complessivo di posizione intermedie
(incluse le posizioni estreme SHR/INT10 e HR/INT0) e le coppie di valori:
nome alias - indice posizione osservativa
Per il file precedente, la procedura restituisce ad esempio:
readAliasFilePos: SHR 10
readAliasFilePos: HR1 2
readAliasFilePos: HR
0
M1 getGratingIntPos: 11
L’applicazione Couatl decodifica le risposte generate da gianoMotors, alloca un vettore
di stringhe con 11 elementi e a quelli con indice uguale al valore restituito dalla procedura tcl/tk
associa il nome dello alias.
array[0] ->
array[1] ->
array[2] ->
.
.
array[10]->
HR
""
"HR1"
"SHR"
Una routine di Couatl restituisce in corrispondenza del nome logico della posizione, l’indice
del corrispondente elemento dell’array. Se l’operatore chiede il reticolo in HR1 partendo da SHR,
la routine restituisce l’indice 10 per la posizione di partenza e l’indice 2 per quella di arrivo: lo
spostamento avverrà attraverso 8 posizionamenti intermedi, alternati tra i due motori.
Questo metodo risulta molto flessibile, perchè modificando solo il file con le posizioni,
permette di introdurre altre posizioni osservative oltre a quelle già presenti: è sufficiente scrivere
la corrispondente entrata nella colonna degli alias e duplicare l’entrata riportando nella prima
colonna il nome della posizione logica introdotta.
Il contenuto della prima colonna serve ad una procedura del programma gianoMotors per
associare al nome logico la posizione in ohm letta dal potenziometro.
Questa funzione esegue un confronto tra la posizione letta dal potenziometro e quelle
contenute nella seconda colonna del file, ritornando il nome della prima posizione logica che
soddisfa la condizione. La medesima procedura viene utilizzata per ottenere la corrispondenza
anche per i motori dei filtri e delle fenditure.
Dato che vogliamo apportare il minor numero di modifiche possibile al programma originale
gianoMotors abbiamo preferito lasciare inalterata la procedura di matching della posizione e
modificare il file di configurazione rendendolo, purtroppo, ridondante. La nuova formattazione
del file richiede che la posizione logica compaia due volte, una volta nella terza colonna come
alias della posizione intermedia, l’altra come posizione logica nella prima colonna. La seconda
colonna riporta sempre la posizione in ohm.
Il nome della posizione logica, per come funziona la routine di riconoscimento nomeposizione descritta sopra, deve sempre comparire prima della posizione intermedia corrispondente: se vogliamo che ci venga restituito il nome HR e non INT0, HR deve comparire prima di
INT0 nell’elenco delle posizioni.
I file con le posizioni dei motori di Giano devono essere nella directory di sistema
/opt/softir/share/gianoMotors/IS2/config/
e devono ovviamente avere l’accesso in lettura, mentre quello in scrittura è indispensabile
solo se il file deve essere modificato.
Essendo una directory di sistema è opportuno che risulti scrivibile solo dall’utente root e
dagli utenti che possiedono i permessi di amministratore (sudoers). Questa scelta è corretta sia
perchè le posizioni non devono essere modificabili da un utente qualunque, sia per motivi di
sicurezza del sistema.
Durante le operazioni di laboratorio i file delle posizioni sono dei link simbolici ai corrispondenti file nella home directory dell’operatore: questo rende possibile l’accesso in scrittura ai
file quando viene eseguita l’ottimizzazione delle posizioni a freddo. Questi link saranno rimossi
all’avvio della fase operativa dello strumento.
I file delle posizioni devono risiedere sulla macchina che manda in esecuzione il programma
gianoMotors.
Quando si opera in laboratorio, sulla medesima macchina sono in esecuzione il programma
GUI di Giano e le applicazioni Balor/Gbridge e Couatl. Nella versione finale al telescopio,
la GUI sarà eseguita su un PC distinto da quello su cui gireranno Balor/Gbridge, Couatl
e gianoMotors, ma queste ultime tre applicazione, per come interagiscono tra loro, devono
necessariamente girare sulla stessa macchina2 .
Qualora la GUI di telescopio debba usare le informazioni contenute nei files delle posizioni
dei motori, questi files dovranno essere copiati sulla macchina della GUI di Giano: la locazione
definitiva non è necessario rispetti le indicazioni riportate in [1] perchè queste rappresentano le
linee guida per i soli programmi sviluppati dal Gruppo Infrarosso.
La GUI di laboratorio titan si aspetta di trovare questi file nella directory di sistema
indicata sopra. Da essi estrae il nome delle posizioni elencate nel menu di selezione dei motori.
3
Il file delle posizioni dell’unità di pre-slit
Le posizioni delle ottiche montate sullo stage rotazionale sono salvate nel file thorlabs.pos
nella directory /opt/softir/share/xill/ del controller embedded dell’unità di pre-slit, su cui
è in esecuzione il server Xill, posizione che offre tutta la sicurezza necessaria per le operazioni
al telescopio, ma poco agevole da raggiungere durante le operazioni di laboratorio.
Per permettere la necessaria flessibilità in fase di allineamento è stato modificato il programma di controllo della PreSlit in modo che riceva le posizioni dal middleware Balor/Gbridge.
Il file thorlabs.pos viene ora letto da Balor/Gbridge e il contenuto inviato al programma
di controllo della PreSlit che provvede a salvarlo in locale (in RAM): il programma di PreSlit
accede dunque a questo file per eseguire la conversione tra nome-posizione, proprio come faceva
in precedenza.
Balor/Gbridge prima di inviare un comando di spostamento alla PreSlit, controlla se il
file thorlabs.pos è stato modificato (attraverso la data dell’ultima modifica) e se questo è il
caso invia nuovamente il contenuto del file al programma di PreSlit.
Balor/Gbridge accede a questo file attraverso il link simbolico che che lo collega alla directory di sistema in cui risiede, in modo analogo a quanto è stato implementato per
gianoMotors.
Tale modifica va nella direzione di una libertà maggiore per le attività di messa a punto
di Giano e del minore impatto sul codice già scritto.
Per semplicità e per non avere inutili duplicazioni, esiste una sola versione del file delle
posizioni, thorlabs.pos, rintracciabile in /opt/softir/share/xill, tutti gli altri sono link
simbolici creati nelle directory di sistema delle applicazioni che vi si appoggiano, come appunto
Balor/Gbridge e titan.
La GUI di laboratorio titan accede al contenuto del file per creare il menu dei motori
nella finestra dedicata al controllo della pre-slit.
2
Sia Couatl sia gianoMotors sono creati dalla chiamata di sistema fork che dá origine a nuovi processi sulla
macchina locale
4
Il file ausiliari della GUI di laboratorio titan
Il programma titan si aspetta i file delle posizioni dei motori di Giano e quelli dell’unità di
pre-slit nella directory di sistema /opt/softir/share/titan.
Per non avere duplicazioni inutili è opportuno creare i i seguenti link simbolici:
FilterWheel.pos ->
GratingZ1.pos ->
GratingZ2.pos ->
SlitWheel.pos ->
thorlabs.pos ->
command.def ->
/opt/softir/share/gianoMotors/IS2/config/FilterWheel.pos
/opt/softir/share/gianoMotors/IS2/config/GratingZ1.pos
/opt/softir/share/gianoMotors/IS2/config/GratingZ2.pos
/opt/softir/share/gianoMotors/IS2/config/SlitWheel.pos
/opt/softir/share/xill/thorlabs.pos
/opt/softir/share/
Il file command.def elenca i comandi del protocollo di Giano come coppie di nome-valore:
# command.def: list of commands
#
#
# GIANO PROTOCOL COMMAND
#
#
FILLMEM0
0x0101 /**< Null the sequencer memory */
DUMPMEM
0x0102 /**< Dump the sequencer memory */
READPARM
0x0104 /**< Read a data from sequencer memory */
WRITEPARM
0x0105 /**< Write data to sequencer memory */
POWERCYCLE
0x0106 /**< Switch sensor off and on again */
LOADOBJ
0x0108 /**< Load a program in sequencer memory*/
LOADWAVE
0x0109 /**< Load a waveform from a file */
DIT
0x0200 /**< Set the integration time */
GROUP
0x0201 /**< Set the number of groups */
DOUBLE
0x0202 /**< Set single/double corr. */
QUADRANTS
0x0203 /**< Set the number of active quad. */
ONDISK
0x0204 /**< set data on disk on/off */
NOISE
0x0205 /**< noise acq. mode (sensor off) */
SYNCHRO
0x0206 /**< Synchro test acquisition
*/
SVBTEST
0x0207 /**< SVB test image mode
*/
SVBCHECK
0x0208 /**< SVB image checking mode */
SEQMEM
0x0209 /**< Sequencer memory tests */
FIFOTST
0x020A /**< Buffer board FIFO autotest */
EXPERT
0x020B /**< Laboratory acq. mode (expert) */
DUMMYFILE
0x020C /**< Enable loading of dummy acq. program from disk file */
RUN
0x0300 /**< Start the sequencer */
START
0x0301 /**< Run with DIT e GROUP */
STOP
0x0302 /**< Stop the sequencer at C.I.*/
ABORT
0x0303 /**< Abort the sequencer */
INTEGRA
0x0304 /**< Start acquisitions */
FREERUN
0x0305 /**< Free run */
MULTI
0x0306 /**< Multi sampling acquisition */
DRYRUN
0x0307 /**< Start the sequencer */
FLIPSVB
0x0308 /**< Load obj progr with a square wave */
SOCKDS9
0x0309 /**< sockname for DS9 */
REINIT
0x0310 /**< Reinit the embedded acq. system */
STATUS
0x0400 /**< Print acquisition status variables*/
ASTATUS
0x0401 /**< Return the synthetic acq. status */
READLOG
VERBOSE
MSGLEVEL
DUMMYACQ
KILLTERM
NOP
INITCAM
SETTEMP
SETFRAME
GETTEMP
UPTEMP
SETIMAGE
SETBIN
STARTGM
MSTATUS
MOVE
MINVERT
MSTOP
MEXIT
COUATLEND
GETMEASURE
DAEMONSTAT
SETVALUE
XSTATUS
SWITCH
WHEEL
WHEEL_STOP
0x0410
0x0420
0x0430
0x0444
0x0445
0x04FF
0x0500
0x0501
0x0502
0x0503
0x0504
0x0505
0x0506
0x0600
0x0601
0x0610
0x0611
0x0612
0x0620
0x0621
0x0700
0x0710
0x0800
0x0900
0x0910
0x0912
0x0921
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
/**<
Print the analog board log */
embedded server verbosity level */
minimum message level verbosity */
Restituisce un frame sintetico */
kill the running bridge server */
No operations: used as keep-alive*/
Connect FLI camera
*/
Set FLI camera temperature */
Set FLI camera frame type */
Get FLI camera temperature */
Update FLI camera temperature
*/
set image geometry for FLI camera */
set image biining for FLI camera */
start gianoMotors application */
ask motor status */
ask motor movement */
reverse grating movement direction*/
stop motor */
exit gianoMotors application */
end couatl server */
get lillend measures */
get status of daemons */
Set PLC or Program values */
get pre-slit (Xill) system status */
switch on/off the system numer N */
move Thorlabs wheel */
command to stop thorlabs movement */
La sua presenza non è indispensabile, ma il contenuto è utilizzato da tutti i moduli software
di Giano per tradurre in linguaggio ’umano’ i codici esadecimali dei comandi e rendere piú
comprensibile la lettura dei file di log creati dalle varie applicazioni.
Riferimenti bibliografici
[1] “Struttura delle directories per i progetti software del Laboratorio Infrarosso.”,
C.Baffa, E.Giani, Memo, 2/2007