In questa pagina si trova una descrizione del sistema adattivo dal punto di vista della diagnostica, una lista dei requisiti e dei problemi da risolvere, una serie di schemi proposti per soddisfare i requisiti e una possibile implementazione.

Descrizione del sistema

Il sistema è composto dal Wavefront Sensor (WFS) e dal secondario adattivo (Adsec). Ci sono un totale di 8 BCU:

BCU presenti nel WFS:

  • Slope computer (BCU 39)

BCU presenti nel secondario adattivo:

  • Switch BCU
  • Mirror BCUs (6)

Il WFS è collegato all'Adsec tramite una fibra ottica (fastlink) che collega lo Slope computer alla Switch BCU. La Switch è collegata via fibra alle MirrorBCU. Tutte le BCU hanno un'interfaccia Ethernet da cui vengono scaricati i frames diagnostici.

I due componenti del sistema lavorano sempre, senza interruzione: lo slope computer calcolando slopes, e il secondario applicando comandi agli attuatori. Il loop viene chiuso abilitando l'upload delle slopes verso il secondario via fastlink, e aperto disabilitandolo. In caso di fastlink disabilitata, la switch BCU genera automaticamente set di comandi nulli ad una frequenza prefissata (es. 100 Hz) per attivare corrispondenti cicli di diagnostica interna al secondario.

Caratteristiche dei buffer diagnostici:

Ogni BCU dispone di un buffer diagnostico circolare, dove registra le informazioni di sua competenza. Il buffer è organizzato in frames, e viene generato un frame ad ogni giro del loop ottico (o di frame autonomi nel caso del secondario a loop ottico aperto).

Da ogni BCU è possibile scaricare il frame pointer corrente (non il frame counter!). Dentro ogni frame diagnostico si possono trovare alcuni counter:

  • Frame dello slope computer: contiene il WFS counter
  • Frame della Switch BCU: contiene il WFS counter e il Mirror counter
  • Frame delle Mirror BCUs: contiene il Mirror counter

Il frame pointer avanza ad ogni ciclo del loop ottico di una quantità pari alla lunghezza del frame diagnostico (in generale diverso per ogni BCU). I buffer diagnostici sono circolari, e una volta riempiti il frame pointer riparte da zero.

Tutti i parametri dei buffer diagnostici (lunghezza, numero di frames, grandezza di un singolo frame) sono conosciuti.

Scenari di funzionamento

Scenario 1: loop aperto

  • Lo slope computer riceve frames dal CCD, calcola le slopes, e salva le informazioni sul proprio buffer diagnostico incrementando il WFScounter
  • La switchBCU genera autonomamente frames diagnostici ad una frequenza prefissata, salvando le informazioni sul proprio buffer diagnostico e su quelli delle Mirror BCUs, incrementando il Mirror Counter in modo indipendente dal WFScounter.
  • Occorre scaricare frames+slopes dallo slope computer, e far andare la diagnostica del secondario in modo indipendente.

Scenario 2: loop chiuso

  • Lo slope computer riceve frames dal CCD, calcola le slopes, e salva le informazioni sul proprio buffer diagnostico incrementando il WFScounter.
  • Le slopes vengono mandate alla Switch BCU
  • Lo specchio calcola i comandi e li esegue, la switchBCU salva le informazioni sul proprio buffer diagnostico e su quelli delle MirrorBCUs, incrementando il MirrorCounter alla stessa frequenza del WFScounter
  • I due counter avanzano insieme, ma partendo da valori casuali (quelli che avevano al momento della chiusura del loop).
  • Occorre scaricare frames+slopes+comandi dalle varie BCU, e far andare la diagnostica del secondario. Questa comprende anche i comandi che sono quindi in comune.

Requisiti

  • Diagnostica del secondario sempre attiva finché il secondario è acceso
  • Diagnostica parziale del loop ottico (frame+slopes) sempre attiva finché lo slope computer è acceso.
  • Diagnostica completa del loop ottico (frame+slopes+comandi) quando il loop è chiuso.
  • Secondario e slope computer possono essere accesi e spenti indipendentemente.
  • Il loop può essere aperto e chiuso in ogni momento. E' ammessa una fase di preparazione moderatamente complicata al momento della chiusura del loop (0.1 s)
  • Poiché il loop ottico genera dati più velocemente di quanto l'Ethernet ci permetta di scaricarli, occorre decimare i dati del loop ottico. In tal caso frame, slopes e comandi, scaricati da BCU diverse, devono appartenere allo stesso ciclo del loop.
  • Latenza il più bassa possibile tra la generazione del frame sulla BCU e la sua disponibilità sul PC, specialmente per la diagnostica del secondario adattivo (per il loop ottico è meno importante).

