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