|
|
/****************************************************************************/
|
|
|
/* Copyright (c) 2007,许继集团有限公司 */
|
|
|
/* All rights reserved. */
|
|
|
/* */
|
|
|
/* 模块描述: */
|
|
|
/** 客户端站点管理模块,提供站点管理结构各属性的读写
|
|
|
* @file ac_srvmgs.h */
|
|
|
/* */
|
|
|
/* 日期 作者 注释 */
|
|
|
/* 2008/01/31 ZYZ 从ac_srvm.c中分离出来 */
|
|
|
/****************************************************************************/
|
|
|
|
|
|
#ifndef IEC61850_AC_SRVMGS_H
|
|
|
#define IEC61850_AC_SRVMGS_H
|
|
|
|
|
|
#include "glbtypes.h"
|
|
|
#include "mvl_defs.h"
|
|
|
#include "ai_obj.h"
|
|
|
#include "ac_sg.h"
|
|
|
#include "ac_reqm.h"
|
|
|
#include "mvl_acse.h"
|
|
|
#include "ac_acfg.h"
|
|
|
#include "ac_rpt.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
extern "C" {
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
|
* 通道状态枚举值
|
|
|
*/
|
|
|
typedef enum
|
|
|
{
|
|
|
CHNL_STATE_UNCONNECTED, /**< 通道未连接 */
|
|
|
CHNL_STATE_CONNECTING, /**< 通道正在连接 */
|
|
|
CHNL_STATE_CONNECTED /**< 通道已连接 */
|
|
|
}CHNL_STATE;
|
|
|
|
|
|
/**
|
|
|
* 对象空间创建状态枚举值
|
|
|
*/
|
|
|
typedef enum {
|
|
|
CRE_STATE_UNCREATED, /**< 未创建 */
|
|
|
CRE_STATE_CREATING, /**< 正在创建 */
|
|
|
CRE_STATE_CREATED, /**< 已创建 */
|
|
|
CRE_STATE_CREATERR /**< 创建出错 */
|
|
|
}CREATE_STATE;
|
|
|
|
|
|
/**
|
|
|
* 数据刷新状态枚举值
|
|
|
*/
|
|
|
typedef enum {
|
|
|
REFR_STATE_UNREFRESHED, /**< 未刷新 */
|
|
|
REFR_STATE_REFRESHING, /**< 正在刷新 */
|
|
|
REFR_STATE_REFRESHED, /**< 已刷新 */
|
|
|
REFR_STATE_REFRESHERR /**< 刷新出错 */
|
|
|
}REFRESH_STATE;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
CHNL_STATE chnl_state;
|
|
|
MVL_NET_INFO *net_info;
|
|
|
ST_CHAR dib_name[MAX_IDENT_LEN+1];
|
|
|
ST_DOUBLE next_time;
|
|
|
ST_BOOLEAN keep_con;
|
|
|
}AC_CHANNEL_CTRL;
|
|
|
|
|
|
typedef struct
|
|
|
{
|
|
|
AC_CHANNEL_CTRL chnl_a;
|
|
|
AC_CHANNEL_CTRL chnl_b;
|
|
|
AC_CHANNEL active_chnl;
|
|
|
// CONNECT_STATE con_state;
|
|
|
}AC_CONNECT_CTRL;
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 报告解析过程中使用的报告的数据集和报告的信息
|
|
|
* 应用程序在刷新对象空间后初始化
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
ST_CHAR rpt_id[MAX_IDENT_LEN+1]; /**< RPTID*/
|
|
|
AI_DS_CTRL *ds; /**< 数据集指针*/
|
|
|
RUNTIME_TYPE *rt; /**< includebit的RUNTIME_TYPE指针*/
|
|
|
ST_INT includebit_TYPEID; /**< 传送了那些成员 BIT*/
|
|
|
ST_INT old_sqnum; /**< 已经接收到的报告SQNUM*/
|
|
|
ST_INT rcb_id; /**< 报告控制块的ID*/
|
|
|
// ST_BOOLEAN enable; /**< 报告控制块使能标志*/
|
|
|
EntryID_TDEF entryID; /**< 备份的ENTRYID*/
|
|
|
ST_BOOLEAN entryid_enable; /**< 要不要判断ENTRYID*/
|
|
|
}AC_RPT_INFO;
|
|
|
|
|
|
/**
|
|
|
* 报告解析过程中使用的报告的数据集和报告的信息,解析过程中使用的临时缓存指针
|
|
|
* 应用程序在刷新对象空间后初始化
|
|
|
*/
|
|
|
typedef struct
|
|
|
{
|
|
|
AC_RPT_INFO *rpt_info; /**< RPT信息数组*/
|
|
|
ST_INT rpt_num; /**< 报告个数*/
|
|
|
ST_VOID *data; /**< 解析报告时用的临时缓存*/
|
|
|
ST_BOOLEAN init_flag; /**< 是否初始化标志*/
|
|
|
}AC_IED_RPT_CTRL;
|
|
|
/**
|
|
|
* 保存报告控制块刷新信息
|
|
|
*/
|
|
|
typedef struct ac_rcb_ref_info
|
|
|
{
|
|
|
ST_INT ld_num;
|
|
|
ST_BOOLEAN is_br;
|
|
|
ST_INT id_br;
|
|
|
ST_INT id_lln0;
|
|
|
} AC_RCB_REF_INFO;
|
|
|
/**
|
|
|
* 站点管理数据结构,一个结构实例对应一个站点
|
|
|
*/
|
|
|
typedef struct ac_server_management
|
|
|
{
|
|
|
ST_INT srv_id;
|
|
|
ST_CHAR srv_name[MAX_IDENT_LEN+1]; /**< 装置名称,由SCD配置文件解析得到 */
|
|
|
|
|
|
AI_IED_CTRL *ied;
|
|
|
CREATE_STATE cre_state; /**< 对象空间创建状态 */
|
|
|
|
|
|
|
|
|
AC_RCB_REF_INFO a_rcb_ref_info;
|
|
|
AC_RCB_REF_INFO b_rcb_ref_info;
|
|
|
REFRESH_STATE refr_state; /**< 站点数据刷新状态 */
|
|
|
|
|
|
AC_IED_SG_CTRL sg_ctrl; /**< 定值管理信息 */
|
|
|
AC_IED_RCB_INFO rcb_info; /**< 报告管理信息 */
|
|
|
AC_REQ_CTRL *req_list; /**< 异步请求链表 */
|
|
|
AC_CONNECT_CTRL con_ctrl; /**< 站点网络状态结构 */
|
|
|
AI_IED_CFG *ied_cfg; /**< ied配置 */
|
|
|
} AC_SERVER_MANAGEMENT;
|
|
|
|
|
|
/**
|
|
|
* 取得站点个数接口
|
|
|
* @return ST_INT 返回站点个数
|
|
|
*/
|
|
|
ST_INT ac_get_srvm_num();
|
|
|
|
|
|
/**
|
|
|
* 获取站点重连标志位状态,该状态在初始化时默认为TRUE
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param chnl 通道号
|
|
|
* @retval 连接标志
|
|
|
*/
|
|
|
ST_BOOLEAN ac_get_srvm_chnlKeepCon(ST_INT srv_id, AC_CHANNEL chnl);
|
|
|
/**
|
|
|
* 设置站点重连标志位状态,该状态在初始化时默认为TRUE
|
|
|
* @param srv_id 服务器ID,为-1时,认为设置所有服务器站点
|
|
|
* @param keep_con 保持连接标志,SD_TRUE,保持连接,SD_FALSE,不保持连接
|
|
|
* @param chnl 通道号
|
|
|
* @retval SD_SUCCESS 设置成功
|
|
|
* @retval SD_FAILURE 设置失败
|
|
|
*/
|
|
|
ST_RET ac_set_srvm_chnlKeepCon(ST_INT srv_id, ST_BOOLEAN keep_con, AC_CHANNEL chnl);
|
|
|
|
|
|
/**
|
|
|
* 通过装置ID获取一个站点
|
|
|
* @param srv_id 服务器ID
|
|
|
* @retval AC_SERVER_MANAGEMENT* 指向服务器结构的指针,失败返回NULL
|
|
|
*/
|
|
|
AC_SERVER_MANAGEMENT * ac_get_srvm_node(ST_INT srv_id);
|
|
|
|
|
|
/**
|
|
|
* 通过服务器ID获取站点的对象空间创建状态
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param create_state 保存返回状态值的指针
|
|
|
* @retval SD_SUCCESS 获取成功
|
|
|
* @retval SD_FAILURE 获取失败
|
|
|
*/
|
|
|
ST_RET ac_get_srvm_createState(ST_INT srv_id, CREATE_STATE *create_state);
|
|
|
|
|
|
/**
|
|
|
* 设置站点的对象空间创建状态
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param create_state 状态值
|
|
|
* @retval SD_SUCCESS 设置成功
|
|
|
* @retval SD_FAILURE 设置失败
|
|
|
*/
|
|
|
ST_RET ac_set_srvm_createState(ST_INT srv_id, CREATE_STATE create_state);
|
|
|
|
|
|
/**
|
|
|
* 通过服务器ID获取站点的数据刷新状态
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param refr_state 保存返回状态值的指针
|
|
|
* @retval SD_SUCCESS 获取成功
|
|
|
* @retval SD_FAILURE 获取失败
|
|
|
*/
|
|
|
ST_RET ac_get_srvm_refrState(ST_INT srv_id, REFRESH_STATE *refr_state);
|
|
|
|
|
|
/**
|
|
|
* 设置站点的数据刷新状态
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param refr_state 状态值
|
|
|
* @retval SD_SUCCESS 设置成功
|
|
|
* @retval SD_FAILURE 设置失败
|
|
|
*/
|
|
|
ST_RET ac_set_srvm_refrState(ST_INT srv_id, REFRESH_STATE refr_state);
|
|
|
|
|
|
/**
|
|
|
* 通过站点的ID获得站点的名称
|
|
|
* @param srv_id 服务器ID
|
|
|
* @retval ST_CHAR * 成功返回站点的名称,失败返回NULL
|
|
|
*/
|
|
|
ST_CHAR * ac_get_srvm_name(ST_INT srv_id);
|
|
|
|
|
|
/**
|
|
|
* 通过站点的名称获得站点的ID,如果没有找到,返回-1
|
|
|
* @param srv_name 服务器名称
|
|
|
* @retval ST_INT 成功返回站点的ID,失败返回-1
|
|
|
*/
|
|
|
ST_INT ac_get_srvm_srvId(ST_CHAR *srv_name);
|
|
|
|
|
|
/**
|
|
|
* 通过站点的ID获得装置对应的客户端对象空间IED对象
|
|
|
* @param srv_id 服务器ID
|
|
|
* @retval AI_IED_CTRL * 成功返回装置对应的客户端对象空间ied对象,失败返回NULL
|
|
|
*/
|
|
|
AI_IED_CTRL * ac_get_srvm_ied(ST_INT srv_id);
|
|
|
|
|
|
/**
|
|
|
* 通过站点的ID设置装置对应的客户端对象空间ied对象
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param ied 服务器对象空间结构
|
|
|
* @retval SD_SUCCESS, SD_FAILURE
|
|
|
*/
|
|
|
ST_RET ac_set_srvm_ied(ST_INT srv_id, AI_IED_CTRL *ied);
|
|
|
/**
|
|
|
* 通过站点的ID获得和装置连接的主通道的net_info
|
|
|
* @param srv_id 服务器ID
|
|
|
* @retval MVL_NET_INFO * 返回和装置连接的通道MVL_NET_INFO对象,断开时返回NULL
|
|
|
*/
|
|
|
MVL_NET_INFO * ac_get_srvm_netInfo(ST_INT srv_id);
|
|
|
/**
|
|
|
* 通过站点的ID获得对应通道的net_info
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param chnl 通道号
|
|
|
* @retval MVL_NET_INFO * 返回和装置连接的通道MVL_NET_INFO对象,断开时返回NULL
|
|
|
*/
|
|
|
MVL_NET_INFO * ac_get_srvm_chnlNetInfo(ST_INT srv_id, AC_CHANNEL chnl);
|
|
|
|
|
|
/**
|
|
|
* 设置装置的通道chnl的net_info
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param net_info 装置连接通道
|
|
|
* @param chnl 通道号
|
|
|
* @retval SD_SUCCESS 设置成功
|
|
|
* @retval SD_FAILURE 设置失败
|
|
|
*/
|
|
|
ST_RET ac_set_srvm_chnlNetInfo(ST_INT srv_id, MVL_NET_INFO *net_info, AC_CHANNEL chnl);
|
|
|
|
|
|
/**
|
|
|
* 通过srv_id获取定值管理信息结构的地址
|
|
|
* @param srv_id 服务器ID
|
|
|
* @retval AC_IED_SG_CTRL* 定值管理信息结构的指针,失败返回NULL
|
|
|
*/
|
|
|
AC_IED_SG_CTRL *ac_get_srvm_sgCtrl(ST_INT srv_id);
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 通过ID获取报告相关的信息 。
|
|
|
* @param srv_id SRVID
|
|
|
* @return AC_IED_RCB_INFO 报告块的指针
|
|
|
*/
|
|
|
AC_IED_RCB_INFO *ac_get_srvm_iedRcbInfo(ST_INT srv_id);
|
|
|
|
|
|
/**
|
|
|
* 读取通道状态
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param chnla_state 保存返回的A通道状态
|
|
|
* @param chnlb_state 保存返回的A通道状态
|
|
|
* @param active_chnl 活动通道
|
|
|
* @retval SD_SUCCESS 成功
|
|
|
* @retval SD_FAILURE 失败
|
|
|
*/
|
|
|
ST_RET ac_get_srvm_chnlState(ST_INT srv_id, CHNL_STATE *chnla_state, CHNL_STATE *chnlb_state, AC_CHANNEL *active_chnl);
|
|
|
|
|
|
/**
|
|
|
* 设置某一通道状态,chnl为通道号state为通道状态
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param state 通道状态
|
|
|
* @param chnl 通道号
|
|
|
* @retval SD_SUCCESS 成功
|
|
|
* @retval SD_FAILURE 失败
|
|
|
*/
|
|
|
ST_RET ac_set_srvm_chnlState(ST_INT srv_id, CHNL_STATE state, AC_CHANNEL chnl);
|
|
|
|
|
|
/**
|
|
|
* 设置主通道为chnl
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param chnl 通道号
|
|
|
* @retval SD_SUCCESS 成功
|
|
|
* @retval SD_FAILURE 失败
|
|
|
*/
|
|
|
ST_RET ac_set_srvm_activeChnl(ST_INT srv_id, AC_CHANNEL chnl);
|
|
|
|
|
|
/**
|
|
|
* 获取当前主通道
|
|
|
* @param srv_id 服务器ID
|
|
|
* @retval 当前主通道
|
|
|
*/
|
|
|
AC_CHANNEL ac_get_srvm_activeChnl(ST_INT srv_id);
|
|
|
|
|
|
/**
|
|
|
* 设置通道重连时间
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param chnl 通道号
|
|
|
* @param next_time 重连时间
|
|
|
* @retval SD_SUCCESS 成功
|
|
|
* @retval SD_FAILURE 失败
|
|
|
*/
|
|
|
ST_RET ac_set_srvm_chnlNextTime(ST_INT srv_id, AC_CHANNEL chnl, ST_DOUBLE next_time);
|
|
|
|
|
|
/**
|
|
|
* 获取特殊iedconfig
|
|
|
* @param srv_id 服务器ID
|
|
|
* @retval iedconfig
|
|
|
*/
|
|
|
AI_IED_CFG *ac_get_srvm_iedConfig(ST_INT srv_id);
|
|
|
/**
|
|
|
* 获取通道chnlDibName
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param chnl 通道号
|
|
|
* @retval chnlDibName
|
|
|
*/
|
|
|
ST_CHAR *ac_get_srvm_chnlDibName(ST_INT srv_id, AC_CHANNEL chnl);
|
|
|
|
|
|
/**
|
|
|
* 一次取出一个完整的状态,防止在取的过程中被其他线程修改剩下未取到的状态值
|
|
|
* @param srv_id 服务器ID
|
|
|
* @param con_ctrl 网络信息结构
|
|
|
* @param cre_state 保存对象空间创建状态指针
|
|
|
* @param refr_state 保存数据刷新状态指针
|
|
|
* @retval SD_SUCCESS 取值成功
|
|
|
* @retval SD_FAILURE 取值失败
|
|
|
*/
|
|
|
ST_RET ac_get_srvm_wholeState(ST_INT srv_id,
|
|
|
AC_CONNECT_CTRL *con_ctrl,
|
|
|
CREATE_STATE *cre_state,
|
|
|
REFRESH_STATE *refr_state);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
}
|
|
|
#endif
|
|
|
#endif
|