in data 10-02-2008 09:55 AM
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.
in data 10-02-2008 10:41 AM
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.
in data 10-03-2008 02:27 AM
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.
in data 10-03-2008 05:23 PM
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!