Problemi:

  • Leggendo il frame pointer da una BCU, si hanno abbastanza informazioni per scaricare il frame diagnostico da quella BCU, ma non da altre.
  • Il WFScounter permette di scaricare il frame giusto dallo slope computer, ma non dalla switch e dalle Mirror BCU.
  • Il MirrorCounter permette di scaricare il frame giusto dalla switch BCU e dalle MirrorBCU, ma non dallo slope computer.
  • La latenza introdotta da un ciclo di lettura dalla BCU è piuttosto alta e di conseguenza occorre minimizzare le informazioni da leggere prima di essere in grado di scaricare i frame diagnostici giusti sparsi nelle memorie delle BCU.

Schemi di funzionamento

Sono descritti tre schemi di funzionamento dal punto di vista concettuale, da cui far derivare delle possibili implementazioni. Due degli schemi hanno due diverse modalità di funzionamento, una di semplice implementazione ma con latenza alta, una più complicata ma con latenza bassa.

Diagnostica adsec (sempre attiva):

Metodo semplice (latenza alta):

  1. scaricare il frame pointer dalla switch BCU
  2. scaricare il frame diagnostico dalla switch BCU.
  3. usando il MirrorCounter trovato nel frame diagnostico, scaricare i frame diagnostici dalle MirrorBCU
  4. ripeti dal punto 1.

  • Latenza totale: 3 giri
  • Tempo di setup: nullo.
  • Probabilità di disallineamento: nulla
  • Informazioni scaricate: diagnostica adsec.

Metodo complicato (latenza minore)

Setup

  1. scaricare il frame pointer dalla switch BCU
  2. scaricare il frame diagnostico dalla switch BCU.
  3. calibrare una relazione tra frame pointer e MirrorCounter che permetta di calcolare MirrorCounter = f(frame pointer)

La relazione è qualcosa di semplice come un modulo o una divisione, per esempio MirrorCounter = (frame_pointer / frame_len). Il counter risultante è modulo lunghezza del buffer, ma questo basta per scaricare la diagnostica. Il controllo di correttezza del counter deve tenerne conto prima di confrontare i MirrorCounter.

Ciclo

  1. Scaricare il frame pointer dalla switch BCU.
  2. Scaricare il frame diagnostico dalla switch BCU e contemporaneamente dalle MirrorBCU (usando il MirrorCounter precalcolato con la relazione precedente).
  3. Controllare se i MirrorCounter nei frame diagnostici sono quelli attesi.
    • Se sì, rendere il buffer di dati disponibile e ricominciare il ciclo
    • Se no, scartare il buffer e ricominciare dal setup.

  • Latenza totale: 2 giri
  • Tempo di setup: 2 giri
  • In caso di disallineamento: 4 giri per il prossimo frame
  • Probabilità di disallineamento: bassa. Può succedere in caso di problemi hw/sw sul secondario, oppure se il frame pointer della switch BCU viene letto ad intervalli più grandi del tempo che la switch BCU ci mette a fare il giro del suo buffer circolare (vari secondi).
  • Informazioni scaricate: diagnostica adsec.

Diagnostica parziale loop ottico (sempre attiva durante il loop aperto):

  1. scaricare il WFS frame pointer dallo slope computer
  2. scaricare il frame diagnostico dello slope computer
  3. ripeti dall'inizio

  • Latenza totale: 2 giri
  • Tempo di setup: nullo.
  • Probabilità di disallineamento: nulla
  • Informazioni scaricate: diagnostica slope computer (loop ottico parziale)

Diagnostica completa loop ottico/adsec (sempre attiva durante il loop chiuso):

(generalizzazione della diagnostica adsec: scarica la diagnotisca adsec + quella dello slope computer).

Metodo semplice (latenza alta):

  1. scaricare il frame pointer dalla switch BCU
  2. scaricare il frame diagnostico dalla switch BCU.
  3. scarico dei frame diagnostici:
    • usando il MirrorCounter trovato nel frame diagnostico, scaricare i frame diagnostici dalle MirrorBCU
    • contemporaneamente, usando il WFScounter trovato nel frame diagnostico, scaricare il frame diagnostico dello slope computer
  4. ripeti dall'inizio

  • Latenza totale: 3 giri
  • Tempo di setup: nullo.
  • Probabilità di disallineamento: nulla
  • Informazioni scaricate: diagnostica loop ottico completa e diagnostica adsec

