Skip to main content

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)

Esempio 7. Esempio di file ASCII
ac_pm_ascii_file.png


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.

Esempio 8. Esempio di valore REAL memorizzato

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.

Esempio 9. Esempi

Oggetti

Formato compresso

Fb1.fb2.fb3.a

Fb1.fb2.fb3.a

Fb1.fb2.fb3.b

<b

Fb1.fb2.d

<<d

Fb4

FB4