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.

169 lines
5.0 KiB
C

1 year ago
/****************************************************************************/
/* Copyright (c) 2007,<2C><><EFBFBD>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>˾ */
/* All rights reserved. */
/* */
/* ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/** <20><EFBFBD><E1B9A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD>Ľӿ<C4BD>
* @file ac_rpt.c
* @author yh huiy@xjgc.com */
/* */
/* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ע<><D7A2> */
/* 2009/04/07 DJF <20>ع<EFBFBD><D8B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
/* 2007/07/16 YH <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD> */
/****************************************************************************/
#ifndef IEC61850_RPT2_INCLUDED
#define IEC61850_RPT2_INCLUDED
#include "glbtypes.h"
#include "ai_obj.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪӦ<EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱͬʱ<EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD>ߵ<EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪDCHG<EFBFBD><EFBFBD>QCHG<EFBFBD><EFBFBD>DUPD<EFBFBD><EFBFBD>GI<EFBFBD><EFBFBD>INTGPD
*/
typedef enum
{
RPT_REASON_UNKNOWN,
RPT_REASON_DCHG,
RPT_REASON_QCHG,
RPT_REASON_DUPD,
RPT_REASON_INTGPD,
RPT_REASON_GI
} AC_REPORT_REASON;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><EFBFBD>trgopֵһ<EFBFBD>£<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊһ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
*/
#define TRG_RESERVED 0x80
#define TRG_DCHG 0x40
#define TRG_QCHG 0x20
#define TRG_DUPD 0x10
#define TRG_INTGRD 0x08
#define TRG_GI 0x04
#define TRG_UNKNOWN 0x02
/**
* OPTFLDSֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
#define OPT_RESERVED 0x80
#define OPT_SEQNUM 0x40
#define OPT_REPORT_TIME_STAMP 0x20
#define OPT_REASON_FOR_INCLUSION 0x10
#define OPT_DATA_SET_NAME 0x08
#define OPT_DATA_REFERENCE 0x04
#define OPT_BUFFER_OVERFLOW 0x02
#define OPT_ENTRYID 0x01
#define OPT_CONF_REVISION 0x8000
#define OPT_SEGMENTATION 0x4000
#define OPT_UNKNOWN 0x2000
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD>е<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>Щ<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
*/
typedef struct
{
ST_CHAR *data_ptr; /**< ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>е<EFBFBD>ֵ */
ST_CHAR *data; /**< <20><><EFBFBD>Ŵӱ<C5B4><D3B1><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ */
ST_INT data_size; /**< ֵռ<D6B5>еĿռ<C4BF><D5BC><EFBFBD>С */
ST_TIMESTAMP *t; /**< ָ<><D6B8>data<74>е<EFBFBD>t */
RUNTIME_TYPE *rt; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rt<72><74><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD> */
AI_OBJ_VAL obj_val; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>objVal<61><6C><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD>ÿ<EFBFBD><C3BF>prim<69><6D>ָ<EFBFBD><D6B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ֵ */
}AC_RPT_ENTRYDATA;
//<2F><><EFBFBD><EFBFBD>entrydata<74><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RPT_ENTRYDATA_BUF_NUM 50
typedef struct
{
AI_OBJ_ID obj_id;
ST_TIMESTAMP t;
}AC_ENTRYDATA_BUF_UNIT;
typedef struct
{
AC_ENTRYDATA_BUF_UNIT units[RPT_ENTRYDATA_BUF_NUM];
ST_INT index;
}AC_ENTRYDATA_BUF;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
* Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*/
typedef struct
{
ST_BOOLEAN init_ok; /**< <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־ */
ST_CHAR rptID[MAX_IDENT_LEN+1]; /**< RPTID*/
ST_INT rcb_id; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>ID*/
ST_CHAR dsRef[MAX_REFERENCE_LENGTH + 1]; /**< <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD> */
AI_DS_CTRL *ds; /**< <20><><EFBFBD>ݼ<EFBFBD>ָ<EFBFBD><D6B8>*/
ST_INT entry_num; /**< <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
AC_RPT_ENTRYDATA *entry_datas; /**< <20><><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ա<EFBFBD><D4B1>Ϣ*/
ST_UCHAR *includebit; /**< <20><><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA3AC>ʼ<EFBFBD><CABC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> */
RUNTIME_TYPE *includebit_rt; /**< includebit<69><74>RUNTIME_TYPEָ<45><D6B8>*/
ST_INT includebit_TYPEID; /**< includebit<69><74>typeid*/
AC_ENTRYDATA_BUF entry_buf; /**< <20><><EFBFBD><EFBFBD><E6BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>˫<EFBFBD><CBAB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
}AC_RCB_INFO;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD>ͱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*/
typedef struct
{
AC_RCB_INFO *rcb_info; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>*/
ST_INT rcb_num; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>*/
ST_BOOLEAN init_flag; /**< <20>Ƿ<EFBFBD><C7B7><EFBFBD>ʼ<EFBFBD><CABC>*/
}AC_IED_RCB_INFO;
/**
* <EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ò<EFBFBD>ʱ<EFBFBD>õĽ
*/
typedef struct
{
ST_CHAR obj_ref[MAX_REFERENCE_LENGTH + 1];
ST_RET result;
ST_INT8 add_cause;
ST_UINT8 ctrl_num; /**< ctlNumֵ */
}AC_CTLREPORT_CTRL;
/**
* <EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>
* @param rcb_info <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
* @return ST_VOID <EFBFBD><EFBFBD>
*/
ST_VOID ac_uninit_rpt(AC_IED_RCB_INFO *rcb_info);
/**
* <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><EFBFBD><EFBFBD>Ϣ
* @param ied srvָ<EFBFBD><EFBFBD>
* @param rcb_info <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
* @retval SD_FAILURE ʧ<EFBFBD><EFBFBD>
* @retval SD_SUCCESS <EFBFBD>ɹ<EFBFBD>
*/
ST_RET ac_init_rpt(AI_IED_CTRL *ied, AC_IED_RCB_INFO *rcb_info);
extern ST_VOID (*u_ac_on_recv_report)(
VISIBLE_STRING65_TDEF rptID, /**< <20><><EFBFBD><EFBFBD>rptid<69><64>Ӧ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD><CDBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>*/
ST_INT obj_num, /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
AI_OBJ_VAL *obj_val, /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>*/
ST_BOOLEAN *val_chgs, /**< ָʾÿ<CABE><C3BF>obj<62><6A>ֵ<EFBFBD>Ƿ<EFBFBD><C7B7>б<D0B1><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>Ľӿ<C4BD>Ҫ<EFBFBD><D2AA><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>仯*/
AC_REPORT_REASON *reasons, /**< ָʾ<D6B8><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>*/
ST_INT srv_id); /**< IEDID*/
extern ST_VOID (*u_ac_on_ctl_report)(
AC_CTLREPORT_CTRL *ctl_rpt_ctrl, /**< <20><><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD>ṹָ<E1B9B9><D6B8>*/
ST_INT srv_id); /**< IEDID*/
#ifdef __cplusplus
}
#endif
#endif