2025-01-16 16:17:01 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @file: $RCSfile: ied.h,v $
|
2026-04-16 10:56:11 +08:00
|
|
|
|
* @brief: $设备数据结构定义
|
2025-01-16 16:17:01 +08:00
|
|
|
|
*
|
|
|
|
|
|
* @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
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#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) //告警:告警等级;告警声音文件名
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct analog_t analog_t;
|
|
|
|
|
|
struct analog_t {
|
2026-04-16 10:56:11 +08:00
|
|
|
|
byte_t type; /**< 电压/电流/有功功率/无功功率/频率/功率因素/其它 */
|
|
|
|
|
|
float initval; /**< 缺省值 */
|
|
|
|
|
|
float minimum; /**< 取值下限 */
|
|
|
|
|
|
float maximum; /**< 取值上限 */
|
|
|
|
|
|
float step; /**< 步长 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
byte_t integral; /**< precision ( n , m ) - n */
|
|
|
|
|
|
byte_t decimal; /**< precision ( n , m ) - m */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
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]; /**< 保护管理机扩展 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}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;
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#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 /**< 系统 */
|
|
|
|
|
|
/** 数字量私有属性 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
struct digit_t {
|
2026-04-16 10:56:11 +08:00
|
|
|
|
byte_t type; /**< 采样/事件/告警/操作/系统 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
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) */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
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]; /**< 保护管理机扩展 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
}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{
|
2026-04-16 10:56:11 +08:00
|
|
|
|
char *state_describe[4]; /**< 状态0,1,2,3的描述 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
typedef struct sound_file_name_extention_t sound_file_name_extention_t;
|
|
|
|
|
|
|
|
|
|
|
|
struct sound_file_name_extention_t{
|
2026-04-16 10:56:11 +08:00
|
|
|
|
char *sound_file_name[3]; /**< 开报警声、合报警声、事故报警声 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
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 */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#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 /**< 反向无功 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
struct pulse_t {
|
2026-04-16 10:56:11 +08:00
|
|
|
|
byte_t type; /**< 正向有功/正向无功/反向有功/反向无功 */
|
|
|
|
|
|
uint32_t save_flag; /**< 存储标记 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
uint32_t initval; /**< default value */
|
|
|
|
|
|
uint32_t minimum; /**< minimum value */
|
|
|
|
|
|
uint32_t maximum; /**< maximum value */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
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.) */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
void *ext[PRV_PULSE_EXTENSION];
|
|
|
|
|
|
}ALIGNPACKED;
|
|
|
|
|
|
typedef struct pluse_stage_limits_extention_t pluse_stage_limits_extention_t;
|
|
|
|
|
|
struct pluse_stage_limits_extention_t{
|
2026-04-16 10:56:11 +08:00
|
|
|
|
uint32_t limits[3]; /**< 峰电度限值,日电度限值,月电度限值 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
typedef struct pluse_stage_const_extention_t pluse_stage_const_extention_t;
|
|
|
|
|
|
struct pluse_stage_const_extention_t{
|
2026-04-16 10:56:11 +08:00
|
|
|
|
char* stage[8]; /**< 峰时段1,峰时段2,峰时段3,峰时段4,谷时段1,谷时段2,谷时段3,谷时段4 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
typedef struct command_t command_t;
|
2026-04-16 10:56:11 +08:00
|
|
|
|
/** 命令消息结构 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
struct command_t {
|
|
|
|
|
|
ticks_t ticks; /**< Ticks when command generated */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
apr_time_t tmlimit; /**< 命令执行完成的限制时间 */
|
|
|
|
|
|
byte_t state; /**< ACTIVE、FINISH or TIMEOUT */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
byte_t channel; /**< command channel no */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
byte_t flag; /**< General、System or Special */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
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 */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#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; /**< 设备或通信节点的运行状态 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
typedef struct alias_t alias_t;
|
2026-04-16 10:56:11 +08:00
|
|
|
|
/** 数据元素的别名结构 */
|
|
|
|
|
|
struct alias_t { /**< 数据元素的别名结构 */
|
|
|
|
|
|
uint32_t id; /**< 别名信息地址 */
|
|
|
|
|
|
uint32_t parent; /**< 所指代的IED */
|
|
|
|
|
|
uint32_t group; /**< 所指代的IED内的组号 */
|
|
|
|
|
|
uint32_t dot; /**< 所指代的IED内的序号 */
|
|
|
|
|
|
value_t* value; /**< 运行时刻实时数据 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct ied_t ied_t;
|
|
|
|
|
|
typedef struct group_t group_t;
|
|
|
|
|
|
typedef struct element_t element_t;
|
|
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
/** 数据信息元素的结构 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
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.) */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
uint32_t parent; /**< 隶属设备 */
|
|
|
|
|
|
uint32_t group; /**< 数据组号 */
|
|
|
|
|
|
uint32_t dot; /**< 数据序号 */
|
|
|
|
|
|
uint16_t size; /**< 数据宽度(以字节为单位) */
|
|
|
|
|
|
char name[LONGNAME]; /**< 数据名称 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
char *aliasname; /**< 数据点别名,如用于中文名称对应的英文名称 ++EPFI++ */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
void *owner; /**< 私有属性结构(analog_t/digit_t/..../etc.) */
|
|
|
|
|
|
void *script; /**< 关联的计算表达式 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
/** Runtime generate */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
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; /**< 所属设备句柄 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
/* Extend property */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
void *sys_ext; /**< 数据点的系统扩展属性,由基本库实现 */
|
|
|
|
|
|
void *app_ext; /**< 数据点的应用扩展属性,由应用库实现 */
|
|
|
|
|
|
void *usr_ext; /**< 数据点的用户扩展属性,由应用程序实现 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/** 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 */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#define GRP_VDI 10 /**< 软压板 type */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
#define GRP_STEPPOS 11 /**< Step position type */
|
|
|
|
|
|
#define GRP_COMBO 12 /**< combo/compute type */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#define GRP_SIMANA 13 /**< 模拟量 */
|
|
|
|
|
|
#define GRP_SETAREA 14 /**< 定值区 */
|
|
|
|
|
|
#define GRP_ACCANA 15 /**< 录波模拟量 */
|
|
|
|
|
|
#define GRP_ACCDGT 16 /**< 录波开关量 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
#define GRP_SETPOINT 18 /**< Set point type for 101,104 protocol used only */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#define GRP_STEPCONTROL 19 /**< 步位置调节组 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
/** 数据组结构 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
struct group_t {
|
|
|
|
|
|
uint32_t id; /**< Identification, Commond Address of Set */
|
|
|
|
|
|
uint32_t flags; /**< Flags definiens */
|
|
|
|
|
|
byte_t type; /**< Analogue/Digit/Control/Event/etc. */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
char name[LONGNAME]; /**< 数据组的名称 */
|
|
|
|
|
|
uint16_t maxelems; /**< 允许包含elements的最大数目 */
|
|
|
|
|
|
element_t *elements; /**< 数据元素定义数组 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
// runtime generate
|
2026-04-16 10:56:11 +08:00
|
|
|
|
uint16_t count; /**< 实际包含的数据元素数目 */
|
|
|
|
|
|
uint16_t index; /**< 数据组索引IED->groups的数组下标 */
|
|
|
|
|
|
value_t value; /**< 数据组缓冲区,顺序存放elements的实时值 */
|
|
|
|
|
|
ied_t *ied; /**< 所属设备句柄 */
|
|
|
|
|
|
apr_hash_t *htdots; /**< 数据元素定义哈希表 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
/* Extend property */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
void *sys_ext; /**< 数据组的系统扩展属性,由基本库实现 */
|
|
|
|
|
|
void *app_ext; /**< 数据组的应用扩展属性,由应用库实现 */
|
|
|
|
|
|
void *usr_ext; /**< 数据组的用户扩展属性,由应用程序实现 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//<!-- 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)
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#define IED_TYPE_EPFI (4) /**< 保护管理机 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#define IED_FLAG_BLOCKED 0x00000004 /**< 是否封锁,缺省不封锁 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define CHANBEL_TYPE_UNKNOWN (0)
|
|
|
|
|
|
#define CHANNEL_TYPE_IPV4 (1)
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#define CHANNEL_TYPE_IPV6 (2) /**< 未用 */
|
|
|
|
|
|
#define CHANNEL_TYPE_SERIAL (3) /**< 串口号 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
#define CHANNEL_TYPE_USER_DEFINED (254) /**< 用户自定义类型 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct channel_t channel_t;
|
|
|
|
|
|
struct channel_t {
|
2026-04-16 10:56:11 +08:00
|
|
|
|
uint32_t master; /**< 所属通信通道(Node ID) */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
//以下两个属性域为2008-08-16增加,支持
|
|
|
|
|
|
int channel_type; /**< 通道地址类型 */
|
|
|
|
|
|
char addr_str[LONGNAME]; /**< 通道地址的字符串表示 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
uint32_t addr; /**< 通信端口地址 */
|
|
|
|
|
|
uint16_t port; /**< ip地址的端口 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
2026-04-16 10:56:11 +08:00
|
|
|
|
uint32_t status; /**< 通信端口状态 */
|
|
|
|
|
|
ticks_t last_ticks; /**< 最近访问时间 */
|
|
|
|
|
|
ticks_t last_send_ticks; /**< 最近查询时间 */
|
|
|
|
|
|
void *connect; /**< 通道连接句柄 */
|
|
|
|
|
|
ied_t *ied; /**< 所属设备句柄 */
|
|
|
|
|
|
int ied_id; /**< 所属设备id */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct cpuinfo_t cpuinfo_t;
|
|
|
|
|
|
struct cpuinfo_t {
|
2026-04-16 10:56:11 +08:00
|
|
|
|
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; /**< 最近查询时间 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** IED struct definiens */
|
|
|
|
|
|
struct ied_t {
|
2026-04-16 10:56:11 +08:00
|
|
|
|
uint32_t id; /**< Primy key ( = 0 系统保留IED ) */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
uint32_t flags; /**< Flags define */
|
|
|
|
|
|
byte_t type; /**< Type define */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
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; /**< 系统令牌的状态 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
/* Runtime generate */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
uint16_t index; /**< 设备数组下标 */
|
|
|
|
|
|
status_t status; /**< 设备运行状态 */
|
|
|
|
|
|
ticks_t last_ticks; /**< 最近访问时间 */
|
|
|
|
|
|
ticks_t last_gi; /**< 最近总查询时间 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
|
|
|
|
|
|
/* Extend property */
|
2026-04-16 10:56:11 +08:00
|
|
|
|
void *sys_ext; /**< 设备的系统扩展属性,基本库定义 */
|
|
|
|
|
|
void *app_ext; /**< 设备的应用扩展属性,应用库定义 */
|
|
|
|
|
|
void *usr_ext; /**< 设备的用户扩展属性,应用程序定义 */
|
2025-01-16 16:17:01 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef _OS_WIN32_
|
|
|
|
|
|
#pragma pack(pop)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
extern "C" {
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* _IED_STRUCT_H */
|
|
|
|
|
|
|