2025-04-30 16:24:29 +08:00

130 lines
4.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/****************************************************************************/
/* 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 */