Files
microser/include/ied.h

383 lines
18 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file: $RCSfile: ied.h,v $
* @brief: $设备数据结构定义
*
* @version: $Revision: 1.1 $
* @date: $Date: 2018/11/24 06:54:49 $
* @author: $Author: lizhongming $
* @state: $State: Exp $
*
* @latest: $Id: ied.h,v 1.1 2018/11/24 06:54:49 lizhongming Exp $
*
*/
#ifndef _IED_STRUCT_H
#define _IED_STRUCT_H
#include "IEC60870DEF.h"
//#include "drvcommon.h"
typedef byte_t channel_size_type;
#ifdef _OS_WIN32_
#pragma pack(push,1)
#endif
#define PRV_ANA_EXTENSION (1) //模拟量用户扩展属性 总数
#define PRV_DIGIT_EXTENSION (3) //遥信量用户扩展属性 总数
#define PRV_EVENT_EXTENSION (3) //事件量用户扩展属性 总数
#define PRV_PULSE_EXTENSION (2) //遥测量用户扩展属性 总数
//-----模拟量用户扩展---------------//
#define ANA_EXTENSION_ALARM (0) //告警:告警等级;告警声音文件名
typedef struct analog_t analog_t;
struct analog_t {
byte_t type; /**< 电压/电流/有功功率/无功功率/频率/功率因素/其它 */
float initval; /**< 缺省值 */
float minimum; /**< 取值下限 */
float maximum; /**< 取值上限 */
float step; /**< 步长 */
byte_t integral; /**< precision ( n , m ) - n */
byte_t decimal; /**< precision ( n , m ) - m */
float offset; /**< 实际值转换基数 */
float factor; /**< 实际值转换系数 */
float threshold; /**< 门限值 */
float smooth; /**< 平滑系数 */
float lower; /**< 告警下限值 */
float higher; /**< 告警上限值 */
float lowest; /**< 下下限告警值 */
float highest; /**< 上上限告警值 */
float blur; /**< 阀值模糊系数 */
char dimension[SHORTNAME]; /**< 量纲ASCII格式(A/V/kV/kvar/kW/MW etc.) */
void *ext[PRV_ANA_EXTENSION]; /**< 保护管理机扩展 */
}ALIGNPACKED;
typedef struct ana_extention_t ana_extention_t;
struct ana_extention_t{
int alarm_level;
int save_flag;
char *high_alarm_sound;
char *low_alarm_sound;
char *recovery_alarm_sound;
};
typedef struct digit_t digit_t;
#define DGT_TYP_UNDEF 0x00 /**< 未定义 */
#define DGT_TYP_SAMPLING 0x01 /**< 采样 */
#define DGT_TYP_EVENT 0x02 /**< 事件 */
#define DGT_TYP_ALARM 0x03 /**< 告警 */
#define DGT_TYP_OPERATE 0x04 /**< 操作 */
#define DGT_TYP_SYSTEM 0x05 /**< 系统 */
/** 数字量私有属性 */
struct digit_t {
byte_t type; /**< 采样/事件/告警/操作/系统 */
byte_t initval; /**< default zero value(0 or 1) */
byte_t level; /**< level */
byte_t snd_timer; /**< sound play timer (s) */
byte_t rst_timer; /**< auto restore timer (s) */
uint16_t act_lim; /**< (0 ==> 1)动作告警上限 */
uint16_t rst_lim; /**< (1 ==> 0)动作告警上限 */
uint16_t act_num; /**< (0 ==> 1)动作上限(不需界面录入) */
uint16_t rst_num; /**< (1 ==> 0)动作上限(不需界面录入) */
//第二版去掉
//char on[SHORTNAME]; /**< 0==>1动作名称(ASCII格式) */
//char off[SHORTNAME]; /**< 1==>0动作名称(ASCII格式) */
void *ext[PRV_DIGIT_EXTENSION]; /**< 保护管理机扩展 */
}ALIGNPACKED;
#define DIGIT_STATE_0_DESCRIBE (0)
#define DIGIT_STATE_1_DESCRIBE (1)
#define DIGIT_STATE_2_DESCRIBE (2)
#define DIGIT_STATE_3_DESCRIBE (3)
#define DIGIT_OPEN_SOUND (0)
#define DIGIT_CLOSE_SOUND (1)
#define DIGIT_ALARM_SOUND (2)
typedef struct state_describe_extention_t state_describe_extention_t;
struct state_describe_extention_t{
char *state_describe[4]; /**< 状态0123的描述 */
};
typedef struct sound_file_name_extention_t sound_file_name_extention_t;
struct sound_file_name_extention_t{
char *sound_file_name[3]; /**< 开报警声、合报警声、事故报警声 */
};
typedef struct epfi_addt_extension_t epfi_addt_extension_t;
struct epfi_addt_extension_t {
uint32_t fun;
uint32_t inf;
};
typedef struct pulse_t pulse_t;
/** Integrated totals private attr */
#define PLS_TYP_UNDEF 0x00 /**< 未定义 */
#define PLS_TYP_PLUS_POWER_HV 0x01 /**< 正向有功 */
#define PLS_TYP_PLUS_POWER_NO 0x02 /**< 正向无功 */
#define PLS_TYP_NEGATIVE_POWER_HV 0x03 /**< 反向有功 */
#define PLS_TYP_NEGATIVE_POWER_NO 0x04 /**< 反向无功 */
struct pulse_t {
byte_t type; /**< 正向有功/正向无功/反向有功/反向无功 */
uint32_t save_flag; /**< 存储标记 */
uint32_t initval; /**< default value */
uint32_t minimum; /**< minimum value */
uint32_t maximum; /**< maximum value */
uint32_t step; /**< 步长 */
//changed by zhancg 2017-04-05 配系数
// uint32_t offset; /**< 实际值转换基数 */
// uint32_t factor; /**< 实际值转换系数 */
// uint32_t threshold; /**< 门限值 */
// uint32_t smooth; /**< 平滑系数 */
float offset; /**< 实际值转换基数 */
float factor; /**< 实际值转换系数 */
float threshold; /**< 门限值 */
float smooth; /**< 平滑系数 */
char dimension[SHORTNAME]; /**< 量纲ASCII格式(kvar/kW/MW etc.) */
void *ext[PRV_PULSE_EXTENSION];
}ALIGNPACKED;
typedef struct pluse_stage_limits_extention_t pluse_stage_limits_extention_t;
struct pluse_stage_limits_extention_t{
uint32_t limits[3]; /**< 峰电度限值,日电度限值,月电度限值 */
};
typedef struct pluse_stage_const_extention_t pluse_stage_const_extention_t;
struct pluse_stage_const_extention_t{
char* stage[8]; /**< 峰时段1,峰时段2,峰时段3,峰时段4,谷时段1,谷时段2,谷时段3,谷时段4 */
};
//
typedef struct command_t command_t;
/** 命令消息结构 */
struct command_t {
ticks_t ticks; /**< Ticks when command generated */
apr_time_t tmlimit; /**< 命令执行完成的限制时间 */
byte_t state; /**< ACTIVE、FINISH or TIMEOUT */
byte_t channel; /**< command channel no */
byte_t flag; /**< General、System or Special */
byte_t typ; /**< Command TYPE(IEC60870-5-101) */
uint32_t ied; /**< Controlled IED id */
uint32_t group; /**< Controlled group id */
uint32_t dot; /**< Controlled element */
byte_t cot; /**< Cause of transmission */
byte_t data[255]; /**< Command data */
}ALIGNPACKED;
//
/** status_t code definiens */
#define STATUS_NORMAL 0 /**< 正常 */
#define STATUS_NOINIT 1 /**< 未初始化 */
#define STATUS_OVERTIME 2 /**< 通信超时 */
#define STATUS_BREAKOFF 3 /**< 通信中断 */
#define STATUS_BLOCKED 4 /**< 封锁 */
#define STATUS_TESTING 5 /**< 测试 */
#define STATUS_NOTDEF 6 /**< 未配置(本运行状态没有配置) */
typedef uint16_t status_t; /**< 设备或通信节点的运行状态 */
typedef struct alias_t alias_t;
/** 数据元素的别名结构 */
struct alias_t { /**< 数据元素的别名结构 */
uint32_t id; /**< 别名信息地址 */
uint32_t parent; /**< 所指代的IED */
uint32_t group; /**< 所指代的IED内的组号 */
uint32_t dot; /**< 所指代的IED内的序号 */
value_t* value; /**< 运行时刻实时数据 */
};
typedef struct ied_t ied_t;
typedef struct group_t group_t;
typedef struct element_t element_t;
/** 数据信息元素的结构 */
struct element_t {
uint32_t id; /**< Identification, Information Address */
uint32_t flags; /**< flags define */
byte_t type; /**< IEC60870-5-101 TYP.(IEC60870DEF.h) */
byte_t code; /**< Data code type.(BIN/ASCII/BCD/etc.) */
uint32_t parent; /**< 隶属设备 */
uint32_t group; /**< 数据组号 */
uint32_t dot; /**< 数据序号 */
uint16_t size; /**< 数据宽度(以字节为单位) */
char name[LONGNAME]; /**< 数据名称 */
char *aliasname; /**< 数据点别名,如用于中文名称对应的英文名称 ++EPFI++ */
void *owner; /**< 私有属性结构(analog_t/digit_t/..../etc.) */
void *script; /**< 关联的计算表达式 */
/** Runtime generate */
value_t value; /**< 运行时刻实时数据缓冲区 */
ticks_t last; /**< 最后变化时间 */
uint32_t state; /**< 数据状态 */
byte_t funtype; /**< 继承自所属组的类型,表示数据功能类型 */
uint16_t index; /**< 数据元素索引 */
uint16_t n_alias_add_1; /**< 分配的数据别名缓冲区的大小预留1动态定订购用 */
uint16_t n_alias; /**< 数据别名数组元素个数 */
alias_t* alias; /**< 数据别名索引数组 */
uint16_t alias_pos; /**< 数据别名当前位置 */
uint32_t offset; /**< 数据在设备数据缓冲区内的偏移索引 */
group_t *grp; /**< 所属数据组句柄 */
ied_t *ied; /**< 所属设备句柄 */
/* Extend property */
void *sys_ext; /**< 数据点的系统扩展属性,由基本库实现 */
void *app_ext; /**< 数据点的应用扩展属性,由应用库实现 */
void *usr_ext; /**< 数据点的用户扩展属性,由应用程序实现 */
};
/** group_t->type definiens */
#define GRP_CUSTOM 0 /**< User custom type */
#define GRP_ANALOGUE 1 /**< Analogue type */
#define GRP_DIGITAL 2 /**< Digital type */
#define GRP_PULSE 3 /**< Pulse type */
#define GRP_CONTROL 4 /**< Control type */
#define GRP_SYSTEM 5 /**< System operation type */
#define GRP_EVENT 6 /**< Protect event type */
#define GRP_ALARM 7 /**< Alarm type */
#define GRP_SETTING 8 /**< Fixed value type */
#define GRP_STATUS 9 /**< State of device */
#define GRP_VDI 10 /**< 软压板 type */
#define GRP_STEPPOS 11 /**< Step position type */
#define GRP_COMBO 12 /**< combo/compute type */
#define GRP_SIMANA 13 /**< 模拟量 */
#define GRP_SETAREA 14 /**< 定值区 */
#define GRP_ACCANA 15 /**< 录波模拟量 */
#define GRP_ACCDGT 16 /**< 录波开关量 */
#define GRP_SETPOINT 18 /**< Set point type for 101,104 protocol used only */
#define GRP_STEPCONTROL 19 /**< 步位置调节组 */
/** 数据组结构 */
struct group_t {
uint32_t id; /**< Identification, Commond Address of Set */
uint32_t flags; /**< Flags definiens */
byte_t type; /**< Analogue/Digit/Control/Event/etc. */
char name[LONGNAME]; /**< 数据组的名称 */
uint16_t maxelems; /**< 允许包含elements的最大数目 */
element_t *elements; /**< 数据元素定义数组 */
// runtime generate
uint16_t count; /**< 实际包含的数据元素数目 */
uint16_t index; /**< 数据组索引IED->groups的数组下标 */
value_t value; /**< 数据组缓冲区顺序存放elements的实时值 */
ied_t *ied; /**< 所属设备句柄 */
apr_hash_t *htdots; /**< 数据元素定义哈希表 */
/* Extend property */
void *sys_ext; /**< 数据组的系统扩展属性,由基本库实现 */
void *app_ext; /**< 数据组的应用扩展属性,由应用库实现 */
void *usr_ext; /**< 数据组的用户扩展属性,由应用程序实现 */
};
//<!-- IEDConfig id,name,flags,type,chncount,cpucount,addrsinfo,cpusinfo,station,frequency,delay,count
// ^^^^
/** IED type definiens */
#define IED_TYPE_REAL (0)
#define IED_TYPE_REMOTE (1)
#define IED_TYPE_SYSTEM (2)
#define IED_TYPE_VIRTUAL (3)
#define IED_TYPE_EPFI (4) /**< 保护管理机 */
#define IED_FLAG_BLOCKED 0x00000004 /**< 是否封锁,缺省不封锁 */
#define CHANBEL_TYPE_UNKNOWN (0)
#define CHANNEL_TYPE_IPV4 (1)
#define CHANNEL_TYPE_IPV6 (2) /**< 未用 */
#define CHANNEL_TYPE_SERIAL (3) /**< 串口号 */
#define CHANNEL_TYPE_USER_DEFINED (254) /**< 用户自定义类型 */
typedef struct channel_t channel_t;
struct channel_t {
uint32_t master; /**< 所属通信通道(Node ID) */
//以下两个属性域为2008-08-16增加,支持
int channel_type; /**< 通道地址类型 */
char addr_str[LONGNAME]; /**< 通道地址的字符串表示 */
uint32_t addr; /**< 通信端口地址 */
uint16_t port; /**< ip地址的端口 */
uint32_t status; /**< 通信端口状态 */
ticks_t last_ticks; /**< 最近访问时间 */
ticks_t last_send_ticks; /**< 最近查询时间 */
void *connect; /**< 通道连接句柄 */
ied_t *ied; /**< 所属设备句柄 */
int ied_id; /**< 所属设备id */
};
typedef struct cpuinfo_t cpuinfo_t;
struct cpuinfo_t {
byte_t addr; /**< CPU地址 */
byte_t status; /**< CPU状态 */
byte_t templ; /**< CPU模板 */
char name[LONGNAME]; /**< CPU名称 */
ticks_t last_gi; /**< 最近总查询时间 */
ticks_t last_gi_send; /**< 最近总查询发送时间 */
ticks_t next_gi_send; /**< 下次总查询发送时间 */
ticks_t last_ticks; /**< 最近访问时间 */
ticks_t last_send_ticks; /**< 最近查询时间 */
};
/** IED struct definiens */
struct ied_t {
uint32_t id; /**< Primy key ( = 0 系统保留IED ) */
uint32_t flags; /**< Flags define */
byte_t type; /**< Type define */
byte_t chncount; /**< 设备通信端口总数(缺省=1 */
channel_t *channel; /**< 设备通信端口数组 */
byte_t cpucount; /**< CPU总数缺省=1 */
cpuinfo_t *cpuinfo; /**< CPU地址数组 */
char name[LONGNAME]; /**< 设备名称 */
uint32_t station; /**< 所属站号<直属目录ID> */
uint32_t node; /**< 所属通信节点号 */
uint16_t frequency; /**< 通信扫描频率 */
uint32_t delay; /**< 通信响应延时(ms) */
uint16_t count; /**< 包含的数据组数目 */
group_t *groups; /**< 数据组定义数组 */
apr_hash_t *htgroups; /**< 数据组定义哈希表句柄 */
uint32_t systoken_st; /**< 系统令牌的状态 */
/* Runtime generate */
uint16_t index; /**< 设备数组下标 */
status_t status; /**< 设备运行状态 */
ticks_t last_ticks; /**< 最近访问时间 */
ticks_t last_gi; /**< 最近总查询时间 */
/* Extend property */
void *sys_ext; /**< 设备的系统扩展属性,基本库定义 */
void *app_ext; /**< 设备的应用扩展属性,应用库定义 */
void *usr_ext; /**< 设备的用户扩展属性,应用程序定义 */
};
#ifdef _OS_WIN32_
#pragma pack(pop)
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif /* _IED_STRUCT_H */