Skip to main content

存储格式

该接口有两种实现方式 IDataStorage 可用的: ASCIIDataStorageBinaryDataStorage

在这两种格式中,存储的第一个变量是保留变量 ___xCompressTags 类型的 BOOL。它的值确定实例路径是否以压缩方式存储。如果写入完整性对象,则将其写入名为最后一个变量 ___Integrity 类型的 BOOL 有价值 TRUE。除了这些保留变量之外的所有持久变量都按顺序存储并按其完整实例路径排序。实例路径是否压缩并不重要。

提示

如果用户修改了数据,他必须确保保持正确的排序顺序。

ASCII 格式

ASCIIDataStorage 将持久变量的每个实例路径(可能以压缩格式)、数据类型和值作为字符串写入文件中。名称和日期由制表符分隔(可以通过参数更改 codbySeparator)。当读取存档时,将执行转换。因此可以从外部修改该文件。行必须用“\r\n”分隔(Windows 约定)。以分号开头的行在读取时将被忽略 - 写入存档时不会添加该行。

ASCII 文件的格式:

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

时间戳决定了存储被触发的时间。它被写为 DATE_AND_TIME 文字(例如: DT#2012-01-11-15:11:09

7. ASCII 文件示例
ac_pm_ascii_file.png


治疗 REALLREAL 变量:

变量的值被写为 ST 文字。 REALLREAL 值的处理方式不同,因为执行与小数之间的转换不会损失准确性。然而,为了避免任何准确性损失并保持可读性和修改 ASCII 文件的可能性,这些值以十六进制格式存储。 (不精确的)十进制小数作为注释添加在十六进制值后面。读取文件时,支持十六进制格式以及ST十进制格式。这允许用户修改小数部分。

十六进制格式定义如下:

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

如果 m 是尾数的值, e 指数的值与数字的值之比为 m * 16^e

8. 存储 REAL 值的示例

lr1 LREAL:F16#F0H-3 0.05859375



二进制格式

BinaryDataStorage 以二进制格式保存数据。时间戳如下(类型 DATE_AND_TIME)。之后列出变量。

压缩档案

变量值与路径和名称(在路径中既没有应用程序也没有设备名称)一起以紧凑的拼写存储,以节省资源和时间。

在任何情况下(压缩与否),实例路径都必须按完整实例路径的顺序排序。此排序顺序是按字母顺序排列的,因此数组索引按数字顺序排序。

9. 例子

对象

压缩格式

Fb1.fb2.fb3.a

Fb1.fb2.fb3.a

Fb1.fb2.fb3.b

<b

Fb1.fb2.d

<<d

Fb4

FB4