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

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

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

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

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