基于主站时间实现智能电表数据采集模块获取实时时间的方法

文档序号:5946085阅读:226来源:国知局
专利名称:基于主站时间实现智能电表数据采集模块获取实时时间的方法
技术领域
本发明涉及智能电表 实现智能电表数据采集模块获取实时时间的方法。
背景技术
智能电表均包括数据采集模块,用以采集用电数据并发送给主站。由于需要准确地确定时间,以保证数据采集的时间段正确,因此在数据采集模块上要实现实时时钟功能。现有技术的智能电表都包括有一个独立的时钟芯片以及向该时钟芯片供电的电池。保证时钟芯片不断电的情况下,能够向数据采集模块提供正确的实时时间。但是该种智能电表,在电池断电的情况下,数据采集模块就无法获得实时时间,而且用电池向时钟芯片供电也会造成能源的浪费。

发明内容
本发明的目的是克服了上述现有技术中的缺点,提供一种能够在没有时钟芯片和供电电池的情况下,实现实时时钟功能,从而解决现有技术中电池断电无法获得实时时间,且电池供电造成能源浪费的问题,且应用方式简便,实现成本低廉,应用范围广泛的基于主站时间实现智能电表数据采集模块获取实时时间的方法。主站通过网络连接所述智能电表的数据采集模块,所述的智能电表还包括存储芯片,所述的存储芯片连接所述的数据采集模块。为了实现上述的目的,本发明的基于主站时间实现智能电表数据采集模块获取实时时间的方法包括以下步骤(I)所述的数据采集模块启动,并获取智能电表的电表时间;(2)所述的数据采集模块从所述的存储芯片读取前一次对时操作时主站时间和电表时间的时间差;(3)所述的数据采集模块将所述的电表时间与所述的时间差的和设定为数据采集模块的实时时间,并将所述的实时时间存储到存储芯片;(4)所述的主站通过所述的网络对智能电表的数据采集模块进行对时操作;(5)所述的数据采集模块将所述的实时时间作为主站对时时间;(6)所述的数据采集模块将主站时间和电表时间的时间差存入所述的存储芯片。该基于主站时间实现智能电表数据采集模块获取实时时间的方法中,在所述的存储芯片未储存前一次对时操作时主站时间和电表时间的时间差的情况下,所述的数据采集模块从所述的存储芯片读取前一次对时操作时主站时间和电表时间的时间差为O。该基于主站时间实现智能电表数据采集模块获取实时时间的方法中,所述的数据采集模块将所述的电表时间与所述的时间差的和设定为数据采集模块的实时时间,具体为所述的数据采集模块将所述的电表时间设定为数据采集模块的实时时间。该基于主站时间实现智能电表数据采集模块获取实时时间的方法中,在所述的存储芯片储存有前一次对时操作时主站时间和电表时间的时间差的情况下,所述的电表时间与所述的时间差的和为主站时间。该基于主站时间实现智能电表数据采集模块获取实时时间的方法中,所述的存储芯片为闪存,所述的闪存包括实时时间寄存器单元和时间差寄存器单元。采用了该发明的基于主站时间实现智能电表数据采集模块获取实时时间的方法,智能电表在前一次对时过程中,数据采集模块将主站时间和电表时间的时间差存入所述的存储芯片,而在后一次对时中,数据采集模块将主站时间和存储芯片中的时间差相加作为实时时间,从而可以在无需时钟芯片和时钟芯片电源的智能电表中实现数据采集模块的实时时间,解决了现有技术中电池断电无法获得实时时间的问题,也避免了电池供电造成的能源浪费,降低了智能电表的整体功耗。且本发明 的基于主站时间实现智能电表数据采集模块获取实时时间的方法的应用方式简便,实现成本低廉,应用范围也较为广泛。


