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

📄 xuliang.h

📁 嵌入式单片机开发,嵌入式单片机开发,嵌入式单片机开发
💻 H
📖 第 1 页 / 共 3 页
字号:

// xuliang zhou qi hua cha zhou qi gai bian---->num=0,addr=0 must zai hao qing ling(20)
// >max err
// xu liang yong 需量用qqqqqqqqqqq
// AAA需量脉冲用AAAAAAA
unsigned char xuliang_mochong_use_time;// zhou qi
//#define RKVA_F  0x0190   // ZHEN XIAN YOU GONG XU LIANG 正向有功最大需量llllllllll
//#define FMKVA_F 0x190
unsigned char bcd6_buffer[4];
// wu gong zu he fan shi bian hua xu liang chong ji
// wu 当前用正向反向组合方式,用于判断组合是否改变,如变,重新开始AAA
unsigned char rcurrent_use_mode_f_kvarh_count;       // ZHEN XIANG WU GONG 正向无功正在使用的计量方式oooo
unsigned char rcurrent_use_mode_r_kvarh_count;       // FAN XIANG WU GONG 反向无功正在使用的计量方式oooooo
// dan qian zong liang hua cha 当前总量的滑差计数器llllllllll
unsigned char rcurrent_total_huacha;
// dan qian zong liang hua cha 当前费率量的滑差计数器llllllllll
unsigned char rcurrent_price_huacha;
// dan qian cuo feng yong hua cha 当前错峰用滑差计数器AAAAAA
unsigned char rcurrent_cuofeng_huacha;
// dan qiang yong cuofeng felv 当前用错峰标志(是否错峰)AAAAA
unsigned char status_cuofeng_price_use;
// bbb 模块用需量周期,用于指示需量周期有无改变AAAAAAA
//BBB 相同无变化,不同有变化AAAAAA
unsigned char xuliangmode_use_xuliangzhouqi;
unsigned char xuliang_powerreset;
// chu shi
void init_xuliang()
{
 unsigned char l;
 	XULIANG_MINUTE=RSOFT_RTC_MINUTE+5;
	xuliangmode_use_xuliangzhouqi=RAM[R_XULIANGZHOUQI];
	RCURRENT_KVA_USE_PRICE=STATUS_PRICE;
	rcurrent_total_huacha=0;
	xuliang_mochong_use_time=0;// fe lv price mochong
	rcurrent_price_huacha=0;
	xuliangqingling_qingqiu=0;

	// zheng xiang you gong
	RCURRENT_MINUTE_KVA_F=0;
	RCURRENT_USE_MINUTE_KVA_F=0;
	RCURRENT_KVA_F_BUFFER_ADDR=0;
	RCURRENT_KVA_F_BUFFER_NUM=0;
	RCURRENT_KVA_F_PRICE_BUFFER_NUM=0;
	for(l=0;l<60;l++)
   		{
   			RCURRENT_KVA_F_BUFFER[l]=0;
     			RCURRENT_KVA_R_BUFFER[l]=0;
     			RCURRENT_KVAR_F_BUFFER[l]=0;
     			RCURRENT_KVAR_R_BUFFER[l]=0;
     			RCURRENT_KVAR_1_BUFFER[l]=0;
     			RCURRENT_KVAR_2_BUFFER[l]=0;
     			RCURRENT_KVAR_3_BUFFER[l]=0;
     			RCURRENT_KVAR_4_BUFFER[l]=0;
     			RCURRENT_CUOFENG_BUFFER[l]=0;
   		}
	// fan xiang you gong
	RCURRENT_MINUTE_KVA_R=0;
	RCURRENT_USE_MINUTE_KVA_R=0;
	RCURRENT_KVA_R_BUFFER_ADDR=0;
	RCURRENT_KVA_R_BUFFER_NUM=0;
	RCURRENT_KVA_R_PRICE_BUFFER_NUM=0;
	// zheng xiang wu gong
	RCURRENT_MINUTE_KVAR_F=0;
	RCURRENT_USE_MINUTE_KVAR_F=0;

	
	RCURRENT_KVAR_F_BUFFER_ADDR=0;
	RCURRENT_KVAR_F_BUFFER_NUM=0;
	RCURRENT_KVAR_F_PRICE_BUFFER_NUM=0;

	// fan xiang wu gong
	RCURRENT_MINUTE_KVAR_R=0;
	RCURRENT_USE_MINUTE_KVAR_R=0;
	RCURRENT_KVAR_R_BUFFER_NUM=0;
	RCURRENT_KVAR_R_PRICE_BUFFER_NUM=0;
	RCURRENT_KVAR_R_BUFFER_ADDR=0;

	
	RCURRENT_MINUTE_KVAR_1=0;
	RCURRENT_USE_KVAR_1=0;
	RCURRENT_KVAR_1_BUFFER_ADDR=0;
	RCURRENT_KVAR_1_BUFFER_NUM=0;
	RCURRENT_KVAR_1_PRICE_BUFFER_NUM=0;
	RCURRENT_MINUTE_KVAR_2=0;
	RCURRENT_USE_KVAR_2=0;
	RCURRENT_KVAR_2_BUFFER_ADDR=0;
	RCURRENT_KVAR_2_BUFFER_NUM=0;
	RCURRENT_KVAR_2_PRICE_BUFFER_NUM=0;
	RCURRENT_MINUTE_KVAR_3=0;
	RCURRENT_USE_KVAR_3=0;
	RCURRENT_KVAR_3_BUFFER_ADDR=0;
	RCURRENT_KVAR_3_BUFFER_NUM=0;
	RCURRENT_KVAR_3_PRICE_BUFFER_NUM=0;
	RCURRENT_MINUTE_KVAR_4=0;
	RCURRENT_USE_KVAR_4=0;
	RCURRENT_KVAR_4_BUFFER_ADDR=0;
	RCURRENT_KVAR_4_BUFFER_NUM=0;
	RCURRENT_KVAR_4_PRICE_BUFFER_NUM=0;
// cuo feng
	RCURRENT_MINUTE_CUOFENG=0;
	RCURRENT_USE_MINUTE_CUOFENG=0;
	RCURRENT_CUOFENG_BUFFER_ADDR=0;
	RCURRENT_CUOFENG_BUFFER_NUM=0;
	status_cuofeng_price_use=0;
	rcurrent_cuofeng_huacha=0;
// fan shi  MODE
	rcurrent_use_mode_f_kvarh_count=RAM[R_KVARHMODE_F];
	rcurrent_use_mode_r_kvarh_count=RAM[R_KVARHMODE_R];
// RCURRENT_KVA_R_BUFFER[60]--------> qing ling 8 buffer
kw_fz_numsecond=0;
kw_fz_perminute=0;

kw_rz_numsecond=0;
kw_rz_perminute=0;

kw_cuofeng_numsecond=0;
kw_cuofeng_perminute=0;



}

// mo chong chang sheng
void xuliangzhouqi_pulse()
{
	pulseset_withvaluetime(6,800);
}



unsigned char cal_kw_use(numpulse,xdiv)
unsigned long *numpulse,xdiv;
{
unsigned char l;
l=*numpulse/xdiv;
*numpulse=*numpulse%xdiv;
return l;
}






void byte_hex_mochon_2_bcd_6 (unsigned int a)//LL 40000
{unsigned char l1,l2,l3,l4,l5,l6;
  unsigned long l7;
  unsigned int l8;
  unsigned long i,l10;
  unsigned char use_xuliangzhouqi;
 	if(1==thevalueisbcd1to60(RAM[R_XULIANGZHOUQI]))
        	use_xuliangzhouqi=value_hex_from_bcd(RAM[R_XULIANGZHOUQI]);
 	else  
 		use_xuliangzhouqi=15;
	l8=use_xuliangzhouqi;
	l8=60/l8;
	l7=l8;
	l7=a*l7;
// zui da  80ms
	if(l7>60000) 
		l7=0;//l45000
//
	l10=mochong_kw*10;

	i=l7;
	l6=cal_kw_use(&i,l10);
 	//l6=l7/l10;
 	//i=l7%l10;
 	l5=cal_kw_use(&i,mochong_kw);
 	//l5=i/mochong_kw;
 	//i=i%mochong_kw;
 	l10=mochong_kw/10;
 	//l4=i/l10;
 	//i=i%l10;
	l4=cal_kw_use(&i,l10);
 	l10=mochong_kw/100;
 	//l3=i/l10;
 	//i=i%l10;
	l3=cal_kw_use(&i,l10);
 	i=i*100;
 	l10=mochong_kw/10;
 	//l2=i/l10;
 	//i=i%l10;
	l2=cal_kw_use(&i,l10);
 	l10=mochong_kw/100;
 	l1=i/l10;
  	bcd6_buffer[2]=(l6<<4)+l5;
  	bcd6_buffer[1]=(l4<<4)+l3;
  	bcd6_buffer[0]=(l2<<4)+l1;
}


// COMPARE
unsigned char  xuliang_compare(unsigned int i)
{//unsigned long l1;
  //unsigned long l2,l3;
   union lb{
       			unsigned long l;       
       			unsigned char a[4];
        	}m1,m2;
   unsigned char k;
   m1.l=0;
   m2.l=0;
   for(k=0;k<3;k++)
   	{
   		m1.a[k]=RAM[i+k];
		m2.a[k]=bcd6_buffer[k];
   	}
   if(m1.l<m2.l)
   	return 1;
   else
   	return 0;
   /*
  // lei xing wen ti
l1=RAM[i+2];
l1=256*256*l1;
l3=RAM[i+1];
l1=l1+256*l3;
l3=RAM[i];
l1=l3+l1;
l2=bcd6_buffer[2];
l2=256*256*l2;
l3=bcd6_buffer[1];
l2=l2+256*l3;
l2=l2+bcd6_buffer[0];
if(l1<l2) 
	return 1;
else 
	return 0;*/
}




//  cun sh jian
void xuliang_cun_shijian(unsigned int i)
{
	if(1==testsecond_minute_hour_day_month_year(&RSOFT_RTC_SECOND,&RSOFT_RTC_DAY))
		{
  			
			RAM[i]=RSOFT_RTC_MINUTE;
			RAM[i+1]=RSOFT_RTC_HOUR;
			RAM[i+2]=RSOFT_RTC_DAY;
			RAM[i+3]=RSOFT_RTC_MONTH;
  		}
}
// if 10ms intturp 1000
// if 100us intturp 1007
#define kw_cal_coefficient 1008

unsigned long call_kw(unsigned long value)
{	unsigned long sum;
	unsigned int t;
       sum=value;
	sum=sum*((kw_cal_coefficient*kw_div_add)/(kw_div*CK_KW))+((sum*((kw_cal_coefficient*kw_div_add)%(kw_div*CK_KW)))/(kw_div*CK_KW)); 

	t=(value*((kw_cal_coefficient*kw_div_add)%(kw_div*CK_KW)))%(kw_div*CK_KW);
	if(t>(kw_div*CK_KW)/2)
		sum=sum+1;
       if(sum<type_minvalue_kw_cal_door)
	   	sum=0;
	return sum;
}

unsigned char chuli_max_kw_anzhaogonglv(a2,addr)
unsigned long a2;
unsigned int addr;
{unsigned char a1,value;
// ji suan
value=0;
 long_to_8bcd(a2, &bcd6_buffer[0]);
 if(1==xuliang_compare(addr))   // zui da
     {value=1;
      for(a1=0;a1<3;a1++)
           RAM[addr+a1]=bcd6_buffer[a1];
                   
       xuliang_cun_shijian(addr+3);
       
       	
       copy_ram_to_fm(addr,7,addr);
      }
 return value;
}


unsigned char chuli_max_kw(a2,addr)
unsigned int a2,addr;
// input (kw pulse/xuliang zhou qi)
// compare  kw(a2)-----current max kw
// if >  ------>recorde max kw,and minute hour day month
{unsigned char a1;
// ji suan
 	byte_hex_mochon_2_bcd_6(a2);
 	if(1==xuliang_compare(addr))   // zui da
     		{
      			for(a1=0;a1<3;a1++)
           			RAM[addr+a1]=bcd6_buffer[a1];                   
       		xuliang_cun_shijian(addr+3);     
       		copy_ram_to_fm(addr,7,addr);
		return 1;
      		}
 return 0;
}


void fen_xuliang_chuli()
// price kw 
{unsigned int a2;
 unsigned char a1,a3;
 unsigned char use_xuliangzhouqi;
 unsigned long sum;
 if(1==thevalueisbcd1to60(RAM[R_XULIANGZHOUQI]))
        use_xuliangzhouqi=value_hex_from_bcd(RAM[R_XULIANGZHOUQI]);
 else  
 	 use_xuliangzhouqi=15; 
//  ZHEN XIAN price YOU GONG   -------------->-start
 if(RCURRENT_KVA_F_PRICE_BUFFER_NUM!=0)
  	{
  		sum=0;
         	a3=RCURRENT_KVA_F_BUFFER_ADDR;
  	  	for(a1=0;a1<RCURRENT_KVA_F_PRICE_BUFFER_NUM;a1++)
  	        	{
  	        		sum=sum+RCURRENT_KVA_F_BUFFER[a3];  	
  	          		if(a3==0)  
					a3=use_xuliangzhouqi-1;
  	          		else 
  	          	  		a3=a3-1;
  		   	}
  	// ji suan
		   sum=(sum+use_xuliangzhouqi/2)/use_xuliangzhouqi;
		   sum=call_kw(sum);
  	          chuli_max_kw_anzhaogonglv(sum,R_KW_F+7*(RCURRENT_KVA_USE_PRICE+1));
        }

//  ZHEN XIAN price YOU GONG--------------->   end


//  FAN XIAN price YOU GONG ---------------->start
 if(RCURRENT_KVA_R_PRICE_BUFFER_NUM!=0)
  	{
  		sum=0;
         	a3=RCURRENT_KVA_R_BUFFER_ADDR;
  	  	for(a1=0;a1<RCURRENT_KVA_R_PRICE_BUFFER_NUM;a1++)
  	        	{
  	        		sum=sum+RCURRENT_KVA_R_BUFFER[a3];  	
  	          		if(a3==0)  
					a3=use_xuliangzhouqi-1;
  	          		else 
  	          	  		a3=a3-1;
  		   	}
  	// ji suan
		   sum=(sum+use_xuliangzhouqi/2)/use_xuliangzhouqi;
		   sum=call_kw(sum);
  	          chuli_max_kw_anzhaogonglv(sum,R_KW_F+7*(RCURRENT_KVA_USE_PRICE+1)+35);      
  	 }
//  FAN XIAN price YOU GONG-----------------> end 

//  ZHEN XIAN price WU GONG ---------------->start
  if(RCURRENT_KVAR_F_PRICE_BUFFER_NUM!=0)
  	{
  		a2=0;
         	a3=RCURRENT_KVAR_F_BUFFER_ADDR;// char
  	  	for(a1=0;a1<RCURRENT_KVAR_F_PRICE_BUFFER_NUM;a1++)
  	        	{
  	        		a2=a2+RCURRENT_KVAR_F_BUFFER[a3];  	
  	          		if(a3==0)  
					a3=use_xuliangzhouqi-1;
  	          		else 
  	   	         		a3=a3-1;  		 
  		   	}
  	// ji suan
  	   	chuli_max_kw(a2,R_KW_F+70+7*(RCURRENT_KVA_USE_PRICE+1));
      	}
//  ZHEN XIAN price WU GONG ----------------->end

//  FAN XIAN PRICE WU GONG ----------------->start
  if(RCURRENT_KVAR_R_PRICE_BUFFER_NUM!=0)
  		{
  			a2=0;
         		a3=RCURRENT_KVAR_R_BUFFER_ADDR;
  	  		for(a1=0;a1<RCURRENT_KVAR_R_PRICE_BUFFER_NUM;a1++)
  	        		{
  	        			a2=a2+RCURRENT_KVAR_R_BUFFER[a3];  	
  	         			if(a3==0)  
						a3=use_xuliangzhouqi-1;
  	         			else 
  	         	  			a3=a3-1;
  		         	}
  	// ji suan
  	  		chuli_max_kw(a2,R_KW_F+105+7*(RCURRENT_KVA_USE_PRICE+1));
     		}
//  FAN XIAN PRICE WU GONG ----------------->end
}



void xuliang_price_change()
{
	if(RCURRENT_KVA_USE_PRICE!=STATUS_PRICE)
        	{
           		RCURRENT_KVA_USE_PRICE=STATUS_PRICE;
// PRICE

⌨️ 快捷键说明

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