孙明刚(积成电子股份有限公司,山东 济南 250100)
基于嵌入式Linux的用电信息采集终端存储数据的方法
孙明刚
(积成电子股份有限公司,山东济南250100)
摘要:本发明公开一种基于嵌入式Linux的用电信息采集终端使用内存映射文件存储数据的方法,通过内存映射函数mmap(Linux系统调用)将所需读写的数据映射到用户进程空间,以读写内存的形式访问存储数据具有可将数据固化存储、掉电不丢、读写方便、性能优越和节约成本等优势。
关键词:嵌入式Linux;用电信息;终端存储
本发明涉及智能电网用电信息采集系统领域,具体涉及基于嵌入式Linux用电信息采集终端存储数据的方法。
电力用户用电信息采集系统(power userelectricenergydataacquiresystem)是对电力用户的用电信息进行采集、处理和实时监控的系统,实现用电信息的自动采集、计量异常监测、电能质量监测、用电分析和管理、相关信息发布、分布式能源监控、智能用电设备的信息交互等功能。
用电信息采集终端(electricenergy dataacquireterminal)是对各信息采集点用电信息采集的设备,简称采集终端。可以实现电能表数据的采集、数据管理、数据双向传输以及转发或执行控制命令的设备。用电信息采集终端按应用场所分为专变采集终端、集中抄表终端(包括集中器、采集器)、分布式能源监控终端等类型。
采集终端因功能要求在运行过程中会对部分数据进行频繁读写体现在以下几个方面:采集终端在每轮次抄表结束后会对采集结果进行统计、计算并存储,采集终端会每分钟对各采集点进行数据统计、计算并存储,采集终端会每秒种读取自身计量芯片数据计算、累加并存储,采集终端会实时读取脉冲表状态并累加、存储。
(一)存文件,将所使用的数据先缓冲在内存中然后读写完成后存入文件。数据存入文件可避免系统停电带来的数据丢失问题,但读写文件操作较为繁琐、不能以操作字节的形式访问数据使用不便,且频繁地读写文件性能有限特别体现在大型文件的重复、随机读写上。
(二)增加硬件SRAM(掉电不丢内存),可以以操作字节的形式访问数据,但需额外供电,采集终端的板载锂电池一般设计寿命为5年,即使是寿命未到也存在电池自放电、批量质量问题造成SRAM供电电池失效导致数据丢失,且使硬件意外地增加成本。
(三)编程到Flash,可以实现固化存储不需额外供电,掉电后数据不丢失,但Flash编程需专用驱动且需先擦除再写入,不能以操作字节的形式读写,还需考虑Flash的损耗均衡以保证其读写寿命。
针对上述问题,本发明提供一种可将数据固化存储、掉电不丢、读写方便、性能优越的基于嵌入式Linux的用电信息采集终端存储数据的方法。
为解决上述问题,本发明采取的技术方案为:基于嵌入式Linux的用电信息采集终端存储数据的方法,包括如下步骤:
(一)确定所需存储的数据以及数据长度,在进程地址空间中定义内存映射区的基地址,并定义用于存储各数据的地址与基地址的相对偏移;比如需存储1M的数据这些数据分别为数据1、数据2、数据3.....数据256,每个占用4个字节,如果内存映射区基地址为0xffff0000,则存储这些数据的地址分别为数据1->0xffff0000,数据2->0xffff0004,数据3->0xffff0008......,则可如下定义:[0013]数据1:(基地址+0);[0014]数据2:(基地址+4);[0015]数据3:(基地址+8);.....定义这些偏移是为了方便读写各数据。
(二)根据步骤一中所需存储数据的长度检测待内存映射文件的合法性,若文件合法则进入步骤三;若不合法则根据所需存储数据长度创建文件并将文件内容填充为零值再进入步骤三。
(三)调用内存映射函数mmap,建立与步骤二中的待内存映射文件的映射,将内存映射函数mmap返回地址赋予步骤一中定义的基地址。
(四)使用步骤一中定义的内存映射区的基地址以及其他数据的相对偏移地址读写所需存储数据。
内存映射文件利用虚拟内存把文件映射到进程的地址空间中去,在此之后进程操作文件,就像操作进程空间里的地址一样,比如使用memcpy等内存操作的函数。这种方法能够很好地应用在需要频繁处理一个文件或者是一个大文件的场合,这种方式处理IO效率比普通IO效率要高。Linux提供了内存映射函数mmap,调用时指明待映射文件以及文件长度即可返回映射内存首地址,它把文件内容映射到一段内存上。通过对这段内存的读取和修改,实现对文件的读取和修改。
根据所需存储数据长度确定所需映射内存的长度,同时也决定了待内存映射文件的大小。所述步骤二中检测待内存映射文件合法性的条件还包括文件的起始字节及文件的结束字节。
本发明公开一种基于嵌入式Linux的用电信息采集终端使用内存映射文件存储数据的方法,通过内存映射函数mmap (Linux系统调用)将所需读写的数据映射到用户进程空间,以读写内存的形式访问存储数据具有可将数据固化存储、掉电不丢、读写方便、性能优越、节约成本等优势。
(一)无需增加硬件节约成本,并增加可靠性;
(二)数据读写可以以操作内存的形式进行;
(三)实现固化存储,系统掉电后无需电池供电以保存数据;
(四)无需考虑存储器件的磨损均衡;
(五)无需考虑存储器件的读写次数;
(六)无需专用存储器件的读写驱动程序、可移植性高。
内存映射文件性能优势:正常的系统IO读写需要两次传输一次是在文件和内核高速缓冲区之间,另一次在高速缓冲区和用户空间缓冲区之间。使用内存映射函数mmap就无需第二次传输了,对于输入来讲,一旦内核将相应的文件块映射进内存之后用户进程就能够使用这些数据了。对于输出来讲,用户进程仅仅需要修改内存中的内容,然后可以依靠内核管理器来自动更新底层的文件。除了节省了内核空间和用户空间之间的一次传输之后,内存映射函数mmap还能够通过减少所需使用的内存来提升性能。
图1
图2
附图说明:
图1为本发明的流程图,图2为本发明的原理示意图。
参考文献
[1]张钟玲.用电信息采集系统功能及技术应用[J].科技创新导报,2013(31):47-48.
中图分类号:TM73
文献标识码:A