📄 static.c
字号:
#include "msp430x44x.h"
#include "DataDef.h"
#include "8563.h"
#include "CommPublic.h"
#include "static.h"
void ResumeStaticData()
{
BYTE TMonth,TDay;
GetPCF8563(2,InitTime,7); //读出时钟
clr_watchdog();
TimerDataHandle();
ptr_1024 =Get1024Page(stDateTime,1);
if(ptr_1024==0) return ;
if(ptr_1024==505) return ;
if(ptr_1024>511) return ;
Read1024(ptr_1024,PMONTH,&TMonth,1);
Read1024(ptr_1024,PDATE,&TDay,1);
clr_watchdog();
if((TMonth == stDateTime.month) && (TDay == (stDateTime.week_date & 0x1f)))
{
ReadStaticData();
}
else
{
ClearDayData();//清当天的历史数据和统计数据
}
}
void ReadStaticData()
{
char c1;
clr_watchdog();
ptr_1024 =Get1024Page(stDateTime,1);
if(ptr_1024==0) return ;
if(ptr_1024==505) return ;
if(ptr_1024>511) return ;
Read1024(ptr_1024,PYCOVERLIMIT, (BYTE*)(&over_limit[0].YCcode), 64);//越限
clr_watchdog();
Read1024(ptr_1024,PVALUE_TIME, (BYTE*)(&value_time[0].value), 64);//极值
clr_watchdog();
Read1024(ptr_1024,PPOWER_SUPPLY_STATE,(BYTE*)(&off_time[0].DomainFlag),54);//停电记录
clr_watchdog();
for(c1=0;c1<3;c1++)
if(Read1024(ptr_1024,PRTSTATE,(BYTE*)(&RunState.ARunTime),sizeof(RTSTATE))) break;
}
void FileReadStaticData(BYTE nSeg , BYTE * pData) //文件传输时用
{
clr_watchdog();
ptr_1024 =Get1024Page(stFileName,1);
if(ptr_1024==0) return ;
if(ptr_1024==505) return ;
if(ptr_1024>511) return ;
switch(nSeg)
{
case 0:
Read1024(ptr_1024,PVALUE_TIME, pData, 64);//极值
break;
case 1:
Read1024(ptr_1024,PYCOVERLIMIT, pData, 64);//越限记录组
break;
case 2:
Read1024(ptr_1024,PRTSTATE, pData, sizeof(RTSTATE));//供电情况组
break;
case 3:
Read1024(ptr_1024,PPOWER_SUPPLY_STATE, pData,54);//停电记录组
break;
case 4:
Read1024(ptr_1024,PSUMOFPOWER, pData,MAXDD*sizeof(long));//电度记录组
break;
default:
break;
}
}
void WriteStaticsData(BYTE mode)//从RAM写到FLASH
{
BYTE c[2],n;
BYTE *pchar;
pchar=(BYTE *)fr;
ptr_1024 =Get1024Page(stDateTime,1);
if(ptr_1024==0) return ;
if(ptr_1024==505) return ;
if(ptr_1024>511) return ;
Read1024(ptr_1024,PMONTH, c, 2);
if((c[0] !=stDateTime.month) || c[1] !=(stDateTime.week_date & 0x1f) )
{
c[0]=stDateTime.month;
c[1]=(stDateTime.week_date & 0x1f);
Write1024(ptr_1024,PMONTH, c, 2,TRUE);
}
if(mode & W_SUMOFPOWER)
SavePower();
n= 8*sizeof(OverLimitData) +16* sizeof(SLim_Time)+9* sizeof(OffTimeData) + sizeof(RTSTATE) ;
memcpy(pchar+n, fi,24 );
memcpy(pchar, over_limit,sizeof(over_limit) );
n =sizeof(over_limit);
memcpy(pchar+n, value_time,sizeof(value_time) );
n+=sizeof(value_time);
memcpy(pchar+n, off_time,sizeof(off_time) );
n+=sizeof(off_time);
memcpy(pchar+n, &RunState,sizeof(RunState) );
n+=sizeof(RunState);
// r= 8*sizeof(OverLimitData) +16* sizeof(SLim_Time)+9* sizeof(OffTimeData) + sizeof(RTSTATE) ;
// for(n=0;n<3;n++)
// {r= Write1024(ptr_1024,PYCOVERLIMIT,(BYTE*)(over_limit),sizeof(OverLimitData)+ sizeof(RTSTATE),TRUE);
// if(r) break;
// }
Write1024(ptr_1024,PYCOVERLIMIT,(BYTE*)(fr),n+24 ,TRUE);
clr_watchdog();
/*
if(mode & W_SUMOFPOWER)
{
SavePower(); //保存电量
Read1024(0,PVPOWERB,c,MAXDD*sizeof(long));
Write1024(ptr_1024,PSUMOFPOWER,c,MAXDD*sizeof(long),TRUE);//电能
clr_watchdog();
}
if(mode & W_POW_OFF) //停电记录
{
for(n=0;n<3;n++)
if( Write1024(ptr_1024,PPOWER_SUPPLY_STATE,(BYTE*)(&off_time[0].DomainFlag),54,TRUE)) break;
}
if(mode & W_YC_LIMT)
{
Write1024(ptr_1024,PYCOVERLIMIT, (BYTE*)(&over_limit[0].YCcode), 64,TRUE);//越限
}
clr_watchdog();
if(mode & W_OV_V)
{
Write1024(ptr_1024,PVALUE_TIME, (BYTE*)(&value_time[0].value), 64,TRUE);//极值
}*/
clr_watchdog();
}
void GetStaticRecord()
{
BYTE mode=0;
BYTE hour=stDateTime.hour ;
BYTE minu=stDateTime.minute;
unsigned int time=( int)(hour<<8) + minu;
if(( Uabc.Ua<POFFVALUE) &&(Uabc.Ub<POFFVALUE) &&(Uabc.Uc<POFFVALUE) )
{
if(RunState.UsS != 0x3) //上次不是停电状态
{
PwOffHand(4, TRUE,time);
mode |=W_POW_OFF;
DeviceState.doSavePowerOff=1; //停电状态记录
}
RunState.UsS = 0x3;
}
else
{
if(RunState.UsS !=0)
{
PwOffHand(4, FALSE,time);
mode |=W_POW_OFF;
}
RunState.UsS = 0;
}
//a 相
if((Uabc.Ua<=nhighV-ULIMIT)&&(Uabc.Ua>=nlowV+ULIMIT))//正常状态
{
if( RunState.UaS!=0x0)
{
if( RunState.UaS==0x1||RunState.UaS==0x2 ) //上次越限状态
{
LimitHand(1, FALSE,time,0) ;
mode |=W_YC_LIMT;
}
if(RunState.UaS==0x3) //上次是停电状态
{
PwOffHand(1, FALSE,time);
mode |=W_POW_OFF;
}
}
RunState.UaS=0x0;
}
if((Uabc.Ua<nlowV)&&(Uabc.Ua>=POFFVALUE))//越下限
{
if(RunState.UaS!=0x2) //上次状态不为越下限
{
if(RunState.UaS==0x3) //上次为停电状态
{
PwOffHand(1, FALSE,time);
mode |= W_POW_OFF;
}
if(RunState.UaS==0x1) //上次为越上限
{
LimitHand(1, FALSE,time,0 ) ; //上次结束时间保存
mode |=W_YC_LIMT;
}
clr_watchdog();
LimitHand(1, TRUE,time,2 ) ;
}
RunState.UaS=0x2;
if(DeviceState.Minutef1) RunState.UaDownSTime ++;
}
if(Uabc.Ua>nhighV) //越上限
{
if(RunState.UaS!=0x1) //上次不是越上限状态
{
if(RunState.UaS==0x3) //上次为停电状态
{
PwOffHand(1, FALSE,time);
mode |= W_POW_OFF;
}
if(RunState.UaS==0x2) //上次为越下限
{
LimitHand(1, FALSE,time,0) ;//上次结束时间保存
mode |=W_YC_LIMT;
}
LimitHand(1, TRUE,time,1 );
}
RunState.UaS=0x01;
if(DeviceState.Minutef1)RunState.UaUpSTime++;
}
if(Uabc.Ua<POFFVALUE) //电压小于POFFVALUE/10伏,认为停电
{
if(RunState.UaS!=0x3) //上次不是停电
{
if( ((RunState.UaS==0x1)||(RunState.UaS==0x2))) //越限结束时间保存
{
LimitHand(1, FALSE,time,0) ;
mode |=W_YC_LIMT;
}
PwOffHand(1, TRUE,time);
RunState.nAOffNums++; //停电次数
}
RunState.UaS=0x3;
}
else
if(DeviceState.Minutef1) RunState.ARunTime++;
clr_watchdog();
//b相
if((Uabc.Ub<=nhighV-ULIMIT)&&(Uabc.Ub>=nlowV+ULIMIT))//正常状态
{
if(RunState.UbS!=0x0)
{
if( RunState.UbS==0x1||RunState.UbS==0x2 ) //上次越限状态
{
LimitHand(2, FALSE,time,0) ;
mode |=W_YC_LIMT;
}
if(RunState.UbS==0x3) //上次为停电状态
{
PwOffHand(2, FALSE,time);
mode |= W_POW_OFF;
}
}
RunState.UbS=0;
}
if((Uabc.Ub<nlowV)&&(Uabc.Ub>=POFFVALUE))//越下限
{
if(RunState.UbS!=0x2) //上次状态不为越下限
{
if(RunState.UbS==0x3) //上次为停电状态
{
PwOffHand(2, FALSE,time);
mode |= W_POW_OFF;
}
if(RunState.UbS==0x1) //上次为越上限
{
LimitHand(2, FALSE,time,0) ;
mode |=W_YC_LIMT;
}
clr_watchdog();
LimitHand(2, TRUE,time,2 ) ;
}
RunState.UbS=0x2;
//A相电压日越下限时间
if(DeviceState.Minutef1) RunState.UbDownSTime++;
}
if(Uabc.Ub>nhighV) //越上限
{
if(RunState.UbS!=0x1) //上次不是越上限状态
{
if(RunState.UbS==0x3) //上次为停电状态
{
PwOffHand(2, FALSE,time);
mode |= W_POW_OFF;
}
if(RunState.UbS==0x2) //上次为越下限
{
LimitHand(2, FALSE,time,0) ;//上次结束时间保存
mode |=W_YC_LIMT;
}
LimitHand(2, TRUE,time, 1) ;
}
RunState.UbS=0x01;
//日越上限时间
if(DeviceState.Minutef1) RunState.UbUpSTime++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -