王冠男 ,許金宇 ,熊 劍 ,左 勇
(1.南瑞集團(國網(wǎng)電力科學研究院)有限公司,南京 211106;2.國電南瑞科技股份有限公司,南京 211106)
近年來,隨著智能電能表[1-2]的大規(guī)模普及,居民的用電體驗發(fā)生了天翻地覆的變化,為智能電網(wǎng)的發(fā)展提供了有力支撐。
智能電能表已經(jīng)不僅僅是一種電能計量器具,同時還承擔著記錄電網(wǎng)運行數(shù)據(jù)、異常用電情況判斷、用戶用電行為分析等多種角色。智能電能表的功能越來越豐富、越來越復雜,需要存儲的數(shù)據(jù)總量也越來越多,數(shù)據(jù)內(nèi)容的靈活性也越來越高,特別是《面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議》[3]發(fā)布并使用以來,要求實現(xiàn)對事件、凍結(jié)類數(shù)據(jù)的靈活配置,存取方式也更加多變。因此,設(shè)計一種適用于智能電能表的數(shù)據(jù)管理方法就顯得非常的必要。
結(jié)合智能電能表數(shù)據(jù)的特性,在此提出一種適用于智能電能表(特別是支持DL/T698.45的智能電能表)的數(shù)據(jù)管理方法,實現(xiàn)對智能電能表數(shù)據(jù)的簡便、高效的存取。
目前,常用的智能電能表存儲芯片有3種,即FRAM,EEPROM 和 NOR Flash[4-5]。
其中,F(xiàn)RAM的空間最小,主要用于存儲數(shù)據(jù)變化最頻繁的電能量數(shù)據(jù);EEPROM的空間適中,用于存儲需量、參數(shù)、關(guān)聯(lián)列表等變化頻率一般的數(shù)據(jù);NOR Flash的空間最大,用于存儲事件、凍結(jié)等數(shù)據(jù)量較大且寫入后不會頻繁改變的數(shù)據(jù)[5]。FRAM和EEPROM[6]無需擦除,可直接對任意地址進行“寫”操作,且使用壽命較長,基本不需要對存儲數(shù)據(jù)進行特殊管理,但是其存儲容量較小且價格昂貴。NOR Flash[7]支持任意地址的訪問,在“寫”操作前必須進行擦除,一次性擦除范圍隨芯片特性而定,一般不小于4 kB,使用不夠便捷,需要對存儲數(shù)據(jù)進行有效管理,但是存儲容量較大且價格便宜。
基于這3種存儲芯片特性,在此僅討論對NOR Flash存儲數(shù)據(jù)(主要是事件、凍結(jié)數(shù)據(jù))的管理方法。
以三相智能電能表為例,共有72類事件、13類凍結(jié),共計85類數(shù)據(jù)需要存儲在NOR Flash,數(shù)據(jù)特點如下:①每類數(shù)據(jù)的具體內(nèi)容可靈活配置;②每類數(shù)據(jù)可多次存儲,需按照規(guī)范定義的“保留次數(shù)”保留最近存儲的多次記錄(一般為最近10次);③同類數(shù)據(jù)中,可根據(jù)數(shù)據(jù)存儲的先后順序進行查找讀取;④特殊數(shù)據(jù)分鐘凍結(jié)。產(chǎn)生特別頻繁(1次每 1 min)、保留次數(shù)特別巨大(20 d,共 28800次),占用空間特別巨大(至少3.6 MB),需要在存儲時特殊處理。
將NOR Flash的最小擦除單元記為Sector,則傳統(tǒng)方法管理流程可描述如下:
步驟1根據(jù)每類數(shù)據(jù)的數(shù)據(jù)大小,以Sector為單位,分別劃分固定的存儲區(qū)域。
步驟2為每類數(shù)據(jù)分別設(shè)置In,Out和Sum三個變量。其中,In始終指向“寫”操作地址;Out始終指向最早的1條記錄;Sum為當前實際存儲的數(shù)據(jù)記錄總次數(shù)。
步驟3盡可能多地為分鐘凍結(jié)分配Sector,以降低擦除頻率。寫數(shù)據(jù)時按照In指向的地址寫入。讀數(shù)據(jù)時根據(jù)Out和要讀取的數(shù)據(jù)順序編號來計算偏移地址,再讀取數(shù)據(jù)。擦除管理即當分配的存儲區(qū)無空閑時,擦除Out指向的Sector,同時更新In,Out和Sum的值。
1)RAM占用。每類數(shù)據(jù)都要分配3個指針,85個文件共計占用約1 kB,對資源緊張的電表而言,RAM占用較大。
2)擦除頻率與磨損均衡性。產(chǎn)生頻繁的某類數(shù)據(jù)存儲區(qū)會擦除頻繁,不經(jīng)常產(chǎn)生的某些類數(shù)據(jù)存儲區(qū)則長時間處于空閑狀態(tài)。另外,若某種故障工況下導致某些事件頻繁產(chǎn)生,或者某類數(shù)據(jù)的數(shù)據(jù)量較大時,也會提高擦除頻率。整體而言,擦除頻率可控性較差,整片F(xiàn)lash的磨損均衡性也較差。
3)靈活性。每類數(shù)據(jù)的存儲區(qū)域是預先固定的,當數(shù)據(jù)類型變化或Flash規(guī)格變化時,都需重新分配存儲區(qū)域,靈活性較差。
4)對分鐘凍結(jié)的處理。沒有特別的針對性措施,只能通過多分配Sector來降低分鐘凍結(jié)存儲區(qū)域的擦除頻率。
所提新型智能電能表數(shù)據(jù)管理方法結(jié)合智能電能表數(shù)據(jù)的特性,采用鏈表和重映射的概念思想,提高了訪問NOR Flash的科學性和靈活性,且資源占用低,數(shù)據(jù)存取便捷高效,適用于智能電能表。
以Sector為單位,將NOR Flash劃分為鏈表區(qū)和數(shù)據(jù)區(qū)兩部分。鏈表區(qū)存放各類數(shù)據(jù)在數(shù)據(jù)區(qū)的對應(yīng)存儲地址;數(shù)據(jù)區(qū)存放各類數(shù)據(jù)的具體內(nèi)容。數(shù)據(jù)存取時,先在鏈表區(qū)查找該類數(shù)據(jù)在數(shù)據(jù)區(qū)的對應(yīng)存儲地址,再到數(shù)據(jù)區(qū)對該類數(shù)據(jù)的具體內(nèi)容進行存取操作。
3.1.1 鏈表區(qū)結(jié)構(gòu)設(shè)計
鏈表區(qū)由多個鏈表組成。為便于管理,每個鏈表大小可設(shè)置為與Sector相等,每類數(shù)據(jù)對應(yīng)各自的鏈表。因此,對于三相智能電能表,鏈表區(qū)大小為85個 Sector。
鏈表由鏈表單元Link組成。Link由1 B狀態(tài)標志和3 B數(shù)據(jù)地址組成。其中,狀態(tài)標志表示4種狀態(tài),空閑、有效、可擦除、已擦除;數(shù)據(jù)地址表示該Link對應(yīng)的數(shù)據(jù)記錄在數(shù)據(jù)區(qū)的存放地址。鏈表區(qū)結(jié)構(gòu)如圖1所示。