图I为本发明的方法中主站、智能电表和数据采集模块的连接关系图。图2为本发明基于主站时间实现智能电表数据采集模块获取实时时间的方法的步骤流程图。图3为本发明的方法在实际应用中重启数据采集模块时设置实时时间的流程示意图。图4为本发明的方法在实际应用中主站对时时求时间差并设置实时时间的流程示意图。图5为本发明的方法在实际应用中所采用的主机对时操作界面示意图。
具体实施例方式为了能够更清楚地理解本发明的技术内容,特举以下实施例详细说明。如图I所示,为主站、智能电表和数据采集模块的连接关系图。其中,主站通过网络连接所述智能电表的数据采集模块,所述的智能电表还包括存储芯片(图中未示出),所述的存储芯片为连接所述的数据采集模块的闪存,该闪存包括实时时间寄存器单元和时间
差寄存器单元。请参阅图2所示,为本发明基于主站时间实现智能电表数据采集模块获取实时时间的方法的步骤流程图,该方法包括以下步骤(I)所述的数据采集模块启动,并获取智能电表的电表时间;(2)所述的数据采集模块从所述的存储芯片读取前一次对时操作时主站时间和电表时间的时间差;(3)所述的数据采集模块将所述的电表时间与所述的时间差的和设定为数据采集模块的实时时间,并将所述的实时时间存储到存储芯片;(4)所述的主站通过所述的网络对智能电表的数据采集模块进行对时操作;(5)所述的数据采集模块将所述的实时时间作为主站对时时间;(6)所述的数据采集模块将主站时间和电表时间的时间差存入所述的存储芯片。在一种优选的实施方式中,当所述的存储芯片未储存前一次对时操作时主站时间和电表时间的时间差的情况下,所述的步骤(2)中数据采集模块从所述的存储芯片读取前一次对时操作时主站时间和电表时间的时间差为O。相应的,步骤(3)中所述的数据采集模块将所述的电表时间与所述的时间差的和设定为数据采集模块的实时时间,具体为所述的数据采集模块将所述的电表时间设定为数据采集模块的实时时间。在另一种优选的实施方式中,当所述的存储芯片储存有前一次对时操作时主站时间和电表时间的时间差的情况下,所述的电表时间与所述的时间差的和则为主站时间。在实际应用中,本发明的基于主站时间实现智能电表数据采集模块获取实时时间的方法的主要实现方式是将主站时间当作标准时间,电表的时间作为参考时间,来实现数据采集模块的实时时间。如图3和4所示,具体采取以下步骤I、数据采集模块上电时,获取智能电表的时间。2、获取主站时间和智能电表时间的时间差,如果是主站从未对数据采集模块进行过对时操作,则将该时间差记为O。3、智能电表的时间加上主站和智能电表的时间差,如果主站对数据采集模块有过对时的操作,则两者之和应为主站时间;如果主站未对数据采集模块做过对时操作,则它们两者之和为电表时间,将该时间设为数据采集模块的实时时间。4、当主站对数据采集模块作对时操作时,获取主站时间和智能电表的时间,求出两者的时间差,把该时间差到flash芯片中。5、数据采集模块下次上电时,再从步骤I开始运行。在实际应用中,本发明的基于主站时间实现智能电表数据采集模块获取实时时间的方法所采用的主机对时操作界面如图5所示。具体而言,主站对时时,数据采集模块 (onu)计算主站和电表的时间差,及设置数据采集模块的实时时间(rtc)的程序如下H〇ST_C〇MM—STATUS DLT698ControlF3l_r(FKACKINFO ^packinfo, SWORD pn, SBYTE^punitbuffer, BINT ^punitlength, SBYTE state)
{
if (punitbuffer == NULL I I punitlength == NULL)
{
dare_printf("func:%s, line :%d, param error\n",_func_,__LINE_); return H〇ST_C〇MM—ERR—FAILED;
}
struct rtc time rtm; rtm.tm sec = punitbuffer[O] / 16 * 10 + punitbuffer
% 16; rtm.tm min = punitbuffer[I] / 16 * 10 + punitbuffer[I] % I 6; rtm.tm hour = punitbuffer[2] / 16 ^ 10 + punitbuffer[2] % 16; rtm.tm mday = punitbuffer[3] / 16 ^ 10 + punitbuffer[3] % 16; rtm. tm mon = ( (punitbuf fer [4] >> 4) & OxO I) *10+ (punitbuf fer [ 4 ] & OxOf); rtm.tm year = punitbuffer[5] / 16 ^ 10 + punitbuffer[5] % 16;; rtm.tm yday = getYearDay(rtm);
rtm.tm wday ^ GetWeekDay r(rtm.tm year + 2000, rtm.tm mon, rtm.tm mday);
if(getTimelnterval(rtm) !=〇)
printf("getTimeInterval error.\nn);
printf("Set DATE : %4d-%02d-%02d (wday=%d) TIME: % 2 d: % 0 2 d: % 0 2 d,
%d,yday=%d\nM ,
rtm.tm—year, rtm.tm—mon, rtm.tm—mday, rtm.tm—wday,
rtm.tm—hour,rtm.tm—min,rtm.tm—sec,punitbuffer[4],
rtm■tm—yday);
rtcSet(&rtm);
adj ustTimeFlag = I;
return HOST_COMM_ST S_OK;
} - --
〇PL—STATUS getTimelnterval(struct rtc—time master—time)
{ — —
OPL_STATUS retVal = OPL_OK;
ATIME metervalue;
ΤΙΜΕ mastervalue;
ΤΙΜΕ timeIntervaI;
ATIME timedddd;
ATIME time—all;
STIME mstime;
STIME ostime;
char strtime[4] = {'Τ','Ι','Μ','Ε'}; char *p,*ptmp; int i;
struct tm ^nowtime; struct rtc time onu time;struct FlashPara flashpara;
mstime. Second = master—time .tm—sec; mstime.Minute = master time .tm min; mstime. Hour = master time .tm hour; mstime. Day = master time .tm mday; mstime.Month = master time .tm mon; mstime. Year = master—time■tm—year + 2 0 0 0;
mstime.Week = (master_time.tm_wday == 0) 7 : master—time .tm—wday;
timeInterval =〇;
retVal = ReadMeterTime(0);
if(retVal == OPL_OK)
{ _
OsPackStime2Atime r(&metervalue, &gtime);
OsPackStime2Atime_r(&mastervalue, &mstime); timelnterval = mastervalue - metervalue;
}
printf(”timelnterval=%d\n”,timelnterval);
retVal += drvFlashRead(SW—METER—FILE—BASE—ADDR + HOURDATA—SI ZE +MONTHDATA—SIZE + DAYDATA—SIZE + DAYDATABACKUP—SI ZEr
&flashpara, sizeof(struct FlashPara));memcpy(flashpara.strtime, strtime, 4);flashpara.timeOffset 二 timeInterval;retVal += drvFlashErase(SW—METER—FILE_BASE—ADDR + HOURDATA—SIZE +MONTHDATA—SIZE + DAYDATA—SIZE 十 DAYDATABACKUP_SI ZE , SW—METER—FILE_BASE—ADDR +HOURDATA—SIZE + MONTHDATA_SIZE + DAYDATA_SIZE + DAYDATABACKUP_SIZE +(DRV—FLASH4K—SECT—SIZE -1));
—retVaT +=— drvFlashWrite(SW—METER—FILE—BASE—ADDR + HOURDATA—SIZE +MONTHDATA—SIZE + DAYDATA—SIZE + DAYDATABACKUP—SI ZE,
&flashpara, sizeof(struct FlashPara));
return retVal;
}
void SetRTCtime(ΑΤΙΜΕ mastervalue)
{
struct tm ^nowtime; struct rtc—time rtm;
nowtime = localtime (^mastervalue); rtm.tm—sec = nowtime->tm_sec; rtm.tm min = nowtime->tm min; rtm.tm hour = nowtime->tm hour; rtm.tm mday = nowtime->tm mday; rtm.tm mon = nowtime->tm mon + I; rtm.tm_year = nowtime->tm_year - 10 0; rtm.tm_yday = getYearDay(rtm);
rtm.tm_wday = GetWeekDay_r(rtm.tm_year + 2 0 0 0, rtm.tm—mon, rtm.tm—mday);
rtcSet(&rtm); printf(
" SetRTC date:%0 4d-%0 2d-%0 2d (wday^%d,yday^%d) TIME:%2d:%02d:%02d\n",\
rtm■tm—year,rtm.tm—mon,rtm.tm_mday, rtm.tm_wday, rtm.tm—yday,\
rtm·tm—hour,rtm,tm—min,rtm.tm_sec);
} — ——Onu上电时读取电表时间,设置rtc时间的程序如下int DARE—init()
{ 一
ret = ReadMeterTi me(O); if(ret == OPL_OK)
{ 一
OsPackStime2Atime r(&metervalue, &gtime); timelnterval 二 〇;
drvFlashRead(SW—METER—FILE_BASE—ADDR+HOURDATA—SI ZE+
MONTHDATA—SIZE + DAYDATA_SIZE + DAYDATABACKUP_SIZE, strtime, sizeof(strtime));
if (strtime [ 0 ] == ' T ' && strtime [ I ] == 1I1 && strtime [ 2 ] == ' M' &&strtime[3] == 1E1)
{
dare printf("read time interval.\n”);
drvFlashRead(SW—METER—FILE_BASE—ADDR + HOURDATA—SI ZE +MONTHDATA—SIZE + DAYDATA—SIZE 十 DAYDATABACKUP_SIZE + sizeof(strtime),&timelnterval, sizeof(ΑΤΙΜΕ));
}
dare printf ( M----------------------timelnterval=
%ld\nM,timelnterval);
mastervalue = metervalue + time Interval;
SetRTCtime(mastervalue);
}
}采用了该发明的基于主站时间实现智能电表数据采集模块获取实时时间的方法,智能电表在前一次对时过程中,数据采集模块将主站时间和电表时间的时间差存入所述的存储芯片,而在后一次对时中,数据采集模块将主站时间和存储芯片中的时间差相加作为实时时间,从而可以在无需时钟芯片和时钟芯片电源的智能电表中实现数据采集模块的实时时间,解决了现有技术中电池断电无法获得实时时间的问题,也避免了电池供电造成的能源浪费,降低了智能电表的整体功耗。且本发明的基于主站时间实现智能电表数据采集模块获取实时时间的方法的应用方式简便,实现成本低廉,应用范围也较为广泛。在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
权利要求
1.一种基于主站时间实现智能电表数据采集模块获取实时时间的方法,所述的主站通过网络连接所述智能电表的数据采集模块,所述的智能电表还包括存储芯片,所述的存储芯片连接所述的数据采集模块,其特征在于,所述的方法包括以下步骤 (1)所述的数据米集模块启动,并获取智能电表的电表时间; (2)所述的数据采集模块从所述的存储芯片读取前一次对时操作时主站时间和电表时间的时间差; (3)所述的数据采集模块将所述的电表时间与所述的时间差的和设定为数据采集模块的实时时间,并将所述的实时时间存储到存储芯片; (4)所述的主站通过所述的网络对智能电表的数据采集模块进行对时操作; (5)所述的数据采集模块将所述的实时时间作为主站对时时间; (6)所述的数据采集模块将主站时间和电表时间的时间差存入所述的存储芯片。
2.根据权利要求I所述的基于主站时间实现智能电表数据采集模块获取实时时间的方法,其特征在于,在所述的存储芯片未储存前一次对时操作时主站时间和电表时间的时间差的情况下,所述的数据采集模块从所述的存储芯片读取前一次对时操作时主站时间和电表时间的时间差为O。
3.根据权利要求2所述的基于主站时间实现智能电表数据采集模块获取实时时间的方法,其特征在于,所述的数据采集模块将所述的电表时间与所述的时间差的和设定为数据采集模块的实时时间,具体为 所述的数据采集模块将所述的电表时间设定为数据采集模块的实时时间。
4.根据权利要求I所述的基于主站时间实现智能电表数据采集模块获取实时时间的方法,其特征在于,在所述的存储芯片储存有前一次对时操作时主站时间和电表时间的时间差的情况下,所述的电表时间与所述的时间差的和为主站时间。
5.根据权利要求I所述的基于主站时间实现智能电表数据采集模块获取实时时间的方法,其特征在于,所述的存储芯片为闪存,所述的闪存包括实时时间寄存器单元和时间差寄存器单元。
全文摘要
本发明涉及一种基于主站时间实现智能电表数据采集模块获取实时时间的方法,在该方法中,智能电表在前一次对时过程中,数据采集模块将主站时间和电表时间的时间差存入所述的存储芯片,而在后一次对时中,数据采集模块将主站时间和存储芯片中的时间差相加作为实时时间,从而可以在无需时钟芯片和时钟芯片电源的智能电表中实现数据采集模块的实时时间,解决了现有技术中电池断电无法获得实时时间的问题,也避免了电池供电造成的能源浪费,降低了智能电表的整体功耗。且本发明的基于主站时间实现智能电表数据采集模块获取实时时间的方法的应用方式简便,实现成本低廉,应用范围也较为广泛。
文档编号G01R22/00GK102636692SQ20121010809
公开日2012年8月15日 申请日期2012年4月13日 优先权日2012年4月13日
发明者刘军华, 徐正伟 申请人:上海大亚科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1