📄 commpublic.c
字号:
#include "CommPublic.h"
void ClearDayData();//清当天的历史数据和统计数据
BYTE CheckSum(BYTE* pBuffer, int nLength)
{
int i;
BYTE byteRet = 0;
for( i=0; i<nLength; i++)
byteRet += pBuffer[i];
return byteRet;
}
BYTE BCDtoHex(BYTE bcd)//一个字节的bcd转换
{
BYTE result;
result=(((bcd&0xF0)>>4)*10);
result+=(bcd&0xF);
return result;
}
BYTE HextoBCD(BYTE hex) //right
{
BYTE result;
if(hex>9)
result=((hex/10)<<4)+(hex%10);
else
result=hex;
return result;
}
void SaveHisData(void)//从RAM写到FLASH 76个BYTE
{
BYTE AddrInPage=0,c[24];
ptr_1024=Get1024Page(stDateTime,0);
if(ptr_1024==0) return;
if(ptr_1024==505) return;
if(ptr_1024>511) return;
AddrInPage=GetAddrInPage(stDateTime);
Write1024(ptr_1024,AddrInPage,(BYTE*)(&stDateTime.second+1),4,TRUE); //minute,hour ,date_week,month
AddrInPage+=4;
Write1024(ptr_1024,AddrInPage,(BYTE*)&BD_data.Ua,56,TRUE);
AddrInPage+=56;
Read1024(0,PVPOWERB,c,MAXDD*sizeof(long));
Write1024(ptr_1024,AddrInPage,c,MAXDD*sizeof(long),TRUE);//电能
}
BOOL ReadHisData(BYTE * pdata,BYTE *len ,STDATETIME* st,BYTE mode,BYTE maxlen)
{
BYTE i,j,m;
BYTE AddrInPage=0;
i=0;j=0;m=0;
ptr_1024=Get1024Page(*st,0);
if((ptr_1024==0) || (ptr_1024==505)||(ptr_1024>511) )
{
(*len)=0;
return FALSE;
}
switch(mode)
{
case 0: //st的全部运行参数
AddrInPage= GetAddrInPage(*st);
Read1024(ptr_1024,AddrInPage,pdata,60); //时间(4)+运行参数(56)
if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
{
(*len)=0;
}
else
{
memcpy(pdata,pdata+4,56); //四个字节的时间去掉
(*len)=56;
}
break;
case 1: //st的全部数据
AddrInPage= GetAddrInPage(*st);
Read1024(ptr_1024,AddrInPage,pdata,76); //时间(4)+运行参数(56)+电度量(4*4)
if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
{
(*len)=0;
}
else
{
memcpy(pdata,pdata+4,72); //四个字节的时间去掉
(*len)=72;
}
break;
case 11: //st的三相电压
AddrInPage =GetAddrInPage(*st);
Read1024(ptr_1024,AddrInPage,pdata,4);
if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
{
(*len)=0;
}
else
{
AddrInPage+=4;
Read1024(ptr_1024,AddrInPage,pdata,2); //st对应的ua
AddrInPage+=4;
Read1024(ptr_1024,AddrInPage,pdata+2,2); //st对应的ub
AddrInPage+=4;
Read1024(ptr_1024,AddrInPage,pdata+4,2); //st对应的uc
(*len)=6;
}
break;
case 12: //st的电流数据
AddrInPage =GetAddrInPage(*st);
Read1024(ptr_1024,AddrInPage,pdata,4); //st
if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
{
(*len)=0;
}
else
{
AddrInPage+=5;
Read1024(ptr_1024,AddrInPage,pdata,2); //st对应的ia
AddrInPage+=4;
Read1024(ptr_1024,AddrInPage,pdata+2,2); //st对应的ib
AddrInPage+=4 ;
Read1024(ptr_1024,AddrInPage,pdata+4,2); //st对应的ic
AddrInPage+=18 ;
Read1024(ptr_1024,AddrInPage,pdata+6,2); //st对应的i0
(*len)=8;
}
break;
case 13: //st的p q
AddrInPage =GetAddrInPage(*st);
Read1024(ptr_1024,AddrInPage,pdata,4);
if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
{
(*len)=0;
}
else
{
AddrInPage+=16;
Read1024(ptr_1024,AddrInPage,pdata,2); //st对应的p
AddrInPage+=2;
Read1024(ptr_1024,AddrInPage,pdata+2,2); //st对应的q
(*len )=4;
}
break;
case 14: //st的各项功率
AddrInPage = GetAddrInPage(*st); //st
Read1024(ptr_1024,AddrInPage,pdata,4);
if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
{
(*len)=0;
}
else
{
AddrInPage+=22;
Read1024(ptr_1024,AddrInPage,pdata,2); //st对应的pa
AddrInPage+=2;
Read1024(ptr_1024,AddrInPage,pdata+2,2); //st对应的pb
AddrInPage+=2;
Read1024(ptr_1024,AddrInPage,pdata+4,2); //st对应的pc
AddrInPage+=2;
Read1024(ptr_1024,AddrInPage,pdata+6,2); //st对应的qa
AddrInPage+=2;
Read1024(ptr_1024,AddrInPage,pdata+8,2); //st对应的qb
AddrInPage+=2;
Read1024(ptr_1024,AddrInPage,pdata+10,2); //st对应的qc
(*len)=12;
}
break;
case 19: //st的电度
AddrInPage =GetAddrInPage(*st);
Read1024(ptr_1024,AddrInPage,pdata,4); //st
if((pdata[3]!=(*st).month)||((pdata[2]&0x1f)!=(*st).week_date)||(pdata[1]!=(*st).hour)||(pdata[0]!=(*st).minute))
{
(*len)=0;
}
else
{
AddrInPage+=60;
Read1024(ptr_1024,AddrInPage,pdata,16); //st对应的A R
(*len)=16;
}
break;
//曲线数据纪录
case 21:
for(i=0;i<12;i++) //st对应的日电压曲线 ua
{
for (j=0;j<2;j++)
{
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+4,&pdata[m],2);
}
AddrInPage+=128; m+=2; (*len)+=2; //******************
}
ptr_1024+=1;
AddrInPage=0;
}
break;
case 22: //st对应的日电压曲线 ub
for(i=0;i<12;i++)
{
for (j=0;j<2;j++)
{
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+8,&pdata[m],2);
}
m+=2;(*len)+=2;AddrInPage+=128;
}
ptr_1024+=1; AddrInPage=0;
}
break;
case 23: //st对应的日电压曲线uc
for(i=0;i<12;i++)
{
for(j=0;j<2;j++)
{
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+12,&pdata[m],2);
}
m+=2;(*len)+=2; AddrInPage +=128;
}
ptr_1024+=1;
AddrInPage=0;
}
break;
case 24: //st对应的日电压曲线ia
for(i=0;i<12;i++)
{
for (j=0;j<2;j++)
{
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+6,&pdata[m],2);
}
AddrInPage+=128; m+=2; (*len)+=2;
}
ptr_1024+=1;
AddrInPage=0;
}
break;
case 25: //st对应的日电压曲线ib
for(i=0;i<12;i++)
{
for (j=0;j<2;j++)
{
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+10,&pdata[m],2);
}
AddrInPage+=128; m+=2; (*len)+=2;
}
ptr_1024+=1;
AddrInPage=0;
}
break;
case 26: //st对应的日电压曲线ic
for(i=0;i<12;i++)
{
for (j=0;j<2;j++)
{
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+14,&pdata[m],2);
}
AddrInPage+=128; m+=2; (*len)+=2;
}
ptr_1024+=1;
AddrInPage=0;
}
break;
case 27: //st对应的日电压曲线i0
for(i=0;i<12;i++)
{
for (j=0;j<2;j++)
{
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+34,&pdata[m],2);
}
AddrInPage+=128; m+=2; (*len)+=2;
}
ptr_1024+=1;
AddrInPage=0;
}
break;
case 28: //st对应的日曲线p
for(i=0;i<12;i++)
{
for (j=0;j<2;j++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -