📄 commpublic.c
字号:
Read1024(ptr_1024,AddrInPage,&pdata[m],4);
if((pdata[m+2]!=(*st).month)||((pdata[m+1]&0x1f)!=(*st).week_date))
{
pdata[m]=0;pdata[m+1]=0;
}
else
{
Read1024(ptr_1024,AddrInPage+16,&pdata[m],2);
}
AddrInPage+=128; m+=2; (*len)+=2;
}
ptr_1024+=1;
AddrInPage=0;
}
break;
case 29: //st对应的日曲线q
for(i=0;i<12;i++)
{
for (j=0;j<2;j++)
{
Read1024(ptr_1024,AddrInPage,&pdata[m],4);
if((pdata[m+3]!=(*st).month)||((pdata[m+1]&0x1f)!=(*st).week_date))
{
pdata[m]=0;pdata[m+1]=0;
}
else
{
Read1024(ptr_1024,AddrInPage+18,&pdata[m],2);
}
AddrInPage+=64; m+=2; (*len)+=2;
}
ptr_1024+=1;
AddrInPage=0;
}
break;
default:
break;
}
if((*len>maxlen)||(*len==0))
return FALSE;
else
return TRUE;
}
void RefreshData(void)//统计数据实时刷新
{
if(Psum >10 )
{
AddedPQ[0] += Psum; //正向有功
}
if(Psum <-10)
{
AddedPQ[1] += -Psum; //反向有功
}
if(Qsum > 10)
{
AddedPQ[2] += Qsum ;
}
if(Qsum < -10)
{
AddedPQ[3]+= -Qsum; //反向无功
}
}
void RefreshTimer(void)
{
stDateTime.second++;
if( stDateTime.second==0 || stDateTime.second==10 ||stDateTime.second==20 ||
stDateTime.second==30|| stDateTime.second==40 ||stDateTime.second==50 )
{
DeviceState.TenSecf =1;
}
if((stDateTime.hour ==23 )&& (stDateTime.minute == 59) && (stDateTime.second == 59) )
{
ptr_1024=Get1024Page(stDateTime,1); //保存统计数据时间到
if(RunState.nAOffNums == 0 && RunState.ARunTime > 1435)RunState.ARunTime = 1440;
if(RunState.nBOffNums == 0 && RunState.BRunTime > 1435)RunState.BRunTime = 1440;
if(RunState.nCOffNums == 0 && RunState.CRunTime > 1435)RunState.CRunTime = 1440;
if(RunState.nSOffNums == 0 && RunState.SRunTime > 1435)RunState.SRunTime = 1440;
WriteStaticsData(0xff);
}
if(stDateTime.second <60)
return ; //满1分钟进位
stDateTime.second = 0;
stDateTime.minute +=1;
if((stDateTime.minute%(15*HisCate))==0)
{
DeviceState.doSaveHisdata = 1;
}
// DeviceState.Minutef=1; //模块通讯开始标志置1
if((stDateTime.hour ==23 )&& (stDateTime.minute == 59) ) //满1天进位
DeviceState.Datef=1;
if ( (stDateTime.hour==2 ) && (stDateTime.minute == 8) )
DeviceState.Timef=1;
if(stDateTime.minute <60)
return; //满1小时进位
stDateTime.minute =0;
stDateTime.hour += 1;
DeviceState.Hourf=1;
if(stDateTime.hour <24) //满1天进位
return;
stDateTime.hour = 0;
DeviceState.NewData=1;//清数据
ClearDayData(); //清数据
//保存统计数据时用到
//nDate=(stDateTime.week_date&0x1f);
// nMonth=stDateTime.month;
if( ((stDateTime.week_date&0xe0)>>5)>=7) //星期更新
stDateTime.week_date &= 0x3f;
else
stDateTime.week_date +=0x20;
if ( (stDateTime.week_date&0x1f) < 28 ) //如果大于等于28天,进行判断
{
stDateTime.week_date += 1; //天数加
return;
}
clr_watchdog();
switch (stDateTime.week_date&0x1f)
{
case 28:
if((stDateTime.month)!=2)
{
stDateTime.week_date+=1;
return;
}
else if ( ((stDateTime.year&0x3)==0)&& (stDateTime.year!=100) ) // 闰年
{
stDateTime.week_date+=1;
return;
}
else
{
stDateTime.week_date &=0xe0; //天数由28->1
stDateTime.week_date+=1;
}
break;
case 29:
if((stDateTime.month)!=2)
{
stDateTime.week_date+=1;
return;
}
else
{
stDateTime.week_date &=0xe0;
stDateTime.week_date+=1;
}
break;
case 30:
if ((stDateTime.month == 1)||(stDateTime.month == 3)||(stDateTime.month == 5)||(stDateTime.month==7)||(stDateTime.month == 8)||(stDateTime.month == 10)||(stDateTime.month==12))
{
stDateTime.week_date+=1;
return;
}
else
{
stDateTime.week_date &=0xe0;
stDateTime.week_date+=1;
}
break;
case 31:
stDateTime.week_date &=0xe0;
stDateTime.week_date+=1;
break;
}
if(stDateTime.month<12)
{
stDateTime.month += 1;
return;
}
else
{
stDateTime.month = 1;
if(stDateTime.year < 99)
{
stDateTime.year += 1;
}
else
{
stDateTime.year = 0;
}
}
}
// 极值的更新
void GetMaxMinValue()
{
BYTE i;
int* ptemp = 0;
ptemp = (int*) &BD_data.Ua;
for(i = 0; i < 8; i ++)//ua ia ub ib uc ic p q max value
{
if((*ptemp) > value_time[i].value) // max value
{
SpecialFlag.YCChangeFlag = 1;
value_time[i].value = *ptemp;
value_time[i].time = stDateTime.hour;//小时
value_time[i].time <<= 8;
value_time[i].time += stDateTime.minute;//分钟
}
ptemp ++ ;
}
//统计数据的极小值
ptemp = (int*)&BD_data.Ua;
for(i = 0; i < 3; i ++) //ua ub uc min value
{
if(((*ptemp) < value_time[i+8].value) || (value_time[i+8].value == 0))//mim value
{
SpecialFlag.YCChangeFlag = 1;
value_time[i+8].value = *ptemp;
value_time[i+8].time = stDateTime.hour;//小时
value_time[i+8].time <<= 8;
value_time[i+8].time += stDateTime.minute;//分钟
}
ptemp += 2;
}
}
void SavePower() //电度量保存
{
int t,num,wr;
long *pdd;
pdd= fi;
clr_watchdog(); //看门狗计数清零
Read1024(0,PVPOWERB,(BYTE*)(pdd),24);
wr=0;
for(num=0;num<6;num++)
{
t=GetAddedPQ(num);
if(t)
{
pdd[num] +=t;
wr=1;
clr_watchdog(); //看门狗计数清零
}
}
if(wr)
{
memcpy(pdd+24, (BYTE*)AddedPQ,20);
CommState.DoWrParm=1;
Write1024(0,PVPOWERB,(BYTE*)(pdd),24+20,TRUE);
CommState.DoWrParm=0;
}
clr_watchdog(); //看门狗计数清零
}
void ReadPower() //读取电量
{
Read1024(0,PVPOWEREND,(BYTE*)AddedPQ,20);
if(AddedPQ[0]<0 || AddedPQ[0] > 360000L ) AddedPQ[0]=0;
if(AddedPQ[1]<0 || AddedPQ[1] > 360000L ) AddedPQ[1]=0;
if(AddedPQ[2]<0 || AddedPQ[2] > 360000L ) AddedPQ[2]=0;
if(AddedPQ[3]<0 || AddedPQ[3] > 360000L ) AddedPQ[3]=0;
if(AddedYM[0]>YM_CONST)AddedYM[0]=0;
if(AddedYM[1]>YM_CONST)AddedYM[1]=0;
}
void PowerONHand() //来电处理
{
}
int GetAddedPQ(int i)
{
int t=0;
if(i>=0 && i<4)
while( AddedPQ[i] >360000L )
{
t++;
AddedPQ[i] -= 360000L ;
}
if(i==4 || i==5) //YM handle
while( AddedYM[i-4] >YM_CONST )
{
t++;
AddedYM[i-4] -= YM_CONST ;
}
return t;
}
long ReadOneDD(BYTE num) //电度量读取
{
long dd;
clr_watchdog();
Read1024(0,PVPOWERB+(num<<2),(BYTE*)(&dd),4);
clr_watchdog();
return dd;
}
long ReadOneD2(BYTE num) //电度量通讯
{
long dd;
clr_watchdog(); //看门狗计数清零
Read1024(0,PVPOWERB+(num<<2),(BYTE*)(&dd),4);
if( num<4)dd += AddedPQ[num] /360000L;
if(num==4 || num==5)dd += AddedYM[num-4]/YM_CONST ;
clr_watchdog();
return dd;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -