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