圖1 鏈表區(qū)結(jié)構(gòu)示意圖Fig.1 Linked list area structurd sketch
3.1.2 數(shù)據(jù)區(qū)結(jié)構(gòu)設(shè)計
除去鏈表區(qū)占用的空間,NOR Flash中的剩余空間為數(shù)據(jù)區(qū)。數(shù)據(jù)區(qū)由數(shù)據(jù)單元Data組成,為提高讀寫速率,一般Data大小等于Flash的頁大小。Data由1 B狀態(tài)標志、3 B串聯(lián)地址、1 B數(shù)據(jù)編號和數(shù)據(jù)具體內(nèi)容組成。其中,狀態(tài)標志與Link中的狀態(tài)標志保持一致;數(shù)據(jù)編號表示不同類型的數(shù)據(jù);串聯(lián)地址一般為0,但若1個Data不足以存儲該類數(shù)據(jù),則串聯(lián)地址存放下1個Data的地址。數(shù)據(jù)區(qū)結(jié)構(gòu)如圖2所示。

圖2 數(shù)據(jù)區(qū)示意圖Fig.2 Data area structurd sketch
在數(shù)據(jù)區(qū)設(shè)置Base,Dirty,Reserve和In四個指針。其中,Base為重映射指針,始終指向數(shù)據(jù)區(qū)邏輯地址0對應(yīng)的Sector(即數(shù)據(jù)存入最早的Sector);Dirty指向待擦除的Sector;Reserve指向擦除備用的Sector;In指向待寫入的空閑Data。
寫數(shù)據(jù)時,在In指向的Data中寫入數(shù)據(jù),若數(shù)據(jù)大小超過Data,則查找下一個空閑Data繼續(xù)寫入數(shù)據(jù),直至文件數(shù)據(jù)寫完。同時Data中的狀態(tài)標志和串聯(lián)地址。完成后,在鏈表中查找空閑Link,更新Link中的狀態(tài)標志和數(shù)據(jù)地址。
讀數(shù)據(jù)時,根據(jù)該類數(shù)據(jù)鏈表中的數(shù)據(jù)地址在數(shù)據(jù)區(qū)讀取數(shù)據(jù)。若數(shù)據(jù)占用多個Data,則按照Data中的串聯(lián)地址連續(xù)讀取,直至讀取到完整的數(shù)據(jù)。
鏈表擦除管理當某類數(shù)據(jù)的鏈表中沒有空閑Link時,擦除鏈表,保留狀態(tài)標志為有效的Link。
數(shù)據(jù)區(qū)擦除管理當數(shù)據(jù)區(qū)沒有空閑Data時,將Dirty指向的Sector中狀態(tài)標志為有效的Data轉(zhuǎn)移到Reserve指向的Sector中,然后擦除Dirty指向的Sector。
數(shù)據(jù)區(qū)指針維護初始化時,Base,Dirty指向起始 Sector;In指向起始 Data,Reserve指向尾部Sector。每次寫數(shù)據(jù)時,In按地址順序指向下一個Data。每次數(shù)據(jù)區(qū)擦除時,Dirty,Reserve按地址順序指向下一個Sector。當擦除前Dirty等于Base時,Base按地址順序指向上一個Sector。
數(shù)據(jù)管理流程如圖3所示。

