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