lost_v.h

来自「嵌入式单片机开发,嵌入式单片机开发,嵌入式单片机开发」· C头文件 代码 · 共 441 行

H
441
字号


unsigned char rstatus_quanshiya_use;
unsigned char rstatus_quanshiya_continue_time;  //aa单片机工作下全失压AAAAA

void init_lost_v()
{unsigned char i;
 unsigned int i1;
	lost_v_continue_time=0;
	get_last_envent_data_from_fm_twotable_to_ram(TYPE_FM_LOSTV_RECORD,7,16, R_LOSTV_CURRENT_KWH_F);
	
	lost_v_quadrant=lost_v_no;
	lost_v_quadrant_use=lost_v_no;
	RSTATUS_QUANSHIYA=no_quanshiya;
	rstatus_quanshiya_use=no_quanshiya;
	rstatus_quanshiya_continue_time=0;
}


/*

void use_lostv()
{
unsigned char l1;
	data_addr.addri=current_twobiaofm_block_addr(TYPE_FM_LOSTV_RECORD,0);
  	if(data_addr.addri!=0xffff)
  		{
        		 wr_data[0]=table_guadrant_value_translate[lost_v_quadrant];
         		 for(l1=0;l1<6;l1++)
		  		wr_data[1+l1]=RAM[R_LOSTV_NUM+28+(lost_v_quadrant-1)*34+l1]; 
            		 for(l1=0;l1<16;l1++)
		   		wr_data[7+l1]=RAM[R_LOSTV_CURRENT_KWH_F+l1];           
             		 for(l1=0;l1<6;l1++)
             	     		wr_data[23+l1]=RAM[R_LOSTV_NUM+28+(lost_v_quadrant-1)*34+6+l1];
             		 write(FM, 23+6);
  		}
}*/
void use_lost_cut_v(twotable_type,enventquadrant,addr_enventnum,addr_envent_data)
unsigned char twotable_type,enventquadrant;
unsigned int addr_enventnum,addr_envent_data;
{
unsigned char l1;
	data_addr.addri=current_twobiaofm_block_addr(twotable_type,0);
  	if(data_addr.addri!=0xffff)
  		{
        		 wr_data[0]=table_guadrant_value_translate[enventquadrant];
         		 for(l1=0;l1<6;l1++)
		  		wr_data[1+l1]=RAM[addr_enventnum+28+(enventquadrant-1)*34+l1]; 
            		 for(l1=0;l1<16;l1++)
		   		wr_data[7+l1]=RAM[addr_envent_data+l1];           
             		 for(l1=0;l1<6;l1++)
             	     		wr_data[23+l1]=RAM[addr_enventnum+28+(enventquadrant-1)*34+6+l1];
             		 write(FM, 23+6);
  		}
}


// zhuan cun end
void lost_v_end()
{
 unsigned int addr;
// an hui add---->start
	time_to_wrdata();
	data_addr.addri=FM_LAST_CUTV_START_DATE+6;
	write(FM,6);
//an hui add end--------->end
// ji lu shi ya jie shu shi jian记录失压结束时间NNNNNN
	addr=R_LOSTV_NUM+34+(lost_v_quadrant-1)*34;
	lost_cun_shijian(addr);
// write fm
	copy_ram_to_fm(addr,6,addr);
// zhuang cun   转存  10 ci   JJJJJJJJJJJJJ
// xian zhuan cun zai eeprom ,yi hou geng gei
// read zhi zhen
	//use_lostv();
	use_lost_cut_v(TYPE_FM_LOSTV_RECORD, lost_v_quadrant, R_LOSTV_NUM, R_LOSTV_CURRENT_KWH_F);
	lost_v_quadrant=lost_v_no;
	lost_v_quadrant_use=lost_v_no;
	lost_v_continue_time=0;
}

void lost_cut_v_start_use(twotable_type,enventquadrant,addr_enventnum,addr_envent_data)
unsigned char twotable_type,enventquadrant;
unsigned int addr_enventnum,addr_envent_data;
{unsigned char i;
unsigned int i1;
// ZON CI SHU JIA
	byte_3_bcd_add_copy_to_fm(addr_enventnum);
// gei xian de ci shu lei jia 对应失压相累加次数NNNN
	i1=addr_enventnum+6+(enventquadrant-1)*34;
	byte_3_bcd_add_copy_to_fm(i1);

// ji lu shi ya qi shi shi jian记录失压起始时间NNNNNN
	i1=addr_enventnum+28+(enventquadrant-1)*34;
	lost_cun_shijian(i1);
	copy_ram_to_fm(i1,6,i1);
// chu shi jie shu shi jian初始结束时间00000
	i1=addr_enventnum+34+(enventquadrant-1)*34;
	for(i=0;i<6;i++)
		RAM[i+i1]=0;
	copy_ram_to_fm(i1,6,i1);
	i1=addr_envent_data;
	for(i=0;i<16;i++)
		RAM[i1+i]=0;
	if(1==next_point(twotable_type,4))
     		//use_lostv();
     		use_lost_cut_v(twotable_type, enventquadrant, addr_enventnum, addr_envent_data);
}
// zhuan cun start
void lost_v_start()
{
unsigned char i;
unsigned int i1;
	lost_v_quadrant=lost_v_quadrant_use;
	lost_v_continue_time=0;
	lost_v_rtc_minute=RSOFT_RTC_MINUTE;
	// an hui add------------>start
	time_to_wrdata();
	for(i=6;i<12;i++)
		wr_data[i]=0;
	data_addr.addri=FM_LAST_CUTV_START_DATE;
	write(FM,12);
// an hui add------------->end
	lost_cut_v_start_use(TYPE_FM_LOSTV_RECORD, lost_v_quadrant, R_LOSTV_NUM, R_LOSTV_CURRENT_KWH_F);

}