圖3 數(shù)據(jù)管理流程Fig.3 Data manage ment flow chart
由于分鐘凍結(jié)數(shù)據(jù)的保留次數(shù)特別巨大(28800次),若每個Link對應(yīng)一條數(shù)據(jù)記錄,則鏈表占用空間巨大,故需特殊處理——采用“分散式多級鏈表”的方法。
針對分鐘凍結(jié)數(shù)據(jù),每60 min的數(shù)據(jù)共用1個Link(即每個整點數(shù)據(jù)建立1個Link),則鏈表中只需包含480個Link,并且為分鐘凍結(jié)的鏈表分配2個Sector(以4 kB為例,1個Sector可存放1024個Link),可充分滿足保留次數(shù)的要求。
在數(shù)據(jù)區(qū),若Data存儲數(shù)據(jù)為分鐘凍結(jié),則將Data尾部4 B作為分鐘凍結(jié)多級鏈表使用 (如圖4所示的虛線框內(nèi))。其中,1 B為分鐘標志,表示當前Data存儲的分鐘凍結(jié)的具體分鐘數(shù);3 B為跳轉(zhuǎn)地址,表示下一分鐘的分鐘凍結(jié)在數(shù)據(jù)區(qū)的存儲地址。將每小時60 min的數(shù)據(jù)分散在60個Data的跳轉(zhuǎn)地址中,從而實現(xiàn)分鐘凍結(jié)數(shù)據(jù)的存取。
數(shù)據(jù)區(qū)結(jié)構(gòu)變化如圖4所示。

