一種歷史數(shù)據(jù)存儲(chǔ)及索引方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù)領(lǐng)域,尤其涉及一種歷史數(shù)據(jù)存儲(chǔ)及索引方法。
【背景技術(shù)】
[0002]對(duì)于很多數(shù)據(jù)采集設(shè)備都需要具有歷史數(shù)據(jù)的存儲(chǔ)及索引查找功能,用于歷史數(shù)據(jù)的恢復(fù),方便使用者查詢之前設(shè)備的數(shù)據(jù)采集信息,在某些情況下服務(wù)器數(shù)據(jù)丟失后可通過歷史數(shù)據(jù)的恢復(fù)調(diào)用完成數(shù)據(jù)分析?,F(xiàn)有歷史數(shù)據(jù)存儲(chǔ)及索引方法較復(fù)雜,占用MCU的RAM空間和ROM空間較大,對(duì)MCU的要求比較高,且存儲(chǔ)時(shí)間和索引時(shí)間較長(zhǎng)。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是克服現(xiàn)有歷史數(shù)據(jù)存儲(chǔ)及索引方法對(duì)MCU的RAM和ROM要求高,提高了 MCU成本的技術(shù)問題,提供了一種簡(jiǎn)單的歷史數(shù)據(jù)存儲(chǔ)及索引方法,其占用MCU的RAM和ROM很小,適用于RAM和ROM較小的MCU,降低了 MCU成本,縮短了編程人員的項(xiàng)目開發(fā)時(shí)間。
[0004]本發(fā)明的一種歷史數(shù)據(jù)存儲(chǔ)方法,包括以下步驟:
51:獲取當(dāng)前存儲(chǔ)數(shù)據(jù)的時(shí)刻為A年B月C日D時(shí);
52:將A數(shù)值代入公式:E=A-4XN,N=0,I,2,3,4......,2000彡E彡2003,計(jì)算得到E,計(jì)算出2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b,從而得到存儲(chǔ)小時(shí)變量b ;
53:計(jì)算出該時(shí)刻數(shù)據(jù)存儲(chǔ)的物理地址的首地址=a+ bXc,a為存儲(chǔ)芯片的存儲(chǔ)基地址,b為存儲(chǔ)小時(shí)變量,c為預(yù)設(shè)的每小時(shí)存儲(chǔ)數(shù)據(jù)量的上限值;
54:將該時(shí)刻需要存儲(chǔ)的數(shù)據(jù)依次存儲(chǔ)在存儲(chǔ)芯片物理地址(a+ bXc)至【a+bXc+(c-1)】?jī)?nèi)。
[0005]在本技術(shù)方案中,該方法支持連續(xù)4年的歷史小時(shí)數(shù)據(jù)存儲(chǔ)和索引,每四年進(jìn)行一次循環(huán)存儲(chǔ)。以2000年、2001年、2002年、2003年作為一個(gè)循環(huán),2004年、2005年、2006年、2007年作為下一個(gè)循環(huán),以此類推。2000 ^ E ^ 2003,其中,2000年為閏年,2001年、2002年和2003年都為平年,2000年2月的天數(shù)為29,2001年2月、2002年2月和2003年2月的天數(shù)為28,2000年的全年小時(shí)數(shù)為8784,2001年、2002年和2003年的全年小時(shí)數(shù)都為8760。該方法按照時(shí)間確定存儲(chǔ)地址,每四年進(jìn)行一次循環(huán)存儲(chǔ),簡(jiǎn)單高效,縮短了歷史數(shù)據(jù)的存儲(chǔ)時(shí)間和索引時(shí)間,對(duì)應(yīng)的程序小,使用的變量少,占用MCU的RAM和ROM很小,適用于RAM和ROM較小的MCU,降低了 MCU成本。
[0006]作為優(yōu)選,所述步驟S2中計(jì)算2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b的方法包括以下步驟:將2000年至E-1年中每年的小時(shí)數(shù)相加得到bl,將E年I月至E年月中每月的小時(shí)數(shù)相加得到b2,將E年B月I日至E年B月C-1日中每日的小時(shí)數(shù)相加得到b3,計(jì)算出存儲(chǔ)小時(shí)變量b= bl+ b2+ b3+D。
[0007]作為優(yōu)選,所述存儲(chǔ)芯片為外部FLASH芯片或SD卡。
[0008]作為優(yōu)選,所述存儲(chǔ)基地址為存儲(chǔ)芯片的首地址或預(yù)設(shè)的存儲(chǔ)芯片物理地址。
[0009]本發(fā)明的一種歷史數(shù)據(jù)索引方法,包括以下步驟:
N1:獲取一個(gè)索引請(qǐng)求,其包含索引的歷史數(shù)據(jù)的存儲(chǔ)時(shí)間為A年B月C日D時(shí);
N2:將A數(shù)值代入公式:E=A-4XN,N=0,I,2,3,4......,2000彡E彡2003,計(jì)算得到E,計(jì)算出2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b,從而得到存儲(chǔ)小時(shí)變量b ;N3:計(jì)算出該數(shù)據(jù)存儲(chǔ)的物理地址的首地址=a+bXc,a為存儲(chǔ)芯片的存儲(chǔ)基地址,b為存儲(chǔ)小時(shí)變量,c為預(yù)設(shè)的每小時(shí)存儲(chǔ)數(shù)據(jù)量的上限值;
N4:確定索引的歷史數(shù)據(jù)依次存儲(chǔ)在存儲(chǔ)芯片物理地址(a+ bXc)至【a+bXc+ (c-1)]內(nèi),并將這些物理地址內(nèi)存儲(chǔ)的數(shù)據(jù)提取出來。
[0010]本發(fā)明的實(shí)質(zhì)性效果是:按照時(shí)間確定存儲(chǔ)地址,每四年進(jìn)行一次循環(huán)存儲(chǔ),簡(jiǎn)單高效,縮短了歷史數(shù)據(jù)的存儲(chǔ)時(shí)間和索引時(shí)間,對(duì)應(yīng)的程序小,使用的變量少,占用MCU的RAM和ROM很小,適用于RAM和ROM較小的MCU,降低了 MCU成本(大RAM、ROM的MCU成本較高),減小了存儲(chǔ)模塊的開發(fā)難度。
【附圖說明】
[0011]圖1是本發(fā)明的歷史數(shù)據(jù)存儲(chǔ)方法的流程圖;
圖2是本發(fā)明的歷史數(shù)據(jù)索引方法的流程圖。
【具體實(shí)施方式】
[0012]下面通過實(shí)施例,并結(jié)合附圖,對(duì)本發(fā)明的技術(shù)方案作進(jìn)一步具體的說明。
[0013]實(shí)施例:本實(shí)施例的一種歷史數(shù)據(jù)存儲(chǔ)方法,如圖1所示,包括以下步驟:
51:獲取當(dāng)前存儲(chǔ)數(shù)據(jù)的時(shí)刻為A年B月C日D時(shí);
52:將A數(shù)值代入公式:E=A-4XN,N=0,I,2,3,4......,2000彡E彡2003,計(jì)算得到E,計(jì)算出2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b,從而得到存儲(chǔ)小時(shí)變量b ;
53:計(jì)算出該時(shí)刻數(shù)據(jù)存儲(chǔ)的物理地址的首地址=a+ bXc,a為存儲(chǔ)芯片的存儲(chǔ)基地址,b為存儲(chǔ)小時(shí)變量,c為預(yù)設(shè)的每小時(shí)存儲(chǔ)數(shù)據(jù)量的上限值;
54:將該時(shí)刻需要存儲(chǔ)的數(shù)據(jù)依次存儲(chǔ)在存儲(chǔ)芯片物理地址(a+ bXe)至【a+bXc+(c-1)]內(nèi)。
[0014]步驟S2中計(jì)算2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b的方法包括以下步驟:將2000年至E-1年中每年的小時(shí)數(shù)相加得到bl,將E年I月至E年B-1月中每月的小時(shí)數(shù)相加得到b2,將E年B月I日至E年B月C-1日中每日的小時(shí)數(shù)相加得到b3,計(jì)算出存儲(chǔ)小時(shí)變量b= bl+ b2+ b3+Do
[0015]該方法支持連續(xù)4年的歷史小時(shí)數(shù)據(jù)存儲(chǔ)和索引,每四年進(jìn)行一次循環(huán)存儲(chǔ)。先將A數(shù)值循環(huán)減4,直到得到的數(shù)值大于等于2000小于等于2003,該得到的數(shù)值為E。以2000年、2001年、2002年、2003年作為一個(gè)循環(huán),2004年、2005年、2006年、2007年作為下一個(gè)循環(huán),以此類推。2000 ^ E ^ 2003,其中,2000年為閏年,2001年、2002年和2003年都為平年,2000年2月的天數(shù)為29,2001年2月、2002年2月和2003年2月的天數(shù)為28,2000年的全年小時(shí)數(shù)為8784,2001年、2002年和2003年的全年小時(shí)數(shù)都為8760。該方法按照時(shí)間確定存儲(chǔ)地址,每四年進(jìn)行一次循環(huán)存儲(chǔ),簡(jiǎn)單高效,縮短了歷史數(shù)據(jù)的存儲(chǔ)時(shí)間和索引時(shí)間,對(duì)應(yīng)的程序小,使用的變量少,占用MCU的RAM和ROM很小,適用于RAM和ROM較小的MCU,降低了 MCU成本。
[0016]以16Mbit的外部FLASH芯片為存儲(chǔ)芯片,該存儲(chǔ)芯片的存儲(chǔ)基地址為0x030000,設(shè)定每小時(shí)存儲(chǔ)數(shù)據(jù)量的上限值為30字節(jié),對(duì)2014年8月8日8點(diǎn)的歷史數(shù)據(jù)進(jìn)行存儲(chǔ)。
[0017]將A=2014 代入公式:E=A-4XN,N=O, 1,2,3,4......,2000 彡 E 彡 2003,計(jì)算得到
E=2002o計(jì)算出2000年I月I日O時(shí)到2002年I月I日O時(shí)之間的小時(shí)數(shù)bl=8784+8760,2002年I月I日O時(shí)到2002年8月I日O時(shí)的小時(shí)數(shù)b2= (31+28+31+30+31+30+31)*24=5088,2002年8月I日O時(shí)到2002年8月8日O時(shí)的小時(shí)數(shù)b3=7*24=168,從而得到存儲(chǔ)小時(shí)變量b=8784+8760+5088+168+8=22808,計(jì)算出該時(shí)刻數(shù)據(jù)存儲(chǔ)的物理地址的首地址=0x030000+22808*30=0xD70D0。將該時(shí)刻需要存儲(chǔ)的數(shù)據(jù)依次存儲(chǔ)在存儲(chǔ)芯片物理地址 0xD70D0 至 0xD70ED 內(nèi)。
[0018]本實(shí)施例的一種基于上述歷史數(shù)據(jù)存儲(chǔ)方法的歷史數(shù)據(jù)索引方法,包括以下步驟:
N1:獲取一個(gè)索引請(qǐng)求,其包含索引的歷史數(shù)據(jù)的存儲(chǔ)時(shí)間為A年B月C日D時(shí);
N2:將A數(shù)值代入公式:E=A-4XN,N=0,I,2,3,4......,2000彡E彡2003,計(jì)算得到E,計(jì)算出2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b,從而得到存儲(chǔ)小時(shí)變量b ;N3:計(jì)算出該數(shù)據(jù)存儲(chǔ)的物理地址的首地址=a+bXc,a為存儲(chǔ)芯片的存儲(chǔ)基地址,b為存儲(chǔ)小時(shí)變量,c為預(yù)設(shè)的每小時(shí)存儲(chǔ)數(shù)據(jù)量的上限值;
N4:確定索引的歷史數(shù)據(jù)依次存儲(chǔ)在存儲(chǔ)芯片物理地址(a+ bXc)至【a+bXc+ (c-1)]內(nèi),并將這些物理地址內(nèi)存儲(chǔ)的數(shù)據(jù)提取出來。
[0019]索引2014年8月8日8點(diǎn)存儲(chǔ)的歷史數(shù)據(jù)。將A=2014代入公式:E=A_4XN,N=0,
1,2,3,4......,2000彡E彡2003,計(jì)算得到E=2002。計(jì)算出2000年I月I日O時(shí)2002年8
月8日O時(shí)的小時(shí)數(shù)b=8784+8760+5088+168+8=22808,計(jì)算出該時(shí)刻數(shù)據(jù)存儲(chǔ)的物理地址的首地址=0x030000+22808*30=0xD70D0ο將存儲(chǔ)芯片物理地址0xD70D0至0xD70ED內(nèi)的數(shù)據(jù)提取出來。
【主權(quán)項(xiàng)】
1.一種歷史數(shù)據(jù)存儲(chǔ)方法,其特征在于,包括以下步驟: 51:獲取當(dāng)前存儲(chǔ)數(shù)據(jù)的時(shí)刻為A年B月C日D時(shí); 52:將A數(shù)值代入公式:E=A-4XN,N=0,I,2,3,4......,2000彡E彡2003,計(jì)算得到E,計(jì)算出2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b,從而得到存儲(chǔ)小時(shí)變量b ; 53:計(jì)算出該時(shí)刻數(shù)據(jù)存儲(chǔ)的物理地址的首地址=a+ bXc,a為存儲(chǔ)芯片的存儲(chǔ)基地址,b為存儲(chǔ)小時(shí)變量,c為預(yù)設(shè)的每小時(shí)存儲(chǔ)數(shù)據(jù)量的上限值; 54:將該時(shí)刻需要存儲(chǔ)的數(shù)據(jù)依次存儲(chǔ)在存儲(chǔ)芯片物理地址(a+ bXc)至【a+bXc+(c-1)】?jī)?nèi)。
2.根據(jù)權(quán)利要求1所述的一種歷史數(shù)據(jù)存儲(chǔ)方法,其特征在于,所述步驟S2中計(jì)算2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b的方法包括以下步驟:將2000年至年中每年的小時(shí)數(shù)相加得到bl,將E年I月至E年B-1月中每月的小時(shí)數(shù)相加得到b2,將E年B月I日至E年B月C-1日中每日的小時(shí)數(shù)相加得到b3,計(jì)算出存儲(chǔ)小時(shí)變Mb= bl+ b2+ b3+Do
3.根據(jù)權(quán)利要求1或2所述的一種歷史數(shù)據(jù)存儲(chǔ)方法,其特征在于:所述存儲(chǔ)芯片為外部FLASH芯片或SD卡。
4.根據(jù)權(quán)利要求1或2所述的一種歷史數(shù)據(jù)存儲(chǔ)方法,其特征在于:所述存儲(chǔ)基地址為存儲(chǔ)芯片的首地址或預(yù)設(shè)的存儲(chǔ)芯片物理地址。
5.一種基于權(quán)利要求1所述歷史數(shù)據(jù)存儲(chǔ)方法的歷史數(shù)據(jù)索引方法,其特征在于,包括以下步驟: N1:獲取一個(gè)索引請(qǐng)求,其包含索引的歷史數(shù)據(jù)的存儲(chǔ)時(shí)間為A年B月C日D時(shí); N2:將A數(shù)值代入公式:E=A-4XN,N=0,I,2,3,4......,2000彡E彡2003,計(jì)算得到E,計(jì)算出2000年I月I日O時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b,從而得到存儲(chǔ)小時(shí)變量b ; N3:計(jì)算出該數(shù)據(jù)存儲(chǔ)的物理地址的首地址=a+bXc,a為存儲(chǔ)芯片的存儲(chǔ)基地址,b為存儲(chǔ)小時(shí)變量,c為預(yù)設(shè)的每小時(shí)存儲(chǔ)數(shù)據(jù)量的上限值; N4:確定索引的歷史數(shù)據(jù)依次存儲(chǔ)在存儲(chǔ)芯片物理地址(a+ bXc)至【a+bXc+ (c-1)]內(nèi),并將這些物理地址內(nèi)存儲(chǔ)的數(shù)據(jù)提取出來。
【專利摘要】本發(fā)明公開了一種歷史數(shù)據(jù)存儲(chǔ)及索引方法。該存儲(chǔ)方法包括以下步驟:獲取當(dāng)前存儲(chǔ)數(shù)據(jù)的時(shí)刻為A年B月C日D時(shí);根據(jù)公式:E=A-4×N,N=0,1,2……,2000≤E≤2003,計(jì)算得到E,計(jì)算出2000年1月1日0時(shí)到E年B月C日D時(shí)之間的小時(shí)數(shù)b;將數(shù)據(jù)存儲(chǔ)在存儲(chǔ)芯片物理地址(a+?b×c)至【a+b×c+(c-1)】?jī)?nèi),a為存儲(chǔ)芯片的存儲(chǔ)基地址,b為存儲(chǔ)小時(shí)變量,c為預(yù)設(shè)的每小時(shí)存儲(chǔ)數(shù)據(jù)量的上限值。該索引方法原理與存儲(chǔ)方法相同。本發(fā)明占用MCU的RAM和ROM很小,適用于RAM和ROM較小的MCU,降低了MCU成本,縮短了編程人員的項(xiàng)目開發(fā)時(shí)間。
【IPC分類】G06F17-30
【公開號(hào)】CN104572812
【申請(qǐng)?zhí)枴緾N201410686481
【發(fā)明人】夏兆勇, 周震宇, 陳秋煌, 周奕勤, 趙帥
【申請(qǐng)人】利爾達(dá)科技集團(tuán)股份有限公司
【公開日】2015年4月29日
【申請(qǐng)日】2014年11月26日