130 lines
4.7 KiB
C
130 lines
4.7 KiB
C
/****************************************************************************/
|
||
/* 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 */
|