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

📄 save.c

📁 基于AVR的一种程序,智能控制器,可用于低压无功补偿部分,
💻 C
📖 第 1 页 / 共 2 页
字号:
				up4_data.tj_shuju[4*i+69]=IntToLsb(temp);
				up4_data.tj_shuju[4*i+70]=IntToMsb(temp);
				up4_data.tj_shuju[4*i+71]=p_hour;
				up4_data.tj_shuju[4*i+72]=p_minute;	
			}
		}
	/*************总P Q最大值,发生时间***************[81]-[88]************/	
	temp=up4_data.tj_shuju[81]+up4_data.tj_shuju[82]*256;
	if(temp>65000)temp=0;
	j=up1_data.avr_p[0]+up1_data.avr_p[1]+up1_data.avr_p[2];
	if(j>temp)
		{
			up4_data.tj_shuju[81]=IntToLsb(j);
			up4_data.tj_shuju[82]=IntToMsb(j);
			up4_data.tj_shuju[83]=p_hour;
			up4_data.tj_shuju[84]=p_minute;
		}
	
	temp=up4_data.tj_shuju[85]+up4_data.tj_shuju[86]*256;
	if(temp>65000)temp=0;
	j=up1_data.avr_q[0]+up1_data.avr_q[1]+up1_data.avr_q[2];
	if(j>temp)
		{
			up4_data.tj_shuju[85]=IntToLsb(j);
			up4_data.tj_shuju[86]=IntToMsb(j);
			up4_data.tj_shuju[87]=p_hour;
			up4_data.tj_shuju[88]=p_minute;
		}
		
	for(i=0;i<6;i++)
	{
		temp=up4_data.tj_shuju[4*i+89];
		up2_data.avr_zxb[i]&=0x0ff;
		if(up1_data.avr_i[i]>temp)            /*abc电压电流谐波最大值、发生时间[86]-[109]*/
			{
				up4_data.tj_shuju[3*i+89]=IntToLsb(up2_data.avr_zxb[i]);
				up4_data.tj_shuju[3*i+90]=p_hour;
				up4_data.tj_shuju[3*i+91]=p_minute;					
			}			
	}
	/**************c1-c12投入时间,*************[107]-[130]*************************/
	st_out=0x0001;
	for(i=0;i<12;i++)
	{
		temp=up4_data.tj_shuju[2*i+107]+up4_data.tj_shuju[2*i+108]*256;
		if(temp>1440)temp=0;
		if((st_out&up1_data.c_status)>0)temp+=1;
		up4_data.tj_shuju[2*i+107]=IntToLsb(temp);
		up4_data.tj_shuju[2*i+108]=IntToMsb(temp);
		st_out<<=1;
	}
	
	/*************abc投切次数 三相投切次数 在Tq.c中*********[131]-[138]***********/	
	
	/**************三相电压、流最大不平横 发生时间、 **************[139]-[146]***********/	
	temp=up4_data.tj_shuju[139]+up4_data.tj_shuju[140]*256;
	if(temp>28000)temp=0;
	if(temp>up1_data.avr_u[3])temp=up1_data.avr_u[3];
	up4_data.tj_shuju[139]=IntToLsb(temp);
	up4_data.tj_shuju[140]=IntToMsb(temp);
	up4_data.tj_shuju[141]=p_hour;
	up4_data.tj_shuju[142]=p_minute;
	
	temp=up4_data.tj_shuju[143]+up4_data.tj_shuju[144]*256;
	if(temp>65000)temp=0;
	if(temp>up1_data.avr_i[3])temp=up1_data.avr_i[3];
	up4_data.tj_shuju[143]=IntToLsb(temp);
	up4_data.tj_shuju[144]=IntToMsb(temp);
	up4_data.tj_shuju[145]=p_hour;
	up4_data.tj_shuju[146]=p_minute;
	
	for(i=0;i<3;i++)
	{
		if(up1_data.avr_c[i]>900)         /*cos>0.9 ***[150]-[155]*/
			{
				temp=up4_data.tj_shuju[2*i+147]+up4_data.tj_shuju[2*i+148]*256;
				temp+=1;
				if(temp>1440)temp=0;
				up4_data.tj_shuju[2*i+147]=IntToLsb(temp);
				up4_data.tj_shuju[2*i+148]=IntToMsb(temp);
			}
	}
	
				temp=up4_data.tj_shuju[153]+up4_data.tj_shuju[154]*256;				
				temp+=1;
				if(temp>1440)temp=0;								
				up4_data.tj_shuju[153]=IntToLsb(temp);
				up4_data.tj_shuju[154]=IntToMsb(temp);		
				
}

/**********************************************************************************/
/*******************数据存储记录从第一页开始,第零页为设置数据*********************/
/****************每天25页。第一页为统计数据,每个正点数据为一页********************/
/**********************************************************************************/
void Re_Tjshuju(void)          /*读起统计数据*/
{
	
	uint temp,record;
	record=p_month%2;
	if(record==1)temp=(p_day+31)*25;
		else temp=p_day*25;		
	Read_Flash(temp,0,&up4_data.tj_shuju[0],155);
	
}

