⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ctq.c

📁 基于AVR的一种程序,智能控制器,可用于低压无功补偿部分,
💻 C
📖 第 1 页 / 共 2 页
字号:
/***********************************************************************/
/***************函数功能:投电容****************************************/
/***********************************************************************/
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 + -