1.一種電能表掉電保護(hù)數(shù)據(jù)存貯方法,其特征在于:在電能表的MCU的RAM中設(shè)置掉電保護(hù)數(shù)據(jù)塊、指針PA、指針PB,將需要掉電保護(hù)的數(shù)據(jù)集中在一起并加上CRC校驗(yàn),存入掉電保護(hù)數(shù)據(jù)塊中;
在電能表的非易失性存貯器中設(shè)置循環(huán)備份存貯區(qū)A和循環(huán)備份存貯區(qū)B,在循環(huán)備份存貯區(qū)A和循環(huán)備份存貯區(qū)B中均設(shè)置若干個(gè)用于存貯掉電保護(hù)數(shù)據(jù)塊中數(shù)據(jù)的備份數(shù)據(jù)區(qū)塊;
在電能表的MCU中設(shè)置定時(shí)器,當(dāng)定時(shí)時(shí)間到,且在這個(gè)定時(shí)間隔中有電量數(shù)據(jù)變化,就啟動(dòng)一次數(shù)據(jù)備份的寫(xiě)操作,寫(xiě)操作的過(guò)程如下:
先將要保存的掉電保護(hù)數(shù)據(jù)塊中的數(shù)據(jù)寫(xiě)入循環(huán)備份存貯區(qū)A 中指針PA所指向的備份數(shù)據(jù)區(qū)塊,然后讀出進(jìn)行比對(duì),若寫(xiě)入不正確,再重復(fù)寫(xiě)入,若寫(xiě)入成功,則指針PA 指向后續(xù)一塊備份數(shù)據(jù)區(qū)塊;若重復(fù)三次都寫(xiě)入不成功,則放棄本次對(duì)循環(huán)備份存貯區(qū)A的寫(xiě)入;按上述方法將要保存的掉電保護(hù)數(shù)據(jù)塊中的數(shù)據(jù)寫(xiě)入循環(huán)備份存貯區(qū)B中;
當(dāng)電能表MCU檢測(cè)到掉電時(shí),若在上次定時(shí)寫(xiě)入后有電量數(shù)據(jù)變化,也啟動(dòng)一次上述的數(shù)據(jù)備份的寫(xiě)操作,寫(xiě)完后,進(jìn)入休眠模式;
當(dāng)重新上電后,電能表MCU從休眠模式喚醒,先從非易失性存貯器中恢復(fù)數(shù)據(jù)到掉電保護(hù)數(shù)據(jù)塊,恢復(fù)過(guò)程如下:
(1).讀出循環(huán)備份存貯區(qū)A的各備份數(shù)據(jù)區(qū)塊,若不存在CRC校驗(yàn)錯(cuò)的備份數(shù)據(jù)區(qū)塊,則將總電量值最小的那個(gè)備份數(shù)據(jù)區(qū)塊的位置作為下一次數(shù)據(jù)存貯指針PA;
若存在CRC校驗(yàn)錯(cuò)的備份數(shù)據(jù)區(qū)塊,則舍棄CRC校驗(yàn)錯(cuò)的備份數(shù)據(jù)區(qū)塊,并將該備份數(shù)據(jù)區(qū)塊的位置作為下一次數(shù)據(jù)存貯指針PA;
在CRC校驗(yàn)正確的備份數(shù)據(jù)區(qū)塊中找到總電量值最大的備份數(shù)據(jù)區(qū)塊,作為循環(huán)備份存貯區(qū)A的當(dāng)前塊;
(2).用上述同樣的方法再找到循環(huán)備份存貯區(qū)B的當(dāng)前塊和指針PB;
(3).將找到的循環(huán)備份存貯區(qū)A的當(dāng)前塊、循環(huán)備份存貯區(qū)B的當(dāng)前塊進(jìn)行比較,總電量值大的當(dāng)前塊中的數(shù)據(jù)恢復(fù)至RAM中的掉電保護(hù)數(shù)據(jù)塊內(nèi)。
2.如權(quán)利要求1所述的一種電能表掉電保護(hù)數(shù)據(jù)存貯方法,其特征在于:步驟(3):將找到的循環(huán)備份存貯區(qū)A的當(dāng)前塊、循環(huán)備份存貯區(qū)B的當(dāng)前塊進(jìn)行比較,總電量值大的當(dāng)前塊中的數(shù)據(jù)恢復(fù)至RAM中的掉電保護(hù)數(shù)據(jù)塊內(nèi)。