一種用於電力儀表的數據存儲方法與流程
2023-05-04 05:35:51 1

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