发明内容
本发明的目的在于提供一种配网FTU定点文件管理方法及装置,用于解决现有技术中的文件管理过程占用大量内存、文件管理复杂度高的问题。
为实现上述目的,本发明的技术方案为:
本发明提供了一种配网FTU定点文件管理方法,包括如下步骤:
1)在存储器中建立数据区和临时文件区,将定点数据存储到数据区中;
2)当需要进行定点数据上送时,在数据区中查找该定点数据并将查到的定点数据进行格式转换,并存储至临时文件区中的定点文件中,通过临时文件区将所述定点文件上送。
本发明中通过在存储器中建立数据区和临时文件区,通过只存储需要的动态数据,有效降低了磁盘空间的占用,并且将非常耗费内存资源的xml模型操作转换为直接对存储器的操作,以极小的内存开销实现定点数据的存储与管理,在保证高性能的前提下降低了文件管理的复杂度和资源消耗,有效降低了产品成本。
进一步的,为了方便对FLASH中的数据进行调取,不使用文件系统,以块为单位直接操作存储器,不会产生磁盘碎片,所述数据区被分为一个信息数据块和N个文件数据块,每天的定点数据占用一个文件数据块,各文件数据块用于按条目存储定点数据,每个条目包括定点数据本身及对应采集时间,信息数据块用于存储文件数据块的属性信息,所述属性信息包括当前文件数据块的采集日期和已存条目数,属性信息的位置下标作为每个文件数据块的索引,N≥1。
进一步的,按日期进行数据的调取和上送时,为了提高数据传输效率,当需要进行定点数据上送时,根据需要上送数据的日期从信息数据块中查找该定点数据对应的文件数据块的索引,再根据索引找到相应的文件数据块。
进一步的,为了提高数据管理的准确性,步骤1)中,还包括CRC校验的过程,初始化时从数据区读取信息数据块的内容与CRC校验值到内存结构中,计算信息数据块所在内存结构的CRC校验值,比较该内存结构的CRC校验值与数据区中的CRC校验值,若一致,则认为数据有效,若不一致,则说明数据错误,采用默认值初始化数据区;当内存中信息数据块内容发生变化时,重新计算内存结构的CRC校验值,并与内存中的信息数据块内容一起写到数据区。
进一步的,为了使定点数据监控过程更加贴合实际应用,步骤2)中,将相应的定点数据转换为xml格式,存储至临时文件区中xml格式的定点文件中。
进一步的,为了提高数据传输效率,临时文件区的定点数据以二进制流的方式上送。
本发明还提供了一种配网FTU定点文件管理装置,包括存储器、存储接口、访问接口和文件转换模块;所述存储器中建立数据区和临时文件区;所述存储接口用于将采集的定点数据传输至存储器中的数据区中;所述访问接口用于接收定点数据上送的控制命令;所述文件转换模块用于当需要进行定点数据上送时,在数据区中查找该定点数据并将查到的定点数据进行格式转换,并存储至临时文件区中的定点文件中;所述临时文件区将所述定点文件上送。
本发明中通过在存储器中建立数据区和临时文件区,通过只存储需要的动态数据,有效降低了磁盘空间的占用,并且将非常耗费内存资源的xml模型操作转换为直接对存储器的操作,以极小的内存开销实现定点数据的存储与管理,在保证高性能的前提下降低了文件管理的复杂度和资源消耗,有效降低了产品成本。
进一步的,为了方便对FLASH中的数据进行调取,不使用文件系统,以块为单位直接操作存储器,不会产生磁盘碎片,所述数据区被分为一个信息数据块和N个文件数据块,每天的定点数据占用一个文件数据块,各文件数据块用于按条目存储定点数据,每个条目包括定点数据本身及对应采集时间,信息数据块用于存储文件数据块的属性信息,所述属性信息包括当前文件数据块的采集日期和已存条目数,属性信息的位置下标作为每个文件数据块的索引,N≥1。
进一步的,按日期进行数据的调取和上送时,为了提高数据传输效率,当需要进行定点数据上送时,根据需要上送数据的日期从信息数据块中查找该定点数据对应的文件数据块的索引,再根据索引找到相应的文件数据块。
进一步的,为了得到一种具体的定点文件管理装置的实现形式,所述存储器为FLASH。
具体实施方式
下面结合附图对本发明的实施方式作进一步详细的说明。
本发明提供了一种配网FTU定点文件管理方法及装置,在存储器中建立数据区和临时文件区,将定点数据存储到数据区中;当需要进行定点数据上送时,在数据区中查找该定点数据并将查到的定点数据进行格式转换,并存储至临时文件区中的定点文件中,通过临时文件区将所述定点文件上送。
方法实施例
具体的,以一天以内的定点数据存储及上送过程,定点文件为xml格式文件,存储器为FLASH为例,对本发明的配网FTU定点文件管理方法进行介绍。在此需要说明的是,对于这些实施方式的说明用于帮助理解本发明,但并不构成对本发明的限定。
如图1所示,存储器为FLSAH,在存储器中建立数据区和临时文件区;存储接口用于将采集的定点数据传输至存储器中的数据区中;访问接口用于接收定点数据上送的控制命令;文件转换模块用于当需要进行定点数据上送时,在数据区中查找该定点数据并将查到的定点数据进行格式转换,并存储至临时文件区中的定点文件中;所述临时文件区将所述定点文件上送。
根据FTU行业的标准,一般要求每15分钟一条定点记录,每天一个定点文件,因此,一个定点文件中含96(60/15*24)个条目,定点文件个数不小于31个。为保证数据有效性,特冗余一个文件数据块,共分配32个文件数据块。
根据图2中条目的存储格式,每一个条目的结构定义为:
表1
由表1可见,每一个条目占用空间为1B+3B+36B=40B,一个文件数据块占用空间为40B*96=3840B。
根据图2中信息数据块的存储格式,信息数据块的结构定义为:
表2
| 字段 | 类型 | 空间 | 描述 | 
| crc | unsigned int | 4B | CRC32值 | 
| sectornums | unsigned char | 1B | 数据占用总块数(32) | 
| lastsector | unsigned char | 1B | 当前块索引 | 
| daystotal | unsigned char | 1B | 整个存储区最大存储天数 | 
| dayscnt | unsigned char | 1B | 整个存储区已存天数 | 
| itemsize | unsigned char | 1B | 条目占用字节数 | 
| day_items | unsigned char | 1B | 每天可存条目数(96) | 
| days[32] | FIXPT_SECT_INFO | 4B*32=128B | 块信息 | 
其中,FIXPT_SECT_INFO的结构定义为:
表3
| 字段 | 类型 | 空间 | 描述 | 
| itemcnt | unsigned char | 1B | 已存条目数 | 
| date[3] | unsigned char | 3B | 日期(年月日) | 
由以上表2和表3可见,信息数据块占用空间为4B+1B+1B+1B+1B+1B+1B+4B*32=138B。
基于以上数据,且由于FLASH的擦除操作以4K为单位,因此为每一个文件数据块及信息数据块各分配4KB的存储空间。
文件数据块的定点数据转为xml格式的定点文件时,创建DataFile根节点,定点数据属性存储为一个以DataFile为父节点的DataAttr节点,每一个属性存储为以DataAttr为父节点的DI节点。定点数据的每一个条目存储为一个以DataFile为父节点的DataRec节点,DataRec节点的sect属性对应该条目的条目号,tm属性由文件数据属性中的采集日期和条目的采集时间组合而成。条目中每一个定点数据值存储为一个以DataRec为父节点的DI节点,其属性val为定点数据值。
临时文件区存储的xml格式的定点文件示例如下:
其中,每一个子节点比其父节点前缩进两个空格,每一个节点后面有一个换行符;
根据xml格式及每一个文件含96个条目计算得出,xml格式的定点文件最大为25454B,因此,为临时文件区分配28KB的存储空间。
程序初始化时,将信息数据块的内容读入内存,程序运行时常驻内存,占用138B的内存空间。
综上,实现定点文件管理功能,仅需占用4KB*33+28KB=160KB空间、138B的内存。若直接存储31个xml格式定点文件至少需要28KB*31=868KB。
通过建立上述的定点数据存储格式,本实施例采用以下定点数据存储方法,具体包括以下存储过程:
1)定义数据区地址为HDS_FIXPT_ADDR=0x1000000;
2)加载数据区中的信息数据块至内存结构hdr_info;
3)将hdr_info中除去crc字段的内容计算CRC32值val_crc32,比较hdr_info.crc与val_crc32,若不一致,说明数据错误,使用默认值初始化FLASH的数据区;
4)接收一个条目的定点数据值pix_info及日期cur_date;
5)获取内存中当前存储块索引信息,将索引中的日期与cur_date进行比较,如果不一致,表示数据不属于当前文件块,则结束当天的定点数据存储,并重新计算当前文件块索引;
6)计算当前文件数据块的索引,方法为:当前数据块索引+1除以文件数据占用总块数32得的余数,即(hdr_info.lastsector+1)%32,然后擦除该数据块原有数据,同时将该数据块已存条目hdr_info.days[hdr_info.lastsector].itemcnt设置为0;
7)计算当前数据存储地址,方法为:首先根据计算所得的文件数据块索引hdr_info.lastsector定位当前块首地址:HDS_CUR_ADDR=HDS_FIXPT_ADDR+4K*(1+hdr_info.lastse ctor);再根据当前块已存条目数,定位当前条目写入地址,即:ITEM_CUR_ADDR=HDS_CUR_ADDR+hdr_info.days[hdr_info.lastsector].itemcnt*40,其中40是每个条目所占空间;
8)将接收到的定点数据值pix_info按照上述定义的存储格式,写入地址ITEM_CUR_ADDR;
9)更新内存中的已存天数与日期信息,方法为:若hdr_info.days[hdr_info.lasts ector].itemcnt的值为0,表示当前区为新启用的数据块,将日期更新为cur_date,若已存天数为达到最大存储天数是同时将已存天数加1,即hdr_info.dayscnt+=1;
10)更新内存中当前块的条目信息,方法为:hdr_info.days[hdr_info.lastsector].itemcnt的值加1;
11)重新计算内存数据的crc,将hdr_info写入FLASH中的数据区。
通过建立上述的定点文件存储格式,本实施例中在对定点文件访问时,具体包括以下过程:
1)通信业务模块访问指定日期的定点数据;
2)读取内存中的每一个块索引的文件日期,根据日期可以通过遍历信息数据块的文件数据块属性列表,找到所在文件数据块的索引编号,再根据索引编号和起始首地址计算出对应的文件数据块的偏移地址,得到对应的数据块,根据该数据块的日期与指定的日期进行比较,若一致,表示该数据块的为要访问的定点数据;
3)按顺序读取文件数据块中的条目数据,通过操作接口转换为xml格式,存储至临时文件区xml格式的定点文件中;
4)将临时文件区中xml文件的起始地址、文件大小返回给通信业务模块;
5)通信业务模块通过访问接口,以二进制流的方式读取临时文件区中的xml文件。
上述实施例中,将存储介质FLASH分为两个区:数据区与临时文件区。数据区包含一个信息数据块与多个文件数据块,一个文件数据块含多个条目,只存储定点文件所需的动态数据信息。临时文件区存储一个xml格式的完整定点文件。收到定点数据时,根据内存中的索引信息循环写入FLASH。当通信业务模块访问定点文件时,通过日期定位该文件对应的数据块,并将其中的数据转换为xml格式的定点数据,存储在固定空间大小的临时文件区。通信业务模块通过访问接口以二进制流的方法读取临时文件区的xml格式的定点文件。
作为其他实施方式,所述的临时文件区中的文件格式并不局限于xml格式,也可以是CSV、DAT格式等。所述的索引方式也不局限于以日期为索引,还可以以位置信息、类型信息作为索引。所述的数据区也不局限于采用数据块存储,还可以以对象存储的形式。存储器也可以采用除了FLASH以外的其他具有可读写的存储介质,例如固态硬盘、机械硬盘等其它非易失存储器等。所述的定点数据以二进制小端格式存储到数据区中,临时文件区的定点文件以二进制流的格式上送。
装置实施例
如图1所示,本发明还提出了一种配网FTU定点文件管理装置,包括存储器、存储接口、访问接口和文件转换模块;所述存储器、存储接口、访问接口和文件转换模块的工作原理与上述方法实施例中介绍的相同,故此处不再赘述。
基于上述方法的配网FTU定点文件管理方法及装置,不使用文件系统,以块为单位直接操作存储器,不会产生磁盘碎片;存储时按照生成顺序写入存储器,不依赖绝对时间顺序,不会因为时间跳变导致数据乱序;通过只存储xml中的动态数据,有效降低了磁盘空间占用;并且将非常耗费内存资源的xml模型操作转换为直接对存储器的操作,以极小的内存开销实现定点文件的存储与管理,在保证高性能的前提下降低了文件管理的复杂度和资源消耗,有效降低了产品成本。