You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
5.0 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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