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