Skip to main content

Formato de almacenamiento

Hay dos implementaciones de la interfaz. IDataStorage disponible: ASCIIDataStorage y BinaryDataStorage.

En ambos formatos la primera variable que se almacena es la variable reservada. ___xCompressTags de tipo BOOL. Su valor determina si las rutas de instancia se almacenan comprimidas. Si se escribe un objeto de integridad, entonces se escribe como la última variable denominada ___Integrity de tipo BOOL con valor TRUE. Todas las variables persistentes, excepto estas variables reservadas, se almacenan en orden y se clasifican según su ruta de instancia completa. No importa si las rutas de la instancia están comprimidas o no.

Sugerencia

Si el usuario modifica los datos, debe asegurarse de que se mantendrá el orden de clasificación correcto.

formato ASCII

ASCIIDataStorage escribe cada ruta de instancia de las variables persistentes (posiblemente en formato comprimido), el tipo de datos y el valor como una cadena en el archivo. El nombre y la fecha están separados por un carácter de tabulación (se puede cambiar por parámetro codbySeparator). Cuando se lea el archivo, se ejecutará una conversión. Por lo tanto, el archivo se puede modificar externamente. Las líneas deben estar separadas por "\r\n" (convención de Windows). Las líneas que comiencen con un punto y coma se ignorarán durante la lectura; esta línea no se agregará cuando se escriba el archivo.

Formato de un archivo ASCII:

{timestamp}\r\n
{instance path}{bySeparator}{Typ}:{value}\r\n
…
{instance path}{bySeparator}{Typ}:{value}\r\n

La marca de tiempo determina la hora en que se activó el almacenamiento. Está escrito como literal DATE_AND_TIME (ejemplo: DT#2012-01-11-15:11:09)

ejemplo 7. Ejemplo de un archivo ASCII
ac_pm_ascii_file.png


Tratamiento de REAL y LREAL variables:

Los valores de las variables se escriben como literales ST. REAL y LREAL Los valores se tratan de manera diferente, porque la implementación de la conversión a y desde fracciones decimales sin pérdida de precisión. Sin embargo, para evitar cualquier pérdida de precisión y mantener la legibilidad y la posibilidad de modificar el archivo ASCII, estos valores se almacenan en formato hexadecimal. La fracción decimal (inexacta) se agrega detrás del valor hexadecimal como comentario. Mientras se lee el archivo, se admiten el formato hexadecimal y el formato decimal ST. Esto permite al usuario modificar la fracción decimal.

El formato hexadecimal se define de la siguiente manera:

F16#{Mantissa}H{Exp} | F16#NaN | F16#+Inf | F16#-Inf
{Mantissa}   ::= {HexNumeral}
{Exp}        ::= {HexNumeral}
{HexNumeral} ::= [+-]?[1-9A-F][0-9A-F]*

Si m es el valor de la mantisa y e el valor del exponente que el valor del número es m * 16^e.

ejemplo 8. Ejemplo de un valor REAL almacenado

lr1 LREAL:F16#F0H-3 0.05859375



formato binario

BinaryDataStorage guarda los datos en formato binario. La marca de tiempo sigue a eso (escriba DATE_AND_TIME). Después de eso se enumeran las variables.

Archivos comprimidos

Los valores de las variables se almacenan con ruta y nombre (en la ruta no está ni la aplicación ni el nombre del dispositivo) en una ortografía compacta para ahorrar recursos y tiempo.

En cualquier caso (comprimidas o no), las rutas de instancia deben ordenarse según la ruta de instancia completa. Este orden de clasificación es alfabético, por lo que los índices de la matriz se ordenan numéricamente.

ejemplo 9. Ejemplos

Objetos

Formato comprimido

Fb1.fb2.fb3.a

Fb1.fb2.fb3.a

Fb1.fb2.fb3.b

<b

Fb1.fb2.d

<<d

Fb4

FB4