沈建良,李亦龍,吳劍芳
(國網(wǎng)浙江省電力公司電力科學(xué)研究院,杭州310000)
智能電能表[1-2]作為一種電能計量器具,用來衡量用戶消費電量的多少,是電力公司對用戶用電收費的依據(jù),因此,其存儲數(shù)據(jù)[3-4]的安全可靠顯得十分重要。目前,智能電能表主要存儲數(shù)據(jù)包括當(dāng)前電能、歷史電能以及事件記錄等信息,隨著用電情況的越來越多變,智能電能表的功能越來越豐富,特別是OIML R46國際建議[5-6]的推行,要求智能電能表計量功能與其他功能相互獨立,“計量芯”負(fù)責(zé)計量功能,“管理芯”負(fù)責(zé)其他功能,即“雙芯”設(shè)計。因此,新一代智能電能表將涉及計量芯、管理芯的電能相關(guān)數(shù)據(jù)的校核,同時,計量芯作為最基礎(chǔ)也是最重要的電能計量部分,存儲的數(shù)據(jù)量特別大,并且不允許數(shù)據(jù)丟失或錯誤。
如何設(shè)計既能實現(xiàn)智能電能表的大容量數(shù)據(jù)存儲,又能保證數(shù)據(jù)存儲的安全性,就顯得尤為重要。本文從 EEPROM[7-8]及 Flash[9]數(shù)據(jù)保存特點出發(fā),結(jié)合電能存儲數(shù)據(jù)的重要性,提出了一種智能電能表的大容量數(shù)據(jù)存儲方法,來實現(xiàn)數(shù)據(jù)的安全存儲。
采用“雙芯”設(shè)計的智能電能表包含計量芯和管理芯,計量芯主要用來存儲當(dāng)前電能及基礎(chǔ)凍結(jié)電能的數(shù)據(jù)信息。管理芯主要用來存儲當(dāng)前電能、歷史電能、當(dāng)前需量、歷史需量、事件記錄和運行設(shè)置相關(guān)參數(shù)的數(shù)據(jù)信息。
目前,智能電能表主要用到的存儲器包含EEPROM、Flash等[10],EEPROM存儲器具有免擦寫,讀寫壽命超過100萬次的優(yōu)點,但其存儲容量有限,主要用來存儲當(dāng)前電能、當(dāng)前需量和運行設(shè)置相關(guān)參數(shù)等數(shù)據(jù)量較小的數(shù)據(jù)信息。Flash存儲器具有存儲容量大的優(yōu)點,但寫入數(shù)據(jù)前,如果待存儲區(qū)域不為空,需進行擦除操作,且擦除時間長,同時擦除次數(shù)不超過10萬次。因此,主要用來存儲歷史電能、事件記錄等數(shù)據(jù)量較大的數(shù)據(jù)信息。
計量芯功能需要進行基礎(chǔ)凍結(jié)電能信息的保存,用來滿足管理芯費率電能的處理,同時用于管理芯計費數(shù)據(jù)的校核。為滿足未來多變的用電信息需求,這里定義基礎(chǔ)電能信息需要滿足正、反向有功總電能每1分鐘的存儲間隔,以及第一、二、三、四象限無功電能每15分鐘的存儲間隔,并且存儲深度不小于1年。為了保證數(shù)據(jù)的安全性,數(shù)據(jù)通常采用三處備份的方式。由此計算,電能表存儲數(shù)據(jù)量很大,可超過20 MByte。因此,采用“雙芯”設(shè)計的智能電能表數(shù)據(jù)的存儲不僅要求存儲器容量大,而且還需要其具有較長的讀寫壽命,保證數(shù)據(jù)存儲的安全性。
數(shù)據(jù)存儲區(qū)域主要分為兩處,分別在EEPROM和Flash。利用EEPROM數(shù)據(jù)可直接寫入的特點,在EEPROM中實時存儲最近兩天的電能數(shù)據(jù)信息,同時結(jié)合Flash存儲容量大的特點,其他時間的電能數(shù)據(jù)信息都定時保存在Flash中。該方式可避免實時寫Flash數(shù)據(jù)時,擦除Flash操作,減少外部異常對Flash擦除操作的影響,提高寫入安全性。同時定時把EEPROM中的批量數(shù)據(jù),保存至Flash中,提高存儲效率。
在EEPROM中開辟兩塊地址空間,用于存儲兩天的數(shù)據(jù)信息,采用交替擦寫的方式存儲數(shù)據(jù)。電能表正常運行狀態(tài)時,一處EEPROM存儲空間存放數(shù)據(jù),另一處數(shù)據(jù)為空。當(dāng)EEPROM中儲存的數(shù)據(jù)量滿1天時,將該存儲數(shù)據(jù)寫入Flash中,同時清除該存儲空間,新紀(jì)錄數(shù)據(jù)存放至EEPROM另一個地址空間,兩塊存儲空間采用輪換的存儲方式。
在滿足電能表基礎(chǔ)電能信息存儲容量20 MByte的要求下,分析比較采用EEPROM、Flash和EEPROM+Flash三種存儲方式的特點,如表1所示。分析可見,采用EEPROM+Flash的存儲方式既可以滿足數(shù)據(jù)存儲的讀寫壽命和可靠性要求,同時又可以在成本上得到有效控制。
表1 三種存儲方式特點比較Tab.1 Comparison of three data storage methods
電能表每分鐘觸發(fā)數(shù)據(jù)存儲動作,將當(dāng)前電能表有效時鐘和需存儲的數(shù)據(jù)組織好后放入臨時緩存。然后讀取兩處EEPROM地址的數(shù)據(jù),判斷時標(biāo)是否有效。
第一種情況,兩處地址數(shù)據(jù)都有效。先將兩處地址中時標(biāo)較小數(shù)據(jù)轉(zhuǎn)存Flash,然后比較臨時緩存數(shù)據(jù)時標(biāo)和兩處地址中較大時標(biāo)的日期大?。海?)若臨時緩存數(shù)據(jù)時標(biāo)日期小于EEPROM中較大時標(biāo)的日期,則不寫入;(2)若臨時緩存數(shù)據(jù)時標(biāo)日期大于EEPROM中較大時標(biāo)的日期,則寫入另一處EEPROM,同時將該EEPROM中原有效的數(shù)據(jù)轉(zhuǎn)存至Flash;(3)若相等,則判斷臨時緩存時標(biāo)中的時分對應(yīng)EEPROM中已存數(shù)據(jù)的時分偏移地址往后(包括這個點)的數(shù)據(jù)是否全部無效,若全部無效,則寫入。
第二種情況,一處地址數(shù)據(jù)有效。比較臨時緩存數(shù)據(jù)時標(biāo)和有效數(shù)據(jù)時標(biāo)的日期大?。海?)若臨時緩存數(shù)據(jù)時標(biāo)日期小于有效數(shù)據(jù)時標(biāo)日期,則不寫入;(2)若臨時緩存數(shù)據(jù)時標(biāo)日期大于有效數(shù)據(jù)時標(biāo)日期,則寫入另一處EEPROM地址,同時將該EEPROM中原有效的數(shù)據(jù)轉(zhuǎn)存至Flash;(3)若相等,則判斷臨時緩存時標(biāo)中的時分對應(yīng)EEPROM中已存數(shù)據(jù)的時分偏移地址往后(包括這個點)的數(shù)據(jù)是否全部無效,若全部無效,則寫入。
第三種情況:兩處地址都無效。則將臨時緩存中的數(shù)據(jù)存入其中一處EEPROM地址。
一是立志“成一家之言”。在年輕的時候,章學(xué)誠就立下大志,要對《漢書·藝文志》進行研究,校讎其書,申明微旨,“又取古今載籍,自六藝以降,訖于近代作者之林,為之商榷利病,討論得失,擬為《文史通義》一書,分內(nèi)外雜篇,成一家言”[1]。章學(xué)誠的“成一家之言”是要對歷史文獻“商榷利病,討論得失”,發(fā)現(xiàn)規(guī)律,提出新的史學(xué)觀點,研究新的史學(xué)理論。章學(xué)誠的學(xué)術(shù)實踐也正是這么做的,他在史學(xué)領(lǐng)域大膽發(fā)揮,“自信發(fā)凡起例,多為后世開山?!盵2]為千古史學(xué)開辟了新的道路。
為提高MCU執(zhí)行效率,在MCU處理器正常處理任務(wù)間隙,檢查判斷需寫入的Flash是否為空,若不為空則擦除。避免在寫入時,再進行Flash擦除操作,提高Flash數(shù)據(jù)寫入效率,縮短寫入數(shù)據(jù)時間,進一步提高數(shù)據(jù)寫入的可靠性。
當(dāng)EEPROM數(shù)據(jù)存儲流程中觸發(fā)數(shù)據(jù)轉(zhuǎn)存Flash時,比較需轉(zhuǎn)存數(shù)據(jù)的時標(biāo)與Flash中最近一天數(shù)據(jù)的時標(biāo):(1)若需轉(zhuǎn)存數(shù)據(jù)的時標(biāo)大于Flash中最近一天數(shù)據(jù)的時標(biāo),則將數(shù)據(jù)寫入;(2)若需轉(zhuǎn)存數(shù)據(jù)的時標(biāo)小于等于Flash中最近一天數(shù)據(jù)的時標(biāo),則不寫入。
Flash中數(shù)據(jù)按時標(biāo)順序循環(huán)存儲,當(dāng)存儲數(shù)據(jù)量滿1年時,將覆蓋最早一天的數(shù)據(jù),以此類推,如圖1所示。
計量芯電能數(shù)據(jù)信息在EEPROM與Flash中存儲流程,具體實現(xiàn)方法如圖2所示。
圖1 Flash數(shù)據(jù)存儲模式Fig.1 Mode of Flash data storage
圖2 計量芯電能數(shù)據(jù)信息存儲流程Fig.2 Flow chart of electricity data information storage for metering chip
步驟如下:
S101:電能表每分鐘觸發(fā)數(shù)據(jù)存儲動作,將當(dāng)前電表時鐘和需存儲的數(shù)據(jù)組織好后放入臨時緩存;
S102:讀取兩處存儲區(qū)的數(shù)據(jù),判斷其時標(biāo)是否都有效,若是進入步驟 S103、S104,否則進入步驟S111;
S104:將兩處存儲區(qū)中時標(biāo)較小的有效數(shù)據(jù)作為待轉(zhuǎn)存數(shù)據(jù),然后進入步驟S106;
S105:將該臨時緩存數(shù)據(jù)作為待轉(zhuǎn)存數(shù)據(jù);
S106:比較待轉(zhuǎn)存數(shù)據(jù)的時標(biāo)是否大于Flash中最近一天數(shù)據(jù)的時標(biāo),若是進入步驟 S107,否則結(jié)束;
S107:將EEPROM中有效的數(shù)據(jù)轉(zhuǎn)存至Flash,然后進入步驟S110;
S108:如果臨時緩存數(shù)據(jù)時標(biāo)不大于兩處存儲區(qū)中較大時標(biāo)的日期,則判斷臨時緩存數(shù)據(jù)時標(biāo)是否等于兩處存儲區(qū)中較大時標(biāo)的日期,判斷是進入步驟S109,否則結(jié)束;
S109:判斷臨時緩存時標(biāo)中的時分在對應(yīng)EEPROM中已存數(shù)據(jù)的時分偏移地址往后(包括這個點)的數(shù)據(jù)是否全部無效,若是進入步驟 S110,否則結(jié)束;
S110:將臨時緩存數(shù)據(jù)寫入EEPROM;
S111:判斷兩處存儲區(qū)中的數(shù)據(jù)是否有一處有效,若是進入步驟S103,否則進入步驟S112;
S112:將臨時緩存中的數(shù)據(jù)存入EEPROM的其中一處存儲區(qū)。
簡述了智能電能表大容量數(shù)據(jù)存儲方式下存儲器的劃分,結(jié)合目前常用存儲器EEPROM及Flash存儲器特征,研究了如何用目前常用的EEPROM和Flash存儲器安全、高效的存儲“計量芯”中大容量電能數(shù)據(jù)。有效的避免了現(xiàn)有技術(shù)中EEPROM存儲容量小、Flash閃存擦寫次數(shù)低以及擦寫時間長的缺點。在降低EEPROM存儲容量要求的同時,減少了Flash操作次數(shù),不僅提高了雙芯電能表數(shù)據(jù)的存儲效率,而且擴展了存儲器的使用壽命,提高了電能表大容量數(shù)據(jù)存儲的安全性與可靠性,同時,在成本上也得到了有效的控制。