过程控制历史数据文件结构的建立方法和数据读写方法

文档序号:6581984阅读:160来源:国知局
专利名称:过程控制历史数据文件结构的建立方法和数据读写方法
技术领域
本发明涉及过程控制技术领域,特别是涉及一种过程控制历史数据文件结构的建 立方法和数据读写方法。
背景技术
过程控制在流程行业应用广泛,包括电力、石化、冶金、污水处理、水泥、化工、轨道交通等领域。比如对于锅炉来说,需要采集其不同部位测点的液位、温度和压力,或者管 道的流量等参数。流程行业属于M小时连续运行,随着时间的推移,采集的数据量越来越大,只能 用TB级来计量。在历史数据查询,问题追溯,数据分析时需要从这些日积月累的数据中快 速读取数据。现在历史数据的处理方法一般为采用及时读取,死区限制的方式对数据进行压 缩;然后采用顺序写入的方法对数据进行记录,并采用单向链表的形式对前后数据进行链 接,写入数据采用周期性写入数据,每次写入的数据时间长度不固定;在读取历史数据时, 采用从单个文件头开始顺序搜索的方式,直到找到所需数据位置。这种数据处理方法数据 压缩方法简单,数据压缩率低,占用磁盘空间大;采用单向链表的文件存储结构,导致只能 采用顺序搜索的方式进行数据读取,大部分时间都浪费在无效数据的遍历上,导致数据读 取速度慢。

发明内容
本发明要解决的技术问题是为了克服现有技术数据压缩率低,占用磁盘空间大, 数据读取速度慢的缺陷,提供一种节约磁盘空间,提高数据读取速度的过程控制历史数据 文件结构的建立方法和数据读写方法。本发明是通过下述技术方案来解决上述技术问题的—种过程控制历史数据文件结构的建立方法,其特点在于,其包括以下步骤S1、建立文件头,在文件头中写入文件标识信息;S2、建立索引区,将索引区划分为测点描述区和数据地址区,其中测点描述区存储 有测点唯一数字标识、数据区起始地址和数据区长度,数据地址区中的数据地址是历史数 据每次写入固定时间长度数据时在历史数据文件中的起始地址;S3、建立数据区,用于保存写入的测点历史数据,其中每个测点的所有数据都存放 在至少一块连续存储区域上。较佳地,索引区为测点建立索引,以所述测点唯一数字标识为索引关键字,测点按 该索引关键字以升序或降序排列。较佳地,步骤&中所述的测点描述区还存储有测点名称、采集周期信息。本发明提供的另一技术方案为一种过程控制历史数据的存储方法,其特点在于, 其包括以下步骤
T1、如权利要求1的方法建立历史数据文件;T2、搜索索引区,根据所述测点唯一数字标识,找到需要写入数据的测点所在的索 引位置,获取测点所在索引区信息;T3、根据测点所在索引区信息,获取数据写入地址,在数据写入地址处写入数据。较佳地,在步骤T3中,当前数据写入的结束地址,作为该测点下一次数据写入的起 始地址。较佳地,在步骤T2中,找到需要写入数据的测点所在的索引位置时采用二分查找 法、分块查找法或顺序查找法。较佳地,在步骤T3中,数据采用块写入的方式,一次将测点需要写入的数据全部写 入。较佳地,在写入数据之前对数据进行压缩,数据压缩过程包括以下步骤T31、死区滤波计算当前采集值与上次采集值的偏差,如果偏差绝对值在死区范围 内,则取上次采集值,其中该死区为一预设的数值范围;T32、斜率压缩将前后采集周期的数据变化等效于直线的斜率y-九=ka-、),其 中y为采集数据值,y0为初始采集数据值,k为斜率,t为采集数据值y对应的采集时间点, 、为%对应的采集时间点;如果采集数据值的变化处于同一直线上,那么用初始值(、,%) 和斜率k即可表示直线上的所有数据,只要输入时间参数t,即可计算出对应值y。较佳地,在步骤T32之后还包括一步骤T33、类曲线拟合压缩在前后相同时间段内, 如果数据变化规律一致,则直接采用指针指向前一时间段数据,保留数据初值,数据长度不 增加。本发明提供的又一技术方案为一种过程控制历史数据的查询方法,其特征在于, 该方法用于查询如权利要求1的方法建立的历史数据文件,其包括以下步骤仏、搜索索引区,首先根据所述测点唯一数字标识,找到需要读取数据的测点所在 的索引位置,获取测点所在索引区信息;队、获取所述测点数据区起始地址和数据区长度,并计算所述测点数据地址区的 起始地址;U3、根据所述测点数据区起始地址、数据区长度,读入测点数据;根据所述测点数 据地址区的起始地址,数据地址个数,单个数据地址结构长度读入测点数据地址;U4、根据 需要读取数据的时间,计算出该时间对应的数据所在的固定时间长度数据的数据地址;再 根据数据区起始地址计算出固定时间长度数据的数据地址偏移;U5、根据该数据地址偏移,以及读取数据时间在该固定时间长度内的时间偏移,从 读入内存的数据中获取所需要读取的数据值。较佳地,在步骤U3中,数据地址个数由设定的单个文件记录历史数据的时间长度 和每次写入的测点数据对应的固定时间长度决定,单个数据地址结构长度为固定值。较佳地,在步骤U4中,根据该时间对应的数据所在的数据地址减去数据区起始地 址,得到数据地址偏移。较佳地,在步骤U3中,一次将连续存储的数据块全部读入内存,然后在内存中进行 数据操作。较佳地,在步骤仏中,找到需要读取数据的测点所在的索引位置时采用二分查找法、分块查找法或顺序查找法。本发明提供的再一技术方案为一种过程控制历史数据的快速处理方法,其特征 在于,其包括以下步骤按照前述的数据存储方法将数据存储到历史数据文件中,再按照前 述的数据查询方法查询到所需数据。本发明的积极进步效果在于本发明中的数据压缩方法用于实时数据采集时数据 的压缩处理,减少磁盘空间占用;文件结构定义方法用于建立历史数据存储的文件结构,保 证数据结构合理便于数据快速存取;数据写入方法用于将数据写入历史数据文件;数据查 询方法用于快速查询历史数据。所以,本发明的效果可总结为以下几点1.通过多种方式相结合的数据压缩,可以大大节约磁盘空间。2.采用整块写入和内存映射的方式提高了数据存储速度。3.通过单个测点数据连续存储,快速搜索,整块读取的方式,大大提高了数据读取 速度。


图Ia是传统的测点数据存储模式示意图。图Ib是本发明的测点数据存储模式示意图。图2是本发明实施例1的_女据处理总体框架图。图3是本发明实施例1的历史数据文件结构图。图4是本发明实施例1的_女据压缩中死区滤波和斜率压缩流程图。图5是本发明实施例1的_女据压缩中类曲线拟合流程图。图6是本发明实施例1的_女据存储流程图。图7是本发明实施例1的_女据查询流程图。图8是本发明实施例2的历史数据文件结构图。图9是本发明实施例2的测点连续存储空间分配方法的流程图。
具体实施例方式下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。首先,本发明过程控制快速数据处理方法的基本思想是以小时,数个小时或以天 为单位建立历史数据收集文件,即一个历史数据文件记录一个小时或多个小时或一天的所 有测点历史数据。在一个历史数据文件中,每个测点的历史数据都是存储在连续的地址空 间。如图Ia和Ib中,有两个测点A和B,图Ia为传统的所有测点数据连续存储的模式,即 每个写入周期,所有写入测点的数据是连续存储的;而图Ib为本发明采用的数据分块存储 结构,即每个测点的数据占用一块存储区域,每个测点的所有数据都存放在同一块连续存 储区域。每个历史文件都包括索引区和数据区两部分。写入之前对数据进行压缩;每次写 入时,写入固定时间长度的数据,如以一个小时为单位建立历史数据文件,每次写入两分钟 时间长度的数据,只要测点数据时间长度满两分钟,即将该测点数据写入历史数据文件;读 取时,一次读入测点的整个数据块,在内存中进行数据处理。总的来说,本发明的过程控制历史数据的快速处理方法,摒弃了传统的简单数据压缩、顺序写入的数据处理方法,而是采用了多级的数据压缩方法,采用数据整块写入模 式,文件结构采用索引+数据块模式,数据读取采用整块读入,内存处理的模式,从而提高 了数据压缩率,数据写入和读取速度。实施例1下面对分别对本发明中的数据压缩、文件结构定义、数据写入方法、数据查询方法 加以具体的说明。如图2所示,本发明的过程控制历史数据的快速处理方法,总体上包括以下步骤 实时数据获取,实时数据压缩,实时数据写入,历史数据读取。步骤101,实时数据获取,是获取过程控制的实时数据,是本发明的前提,为现有技 术,不再赘述。步骤102,实时数据压缩,对获取的实时数据进行分级压缩,在保持数据精度的基 础上,尽量提高数据压缩率。步骤103,实时数据写入,采用整块写入方式减少文件写入次数,提高数据写入速 度。其中历史数据文件104采用了优化的文件结构索引方式,索引按测点唯一标识顺序排 序,数据区按块分配,方便写入与读取。步骤105,历史数据读取,按照索引区搜索,数据整块读入,内存处理的方式,减少 文件访问次数,提高了数据读取速度。上述步骤101 105,本领域技术人员是可以根据其知晓的相关知识和本说明书 公开的内容去具体的实现的。一、文件结构定义如图3所示,为一种过程控制历史数据文件结构的建立方法,以及由该方法建立 的文件结构。其中,建立方法包括以下步骤1、建立文件头,在文件头中写入文件标识信息; 2、建立索引区,将索引区划分为测点描述区和数据地址区,其中测点描述区存储有测点唯 一数字标识、数据区起始地址和数据区长度,数据地址区中的数据地址是历史数据每次写 入固定时间长度数据时在历史数据文件中的起始地址;3、建立数据区,用于保存写入的测 点历史数据,其中每个测点的所有数据都存放在同一块连续存储区域上,或者2块,最好不 要超过3块连续存储区域上。上述步骤1 3,本领域技术人员是可以根据其知晓的相关知 识和本说明书公开的内容去具体的实现的。本发明的文件结构,采用索引+分块存储的方 法,保证数据快速存取。其采用索引区+数据区的方式存储数据,索引区为测点(数据采集 点,以下统一称为测点)建立索引,索引区以测点的唯一数字标识为索引关键字,并按索引 关键字以升序或降序排列,以提高索引区搜索速度。文件结构包括三大部分。1、文件头文件头主要写入一些辅助信息,包括文件标识信息,版本号等。2、索引区,索引区包括测点描述区,数据地址区两部分。测点描述区记录了测点的 基本信息,包括测点唯一数字标识,测点名,采集周期,数据区起始地址,数据区长度等。数 据地址区记录了每次测点数据写入时的写入起始地址和数据长度。索引区包括测点数据区起始地址和测点数据地址,这两个概念需要分清楚。所谓 测点数据区起始地址,即是测点数据在文件中连续存储区域的起始地址,每个测点都分配 有连续存储区域,并且文件中每个测点的所有数据都存在自己的连续存储区域上。每个测点数据区开始地址和数据块长度表征了文件中每个测点连续存储数据区的开始地址和数 据区的长度。所谓测点数据地址,即是每次写入固定时间长度数据(譬如每次写入2分钟时间 长度的数据)的写入起始地址,测点数据地址必然在测点连续存储区域内。数据地址是每 次写入固定时间长度的测点数据在历史数据文件中的起始地址。为了提高数据写入与读取速度,每个测点都有唯一的数字标识,并且测点按照数 字标识大小排序(升序或降序),这样测点描述是有序的,数据地址的排列顺序与测点描述 相对应,也是有序的。这样在索引区可以通过测点唯一数字标识,采用二分法、分块查找、顺 序查找(该3种方法均为现有技术)等搜索算法进行快速搜索。3、数据区,数据区保存写入的测点历史数据,数据区打破传统的所有测点数据连 续存储的模式,而采用数据分块存储的结构,即每个测点的数据占用一块存储区域,每个测 点的所有数据都存放在同一块连续存储区域。这样可以减少读取文件时的文件访问次数, 提高数据查询速度。二、数据压缩图4为数据写入之前的数据压缩中死区滤波和斜率压缩的流程。所谓死区滤波, 死区为克服现场数据扰动的门限值,死区的设定跟具体的工程应用环境有关,由工程、设计 人员设定。死区也即是测点值在死区范围内波动时,认为是合理,真实数据没有发生变化, 仍然取上次采集值。数据压缩首先采用死区判断方法,剔出数据毛刺,在死区范围内的数据 认为是同一数据,对数据进行初步压缩。死区判断方法用于消除外部扰动或传感器精度所 引起的数据波动。其具体步骤包括步骤201,用当前采集值减去上次采集值计算出偏差;步骤202,判断偏差绝对值是否在死区范围内;步骤203,如果是,则取上次采集值,偏差计数加1。斜率压缩,斜率压缩根据测点值的变化情况对数据进行压缩,前后采集周期的数 据变化等效于直线的斜率,如果连续多个采集周期,测点的数据变化完全一致,即斜率相 同,那么这些数据都处于同一直线上,用简单的直线方程就可表示数据的变化过程,从而实 现对数据进行压缩。采用斜率计算方法,判断数据变化,斜率相同,偏差计数加1,数据长度 不增加,对数据进行压缩。若以测点数据采集周期为单位,则斜率等效于偏差。斜率压缩结合了直线方程的概念,任一直线都可以用斜率方程进行表示y-yQ = k (t-t0),其中y为采集数据值,y0为初始采集数据值,k为斜率,t为采集数据值y对应的采 集时间点,t0为%对应的采集时间点;如果值的变化处于同一直线上,那么用初始值(、, y(l),斜率k,即可表示直线上的所有数据,只要输入时间参数t,即可计算出对应值y。过程数 据包括数据值和数据品质,对数据品质判断进行数据压缩同一品质且满足前面两步(指 死区滤波和斜率压缩)要求的,偏差计数加1,数据长度不增加。其具体步骤包括步骤204,如果步骤202中判断偏差绝对值不在死区范围内,则将前后两次偏差值 比较;步骤205,判断前后两次偏差值是否相等;步骤206,如果是,则取上次采集值,偏差计数加1。利用公式y-y(1 = ka-、),只 要输入时间参数t,即可计算出对应值y。
步骤207,如果前后两次偏差值不相等,则新建采集结构,返回步骤201。上述步骤201 207,本领域技术人员是可以根据其知晓的相关知识结合本说明 书公开的内容去具体的实现的。图5为本发明中数据压缩中类曲线拟合流程。死区滤波和斜率压缩是对写入周 期内(比如一个写入周期2分钟内不同时间点)数据的压缩处理,类曲线拟合则是对前后 不同写入周期(比如前面一个2分钟的周期和后面一个2分钟的周期)的数据比较分析, 进行数据压缩处理。类曲线拟合是在死区滤波、斜率压缩处理的基础上,对数据进行进一步 压缩。类曲线拟合对前后写入周期的数据进行分析,如果变化规律完全一致,那么当前周期 (比如2分钟)的数据不用写入文件,只需指向前一写入周期的数据起始地址,并保存初始 值即可。其具体步骤包括步骤301,判断固定时间长度数据采集是否完成;步骤302,如果是,则将前后两次固定时间长度数据比较;步骤303,判断变化规律是否一致;步骤304,如果一致,则采用指针指向前次固定时间长度数据,不用写入本次固定 时间长度数据;步骤305,如果不一致,则写入本次固定时间长度数据。上述步骤301 305,本领域技术人员是可以根据其知晓的相关知识结合本说明 书公开的内容去具体的实现的。三、数据存储流程所述数据写入(即存储)方法,每次写入固定时间长度的数据,并采用快速搜索, 快速写入的方法进行数据写入。每次写入固定时间长度数据,即测点数据采用周期性写入 的方式,并且每次写入固定时间长度的测点数据,这样便于数据查询。采用内存映射文件的 方式对文件进行操作,减少物理磁盘访问次数,提高数据存储速度。通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区 域,内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,而 且在对该文件进行操作之前首先对文件进行映射,就如同将整个文件从磁盘加载到内存。 由此可以看出,使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O 操作,这意味着在对文件进行处理时将不必再为文件申请并分配缓存,所有的文件缓存操 作均由系统直接管理,由于取消了将文件数据加载到内存、数据从内存到文件的回写以及 释放内存块等步骤,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用, 速度得到大大提高。对于新建历史数据文件,首先写入索引区信息,为每个测点分配连续存储区域,计 算测点数据首次写入地址,以后的测点数据写入地址紧接着前一次测点数据写入的结束地 址;对于已存在历史数据文件,在启动数据收集时,首先采用二分法对索引区进行搜索,得 到测点数据写入地址,以后的测点数据写入地址紧接着前一次测点数据写入的结束地址。 数据采用块写入方式,即一次将测点需要写入的数据全部写入,减少物理磁盘访问次数,提 高数据写入速度。图6为其具体步骤,包括步骤401,判断历史文件是否存在,如果历史数据文件不存在则需要进入步骤402,新建历史数据文件,新建历史数据文件的工作主要包括步骤403,建立新历史数据文 件,写历史数据文件头,写历史数据文件索引区。历史数据文件头,索引区的结构和写入方 法参见图3及上述2. 1节中相关文字说明。如果历史数据文件存在,则直接进行步骤404,索引区搜索,索引区搜索根据测点 的唯一数字标识,可以采用二分查找、分块查找、顺序查找等搜索算法,找到需要写入数据 的测点所在索引位置。步骤405,根据读取的索引区信息,计算出数据写入地址。参考图3,本实施例中 的数据写入地址的计算方法如下1、测点描述区内每个测点的测点描述区结构是一致的, 即每个测点描述区长度是固定的;2、测点数据地址区内,每个测点的数据地址个数和数据 地址结构长度是一致的,即每个测点的数据地址区长度是一致的。在上述第1、2点的前提 下,通过二分法在索引区的测点描述区域找到测点描述所在位置,如i,即查找的测点在 测点描述区的位置i处,则对应的,查找的测点的数据地址起始位置也在测点数据地址区 的位置i处,从而可以读取查找测点的所有数据地址,数据长度,找到最后一个不为0的数 据地址DataAddr,数据长度DataLen,那么,DataAddr+DataLen,即是该测点的当前数据写 入地址。因为前面不为0的数据地址都已经有写入的数据了。本步骤中的数据写入方法 不限于上面所述的方法,本领域技术人员可采用其他方法计算出数据写入地址,并且上述 DataAddr, DataLen为编程中自定义的变量名称,本领域技术人员可根据需要自行定义。步骤406,在数据写入地址处写入数据,并把数据写入的结束地址,作为该测点下 一次数据写入的起始地址。在数据写入之前也可以先对数据按2. 2节进行压缩,以减少磁盘空间占用。上述步骤401 406,本领域技术人员是可以根据其知晓的相关知识结合本说明 书公开的内容去具体的实现的。四、数据查询流程本发明的数据查询方法,采用整块读取的方法,结合前述文件结构定义进行数据 快速查询。采用二分法对索引区进行搜索,提高索引区搜索速度,得到数据区地址,以及数 据地址区地址。采用整块读取的方式,将数据,数据地址读入内存再进行处理,减少物理磁 盘访问次数,提高数据查询速度。所谓整块读取,是指一次将连续存储的数据区全部读入内存,然后在内存中进行 数据操作,这样减少了物理磁盘的访问次数。本发明的整块读入,包括测点数据的整块读 入和测点数据地址区的整块读入。所谓内存处理,是指数据及数据地址整块读入后,根据查 询的时间计算出需要读取数据所在的数据地址,根据数据地址减去数据区起始地址得到需 要读取数据的数据偏移地址,然后根据数据偏移地址及需要读取的数据所在的时间从读入 的数据中获取数据。图7为其具体步骤,包括步骤501,索引区搜索,首先读入测点索引区测点描述信息;步骤502,根据测点唯一数字标识,采用二分法对索引区进行搜索,找到需要读取 数据的测点所在索引区位置。步骤503,根据测点描述信息计算测点数据区起始地址,获取数据区长度。本实施 例中的测点数据地址区起始地址计算方法如下设有测点总个数m,单个测点描述区长度 为TagDescrLen,单个测点数据地址区长度为=TagAddrLen,对测点TagN通过二分法查找到其在测点描述区的第i个测点描述处,则对应地,测点数据区也在索引测点数据地址区的 第i个数据地址区,则测点数据地址区的起始地址为^^agDescrLen+i^agAddrLen。本步 骤中的数据写入方法不限于上面所述的方法,本领域技术人员可采用其他方法计算出数据 区起始地址,并且上述iTagDescrLen, TagAddrLen, TagN为编程中自定义的变量名称,本领 域技术人员可根据需要自行定义。步骤504,根据测点数据区起始地址,数据区长度,整块读入测点数据;根据测点 地址区起始地址,数据地址个数,单个数据地址结构长度整块读入测点数据地址得到数据 地址数组AddrArray (自定义的变量名称)。其中,数据地址个数由设定的单个文件记录历 史数据的时间长度和每次写入的测点数据对应的固定时间长度决定。如设定一个文件记 录一天的历史数据,每次写入两分钟的数据长度,那么数据地址个数为24*60/2 = 720个 数据地址。单个数据地址结构长度为固定值,如若设数据地址DW0RD型,固定时间长度内 数据长度W0RD型,则单个数据地址结构长度为6个字节。步骤505,根据需要读取数据的时间,计算出对应数据所在的数据地址,即计算 出需要读取的数据在哪一个数据写入周期对应的数据区间,计算方法为设历史数据开 始收集时间(即历史数据文件建立时间)为H时M分S秒,查询的数据时间为h时m 分s秒,每次写入2分钟时间长度的数据,则需要读取数据所在的数据地址数组索引为 AddrIndex =取整(((h_H) *3600+ (m_M) *60+ (s_S)) / (2*60)),则得到读取数据所在地址 为AddrArray [AddHndex],再根据数据区起始地址计算出数据地址偏移。数据地址减去数 据区起始地址可得到需要读取数据的数据地址偏移。本步骤中的计算出对应数据所在的数 据地址的方法不限于上面所述的方法,本领域技术人员可采用其他方法计算出对应数据所 在的数据地址,并且上述iTagDescrLen, TagAddrLen, TagN为编程中自定义的变量名称,本 领域技术人员可根据需要自行定义。步骤506,根据数据地址偏移,以及读取数据的时间,计算在所在固定时间长度内 的读取时间偏移(单位为秒),以每次写入2分钟时间长度的数据为例,计算方法为取余 (((h-H) *3600+ (m-M) *60+ (s-S)) / (2*60)),从读入内存的数据中,获取所需要读取的数据 值。本步骤中的计算在所在固定时间长度内的读取时间偏移的方法不限于上面所述的方 法,本领域技术人员可采用其他方法计算出在所在固定时间长度内的读取时间偏移,并且 上述TagDescrLen,TagAddrLen, TagN为编程中自定义的变量名称,本领域技术人员可根据 需要自行定义。上述步骤501 506,本领域技术人员是可以根据其知晓的相关知识结合本 说明书公开的内容去具体的实现的。实施例2本实施例与实施例1的不同在于实施例1中每个测点的所有数据都存放在同一 块连续存储区域上,而本实施例每个测点的所有数据存储在最多3块连续存储区域上。并 且,在数据查询时就首先要确定数据所在的是哪一个数据区。本实施例中的其他部分,与实 施例1中的相同。数据要连续存储就必须为测点分配连续存储空间,然而在历史数据收集开始,无 法确定测点数据的变化规律,因此无法为测点分配合适的连续存储空间。为使分配的存储 空间更为合理,本实施例中采用动态分配,逐次逼近的动态分配方法为测点分配连续存储 空间,使测点的存储空间限制在最多3块连续存储区域内。具体描述如下,连续存储空间分配的基础测点收集的存储数据结构,写入数据的固定时间长度,单个历史数据文件存储时 间长度。具体分配步骤为步骤601,根据测点的存储数据结构,每次写入数据的固定时间长度,单个历史数 据文件存储时间长度,在数据没有得到压缩的情况下,计算单个历史数据文件中测点将占 据的存储空间。步骤602,为测点分配计算出存储空间的十分之一。举例说明如下设每次写入数 据的固定时间长度为Tftite分钟(如两分钟),每个文件存储TFile个小时(如1个小时) 的数据,数据变化完全没有规律,不能进行压缩,每次采集的固定时间长度内数据长度为 CycleDataLen,则单个测点在单个历史数据文件中占据的存储空间I^agDataLernnFile为TagDataLenInFile = (60*TFile/TWrite) *CycIeDataLen ;为测点首次分配的连续空间大小TagDataLenAllocated为TagDataLenAllocated = TagDataLenInFile/10步骤603,在第一步分配的空间不足的情况下,继续为测点分配连续存储空间,分 配空间的方法为首先根据已用空间计算每个固定时间长度的平均使用空间大小,然后步 骤604,根据单个历史数据文件剩下的还需写入的固定时间长度个数,为测点分配连续存储 空间。举例说明如下设已经写入了 k个固定时间长度数据,还需要写入m个固定时间长度 的数据,则根据第一步分配的空间,计算测点的平均占用空间大小AverageLen为AverageLen = TagDataLenAllocated/k ;则第二步应该分配的连续存储空间为fTagDataLenAllocatedAgain TagDataLenAllocatedAgain = AverageLen^m ;步骤605,在第二步分配空间不足的情况下,继续为测点分配连续存储空间,分配 空间的方法为根据剩下的还需写入的固定时间长度个数m,为测点最大化分配连续存储 空间,即以数据不压缩的情况为测点最大化分配所需剩余空间。举例说明如下设还剩余 m个固定时间长度的数据需要写入,则还需为测点分配的空间TagDataLenAlIocatedLast 为TagDataLenAlIocatedLast = AverageLen^m ;通过以上方法对测点进行存储空间分配,既实现了测点连续存储,同时也避免了 存储空间分配过大或不足的情况。上述CycleDataLen,TagDataLenAllocated,AverageLen 等参数为编程中自定义的变量名称,本领域技术人员可根据需要自行定义。上述步骤601 605,本领域技术人员是可以根据其知晓的相关知识结合本说明 书公开的内容去具体的实现的。基于上述分配的3块数据区,确定数据所在的是哪一个数据区的方法为1、按照实施例1中的方法,读取测点描述区时,读入测点的3个数据区的起始地址 和数据区长度。2、按照实施例1中的方法,从测点数据地址区读入测点数据地址,得到需要读取 的测点数据所在固定时间长度的数据地址。3、将第2步所得的数据地址分别与第1步所得的3个数据区起始地址,数据长度 进行比较,就能判断出数据所在的数据区。进而得到读取数据所在的数据区起始地址和数据长度。需要读取的数据所在数据区的判断方法举例说明如下设需要读取的数据所在地址为=DataAddr, 3个数据区的起始地址和数据长度分 别 为[DataZoneBeginAddrl, DataZoneLenl], [DataZoneBeginAddr2, DataZoneLen2], [DataZoneBeginAddr3, DataZoneLen3],则判断方法为If(DataZoneBeginAddrl < DataAddr < (DataZoneBeginAddrl+DataZoneLenl)) 则需要读取的数据在数据区1内;If(DataZoneBeginAddr2 < DataAddr < (DataZoneBeginAddrl+DataZoneLen2)) 则需要读取的数据在数据区2内;If(DataZoneBeginAddr3 < DataAddr < (DataZoneBeginAddr3+DataZoneLen3)) 则需要读取的数据在数据区3内。上述DataAddr, DataZoneBeginAddrl, DataZoneLenl 等参数为编程中自定义的变 量名称,本领域技术人员可根据需要自行定义。上述步骤1 3,本领域技术人员是可以根 据其知晓的相关知识结合本说明书公开的内容去具体的实现的。虽然以上描述了本发明的具体实施方式
,但是本领域的技术人员应当理解,这些 仅是举例说明,在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变 更或修改。因此,本发明的保护范围由所附权利要求书限定。
权利要求
1.一种过程控制历史数据文件结构的建立方法,其特征在于,其包括以下步骤51、建立文件头,在文件头中写入文件标识信息;52、建立索引区,将索引区划分为测点描述区和数据地址区,其中测点描述区存储有测 点唯一数字标识、数据区起始地址和数据区长度,数据地址区中的数据地址是历史数据每 次写入固定时间长度数据时在历史数据文件中的起始地址;&、建立数据区,用于保存写入的测点历史数据,其中每个测点的所有数据都存放在至 少一块连续存储区域上。
2.如权利要求1所述的过程控制历史数据文件结构的建立方法,其特征在于,索引区 为测点建立索引,以所述测点唯一数字标识为索引关键字,测点按该索引关键字以升序或 降序排列。
3.如权利要求1或2所述的过程控制历史数据文件结构的建立方法,其特征在于,步骤 &中所述的测点描述区还存储有测点名称、采集周期信息。
4.一种过程控制历史数据的存储方法,其特征在于,其包括以下步骤T1、如权利要求1的方法建立历史数据文件;T2、若是新建历史数据文件,则将为每个测点分配的连续存储空间的起始地址作为测 点数据的首次写入地址;若是已存在历史数据文件,则搜索索引区,根据所述测点唯一数字 标识,找到需要写入数据的测点所在的索引位置,获取测点在此之前最后一次写入的结束 地址,并将其作为此次数据写入地址;T3、在数据写入地址处写入数据。
5.如权利要求4所述的过程控制历史数据的存储方法,其特征在于,在步骤T3中,当前 数据写入的结束地址,作为该测点下一次数据写入的起始地址。
6.如权利要求4所述的过程控制历史数据的存储方法,其特征在于,在步骤T2中,找到 需要写入数据的测点所在的索引位置时采用二分查找法、分块查找法或顺序查找法。
7.如权利要求4所述的过程控制历史数据的存储方法,其特征在于,在步骤T3中,数据 采用块写入的方式,一次将测点需要写入的数据全部写入。
8.如权利要求4所述的过程控制历史数据的存储方法,其特征在于,在写入数据之前 对数据进行压缩,数据压缩过程包括以下步骤T31、死区滤波计算当前采集值与上次采集值的偏差,如果偏差绝对值在死区范围内, 则取上次采集值,其中该死区为一预设的数值范围;T32、斜率压缩将前后采集周期的数据变化等效于直线的斜率= ka-、),其中y 为采集数据值,Y0为初始采集数据值,k为斜率,t为采集数据值y对应的采集时间点,、为 %对应的采集时间点;如果采集数据值的变化处于同一直线上,那么用初始值(、,%)和斜 率k即可表示直线上的所有数据,只要输入时间参数t,即可计算出对应值y。
9.如权利要求8所述的过程控制历史数据的存储方法,其特征在于,在步骤T32之后还 包括一步骤T33、类曲线拟合压缩在前后相同时间段内,如果数据变化规律一致,则直接采 用指针指向前一时间段数据,以使此次数据地址与上次数据地址一致,保留数据初值即可。
10.一种过程控制历史数据的查询方法,其特征在于,该方法用于查询如权利要求1的 方法建立的历史数据文件,其包括以下步骤U1、搜索索引区,首先根据所述测点唯一数字标识,找到需要读取数据的测点所在的索引位置,获取测点所在索引区信息;U2、获取所述测点数据区起始地址和数据区长度,并计算所述测点数据地址区的起始 地址;U3、根据所述测点数据区起始地址、数据区长度,读入测点数据;根据所述测点数据地 址区的起始地址,数据地址个数,单个数据地址结构长度读入测点数据地址;U4、根据需要读取数据的时间,计算出该时间对应的数据所在的固定时间长度数据的 数据地址;再根据数据区起始地址计算出该固定时间长度数据的数据地址偏移;U5、根据该数据地址偏移,以及读取数据时间在该固定时间长度内的读取时间偏移,从 读入内存的数据中获取所需要读取的数据值。
11.如权利要求10所述的过程控制历史数据的查询方法,其特征在于,在步骤U3中,数 据地址个数由设定的单个文件记录历史数据的时间长度和每次写入的测点数据对应的固 定时间长度决定,单个数据地址结构长度为固定值。
12.如权利要求10所述的过程控制历史数据的查询方法,其特征在于,在步骤U4中,根 据该时间对应的数据所在的数据地址减去数据区起始地址,得到数据地址偏移。
13.如权利要求10所述的过程控制历史数据的查询方法,其特征在于,在步骤U3中,一 次将连续存储的数据块全部读入内存,然后在内存中进行数据操作。
14.如权利要求10所述的过程控制历史数据的查询方法,其特征在于,在步骤仏中,找 到需要读取数据的测点所在的索引位置时采用二分查找法、分块查找法或顺序查找法。
15.一种过程控制历史数据的快速处理方法,其特征在于,其包括以下步骤按照如 权利要求4-9中任意一项所述的方法将数据存储到历史数据文件中,再按照如权利要求 10-14中任意一项所述的查询方法查询到所需数据。
全文摘要
本发明公开了一种过程控制历史数据文件结构的建立方法,其包括以下步骤S1、建立文件头,在文件头中写入文件标识信息;S2、建立索引区,将索引区划分为测点描述区和数据地址区,数据地址区中的数据地址是历史数据每次写入固定时间长度数据时在历史数据文件中的起始地址;S3、建立数据区,用于保存写入的测点历史数据,其中每个测点的所有数据都存放在最多三块连续存储区域上。本发明还公开了一种过程控制历史数据的存储方法和查询方法。本发明通过多种方式相结合的数据压缩,可以大大节约磁盘空间;采用整块写入和内存映射的方式提高了数据存储速度;通过单个测点数据连续存储,快速搜索,整块读取的方式,大大提高了数据读取速度。
文档编号G06F17/30GK102043795SQ20091019702
公开日2011年5月4日 申请日期2009年10月13日 优先权日2009年10月13日
发明者刘伟, 周林荣, 李培植, 田春伟, 邹泽明 申请人:上海新华控制技术(集团)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1