📄 main.c
字号:
int j,k;
Valr=0;
Vali=0;
Value=0;
k=0;
for (j=0;j<36;j++)
{
Valr=Valr+(*(PP+j))*cs0[k];
Vali=Vali+(*(PP+j))*cs1[k];
k=k+i;
if (k>=36) k=k-36;
}
Valr=Valr/FOUR_D;
Vali=Vali/FOUR_D;
Value=sqrt(Valr*Valr+Vali*Vali);
return(Value);
}
//取反
float Not_D(float pp)
{
float temp;
if(pp<0)temp=-pp;
else temp=pp;
return(temp);
}
//计算函数
void Measure(void)
{
uint i,j,p_time;
float temp;
Mea_Pq(samp6,samp7,0); //计算A相电压电流有功无功功率因数
Mea_Pq(samp8,samp9,1); //计算A相电压电流有功无功功率因数
Mea_Pq(samp10,samp11,2); //计算A相电压电流有功无功功率因数
p_time=one_second();
if(p_time==1)
{
//计算总有功,并累加电量
p_yg+=(Not_D(p_abc[0][mea_count])+Not_D(p_abc[1][mea_count])+Not_D(p_abc[2][mea_count]))*500/ct_array[SET_CT];
if(p_yg>36000)
{
p_yg-=36000;
set_yg[0]++;
if(set_yg[0]>99){set_yg[1]++;set_yg[0]=0;}
if(set_yg[1]>99){set_yg[2]++;set_yg[1]=0;}
if(set_yg[2]>99){set_yg[3]++;set_yg[2]=0;}
if(set_yg[3]>99){set_yg[0]=0;set_yg[1]=0;set_yg[2]=0;set_yg[3]=0;}
}
//计算总无功,并累加电量
p_wg+=(Not_D(q_abc[0][mea_count])+Not_D(q_abc[1][mea_count])+Not_D(q_abc[2][mea_count]))*500/ct_array[SET_CT];
if(p_wg>36000)
{
p_wg-=36000;
set_wg[0]++;
if(set_wg[0]>99){set_wg[1]++;set_wg[0]=0;}
if(set_wg[1]>99){set_wg[2]++;set_wg[1]=0;}
if(set_wg[2]>99){set_wg[3]++;set_wg[2]=0;}
if(set_wg[3]>99){set_wg[0]=0;set_wg[1]=0;set_wg[2]=0;set_wg[3]=0;}
}
}
i=js_f();
if(i>4490&&i<6550){up1_data.avr_f=i;f_abc[mea_count]=i;}
mea_count++;
if(mea_count>19)mea_count=0;
switch(xb_count1)
{
case 0:
for(i=0;i<4;i++)
{
j=xb_count2*4+i+2;
xiebo[0][xb_count2*4+i]=xbu_xishu*Xiebo_Fft(samp6,j);
temp=xiebo[0][xb_count2*4+i]/u_abc[0][0];
up2_data.avr_xb[0][xb_count2*4+i]=temp*1000;
}
if(up1_data.avr_u[0]<500) /*无电压*/
{
for(j=0;j<15;j++)up2_data.avr_xb[0][j]=0;
}
break;
case 1:
for(i=0;i<4;i++)
{
xiebo[1][xb_count2*4+i]=xbu_xishu*Xiebo_Fft(samp8,xb_count2*4+i+2);
temp=xiebo[1][xb_count2*4+i]/u_abc[1][0];
up2_data.avr_xb[1][xb_count2*4+i]=temp*1000;
}
if(up1_data.avr_u[1]<500) /*无电压*/
{
for(j=0;j<15;j++)up2_data.avr_xb[1][j]=0;
}
break;
case 2:
for(i=0;i<4;i++)
{
xiebo[2][xb_count2*4+i]=xbu_xishu*Xiebo_Fft(samp10,xb_count2*4+i+2);
temp=xiebo[2][xb_count2*4+i]/u_abc[2][0];
up2_data.avr_xb[2][xb_count2*4+i]=temp*1000;
}
if(up1_data.avr_u[2]<500) /*无电压*/
{
for(j=0;j<15;j++)up2_data.avr_xb[2][j]=0;
}
break;
case 3:
for(i=0;i<4;i++)
{
// temp=xbi_xishu*Xiebo_Fft(samp7,xb_count2*4+i+2);
// xiebo[3][xb_count2*4+i]=temp*ct_array[SET_CT]/5;
xiebo[3][xb_count2*4+i]=xbi_xishu*Xiebo_Fft(samp7,xb_count2*4+i+2);
temp=xiebo[3][xb_count2*4+i]/i_abc[0][0];
up2_data.avr_xb[3][xb_count2*4+i]=temp*1000;
}
if(i_abc[0][0]<0.15) /*小电流*/
{
for(j=0;j<15;j++)up2_data.avr_xb[3][j]=0;
}
break;
case 4:
for(i=0;i<4;i++)
{
xiebo[4][xb_count2*4+i]=xbi_xishu*Xiebo_Fft(samp9,xb_count2*4+i+2);
temp=xiebo[4][xb_count2*4+i]/i_abc[1][0];
up2_data.avr_xb[4][xb_count2*4+i]=temp*1000;
}
if(i_abc[1][0]<0.15) /*小电流*/
{
for(j=0;j<15;j++)up2_data.avr_xb[4][j]=0;
}
break;
case 5:
for(i=0;i<4;i++)
{
xiebo[5][xb_count2*4+i]=xbi_xishu*Xiebo_Fft(samp11,xb_count2*4+i+2);
temp=xiebo[5][xb_count2*4+i]/i_abc[2][0];
up2_data.avr_xb[5][xb_count2*4+i]=temp*1000;
}
if(i_abc[2][0]<0.15) /*小电流*/
{
for(j=0;j<15;j++)up2_data.avr_xb[5][j]=0;
}
break;
}
xb_count1++;
if(xb_count1>5)
{
xb_count1=0;
xb_count2++;
if(xb_count2>3)xb_count2=0;
}
}
float Average(float *addr,uint j)
{
float value;
uint i;
value=0;
for(i=0;i<j;i++)
{
value+=*(addr+i);
}
value/=j;
return(value);
}
uint Average_U(uint *addr,uint j)
{
ulong value;
uint i,temp_value;
value=0;
for(i=0;i<j;i++)
{
value+=*(addr+i);
}
temp_value=value/j;
return(temp_value);
}
void Pjing_Z(void)
{
float temp1,temp2,temp;
uint i,j;
int value,zfshu;
for(j=0;j<3;j++)
{
temp1=0;
temp2=0;
temp1=Average(&u_abc[j][0],20);
if(temp1<10)
{
for(i=0;i<16;i++)
{
xiebo[j][i]=0;
}
up2_data.avr_zxb[j]=0;
up1_data.avr_u[j]=0;
}
else
{
for(i=0;i<16;i++)
{
temp2+=xiebo[j][i]*xiebo[j][i];
}
temp=sqrt(temp2);
temp/=u_abc[j][0];
up2_data.avr_zxb[j]=temp*1000;
up1_data.avr_u[j]=sqrt(temp1*temp1+temp*temp)*100;
if(up1_data.avr_u[j]<1000){up1_data.avr_u[j]=0;up2_data.avr_zxb[j]=0;}
}
}
up1_data.avr_u[3]=up1_data.avr_u[0]/2+up1_data.avr_u[1]/2-up1_data.avr_u[2];
up1_data.avr_u[3]=abs(up1_data.avr_u[3]);
for(j=0;j<3;j++)
{
temp1=0;
temp2=0;
temp=0;
temp1=Average(&i_abc[j][0],20);
if(temp1<0.15)temp1=0;
else temp1=temp1*ct_array[SET_CT]/5;
if(temp1>50)
{
for(i=0;i<10;i++)
{
temp2+=xiebo[j+3][i]*xiebo[j+3][i];
}
temp=sqrt(temp2);
temp/=i_abc[j][0];
up2_data.avr_zxb[j+3]=temp*1000;
}
up1_data.avr_i[j]=sqrt(temp1*temp1+temp*temp)*10;
if(up1_data.avr_u[j]==0||up1_data.avr_i[j]<49){up1_data.avr_i[j]=0;up2_data.avr_zxb[j+3]=0;}
}
up1_data.avr_i[3]=up1_data.avr_i[0]/2+up1_data.avr_i[1]/2-up1_data.avr_i[2];
up1_data.avr_i[3]=abs(up1_data.avr_i[3]);
for(j=0;j<3;j++)
{
zfshu=Average(&c_abc[j][0],20)*1000;
if(zfshu<0)cos_flag[j]=1;
else cos_flag[j]=0;
up1_data.avr_c[j]=abs(zfshu);
if(up1_data.avr_i[j]==0||up1_data.avr_c[j]>998)
{
up1_data.avr_c[j]=1000;
cos_flag[j]=0;
}
zfshu=Average(&p_abc[j][0],20);
if(zfshu<0)p_flag[j]=1;
else p_flag[j]=0;
up1_data.avr_p[j]=abs(zfshu);
zfshu=Average(&q_abc[j][0],20);
if(zfshu<0)q_flag[j]=1;
else q_flag[j]=0;
up1_data.avr_q[j]=abs(zfshu);
if(up1_data.avr_i[j]<20)
{
p_flag[j]=0;
q_flag[j]=0;
up1_data.avr_p[j]=0;
up1_data.avr_q[j]=0;
}
}
if(time_count>1800)
{
time_count=0;
f_bak=Average_U(f_abc,20);
per_bak=6944445/f_bak;
value=*T2PER;
value-=per_bak;
if(abs(value)>20)*T2PER=per_bak;
}
}
main()
{
uint liuyong;
uint cxl=0;
Disable();
Initial(); /*系统初始化*/
Soft_Init(); /*软件初始化*/
Lcd_Init();
Ad_Init();
Time_Init();
Read_Time();
T_Init();
Read_Set(); /*读设置参数*/
Read_Blset(); /*读比例系数*/
C_Cap(); /*计算电容容量*/
Re_Tjshuju(); /*读起统计数据*/
Read_Ram();
if(start_int!=0x5555)
{//上电初始化,保存停电数据
start_int=0x5555;
Save_Td();
}
Disp();
Enable();
for(liuyong=0;liuyong<100;liuyong++)
{
for(cxl=0;cxl<20000;cxl++);
Measure();
Pjing_Z();
}
p_mode=PAUTO;
p_screen=SCR_AUTO_FIRST;
screen_flag=1;
Disp();
while(1)
{
Measure();
Pjing_Z();
Write_Ram(); /*保存电量*/
if(time_count>1500)Disp();
Key();
Read_Time();
Wr_tdtime();
Save_Data();
for(liuyong=0;liuyong<5;liuyong++)
uart();
if(p_mode==PAUTO)Tq();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -