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.

379 lines
13 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. */
/* */
/* 模块描述: */
/** iec61850基本数据类型和宏定义
* @file ai_def.h */
/* */
/* 日期 作者 注释 */
/* 2007/07/12 DJF 创建文件 */
/****************************************************************************/
#ifndef IEC61850_AI_DEF_H
#define IEC61850_AI_DEF_H
#include "sysincs.h"
#include "glbtypes.h"
#include "mms_def2.h"
#include "mmsobj.h"
#ifdef __cplusplus
extern "C" {
#endif
/**61850服务代码*/
typedef enum{
IEC61850_OP_UNKNOWN = 0,
IEC61850_OP_ASSOC,
IEC61850_OP_RELEASE ,
IEC61850_OP_ABORT,
IEC61850_OP_GETSRVDIR,
IEC61850_OP_GETLDDIR,
IEC61850_OP_GETLNDIR,
IEC61850_OP_GETDODEF,
IEC61850_OP_READ,
IEC61850_OP_WRITE,
IEC61850_OP_GETSGV,
IEC61850_OP_SETSGV,
IEC61850_OP_SELVAL,
IEC61850_OP_SELECT,
IEC61850_OP_CANCEL,
IEC61850_OP_OPER,
IEC61850_OP_CRTDS,
IEC61850_OP_DELDS,
IEC61850_OP_GETDSDIR,
IEC61850_OP_GETDSVAL,
IEC61850_OP_SETDSVAL,
IEC61850_OP_GETFAV,
IEC61850_OP_GETFILE,
IEC61850_OP_SETFILE,
IEC61850_OP_DELFILE ,
IEC61850_OP_QUERYLOGBT,
IEC61850_OP_QUERYLOGA,
IEC61850_OP_RPTENA // 报告使能
}IEC61850_OP;
/**
* 通道号枚举值
*/
typedef enum
{
AC_CHANNEL_A,
AC_CHANNEL_B,
AC_CHANNEL_UNKNOWN
}AC_CHANNEL;
#define MAX_REFERENCE_LENGTH 129
/**
* 61850对象参引数据类型
*/
typedef ST_CHAR AI_OBJ_REF[MAX_REFERENCE_LENGTH + 1];
/**
* 61850对象id数据类型在服务器内唯一标识一个对象
*/
typedef ST_INT AI_OBJ_ID;
/**
* 61850简单数据类型
*/
typedef enum{
VAL_TYPE_UNKNOWN = 0,
VAL_TYPE_BOOLEAN,
VAL_TYPE_INT8,
VAL_TYPE_INT16,
VAL_TYPE_INT32,
VAL_TYPE_INT128,
VAL_TYPE_INT8U,
VAL_TYPE_INT16U,
VAL_TYPE_INT32U,
VAL_TYPE_FLOAT32,
VAL_TYPE_FLOAT64,
VAL_TYPE_CODEDENUM, //固定长度的bitstring, 2bit
VAL_TYPE_TCMD, //固定长度的bitstring, 2bit
VAL_TYPE_OSTRING8, //变长octet string,最大长度8个字节
VAL_TYPE_OSTRING64, //变长octet string,最大长度64个字节
VAL_TYPE_VSTRING64, //可视变长字符串最大长度64
VAL_TYPE_VSTRING65, //可视变长字符串最大长度65
VAL_TYPE_VSTRING129, //可视变长字符串最大长度129
VAL_TYPE_VSTRING255 , //可视变长字符串最大长度255
VAL_TYPE_UNISTRING255, //utf-8字符串最大255个字符
VAL_TYPE_QUALITY, //变长bitstring 13bit
VAL_TYPE_TIMESTAMP, //utctime
VAL_TYPE_ENTRYTIME, //binary timebtime6格式
VAL_TYPE_OPTFLDS, //变长bitstring 10bit
VAL_TYPE_TRGC, //变长bitstring 6bit
VAL_TYPE_CHECK, //变长bitstring 2bit
VAL_TYPE_ENTRYID, //固定长度的octet string, 8个字节
VAL_TYPE_STRUCT //复杂类型的数据
}AI_VAL_TYPE;
/*da 类型定义,每个宏定义的值和AI_OBJ_VAL中的枚举值一致 */
#define AI_DATYPE_UNKNOWN VAL_TYPE_UNKNOWN
#define AI_DATYPE_BOOLEAN VAL_TYPE_BOOLEAN
#define AI_DATYPE_INT8 VAL_TYPE_INT8
#define AI_DATYPE_INT16 VAL_TYPE_INT16
#define AI_DATYPE_INT32 VAL_TYPE_INT32
#define AI_DATYPE_INT128 VAL_TYPE_INT128
#define AI_DATYPE_INT8U VAL_TYPE_INT8U
#define AI_DATYPE_INT16U VAL_TYPE_INT16U
#define AI_DATYPE_INT32U VAL_TYPE_INT32U
#define AI_DATYPE_FLOAT32 VAL_TYPE_FLOAT32
#define AI_DATYPE_FLOAT64 VAL_TYPE_FLOAT64
#define AI_DATYPE_CODEDENUM VAL_TYPE_CODEDENUM
#define AI_DATYPE_TCMD VAL_TYPE_CODEDENUM
#define AI_DATYPE_OSTRING8 VAL_TYPE_OSTRING8
#define AI_DATYPE_OSTRING64 VAL_TYPE_OSTRING64
#define AI_DATYPE_VSTRING64 VAL_TYPE_VSTRING64
#define AI_DATYPE_VSTRING65 VAL_TYPE_VSTRING65
#define AI_DATYPE_VSTRING129 VAL_TYPE_VSTRING129
#define AI_DATYPE_VSTRING255 VAL_TYPE_VSTRING255
#define AI_DATYPE_UNISTRING255 VAL_TYPE_UNISTRING255
#define AI_DATYPE_QUALITY VAL_TYPE_QUALITY
#define AI_DATYPE_TIMESTAMP VAL_TYPE_TIMESTAMP
#define AI_DATYPE_ENTRYTIME VAL_TYPE_ENTRYTIME
#define AI_DATYPE_OPTFLDS VAL_TYPE_OPTFLDS
#define AI_DATYPE_TRGC VAL_TYPE_TRGC
#define AI_DATYPE_CHECK VAL_TYPE_CHECK
#define AI_DATYPE_ENTRYID VAL_TYPE_ENTRYID
#define AI_DATYPE_STRUCT VAL_TYPE_STRUCT
/**
* 61850对象类型
*/
typedef enum
{
OBJECT_TYPE_UNKNOWN = 0,
OBJECT_TYPE_IED,
OBJECT_TYPE_LD,
OBJECT_TYPE_LN,
OBJECT_TYPE_DS,
OBJECT_TYPE_FCN, //带fc的ln
OBJECT_TYPE_FCD,
OBJECT_TYPE_FCDA,
OBJECT_TYPE_CB //控制块
}AI_OBJ_TYPE;
typedef ST_INT AI_FCO_SUBTYPE; //值为AI_CBTYPE_XXX AI_LNTYPE_XXX AI_DOTYPE_XXX AI_DATYPE_XXX等
#define AI_FCO_SUBTYPE_UNKNOWN 0
/** cb控制块类型定义 */
#define AI_CBTYPE_UNKNOWN 0
#define AI_CBTYPE_SGCB 1 //SP
#define AI_CBTYPE_URCB 2 //RP
#define AI_CBTYPE_BRCB 3 //BR
#define AI_CBTYPE_LCB 4 //LG
#define AI_CBTYPE_GOCB 5 //GO
#define AI_CBTYPE_GSCB 6 //GS
#define AI_CBTYPE_MSVCB 7 //MS
#define AI_CBTYPE_USVCB 8 //US
/** ln 类型定义*/
#define AI_LNTYPE_UNKNOWN 0 /* NOT IN STANDARD LN TYPE */
#define AI_LNTYPE_LLN0 1
#define AI_LNTYPE_LPHD 2
#define AI_LNTYPE_PDIF 3
#define AI_LNTYPE_PDIR 4
#define AI_LNTYPE_PDIS 5
#define AI_LNTYPE_PDOP 6
#define AI_LNTYPE_PDUP 7
#define AI_LNTYPE_PFRC 8
#define AI_LNTYPE_PHAR 9
#define AI_LNTYPE_PHIZ 10
#define AI_LNTYPE_PIOC 11
#define AI_LNTYPE_PMRI 12
#define AI_LNTYPE_PMSS 13
#define AI_LNTYPE_POPF 14
#define AI_LNTYPE_PPAM 15
#define AI_LNTYPE_PSCH 16
#define AI_LNTYPE_PSDE 17
#define AI_LNTYPE_PTEF 18
#define AI_LNTYPE_PTOC 19
#define AI_LNTYPE_PTOF 20
#define AI_LNTYPE_PTOV 21
#define AI_LNTYPE_PTRC 22
#define AI_LNTYPE_PTTR 23
#define AI_LNTYPE_PTUC 24
#define AI_LNTYPE_PTUF 25
#define AI_LNTYPE_PTUV 26
#define AI_LNTYPE_PUPF 27
#define AI_LNTYPE_PVOC 28
#define AI_LNTYPE_PVPH 29
#define AI_LNTYPE_PZSU 30
#define AI_LNTYPE_RADR 31
#define AI_LNTYPE_RBDR 32
#define AI_LNTYPE_RBRF 33
#define AI_LNTYPE_RDIR 34
#define AI_LNTYPE_RDRE 35
#define AI_LNTYPE_RDRS 36
#define AI_LNTYPE_RFLO 37
#define AI_LNTYPE_RPSB 38
#define AI_LNTYPE_RREC 39
#define AI_LNTYPE_RSYN 40
#define AI_LNTYPE_CALH 41
#define AI_LNTYPE_CCGR 42
#define AI_LNTYPE_CILO 43
#define AI_LNTYPE_CPOW 44
#define AI_LNTYPE_CSWI 45
#define AI_LNTYPE_GAPC 46
#define AI_LNTYPE_GGIO 47
#define AI_LNTYPE_GSAL 48
#define AI_LNTYPE_IARC 49
#define AI_LNTYPE_IHMI 50
#define AI_LNTYPE_ITCI 51
#define AI_LNTYPE_ITMI 52
#define AI_LNTYPE_ANCR 53
#define AI_LNTYPE_ARCO 54
#define AI_LNTYPE_ATCC 55
#define AI_LNTYPE_AVCO 56
#define AI_LNTYPE_MDIF 57
#define AI_LNTYPE_MHAI 58
#define AI_LNTYPE_MHAN 59
#define AI_LNTYPE_MMTR 60
#define AI_LNTYPE_MMXN 61
#define AI_LNTYPE_MMXU 62
#define AI_LNTYPE_MSQI 63
#define AI_LNTYPE_MSTA 64
#define AI_LNTYPE_SARC 65
#define AI_LNTYPE_SIMG 66
#define AI_LNTYPE_SIML 67
#define AI_LNTYPE_SPDC 68
#define AI_LNTYPE_XCBR 69
#define AI_LNTYPE_XSWI 70
#define AI_LNTYPE_TCTR 71
#define AI_LNTYPE_TVTR 72
#define AI_LNTYPE_YEFN 73
#define AI_LNTYPE_YLTC 74
#define AI_LNTYPE_YPSH 75
#define AI_LNTYPE_YPTR 76
#define AI_LNTYPE_ZAXN 77
#define AI_LNTYPE_ZBAT 78
#define AI_LNTYPE_ZBSH 79
#define AI_LNTYPE_ZCAB 80
#define AI_LNTYPE_ZCAP 81
#define AI_LNTYPE_ZCON 82
#define AI_LNTYPE_ZGEN 83
#define AI_LNTYPE_ZGIL 84
#define AI_LNTYPE_ZLIN 85
#define AI_LNTYPE_ZMOT 86
#define AI_LNTYPE_ZREA 87
#define AI_LNTYPE_ZRRC 88
#define AI_LNTYPE_ZSAR 89
#define AI_LNTYPE_ZTCF 90
#define AI_LNTYPE_ZTCR 91
/** do类型定义 */
#define AI_DOTYPE_UNKNOWN 0 /* NOT IN STANDARD TYPE */
#define AI_DOTYPE_SPS 1
#define AI_DOTYPE_DPS 2
#define AI_DOTYPE_INS 3
#define AI_DOTYPE_ACT 4
#define AI_DOTYPE_ACD 5
#define AI_DOTYPE_SEC 6
#define AI_DOTYPE_BCR 7
#define AI_DOTYPE_MV 8
#define AI_DOTYPE_CMV 9
#define AI_DOTYPE_SAV 10
#define AI_DOTYPE_SPC 11
#define AI_DOTYPE_DPC 12
#define AI_DOTYPE_INC 13
#define AI_DOTYPE_BSC 14
#define AI_DOTYPE_ISC 15
#define AI_DOTYPE_APC 16
#define AI_DOTYPE_SPG 17
#define AI_DOTYPE_ING 18
#define AI_DOTYPE_ASG 19
#define AI_DOTYPE_CURVE 20
#define AI_DOTYPE_DPL 21
#define AI_DOTYPE_LPL 22
#define AI_DOTYPE_CSD 23
#define AI_DOTYPE_WYE 24
#define AI_DOTYPE_DEL 25
#define AI_DOTYPE_SEQ 26
#define AI_DOTYPE_HMV 27
#define AI_DOTYPE_HWYE 28
#define AI_DOTYPE_HDEL 29
//下面是在iec61850v2.0中新增的cdc类型
#define AI_DOTYPE_ENC 30
#define AI_DOTYPE_ENS 31
#define AI_DOTYPE_ENG 32
#define AI_DOTYPE_HST 33
#define AI_DOTYPE_ORG 34
#define AI_DOTYPE_TSG 35
#define AI_DOTYPE_CSG 36
#define AI_DOTYPE_ERS 37
/**
* 61850常用基本数据类型定义
*/
#define ST_OSTRING8 OCTET_STRING8_TDEF /* octet string */
#define ST_OSTRING64 OCTET_STRING64_TDEF /* octet string */
#define ST_VSTRING255 VISIBLE_STRING255_TDEF /* Visible String */
#define ST_VSTRING64 VISIBLE_STRING64_TDEF /* Visible String */
#define ST_VSTRING65 VISIBLE_STRING65_TDEF /* Visible String */
#define ST_VSTRING129 VISIBLE_STRING129_TDEF /* Visible String */
#define ST_USTRING255 UNICODE_STRING255_TDEF /* utf8String */
#define ST_TIMESTAMP TimeStamp_TDEF /* utc time */
#define ST_ENTRYTIME EntryTime_TDEF /* btime6 */
#define ST_QUALITY Quality_TDEF /* BVstring13 */
#define ST_ENTRYID EntryID_TDEF /* 8个字节的8位位组 */
#define ST_OPTFLDS OPTFLDS_TDEF /* BVstring10 */
#define ST_TRGOP TRG_CONDITION_TDEF /* BVstring6 */
#define ST_CHECK Check_TDEF /* BVstring2 */
/**
* 61850简单数据类型对象的值的数据结构定义
*/
typedef struct
{
AI_VAL_TYPE type; /**< 基本数据类型 */
ST_INT size; /**< 数据元素占用的字节数即data的长度 */
ST_VOID *data; /**< 数据缓冲区 */
}AI_PRIM_VAL;
/**
* 61850对象值的数据结构定义
*/
typedef struct
{
AI_OBJ_ID obj_id; /**< 对象ID */
AI_OBJ_ID *prim_ids; /**< 此对象包含的简单类型对象的id数组 */
AI_PRIM_VAL *prim_vals; /**< 本对象的所有简单类型的子成员的值,数组 */
ST_INT prim_num; /**< 数组大小 */
}AI_OBJ_VAL;
/**
* acsi服务错误代码
*/
typedef ST_INT8 AC_REQ_RESULT;
#define AC_RESULT_SUCCESS 0; /**< 服务成功 */
#define AC_RESULT_FAILURE 1; /**< 服务失败 */
#define AC_RESULT_TIMEOUT 2; /**< 服务超时失败 */
#ifdef __cplusplus
}
#endif
#endif /* ACSI_DEFINED_INCLUDE */