Metodo complicato (latenza minore)

Setup

  1. scaricare il frame pointer dalla switch BCU
  2. scaricare il frame diagnostico dalla switch BCU.
  3. calibrare una relazione tra frame pointer e MirrorCounter che permetta di calcolare MirrorCounter = f(frame pointer)
  4. calibrare una relazione equivalente per il WFScounter.

Ciclo

  1. Scaricare il frame pointer dalla switch BCU.
  2. Scaricare il frame diagnostico dalla switch BCU e contemporaneamente dalle MirrorBCU (usando il MirrorCounter precalcolato con la relazione precedente) e dallo slope computer (usando il WFScounter precalcolato)
  3. Controllare se i MirrorCounter e il WFScounter nei frame diagnostici sono quelli attesi.
    • Se sì, rendere il buffer di dati disponibile e far ripartire il ciclo
    • Se no, scartare il buffer e ricominciare dal setup.

  • Latenza totale: 2 giri
  • Tempo di setup: 2 giri
  • In caso di disallineamento: 4 giri per il prossimo frame
  • Probabilità di disallineamento: bassa. Può succedere in caso di problemi hw/sw sul secondario, oppure se il frame pointer della switch BCU viene letto ad intervalli più grandi del tempo che la switch BCU ci mette a fare il giro del suo buffer circolare (vari secondi).
  • Informazioni scaricate: diagnostica loop ottico completa e diagnostica adsec

Implementazione dei metodi

In questa sezione vengono chiamati "thread" i sequencer delle operazioni descritte sopra. Possono essere uno o più thread o processi separati.

Thread di diagnostica slope computer:

Implementa la diagnostica di loop ottico parziale.

Thread di diagnostica adsec/loop ottico completo:

Implementa la diagnostica adsec (sempre) e con un flag apposito passa alla modalità adsec/loop ottico completo.

Nella modalità completa è meglio fermare il thread di diagnostica loop ottico parziale, altrimenti la velocità scende. Inoltre se quel thread sta andando ci possono essere problemi nella scrittura degli stessi buffer shared

Coordinamento

Il setup del sistema, l'apertura e la chiusura del loop sono gestite da script che possono essere moderatamente sofisticati.

In linea di principio, i vari metodi di scarico possono essere attivi anche contemporaneamente durante il cambio dall'uno all'altro. In tal caso occorre però che scrivano su buffer diagnostici diversi.

Le sequenze scritte di seguito si assicurano che le diagnostiche non si sovrappongano mai (per poter utilizzare sempre gli stessi buffer shared), al prezzo di un possibile intervallo (qualche 0.01 sec ?) non coperto dalla diagnostica del loop ottico, che comunque accade in regime di gain zero e quindi ininfluente.

Setup iniziale

fa partire la diagnostica Adsec e quella del loop ottico parziale.

Chiusura del loop

  1. gain del loop a zero
  2. chiusura fastlink
  3. stop del thread della diagnostica loop ottico parziale.
  4. il thread di diagnostica adsec passa a modalità completa
  5. gain al livello stabilito
  6. loop chiuso correttamente,

Apertura del loop

  1. gain del loop a zero
  2. il thread di diagnotica adsec passa a modalità solo adsec
  3. apertura fastlink
  4. start thread di diagnostica loop ottico parziale
  5. loop ottico aperto correttamente

-- AlfioPuglisi - 25 Jan 2007

Commenti

  1. puntualizzazione in "Scenario 2: loop chiuso, punto 5": i comandi sono presenti solo sulla switch bcu e sono letti/spediti dal secondario in copia unica. (MarcoXompero)
  2. "Requisiti, punto 5": potrebbe essere necessario piu' tempo se si considerano cambi di configurazione del ricostruttore nel secondario. (MarcoXompero)
  3. "Requisiti, punto 6": direi almeno tutti i frame del loop ottico. nel caso il sensore andasse molto piano, dal secondario verrebbero scaricati anche dei frames di oversampling (MarcoXompero)
  4. "Diagnostica adsec (sempre attiva), Metodo complicato (latenza minore)": gli skip_frame dovuti ai comandi "pending" far variare la relazione. (MarcoXompero)
Topic revision: r8 - 23 Apr 2016, AlfioPuglisi
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding Foswiki? Send feedback