• Non ci sono risultati.

2. CAPITOLO 2 LO SVILUPPO DEL SOFTWARE

2.5 La sezione Sensors

2.5.1 La compilazione di Sensors

Per configurare un sensore è necessario compilare tutte le voci presenti nella sezione. Per cominciare, è possibile inserire il nome del sensore che si vuole aggiungere al modello all’interno di EditSensName. L’utente deve poi definire il Data Rate con cui il sensore inserisce dati all’interno del satellite, servendosi delle Edit Text relative ad Amount ed Every, che sono rispettivamente

56

EditAmount ed EditEvery. Nella prima delle due si deve inserire il numero di bit acquisiti nell’intervallo di acquisizione, mentre nella seconda va inserito l’intervallo di acquisizione stesso. Grazie a PopUpBit e PopUpTime, è possibile servirsi dei vari multipli delle unità di misura utilizzate, così che si possa esprimere il valore all’interno di EditAmount anche in kbit, Mbit, Tbit, kbyte, ecc. ed il valore in EditEvery in minuti, ore, giorni. Quest’ultima funzionalità è resa possibile grazie a PushGetDataRate, nel cui callback è presente un algoritmo che moltiplica i valori presenti in EditAmount ed EditEvery a seconda dell’unità di misura scelta nelle suddette Pop-up List. In questo modo, a prescindere dalla scelta dell’utente, vengono convertiti i due valori rispettivamente in bit ed in secondi e viene calcolato il Data Rate con la semplice espressione

𝐷𝑎𝑡𝑎 𝑅𝑎𝑡𝑒(𝑏𝑝𝑠) = 𝐸𝑑𝑖𝑡𝐴𝑚𝑜𝑢𝑛𝑡(𝑏𝑖𝑡) ∗ 𝐸𝑑𝑖𝑡𝐸𝑣𝑒𝑟𝑦(sec)

Il Data Rate espresso in bps viene poi mostrato all’utente nella casella di testo StaticDataRate, servendosi degli handles che permettono di comunicare tra PushGetDataRate e la casella di testo appena citata. Si noti che, per come è stato definito, il Data Rate è un valore che riporta soltanto il numero di bit acquisiti nell’intervallo di simulazione specificato, pertanto non è sensibile ad eventuali picchi o valli presenti nell’andamento del flusso di dati stesso. Per questo motivo, il Pushbutton presente sulla GUI che determina il valore finale del Data Rate è stato etichettato con ‘Get Mean Data Rate’. Nonostante ciò, se l’utente è interessato a modellizzare il sensore in modo tale che acquisisca le informazioni secondo ‘picchi’ discreti di dati, questo è possibile usando le opportune condizioni di attivazione, come si vedrà nel seguito.

Un’altra voce da compilare in questa sezione è quella riguardante il buffer del sensore, ovvero la memoria interna di cui esso dispone. Infatti, tra i requisiti del software rientra anche la modellizzazione dell’andamento nel tempo dei buffer, così che l’utente possa constatare che il flusso di dati non superi il limite fisico consentito da questa memoria interna. Per definire questa grandezza è sufficiente che l’utente inserisca nella casella EditSensBuffer la capacità del sensore, utilizzando i multipli dei bit e dei byte suggeriti dalla lista PopUpBit5. Dopo aver selezionato una delle voci in quest’ultima lista, il suo callback aggiornerà in automatico la stringa visibile su StaticBuffer, mostrando il valore del buffer convertito in bit.

Per questo modello è inoltre necessario conoscere gli istanti in cui il sensore in questione è attivo e dunque gli intervalli di tempo in cui vengono acquisiti i dati. Questo viene implementato nel codice attraverso una logica di attivazione, cioè una frase MATLAB formulata imponendo una condizione; tale condizione può essere vera o falsa. Se è vera, restituisce 1, altrimenti 0. Negli istanti in cui l’uscita

57

