📄 program_function.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 + -