📄 ctq.c
字号:
/***********************************************************************/
/***************函数功能:投电容****************************************/
/***********************************************************************/
void C_Tou(void)
{
uint usa,usb,usc;
if(guzhang[0]==0&&guzhang[1]==0&&guzhang[2]==0&&t_over[3]==0)
{
if(q_flag[0]==0&&q_flag[1]==0&&q_flag[2]==0)Behand_Abc();
else if(q_flag[0]==1&&q_flag[1]==0&&q_flag[2]==0)Before_A();
else if(q_flag[0]==0&&q_flag[1]==1&&q_flag[2]==0)Before_B();
else if(q_flag[0]==0&&q_flag[1]==0&&q_flag[2]==1)Before_C();
}
else
{
if(guzhang[0]==0&&t_over[0]==0)
{
usa=t_count[0];
if(up1_data.avr_q[0]>(cap[usa]+SET_K1))
{
if(tou_flag[0]==0){tou_flag[0]=1;tq_time[0]=0;}
}
else {tou_flag[0]=0;tq_time[0]=0;}
}
if(guzhang[1]==0&&t_over[1]==0)
{
usb=t_count[1];
if(up1_data.avr_q[1]>(cap[usb]+SET_K1))
{
if(tou_flag[1]==0){tou_flag[1]=1;tq_time[1]=0;}
}
else {tou_flag[1]=0;tq_time[1]=0;}
}
if(guzhang[2]==0&&t_over[2]==0)
{
usc=t_count[2];
if(up1_data.avr_q[2]>(cap[usc]+SET_K1))
{
if(tou_flag[2]==0){tou_flag[2]=1;tq_time[2]=0;}
}
else {tou_flag[2]=0;tq_time[2]=0;}
}
}
}
/******************************************************************/
/*******************函数功能:切三角形电容*************************/
/******************判断故障切电容还是正常切电容********************/
/******************************************************************/
void Qie_Abc(void)
{
uint us,c_temp;
if(q_over[3]==0)
{
if(guzhang[0]!=0||guzhang[1]!=0||guzhang[2]!=0)
{
if(qie_flag[3]==0){qie_flag[3]=1;q_time[3]=0;}
}
else if(q_flag[0]==1&&q_flag[1]==1&&q_flag[2]==1) /*abc都超前*/
{
us=q_count[3];
c_temp=cap[us]/3+SET_K2;
if(up1_data.avr_q[0]>c_temp&&up1_data.avr_q[1]>c_temp&&up1_data.avr_q[2]>c_temp)
{
if(qie_flag[3]==0){qie_flag[3]=1;q_time[3]=0;}
}
}
}
else
{
if(q_over[0]==0) /*切A相电容*/
{
if(guzhang[0]!=0)
{
if(qie_flag[0]==0){qie_flag[0]=1;q_time[0]=0;}
}
else if(q_flag[0]==1)
{
us=q_count[0];
c_temp=cap[us]+SET_K2;
if(up1_data.avr_q[0]>c_temp)
{
if(qie_flag[0]==0){qie_flag[0]=1;q_time[0]=0;}
}
}
}
if(q_over[1]==0) /*切B相电容*/
{
if(guzhang[1]!=0)
{
if(qie_flag[1]==0){qie_flag[1]=1;q_time[1]=0;}
}
else if(q_flag[1]==1)
{
us=q_count[1];
c_temp=cap[us]+SET_K2;
if(up1_data.avr_q[1]>c_temp)
{
if(qie_flag[1]==0){qie_flag[1]=1;q_time[1]=0;}
}
}
}
if(q_over[2]==0) /*切C相电容*/
{
if(guzhang[2]!=0)
{
if(qie_flag[2]==0){qie_flag[2]=1;q_time[2]=0;}
}
else if(q_flag[2]==1)
{
us=q_count[2];
c_temp=cap[us]+SET_K2;
if(up1_data.avr_q[2]>c_temp)
{
if(qie_flag[2]==0){qie_flag[2]=1;q_time[2]=0;}
}
}
}
}
}
/************************************************************************/
/**************************函数功能:投切电容器出口**********************/
/************************************************************************/
void C_Chukou(void)
{
uint temp_l,temp_h;
temp_l=up1_data.c_status&0x0ff;
temp_h=up1_data.c_status&0x0ff00;
temp_h>>=8;
*PEDATDIR=*PEDATDIR|temp_l;
*PFDATDIR=*PFDATDIR|temp_h;
}
/****************************************************************/
/*******函数功能:电容投入出口动作*************************** *******/
/****************************************************************/
void Kai_Chu(void)
{
uint i,temp;
if(dongzuo[3]==1)
{
switch(t_count[3])
{
case 6:
up1_data.c_status|=0x40;
break;
case 7:
up1_data.c_status|=0x80;
break;
case 8:
up1_data.c_status|=0x100;
break;
case 9:
up1_data.c_status|=0x200;
break;
case 10:
up1_data.c_status|=0x400;
break;
case 11:
up1_data.c_status|=0x800;
break;
default:break;
}
switch(group)
{
case 1:
up1_data.c_status&=0x0ffe;
break;
case 2:
up1_data.c_status&=0x0ffd;
break;
case 3:
up1_data.c_status&=0x0ffb;
break;
case 4:
up1_data.c_status&=0x0ff7;
break;
case 5:
up1_data.c_status&=0x0fef;
break;
case 6:
up1_data.c_status&=0x0fdf;
break;
default:break;
}
C_Chukou();
group=0;
t_count[3]++;
if((t_count[3]-6)>=SET_JN)t_count[3]=6;
temp=up4_data.tj_shuju[137]+up4_data.tj_shuju[138]*256;
tou_flag[3]=0;
if(temp>1000)temp=0;
temp+=1; /*动作次数加一*/
up4_data.tj_shuju[137]=IntToLsb(temp);
up4_data.tj_shuju[138]=IntToMsb(temp);
dongzuo[3]=0;
}
if(dongzuo[0]==1)
{
switch(t_count[0])
{
case 0:
*PEDATDIR=*PEDATDIR|0X01;
up1_data.c_status|=0x01;
break;
case 1:
*PEDATDIR=*PEDATDIR|0X02;
up1_data.c_status|=0x02;
break;
default:break;
}
t_count[0]++;
if(t_count[0]>=SET_XN)t_count[0]=0;
dongzuo[0]=0;
tou_flag[0]=0;
temp=up4_data.tj_shuju[131]+up4_data.tj_shuju[132]*256;
if(temp>1000)temp=0;
temp+=1; /*动作次数加一*/
up4_data.tj_shuju[131]=IntToLsb(temp);
up4_data.tj_shuju[132]=IntToMsb(temp);
dongzuo[0]=0;
}
if(dongzuo[1]==1)
{
switch(t_count[1])
{
case 2:
*PEDATDIR=*PEDATDIR|0X04;
up1_data.c_status|=0x04;
break;
case 3:
*PEDATDIR=*PEDATDIR|0X08;
up1_data.c_status|=0x08;
break;
default:break;
}
t_count[1]++;
if((t_count[1]-2)>=SET_XN)t_count[1]=2;
dongzuo[1]=0;
tou_flag[1]=0;
temp=up4_data.tj_shuju[133]+up4_data.tj_shuju[134]*256;
if(temp>1000)temp=0;
temp+=1; /*动作次数加一*/
up4_data.tj_shuju[133]=IntToLsb(temp);
up4_data.tj_shuju[134]=IntToMsb(temp);
dongzuo[1]=0;
}
if(dongzuo[2]==1)
{
switch(t_count[2])
{
case 4:
*PFDATDIR=*PFDATDIR|0X01;
up1_data.c_status|=0x10;
break;
case 5:
*PFDATDIR=*PFDATDIR|0X02;
up1_data.c_status|=0x20;
break;
default:break;
}
t_count[2]++;
if((t_count[2]-4)>=SET_XN)
t_count[2]=4;
dongzuo[2]=0;
tou_flag[2]=0;
temp=up4_data.tj_shuju[135]+up4_data.tj_shuju[136]*256;
if(temp>1000)temp=0;
temp+=1; /*动作次数加一*/
up4_data.tj_shuju[135]=IntToLsb(temp);
up4_data.tj_shuju[136]=IntToMsb(temp);
dongzuo[2]=0;
}
}
/****************************************************************/
/*******函数功能:电容切除出口动作*************************** *******/
/****************************************************************/
void Kai_Ru(void)
{
uint i;
if(dzuo_q[3]==1)
{
switch(q_count[3])
{
case 6:
*PEDATDIR=*PEDATDIR&0X0ffbf;
up1_data.c_status&=0x0ffbf;
break;
case 7:
*PEDATDIR=*PEDATDIR&0X0ff7f;
up1_data.c_status&=0x0ff7f;
break;
case 8:
*PFDATDIR=*PFDATDIR&0X0fffe;
up1_data.c_status&=0x0feff;
break;
case 9:
*PFDATDIR=*PFDATDIR&0X0fffd;
up1_data.c_status&=0x0fdff;
break;
case 10:
*PFDATDIR=*PFDATDIR&0X0fffb;
up1_data.c_status&=0x0fbff;
break;
case 11:
*PFDATDIR=*PFDATDIR&0X0fff7;
up1_data.c_status&=0x0f7ff;
break;
default:break;
}
q_count[3]++;
if((q_count[3]-6)>=SET_JN)q_count[3]=6;
qie_flag[3]=0;
dzuo_q[3]=0;
/*动作次数加一*/
}
if(dzuo_q[0]==1)
{
switch(q_count[0])
{
case 0:
*PEDATDIR=*PEDATDIR&0X0fffe;
up1_data.c_status&=0x0fffe;
break;
case 1:
*PEDATDIR=*PEDATDIR&0X0fffd;
up1_data.c_status&=0x0fffd;
break;
default:break;
}
q_count[0]++;
if(q_count[0]>=SET_XN)q_count[0]=0;
dzuo_q[0]=0;
qie_flag[0]=0;
dzuo_q[0]=0;
}
if(dzuo_q[1]==1)
{
switch(q_count[1])
{
case 2:
*PEDATDIR=*PEDATDIR&0X0fffb;
up1_data.c_status&=0x0fffb;
break;
case 3:
*PEDATDIR=*PEDATDIR&0X0fff7;
up1_data.c_status&=0x0fff7;
break;
default:break;
}
q_count[1]++;
if((q_count[1]-2)>=SET_XN)q_count[1]=2;
dzuo_q[1]=0;
qie_flag[1]=0;
dzuo_q[1]=0;
}
if(dzuo_q[2]==1)
{
switch(q_count[2])
{
case 4:
*PFDATDIR=*PFDATDIR&0X0fffe;
up1_data.c_status&=0x0ffef;
break;
case 5:
*PFDATDIR=*PFDATDIR&0X0fffd;
up1_data.c_status&=0x0ffdf;
break;
default:break;
}
q_count[2]++;
if((q_count[2]-4)>=SET_XN)q_count[2]=4;
dzuo_q[2]=0;
qie_flag[2]=0;
dzuo_q[2]=0;
}
}
void Tq(void)
{
if(one_second()==1)Error_State();
C_Over();
C_Tou();
Qie_Abc();
Kai_Ru();
Kai_Chu();
if(up1_data.avr_u[1]<50) /*B相缺相 速切 */
{
t_count[1]=2;
q_count[1]=2;
t_over[1]=0;
q_over[1]=0;
tou_flag[1]=0;
qie_flag[1]=0;
dongzuo[1]=0;
dzuo_q[1]=0;
tq_time[1]=0;
q_time[1]=0;
up1_data.c_status&=0x0ff3;
*PFDATDIR=*PFDATDIR&0X0fff3;
}
if(up1_data.avr_u[2]<50) /*C相缺相 速切 */
{
t_count[2]=4;
q_count[2]=4;
t_over[2]=0;
q_over[2]=0;
tou_flag[2]=0;
qie_flag[2]=0;
dongzuo[2]=0;
dzuo_q[2]=0;
tq_time[2]=0;
q_time[2]=0;
up1_data.c_status&=0x0fcf;
*PFDATDIR=*PFDATDIR&0X0ffcf;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -