Descrizione del formato OSF
Descrizione generale del formato OSF
- Valida per le versioni del formato 4 e 5 -
L'Open Streaming Format (OSF) è un formato di dati binario, orientato ai blocchi, per la registrazione continua di dati di misura e di processo riferiti al tempo. È concepito per essere ottimale non solo per lo streaming su sistemi embedded con risorse limitate, ma anche per l'elaborazione efficiente a blocchi di grandi quantità di dati su piattaforme di analisi ad alte prestazioni – su server, PC o nel post-processing direttamente su dispositivi embedded.
Principi fondamentali
- Il tempo come asse centrale: tutti i dati vengono memorizzati con informazioni temporali univoche – equidistanti con una griglia temporale fissa oppure singolarmente con timestamp.
- Compatibile con lo streaming: i dati possono essere scritti nel file in modo continuo durante la misura in corso, senza conoscere in anticipo la quantità totale.
- Robustezza: anche in caso di interruzione dell'alimentazione o di spegnimento imprevisto, tutti i dati memorizzati fino all'ultimo blocco scritto rimangono leggibili.
- Struttura aperta: combinazione di un metablock chiaro (XML in OSF4, JSON in OSF5) e di un semplice flusso di dati binario.
- Memorizzazione a blocchi: invece di scrivere i singoli valori in sequenza, vengono utilizzati blocchi di dati. Ciò riduce le operazioni di scrittura e consente un caricamento rapido di grandi quantità di dati.
- Flessibilità: supporto di diversi tipi di dati – dai semplici scalari ai vettori e alle matrici fino ai dati binari come immagini o file audio.
- Metadati: ogni canale può essere descritto con nomi, unità fisiche, dimensioni e informazioni aggiuntive opzionali.
Struttura di base di un file OSF
Indipendentemente dalla versione 4 o 5, ogni file OSF segue lo stesso schema di base:

-
Magic header
- Identificatore del formato (OSF4, OSF5, OCEAN_STREAM_FORMAT4, OCEAN_STREAMING_FORMAT4)
- Indicazione della lunghezza del metablock successivo
-
Metablock (XML o JSON)
- Contiene informazioni su canali, tipi di dati, unità fisiche e dati di contesto
- Definisce la struttura dei blocchi di dati successivi
-
Blocchi di dati binari
- Contengono i veri e propri valori di misura nel formato di streaming
- Supportano dati equidistanti e con timestamp
- Possono contenere valori singoli, vettori, matrici o dati binari
-
Blocco di chiusura opzionale
- In OSF4 trailer XML opzionale con statistica e panoramica dei canali
- In OSF5 questo trailer è assente per impostazione predefinita
Organizzazione dei dati
- Canali: ogni flusso di dati viene descritto come un canale che contiene nome, tipo di dato, unità fisica e, opzionalmente, ulteriori attributi.
- Base temporale: tutte le indicazioni temporali vengono memorizzate in nanosecondi dall'epoch e consentono una sincronizzazione di altissima precisione.
- Header del blocco: ogni blocco di dati inizia con un indice del canale e un'indicazione di lunghezza, in modo che il flusso rimanga interpretabile anche in presenza di canali sconosciuti o di interruzioni.
- Byte di controllo: definisce il tipo e la struttura del blocco di dati successivo (ad es. avvio, prosecuzione, tipo di timestamp). In OSF5 l'uso di questo byte è semplificato, ma rimane funzionalmente compatibile.
Magic header
Ogni file OSF inizia con il cosiddetto magic header. Ha due scopi:
- Identificazione univoca come file OSF.
- Indicazione della lunghezza del metablock successivo, in modo che possa essere letto e analizzato direttamente.
Struttura
Il magic header è una riga ASCII, terminata con un linefeed (\n).
Esempio OSF4:
OSF4 173762\n
- OSF4 è l'identificatore del formato.
- 173762 indica la lunghezza del metablock in byte.
Esempio OSF5:
OSF5 84512\n
- OSF5 contrassegna la nuova versione.
- 84512 Il numero indica la lunghezza del metablock, che in OSF5 è per impostazione predefinita JSON.
Identificatori supportati
Per ragioni di compatibilità, le implementazioni OSF riconoscono più header:
- OSF4 – classico file OSF4
- OCEAN_STREAM_FORMAT4 – identificatore legacy per file OSF4, ancora scritto nei dispositivi in commercio; deve essere supportato dai reader
- OCEAN_STREAMING_FORMAT4 – grafia storica meno recente; da interpretare anch'essa come OSF4
- OSF5 – file OSF5