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

📄 program_function.h

📁 嵌入式单片机开发,嵌入式单片机开发,嵌入式单片机开发
💻 H
字号:
unsigned char v10type;




/********************************************/
unsigned char light_time; 
unsigned char current_num_price_prog;//dang qian bian cheng shi tao
//unsigned char display_enable[100];



#define yes 1
#define no 0
// add by zhanglong ---->start
#define All_LOSTV_YES 55
#define ALL_LOSTV_NO 33
// add by zhanglong ---->end

//AAAA需量脉冲输出模式AAAAAA
#define kva_pulse_mode0   0    // aaa 需量周期AAAA
#define kva_pulse_mode1   1    // AAA 滑差AAAAAAAA
#define type_3_3 0x42     // aaa 三相三线AAAA
#define type_3_4 0x43     // aaaa三相四线AAAAA


//#define type_33_b_v_add 1150   // AAA三相三线用AAAA
#define type_33_b_v_sub  150    // AAA三相三线用AAAA
#define const_value_battery 0x22 //22v 电池 小于2-2V为低电压报警AAAAAAA
#define timevalue_speek  0x5  // 5minute
#define timevalue_xuliangqingling_lock  7*24*60   //aa需量清零一次锁定时间AAAAAA
// cos
#define cossub 0x00996100
#define cosadd 0x01000700
// cos55 cos 65
#define cosadd5l 0x00573600
#define cossub5l 0x00422600
//ppp3//pppp3-3--------------------------------->
//#define cos3_3_90 0x00087155
//#define cos3_3_30sub 0x00819152
//#define cos3_3_30add 0x00906308



//AAAA电量配制常量定义AAAAAAAAAAAAAAAAAAAAAAAAAAA
#define progfunction_kwh_f                 yes  //aaaa 正向有功总电量	SSS
 //aaaa 正向有功费率电量	SSS
#define progfunction_kwh_f_price display_enable[2]
#define progfunction_kwh_r                  yes  //aaaa 反向有功总电量	SSS
 //aaaa 反向有功费率电量	SSS
#define progfunction_kwh_r_price display_enable[3]
 //aaaa 正向无功总电量	SSS
#define progfunction_kvarh_f  display_enable[4]
 //aaaa 正向无功费率电量	SSS
#define progfunction_kvarh_f_price display_enable[5]
 //aaaa 反向无功总电量	SSS
#define progfunction_kvarh_r display_enable[6]
 //aaaa 反向无功费率电量	SSS
#define progfunction_kvarh_r_price display_enable[7]
//aaaa 四象限无功电量	SSS
#define progfunction_kvarh_1                display_enable[8]
#define progfunction_kvarh_2                display_enable[8]
#define progfunction_kvarh_3                display_enable[8]
#define progfunction_kvarh_4                display_enable[8]




//AAAA需量配制常量定义AAAAAAAAAAAAAAAAAAAAAAAAAAA


//aaaa 正向有功总需量	SSS
#define progfunction_kva_f                   display_enable[9]
#define progfunction_kva_f_price         display_enable[10]   //aaaa 正向有功费率需量	SSS
#define progfunction_kva_r                   display_enable[11]   //aaaa 反向有功总需量	SSS
#define progfunction_kva_r_price         display_enable[12]  //aaaa 反向有功费率需量	SSS
#define progfunction_kvar_f                  display_enable[13]   //aaaa 正向无功总需量	SSS
#define progfunction_kvar_f_price        display_enable[14]    //aaaa 正向无功费率需量	SSS
#define progfunction_kvar_r                  display_enable[15]    //aaaa 反向无功总需量	SSS
#define progfunction_kvar_r_price        display_enable[16]   //aaaa 反向无功费率需量	SSS
#define progfunction_kvar_1                 display_enable[17]   //aaaa 1象限总需量	SSS
#define progfunction_kvar_2                 display_enable[17]  //aaaa 2象限总需量	SSS
#define progfunction_kvar_3                 display_enable[17]  //aaaa 3象限总需量	SSS
#define progfunction_kvar_4                 display_enable[17]   //aaaa 4象限总需量	SSS

#define progfunction_nixianxu               display_enable[22]  // aa 逆相序记录功能使能AAAA
#define progfunction_overkwh               display_enable[21] // AA 过载事件记录功能AAAAAAA
#define progfunction_cuofeng                display_enable[20]  // aa 错峰功能AAAAAAAAAAAAAAAAAA
#define progfunction_yuyue                   display_enable[19] // aa 预约功能AAAAAAAAAAAAAAAAAA
#define progfunction_quanshiya            display_enable[18]  // aa 全失压功能AAAAAAAAAAAAAAA

#define  progfunction_biaotype              display_enable[52] //dian biao lei xing电表类型AAAAAAAAAAAAAA
#define progfunction_security                display_enable[27] //aa 有无安全认证要求AAAAAyes no






                          

unsigned int mochong_add1;//k 64// jia 0dot01   
unsigned long mochong_kw;//ll  6400  // xuliang ji suan




unsigned int type_v_duanxian;//ll  (2200*3)/10        //(2200*3)/10  // AAA断相电压常量AAAAA3-4
unsigned int type_60per_v;//l   (2200*6)/10  //    (2200*8)/10   //80% v
//aa 反向有功最小门限AAAAAA
unsigned long type_minvalue_fanxiangyougong;//   0x00003300         //0x00009900  // KW3-4 220v


unsigned long  kw_set7758_16h;

//   p3--4

unsigned int imaxsub;
unsigned int imaxadd;
unsigned int ibsub;
unsigned int ibadd;
unsigned int imaxsub5l;
unsigned int imaxadd5l;
unsigned int ibsub5l;
unsigned int ibadd5l;

//l7758

unsigned int power_delay;
//#define kw_div 1
unsigned char kw_div;
//#define kw_div_add 2
unsigned char kw_div_add;
#define CK_V_220 5349
#define CK_V_100 6723//l5986
#define CK_V_577 5349
//#define CK_V CK_V_220                                                                            
unsigned int CK_V;
unsigned int CK_KW;
unsigned int CK_KVAR;
unsigned int CK_KVA;

extern unsigned char value_hex_from_bcd(unsigned char a);
//extern unsigned char read(unsigned char,unsigned char);
extern unsigned char testbcdnum(unsigned char*,unsigned char);
extern void long_to_8bcd(unsigned long,unsigned char *);
unsigned int hexto2bcd(unsigned int value)//  can use only  in this mode
// one word hex changed to two byte bcd data 
{
unsigned int l;

//unsigned int value;
//value=value1;
l=value/1000;
value=value%1000;
l=(l<<4)+(value/100);
value=value%100;
l=(l<<4)+(value/10);
value=value%10;
l=(l<<4)+value;
return l;
}

unsigned long cal_typekw(romaddr,u)
unsigned char *romaddr;
unsigned int u;
{unsigned long i,kw;
	i=value_hex_from_bcd(*(romaddr+2));
	i=i*100+value_hex_from_bcd(*(romaddr+1));
	i=i*100+value_hex_from_bcd(*romaddr);
	kw=(u*i)/1000;//----------dot x x x(kw)
	return kw;
}

#define DATAERR 33
#define DATAOK 55


void program_function()
{unsigned int l,tib,timax;
  unsigned long u,i,kw,y,kw1,kwuse;
  unsigned char m,j;
  display_enable[0]=0;
  display_enable[1]=1;
  display_enable[22]=1;
  display_enable[23]=1;
 //display_enable[21]=1;
//read ep1 eplock
data_addr.addri=EPLOCK_METER_TYPE;
m=DATAOK;
for(j=0;j<50;j++)
	wr_data[j]=0;
if(0==read(EPLOCK,48)) 
	m=DATAERR;
if(32!=testbcdnum(&wr_data[0],32)) 
	m=DATAERR;
if((wr_data[0]<0x42)||(wr_data[0]>0x43))// type
	m=DATAERR;
if(wr_data[1]!=0)// mo chong chang shu di
	m=DATAERR;
l=wr_data[2]+256*wr_data[3];
if((l>0x400)||(l==0))
	m=DATAERR;
for(j=19;j<32;j++)
{
	if(wr_data[j]>1)
		m=DATAERR;
}

if(DATAOK!=m)
  {
  	data_addr.addri=EP1_METER_TYPE;
    	m=DATAOK;
	for(j=0;j<50;j++)
		wr_data[j]=0;
   	if(0==read(EP1,48)) 
		m=DATAERR;
   	if(32!=testbcdnum(&wr_data[0],32)) 
		m=DATAERR;
   	if((wr_data[0]<0x42)||(wr_data[0]>0x43))// type
		m=DATAERR;
	if(wr_data[1]!=0)// mo chong chang shu di
		m=DATAERR;
	l=wr_data[2]+256*wr_data[3];
	if((l>0x400)||(l==0))
		m=DATAERR;
	for(j=19;j<32;j++)
		{
			if(wr_data[j]>1)
				m=DATAERR;
		}
   
  }
//wu gong
if(wr_data[21]!=1)// zheng xiang wu gong shi neng
	wr_data[22]=0;// zheng xiang wu gong fe lv shi neng 
if(wr_data[23]!=1)// fan xiang wu gong shi neng
	wr_data[24]=0;// fan xiang wu gong fe lc shi neng

if(DATAOK==m)
   {//biao xing 42 43 
    progfunction_biaotype=wr_data[0];
     display_enable[24]=wr_data[1];//mai chong chang shu
     display_enable[25]=wr_data[2];//mai chong chang shu
     display_enable[26]=wr_data[3];//mai chong chang shu
     
      //dian ya gui ge,un, ib ,max i
      for(m=0;m<15;m++)
      	    display_enable[28+m]=wr_data[4+m];//dian ya
      // kwh_price f r,kvarh q1 q2 q3 q4 enabled
      for(m=0;m<7;m++)
	   display_enable[2+m]=wr_data[19+m];
	  //xuliang enabled
      if(wr_data[26]==0)
	      	   {
	      	   	for(m=0;m<9;m++)
	      	        	display_enable[9+m]=0;
	      	   }
	else
		{
			display_enable[9]=1;
	         	display_enable[10]=display_enable[2];
		  	display_enable[11]=1;
		  	display_enable[12]=display_enable[3];
		  	for(m=0;m<5;m++)
		  		display_enable[13+m]=display_enable[4+m];
		}
	//an quan ren zhen
	display_enable[27]=wr_data[27];
	//quan shi ya
	display_enable[18]=wr_data[28];
	//yu yue
	display_enable[19]=wr_data[29];
	//cuofeng
	display_enable[20]=wr_data[31];
	//guo zai
	display_enable[21]=wr_data[30];
	kw_div=wr_data[33];
	kw_div_add=wr_data[32];
	//h------l
	CK_KW=wr_data[34]*256+wr_data[35];
	CK_KVAR=wr_data[36]*256+wr_data[37];
	CK_KVA=wr_data[38]*256+wr_data[39];
	power_delay=wr_data[46]*256+wr_data[47];
	
    }

  
// aaaa电表常数AAAAA
l=value_hex_from_bcd(display_enable[25])+100*value_hex_from_bcd(display_enable[26]);
if((l==0)||(l>400))
     l=64;
mochong_kw=l;
mochong_kw=100*mochong_kw;
mochong_add1=l;
 //dian ya 
 switch(display_enable[31])
 	{
 	  case 0:
	  	// 577v
	  	      type_v_duanxian=(577*3)/10;
		      type_60per_v=(577*6)/10;
		      u=577;
		      y=3000;
		      CK_V=CK_V_577;
		      break;
	 case 1:
	 	// 100v
	 	      type_v_duanxian=(1000*6)/10;//l3
		      type_60per_v=(1000*8)/10;
		      u=1000;
		      y=1732;
		      CK_V=CK_V_100;
		      break;
	default:
		// 220v
		     type_v_duanxian=(2200*3)/10;
		      type_60per_v=(2200*6)/10;
		      u=2200;
		      y=3000;
		      CK_V=CK_V_220;
		      break;
 	}
//i=value_hex_from_bcd(display_enable[36]);
//i=i*100+value_hex_from_bcd(display_enable[35]);
//i=i*100+value_hex_from_bcd(display_enable[34]);
//kw=(u*i)/1000;//----------dot x x x(kw)
kw=cal_typekw(&display_enable[34], u);
kwuse=kw;

// changed by zhanglong -->start
// changed time 2005-09-22
kw=(kw*y)/1000;
//  0.1%  kw
long_to_8bcd(kw,&data_addr.addrc[0]);
display_enable[90]=data_addr.addrc[3];
display_enable[91]=data_addr.addrc[2];
display_enable[92]=data_addr.addrc[1];
display_enable[93]=data_addr.addrc[0];
kw_set7758_16h=data_addr.addrl;

// changed by zhanglong -->end

kw1=(kw*95)/100;
l=kw1/10;
ibsub=hexto2bcd(l);
kw1=(kw*105)/100;
l=kw1/10;
ibadd=hexto2bcd(l);
kw1=(kw*80)/200;
l=kw1/10;
ibsub5l=hexto2bcd(l);
kw1=(kw*120)/200;
l=kw1/10;
ibadd5l=hexto2bcd(l);

kwuse=kwuse*10;// l =1%ibkw     dot x x x y--------->1%ib(dot x x x y z z)
// kw(1%ib)=(kw*100*10)/100
long_to_8bcd(kwuse,&data_addr.addrc[0]);
//type_minvalue_fanxiangyougong=wr_data[3];
//type_minvalue_fanxiangyougong=256*type_minvalue_fanxiangyougong;
//type_minvalue_fanxiangyougong=type_minvalue_fanxiangyougong+wr_data[2];
//type_minvalue_fanxiangyougong=type_minvalue_fanxiangyougong*256;
//type_minvalue_fanxiangyougong=type_minvalue_fanxiangyougong+wr_data[1];
//type_minvalue_fanxiangyougong=type_minvalue_fanxiangyougong*256;
//type_minvalue_fanxiangyougong=type_minvalue_fanxiangyougong+wr_data[0];
type_minvalue_fanxiangyougong=data_addr.addrl;


if (type_3_3==progfunction_biaotype)
{
	type_minvalue_kw_cal_door=kwuse*1732;//1732* 0p9
}
else
{
	type_minvalue_kw_cal_door=kwuse*3000;// 3000 * 0p9
}
type_minvalue_kw_cal_door=type_minvalue_kw_cal_door/10;
l=value_hex_from_bcd(display_enable[36]);
l=l*100+value_hex_from_bcd(display_enable[35]);
tib=l*100+value_hex_from_bcd(display_enable[34]);

l=value_hex_from_bcd(display_enable[41]);
l=l*100+value_hex_from_bcd(display_enable[40]);
timax=l*100+value_hex_from_bcd(display_enable[39]);
if (2200==u)
{
	if (tib>499) // 4 point99A  want 5A
		{
		if(timax>999)// 9point 99A want 10A
			{
			// ren wei shi "zhi jie  jie ru shi" 0.2%Ib
			type_minvalue_kw_cal_door=type_minvalue_kw_cal_door*2;
			}
		}
}
current_type=current_type_big;
if((tib<100)&&(timax<200))
	{
	current_type=current_type_small;
	}


type_minvalue_kw_cal_door=type_minvalue_kw_cal_door/100000;
// test
long_to_8bcd(type_minvalue_kw_cal_door,&data_addr.addrc[0]);
display_enable[60]=data_addr.addrc[3];
display_enable[61]=data_addr.addrc[2];
display_enable[62]=data_addr.addrc[1];
display_enable[63]=data_addr.addrc[0];
// test

// test
//display_enable[90]=wr_data[0];
//display_enable[91]=wr_data[1];
//display_enable[92]=wr_data[2];
//display_enable[93]=wr_data[3];

//test


//i=value_hex_from_bcd(display_enable[41]);
//i=i*100+value_hex_from_bcd(display_enable[40]);
//i=i*100+value_hex_from_bcd(display_enable[39]);
//kw=u*i/1000;
kw=cal_typekw(&display_enable[39], u);
kw=(kw*y)/1000;
kw1=(kw*95)/100;
l=kw1/10;
imaxsub=hexto2bcd(l);
kw1=(kw*105)/100;
l=kw1/10;
imaxadd=hexto2bcd(l);
kw1=(kw*80)/200;
l=kw1/10;
imaxsub5l=hexto2bcd(l);
kw1=(kw*120)/200;
l=kw1/10;
imaxadd5l=hexto2bcd(l);
 // opp --程序版本号 -- opp
// -aa--- 99990400 ---aa-
 display_enable[43]=0x00;
 display_enable[44]=0x05;
 display_enable[45]=0x99;
 display_enable[46]=0x99;

 //gui yue ban ben
 // 01 00
 display_enable[47]=0x00;
 display_enable[48]=0x01;
 //lun xian ban ben
 // 00 01 00
 display_enable[49]=0x00;
 display_enable[50]=0x01;
 display_enable[51]=0x00;

//zi jian
if(kw_div==0) kw_div=1;
if(kw_div_add==0) kw_div_add=1;
if(CK_V==0) CK_V=CK_V_220;
if(CK_KW==0) 
	CK_KW=1456;
if(CK_KVAR==0) 
	CK_KVAR=1465;
if(CK_KVA==0) 
	CK_KVA=1465;

}



⌨️ 快捷键说明

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