📄 xuliang.h
字号:
// 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 + -