{
INT16U afn; /*功能码 */
INT16U point; /*测量点 */
INT16U id_len; /*源数据长度 */
const INT16U *id_buff; /*源数据缓冲区,主要是传递ID号用,其他数据传递请勿用 */
const INT8U *pSource; /*主要是参数查询,需要传递的一些数据*/
INT16U dlen; /*目的数据长度 */
INT8U *dbuff; /*目的数据缓冲区 */
}InterfaceStruct;
parestuct.afn = AFN_SETPARA;
parestuct.point = 0;
parestuct.id_buff = &DT;
parestuct.id_len = 1;
parestuct.dlen = NETTRXMAXBYTES; // RAM_BACKUP_PARA
/*指向下一个数据单元的数据区 */
parestuct.dbuff = (p+offset_frame);
len = GWPara_function(&parestuct);
INT16U GWPara_function(InterfaceStruct *pdata)
{
INT16S postion;
INT16U tmp_len = 0;
INT16U tmpID;
AgreementTableStruct tmpstruct;
/*ID表格 */
assert_param(0!=pdata);
/*如果是规约的则转化ID,其他命令不需要转化 */
if((AFN_SETPARA==pdata->afn)||(AFN_INQUIREPARA==pdata->afn))
tmpID=TurnId(*pdata->id_buff);
else
tmpID = *pdata->id_buff;
postion = FindParaIDPostion(tmpID);
。。。。。。
tmp_len = GWPara_Arrayfunction[postion].ParaFuncRead(&tmpstruct);
。。。。。。
}
static __NewParaStruct GWPara_Arrayfunction[]=
{
{F1 ,TerminalPara_Function_F1 }
,{F2 ,TerminalPara_Function_F2 }
,{F3 ,TerminalPara_Function_F3 }
,{F4 ,TerminalPara_Function_F4 }
,{F5 ,TerminalPara_Function_F5}
,{F6 ,TerminalPara_Function_F6 }
,{F7 ,TerminalPara_Function_F7 }
,{F8 ,TerminalPara_Function_F8 }
,{F9 ,TerminalPara_Function_F9 }
,{F10 ,TerminalPara_Function_F10 }
,{F11 ,TerminalPara_Function_F11 }
,{F12 ,TerminalPara_Function_F12 }
,{F13 ,TerminalPara_Function_F13 }
,{F14 ,TerminalPara_Function_F14 }
,{F15 ,TerminalPara_Function_F15 }
,{F16 ,TerminalPara_Function_F16 }
,{F17 ,TerminalPara_Function_F17 }
,{F18 ,TerminalPara_Function_F18 }
,{F19 ,TerminalPara_Function_F19 }
,{F20 ,TerminalPara_Function_F20 }
,{F21 ,TerminalPara_Function_F21 }
,{F22 ,TerminalPara_Function_F22 }
,{F23 ,TerminalPara_Function_F23 }
,{F25 ,TerminalPara_Function_F25 }
,{F26 ,TerminalPara_Function_F26 }
,{F27 ,TerminalPara_Function_F27 }
,{F28 ,TerminalPara_Function_F28 }
,{F29 ,TerminalPara_Function_F29 }
,{F30 ,TerminalPara_Function_F30 }
,{F31 ,TerminalPara_Function_F31 }
,{F33 ,TerminalPara_Function_F33 }
,{F34 ,TerminalPara_Function_F34 }
,{F35 ,TerminalPara_Function_F35 }
,{F36 ,TerminalPara_Function_F36 }
,{F37 ,TerminalPara_Function_F37 }
,{F38 ,TerminalPara_Function_F38 }
,{F39 ,TerminalPara_Function_F39 }
,{F41 ,TerminalPara_Function_F41 }
,{F42 ,TerminalPara_Function_F42 }
,{F43 ,TerminalPara_Function_F43 }
,{F44 ,TerminalPara_Function_F44 }
,{F45 ,TerminalPara_Function_F45 }
,{F46 ,TerminalPara_Function_F46 }
,{F47 ,TerminalPara_Function_F47 }
,{F48 ,TerminalPara_Function_F48 }
,{F49 ,TerminalPara_Function_F49 }
,{F57 ,TerminalPara_Function_F57 }
,{F58 ,TerminalPara_Function_F58 }
,{F59 ,TerminalPara_Function_F59 }
,{F60 ,TerminalPara_Function_F60 }
,{F61 ,TerminalPara_Function_F61 }
,{F65 ,TerminalPara_Function_F65 }
,{F66 ,TerminalPara_Function_F66 }
,{F67 ,TerminalPara_Function_F67 }
,{F68 ,TerminalPara_Function_F68 }
,{F73 ,TerminalPara_Function_F73 }
,{F74 ,TerminalPara_Function_F74 }
,{F75 ,TerminalPara_Function_F75 }
,{F76 ,TerminalPara_Function_F76 }
,{F81 ,TerminalPara_Function_F81 }
,{F82 ,TerminalPara_Function_F82 }
,{F83 ,TerminalPara_Function_F83}
,{F248 ,TerminalPara_Function_F248 }
};
/*自定义命令 */
#define ININ_HARD 0x01 /*硬件复位命令 */
#define DATA_RESET 0x02 /*数据复位命令*/
#define PARA_RESET_SELF 0x04 /*出厂设置*/
#define PARA_RESET 0x08 /*参数复位命令*/
#define REST_PARA_ORDER 0xBB /*参数初始化命令 */
#define METER_WRITE 0xA1 /*数据写入规约位置命令 */
#define METER_READ 0xA2 /*读取规约集合项中的命令 */
#define PARA_MAXNUMBS 83 /*规约最大标识项 */
#define NEED_CS 0xC1 /*需要cs校验 */
#define UN_CS 0xC2 /*不需要cs校验 */
#define AGREEMNETDT 8 /*一个信息类组包含8个信息类元 */
static INT16U TerminalPara_Function_F2(AgreementTableStruct *terminal_para)
{
if(F2==terminal_para->id)
{
INT32U saveaddr;
INT16U groupNums;
saveaddr = PARA_F2;
switch(terminal_para->afn)
{
case REST_PARA_ORDER:
assert_param(terminal_para->len>=PARA_F2_LEN);
terminal_para->len = PARA_F2_LEN ;
memset(terminal_para->ptmp,PRAR_NULL_DATA,PARA_F2_LEN);
AT45DB_Operation_Function(UN_CS,saveaddr,terminal_para);
return PARA_F2_LEN ;
case AFN_SETPARA:
groupNums = *(terminal_para->ptmp)&0x7f;
if((groupNums>PARA_F2_TURNADDRNUMS)||(0==groupNums))
return 0;
AT45DB_Operation_Function(NEED_CS,saveaddr,terminal_para);
break;
case AFN_INQUIREPARA:
AT45DB_Operation_Function(NEED_CS,saveaddr,terminal_para);
groupNums = *(terminal_para->ptmp)&0x7f;
if((groupNums>PARA_F2_TURNADDRNUMS)||(0==groupNums))
return 0;
break;
default:
return 0;
}
terminal_para->len = groupNums*2+1 ;
return terminal_para->len ;
}
return 0;
}
以上为国网参数类处理