Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Acquisizione, salvataggio e modifica su file bin

Salve,

ho qualche problema con l'uso di file bin con un applicazione di datalogging.

L'applicazione deve salvare ad intervalli regolari i dati acquisiti dall'hardware (CRIO). Si deve avere la possibilità, quando richiesto, di visualizzare (su grafico xy) tutti i dati acquisiti fino a quell'istante continuando comunque a salvare in coda i nuovi dati in arrivo.

Inoltre, si deve avere la possibilità di salvare le modifiche fatte ai dati visualizzati. Tutto questo sempre durante l'acquisizione.

I dati sono salvati come cluster in un file bin e sono trattati come record (utilizzando la dimensione in byte dei cluster).

Al momento è realizzato con dei cicli while loop, uno per il salvataggio dei nuovi dati, uno per l'apertura dei record e uno per il salvataggio delle modifiche.

In generale, l'applicazione funziona ma quando il file bin comincia a diventare di grandi dimensioni (si deve fare una acquisizione ogni tot secondi per mesi senza interruzioni), già dopo qualche giorno, il caricamento e la visualizzazione rallentano e non sempre vanno a buon fine e non sempre i dati vengono salvati in coda.

Qualcuno ha qualche consiglio?

Grazie.

0 Kudos
Messaggio 1 di 4
5.705Visualizzazioni

Io personalmente ti sconsiglio di generare file troppo grossi e che coprano orizzonti temporali troppo ampi, suggerirei se possibile di spezzare il salvataggio in tronconi di qualche giorno al massimo. Questa politica secondo me ha diversi vantaggi:

 

1. Se per qualche motivo l'applicazione va in crash e il file dati in uso è illeggibile non rischio di perdere i dati di tutta la prova: al massimo avrò perso quelli degli ultimi (pochi) giorni

2. Se devo esaminare dati "vecchi" posso tranquillamente lavorare su un file fuori linea evitando tutti i problemi che possono derivare dall'accesso contemporaneo ai file

3. Se devo esaminare i dati recenti lavoro su file di dimensioni umane, non devo fare lunghe operazioni di ricerca dei record che mi interessano e in complesso tutto risulta più semplice

 

In pratica si tratta di aggiungere una piccola routine che ogni n giorni chiude il file dati, genera un nuovo nome, apre un nuovo file e riprende la memorizzazione su questo.



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?
Messaggio 2 di 4
5.703Visualizzazioni

Grazie per la risposta tempestiva!

Si avevo pensato ad una soluzione "multifile" ma i problemi sono diversi.

In pratica devo avere la possibilità di poter visionare in un unico xy graph o le ultime 24 ore (quindi potrebbe essere necessario fare un "merge" di due file) o l'intera acquisizione (questa ha senso quando il tempo di campionamento è un pò più lungo di qualche secondo). Con più file questo è più complicato.

0 Kudos
Messaggio 3 di 4
5.695Visualizzazioni

Si c'è qualche complicazione in più ma solo in qualche caso e comunque tutta l'applicazione diventa più robusta; inoltre si elimina il possibile problema di memorizzazione che se non ho capito male già riscontri dopo qualche giorno di funzionamento.

Tieni conto che di solito su test così lunghi la fase di analisi dei dati è un'attività limitata rispetto alla durata totale della prova (facciamo qualche minuto ogni qualche giorno di prova): mi sembra assurdo rischiare di penalizzare tutta la vita dell'applicazione per salvare un po' di tempo di elaborazione quando l'operatore richiede un grafico!



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 4 di 4
5.683Visualizzazioni