|
|
/****************************************************************************/
|
|
|
/* Copyright (c) 2007,许继集团有限公司 */
|
|
|
/* All rights reserved. */
|
|
|
/* */
|
|
|
/* 模块描述: */
|
|
|
/** 对象模型定义,对象空间管理,及对象空间的操作接口
|
|
|
* @file ai_obj.h */
|
|
|
/* */
|
|
|
/* 日期 作者 注释 */
|
|
|
/* 2007/07/16 DJF 创建文件 */
|
|
|
/****************************************************************************/
|
|
|
#ifndef IEC61850_AI_OBJ_INCLUDED
|
|
|
#define IEC61850_AI_OBJ_INCLUDED
|
|
|
|
|
|
#include "glbtypes.h"
|
|
|
#include "scl.h"
|
|
|
#include "mvl_defs.h"
|
|
|
#include "mms_mp.h"
|
|
|
#include "ai_def.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
extern "C" {
|
|
|
#endif
|
|
|
|
|
|
#define AI_MAX_AA_DS_NUM 20 /**< 每个ied下最大可创建的属于AA_SPEC空间的ds个数 */
|
|
|
|
|
|
/**
|
|
|
* 61850基本对象结构定义
|
|
|
*/
|
|
|
typedef struct ai_common_obj
|
|
|
{
|
|
|
ST_CHAR name[MAX_IDENT_LEN+1];
|
|
|
ST_CHAR desc[MAX_IDENT_LEN+1];
|
|
|
AI_OBJ_TYPE type;
|
|
|
ST_INT id;
|
|
|
struct ai_common_obj *parent;
|
|
|
}AI_COMMON_OBJ;
|
|
|
|
|
|
/**
|
|
|
* 数据集结构定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AI_COMMON_OBJ cobj;
|
|
|
|
|
|
ST_INT mb_num;
|
|
|
ST_INT *mb_ids;
|
|
|
AI_OBJ_REF *mb_refs;
|
|
|
ST_BOOLEAN deletable;
|
|
|
}AI_DS_CTRL;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
ST_CHAR do_name[MAX_IDENT_LEN+1]; //do的名字,如果是嵌套do,则是do$sdo
|
|
|
ST_CHAR desc[MAX_IDENT_LEN+1]; //描述
|
|
|
}AI_DO_DESC;
|
|
|
|
|
|
/**
|
|
|
* ln结构定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AI_COMMON_OBJ cobj;
|
|
|
|
|
|
ST_INT type_id;
|
|
|
ST_VOID *data;
|
|
|
|
|
|
ST_INT sub_obj_num;
|
|
|
ST_INT *sub_ids;
|
|
|
|
|
|
ST_INT do_desc_num;
|
|
|
AI_DO_DESC *do_descs;
|
|
|
|
|
|
}AI_LN_CTRL;
|
|
|
|
|
|
/**
|
|
|
* ld结构定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AI_COMMON_OBJ cobj;
|
|
|
|
|
|
ST_INT max_num_ds;
|
|
|
ST_INT num_ds;
|
|
|
AI_DS_CTRL **ds_tbl; // 这里可能包含动态创建的ds
|
|
|
|
|
|
ST_INT max_num_ln;
|
|
|
ST_INT num_ln;
|
|
|
AI_LN_CTRL **ln_tbl;
|
|
|
}AI_LD_CTRL;
|
|
|
|
|
|
/**
|
|
|
* fco IDCTRL定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AI_FCO_SUBTYPE type; /**< 详细do或da或ln类型,如AI_LNTYPE_PTOC AI_DOTYPE_SPS AI_DATYPE_BOOLEAN等 */
|
|
|
RUNTIME_TYPE *rt;
|
|
|
AI_LN_CTRL *ln;/**< 对象所属ln */
|
|
|
}AI_FCO_IDCTRL;
|
|
|
|
|
|
/**
|
|
|
* ln IDCTRL定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AI_FCO_SUBTYPE type; //ln类型 如LLN0 LPHD PTOC等
|
|
|
AI_LN_CTRL *ln;
|
|
|
}AI_LN_IDCTRL;
|
|
|
|
|
|
/**
|
|
|
* ld IDCTRL定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AI_LD_CTRL *ld;
|
|
|
}AI_LD_IDCTRL;
|
|
|
|
|
|
/**
|
|
|
* ds IDCTRL定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AI_DS_CTRL *ds;
|
|
|
}AI_DS_IDCTRL;
|
|
|
|
|
|
/**
|
|
|
* ied IDCTRL定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
struct ai_ied_ctrl *ied;
|
|
|
}AI_IED_IDCTRL;
|
|
|
|
|
|
/**
|
|
|
* objid_ctrl定义
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AI_OBJ_TYPE obj_type; /**< 对象类型 */
|
|
|
union
|
|
|
{
|
|
|
AI_FCO_IDCTRL fco_idctrl; /**< fcn fcd fcda对象id管理 */
|
|
|
AI_DS_IDCTRL ds_idctrl; /**< 数据集的对象id管理 */
|
|
|
AI_LD_IDCTRL ld_idctrl; /**< LD的对象id管理 */
|
|
|
AI_LN_IDCTRL ln_idctrl; /**< LN的对象id管理 */
|
|
|
AI_IED_IDCTRL ied_idctrl; /**< IED的对象id管理 */
|
|
|
}u;
|
|
|
ST_VOID *user_info; /**< 应用层保存的信息 */
|
|
|
}AI_OBJ_IDCTRL;
|
|
|
|
|
|
/**
|
|
|
* ied 结构定义
|
|
|
*/
|
|
|
typedef struct ai_ied_ctrl
|
|
|
{
|
|
|
AI_COMMON_OBJ cobj;
|
|
|
|
|
|
ST_INT max_num_ld;
|
|
|
ST_INT num_ld;
|
|
|
AI_LD_CTRL **ld_tbl;
|
|
|
|
|
|
ST_INT max_aa_ds; /**< 最大面向关联的ds的个数*/
|
|
|
ST_INT num_aa_ds;
|
|
|
AI_DS_CTRL **aa_ds_tbl; /**< 保存面向关联的dataset */
|
|
|
|
|
|
ST_INT obj_num; /**< ied下的静态对象个数 */
|
|
|
ST_INT max_dyn_num; /**< 最大可创建的动态ds的个数 */
|
|
|
AI_OBJ_IDCTRL *id_ctrl; /**< 数组,大小为obj_num+max_dyn_num */
|
|
|
}AI_IED_CTRL;
|
|
|
|
|
|
/**
|
|
|
* 通过名字查找逻辑装置
|
|
|
* @param ld_name 逻辑装置名字
|
|
|
* @param ied 对象空间结构
|
|
|
*/
|
|
|
AI_LD_CTRL *ai_find_ld(ST_CHAR *ld_name, AI_IED_CTRL *ied);
|
|
|
/**
|
|
|
* 通过名字添加逻辑装置
|
|
|
* @param ld_name 逻辑装置名字
|
|
|
* @param ied 对象空间结构
|
|
|
*/
|
|
|
AI_LD_CTRL *ai_add_ld(ST_CHAR *ld_name, AI_IED_CTRL *ied);
|
|
|
/**
|
|
|
* 创建一个ln对象,并添加到ld中
|
|
|
* @param name 逻辑装置名字
|
|
|
* @param type_id 数据类型ID
|
|
|
* @param ld 逻辑装置
|
|
|
*/
|
|
|
AI_LN_CTRL *ai_add_ln(ST_CHAR *ln_name, ST_INT type_id, AI_LD_CTRL *ld);
|
|
|
/**
|
|
|
* 添加数据集
|
|
|
* @param name 数据集名称
|
|
|
* @param mb_num 成员个数
|
|
|
* @param mb_refs ds成员参引
|
|
|
* @param deletable 是否可删除
|
|
|
* @param parent 所属结构
|
|
|
*/
|
|
|
AI_DS_CTRL *ai_add_ds(ST_CHAR *ds_name, ST_INT mb_num, AI_OBJ_REF *mb_refs, ST_BOOLEAN deletable, AI_COMMON_OBJ *parent);
|
|
|
/**
|
|
|
* 删除数据集
|
|
|
* @param ds_id 数据集id
|
|
|
* @param ied 对象空间结构
|
|
|
*/
|
|
|
ST_RET ai_delete_ds(ST_INT ds_id, AI_IED_CTRL *ied);
|
|
|
/**
|
|
|
* 创建61850对象,根据传入的类型创建相应的对象,以基本对象指针的形式传出结果
|
|
|
* @param type 数据类型
|
|
|
* @param name
|
|
|
*/
|
|
|
AI_COMMON_OBJ *ai_create_obj(AI_OBJ_TYPE type, ST_CHAR *name);
|
|
|
/**
|
|
|
* 释放对象空间
|
|
|
* @param ied 对象空间结构
|
|
|
*/
|
|
|
ST_VOID ai_destroy_ied(AI_IED_CTRL *ied);
|
|
|
/**
|
|
|
* 查找数据集
|
|
|
* @param ied 对象空间结构
|
|
|
* @param ds_ref 数据集参引
|
|
|
*/
|
|
|
AI_DS_CTRL *ai_find_ds(ST_CHAR *ds_ref, AI_IED_CTRL *ied);
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
#endif /** !IEC61850_AI_MSOBJ_INCLUDED */
|