void Save_Tj(void)
{	
	uint i,record,one;		
	record=p_month%2;
	if(record==1)one=(p_day+31)*25;
		else one=p_day*25;
	Write_Flash(one,0,&up4_data.tj_shuju[0],158);						
}

/**************************整点数据**********************************/
void Save_Zd(void)
{
	uint i,one=0,two=0;
	uint record;
	record=p_month%2;
	if(record==1)one=(p_day+31)*25+p_hour+1;
	 else one=p_day*25+p_hour+1;
	
	if(p_hour==0)
		{
			flash_buffer[0]=p_year;
			flash_buffer[1]=p_month;
			flash_buffer[2]=p_day;
			for(i=0;i<12;i++)
			{
				flash_buffer[2*i+3]=IntToLsb(*(&up1_data.avr_u[0]+i));
				flash_buffer[2*i+4]=IntToMsb(*(&up1_data.avr_u[0]+i));
			}
			for(i=0;i<6;i++)
	  	flash_buffer[27+i]=IntToLsb(up2_data.avr_zxb[i]);  
	  	
	  	Write_Flash(one,00,flash_buffer,33);			
		}
		else
			{
				for(i=0;i<12;i++)
				{
					flash_buffer[2*i]=IntToLsb(*(&up1_data.avr_u[0]+i));
					flash_buffer[2*i+1]=IntToMsb(*(&up1_data.avr_u[0]+i));
				}
				for(i=0;i<6;i++)
	  		flash_buffer[24+i]=IntToLsb(up2_data.avr_zxb[i]);    
  			Write_Flash(one,00,flash_buffer,30);						
			}  	
			
}

void T_Init(void)
{
 temp_month=p_month;
 temp_day=p_day;
 temp_hour=p_hour;
 temp_minute=p_minute;
 temp_second=p_second;
}

uint one_second(void)//1 second
{
 uint s_return;
 if(p_second!=temp_second)s_return=1;
  else s_return=0;
 temp_second=p_second;
 return s_return;
}
uint one_minute(void)//1 minute
{
 uint m_return;
 if(p_minute!=temp_minute)m_return=1;
  else m_return=0;
 temp_minute=p_minute;
 return m_return;
}
/*1 改变,0 未改变*/
uint one_hour(void)/*1 hour*/
{
 uint h_return;
 if(p_hour!=temp_hour)h_return=1;
  else h_return=0;
 temp_hour=p_hour;
 return h_return;
}

/*如果 1改变 将本天整点,统计数据清零*/
uint one_day(void)
{
 uint d_return;
 if(p_day!=temp_day)d_return=1;
  else d_return=0;
 temp_day=p_day;
 return d_return;
}

uint one_month(void)
{
 uint m_return;
 if(p_month!=temp_month)m_return=1;
  else m_return=0;
 temp_month=p_month;
 return m_return;
}

/************************************************************/
/***********flash 第零页为设置数据***************************/
/***********flash 第一页为停电记录次数数据*******************/
/***********flash 第二页为时间数据***************************/
/***********flash 第三页为比例系数数据***********************/
/***********flash 第四页到第二拾三页为停电记录***************/
/***********flash 第二拾五页开始为统计和整点数据,每天25页***/
/************************************************************/

void Save_Td(void)
{
	uint i,temp;
	Read_Flash(1,0,&temp,1);
	temp++;	
	if(temp>20)temp=0;
	flash_buffer[0]=0x01;
	Re_tdtime();	
	flash_buffer[7]=p_year;
	flash_buffer[8]=p_month;
	flash_buffer[9]=p_day;
	flash_buffer[10]=p_hour;
	flash_buffer[11]=p_minute;
	flash_buffer[12]=p_second;
	Write_Flash(1,0,&temp,1);
	Write_Flash((temp+4),0,flash_buffer,13);	
}
/*
void Save_Time(void)
{
	flash_buffer[0]=p_year;
	flash_buffer[1]=p_month;
	flash_buffer[2]=p_day;
	flash_buffer[3]=p_hour;
	flash_buffer[4]=p_minute;
	flash_buffer[5]=p_second;
	Write_Flash(2,0,flash_buffer,6);
}
*/
void Read_Blset(void)
{
	uint i;
	Read_Flash(3,0,flash_buffer,12);
	for(i=0;i<6;i++)
	bl_xishu[i]=flash_buffer[2*i]+flash_buffer[2*i+1]*256;
}

void Save_Data(void)
{
 uint s_bit;
 uint i,j,record;
 uint zero;
 zero=p_minute%2;
 record=p_month%2;
 s_bit=one_minute();
 if(s_bit==1)
 { 	
  Tj_Shuju();  
  s_bit=one_hour();
  if(s_bit==1)                              /*整点*/
  {
   s_bit=one_day();
   if(s_bit==1)                             /*过日*/
   {    
    for(i=0;i<158;i++)    
    	*(&up4_data.tj_shuju[0]+i)=0;   
    if(record==1)j=(p_day+31)*25;
    	else j=p_day*25;
    for(i=0;i<30;i++)flash_buffer[i]=0;    		
    for(i=0;i<25;i++)
    Write_Flash((j+i),0,flash_buffer,30);
   }   
   Save_Zd();
  }
  if(zero==0)Save_Tj();                   /*两分钟存统计数据*/ 
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -