/****************************************************************************/ /* Copyright (c) 2008,许继集团有限公司 */ /* All rights reserved. */ /* */ /* 模块描述: */ /** damap映射生成及获取接口 * @file as_damap.h */ /* */ /* 日期 作者 注释 */ /* 2008/09/22 DJF 创建文件 */ /****************************************************************************/ #ifndef AS_DAMAP_INCLUDED #define AS_DAMAP_INCLUDED //#include "scl.h" /* need SCL_INFO */ #include "as_def.h" #include "mms_vvar.h" #ifdef __cplusplus extern "C" { #endif #define NUMHAR 10 /* 谐波值个数 */ #define MAX_NEST_LEVEL 50 //added djf 20090807 typedef struct { DBL_LNK l; //MVL_VAR_ASSOC * var; ST_UINT32 index; //改为存储从userinfo中读取的偏移量 ST_BOOLEAN gse_trged;//是否已经触发过goose }MVL_VAR_LIST; typedef struct { ST_CHAR da_ref [MAX_IDENT_LEN + 1]; /* 简单da的完整参引,如:E1Q1SB1Ld1/LN$ST$Mod$stVal*/ ST_CHAR usr_data_info [MAX_IDENT_LEN + 1]; ST_VOID * dataPtr; RUNTIME_TYPE * dataType; /* data type of this leaf */ AS_DA_TYPE type; /*数据类型*/ ST_VOID * do_map; /* 此da所属的do的map结构,使用时强制类型转换为as_do_map*/ MVL_VAR_LIST * var_list;//此data_map所对应的数据集的成员 added djf 20090807 ST_VOID * last_data;//保存历史数据,便于数据比较 added djf 20090807 } AS_DA_MAP; /************************************************************************/ /* TRACK_INFO structure */ /************************************************************************/ typedef struct { ST_UINT primdata_num; /* # of primitive data elements in variable */ /* must account for arrays of structs. */ ST_INT data_offset; ST_INT str_nest; /* current struct nest level */ /* rt_type of start of structs containing this leaf. First entry is */ /* top level struct, next is lower level struct, etc. */ RUNTIME_TYPE * rt_type_str_start [MAX_NEST_LEVEL]; ST_INT data_offset_str_start [MAX_NEST_LEVEL]; } TRACK_INFO; /** * 释放vmd中maphead中所有da_map,do_map的内存 */ ST_VOID as_datamap_cfg_destroy (); /** * 计算文件中damap行数 */ ST_INT as_da_map_count ( ST_CHAR * in_filename ); typedef ST_VOID (* U_USERMAP_CALLBACK )( AS_DA_MAP * map_entry ); extern U_USERMAP_CALLBACK u_datamap_user_leaf; /** * 创建datamap,如果datamap_file==NULL,则自动为每个da创建datamap * @param da_map_file damap映射文件名称,带路径 * @param ied_name ied名称 * @return 成功或者失败 */ ST_RET as_create_da_map( ST_CHAR * da_map_file, ST_CHAR * ied_name ); /** * 针对无datamap.cfg文件的应用,把user_map拷贝到da_map->usr_data_info中(在ai_init_envir之后调用) * @param obj_ref 61850对象参引:ld/ln$fc$do$da * @param user_map 用户映射字符串 * @return 成功或者失败 */ ST_RET as_reconfig_datamap( ST_CHAR * obj_ref, ST_CHAR * user_map ); /** * 根据参引找到da的map_entry * @param ref da参引:ld/ln$fc$do$da * @return AS_DA_MAP指针或者NULL */ AS_DA_MAP * as_find_da_map_entry( ST_CHAR * ref ); /** * 获得da或do的指针数组,damap_num_out为da或da下的map个数 * @param dx_ref da或者do的leafname。如:ST$DO$DA * @param ln_ctrl * @param damap_num_out 返回do或da中damap的个数,如果是da返回一定为1 * @return AS_DA_MAP ** damap的数组指针,指针指向返回的指针数组的第一个,改指针数组成员的值可能为NULL */ //AS_DA_MAP ** as_get_damaps_dxref( ST_CHAR * dx_ref, // MVL_VAR_ASSOC * ln_ctrl, // ST_INT * damap_num_out ); /** * 获取da在ln中所有简单da的偏移,用于定位ln中的damap * @return 成功或者失败 */ //ST_RET as_get_map_info_daref( ST_CHAR * da_ref, //da的leafname。如:ST$DO$DA // MVL_VAR_ASSOC * ln_ctrl, //ln结构 // ST_INT * fst_offset, //返回的da在ln下的偏移 // RUNTIME_TYPE ** dx_rt_out );//返回的da的rt /** * 计算简单rt个数 */ ST_VOID as_loop_count_prim ( RUNTIME_TYPE * rt_first, ST_INT rt_num, TRACK_INFO * track_info ); #ifdef __cplusplus } #endif #endif /* !AS_DAMAP_INCLUDED */