del logico vale 1, il sensore è attivo. Il modo in cui il software manipola la condizione di attivazione verrà meglio illustrato nel capitolo dedicato alla funzione runtime. La condizione di attivazione deve essere inserita dall’utente nella casella di testo chiamata pay_act_logic_edit e deve essere scritta in linguaggio MATLAB. Ad esempio, se venisse scritto ‘1==0’, la logica di attivazione restituirebbe sempre ‘0’ in uscita, dato che 1 è diverso da 0. Questo porterebbe ad avere il sensore spento per tutta la durata della simulazione. Secondo lo stesso criterio, scrivendo ‘1==1’ il sensore rimarrebbe attivo dall’istante iniziale all’istante finale, poiché 1 è sempre identico a 1.

2.5.1.1 La GUI secondaria per la condizione di attivazione

Dato che il software dispone dei dati orbitali forniti da GMAT e caricati nella sezione General Simulation Setup, può risultare utile definire la condizione di attivazione di un particolare sensore sfruttando le variabili contenute nel report file. Poiché tali parametri variano nel tempo, in questo modo è possibile riprodurre una simulazione in cui il sensore si attiva solo in certi istanti temporali. Ad esempio, se si vuole modellizzare un sensore che si attiva solo qualora il satellite non è in eclissi, si può scrivere, in pay_act_logic_edit, la stringa:

(𝐺𝑀𝐴𝑇𝑓𝑖𝑙𝑒. 𝑓𝑜𝑢𝑛𝑑𝑒𝑐𝑙𝑖𝑝𝑠𝑒(𝑡) == 0)

dove si ricorda che GMATfile è la struct contenente tutti i dati forniti dal propagatore, e foundeclipse è il campo contenente la funzione che vale 0 se il satellite non è in eclissi ed 1 altrimenti. Si noti che tale condizione viene definita istante per istante (questo è il motivo per cui GMATfile.foundeclipse ha come argomento t, che rappresenta l’intervallo temporale e quindi la dipendenza del tempo).

Per definire condizioni di attivazione più complesse l’utente può servirsi del Push Button che cita ‘Define Sensors Activation Logic’ (pushbutton26), grazie al quale viene avviata una seconda interfaccia grafica (Fig. 2.15) che permette di ‘assemblare’ la propria logica di attivazione in modo intuitivo. Quest’ultima è stata sviluppata da Sitael ed è stata implementata all’interno della GUI generale richiamandone il codice (ACT_LOGIC.m) nel callback di pushbutton26.

58

Fig. 2.15 – L’interfaccia grafica di ACT_LOGIC.m, compilata con un esempio

Una volta scritta la stringa, è possibile riportarla in pay_act_logic_edit con il pulsante ‘SAVE AND CLOSE’ presente sulla GUI secondaria.

2.5.1.2 L’interfaccia con i bus

Prima di poter aggiungere alla struct s il sensore configurato, è necessario anche definire il bus verso cui esso scarica i dati acquisiti. Se non fosse stato fatto prima, dunque, è necessario in primis configurare un bus ed aggiungerlo alla struct chiamata b (per ulteriori dettagli si veda il paragrafo 2.6). In questa trattazione, si supponga di aver già definito uno o più bus in precedenza. Essi saranno allora automaticamente elencati nella lista chiamata ListSensToBus, che definisce tutte le possibili connessioni che il sensore può effettuare con i bus a valle. Dopo aver selezionato il bus di interesse, viene attribuito alla proprietà Value della lista un valore numerico che coincide con la posizione nella lista del componente selezionato. Quindi, se viene selezionato il primo componente nella lista, Value conterrà il valore 1, il secondo componente assegnerebbe il valore 2 e così via. Si noti dalla Fig. 2.16 che di default Value assume il valore 1. Quindi, senza interazioni dell’utente, risulta selezionata dall’elenco la prima voce disponibile.

59

Fig. 2.16 - La lista delle proprietà di ListSensToBus

Documenti correlati