一種電能表的電量數(shù)據(jù)存儲方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電能計量技術(shù)領(lǐng)域,具體涉及一種電能表的電量數(shù)據(jù)存儲方法。
【背景技術(shù)】
[0002]電能表包括MCU和計量芯片,MCU通過計量芯片獲取電量數(shù)據(jù),為保證電量數(shù)據(jù)不丟失,電能表通常還需要非易失存儲器用于存儲電量數(shù)據(jù),現(xiàn)有電能表的電量數(shù)據(jù)存儲方法是在上電時,MCU讀取自身RAM存儲器中的當(dāng)前電量數(shù)據(jù),根據(jù)當(dāng)前電量數(shù)據(jù)計算校驗碼,比較計算得到的校驗碼和預(yù)先存儲在非易失存儲器內(nèi)的初始校驗碼是否一致,若一致,則表示電能表正常工作,若不一致,則從非易失存儲器中恢復(fù)電量數(shù)據(jù)到MCU的RAM存儲器中,在電能表運(yùn)行過程中,MCU通過計量芯片獲取電量數(shù)據(jù)并進(jìn)行電量數(shù)據(jù)的累加,在電能表下電時,MCU讀取自身RAM存儲器中的當(dāng)前電量數(shù)據(jù),根據(jù)當(dāng)前電量數(shù)據(jù)計算校驗碼,將計算得到的校驗碼以及當(dāng)前電量數(shù)據(jù)寫入非易失存儲器中。
[0003]上述現(xiàn)有電能表的電量數(shù)據(jù)存儲方法存在以下問題:只在電能表上電時對計算得到的校驗碼和預(yù)先存儲在非易失存儲器內(nèi)的初始校驗碼進(jìn)行比較,而在電能表的運(yùn)行過程中只累加電量數(shù)據(jù),不對電量數(shù)據(jù)進(jìn)行校驗碼計算,在下電時才更新校驗碼,這樣雖然在正常上下電時,能保證計算得到的校驗碼等于預(yù)先存儲在非易失存儲器內(nèi)的初始校驗碼,但是一旦出現(xiàn)電能表異常復(fù)位,由于電平很不穩(wěn)定,很容易將錯誤的電量數(shù)據(jù)和校驗碼存儲入非易失存儲器中,而且此時MCU的RAM存儲器內(nèi)的電量數(shù)據(jù)也很容易被改寫,導(dǎo)致再次上電時計算得到的校驗碼和預(yù)先存儲在非易失存儲器中的校驗碼不一致,出現(xiàn)數(shù)據(jù)異常,甚至電量數(shù)據(jù)直接復(fù)零,導(dǎo)致計量嚴(yán)重不準(zhǔn)確,而且由于在電能表運(yùn)行過程中,不進(jìn)行數(shù)據(jù)備份,很容易導(dǎo)致數(shù)據(jù)丟失。
【發(fā)明內(nèi)容】
[0004]本發(fā)明要解決的技術(shù)問題是:提供一種能保證電量數(shù)據(jù)準(zhǔn)確可靠存儲、有效防止電量數(shù)據(jù)丟失的電能表的電量數(shù)據(jù)存儲方法。
[0005]本發(fā)明的技術(shù)解決方案是:一種電能表的電量數(shù)據(jù)存儲方法,所述電能表包括MCU、計量芯片和非易失存儲器,所述計量芯片和非易失存儲器均與MCU電連接,其特征在于:它包括以下步驟:
[0006](1)電能表上電,MCU開始計時,自動設(shè)置存儲在MCU的RAM存儲器內(nèi)的第一電量數(shù)據(jù)A1的初始值、第一校驗碼B1的初始值、預(yù)設(shè)的計數(shù)值C、預(yù)設(shè)的存儲次數(shù)D、預(yù)設(shè)的備份時間E、電量累加值Λ A,自動設(shè)置存儲在非易失存儲器的第一存儲區(qū)內(nèi)的第二電量數(shù)據(jù)Α2的初始值和第二校驗碼Β2的初始值,以及非易失存儲器的第二存儲區(qū)內(nèi)的第三電量數(shù)據(jù)A3的初始值和第三校驗碼Β3的初始值;
[0007]⑵MCU自動讀取剛上電時的RAM存儲器中的第一電量數(shù)據(jù)A1,根據(jù)第一電量數(shù)據(jù)A1自動計算第四校驗碼B4,比較第四校驗碼B4和第一校驗碼B1,若兩者一致,則進(jìn)入步驟
(3),若兩者不一致,則自動設(shè)置A1 =A2,B1 =B2,并進(jìn)入步驟(3);
[0008](3) MCU自動讀取計量芯片的快速脈沖計數(shù)寄存器的計數(shù)值Cl,若計數(shù)值Cl到達(dá)預(yù)設(shè)的計數(shù)值C,則MCU自動將計量芯片的快速脈沖計數(shù)寄存器的計數(shù)值Cl清零并進(jìn)入步驟(4),若否,則返回步驟(3)重新讀?。?br>[0009]⑷MCU自動讀取RAM存儲器中的第一電量數(shù)據(jù)Al,根據(jù)第一電量數(shù)據(jù)Al自動計算第四校驗碼B4,比較第四校驗碼B4和第一校驗碼BI,若兩者一致,則進(jìn)入步驟(5),若兩者不一致,則自動設(shè)置Al = A2,BI = B2,并進(jìn)入步驟(5);
[0010](5) MCU自動對第一電量數(shù)據(jù)Al進(jìn)行更新,設(shè)置Al = Al+Λ A,電量累加值Λ A為快速脈沖計數(shù)寄存器的計數(shù)值Cl到達(dá)預(yù)設(shè)的計數(shù)值C時的電量變化值,根據(jù)更新后的第一電量數(shù)據(jù)Al自動計算第四校驗碼Β4,并自動設(shè)置BI = Β4,存儲次數(shù)Dl自動加I ;
[0011](6)MCU自動判斷電能表是否斷電,若是,則進(jìn)入步驟(10),若否,則進(jìn)入步驟
(7);
[0012](7)判斷存儲次數(shù)Dl是否到達(dá)預(yù)設(shè)的存儲次數(shù)D,若是,則存儲次數(shù)Dl自動清零并進(jìn)入步驟(8),若否,則MCU自動判斷計時時間是否到達(dá)預(yù)設(shè)的備份時間Ε,若是,則重新開始計時并進(jìn)入步驟(9),若否,則返回步驟(3);
[0013](8)將RAM存儲器中的第一電量數(shù)據(jù)Al和第一校驗碼BI存儲到非易失存儲器的第一存儲區(qū)中,即自動設(shè)置Α2 =Α1,Β2 = Β1,并返回步驟(3);
[0014](9)將RAM存儲器中的第一電量數(shù)據(jù)Al和第一校驗碼BI存儲到非易失存儲器的第二存儲區(qū)中,即自動設(shè)置A3 =Α1,Β3 = Β1,并返回步驟(3);
[0015](1)MCU自動讀取RAM存儲器中的第一電量數(shù)據(jù)Al,根據(jù)第一電量數(shù)據(jù)Al自動計算第四校驗碼Β4,比較第四校驗碼Β4和第一校驗碼BI,若兩者一致,則將RAM存儲器中的第一電量數(shù)據(jù)Al和第一校驗碼BI存儲到非易失存儲器的第一存儲區(qū)中,即自動設(shè)置Α2 =Al,Β2 = BI,并結(jié)束電量數(shù)據(jù)存儲等待電能表重新上電,若兩者不一致,則直接結(jié)束電量數(shù)據(jù)存儲并等待電能表重新上電。
[0016]采用上述方法后,本發(fā)明具有以下優(yōu)點:
[0017]本發(fā)明電能表的電量數(shù)據(jù)存儲方法在上電時對計算得到的校驗碼和預(yù)先存儲在非易失存儲器內(nèi)的初始校驗碼進(jìn)行比較,在下電時,對當(dāng)前電量數(shù)據(jù)進(jìn)行校驗和存儲,并且在電能表運(yùn)行過程中既對電量數(shù)據(jù)進(jìn)行累加更新,而且還在每次存儲更新電量數(shù)據(jù)時對電量數(shù)據(jù)進(jìn)行校驗,保證了電量數(shù)據(jù)的準(zhǔn)確性,此外還利用了非易失存儲器定期對電量數(shù)據(jù)進(jìn)行存儲和備份,防止了數(shù)據(jù)的丟失,存儲更加可靠。
[0018]作為優(yōu)選,在進(jìn)入步驟(7)之前還需MCU再次自動讀取RAM存儲器中的第一電量數(shù)據(jù)Al,根據(jù)第一電量數(shù)據(jù)Al自動計算第四校驗碼Β4,比較第四校驗碼Β4和第一校驗碼BI,若兩者一致,則進(jìn)入步驟(7),若兩者不一致,則自動設(shè)置Al =Α2,Β1 = Β2,并進(jìn)入步驟
(7)。該設(shè)置使得在電量數(shù)據(jù)更新后還要再進(jìn)行數(shù)據(jù)校驗,使數(shù)據(jù)存儲更加正確可靠。
[0019]在上述優(yōu)選的步驟中自動設(shè)置Al =A2,BI = Β2之后,進(jìn)入步驟(7)之前,還由MCU再次自動讀取RAM存儲器中的第一電量數(shù)據(jù)Al,根據(jù)第一電量數(shù)據(jù)Al自動計算第四校驗碼Β4,比較第四校驗碼Β4和第一校驗碼BI,若兩者不一致,則自動設(shè)置Al = A3,BI =Β3,同時提示非易失存儲器錯誤。該設(shè)置進(jìn)一步提高數(shù)據(jù)存儲的正確性和可靠性,而且可以向用戶提示非易失存儲器的錯誤。
[0020]作為優(yōu)選,所述電量數(shù)據(jù)Al包括組合有功總電量、組合有功尖電量、組合有功峰電量、組合有功平電量、組合有功谷電量、正向有功總電量、正向有功尖電量、正向有功峰電量、正向有功平電量、正向有功谷電量、反向有功總電量、反向有功尖電量、反向有功峰電量、反向有功平電量和反向有功谷電量。該設(shè)置可對多個電量數(shù)據(jù)進(jìn)行校驗。
[0021]作為優(yōu)選,所述電量數(shù)據(jù)A1采用CRC校驗。CRC校驗結(jié)果與多個電量數(shù)據(jù)的排列順序密切相關(guān),而校驗和并無順序要求,這樣CRC校驗更不易出錯,校驗結(jié)果更準(zhǔn)確。
[0022]作為優(yōu)選,所述CRC校驗采用查表法。查表法可加快CRC校驗速度。
[0023]作為優(yōu)選,所述電量累加值Λ A = 0.0lkWh,所述預(yù)設(shè)的計數(shù)值C = C0* Δ A =0.01*C0,CO為電能表的脈沖常數(shù)。該設(shè)置以電能表的最小電量計量單位進(jìn)行電量更新。
[0024]作為優(yōu)選,所述預(yù)設(shè)的存儲次數(shù)D = 100。合理的參數(shù)設(shè)置可保證數(shù)據(jù)可靠地存儲在非易失存儲器中。
[0025]作為優(yōu)選,所述預(yù)設(shè)的備份時間E = 30min。合理的參數(shù)設(shè)置可對數(shù)據(jù)進(jìn)行可靠的備份,即使第一存儲區(qū)出現(xiàn)問題,還有第二存儲區(qū)的備份數(shù)據(jù)可以利用。
【附圖說明】
:
[0026]圖1為本發(fā)明電能表的電量數(shù)據(jù)存儲方法的流程圖。
【具體實施方式】
[0027]下面結(jié)合附圖,并結(jié)合實施例對本發(fā)明做進(jìn)一步的說明。
[0028]實施例:
[0029]如圖1所示,一種電能表的電量數(shù)據(jù)存儲方法,所述電能表包括MCU、計量芯片和非易失存儲器,所述計量芯片和非易失存儲器均與MCU電連接。
[0030](1)電能表上電,MCU開始計時,自動設(shè)置存儲在MCU的RAM存儲器內(nèi)的第一電量數(shù)據(jù)A1的初始值、第一校驗碼B1的初始值、預(yù)設(shè)的計數(shù)值C、預(yù)設(shè)的存儲次數(shù)D、預(yù)設(shè)的備份時間E、電量累加值Λ A,自動設(shè)置存儲在非易失存儲器的第一存儲區(qū)內(nèi)的第二電量數(shù)據(jù)Α2的初始值和第二校驗碼Β2的初始值,以及非易失存儲器的第二存儲區(qū)內(nèi)的第三電量數(shù)據(jù)A3的初始值和第三校驗碼Β3的初始值;本例中,第一電量數(shù)據(jù)Α1、第二電量數(shù)據(jù)Α2和第三電量數(shù)據(jù)A3均由組合有功總電量,組合有功尖電量,組合有功峰電量,組合有功平電量,組合有功谷電量,正向有功總電量,正向有功尖電量,正向有功峰電量,正向有功平電量,正向有功谷電量,反向有功總電量,反向有功尖電量,反向有功峰電量,反向有功平電量,反向有功谷電量這15個電量數(shù)據(jù)組成,每個電量數(shù)據(jù)為4個字節(jié)十六進(jìn)制,使得第一電量數(shù)據(jù)Α1、第二電量數(shù)據(jù)Α2和第三電量數(shù)據(jù)A3均為一個60字節(jié)按一定順序排列而成的十六進(jìn)制數(shù);剛上電時,第一電量數(shù)據(jù)Α1、第二電量數(shù)據(jù)Α2和第三電量數(shù)據(jù)A3的初始值均為0,第一校驗碼Β1、第二校驗碼Β2和第三校驗碼Β3的初始值分別是在Α1 = 0,Α2 = 0,A3 = 0時的CRC校驗碼,CRC校驗碼為兩個字節(jié)十六進(jìn)制,CRC校驗碼采用查表法得到,CRC校驗碼的查表法為現(xiàn)有技術(shù);假設(shè)本例中電能表的脈沖常數(shù)為3200imp/kwh,即每1度電會發(fā)出3200個脈沖,設(shè)置電量累加值Λ A = 0.0lkWh,那么預(yù)設(shè)的計數(shù)值C = 3200*0.01 =