/*无功投切电容器,6星6角*/
#include "public.h"
#include "p_main.H"
/* LF2407.H 的外部变量 */
/*IO端口B数据和方向控制寄存器*/
extern unsigned int *PEDATDIR;
extern unsigned int *PFDATDIR;
/***************************************************************************/
/**************函数功能:判断ABC三相有无故障状态****************************/
/**guzhang[3] 0:无故障 1:过压 2 欠压 4 谐波超限 8 零序超限 16 超前电压*****/
/***************************************************************************/
void Error_State(void)
{
uint i,j;
float temp;
for(i=0;i<3;i++)
{
if((up1_data.avr_u[i]/100)>(SET_U1+5))guzhang[i]|=1;
else guzhang[i]&=0x1e;
if((up1_data.avr_u[i]/100)<(SET_U2-5))guzhang[i]|=2;
else guzhang[i]&=0x1d;
if(up2_data.avr_zxb[i]>SET_THD)guzhang[i]|=4;
else guzhang[i]&=0x1b;
temp=up1_data.avr_i[3]*3000/(up1_data.avr_i[0]+up1_data.avr_i[1]+up1_data.avr_i[2]);
j=temp;
if(j>SET_LX)guzhang[i]|=8;
else guzhang[i]&=0x17;
}
if(up1_data.avr_u[0]/100>(SET_U1+5))err_state|=0x01; /*A相过压*/
else err_state&=0x0fffe;
if(up1_data.avr_u[1]/100>(SET_U1+5))err_state|=0x02; /*B相过压*/
else err_state&=0x0fffd;
if(up1_data.avr_u[2]/100>(SET_U1+5))err_state|=0x04; /*C相过压*/
else err_state&=0x0fffb;
if(up1_data.avr_u[0]/100<(SET_U2-5))err_state|=0x08; /*A相欠压*/
else err_state&=0x0fff7;
if(up1_data.avr_u[1]/100<(SET_U2-5))err_state|=0x010; /*B相欠压*/
else err_state&=0x0ffef;
if(up1_data.avr_u[2]/100<(SET_U2-5))err_state|=0x020; /*C相欠压*/
else err_state&=0x0ffdf;
j=up1_data.avr_i[3]*1000/up1_data.avr_i[0];
if(j>SET_LX)err_state|=0x040; /*零序超限*/
else err_state&=0x0ffbf;
if(up1_data.avr_u[0]/100<50)err_state|=0x080; /*A相缺相*/
else err_state&=0x0ff7f;
if(up1_data.avr_u[1]/100<50)err_state|=0x0100; /*B相缺相*/
else err_state&=0x0feff;
if(up1_data.avr_u[2]/100<50)err_state|=0x0200; /*C相缺相*/
else err_state&=0x0fdff;
if(up2_data.avr_zxb[0]>(SET_THD+5))err_state|=0x0400;
else err_state&=0x0fbff;
if(up2_data.avr_zxb[1]>(SET_THD+5))err_state|=0x0800;
else err_state&=0x0f7ff;
if(up2_data.avr_zxb[2]>(SET_THD+5))err_state|=0x1000;
else err_state&=0x0efff;
}
/**************************************************************/
/**************函数功能:计算电容的容值************************/
/**cap[12][2]:分别为电容的有无标志和容值***********************/
/**************************************************************/
void C_Cap(void)
{
uint i;
for(i=0;i<12;i++)
cap[i]=0;
switch(SET_XN)
{
case 1:
for(i=0;i<3;i++)cap[2*i]=SET_XC;
tou_state[0]=0x01;
tou_state[1]=0x04;
tou_state[2]=0x10;
break;
case 2:
if(SET_XBM==0)
{
for(i=0;i<6;i++)
cap[i]=SET_XC;
}
else
{
for(i=0;i<3;i++)
{
cap[2*i]=SET_XC;
cap[2*i+1]=2*SET_XC;
}
}
tou_state[0]=0x03;
tou_state[1]=0x0c;
tou_state[2]=0x30;
break;
default:
for(i=0;i<6;i++)
cap[i]=0;
break;
}
switch(SET_JN)
{
case 1:
cap[6]=SET_JC;
tou_state[3]=0x40;
break;
case 2:
if(SET_JBM==0)
{
cap[6]=SET_JC;
cap[7]=SET_JC;
}
else
{
cap[6]=SET_JC;
cap[7]=2*SET_JC;
}
tou_state[3]=0x0c0;
break;
case 3:
switch(SET_JBM)
{
case 0: /*1:1:1:1*/
for(i=0;i<3;i++)
{
cap[6+i]=SET_JC;
}
break;
case 1: /*1:2:2:2*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=2*SET_JC;
break;
case 2: /*1:2:3:3*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=3*SET_JC;
break;
default: /*1:2:4:4*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=4*SET_JC;
break;
}
tou_state[3]=0x01c0;
break;
case 4:
switch(SET_JBM)
{
case 0: /*1:1:1:1*/
for(i=0;i<4;i++)
{
cap[6+i]=SET_JC;
}
break;
case 1: /*1:2:2:2*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=2*SET_JC;
cap[9]=2*SET_JC;
break;
case 2: /*1:2:3:3*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=3*SET_JC;
cap[9]=3*SET_JC;
break;
case 3: /*1:2:4:4*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=4*SET_JC;
cap[9]=4*SET_JC;
break;
default:
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=4*SET_JC;
cap[9]=8*SET_JC;
}
tou_state[3]=0x03c0;
break;
case 5:
switch(SET_JBM)
{
case 0: /*1:1:1:1*/
for(i=0;i<5;i++)
{
cap[6+i]=SET_JC;
}
break;
case 1: /*1:2:2:2*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=2*SET_JC;
cap[9]=2*SET_JC;
cap[10]=2*SET_JC;
break;
case 2: /*1:2:3:3*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=3*SET_JC;
cap[9]=3*SET_JC;
cap[10]=3*SET_JC;
break;
case 3: /*1:2:4:4*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=4*SET_JC;
cap[9]=4*SET_JC;
cap[10]=4*SET_JC;
break;
default:
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=4*SET_JC;
cap[9]=8*SET_JC;
cap[10]=8*SET_JC;
}
tou_state[3]=0x7c0;
break;
case 6:
switch(SET_JBM)
{
case 0: /*1:1:1:1*/
for(i=0;i<6;i++)
{
cap[6+i]=SET_JC;
}
break;
case 1: /*1:2:2:2*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=2*SET_JC;
cap[9]=2*SET_JC;
cap[10]=2*SET_JC;
cap[11]=2*SET_JC;
break;
case 2: /*1:2:3:3*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=3*SET_JC;
cap[9]=3*SET_JC;
cap[10]=3*SET_JC;
cap[11]=3*SET_JC;
break;
case 3: /*1:2:4:4*/
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[9]=4*SET_JC;
cap[8]=4*SET_JC;
cap[10]=4*SET_JC;
cap[11]=4*SET_JC;
break;
default:
cap[6]=SET_JC;
cap[7]=2*SET_JC;
cap[8]=4*SET_JC;
cap[9]=8*SET_JC;
cap[10]=8*SET_JC;
cap[11]=8*SET_JC;
}
tou_state[3]=0x0fc0;
break;
}
}
/****************************************************************/
/*******函数功能:投切完标志*************************************/
/*******t_over[4]为投完标志,q_over[4]为切完标志*****************/
/*******tou_state[4]为投完电容状态*******************************/
/****************************************************************/
void C_Over(void)
{
uint i,j,temp=0;
uint cap_s;
cap_s=up1_data.c_status&0x0fc0;
if(cap_s==tou_state[3]){t_over[3]=1;q_over[3]=0;} /*三角形电容投完标志*/
else t_over[3]=0;
cap_s&=tou_state[3];
if(cap_s==0){q_over[3]=1;t_over[3]=0;qie_flag[3]=0;} /*三角形电容切完标志*/
else q_over[3]=0;
cap_s=up1_data.c_status&0x3f;
cap_s=up1_data.c_status&0x03;
if(cap_s==tou_state[0]){t_over[0]=1;q_over[0]=0;} /*A相电容投完标志*/
else t_over[0]=0;
cap_s&=tou_state[0];
if(cap_s==
评论1