Formato di archiviazione
Esistono due implementazioni dell'interfaccia IDataStorage
disponibile: ASCIIDataStorage
E BinaryDataStorage
.
In entrambi i formati la prima variabile memorizzata è la variabile riservata ___xCompressTags
di tipo BOOL
. Il suo valore determina se i percorsi delle istanze vengono archiviati compressi. Se viene scritto un oggetto di integrità, viene scritto come l'ultima variabile denominata ___Integrity
di tipo BOOL
con valore TRUE
. Tutte le variabili persistenti, tranne queste variabili riservate, vengono archiviate in ordine e ordinate in base al percorso completo dell'istanza. Non importa se i percorsi dell'istanza sono compressi o meno.
Suggerimento
Se i dati vengono modificati dall'utente, questi deve assicurarsi che venga mantenuto il corretto ordinamento.
Formato ASCII
ASCIIDataStorage
scrive nel file il percorso di ogni istanza delle variabili persistenti (possibilmente in formato compresso), il tipo di dati e il valore come stringa. Il nome e la data sono separati da un carattere di tabulazione (può essere modificato tramite parametro codbySeparator
). Quando l'archivio viene letto, verrà eseguita una conversione. Pertanto il file può essere modificato esternamente. Le righe devono essere separate da "\r\n" (convenzione di Windows). Le righe che iniziano con un punto e virgola verranno ignorate durante la lettura: questa riga non verrà aggiunta durante la scrittura dell'archivio.
Formato di un file ASCII:
{timestamp}\r\n {instance path}{bySeparator}{Typ}:{value}\r\n … {instance path}{bySeparator}{Typ}:{value}\r\n
Il timestamp determina l'ora in cui è stata attivata la memorizzazione. È scritto come DATE_AND_TIME letterale (esempio:
)DT#2012-01-11-15:11:09

Trattamento di REAL
E LREAL
variabili:
I valori delle variabili sono scritti come letterali ST. REAL
E LREAL
i valori vengono trattati diversamente, perché l'implementazione della conversione in e da frazioni decimali senza perdita di precisione. Tuttavia, per evitare qualsiasi perdita di precisione e per mantenere la leggibilità e la possibilità di modificare il file ASCII, questi valori vengono memorizzati in formato esadecimale. La frazione decimale (inesatta) viene aggiunta dopo il valore esadecimale come commento. Durante la lettura del file sono supportati sia il formato esadecimale che il formato decimale ST. Ciò consente all'utente di modificare la frazione decimale.
Il formato esadecimale è definito come segue:
F16#{Mantissa}H{Exp} | F16#NaN | F16#+Inf | F16#-Inf {Mantissa} ::= {HexNumeral} {Exp} ::= {HexNumeral} {HexNumeral} ::= [+-]?[1-9A-F][0-9A-F]*
Se m
è il valore della mantissa e e
il valore dell'esponente è superiore al valore del numero m * 16^e
.
lr1 LREAL:F16#F0H-3 0.05859375
Formato binario
BinaryDataStorage
salva i dati in un formato binario. Il timestamp segue quello (type DATE_AND_TIME
). Successivamente vengono elencate le variabili.
Archivi compressi
I valori delle variabili vengono memorizzati con percorso e nome (nel percorso non c'è né l'applicazione né il nome del dispositivo) in una ortografia compatta per risparmiare risorse e tempo.
In ogni caso (compressi o meno) i percorsi delle istanze devono essere ordinati in base al percorso completo dell'istanza. Questo ordinamento è alfabetico, per cui gli indici di array sono ordinati numericamente.
Oggetti | Formato compresso |
---|---|
|
|
|
|
|
|
|
|