《电子技术应用》
您所在的位置:首页 > 电源技术 > 设计应用 > 电能表系统数据存储的研究
电能表系统数据存储的研究
2016年微型机与应用第13期
刘晓辉1,李鹏1,胡光娜2
(1.河南许继仪表有限公司,河南 许昌461000; 2.国网吉林省电力有限公司延边供电公司,吉林 延吉 133000)
摘要: 为了解决电能表系统数据现场升级程序容易出现数据混乱的问题,分析了目前电能表系统数据存储的方式,针对目前电能表系统数据存储的问题提出了改善方案。通过数据链表创造出一个可以自由伸缩的数据存储系统,形成了以数据块为存储单元的存储模式,解决了电能表系统中新增加数据会导致现有数据地址改变的问题。文章先从目前电能表系统数据存储的问题说起,随后提出了新的数据存储模型,并一一介绍了新数据存储模型的创建、读取、写入及删除等操作,并在电能表上成功实现了新数据存储模型。
Abstract:
Key words :

  刘晓辉1,李鹏1,胡光娜2

  (1.河南许继仪表有限公司,河南 许昌461000; 2.国网吉林省电力有限公司延边供电公司,吉林 延吉 133000)

  摘要:为了解决电能表系统数据现场升级程序容易出现数据混乱的问题,分析了目前电能表系统数据存储的方式,针对目前电能表系统数据存储的问题提出了改善方案。通过数据链表创造出一个可以自由伸缩的数据存储系统,形成了以数据块为存储单元的存储模式,解决了电能表系统中新增加数据会导致现有数据地址改变的问题。文章先从目前电能表系统数据存储的问题说起,随后提出了新的数据存储模型,并一一介绍了新数据存储模型的创建、读取、写入及删除等操作,并在电能表上成功实现了新数据存储模型。

  关键词:数据存储;数据索引;链表;数据结构

0引言

  在目前很多电能表系统中,数据存储都是顺序存储模式,导致现场升级完程序后时常会有数据混乱问题出现,究其原因是因为开发人员新增加数据,但没有按顺序添加到数据列的最后面而导致。现在很多的电能表系统都是以EEPROM作为扩展的外部数据存储器,单相电能表一般采用32 KB的EEPROM存储器来进行数据存储,国网智能电表系统中的数据都是以数据标识符的形式定义,在EEPROM中存储时通常都以顺序方式进行数据排列。这种存储方法形式比较单一,数据必须按照固定的格式进行顺序排序,一旦有新的数据添加,这个新数据必须排在数据列的最后面,否则就会影响其他数据在EEPROM中的地址,导致电能表升级程序后数据出现异常。本文提出一种新的数据存储方法,解决了新增数据必须在数据列的最后面添加的弊端,各个业务模块都可以在数据列任意位置添加新数据而不用担心电能表升级程序后数据异常的问题。

1数据存储的原理

  本文提出的这种数据存储的原理基于链表[1]的数据处理方法,电能表内的数据采用双向链表的形式进行组合,业务模块需要添加新数据时,只需要将新数据头指针指向前一个数据,尾指针指向后一项数据,整个数据链不会受到破坏[2]。数据存储原理如图1。

  

001.jpg

2数据的创建和删除

  根据上述原理,需要对EEPROM存储器进行整体格式化,即对存储空间进行分块并标记,如图2所示。分块就是将32 KB的存储空间以16 B为1块划分,那么就可以分成2 048个块,用前面16个块(2 048 bit位)来标记每一块的使用情况,每一个bit位值为1代表所指向的块处于使用状态,bit位值为0代表所指向的块处于空闲状态[3]。

  2.1数据的创建

002.jpg

  创建一个数据就必须有一个总的数据索引FileIndex结构对象,这个数据索引要实现的功能就是能通过它找到EEPROM中存放的每一个数据,那么这个FileIndex结构定义就需要有每个数据的地址映射。由数据索引[46]开图2存储空间分块及标记示意图始,数据索引中包含第一个数据的起始地址,由此地址可以访问到第一个数据。然后由数据结构struct FILE中的数据指针pFileNext指向下一个数据的地址,数据结构FILE中的数据指针pData则指向本数据区域(数据区域就是用来真正存放数据的EEPROM地址),依次递推,查找每一个数据,比较数据与要创建的新数据是否不同(通常采用数据标识符区分),不同则从存储空间中查找空闲块分配给该新数据使用,相同则不处理。创建数据的时序图如图3。

  

003.jpg

  2.2数据的删除

  数据的删除与数据的创建过程很相似。首先读出EEPROM中存放的FileIndex结构对象,由其中的数据指针找到第一个数据,判断数据结构中的数据名与要删除的数据名是否一致,一致则删除数据结构中数据块指针并释放存储空间;否则由数据结构中的下一个数据指针读出下一个数据进行数据名比较,依次递推,直到找到要删除的数据为止。释放存储空间需要将释放的数据块标记置为空闲状态,以便创建新数据时使用。数据删除时序图如图4。

004.jpg

3数据的读写操作

  在完成数据的创建工作之后,就可以通过数据名对数据进行读写操作。

  3.1数据的读取

  数据的读取是通过读取EEPROM中的FileIndex结构对象,由读出的FileIndex对象里的数据指针找到第1个数据的。比较数据的数据名与要读取的数据名是否相同,如果相同则通过指向数据域的指针pData把要访问的EEPROM中数据读出来;不同则通过数据结构中的下一个数据指针pFileNext读出第2个数据,然后继续比较数据名是否一样。以此递推,直到找到与要读取的数据名一致的数据为止,图5为读数据的实现过程。

005.jpg

  3.2数据的写入

  写数据的操作过程与读数据的过程非常相似,也是通过读数据索引FileIndex找到第一个数据,然后比较数据名是否一致,直到找到数据名匹配的数据为止,根据数据结构中的数据域指针pData把数据存储到EEPROM中对应地址中去,实现了按数据名写数据的操作,如图6所示。  

006.jpg

4结束语

  本文介绍的数据存储结构,数据的创建和删除不会影响其他数据项,各个业务模块在处理新数据时只需将新数据添加到业务模块处理的数据块中,不会影响其他业务模块的数据。该数据存储系统已经在单相智能表中实现及应用,解决了因新增数据而导致其他数据地址发生变化的问题,从而避免了因现场升级程序而电能表数据混乱的发生。

  参考文献

  [1] 李无言.一步步写嵌入式操作系统:ARM编程的方法与实践[M].北京:电子工业出版社,2011.

  [2] BIC L F, SHAW A C.操作系统原理[M].梁洪亮,译.北京:清华大学出版社,2005.

  [3] 马志刚,刘文怡,凌伟,等.基于PCI和LVDS的高速数据存储系统的设计[J].电子技术应用,2014,40(4):8083.

  [4] 张良,曹社香.面向卷级存储系统即时恢复的高效索引方法[J].电子技术应用,2014,40(7):116118.

  [5] 龚雪容,刘根贤,生拥宏,等.基于Flash的关键变量容错存储技术研究[J].电子技术应用,2014,40(11):911,15.

  [6] 徐涴砯,陈光,高孟茹,等.GPS船舶试航数据提取与存储系统的开发[J].微型机与应用,2013,32(23):8689.


此内容为AET网站原创,未经授权禁止转载。