📄 hualong_v10.h
字号:
#define nnmmddww 0// year month day week
#define hhmmss 1// hour minute second
#define bcd 2
#define zero 3// ==0
#define ddhh 4// day hour
#define between1to60 5
#define mmddhhmmor99 6// month day hour minute or ==99
#define between0to1 7
#define between0to5 8
#define between0to4 9
#define between1or3 10
#define hex 11
#define mmddhhmm 12// month day hour minute
#define hhmm 13// hour minute
#define xxnnmmddhhmm 14// xx (value) year month day hour minute
#define nnxx 15// gong xiu ri ji shi tao
#define hhmmnn 16// hour minute price
#define mmddnn 17// month day num(shi tao)
#define between0to6 18//wu gong zu he
// add by zhanglong
#define nnmmddwwhhmmss 19 //year,month,day,week,hour,min,sec
struct v10use{
unsigned int code; // command
unsigned char len;// data len
unsigned char format;// data format
unsigned char type;// store type
unsigned char recordecode;// prog code
unsigned int waddr;// main addr
};
#define w_rfm 0// ram fm
#define w_rfmfm1 1// ram fm fm1
#define w_ep1 2// ep1
#define w_ep1eplock 3// ep1 ,eplock
#define w_time 4// time
#define w_dateweek 5// year month day week
#define w_eplock 6// eplock
#define clrbd00 7// v10 command bd00
#define clrbd01 8// v10 command bd01
#define clrbd02 9// v10 command bd02
#define clrbd03 10// v10 command bd03
#define clrbd04 11// v10 command bd04
#define clrbd05 12// v10 command bd05
#define clrbe01 13// v10 command be01
// add by zhanglong
#define w_dataweek_time 14 // year month day week, time
//
#define table_v10write_count 99-7+1
// code ,codelen,codeformat,stor type,recorde code,store addr
const struct v10use table_v10write[table_v10write_count]=
{
{0xb000,4,nnmmddww,w_dateweek,0,R_SOFT_WEEK},//l0
{0xb001,3,hhmmss,w_time,1,R_SOFT_SECOND},//l1
// add by zhanglong ---->start
{0xb00f,7,nnmmddwwhhmmss,w_dataweek_time,0x96,R_SOFT_SECOND},
// add by zhanglong ---->end
{0xb010,6,bcd,w_rfmfm1,2,R_YONGHUHAO_L},//l2
{0xb011,6,bcd,w_rfmfm1,3,R_JUHAO_L},//l3
{0xb012,6,bcd,w_rfmfm1,4,R_BIAOADDR_L},//l4
{0xb020,3,zero,w_rfm,0x5,R_BATTERY_WORKTIME},//l5
{0xb021,1,bcd,w_rfmfm1,0x6,R_DISPLAY_TIMER},//l6
{0xb022,2,ddhh,w_rfmfm1,0x7,R_CHAOBIAORI},//l7
{0xb023,1,between1to60,w_rfmfm1,0x8,R_XULIANGZHOUQI},//l8
{0xb024,1,between1to60,w_rfmfm1,0x9,R_HUACHA},//l9
{0xb026,4,mmddhhmmor99,w_rfmfm1,0x10,R_FREEZE_TIME},//l10
{0xb027,1,between0to1,w_rfmfm1,0x11,R_WAKE_MODE},//l11
{0xb028,1,between0to5,w_rfmfm1,0x12,R_BOUD},//l12
{0xb029,1,bcd,w_rfmfm1,0x13,R_PROGRAM_TIME},//l13
{0xb030,1,between0to4,w_rfmfm1,0x14,R_KWHMODE_F},//l14
{0xb031,1,between1or3,w_rfmfm1,0x15,R_KWHMODE_R},//l15
{0xb032,2,between0to6,w_rfmfm1,0x16,R_KVARHMODE_F},//l16
{0xb033,2,between0to6,w_rfmfm1,0x17,R_KVARHMODE_R},//l17
{0xb041,5,bcd,w_rfmfm1,0x18,R_LOSTV_CONDITION},//l18
{0xb042,1,bcd,w_rfmfm1,0x19,R_LOSTV_ACK_TIME},//l19
{0xb046,5,bcd,w_rfmfm1,0x21,R_ALLLOSTV_CONDITION},//l20
{0xb054,4,bcd,w_rfmfm1,0x22,R_OVER_KW_CONDITION},//l21
{0xb055,4,bcd,w_rfmfm1,0x23,R_OVER_KW_ABC_CONDITION},//l22
{0xb060,2,hex,w_rfmfm1,0x24,R_ALARMCONTROL_SPEEK1},//l23
{0xb061,2,hex,w_rfmfm1,0x25,R_ALARMCONTROL_GREEN1},//l24
{0xb062,2,hex,w_rfmfm1,0x26,R_ALARMCONTROL_RED1},//l25
{0xb063,5,bcd,w_rfmfm1,0x27,R_PLUSEMODE},//l26 te lie byte 5------>4byte
// changed by zhanglong ---->start
//{0xb071,4,mmddhhmm,w_rfmfm1,0x29,R_RECORD_START_TIME},//l27
//{0xb072,1,bcd,w_rfmfm1,0x30,R_RECORD_INTERVAL_1},//l28
//{0xb073,1,bcd,w_rfmfm1,0x31,R_RECORD_INTERVAL_2},// l29
//{0xb074,1,bcd,w_rfmfm1,0x32,R_RECORD_INTERVAL_3},//l30
//{0xb075,1,bcd,w_rfmfm1,0x33,R_RECORD_INTERVAL_4},//l31
//{0xb076,1,bcd,w_rfmfm1,0x34,R_RECORD_INTERVAL_5},//l32
//{0xb077,1,bcd,w_rfmfm1,0x35,R_RECORD_INTERVAL_6},//l33
// changed by zhanglong ---->end
{0xb080,16,bcd,w_rfm,0x39,R_MAIN_CUOFENG_START_1},//l34
{0xb081,16,bcd,w_rfm,0x40,R_SUB_CUOFENG_START_1},//l35
{0xb082,3,bcd,w_rfm,0x41,R_MAIN_CUOFENG_VALUE_CONDITION},//l36
{0xb083,3,bcd,w_rfm,0x42,R_SUB_CUOFENG_VALUE_CONDITION},//l37
{0xb084,6,xxnnmmddhhmm,w_rfm,0x43,R_PRICE_SWITCH},//l38
{0xb085,6,xxnnmmddhhmm,w_rfm,0x44,R_CUOFENG_SWITCH},//l39
{0xb086,6,xxnnmmddhhmm,w_rfm,0x45,R_CUOFENG_VALUE_SWITCH},//l40
{0xb090,3,bcd,w_rfmfm1,0x46,R_KW_F_MAX},//l41
{0xb091,3,bcd,w_rfmfm1,0x47,R_KW_R_MAX},//l42
{0xbd00,0,bcd,clrbd00,0x48,0},//l43
{0xbd01,0,bcd,clrbd01,0x49,0},//l44
{0xbd02,0,bcd,clrbd02,0x50,0},///45
{0xbd03,0,bcd,clrbd03,0x51,0},//l46
{0xbd04,0,bcd,clrbd04,0x52,0},//l47
{0xbd05,0,bcd,clrbd05,0x53,0},//l48
{0xbe01,0,bcd,clrbe01,0x54,0},//l49
{0xc001,2,nnxx,w_rfmfm1,0x55,R_WORKOFFDAY},//l50
{0xc01f,36,hhmmnn,w_rfmfm1,0x56,R_PRICE_NO1_1},//l51
{0xc02f,36,hhmmnn,w_rfmfm1,0x57,R_PRICE_NO2_1},//l52
{0xc03f,36,hhmmnn,w_rfmfm1,0x58,R_PRICE_NO3_1},//l53
{0xc04f,36,hhmmnn,w_rfmfm1,0x59,R_PRICE_NO4_1},//l54
{0xc05f,36,hhmmnn,w_rfmfm1,0x60,R_PRICE_NO5_1},//l55
{0xc0df,36,mmddnn,w_rfmfm1,0x61,R_ONUS_1},//l56
{0xc11f,45,mmddnn,w_rfmfm1,0x62,R_HOLIDAY1},//l57
{0xc12f,45,mmddnn,w_rfmfm1,0x63,R_HOLIDAY16},//l58
{0xc210,2,bcd,w_ep1,0x64,EP1_AUTO_NUM},//l59
{0xc211,100,bcd,w_ep1,0x65,EP1_AUTO_ADDR_BLOCKADDR},//l60
{0xc212,100,bcd,w_ep1,0x65,EP1_AUTO_ADDR_BLOCKADDR+100},//l61
{0xc213,100,bcd,w_ep1,0x65,EP1_AUTO_ADDR_BLOCKADDR+200},//l62
{0xc214,100,bcd,w_ep1,0x65,EP1_AUTO_ADDR_BLOCKADDR+300},//l63
{0xc215,100,bcd,w_ep1,0x65,EP1_AUTO_ADDR_BLOCKADDR+400},//l64
{0xc220,2,bcd,w_ep1,0x66,EP1_KEY_NUM},//l65
{0xc221,100,bcd,w_ep1,0x67,EP1_KEY_ADDR_BLOCKADDR},//l66
{0xc222,100,bcd,w_ep1,0x67,EP1_KEY_ADDR_BLOCKADDR+100},//l67
{0xc223,100,bcd,w_ep1,0x67,EP1_KEY_ADDR_BLOCKADDR+200},//l68
{0xc224,100,bcd,w_ep1,0x67,EP1_KEY_ADDR_BLOCKADDR+300},//l69
{0xc225,100,bcd,w_ep1,0x67,EP1_KEY_ADDR_BLOCKADDR+400},//l70
{0xee00,2,bcd,w_eplock,0x68,EPLOCK_FACTORY_NUM},//l71
{0xee01,4,bcd,w_eplock,0x69,EPLOCK_METER_NUM},//l72
{0xee02,5,bcd,w_ep1eplock,0x70,EPLOCK_I_TYPE_IB},//l73
{0xee03,5,bcd,w_ep1eplock,0x71,EPLOCK_I_TYPE_MAX},//l74
{0xee04,5,bcd,w_ep1eplock,0x72,EPLOCK_V_TYPE},//l75
{0xee05,3,bcd,w_eplock,0x73,EPLOCK_P_JINGDU},//l76
{0xee06,3,bcd,w_eplock,0x74,EPLOCK_Q_JINGDU},//l77
{0xee07,1,bcd,w_ep1eplock,0x75,EPLOCK_METER_TYPE},//l78
{0xee08,6,bcd,w_eplock,0x76,EPLOCK_FACTORY_TIME},//l79
{0xee10,1,hex,w_eplock,0x77,EPLOCK_TYPE_INSIDE},//l80
{0xee11,20,hex,w_eplock,0x78,EPLOCK_TYPE_OUTSIDE},//l81
{0xee12,1,hex,w_eplock,0x79,EPLOCK_FUNCTION_MA},//l82
{0xee20,20,hex,w_eplock,0x80,EPLOCK_XIANLUBAN_CODE_Z},//l83
{0xee21,20,hex,w_eplock,0x81,EPLOCK_XIANLUBAN_CODE_A},//l84
{0xee22,20,hex,w_eplock,0x82,EPLOCK_XIANLUBAN_CODE_B},//l85
{0xee23,20,hex,w_eplock,0x83,EPLOCK_XIANLUBAN_CODE_C},//l86
{0xee24,20,hex,w_eplock,0x84,EPLOCK_XIANLUBAN_CODE_D},//l87
{0xee25,20,hex,w_eplock,0x85,EPLOCK_XIANLUBAN_CODE_E},//l88
{0xee26,20,hex,w_eplock,0x86,EPLOCK_XIANLUBAN_CODE_F},//l89
{0xee27,20,hex,w_eplock,0x87,EPLOCK_XIANLUBAN_CODE_G},//l90
{0xee28,20,hex,w_eplock,0x88,EPLOCK_XIANLUBAN_CODE_H},//l91
{0xee29,20,hex,w_eplock,0x89,EPLOCK_XIANLUBAN_CODE_I},//l92
{0xee30,2,hex,w_ep1eplock,0x90,EPLOCK_CUT_KWH_TIME},//l93
{0xee31,2,hex,w_ep1eplock,0x91,EPLOCK_TIMER_8025_CLOCK},//l94
{0xee40,13,hex,w_ep1eplock,0x92,EPLOCK_KWHF_FEILV_ENABLE},//l95
{0xee41,0x8,hex,w_ep1eplock,0x93,EPLOCK_KW_MUL},//l96
{0xee71,0x3,bcd,w_ep1eplock,0x94,EPLOCK_PLUS_CONSTANT},//l97
{0xee81,1,between0to1,w_rfmfm1,0x95,R_KWPLUS_MODE}//l98
};
// felv 费率,节假日,时段,负荷期,均改为RAM EEPROM 程序应改动。
unsigned char quanguo_canwrite_kwh()
{
if((progfunction_security!=yes)||(RSTATUS_RUN==TEST))
return 1;
else
return 0;
}
unsigned char quanguo_canwrite_price()
{
if((progfunction_security==yes)&&((RSTATUS_RUN==LOCK_90DAY)||(RSTATUS_RUN==LOCK_DEED)))
return 0;
else
return 1;
}
unsigned char v10writeok(point,len,format)
unsigned char *point,len,format;
// point -----check data addr
//len --------->check data len
// format ------>check data format
{unsigned char value;
unsigned char a[50],l,m,n,len1;
value=1;
switch(format)
{
case nnmmddww:// year month day week
if(7==*point)
*point=0;
if(0==test_week_day_month_year(*point,point+1))
value=0;
break;
case hhmmss:// hour minute second
if(2!=(testsecond(*point)+testminutehour(point+1)))
value=0;
break;
// add by zhanglong ---->start
case nnmmddwwhhmmss:
if(7==*point)
*point=0;
if(3!=test_week_day_month_year(*point,point+1)+testsecond(*(point+4))+testminutehour(point+5))
value=0;
break;
// add by zhanglong ---->end
case bcd:
if(len!=testbcdnum(point,len))
value=0;
break;
case zero:
if(*point!=0)
value=0;
if(*(point+1)!=0)
value=0;
if(*(point+2)!=0)
value=0;
break;
case ddhh:
// just use in chaobiaori
if(2!=(testhour(*point)+testday(*(point+1))))
value=0;
// add by zhanglong ---->start
if (*(point+1)>0x28)
value=0;
// add by zhanglong ---->end
if(*point==0)
if(*(point+1)==0)
value=1;//chao biao ri
break;
case between1to60:
if(0==thevalueisbcd1to60(*point))
value=0;
break;
case mmddhhmmor99:
if(0x99!=*point)
if(0==testminute(*point))
value=0;
if(0x99!=*(point+1))
if(0==testhour(*(point+1)))
value=0;
if(0x99!=*(point+2))
if(0==testday(*(point+2)))
value=0;
if(0x99!=*(point+3))
if(0==testmonth(*(point+3)))
value=0;
break;
case between0to1:
if(*point>1)
value=0;
break;
case between0to4:
if(*point>4)
value=0;
break;
case between0to5:
if(*point>5)
value=0;
break;
case between1or3:
if(*point!=1)
if(*point!=3)
value=0;
break;
case hex:
break;
case mmddhhmm:
if(0==testminutehour(point))
value=0;
if(0==testdaymonth(point+2))
value=0;
break;
case hhmm:
if(0==testminutehour(point))
value=0;
break;
case xxnnmmddhhmm:
for(l=0;l<5;l++)
a[l+1]=*(point+l);
a[0]=0;
if(0==testsecond_minute_hour_day_month_year(&a[0],&a[3]))
value=0;
if(*(point+5)>3)
value=0;
break;
case nnxx:// gong xiu ri
if(*(point+1)>5)
value=0;
if(*(point+1)==0)
value=0;
//add by zhanglong ---->start
// gongxiuri xiugai
//if((*point)>0x7f)
// value=0;
// add by zhanglong ---->end
break;
case hhmmnn:
//price
for(l=0;l<36;l++)
a[l]=4;
len1=0;
for(l=0;l<12;l++)
{a[3*l]=*(point+3*l+1);// minute
a[3*l+1]=*(point+3*l+2);// hour
a[3*l+2]=*(point+3*l);// price=1,2,3,4
m=1;
if(a[3*l+2]==0)// price==kong
{
for(n=3*l+2;n<36;n++)
if(*(point+n)!=0)
m=0;
if(a[3*l]!=0)
m=0;
if(a[3*l+1]!=0)
m=0;
if(a[3*l]==0)
{
if(a[3*l+1]==0)
a[3*l+2]=4;//kong
}
}
else
{
//if(2!=(testminute(a[3*l])+testhour(a[3*l+1])))
if(0==testminutehour(&a[3*l]))
m=0;
if(a[3*l+2]>4)
m=0;
a[3*l+2]=a[3*l+2]-1;// price=1,2,3,4---->0,1,2,3
len1=len1+1;
}
if(0==m)
value=0;
}
if((len1==0)||(len1>12))
len1=1;
if(1==value)
if(0==set_price_ok(len1,&a[0]))
value=0;
if(1==value)
for(l=0;l<36;l++)
*(point+l)=a[l];
break;
case mmddnn:
//price
for(l=0;l<(len/3);l++)
{a[3*l]=*(point+3*l+1);
a[3*l+1]=*(point+3*l+2);
a[3*l+2]=*(point+3*l);
m=1;
if(a[3*l]==0)
{
if(a[3*l+1]!=0)
m=0;
if(a[3*l+2]!=0)
m=0;
}
else
{//if(2!=(testday(a[3*l])+testmonth(a[3*l+1]))) m=0;
if(0==testdaymonth(&a[3*l]))
m=0;
if(a[3*l+2]>5)
m=0; //l4
}
if(0==m)
value=0;
}
if(len==36)
if(0==set_fuhe_ok(12,&a[0]))
value=0;
if(1==value)
for(l=0;l<len;l++)
*(point+l)=a[l];
break;
case between0to6:// kvarh mode
if(*point>6)
value=0;
if(*(point+1)!=1)
value=0;
break;
default:
value=0;
}
return value;
}
extern send_zuzhen_use(unsigned char a);
extern void set_buffer_first();
// fa song zu zen write ok 写命令正常应答帧aaaaaaaaaaaaaaaa
send_write_ok_v10()
{unsigned char a;
set_buffer_first();
*(rbuffer+9+2)=0x85;
*(rbuffer+10+2)=0x00;
*(rbuffer+11+2)=0x00;
for(a=3;a<11+2;a++)
*(rbuffer+11+2)=*(rbuffer+11+2)+*(rbuffer+a);
*(rbuffer+12+2)=0x16;
send_from_tongdao(13+2);
}
//extern send_from_tongdao(unsigned char len);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -