劉東偉
衡水市冀州區(qū)綜合檢驗檢測中心 河北衡水 053200
電能表的類型在社會經(jīng)濟(jì)發(fā)展的過程中也在不斷增加,各大廠商所生產(chǎn)的電能表也大不相同,這一因素就會導(dǎo)致各個型號的電能表之間的質(zhì)量也存在較大差異,而電能表檢定工作的主要作用就是確保電能表在正常使用中能夠可靠計量,但在開展電能表檢定工作的過程中會出現(xiàn)一些較難解決的問題。
目前,常用的智能電能表存儲芯片有3種,即FRAM,EEPROM和NORFlash。其中,F(xiàn)RAM的空間最小,主要用于存儲數(shù)據(jù)變化最頻繁的電能量數(shù)據(jù);EEPROM的空間適中,用于存儲需量、參數(shù)、關(guān)聯(lián)列表等變化頻率一般的數(shù)據(jù);NORFlash的空間最大,用于存儲事件、凍結(jié)等數(shù)據(jù)量較大且寫入后不會頻繁改變的數(shù)據(jù)。FRAM和EEPROM[6]無需擦除,可直接對任意地址進(jìn)行“寫”操作,且使用壽命較長,基本不需要對存儲數(shù)據(jù)進(jìn)行特殊管理,但是其存儲容量較小且價格昂貴。NORFlash[7]支持任意地址的訪問,在“寫”操作前必須進(jìn)行擦除,一次性擦除范圍隨芯片特性而定,一般不小于4kB,使用不夠便捷,需要對存儲數(shù)據(jù)進(jìn)行有效管理,但是存儲容量較大且價格便宜。基于這3種存儲芯片特性,在此僅討論對NORFlash存儲數(shù)據(jù)(主要是事件、凍結(jié)數(shù)據(jù))的管理方法。以三相智能電能表為例,共有72類事件、13類凍結(jié),共計85類數(shù)據(jù)需要存儲在NORFlash。
將NORFlash的最小擦除單元記為Sector,則傳統(tǒng)方法管理流程可描述如下:
步驟1根據(jù)每類數(shù)據(jù)的數(shù)據(jù)大小,以Sector為單位,分別劃分固定的存儲區(qū)域。
步驟2為每類數(shù)據(jù)分別設(shè)置In,Out和Sum三個變量。其中,In始終指向“寫”操作地址;Out始終指向最早的1條記錄;Sum為當(dāng)前實際存儲的數(shù)據(jù)記錄總次數(shù)。
步驟3盡可能多地為分鐘凍結(jié)分配Sector,以降低擦除頻率。寫數(shù)據(jù)時按照In指向的地址寫入。讀數(shù)據(jù)時根據(jù)Out和要讀取的數(shù)據(jù)順序編號來計算偏移地址,再讀取數(shù)據(jù)。擦除管理即當(dāng)分配的存儲區(qū)無空閑時,擦除Out指向的Sector,同時更新In,Out和Sum的值。
(1)RAM占用。每類數(shù)據(jù)都要分配3個指針,85個文件共計占用約1kB,對資源緊張的電表而言,RAM占用較大。
(2)擦除頻率與磨損均衡性。產(chǎn)生頻繁的某類數(shù)據(jù)存儲區(qū)會擦除頻繁,不經(jīng)常產(chǎn)生的某些類數(shù)據(jù)存儲區(qū)則長時間處于空閑狀態(tài)。另外,若某種故障工況下導(dǎo)致某些事件頻繁產(chǎn)生,或者某類數(shù)據(jù)的數(shù)據(jù)量較大時,也會提高擦除頻率。整體而言,擦除頻率可控性較差,整片F(xiàn)lash的磨損均衡性也較差。
(3)靈活性。每類數(shù)據(jù)的存儲區(qū)域是預(yù)先固定的,當(dāng)數(shù)據(jù)類型變化或Flash規(guī)格變化時,都需重新分配存儲區(qū)域,靈活性較差。
(4)對分鐘凍結(jié)的處理。沒有特別的針對性措施,只能通過多分配Sector來降低分鐘凍結(jié)存儲區(qū)域的擦除頻率。
所提新型智能電能表數(shù)據(jù)管理方法結(jié)合智能電能表數(shù)據(jù)的特性,采用鏈表和重映射的概念思想,提高了訪問NORFlash的科學(xué)性和靈活性,且資源占用低,數(shù)據(jù)存取便捷高效,適用于智能電能表。
以Sector為單位,將NORFlash劃分為鏈表區(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)容進(jìn)行存取操作。
(1)鏈表區(qū)結(jié)構(gòu)設(shè)計。鏈表區(qū)由多個鏈表組成。為便于管理,每個鏈表大小可設(shè)置為與Sector相等,每類數(shù)據(jù)對應(yīng)各自的鏈表。因此,對于三相智能電能表,鏈表區(qū)大小為85個Sector。鏈表由鏈表單元Link組成。Link由1B狀態(tài)標(biāo)志和3B數(shù)據(jù)地址組成。其中,狀態(tài)標(biāo)志表示4種狀態(tài),空閑、有效、可擦除、已擦除;數(shù)據(jù)地址表示該Link對應(yīng)的數(shù)據(jù)記錄在數(shù)據(jù)區(qū)的存放地址。
(2)數(shù)據(jù)區(qū)結(jié)構(gòu)設(shè)計。除去鏈表區(qū)占用的空間,NORFlash中的剩余空間為數(shù)據(jù)區(qū)。數(shù)據(jù)區(qū)由數(shù)據(jù)單元Data組成,為提高讀寫速率,一般Data大小等于Flash的頁大小。Data由1B狀態(tài)標(biāo)志、3B串聯(lián)地址、1B數(shù)據(jù)編號和數(shù)據(jù)具體內(nèi)容組成。其中,狀態(tài)標(biāo)志與Link中的狀態(tài)標(biāo)志保持一致;數(shù)據(jù)編號表示不同類型的數(shù)據(jù);串聯(lián)地址一般為0,但若1個Data不足以存儲該類數(shù)據(jù),則串聯(lián)地址存放下1個Data的地址。
在數(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)標(biāo)志和串聯(lián)地址。完成后,在鏈表中查找空閑Link,更新Link中的狀態(tài)標(biāo)志和數(shù)據(jù)地址。
與傳統(tǒng)方法相比,在RAM占用、磨損均衡性和擦除頻率以及靈活性等方面都有很大的提高,希望對智能電能表的數(shù)據(jù)管理提供一些參考。