劉曉輝1,,李鵬1,胡光娜2
?。?.河南許繼儀表有限公司,,河南 許昌461000; 2.國(guó)網(wǎng)吉林省電力有限公司延邊供電公司,,吉林 延吉 133000)
摘要:為了解決電能表系統(tǒng)數(shù)據(jù)現(xiàn)場(chǎng)升級(jí)程序容易出現(xiàn)數(shù)據(jù)混亂的問(wèn)題,,分析了目前電能表系統(tǒng)數(shù)據(jù)存儲(chǔ)的方式,針對(duì)目前電能表系統(tǒng)數(shù)據(jù)存儲(chǔ)的問(wèn)題提出了改善方案,。通過(guò)數(shù)據(jù)鏈表創(chuàng)造出一個(gè)可以自由伸縮的數(shù)據(jù)存儲(chǔ)系統(tǒng),,形成了以數(shù)據(jù)塊為存儲(chǔ)單元的存儲(chǔ)模式,解決了電能表系統(tǒng)中新增加數(shù)據(jù)會(huì)導(dǎo)致現(xiàn)有數(shù)據(jù)地址改變的問(wèn)題,。文章先從目前電能表系統(tǒng)數(shù)據(jù)存儲(chǔ)的問(wèn)題說(shuō)起,,隨后提出了新的數(shù)據(jù)存儲(chǔ)模型,,并一一介紹了新數(shù)據(jù)存儲(chǔ)模型的創(chuàng)建、讀取,、寫(xiě)入及刪除等操作,,并在電能表上成功實(shí)現(xiàn)了新數(shù)據(jù)存儲(chǔ)模型。
關(guān)鍵詞:數(shù)據(jù)存儲(chǔ),;數(shù)據(jù)索引,;鏈表;數(shù)據(jù)結(jié)構(gòu)
0引言
在目前很多電能表系統(tǒng)中,,數(shù)據(jù)存儲(chǔ)都是順序存儲(chǔ)模式,,導(dǎo)致現(xiàn)場(chǎng)升級(jí)完程序后時(shí)常會(huì)有數(shù)據(jù)混亂問(wèn)題出現(xiàn),究其原因是因?yàn)殚_(kāi)發(fā)人員新增加數(shù)據(jù),,但沒(méi)有按順序添加到數(shù)據(jù)列的最后面而導(dǎo)致?,F(xiàn)在很多的電能表系統(tǒng)都是以EEPROM作為擴(kuò)展的外部數(shù)據(jù)存儲(chǔ)器,單相電能表一般采用32 KB的EEPROM存儲(chǔ)器來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),,國(guó)網(wǎng)智能電表系統(tǒng)中的數(shù)據(jù)都是以數(shù)據(jù)標(biāo)識(shí)符的形式定義,,在EEPROM中存儲(chǔ)時(shí)通常都以順序方式進(jìn)行數(shù)據(jù)排列。這種存儲(chǔ)方法形式比較單一,,數(shù)據(jù)必須按照固定的格式進(jìn)行順序排序,,一旦有新的數(shù)據(jù)添加,這個(gè)新數(shù)據(jù)必須排在數(shù)據(jù)列的最后面,,否則就會(huì)影響其他數(shù)據(jù)在EEPROM中的地址,,導(dǎo)致電能表升級(jí)程序后數(shù)據(jù)出現(xiàn)異常。本文提出一種新的數(shù)據(jù)存儲(chǔ)方法,,解決了新增數(shù)據(jù)必須在數(shù)據(jù)列的最后面添加的弊端,,各個(gè)業(yè)務(wù)模塊都可以在數(shù)據(jù)列任意位置添加新數(shù)據(jù)而不用擔(dān)心電能表升級(jí)程序后數(shù)據(jù)異常的問(wèn)題。
1數(shù)據(jù)存儲(chǔ)的原理
本文提出的這種數(shù)據(jù)存儲(chǔ)的原理基于鏈表[1]的數(shù)據(jù)處理方法,,電能表內(nèi)的數(shù)據(jù)采用雙向鏈表的形式進(jìn)行組合,業(yè)務(wù)模塊需要添加新數(shù)據(jù)時(shí),,只需要將新數(shù)據(jù)頭指針指向前一個(gè)數(shù)據(jù),,尾指針指向后一項(xiàng)數(shù)據(jù),整個(gè)數(shù)據(jù)鏈不會(huì)受到破壞[2],。數(shù)據(jù)存儲(chǔ)原理如圖1,。
2數(shù)據(jù)的創(chuàng)建和刪除
根據(jù)上述原理,需要對(duì)EEPROM存儲(chǔ)器進(jìn)行整體格式化,即對(duì)存儲(chǔ)空間進(jìn)行分塊并標(biāo)記,,如圖2所示,。分塊就是將32 KB的存儲(chǔ)空間以16 B為1塊劃分,那么就可以分成2 048個(gè)塊,,用前面16個(gè)塊(2 048 bit位)來(lái)標(biāo)記每一塊的使用情況,,每一個(gè)bit位值為1代表所指向的塊處于使用狀態(tài),,bit位值為0代表所指向的塊處于空閑狀態(tài)[3]。
2.1數(shù)據(jù)的創(chuàng)建
創(chuàng)建一個(gè)數(shù)據(jù)就必須有一個(gè)總的數(shù)據(jù)索引FileIndex結(jié)構(gòu)對(duì)象,,這個(gè)數(shù)據(jù)索引要實(shí)現(xiàn)的功能就是能通過(guò)它找到EEPROM中存放的每一個(gè)數(shù)據(jù),,那么這個(gè)FileIndex結(jié)構(gòu)定義就需要有每個(gè)數(shù)據(jù)的地址映射。由數(shù)據(jù)索引[46]開(kāi)圖2存儲(chǔ)空間分塊及標(biāo)記示意圖始,,數(shù)據(jù)索引中包含第一個(gè)數(shù)據(jù)的起始地址,,由此地址可以訪問(wèn)到第一個(gè)數(shù)據(jù)。然后由數(shù)據(jù)結(jié)構(gòu)struct FILE中的數(shù)據(jù)指針pFileNext指向下一個(gè)數(shù)據(jù)的地址,,數(shù)據(jù)結(jié)構(gòu)FILE中的數(shù)據(jù)指針pData則指向本數(shù)據(jù)區(qū)域(數(shù)據(jù)區(qū)域就是用來(lái)真正存放數(shù)據(jù)的EEPROM地址),,依次遞推,查找每一個(gè)數(shù)據(jù),,比較數(shù)據(jù)與要?jiǎng)?chuàng)建的新數(shù)據(jù)是否不同(通常采用數(shù)據(jù)標(biāo)識(shí)符區(qū)分),,不同則從存儲(chǔ)空間中查找空閑塊分配給該新數(shù)據(jù)使用,相同則不處理,。創(chuàng)建數(shù)據(jù)的時(shí)序圖如圖3,。
2.2數(shù)據(jù)的刪除
數(shù)據(jù)的刪除與數(shù)據(jù)的創(chuàng)建過(guò)程很相似。首先讀出EEPROM中存放的FileIndex結(jié)構(gòu)對(duì)象,,由其中的數(shù)據(jù)指針找到第一個(gè)數(shù)據(jù),,判斷數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)名與要?jiǎng)h除的數(shù)據(jù)名是否一致,一致則刪除數(shù)據(jù)結(jié)構(gòu)中數(shù)據(jù)塊指針并釋放存儲(chǔ)空間,;否則由數(shù)據(jù)結(jié)構(gòu)中的下一個(gè)數(shù)據(jù)指針讀出下一個(gè)數(shù)據(jù)進(jìn)行數(shù)據(jù)名比較,,依次遞推,直到找到要?jiǎng)h除的數(shù)據(jù)為止,。釋放存儲(chǔ)空間需要將釋放的數(shù)據(jù)塊標(biāo)記置為空閑狀態(tài),,以便創(chuàng)建新數(shù)據(jù)時(shí)使用。數(shù)據(jù)刪除時(shí)序圖如圖4,。
3數(shù)據(jù)的讀寫(xiě)操作
在完成數(shù)據(jù)的創(chuàng)建工作之后,,就可以通過(guò)數(shù)據(jù)名對(duì)數(shù)據(jù)進(jìn)行讀寫(xiě)操作。
3.1數(shù)據(jù)的讀取
數(shù)據(jù)的讀取是通過(guò)讀取EEPROM中的FileIndex結(jié)構(gòu)對(duì)象,,由讀出的FileIndex對(duì)象里的數(shù)據(jù)指針找到第1個(gè)數(shù)據(jù)的,。比較數(shù)據(jù)的數(shù)據(jù)名與要讀取的數(shù)據(jù)名是否相同,如果相同則通過(guò)指向數(shù)據(jù)域的指針pData把要訪問(wèn)的EEPROM中數(shù)據(jù)讀出來(lái),;不同則通過(guò)數(shù)據(jù)結(jié)構(gòu)中的下一個(gè)數(shù)據(jù)指針pFileNext讀出第2個(gè)數(shù)據(jù),,然后繼續(xù)比較數(shù)據(jù)名是否一樣。以此遞推,,直到找到與要讀取的數(shù)據(jù)名一致的數(shù)據(jù)為止,,圖5為讀數(shù)據(jù)的實(shí)現(xiàn)過(guò)程。
3.2數(shù)據(jù)的寫(xiě)入
寫(xiě)數(shù)據(jù)的操作過(guò)程與讀數(shù)據(jù)的過(guò)程非常相似,也是通過(guò)讀數(shù)據(jù)索引FileIndex找到第一個(gè)數(shù)據(jù),,然后比較數(shù)據(jù)名是否一致,,直到找到數(shù)據(jù)名匹配的數(shù)據(jù)為止,根據(jù)數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)域指針pData把數(shù)據(jù)存儲(chǔ)到EEPROM中對(duì)應(yīng)地址中去,,實(shí)現(xiàn)了按數(shù)據(jù)名寫(xiě)數(shù)據(jù)的操作,,如圖6所示?! ?/p>
4結(jié)束語(yǔ)
本文介紹的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),,數(shù)據(jù)的創(chuàng)建和刪除不會(huì)影響其他數(shù)據(jù)項(xiàng),各個(gè)業(yè)務(wù)模塊在處理新數(shù)據(jù)時(shí)只需將新數(shù)據(jù)添加到業(yè)務(wù)模塊處理的數(shù)據(jù)塊中,,不會(huì)影響其他業(yè)務(wù)模塊的數(shù)據(jù),。該數(shù)據(jù)存儲(chǔ)系統(tǒng)已經(jīng)在單相智能表中實(shí)現(xiàn)及應(yīng)用,解決了因新增數(shù)據(jù)而導(dǎo)致其他數(shù)據(jù)地址發(fā)生變化的問(wèn)題,,從而避免了因現(xiàn)場(chǎng)升級(jí)程序而電能表數(shù)據(jù)混亂的發(fā)生,。
參考文獻(xiàn)
[1] 李無(wú)言.一步步寫(xiě)嵌入式操作系統(tǒng):ARM編程的方法與實(shí)踐[M].北京:電子工業(yè)出版社,,2011.
?。?] BIC L F, SHAW A C.操作系統(tǒng)原理[M].梁洪亮,譯.北京:清華大學(xué)出版社,,2005.
?。?] 馬志剛,劉文怡,凌偉,等.基于PCI和LVDS的高速數(shù)據(jù)存儲(chǔ)系統(tǒng)的設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2014,40(4):8083.
?。?] 張良,曹社香.面向卷級(jí)存儲(chǔ)系統(tǒng)即時(shí)恢復(fù)的高效索引方法[J].電子技術(shù)應(yīng)用,2014,40(7):116118.
?。?] 龔雪容,劉根賢,生擁宏,等.基于Flash的關(guān)鍵變量容錯(cuò)存儲(chǔ)技術(shù)研究[J].電子技術(shù)應(yīng)用,2014,40(11):911,15.
?。?] 徐涴砯,陳光,高孟茹,,等.GPS船舶試航數(shù)據(jù)提取與存儲(chǔ)系統(tǒng)的開(kāi)發(fā)[J].微型機(jī)與應(yīng)用,2013,32(23):8689.