Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Acquisizione dei dati da singola precisione al formato binario

Ciao a tutti,
lavoro in un gruppo di ricerca che si occupa di Astrofisica.
Sto sviluppando un sistema di acquisizione per poter acquisire dei segnali generati da rivelatori di raggi X (Transion Edge Sensor).
 
Sto provando a salvare i dati acquisiti attraverso la scheda NI-PXI 6132 (DAQ-mx software in LabVIEW 8.0) trasformandoli in formato binario. Per fare questo io uso la procedura 'Write To Measurement File'.
 
Non so come sia possibile cambiare la precisione del formato dei dati da double a single direttamente da DAQ-mx, ma credo di avere risolto la questione generando all'interno del VI un 'For Loop' dopo che il dato viene acquisito come double. Questo lo faccio perche' devo ridurre al massimo la dimensione del file in uscita, ma non perdo la significativita' del dato.
Per cui devo trasformare i dati in SGL.
 
Il problema e' che provo a salvare i dati in singola precisione (SGL) con la procedurea che vi ho detto prima, ma appena collego il filo dall'uscita della conversione da DBL a SGL al terminale 'Signals', automaticamente viene creato l'oggetto 'Convert To Dynamic Data', ed i dati vengono salvati in formato binario ma in doppia precisione. Per cui non viene piu' rispettata la conversione che facevo a priori.
 
Come posso risolvere questo problema?
 
Vi ringrazio per l'aiuto che potrete darmi.
 
Ciao,
Claudio!
0 Kudos
Messaggio 1 di 7
5.972Visualizzazioni

Ciao Claudio,

dunque, è un po' che non programmo in LV, però esistono delle funzioni per effettuare la conversione di formato di scalari o vettori: le trovi nella palette All functions >> Numeric >> Conversion. Ciononostante, se utilizzi Write To Measurement i dati vengono sempre convertiti in double, come hai già notato.

Come alternativa potresti usare la Write To Sgn File.vi, che trovi in All functions >> File I/O >> Binary File VIs.

 

Detto questo, si potrebbe cercare anche di compattare ulteriormente la dimensione del file di output se si riesce a ricavare dalla acquisizione non già dei single ma degli interi word. Un convertitore analogico/digitale basicamente restituisce dati a 12 o 16 bit, quindi dei word integer. Per ottenere il corrispondente valore nella corretta unitò di misura è sufficiente dividere tale flusso di dati per suo massimo (65536 per dati a 16 bit) e moltiplicare per il fondo scala dello strumento (2000 giri, 10 Ampere, 250 V o quale che sia). Questo processo viene svolto all'interno del DaqMx che ti restituisce direttamente dati in formato double. Io ho più esperienza di traditional daq, nel quale è possibile ricavare durante l'acquisizione i numeri interi senza alcuna conversione: ritengo che sia possibile farlo anche nel daqmx ma non saprei indicarti come. Se però ci riesci allora ottieni un flusso di dati in word integer invece che in double con un notevole risparmio di spazio (un double dovrebbe occupare 8 bytes invece dei 2 di una word). A te rimane il compito di convertire poi i dati nelle corrette misure sia durante l'acquisizione che quando eventualmente rileggi il file dei dati, che però come ti ho detto è un'operazione semplice.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 2 di 7
5.962Visualizzazioni
Ti consiglio di allegarci un esempio di quello che stai facendo per capire meglio dove stai sbagliando.

AlessioD
0 Kudos
Messaggio 3 di 7
5.954Visualizzazioni
Ciao Roberto,
ciao Alessio,
vi ringrazio per la risposta.
 
In allegato c'e' il VI che ho finora sviluppato come richiestomi da Alessio.
 
Ora provo ad implementare cio' che mi ha suggerito Roberto, pero' il secondo blocco della risposta trasformando i dati in word integer. Questo perche' nella versione di LV 8.0 la procedura Write To Sgn File.vi non c'e'.
 
Fatemi sapere se avete altri commenti,
grazie ancora e buona giornata,
Claudio
 
P.S.: Alessio come hai notato la richiesta l'ho lanciata anche sul group internazionale di Labview. Ti rispondo anche li' e ti allego il file in modo che altri lo vedano.
0 Kudos
Messaggio 4 di 7
5.944Visualizzazioni
Una prima alternativa potrebbe essere abbandonare il write to measurement file a favore di un write binary file al posto o affiancato al write to spreadsheet. Con questo si perdono alcune informazioni di contorno all'acquisizione che nel measurement file vengono archiviate nella porzione xml del file. Se però le salvi a parte o non ti interessano questa potrebbe essere una strada.
 
Un altro passo potrebbe essere selezionare per il daqmx read il formato unscaled che effettivamente genera array di dati word o double word da trattare successivamente e molto compatti nel formato su disco. Anche qui bisogna tenere presente cosa si guadagna e cosa si perde fra i vari formati di uscita.


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 5 di 7
5.929Visualizzazioni

Ciao Roberto,

grazie per l'info.

Il "write binary file" l'ho gia' provato e testato. Fatto sta che all'interno genera anche un header, per cui il file salvato non e' formato dai soli dati grezzi. Questo per me e' un problema nel momento in cui vado a leggere il file con un programma (ora uso IDL): non riuscendo ad interpretare il file binario non riesco ad isolare l'header per cui non leggo bene i dati (con il formato binario sono alle prime armi...). Se non fosse che ho necessita' di ridurre ancora la dimensione del file, per i dati in double avrei gia' risolto.

Riguardo alla seconda ipotesi che mi proponi mi ci sto mettendo da stamattina: vedro' se riesco a saltarne fuori.

Grazie ancora,

Claudio

 

 

0 Kudos
Messaggio 6 di 7
5.924Visualizzazioni
Occhio al parametro "prepend array or string size?": se messo False NON include l'header, ma per default è true. Vedi per esempio examples\file\smplfile.llb\Write Binary File.vi: semplicemente facendo la conversione dell'array in float all'ingresso del write file dovresti poter poi rileggere il file senza problemi.


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Messaggio 7 di 7
5.919Visualizzazioni