void lost_v_chuli(unsigned char a)
{unsigned char acktime;
	acktime=value_hex_from_bcd(RAM[R_LOSTV_ACK_TIME]);
	if(lost_v_quadrant_use!=a)
		{
			lost_v_quadrant_use=a;
      			lost_v_continue_time=0;
		}
	else
    		 {
    		 	if(lost_v_continue_time<=acktime)   //10
           			lost_v_continue_time=lost_v_continue_time+1;
      			if(lost_v_continue_time>=acktime)  //10
           			{
           				lost_v_continue_time=0;
             				if(lost_v_quadrant!=a)// status changed
 	        				 {
 	        					 if(a==lost_v_no)// end
 		  						 lost_v_end();
            						 else
        	    						{
        	    							if(lost_v_quadrant==lost_v_no)// start
        	       							lost_v_start();
                    							else
               	     							{
               	     								lost_v_end();// lost v,but status changed
                          							       lost_v_quadrant=a;
                            							lost_v_quadrant_use=a;
                            							lost_v_start();
										}
        	     						}
 	     					}
       			 }
    		}
}
        
        
        
void lost_v_all(unsigned char a)
{unsigned char acktime;
 	acktime=value_hex_from_bcd(RAM[R_LOSTV_ACK_TIME]);
	if(rstatus_quanshiya_use!=a)
		{
			rstatus_quanshiya_use=a;
        		 rstatus_quanshiya_continue_time=0;
		}
	else
     		{
     			if(rstatus_quanshiya_continue_time<=acktime)   //10
         			 rstatus_quanshiya_continue_time=rstatus_quanshiya_continue_time+1;
     			 if(rstatus_quanshiya_continue_time>=acktime)  //10
           			{
           				rstatus_quanshiya_continue_time=0;
             				if(RSTATUS_QUANSHIYA!=a)
 	         				{
 	         					if(a!=no_quanshiya)
 		      						{
 		      							RSTATUS_QUANSHIYA=quanshiya;
			 						byte_3_bcd_add_copy_to_fm(R_ALLLOSTV_NUM); 	              
 	               						one_time_two_table_start(TYPE_FM_ALLLOSTV_RECORD); 								
 	         						}
            						 else
        	    						{
        	    							RSTATUS_QUANSHIYA=no_quanshiya;
                  							 rstatus_quanshiya_use=no_quanshiya;
        	     							 one_time_two_table_end(TYPE_FM_ALLLOSTV_RECORD);
        	    						 }
 	    					 }
        			}
   		 }
}
        
        
    
void lost_v_pan(unsigned char a)
{unsigned char l;
 l=lost_v_no;
	switch(a)
          	{
          		//case 00 :
          		    // zhen chang
          		  		
                          		// break;
               	case 1:
               	    // a
               	   		l=lost_v_a;
               	    		break;
               	case 10: 
               	   // b
                       		 l=lost_v_b;
               	    		 break;
                     case 100:
               	    // c
               	   		l=lost_v_c;
               	    		break;
                    case 11: 
               	   // ab
                        		l=lost_v_ab;
               	    		break;
                    case 101:
               	    // ac
               	   		l=lost_v_ac;
               	    		break;
                    case 110: 
               	   // bc
                        		l=lost_v_bc;
               	   	       break;
                     default:               	              
               	              break;
          	}
	lost_v_chuli(l);
if(a==111) 
	lost_v_all(1);  // 111 all lost
else 
	lost_v_all(0);  // no all lost
}
               	    

