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

📄 process.c

📁 用于GPRS远程电力抄表系统中采集器端的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
			freezetime_flag=0; 
			break;
	}

}
/*******************************************************************
                     抄收时段冻结数据函数               
函数原型: void R_time(void)
功  能:       
  
********************************************************************/
void R_time()
{
	register uchar i,j;
   
    SenBuf[5]=(RecBuf[5]|0x80);
    cs+=SenBuf[5];

	SenBuf[6]=RecBuf[7]*6;
	for(i=0;i<RecBuf[7];i++)
 		for(j=0;j<6;j++)
 			SenBuf[j+7+i*6]=freezesum[i][j];
/*
	SenBuf[6]=RecBuf[7]*6;
	for(i=0;i<SenBuf[6];i++)
	{
 			SenBuf[7+i]=FreezeData[i];
			cs+=SenBuf[7+i];
	} 
*/  
	for(i=0;i<SenBuf[6];i++)
		cs+=SenBuf[7+i];            
	cs+=SenBuf[6];
	SenBuf[7+SenBuf[6]]=cs;
	SenBuf[8+SenBuf[6]]=FRAME_END_CHAR;
	Senlen=SenBuf[6]+9;
}

/*******************************************************************
                     设置日冻结函数               
函数原型: void S_day(void)
功  能:       
  
********************************************************************/
void S_day(void)
{
//	register uchar i,j;
	uchar freezeday_end=0;
	static freezeday_flag;
// 	for(i=0;i<16;i++)
//		for(j=0;j<6;j++)
// 			FreezeData[j+i*6]=sum[i][j];

	switch(freezeday_flag)
	{
		case 0: 
			W_block(WPAGE2,i2c_day_freeze,&sum[0][0],96);
			freezeday_end=1; 
			W_block(WPAGE0,i2c_day_flag,&freezeday_end,1);
			freezeday_flag=1;
			break;
		case 1: 
			W_block(WPAGE3,i2c_day_freeze,&sum[0][0],96);
			freezeday_end=0;
			W_block(WPAGE0,i2c_day_flag,&freezeday_end,1);
			freezeday_flag=0; 
			break;
	}

}

/*******************************************************************
                     抄收日冻结数据函数               
函数原型: void R_day(void)
功  能:       
  
********************************************************************/
void R_day()
{
	register uchar i;
   
    SenBuf[5]=(RecBuf[5]|0x80);
    cs+=SenBuf[5];

	SenBuf[6]=RecBuf[7]*6;
	for(i=0;i<SenBuf[6];i++)
	{
 			SenBuf[7+i]=FreezeData[i];
			cs+=SenBuf[7+i];
	}               
	cs+=SenBuf[6];
	SenBuf[7+SenBuf[6]]=cs;
	SenBuf[8+SenBuf[6]]=FRAME_END_CHAR;
	Senlen=SenBuf[6]+9;
}

/*******************************************************************
                     设置月冻结函数               
函数原型: void S_month(void)
功  能:       
  
********************************************************************/
void S_month(void)
{
//	register uchar i,j;
	uchar freezemonth_end=0;
	static freezemonth_flag;
// 	for(i=0;i<16;i++)
// 		for(j=0;j<6;j++)
// 			FreezeData[j+i*6]=sum[i][j];

	switch(freezemonth_flag)
	{
		case 0: 
			W_block(WPAGE2,i2c_month_freeze,&sum[0][0],96);
			freezemonth_end=1; 
			W_block(WPAGE0,i2c_month_flag,&freezemonth_end,1);
			freezemonth_flag=1;
			break;
		case 1: 
			W_block(WPAGE3,i2c_month_freeze,&sum[0][0],96);
			freezemonth_end=0;
			W_block(WPAGE0,i2c_month_flag,&freezemonth_end,1);
			freezemonth_flag=0; 
			break;
	}

}

/*******************************************************************
                     抄收月冻结数据函数               
函数原型: void R_month(void)
功  能:       
  
********************************************************************/
void R_month()
{
	register uchar i;
   
    SenBuf[5]=(RecBuf[5]|0x80);
    cs+=SenBuf[5];

	SenBuf[6]=RecBuf[7]*6;
	for(i=0;i<SenBuf[6];i++)
	{
 			SenBuf[7+i]=FreezeData[i];
			cs+=SenBuf[7+i];
	}               
	cs+=SenBuf[6];
	SenBuf[7+SenBuf[6]]=cs;
	SenBuf[8+SenBuf[6]]=FRAME_END_CHAR;
	Senlen=SenBuf[6]+9;
}

/*******************************************************************
                     突发告警上报函数               
函数原型: void Br_report(void)
功  能:       
  
********************************************************************/
/*
void Br_report()
{
	register uchar i;
	SenBuf[5]=(RecBuf[5]|0x80);
    cs+=SenBuf[5];
    SenBuf[6]=4;
    cs+=SenBuf[6];
    SenBuf[7]=alarm0;
    SenBuf[8]=alarm1;
    SenBuf[9]=alarm2;
    SenBuf[10]=alarm3;
	for(i=0;i<4;i++)
		cs+=SenBuf[7+i];
	SenBuf[SenBuf[6]+7]=cs;
    SenBuf[SenBuf[6]+8]=FRAME_END_CHAR;
    Senlen=SenBuf[6]+9;

}
*/
/*******************************************************************
                     地址上报函数               
函数原型: void Ad_report(void)
功  能:       
  
********************************************************************/
void Ad_report()
{
	SenBuf[5]=(RecBuf[5]|0x80);
    cs+=SenBuf[5];
    SenBuf[6]=0;
	SenBuf[SenBuf[6]+7]=cs;
    SenBuf[SenBuf[6]+8]=FRAME_END_CHAR;
    Senlen=SenBuf[6]+9;

}

/*******************************************************************
                     轮询告警上报函数               
函数原型: void Gb_report(void)
功  能:       
  
********************************************************************/
void Gb_report()
{
    register uchar i;
	SenBuf[5]=(RecBuf[5]|0x80);
    cs+=SenBuf[5];
    SenBuf[6]=4;
    cs+=SenBuf[6];
    SenBuf[7]=alarm0;
    SenBuf[8]=alarm1;
    SenBuf[9]=alarm2;
    SenBuf[10]=alarm3;
	for(i=0;i<4;i++)
		cs+=SenBuf[7+i];
	SenBuf[SenBuf[6]+7]=cs;
    SenBuf[SenBuf[6]+8]=FRAME_END_CHAR;
    Senlen=SenBuf[6]+9;

}
/*******************************************************************
                     校时函数               
函数原型: void ch_Datetime(void)
功  能:       
  
********************************************************************/

void ch_Datetime()
{
//	static uchar time_flag=0;
//	register uchar time_end;
	register i;
/*			
	R_block(WPAGE0,RPAGE0,i2c_addr_timeflag,&time_end,1); 				 
	if(time_end==1)
		R_block(WPAGE0,RPAGE0,i2c_addr_time,inittime,6); 
	else
		R_block(WPAGE1,RPAGE1,i2c_addr_time,inittime,6); 
*/
	for(i=0;i<6;i++)
	{
		RecBuf[7+i]=((RecBuf[7+i]/10)*16)+(RecBuf[7+i]%10);
		inittime[i]=RecBuf[7+i];
	}
	ds1302set();
	
}

/*******************************************************************
                     系统初始化函数               
函数原型: void Sys_init(void)
功  能:       
  
********************************************************************/		
void Sys_init()
{
	register uchar i,j;
	uchar k=0,radd_end;
//	bit tmp;

 	if(add_flag==0x07)
	{
    	for(i=0;i<8;i++)
		{
			if((RecBuf[7]&0x80)==0x80)
			{
				for(j=0;j<6;j++)
					sum[i][j]=RecBuf[9+j+6*k];
				k++;
			}	
			RecBuf[7]<<=1;
		}
		for(i=8;i<16;i++)
		{
			if((RecBuf[8]&0x80)==0x80)
			{
				for(j=0;j<6;j++)
					sum[i][j]=RecBuf[9+j+6*k];
				k++;
			}	
			RecBuf[8]<<=1;
		}
					
    	W_block(WPAGE0,i2c_addr_data,&sum[0][0],RecBuf[6]-2);
		radd_end=1;
		W_block(WPAGE0,i2c_addr_addflag,&radd_end,1);  
    	W_block(WPAGE1,i2c_addr_data,&sum[0][0],RecBuf[6]-2);
	}
	else
	{
		for(i=0;i<16;i++)
 			for(j=0;j<6;j++)
  				sum[i][j]=RecBuf[j+7];
		W_block(WPAGE0,i2c_addr_data,&sum[0][0],96);
		radd_end=1;
		W_block(WPAGE0,i2c_addr_addflag,&radd_end,1);  
    	W_block(WPAGE1,i2c_addr_data,&sum[0][0],96);
	}
	
	SenBuf[5]=(RecBuf[5]|0x80);
    cs+=SenBuf[5];
    SenBuf[6]=0;
    SenBuf[SenBuf[6]+7]=cs;
    SenBuf[SenBuf[6]+8]=FRAME_END_CHAR;
    Senlen=SenBuf[6]+9;
}		  		  

/*******************************************************************
                     处理函数               
函数原型: void process(void)
功  能:       
  
********************************************************************/
void process(void)
{
	register uchar i;
//	uchar freezetime_end=0;
	uchar freezeday_end=0;
	uchar freezemonth_end=0;
//	uchar arpt_flag=0;
	uchar j,k;
  
	if(r_end)
    {
		cs=0;
		SenBuf[0]=FRAME_START_CHAR;
		SenBuf[1]=add[0];
		SenBuf[2]=add[1];
		SenBuf[3]=add[2];
		SenBuf[4]=FRAME_START_CHAR;
		for(i=0;i<5;i++)
			cs+=SenBuf[i];

		if(cycend)
		{
			cycend=0;
			Cyc_end();
		}

     
		switch(fc_flag)
		{
			case 0x01 : 
				ch_Datetime();
				break;

			case 0x02 :
				
				for(i=0;i<2;i++)
			        bport[i]=RecBuf[7+i];

				wr_switch=1;

				if(bport07)
				{
					if((RecBuf[9]&0x80)==0)
						bwary00=0;
					else
						bwary00=1;
				}

				if(bport06)
				{
					if((RecBuf[9]&0x40)==0)
						bwary01=0;
					else
						bwary01=1;
				}
				if(bport05)
				{
					if((RecBuf[9]&0x20)==0)
						bwary02=0;
					else
						bwary02=1;
				}
				if(bport04)
				{
					if((RecBuf[9]&0x10)==0)
						bwary03=0;
					else
						bwary03=1;
				}
				if(bport03)
				{
					if((RecBuf[9]&0x08)==0)
						bwary04=0;
					else
						bwary04=1;
				}
				if(bport02)
				{
					if((RecBuf[9]&0x04)==0)
						bwary05=0;
					else
						bwary05=1;
				}
				if(bport01)
				{
					if((RecBuf[9]&0x02)==0)
						bwary06=0;
					else
						bwary06=1;
				}
				if(bport00)
				{
					if((RecBuf[9]&0x01)==0)
						bwary07=0;
					else
						bwary07=1;
				}
				if(bport17)
				{
					if((RecBuf[10]&0x80)==0)
						bwary10=0;
					else
						bwary10=1;
				}
				if(bport16)
				{
					if((RecBuf[10]&0x40)==0)
						bwary11=0;
					else
						bwary11=1;
				}
				if(bport15)
				{
					if((RecBuf[10]&0x20)==0)
						bwary12=0;
					else
						bwary12=1;
				}
				if(bport14)
				{
					if((RecBuf[10]&0x10)==0)
						bwary13=0;
					else
						bwary13=1;
				}
				if(bport13)
				{
					if((RecBuf[10]&0x08)==0)
						bwary14=0;
					else
						bwary14=1;
				}
				if(bport12)
				{
					if((RecBuf[10]&0x04)==0)
						bwary15=0;
					else
						bwary15=1;
				}
				if(bport11)
				{
					if((RecBuf[10]&0x02)==0)
						bwary16=0;
					else
						bwary16=1;
				}
				if(bport10)
				{
					if((RecBuf[10]&0x01)==0)
						bwary17=0;
					else
						bwary17=1;
				}
/*
				for(i=0;i<2;i++)
			        bport[i]=RecBuf[7+i];
				for(i=0;i<RecBuf[6]-2;i++)
			        bwary[i]=RecBuf[9+i];
*/
				Wr_port();					   			
			
				break;

			case 0x04 :
				Rd_port();
				break;

			case 0x08 :
				CycleFlag=1;
/*				if(RecBuf[7]==0)
				{
					r_end=0;
					s_end=1;
					P1_4=R_CON;
					return;
				}
				else
*/					Radd_data();
					
				break;
				
			case 0x10 :
//				Gb_report();
			    break;	
					
			case 0x20 : 

				if(RecBuf[7]==1)
				{
					for(j=0;j<16;j++)
						for(k=0;k<6;k++)
							freezesum[j][k]=0;			
					FreezeFlag=1;
				}
				else if(RecBuf[7]==2)
				{
					FreezeFlag=0;
					S_time();
				}
				break;

			case 0x30:
				CycleFlag=1;
				R_time();
				break;

			case 0x40:
				S_day();
				break;

			case 0x50:
				CycleFlag=1;
				R_day();
				break;

			case 0x60:
				S_month();
				break;

			case 0x70:
				CycleFlag=1;
				R_month();
				break;

			case 0x80 :
			    Sys_init(); 
				break;				

			default:
				r_end=0;
			    s_end=1;
				P1_4=R_CON;
                return;       	
		}
     
		r_end=0;

//		if(delay_10ms>10)
//		{
//			s_end=1;
//			P1_4=R_CON;
//		}
//		else
//		{
		if(add_flag==0x07) 
		{
			p_end=1;			
			P1_4=S_CON;
			TI=1;        
		}
		
	    else if(add_flag==0x00)
		{
/*			if(fc_flag==0x20)
			{
				p_end=1;
				R_block(WPAGE0,RPAGE0,i2c_addr_configflag,&arpt_flag,1);

				if((arpt_flag!=1)&&(delay_10min<60000))
				{
				    arpt_flag=1;
					W_block(WPAGE0,i2c_addr_configflag,&arpt_flag,1);
					h_value=Hash(TL0,TH0,add,240);
					P1_4=S_CON;
					if(h_value==0)
						TI=1;
					else
						TR2=1;
				}
				else if(delay_10min>600009)
				{
					h_value=Hash(TL0,TH0,add,4+ArptCount);
					ArptCount++;
					if(ArptCount==100)
						ArptCount=0;
					P1_4=S_CON;	
					if(h_value==0)
						TI=1;
					else if((h_value>0)&&(h_value<4))
						TR2=1;
					else
					{
						s_end=1;
					    P1_4=R_CON;
					}
				}
				else 
				{
					s_end=1;
					P1_4=R_CON;
			    }				
		   	}
*///			else
//			{
				s_end=1;
				P1_4=R_CON;
//			}
		
		}

		else 
		{ 
			if(fc_flag==0x10)
			{
				p_end=1;
				if((alarm0!=0)&&(alarm_ac==0)&&((add[2]%10)==RecBuf[7]))
				{	
					Gb_report();
				    h_value=Hash(TL0,TH0,add,20);
					alarm0=0;

					P1_4=S_CON;
					if(h_value==0)
						TI=1;
					else
						TR2=1;
				}
				else  if((CheckInFlag)&&((add[2]%10)==RecBuf[7]))
				{
					Ad_report();
					h_value=Hash(TL0,TH0,add,20);
					alarm0=0;

					P1_4=S_CON;
					if(h_value==0)
						TI=1;
					else
						TR2=1;		
				}
				else
				{
					s_end=1;
					P1_4=R_CON;
				}
				switch(FreezeClass)
				{

					case 1:
						R_block(WPAGE0,RPAGE0,i2c_day_flag,&freezeday_end,1); 
             
						if(freezeday_end)
							R_block(WPAGE2,RPAGE2,i2c_day_freeze,FreezeData,96);	
						else
							R_block(WPAGE3,RPAGE3,i2c_day_freeze,FreezeData,96);
						break;
					case 2:
						R_block(WPAGE0,RPAGE0,i2c_month_flag,&freezemonth_end,1); 
             
						if(freezemonth_end)
							R_block(WPAGE2,RPAGE2,i2c_month_freeze,FreezeData,96);	
						else
							R_block(WPAGE3,RPAGE3,i2c_month_freeze,FreezeData,96);
						break;
				}
			}
				
			else
			{
				s_end=1;
				P1_4=R_CON;
			} 
		}
//	 } 
		
	}
  
	if (wr_switch!=0)
		User_contr();
	if(LightFlashStart)
		UserLight_Flash();

}

⌨️ 快捷键说明

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