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.

260 lines
8.1 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. */
/* */
/* 模块描述: */
/** 对象id管理
* @file ai_objid.h */
/* */
/* 日期 作者 注释 */
/* 2007/07/18 TYJ 创建文件 */
/****************************************************************************/
#ifndef IEC61850_AI_OBJID_INCLUDE
#define IEC61850_AI_OBJID_INCLUDE
#include "sysincs.h"
#include "glbtypes.h"
#include "mvl_defs.h"
#include "ai_def.h"
#include "ai_obj.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
*获取ied下所有对象的个数包括ld ln ds fco
*@param ied ied对象
*@return 对象的个数
*/
ST_INT ai_get_ied_obj_num(AI_IED_CTRL *ied);
/**
* 获取对象空间中所有ld的个数
* @param ied 对象空间结构
* @return 成功返回对象的个数, 失败返回0
* @author guoqiangm@xjgc.com
*/
ST_INT ai_get_ld_num(AI_IED_CTRL *ied);
/**
* 获取对象空间中所有ln的个数
* @param ied 对象空间结构
* @return 成功返回对象的个数, 失败返回0
* @author guoqiangm@xjgc.com
*/
ST_INT ai_get_ln_num(AI_IED_CTRL *ied);
/**
* 获取对象空间中所有ds的个数
* @param ied 对象空间结构
* @return 成功返回对象的个数, 失败返回0
* @author guoqiangm@xjgc.com
*/
ST_INT ai_get_ds_num(AI_IED_CTRL *ied);
/**
* 通过对象的参引和数据类型获得其对象id
* @param ied 对象空间的结构指针
* @param obj_ref 对象的参引
* @return 成功返回对象id, 失败返回-1
*/
AI_OBJ_ID ai_obj_ref_to_id(AI_IED_CTRL *ied, ST_CHAR *obj_ref);
/**
* 通过对象id获得对象的参引.
* 传出的对象参引的格式如:
* E1Q1SB1C1、E1Q1SB1C1/LLN0$ST$Mod、E1Q1SB1C1/LLN0$myDsName、@myDsName
* @param ied 对象空间的结构指针
* @param obj_id 对象id
* @param obj_ref 对象的参引
* @return 成功返回SD_SUCCESS, 失败返回SD_FAILURE
*/
ST_RET ai_obj_id_to_ref(AI_IED_CTRL *ied, AI_OBJ_ID obj_id, ST_CHAR *obj_ref);
/**
* 通过对象id获得对象的名称结构
* @param vmd 对象空间的结构指针
* @param obj_id 对象id
* @param obj_name 对象的名称结构调用者申请内存后传入obj_name结构中的数据内存由接口申请
* @return 成功返回SD_SUCCESS, 失败返回SD_FAILURE
*/
ST_RET ai_obj_id_to_objName(AI_IED_CTRL *ied, AI_OBJ_ID obj_id, OBJECT_NAME *obj_name);
/**
* 通过对象的参引获得对象的名称结构
* @param vmd 对象空间的结构指针
* @param obj_ref 对象的参引
* @param obj_name 对象的名称结构调用者申请内存后传入obj_name结构中的数据内存由接口申请
* @return 成功返回SD_SUCCESS, 失败返回SD_FAILURE
*/
ST_RET ai_obj_ref_to_objName(ST_CHAR *obj_ref, OBJECT_NAME *obj_name);
/**
* 通过对象的名称结构获得对象的参引.
* 传出的对象参引的格式如:
* E1Q1SB1C1、E1Q1SB1C1/LLN0$ST$Mod、E1Q1SB1C1/LLN0$myDsName、@myDsName
* @param obj_name 对象的名称结构
* @param obj_ref 对象的参引
* @return 成功返回SD_SUCCESS, 失败返回SD_FAILURE
*/
ST_RET ai_objName_to_ref(OBJECT_NAME *obj_name, ST_CHAR *obj_ref);
/**
* 释放对象名称结构obj name的内存.
* 释放obj name中的time_id所申请的内存domain_id指针没有申请内存它指向dom对象的name属性
* @param obj_name 对象的名称结构
* @return ST_VOID
*/
ST_VOID ai_cleanup_objName(OBJECT_NAME *obj_name);
/**
* 通过对象的id获得对象的管理结构
* @param ied 对象空间结构
* @param obj_id 对象id
* @return 成功返回对象管理结构指针, 失败返回NULL
*/
AI_OBJ_IDCTRL *ai_get_obj_id_ctrl(AI_IED_CTRL *ied, AI_OBJ_ID obj_id);
/**
* 通过对象的id获得对象的数据结构支持ied ld ln ds四种类型的对象
* @param ied 对象空间结构
* @param id 对象id
* @return 成功返回对象结构指针, 失败返回NULL
*/
AI_COMMON_OBJ *ai_obj_id_to_cobj(AI_IED_CTRL *ied, AI_OBJ_ID id);
/**
* 通过obj_id获取该对象下的基本数据类型的对象的个数
* @param ied 对象空间
* @param obj_id 对象id可以为ld、LN、FCO的id
* @return ST_INT 返回基本类型数据数目
*/
ST_INT ai_get_prim_val_num(AI_IED_CTRL *ied, AI_OBJ_ID obj_id);
/**
* 通过obj_id获取该对象下的基本类型数据的id数组
* @param ied 对象空间
* @param obj_id 对象id,可以为ld、LN、D0、DA的id
* @param prim_obj_num 保存返回的基本类型数据数目
* @return AI_OBJ_ID 基本类型数据的id数组
*/
AI_OBJ_ID *ai_get_prim_sub_ids(AI_IED_CTRL *ied, AI_OBJ_ID obj_id, ST_INT *prim_obj_num);
/**
* 获取runtime type结构中数据成员的个数
* @param rt runtime type数据类型结构
* @return 成功返回rt中数据成员个数, 失败返回0
*/
ST_INT ai_get_rt_num(RUNTIME_TYPE *rt);
/**
* 通过对象id获得对象的名称.
* @param ied 对象空间的结构指针
* @param obj_id 对象id
* @param name 传出参数,对象的名称,用户需事先分配好存放名称的空间
* @return 成功返回SD_SUCCESS, 失败返回SD_FAILURE
* @author guoqiangm@xjgc.com
*/
ST_RET ai_obj_id_to_name(AI_IED_CTRL *ied, AI_OBJ_ID obj_id, ST_CHAR *name);
/**
* 创建ied的idctrl控制机制.
* 给每个对象分配一个id号和对应的idctrl结构保存到ied的id_ctrl数组中
* 以对象的id为下标即可在id ctrl数组中取到对象的idctrl结构
*/
ST_RET ai_create_ied_idctrl(AI_IED_CTRL *ied);
/**
* 在61850对象指针数组里查找对象.
* @param obj_tbl 对象指针数组,用户调用时将特定对象指针数组强制类型转换成基本对象指针数组类型
* @param obj_num 数组中的对象指针的个数
* @param obj_name 要查找的对象的名字
* @return 找到的对象指针或NULL
*/
AI_COMMON_OBJ *ai_cobj_find(AI_COMMON_OBJ **obj_tbl, ST_INT obj_num, ST_CHAR *obj_name);
/**
* 查找对象的某个子对象返回子对象的id
* @param ied ied对象
* @param obj_id 在此对象中查找支持ied ld ln fco
* @param child_name 子对象的名字
* @return 返回子对象的id或-1
*/
AI_OBJ_ID ai_find_obj_child(AI_IED_CTRL *ied, AI_OBJ_ID obj_id, ST_CHAR *child_name);
/**
* 释放AI_PRIM_VAL结构成员DATA所占资源。
* @param obj_val 对象值内存指针
* @return ST_VOID
*/
ST_VOID ac_cleanup_objVals_data(AI_OBJ_VAL *obj_val);
/**
* 获取对象类型
* 先找到Obj_id对应的idctrl,然后返回idctrl中的类型失败时返回OBJECT_TYPE_UNKNOWN
*/
AI_OBJ_TYPE ai_get_obj_type(AI_IED_CTRL *ied, AI_OBJ_ID obj_id);
/**
* 获取ln对象的lntype失败时返回AI_LNTYPE_UNKNOWN
*/
AI_FCO_SUBTYPE ai_get_fco_subtype(AI_IED_CTRL *ied, AI_OBJ_ID fco_id);
/**
* 查找对象的父对象返回父对象的id
* @param ied ied对象
* @param obj_id 对象的id
* @return 返回父对象的id或-1
*/
AI_OBJ_ID ai_find_obj_parent(AI_IED_CTRL *ied, AI_OBJ_ID obj_id);
//对象空间中保存desc
ST_RET ai_create_iedDesc(AI_IED_CTRL *ied, SCL_INFO *scl_info);
/**
* 通过obj_id获得obj的desc, 支持ld、ln、do对象当取ld、ln的desc时传入的do_name应为NULL
* 当取do的desc时传入ln的obj_id和do_name如果取的是嵌套子do则do_name为父do与子do的名字的字符串如do1$sdo1
* @param ied ied对象
* @param obj_id 对象的id
* @return desc字符串地址
*/
const ST_CHAR* ai_get_obj_desc(AI_IED_CTRL *ied, ST_INT obj_id, ST_CHAR *do_name);
AI_OBJ_ID ac_get_next_rcbInst_id(AI_IED_CTRL *ied, AI_OBJ_ID rcb_id);
/**
* 查找da对象的父do对象
* @param ied ied对象
* @param obj_id da对象的id如果传入的不是da则返回-1
* @return 返回父do对象的id或-1
*/
AI_OBJ_ID ai_find_da_parentDo(AI_IED_CTRL *ied, AI_OBJ_ID da_id);
/**
* 通过obj_id获得obj的dU
* 当取do的desc时传入ln的obj_id和do_name如果取的是嵌套子do则do_name为父do与子do的名字的字符串如do1$sdo1
* @param ied ied对象
* @param ln_id lnid
* @param do_name do名字
* @return dudu的值
*/
const ST_CHAR* ai_get_obj_du_val(AI_IED_CTRL *ied, ST_INT ln_id, ST_CHAR *do_name);
#ifdef __cplusplus
}
#endif
#endif /** IEC61850_AI_OBJID_INCLUDE */