void lost_v_time_add()
{unsigned int i;
	if(lost_v_rtc_minute!=RSOFT_RTC_MINUTE)
   		 {
   		 	lost_v_rtc_minute=RSOFT_RTC_MINUTE;
// ADD ONE MINUTE
// ZON LEI JI失压相累加总时间AAAAA
     			if(lost_v_quadrant!=lost_v_no)
     	  			{
     	    				byte_3_bcd_add_copy_to_fm(R_LOSTV_NUM+3);          
// gei xian de shi jian lei jia 对应失压相累加时间NNNN
           				if((0!=lost_v_quadrant)&&(lost_v_quadrant<7))
                 				{
                 					i=R_LOSTV_NUM+9+(lost_v_quadrant-1)*34;
		     					byte_3_bcd_add_copy_to_fm(i);	            
		    				}
            			}
        		 if(RSTATUS_QUANSHIYA==quanshiya)
         			{
         				byte_3_bcd_add_copy_to_fm(R_ALLLOSTV_TIME);
         	 // quan shi ya time add
         			}
    		   }
}



unsigned char condition_i_lostv(unsigned int addr)
{unsigned long j1,j2,j3;
  union ll
  	{ unsigned char a[4];
           unsigned long l;
  	} tempdata1,tempdata2;
  unsigned char m;
  for(m=0;m<4;m++)
  	tempdata1.a[m]=RAM[addr+m];// xx xx dot xx xx
  tempdata1.l=tempdata1.l>>4;// changed 0 x x x x dot x x x
  tempdata2.l=0;
  for(m=0;m<3;m++)
  	tempdata2.a[m]=RAM[R_LOSTV_CONDITION+2+m];//00 xx x dot x x x
  if(tempdata1.l>=tempdata2.l)
 		return 1;
  else
 		return 0;
}


void lost_v_mode_3_3()
{unsigned char la,lb,lc,k;
 unsigned int j_condition,ja,jc,jb,jadd;
 j_condition=value_hex_from_2bcd(R_LOSTV_CONDITION);
	la=0;
	lb=0;
	lc=0;
	
	// a shi ya 
	ja=value_hex_from_v_4bytebcd(&RAM[R_V_A]);
	   // b shi ya 
	jc=value_hex_from_v_4bytebcd(&RAM[R_V_C]);

	jb=value_hex_from_v_4bytebcd(&RAM[R_V_B]);
	k=0;
	if(1==condition_i_lostv(R_I_A)) 
		k=1;
	if(1==condition_i_lostv(R_I_C)) 
		k=1;
	if(((ja+jc)<j_condition)&&(k==1))
		{
			la=1;
 			lb=1;
		       lc=1;
 		}
	 else
 		{ 
 		
	     	//	if((j3+j4)<type_33_b_v_add)// question
	     		jadd=ja+jc;
			// |ja+jc-jb|<150(0 dot 1 v)
			// |ja-jc|<150(0 dot 1 v)
			if(jadd>jb)
				jadd=jadd-jb;
			else
				jadd=jb-jadd;	
			if(jadd<type_33_b_v_sub)
        			{
        				if(ja>jc)
        	    				{
        	    					if((ja-jc)<type_33_b_v_sub)
        	    	  					lb=1;
		    				}
                   			else
                   				{
                   					if((jc-ja)<type_33_b_v_sub)
        	    	 					 lb=1;
		      				 }
        			}


			
	 		 if(lb==0)
	  			{ 		    
                			if((ja<j_condition)&&(1==condition_i_lostv(R_I_A)))
          	    				la=1;            
                     // c shi ya       
                  			 if((jc<j_condition)&&(1==condition_i_lostv(R_I_C)))
          	        			lc=1;
                  		 }
 	    }
          la=la+lb*10+lc*100;
          lost_v_pan(la);  
}





  
void lost_v_mode_3_4()
{unsigned char la,lb,lc;
 unsigned int j1,j2,j3,ja,jb,jc;
	la=0;
	lb=0;
	lc=0;
	j1=value_hex_from_2bcd(R_LOSTV_CONDITION);
	ja=value_hex_from_v_4bytebcd(&RAM[R_V_A]);
	jb=value_hex_from_v_4bytebcd(&RAM[R_V_B]);
	jc=value_hex_from_v_4bytebcd(&RAM[R_V_C]);	   
	if((ja<j1)&&(1==condition_i_lostv(R_I_A)))
    		 la=1;
         // b shi ya        
	if((jb<j1)&&(1==condition_i_lostv(R_I_B)))
		lb=1;
            // c shi ya           
	if((jc<j1)&&(1==condition_i_lostv(R_I_C)))
      		 lc=1;
	la=la+lb*10+lc*100;
	lost_v_pan(la);
 }



void lost_v_mode()
{
// lei jia shi jian jia  (minute)
	lost_v_time_add();
	if(lost_v_rtc_second!=RSOFT_RTC_SECOND)
		{
			lost_v_rtc_second=RSOFT_RTC_SECOND; 
  			 if(progfunction_biaotype==type_3_3)
   	 	  		lost_v_mode_3_3();
   			else 
   	          		lost_v_mode_3_4();  	

   		}
}



   	
   	  	
   	  		    
   	






























⌨️ 快捷键说明

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