本發(fā)明涉及電工測量技術(shù)技術(shù)領(lǐng)域,尤其是涉及一種用于電力儀表的數(shù)據(jù)存儲方法。
背景技術(shù):
電力儀表用于計(jì)量電力用戶的用電量,并作為用電計(jì)費(fèi)的重要依據(jù),因此,電力儀表中的用電量數(shù)據(jù)、儀表參數(shù)、事件記錄等等數(shù)據(jù)的存儲,要求具有很高的可靠性。
如圖1中所示,常用的高可靠性數(shù)據(jù)存儲方法有三冗余數(shù)據(jù)存儲,數(shù)據(jù)存儲在三個存儲區(qū),每次讀取數(shù)據(jù)時,先讀出三個存儲區(qū)的數(shù)據(jù),再通過表決器獲取數(shù)據(jù),對于三冗余數(shù)據(jù)存儲系統(tǒng),當(dāng)有一個數(shù)據(jù)區(qū)的數(shù)據(jù)損壞時,不影響獲取數(shù)據(jù)的正確性,數(shù)據(jù)存儲需要3倍存儲空間,存儲器的利用率較低。
申請公布號為CN105334383A的發(fā)明專利“一種電能表的電量數(shù)據(jù)存儲方法”公開了一種數(shù)據(jù)存儲方法,將數(shù)據(jù)塊及數(shù)據(jù)塊的校驗(yàn)碼分別存儲在兩個存儲區(qū),每次讀取數(shù)據(jù)時,先讀取一個數(shù)據(jù)區(qū)的數(shù)據(jù)塊及其校驗(yàn)碼,并對數(shù)據(jù)進(jìn)行校驗(yàn),若校驗(yàn)正確則輸出讀取的數(shù)據(jù),若校驗(yàn)錯誤,則讀取第二個數(shù)據(jù)區(qū)的數(shù)據(jù)塊及其校驗(yàn)碼,并對數(shù)據(jù)塊進(jìn)行校驗(yàn),若校驗(yàn)正確則輸出第二個數(shù)據(jù)區(qū)讀取的數(shù)據(jù),若校驗(yàn)校驗(yàn)錯誤則輸出讀數(shù)據(jù)錯誤信息。使用該數(shù)據(jù)存儲方法時,若有一個數(shù)據(jù)區(qū)的數(shù)據(jù)損壞時,不影響獲取數(shù)據(jù)的正確性,數(shù)據(jù)存儲需要2倍存儲空間,與三冗余數(shù)據(jù)存儲方法相比較,CN105334383A的發(fā)明專利“一種電能表的電量數(shù)據(jù)存儲方法”的存儲器的利用率高于上述的三冗余數(shù)據(jù)存儲方法,并且具有同樣高的可靠性。
由于電力儀表中的數(shù)據(jù),除電量數(shù)據(jù)外,還有設(shè)置參數(shù)和事件記錄等數(shù)據(jù)均為重要數(shù)據(jù),也需要具有高可靠性的存儲,每個種類的數(shù)據(jù)塊的大小不相同,有些數(shù)據(jù)塊只有2個字節(jié),如數(shù)據(jù)標(biāo)識為04000801及04000802所組成的數(shù)據(jù)塊只有2個字節(jié),按照CN105334383A的發(fā)明專利“一種電能表的電量數(shù)據(jù)存儲方法”所述的存儲方法,例如對于數(shù)據(jù)長度為4字節(jié)的參數(shù),若校驗(yàn)碼為1個字節(jié),則總的存儲器的空間利用率為:4/[(4+1)x2]=0.4=40%,與三冗余數(shù)據(jù)存儲方法的空間利用率1/3=0.333=33%比較相近,其原因是校驗(yàn)碼占用了過多的空間,從而降低了存儲器的利用率。即使是當(dāng)前正向有功電能量數(shù)據(jù)塊,也會由于所采用的分時費(fèi)率數(shù)不同而數(shù)據(jù)塊的大小也不同,采用4費(fèi)率時,當(dāng)前正向有功電能量數(shù)據(jù)塊的數(shù)據(jù)長度為20字節(jié),而當(dāng)費(fèi)率數(shù)為63費(fèi)率時,當(dāng)前正向有功電能量數(shù)據(jù)塊的數(shù)據(jù)長度為256字節(jié),因此其存儲器的利用率隨數(shù)據(jù)塊的大小不同而不同。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術(shù)的不足,所要解決的技術(shù)問題是提供一種用于電力儀表的數(shù)據(jù)存儲方法,與三冗余數(shù)據(jù)存儲方法具有同樣高的可靠性,并且具有比三冗余數(shù)據(jù)存儲方法更高的存儲器的利用率。
本發(fā)明是通過以下技術(shù)方案使上述技術(shù)問題得以解決。
本發(fā)明所采取的第一技術(shù)方案,一種用于電力儀表的數(shù)據(jù)存儲方法,包括以下步驟:
步驟1:將存儲器的存儲區(qū)域劃分為主存儲數(shù)據(jù)區(qū)域和備份存儲數(shù)據(jù)區(qū)域;
步驟2:將主存儲數(shù)據(jù)區(qū)域和備份存儲數(shù)據(jù)區(qū)域內(nèi)劃分為若干個字節(jié)長度相等的存儲數(shù)據(jù)塊,存儲數(shù)據(jù)塊的字節(jié)長度大于或等于16字節(jié),主存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊為主存儲數(shù)據(jù)塊,備份存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊為備份存儲數(shù)據(jù)塊,數(shù)據(jù)同時存儲于主存儲數(shù)據(jù)塊和備份存儲數(shù)據(jù)塊;
步驟3:每個存儲數(shù)據(jù)塊的數(shù)據(jù)包含數(shù)據(jù)區(qū)和校驗(yàn)碼,校驗(yàn)碼為數(shù)據(jù)區(qū)數(shù)據(jù)的累加和,校驗(yàn)碼用于驗(yàn)證本存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)的數(shù)據(jù)是否有損壞;
步驟4:讀取數(shù)據(jù)時,先讀取主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)和校驗(yàn)碼,計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和并與校驗(yàn)碼進(jìn)行比較,若相同則認(rèn)為讀出數(shù)據(jù)正確并將讀取的數(shù)據(jù)區(qū)數(shù)據(jù)輸出,否則認(rèn)為主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞,當(dāng)主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞時讀取備份存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)和校驗(yàn)碼,計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和并與校驗(yàn)碼進(jìn)行比較,若相同則認(rèn)為讀出數(shù)據(jù)正確并將讀取的數(shù)據(jù)區(qū)數(shù)據(jù)輸出,否則認(rèn)為備份存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞,并輸出讀出錯誤信息;
步驟5:存儲數(shù)據(jù)時,先按步驟4讀取存儲數(shù)據(jù)地址所對應(yīng)的存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù),將需要存儲的數(shù)據(jù)寫入存儲數(shù)據(jù)地址所對應(yīng)的數(shù)據(jù)區(qū)數(shù)據(jù)的相應(yīng)位置,然后計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和校驗(yàn)碼,再將數(shù)據(jù)區(qū)數(shù)據(jù)及累加和校驗(yàn)碼組成一個數(shù)據(jù)塊存儲于主存儲數(shù)據(jù)塊和備份存儲數(shù)據(jù)塊中。
本發(fā)明所采取的第二技術(shù)方案,一種用于電力儀表的數(shù)據(jù)存儲方法,包括以下步驟:
步驟1:將存儲器的存儲區(qū)域劃分為主存儲數(shù)據(jù)區(qū)域和備份存儲數(shù)據(jù)區(qū)域;
步驟2:將主存儲數(shù)據(jù)區(qū)域和備份存儲數(shù)據(jù)區(qū)域內(nèi)劃分為若干個字節(jié)長度相等的存儲數(shù)據(jù)塊,存儲數(shù)據(jù)塊的字節(jié)長度大于或等于16字節(jié),主存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊為主存儲數(shù)據(jù)塊,備份存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊為備份存儲數(shù)據(jù)塊,數(shù)據(jù)同時存儲于主存儲數(shù)據(jù)塊和備份存儲數(shù)據(jù)塊;
步驟3:每個存儲數(shù)據(jù)塊的數(shù)據(jù)包含起始字符、數(shù)據(jù)區(qū)、校驗(yàn)碼、結(jié)束字符,校驗(yàn)碼為數(shù)據(jù)區(qū)數(shù)據(jù)的累加和,校驗(yàn)碼用于驗(yàn)證本存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)的數(shù)據(jù)是否有損壞,起始字符和結(jié)束字符用于判定本存儲數(shù)據(jù)塊是否受到其它寫操作的誤寫操作;
步驟4:讀取數(shù)據(jù)時,先讀取主存儲數(shù)據(jù)塊的全部數(shù)據(jù),計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和并與校驗(yàn)碼進(jìn)行比較,若相同并且起始字符和結(jié)束字符未改變則認(rèn)為讀出數(shù)據(jù)正確并將讀取的數(shù)據(jù)區(qū)數(shù)據(jù)輸出,否則認(rèn)為主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞,當(dāng)主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞時讀取備份存儲數(shù)據(jù)塊的全部數(shù)據(jù),計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和并與校驗(yàn)碼進(jìn)行比較,若相同并且起始字符和結(jié)束字符未改變則認(rèn)為讀出數(shù)據(jù)正確并將讀取的數(shù)據(jù)區(qū)數(shù)據(jù)輸出,否則認(rèn)為備份存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞,并輸出讀出錯誤信息;
步驟5:數(shù)據(jù)存儲時,先按步驟4讀取數(shù)據(jù)存儲地址所對應(yīng)的存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù),將需要存儲的數(shù)據(jù)寫入數(shù)據(jù)存儲地址所對應(yīng)的數(shù)據(jù)區(qū)數(shù)據(jù)的相應(yīng)位置,然后計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和校驗(yàn)碼,再將數(shù)據(jù)區(qū)數(shù)據(jù)、累加和校驗(yàn)碼、起始字符和結(jié)束字符組成一個數(shù)據(jù)塊存儲于主存儲數(shù)據(jù)塊和備份存儲數(shù)據(jù)塊中。
本發(fā)明所采取的第三技術(shù)方案,一種用于電力儀表的數(shù)據(jù)存儲方法,包括以下步驟:
步驟1:將按第1技術(shù)方案或第2技術(shù)方案所提供的存儲器讀寫操作作為硬件層;
步驟2:將硬件層各個主存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)地址按重新編址為線性的邏輯層地址;
步驟3:讀取數(shù)據(jù)時,按照讀取數(shù)據(jù)的邏輯層地址分解出所要讀取的數(shù)據(jù)在硬件層各個存儲數(shù)據(jù)塊中的地址和數(shù)據(jù)長度,按第1技術(shù)方案或第2技術(shù)方案所提供的方法讀取數(shù)據(jù)各個存儲數(shù)據(jù)塊中的數(shù)據(jù),最后將這些數(shù)據(jù)進(jìn)行拼接,然后輸出數(shù)據(jù);
步驟4:數(shù)據(jù)存儲時,依據(jù)所要存儲數(shù)據(jù)的數(shù)據(jù)長度及邏輯層地址,計(jì)算出在硬件層存儲數(shù)據(jù)塊中的地址和在存儲數(shù)據(jù)塊中可存儲的數(shù)據(jù)長度,將所要存儲的數(shù)據(jù)分解成多個要存儲的數(shù)據(jù)塊,按照第一技術(shù)方案或第二技術(shù)方案中所述的數(shù)據(jù)存儲方法將分解成多個要存儲的數(shù)據(jù)塊存儲到各個存儲數(shù)據(jù)塊中。
采用第一技術(shù)方案存儲數(shù)據(jù)時,當(dāng)存儲數(shù)據(jù)塊的字節(jié)長度等于64字節(jié),校驗(yàn)碼為2字節(jié)時存儲器利用率為:[(64-2)/(16x2)]x100%=48.4%。
采用第一技術(shù)方案存儲數(shù)據(jù)時,當(dāng)存儲數(shù)據(jù)塊的字節(jié)長度等于64字節(jié)時,校驗(yàn)碼為2字節(jié),1字節(jié)首部字符和1字節(jié)結(jié)束字符時存儲器利用率為:[(64-4)/(64x2)]x100%=46.8%。
終上所述,遠(yuǎn)高于三冗余數(shù)據(jù)存儲方法33.3%的存儲器利用率。
總而言之,本發(fā)明的一種用于電力儀表的數(shù)據(jù)存儲方法,與三冗余數(shù)據(jù)存儲方法具有同樣高的可靠性,并且具有比三冗余數(shù)據(jù)存儲方法更高的存儲器的利用率。
附圖說明
圖1是現(xiàn)有技術(shù)的三冗余數(shù)據(jù)存儲方法原理框圖;
圖2是本發(fā)明的第1具體實(shí)施例的原理框圖;
圖3是本發(fā)明的第2具體實(shí)施例的原理框圖;
圖4是本發(fā)明的第3具體實(shí)施例的原理框圖。
具體實(shí)施方式
下面結(jié)合附圖對本發(fā)明的實(shí)施方式進(jìn)行詳細(xì)的說明。
實(shí)施例1
如圖2中所示,一種用于電力儀表的數(shù)據(jù)存儲方法,包括以下步驟:
步驟1:將存儲器的存儲區(qū)域劃分為主存儲數(shù)據(jù)區(qū)域和備份存儲數(shù)據(jù)區(qū)域;
步驟2:將主存儲數(shù)據(jù)區(qū)域和備份存儲數(shù)據(jù)區(qū)域內(nèi)劃分為若干個字節(jié)長度相等的存儲數(shù)據(jù)塊,存儲數(shù)據(jù)塊的字節(jié)長度大于或等于16字節(jié),主存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊為主存儲數(shù)據(jù)塊,備份存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊為備份存儲數(shù)據(jù)塊,數(shù)據(jù)同時存儲于主存儲數(shù)據(jù)塊和備份存儲數(shù)據(jù)塊;
步驟3:每個存儲數(shù)據(jù)塊的數(shù)據(jù)包含數(shù)據(jù)區(qū)和校驗(yàn)碼,校驗(yàn)碼為數(shù)據(jù)區(qū)數(shù)據(jù)的累加和,校驗(yàn)碼用于驗(yàn)證本存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)的數(shù)據(jù)是否有損壞;
步驟4:讀取數(shù)據(jù)時,先讀取主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)和校驗(yàn)碼,計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和并與校驗(yàn)碼進(jìn)行比較,若相同則認(rèn)為讀出數(shù)據(jù)正確并將讀取的數(shù)據(jù)區(qū)數(shù)據(jù)輸出,否則認(rèn)為主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞,當(dāng)主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞時讀取備份存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)和校驗(yàn)碼,計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和并與校驗(yàn)碼進(jìn)行比較,若相同則認(rèn)為讀出數(shù)據(jù)正確并將讀取的數(shù)據(jù)區(qū)數(shù)據(jù)輸出,否則認(rèn)為備份存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞,并輸出讀出錯誤信息;
步驟5:存儲數(shù)據(jù)時,先按步驟4讀取存儲數(shù)據(jù)地址所對應(yīng)的存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù),將需要存儲的數(shù)據(jù)寫入存儲數(shù)據(jù)地址所對應(yīng)的數(shù)據(jù)區(qū)數(shù)據(jù)的相應(yīng)位置,然后計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和校驗(yàn)碼,再將數(shù)據(jù)區(qū)數(shù)據(jù)及累加和校驗(yàn)碼組成一個數(shù)據(jù)塊存儲于主存儲數(shù)據(jù)塊和備份存儲數(shù)據(jù)塊中。
存儲數(shù)據(jù)塊的字節(jié)長度為64字節(jié),校驗(yàn)碼為2字節(jié),存儲器利用率為:[(64-2)/(64x2)]x100%=48.4%
實(shí)施例2
如圖3中所示,一種用于電力儀表的數(shù)據(jù)存儲方法,包括以下步驟:
步驟1:將存儲器的存儲區(qū)域劃分為主存儲數(shù)據(jù)區(qū)域和備份存儲數(shù)據(jù)區(qū)域;
步驟2:將主存儲數(shù)據(jù)區(qū)域和備份存儲數(shù)據(jù)區(qū)域內(nèi)劃分為若干個字節(jié)長度相等的存儲數(shù)據(jù)塊,存儲數(shù)據(jù)塊的字節(jié)長度大于或等于16字節(jié),主存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊為主存儲數(shù)據(jù)塊,備份存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊為備份存儲數(shù)據(jù)塊,數(shù)據(jù)同時存儲于主存儲數(shù)據(jù)塊和備份存儲數(shù)據(jù)塊;
步驟3:每個存儲數(shù)據(jù)塊的數(shù)據(jù)包含起始字符、數(shù)據(jù)區(qū)、校驗(yàn)碼、結(jié)束字符,校驗(yàn)碼為數(shù)據(jù)區(qū)數(shù)據(jù)的累加和,校驗(yàn)碼用于驗(yàn)證本存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)的數(shù)據(jù)是否有損壞,起始字符和結(jié)束字符用于判定本存儲數(shù)據(jù)塊是否受到其它寫操作的誤寫操作;
步驟4:讀取數(shù)據(jù)時,先讀取主存儲數(shù)據(jù)塊的全部數(shù)據(jù),計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和并與校驗(yàn)碼進(jìn)行比較,若相同并且起始字符和結(jié)束字符未改變則認(rèn)為讀出數(shù)據(jù)正確并將讀取的數(shù)據(jù)區(qū)數(shù)據(jù)輸出,否則認(rèn)為主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞,當(dāng)主存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞時讀取備份存儲數(shù)據(jù)塊的全部數(shù)據(jù),計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和并與校驗(yàn)碼進(jìn)行比較,若相同并且起始字符和結(jié)束字符未改變則認(rèn)為讀出數(shù)據(jù)正確并將讀取的數(shù)據(jù)區(qū)數(shù)據(jù)輸出,否則認(rèn)為備份存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù)損壞,并輸出讀出錯誤信息;
步驟5:數(shù)據(jù)存儲時,先按步驟4讀取數(shù)據(jù)存儲地址所對應(yīng)的存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)數(shù)據(jù),將需要存儲的數(shù)據(jù)寫入數(shù)據(jù)存儲地址所對應(yīng)的數(shù)據(jù)區(qū)數(shù)據(jù)的相應(yīng)位置,然后計(jì)算數(shù)據(jù)區(qū)數(shù)據(jù)的累加和校驗(yàn)碼,再將數(shù)據(jù)區(qū)數(shù)據(jù)、累加和校驗(yàn)碼、起始字符和結(jié)束字符組成一個數(shù)據(jù)塊存儲于主存儲數(shù)據(jù)塊和備份存儲數(shù)據(jù)塊中。
存儲數(shù)據(jù)塊的字節(jié)長度為64字節(jié),校驗(yàn)碼為2字節(jié),1個字節(jié)的首部字符0x68和一個字節(jié)的結(jié)束字符0x16,存儲器利用率為:[(64-4)/(64x2)]x100%=46.8%。
實(shí)施例3
如圖4中所示,一種用于電力儀表的數(shù)據(jù)存儲方法,包括以下步驟:
步驟1:將按第1技術(shù)方案或第2技術(shù)方案所提供的存儲器讀寫操作作為硬件層;
步驟2:將硬件層各個主存儲數(shù)據(jù)區(qū)域的存儲數(shù)據(jù)塊的數(shù)據(jù)區(qū)地址按重新編址為線性的邏輯層地址;
步驟3:讀取數(shù)據(jù)時,按照讀取數(shù)據(jù)的邏輯層地址分解出所要讀取的數(shù)據(jù)在硬件層各個存儲數(shù)據(jù)塊中的地址和數(shù)據(jù)長度,按第1技術(shù)方案或第2技術(shù)方案所提供的方法讀取數(shù)據(jù)各個存儲數(shù)據(jù)塊中的數(shù)據(jù),最后將這些數(shù)據(jù)進(jìn)行拼接,然后輸出數(shù)據(jù);
步驟4:數(shù)據(jù)存儲時,依據(jù)所要存儲數(shù)據(jù)的數(shù)據(jù)長度及邏輯層地址,計(jì)算出在硬件層存儲數(shù)據(jù)塊中的地址和在存儲數(shù)據(jù)塊中可存儲的數(shù)據(jù)長度,將所要存儲的數(shù)據(jù)分解成多個要存儲的數(shù)據(jù)塊,按照實(shí)施例1或?qū)嵤├?中所述的數(shù)據(jù)存儲方法將分解成多個要存儲的數(shù)據(jù)塊存儲到各個存儲數(shù)據(jù)塊中。
本發(fā)明不局限于以上所述的優(yōu)選實(shí)施方式,基于本領(lǐng)域的技術(shù)人員所能夠獲知的公知技術(shù)或者采用現(xiàn)有技術(shù)中所能夠等效替換的各種變形及更改的實(shí)施方式,凡是基于本發(fā)明的精神或者技術(shù)構(gòu)思,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。