圖4 數(shù)據(jù)區(qū)結(jié)構(gòu)示意圖(含分鐘凍結(jié))Fig.4 Data area structural sketch(include minute freeze)
寫分鐘凍結(jié)數(shù)據(jù)時,與3.2節(jié)中寫數(shù)據(jù)流程相同。完成后,根據(jù)Link中的整點數(shù)據(jù)地址和Data中的跳轉(zhuǎn)地址,逐分鐘查找到上一分鐘所在的Data,將其跳轉(zhuǎn)地址更新為本次寫數(shù)據(jù)的Data地址。
讀分鐘凍結(jié)數(shù)據(jù)時,先根據(jù)小時數(shù)查找Link,再根據(jù)Data中的分鐘數(shù)和跳轉(zhuǎn)地址,逐分鐘查找,讀取具體某一分鐘的數(shù)據(jù)。
分鐘凍結(jié)鏈表擦除管理,即當鏈表中沒有空閑Link時,直接擦除較早的Sector,無需保留其中的有效Link。
按照2.2節(jié)的4個方面與傳統(tǒng)方法進行對比,該方法具有以下突出優(yōu)點:
①RAM占用。通過設(shè)置4個指針,即完成數(shù)據(jù)區(qū)的存取和擦除管理,RAM占用極低。
②擦除頻率與磨損均衡性。每個鏈表可存儲1024條數(shù)據(jù)記錄,遠遠大于保留次數(shù),根據(jù)電表實際應(yīng)用情況,使用壽命期間擦除次數(shù)幾乎為零。對于數(shù)據(jù)區(qū),每個Sector按照地址順序循環(huán)寫入,循環(huán)擦除,磨損均衡性相等。
不再為每類數(shù)據(jù)分配固定的存儲區(qū)域,最大化對數(shù)據(jù)區(qū)進行使用,把擦除頻率降到最低。
③靈活性。當數(shù)據(jù)類型變化或Flash規(guī)格變化時,只需適當調(diào)整Link和Data的大小即可通用。
④對分鐘凍結(jié)的處理。通過對Link和Data的結(jié)構(gòu)進行微調(diào),解決了鏈表占用過大和數(shù)據(jù)存儲區(qū)擦除過于頻繁的問題,無需刻意為分鐘凍結(jié)分配較多的存儲空間。
通過分析智能電能表數(shù)據(jù)的特性以及傳統(tǒng)數(shù)據(jù)管理方法存在的缺陷,并針對智能電能表的需求和目前存在的缺陷,獨立提出了一種新型的智能電能表數(shù)據(jù)管理方法。
該方法基于鏈表和重映射的概念思想,將NOR Flash劃分為鏈表區(qū)和數(shù)據(jù)區(qū)2部分,提高了訪問NOR Flash的科學性和靈活性,且資源占用低,數(shù)據(jù)存取便捷高效。該方法緊密結(jié)合智能電能表數(shù)據(jù)特性,通過設(shè)置4個指針,實現(xiàn)了對數(shù)據(jù)區(qū)的管理維護;通過巧妙的對Link和Data數(shù)據(jù)結(jié)構(gòu)進行微調(diào),便解決分鐘凍結(jié)的問題;與傳統(tǒng)方法相比,在RAM占用、磨損均衡性和擦除頻率以及靈活性等方面都有很大的提高,希望對智能電能表的數(shù)據(jù)管理提供一些參考。