国网数据函数2

来源:互联网 发布:人工智能 书 编辑:程序博客网 时间:2024/05/20 18:15
typedef struct InterfaceStruct_
{
    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;
}

以上为国网参数类处理

原创粉丝点击