沈建良,李亦龙,吴剑芳
(国网浙江省电力公司电力科学研究院,杭州310000)
智能电能表[1-2]作为一种电能计量器具,用来衡量用户消费电量的多少,是电力公司对用户用电收费的依据,因此,其存储数据[3-4]的安全可靠显得十分重要。目前,智能电能表主要存储数据包括当前电能、历史电能以及事件记录等信息,随着用电情况的越来越多变,智能电能表的功能越来越丰富,特别是OIML R46国际建议[5-6]的推行,要求智能电能表计量功能与其他功能相互独立,“计量芯”负责计量功能,“管理芯”负责其他功能,即“双芯”设计。因此,新一代智能电能表将涉及计量芯、管理芯的电能相关数据的校核,同时,计量芯作为最基础也是最重要的电能计量部分,存储的数据量特别大,并且不允许数据丢失或错误。
如何设计既能实现智能电能表的大容量数据存储,又能保证数据存储的安全性,就显得尤为重要。本文从 EEPROM[7-8]及 Flash[9]数据保存特点出发,结合电能存储数据的重要性,提出了一种智能电能表的大容量数据存储方法,来实现数据的安全存储。
采用“双芯”设计的智能电能表包含计量芯和管理芯,计量芯主要用来存储当前电能及基础冻结电能的数据信息。管理芯主要用来存储当前电能、历史电能、当前需量、历史需量、事件记录和运行设置相关参数的数据信息。
目前,智能电能表主要用到的存储器包含EEPROM、Flash等[10],EEPROM存储器具有免擦写,读写寿命超过100万次的优点,但其存储容量有限,主要用来存储当前电能、当前需量和运行设置相关参数等数据量较小的数据信息。Flash存储器具有存储容量大的优点,但写入数据前,如果待存储区域不为空,需进行擦除操作,且擦除时间长,同时擦除次数不超过10万次。因此,主要用来存储历史电能、事件记录等数据量较大的数据信息。
计量芯功能需要进行基础冻结电能信息的保存,用来满足管理芯费率电能的处理,同时用于管理芯计费数据的校核。为满足未来多变的用电信息需求,这里定义基础电能信息需要满足正、反向有功总电能每1分钟的存储间隔,以及第一、二、三、四象限无功电能每15分钟的存储间隔,并且存储深度不小于1年。为了保证数据的安全性,数据通常采用三处备份的方式。由此计算,电能表存储数据量很大,可超过20 MByte。因此,采用“双芯”设计的智能电能表数据的存储不仅要求存储器容量大,而且还需要其具有较长的读写寿命,保证数据存储的安全性。
数据存储区域主要分为两处,分别在EEPROM和Flash。利用EEPROM数据可直接写入的特点,在EEPROM中实时存储最近两天的电能数据信息,同时结合Flash存储容量大的特点,其他时间的电能数据信息都定时保存在Flash中。该方式可避免实时写Flash数据时,擦除Flash操作,减少外部异常对Flash擦除操作的影响,提高写入安全性。同时定时把EEPROM中的批量数据,保存至Flash中,提高存储效率。
在EEPROM中开辟两块地址空间,用于存储两天的数据信息,采用交替擦写的方式存储数据。电能表正常运行状态时,一处EEPROM存储空间存放数据,另一处数据为空。当EEPROM中储存的数据量满1天时,将该存储数据写入Flash中,同时清除该存储空间,新纪录数据存放至EEPROM另一个地址空间,两块存储空间采用轮换的存储方式。
在满足电能表基础电能信息存储容量20 MByte的要求下,分析比较采用EEPROM、Flash和EEPROM+Flash三种存储方式的特点,如表1所示。分析可见,采用EEPROM+Flash的存储方式既可以满足数据存储的读写寿命和可靠性要求,同时又可以在成本上得到有效控制。
表1 三种存储方式特点比较Tab.1 Comparison of three data storage methods
电能表每分钟触发数据存储动作,将当前电能表有效时钟和需存储的数据组织好后放入临时缓存。然后读取两处EEPROM地址的数据,判断时标是否有效。
第一种情况,两处地址数据都有效。先将两处地址中时标较小数据转存Flash,然后比较临时缓存数据时标和两处地址中较大时标的日期大小:(1)若临时缓存数据时标日期小于EEPROM中较大时标的日期,则不写入;(2)若临时缓存数据时标日期大于EEPROM中较大时标的日期,则写入另一处EEPROM,同时将该EEPROM中原有效的数据转存至Flash;(3)若相等,则判断临时缓存时标中的时分对应EEPROM中已存数据的时分偏移地址往后(包括这个点)的数据是否全部无效,若全部无效,则写入。
第二种情况,一处地址数据有效。比较临时缓存数据时标和有效数据时标的日期大小:(1)若临时缓存数据时标日期小于有效数据时标日期,则不写入;(2)若临时缓存数据时标日期大于有效数据时标日期,则写入另一处EEPROM地址,同时将该EEPROM中原有效的数据转存至Flash;(3)若相等,则判断临时缓存时标中的时分对应EEPROM中已存数据的时分偏移地址往后(包括这个点)的数据是否全部无效,若全部无效,则写入。
第三种情况:两处地址都无效。则将临时缓存中的数据存入其中一处EEPROM地址。
一是立志“成一家之言”。在年轻的时候,章学诚就立下大志,要对《汉书·艺文志》进行研究,校雠其书,申明微旨,“又取古今载籍,自六艺以降,讫于近代作者之林,为之商榷利病,讨论得失,拟为《文史通义》一书,分内外杂篇,成一家言”[1]。章学诚的“成一家之言”是要对历史文献“商榷利病,讨论得失”,发现规律,提出新的史学观点,研究新的史学理论。章学诚的学术实践也正是这么做的,他在史学领域大胆发挥,“自信发凡起例,多为后世开山。”[2]为千古史学开辟了新的道路。
为提高MCU执行效率,在MCU处理器正常处理任务间隙,检查判断需写入的Flash是否为空,若不为空则擦除。避免在写入时,再进行Flash擦除操作,提高Flash数据写入效率,缩短写入数据时间,进一步提高数据写入的可靠性。
当EEPROM数据存储流程中触发数据转存Flash时,比较需转存数据的时标与Flash中最近一天数据的时标:(1)若需转存数据的时标大于Flash中最近一天数据的时标,则将数据写入;(2)若需转存数据的时标小于等于Flash中最近一天数据的时标,则不写入。
Flash中数据按时标顺序循环存储,当存储数据量满1年时,将覆盖最早一天的数据,以此类推,如图1所示。
计量芯电能数据信息在EEPROM与Flash中存储流程,具体实现方法如图2所示。
图1 Flash数据存储模式Fig.1 Mode of Flash data storage
图2 计量芯电能数据信息存储流程Fig.2 Flow chart of electricity data information storage for metering chip
步骤如下:
S101:电能表每分钟触发数据存储动作,将当前电表时钟和需存储的数据组织好后放入临时缓存;
S102:读取两处存储区的数据,判断其时标是否都有效,若是进入步骤 S103、S104,否则进入步骤S111;
S104:将两处存储区中时标较小的有效数据作为待转存数据,然后进入步骤S106;
S105:将该临时缓存数据作为待转存数据;
S106:比较待转存数据的时标是否大于Flash中最近一天数据的时标,若是进入步骤 S107,否则结束;
S107:将EEPROM中有效的数据转存至Flash,然后进入步骤S110;
S108:如果临时缓存数据时标不大于两处存储区中较大时标的日期,则判断临时缓存数据时标是否等于两处存储区中较大时标的日期,判断是进入步骤S109,否则结束;
S109:判断临时缓存时标中的时分在对应EEPROM中已存数据的时分偏移地址往后(包括这个点)的数据是否全部无效,若是进入步骤 S110,否则结束;
S110:将临时缓存数据写入EEPROM;
S111:判断两处存储区中的数据是否有一处有效,若是进入步骤S103,否则进入步骤S112;
S112:将临时缓存中的数据存入EEPROM的其中一处存储区。
简述了智能电能表大容量数据存储方式下存储器的划分,结合目前常用存储器EEPROM及Flash存储器特征,研究了如何用目前常用的EEPROM和Flash存储器安全、高效的存储“计量芯”中大容量电能数据。有效的避免了现有技术中EEPROM存储容量小、Flash闪存擦写次数低以及擦写时间长的缺点。在降低EEPROM存储容量要求的同时,减少了Flash操作次数,不仅提高了双芯电能表数据的存储效率,而且扩展了存储器的使用寿命,提高了电能表大容量数据存储的安全性与可靠性,同时,在成本上也得到了有效的控制。