lnk commit front code

This commit is contained in:
lnk
2025-01-16 16:17:01 +08:00
commit 1776a2bf0d
587 changed files with 257079 additions and 0 deletions

382
include/ied.h Normal file
View File

@@ -0,0 +1,382 @@
/**
* @file: $RCSfile: ied.h,v $
* @brief: $<24><EFBFBD><E8B1B8><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD>
*
* @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) //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
#define PRV_DIGIT_EXTENSION (3) //ң<><D2A3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
#define PRV_EVENT_EXTENSION (3) //<2F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
#define PRV_PULSE_EXTENSION (2) //ң<><D2A3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
//-----ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>չ---------------//
#define ANA_EXTENSION_ALARM (0) //<2F>澯:<3A><EFBFBD>ȼ<EFBFBD>;<3B><EFBFBD><E6BEAF><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
typedef struct analog_t analog_t;
struct analog_t {
byte_t type; /**< <20><>ѹ/<2F><><EFBFBD><EFBFBD>/<2F>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>/<2F>޹<EFBFBD><DEB9><EFBFBD><EFBFBD><EFBFBD><><C6B5>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD> */
float initval; /**< ȱʡֵ */
float minimum; /**< ȡֵ<C8A1><D6B5><EFBFBD><EFBFBD> */
float maximum; /**< ȡֵ<C8A1><D6B5><EFBFBD><EFBFBD> */
float step; /**< <20><><EFBFBD><EFBFBD> */
byte_t integral; /**< precision ( n , m ) - n */
byte_t decimal; /**< precision ( n , m ) - m */
float offset; /**< ʵ<><CAB5>ֵת<D6B5><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
float factor; /**< ʵ<><CAB5>ֵת<D6B5><D7AA>ϵ<EFBFBD><CFB5> */
float threshold; /**< <20><><EFBFBD><EFBFBD>ֵ */
float smooth; /**< ƽ<><C6BD>ϵ<EFBFBD><CFB5> */
float lower; /**< <20><EFBFBD><E6BEAF><EFBFBD><EFBFBD>ֵ */
float higher; /**< <20><EFBFBD><E6BEAF><EFBFBD><EFBFBD>ֵ */
float lowest; /**< <20><><EFBFBD><EFBFBD><EFBFBD>޸澯ֵ */
float highest; /**< <20><><EFBFBD><EFBFBD><EFBFBD>޸澯ֵ */
float blur; /**< <20><>ֵģ<D6B5><C4A3>ϵ<EFBFBD><CFB5> */
char dimension[SHORTNAME]; /**< <20><><EFBFBD><EFBFBD>ASCII<49><49>ʽ(A/V/kV/kvar/kW/MW etc.) */
void *ext[PRV_ANA_EXTENSION]; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ */
}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 /**< δ<><CEB4><EFBFBD><EFBFBD> */
#define DGT_TYP_SAMPLING 0x01 /**< <20><><EFBFBD><EFBFBD> */
#define DGT_TYP_EVENT 0x02 /**< <20>¼<EFBFBD> */
#define DGT_TYP_ALARM 0x03 /**< <20>澯 */
#define DGT_TYP_OPERATE 0x04 /**< <20><><EFBFBD><EFBFBD> */
#define DGT_TYP_SYSTEM 0x05 /**< ϵͳ */
/** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˽<EFBFBD><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
struct digit_t {
byte_t type; /**< <20><><EFBFBD><EFBFBD>/<2F>¼<EFBFBD>/<2F>澯/<2F><><EFBFBD><EFBFBD>/ϵͳ */
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)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BEAF><EFBFBD><EFBFBD> */
uint16_t rst_lim; /**< (1 ==> 0)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BEAF><EFBFBD><EFBFBD> */
uint16_t act_num; /**< (0 ==> 1)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>) */
uint16_t rst_num; /**< (1 ==> 0)<29><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>) */
//<2F>ڶ<EFBFBD><DAB6><EFBFBD>ȥ<EFBFBD><C8A5>
//char on[SHORTNAME]; /**< 0==>1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ASCII<49><49>ʽ) */
//char off[SHORTNAME]; /**< 1==>0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ASCII<49><49>ʽ) */
void *ext[PRV_DIGIT_EXTENSION]; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ */
}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]; /**< ״̬0<CCAC><30>1<EFBFBD><31>2<EFBFBD><32>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
};
typedef struct sound_file_name_extention_t sound_file_name_extention_t;
struct sound_file_name_extention_t{
char *sound_file_name[3]; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¹ʱ<C2B9><CAB1><EFBFBD><EFBFBD><EFBFBD> */
};
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 /**< δ<><CEB4><EFBFBD><EFBFBD> */
#define PLS_TYP_PLUS_POWER_HV 0x01 /**< <20><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD> */
#define PLS_TYP_PLUS_POWER_NO 0x02 /**< <20><><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD> */
#define PLS_TYP_NEGATIVE_POWER_HV 0x03 /**< <20><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD> */
#define PLS_TYP_NEGATIVE_POWER_NO 0x04 /**< <20><><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD> */
struct pulse_t {
byte_t type; /**< <20><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD>޹<EFBFBD> */
uint32_t save_flag; /**< <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD> */
uint32_t initval; /**< default value */
uint32_t minimum; /**< minimum value */
uint32_t maximum; /**< maximum value */
uint32_t step; /**< <20><><EFBFBD><EFBFBD> */
//changed by zhancg 2017-04-05 <20><>ϵ<EFBFBD><CFB5>
// uint32_t offset; /**< ʵ<><CAB5>ֵת<D6B5><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
// uint32_t factor; /**< ʵ<><CAB5>ֵת<D6B5><D7AA>ϵ<EFBFBD><CFB5> */
// uint32_t threshold; /**< <20><><EFBFBD><EFBFBD>ֵ */
// uint32_t smooth; /**< ƽ<><C6BD>ϵ<EFBFBD><CFB5> */
float offset; /**< ʵ<><CAB5>ֵת<D6B5><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
float factor; /**< ʵ<><CAB5>ֵת<D6B5><D7AA>ϵ<EFBFBD><CFB5> */
float threshold; /**< <20><><EFBFBD><EFBFBD>ֵ */
float smooth; /**< ƽ<><C6BD>ϵ<EFBFBD><CFB5> */
char dimension[SHORTNAME]; /**< <20><><EFBFBD><EFBFBD>ASCII<49><49>ʽ(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]; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ,<2C>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>ֵ,<2C>µ<EFBFBD><C2B5><EFBFBD><EFBFBD><EFBFBD>ֵ */
};
typedef struct pluse_stage_const_extention_t pluse_stage_const_extention_t;
struct pluse_stage_const_extention_t{
char* stage[8]; /**< <20><>ʱ<EFBFBD><CAB1>1,<2C><>ʱ<EFBFBD><CAB1>2,<2C><>ʱ<EFBFBD><CAB1>3,<2C><>ʱ<EFBFBD><CAB1>4,<2C><>ʱ<EFBFBD><CAB1>1,<2C><>ʱ<EFBFBD><CAB1>2,<2C><>ʱ<EFBFBD><CAB1>3,<2C><>ʱ<EFBFBD><CAB1>4 */
};
//
typedef struct command_t command_t;
/** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ */
struct command_t {
ticks_t ticks; /**< Ticks when command generated */
apr_time_t tmlimit; /**< <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
byte_t state; /**< ACTIVE<56><45>FINISH or TIMEOUT */
byte_t channel; /**< command channel no */
byte_t flag; /**< General<61><6C>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 /**< <20><><EFBFBD><EFBFBD> */
#define STATUS_NOINIT 1 /**< δ<><CEB4>ʼ<EFBFBD><CABC> */
#define STATUS_OVERTIME 2 /**< ͨ<>ų<EFBFBD>ʱ */
#define STATUS_BREAKOFF 3 /**< ͨ<><CDA8><EFBFBD>ж<EFBFBD> */
#define STATUS_BLOCKED 4 /**< <20><><EFBFBD><EFBFBD> */
#define STATUS_TESTING 5 /**< <20><><EFBFBD><EFBFBD> */
#define STATUS_NOTDEF 6 /**< δ<><CEB4><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬û<CCAC><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>) */
typedef uint16_t status_t; /**< <20><EFBFBD><E8B1B8>ͨ<EFBFBD>Žڵ<C5BD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ */
typedef struct alias_t alias_t;
/** <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>صı<D8B5><C4B1><EFBFBD><EFBFBD>ṹ */
struct alias_t { /**< <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>صı<D8B5><C4B1><EFBFBD><EFBFBD>ṹ */
uint32_t id; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ַ */
uint32_t parent; /**< <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>IED */
uint32_t group; /**< <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>IED<45>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> */
uint32_t dot; /**< <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>IED<45>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> */
value_t* value; /**< <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD> */
};
typedef struct ied_t ied_t;
typedef struct group_t group_t;
typedef struct element_t element_t;
/** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢԪ<CFA2>صĽṹ */
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; /**< <20><><EFBFBD><EFBFBD><EFBFBD>豸 */
uint32_t group; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uint32_t dot; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uint16_t size; /**< <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>(<28><><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ) */
char name[LONGNAME]; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
char *aliasname; /**< <20><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD>Ӧ<EFBFBD><D3A6>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ++EPFI++ */
void *owner; /**< ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD>Խṹ(analog_t/digit_t/..../etc.) */
void *script; /**< <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ */
/** Runtime generate */
value_t value; /**< <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ʵʱ<CAB5><CAB1><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD> */
ticks_t last; /**< <20><><EFBFBD><EFBFBD><EFBFBD>仯ʱ<E4BBAF><CAB1> */
uint32_t state; /**< <20><><EFBFBD><EFBFBD>״̬ */
byte_t funtype; /**< <20>̳<EFBFBD><CCB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uint16_t index; /**< <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uint16_t n_alias_add_1; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><D0A1>Ԥ<EFBFBD><D4A4>1<EFBFBD><31><EFBFBD><EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD> */
uint16_t n_alias; /**< <20><><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD> */
alias_t* alias; /**< <20><><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uint16_t alias_pos; /**< <20><><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>ǰλ<C7B0><CEBB> */
uint32_t offset; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
group_t *grp; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
ied_t *ied; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
/* Extend property */
void *sys_ext; /**< <20><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ϵͳ<CFB5><CDB3>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>,<2C>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5> */
void *app_ext; /**< <20><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>,<2C><>Ӧ<EFBFBD>ÿ<EFBFBD>ʵ<EFBFBD><CAB5> */
void *usr_ext; /**< <20><><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>,<2C><>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>ʵ<EFBFBD><CAB5> */
};
/** 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 /**< <20><>ѹ<EFBFBD><D1B9> type */
#define GRP_STEPPOS 11 /**< Step position type */
#define GRP_COMBO 12 /**< combo/compute type */
#define GRP_SIMANA 13 /**< ģ<><C4A3><EFBFBD><EFBFBD> */
#define GRP_SETAREA 14 /**< <20><>ֵ<EFBFBD><D6B5> */
#define GRP_ACCANA 15 /**< ¼<><C2BC>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD> */
#define GRP_ACCDGT 16 /**< ¼<><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define GRP_SETPOINT 18 /**< Set point type for 101,104 protocol used only */
#define GRP_STEPCONTROL 19 /**< <20><>λ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD> */
/** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ */
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]; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uint16_t maxelems; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>elements<74><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ */
element_t *elements; /**< <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
// runtime generate
uint16_t count; /**< ʵ<>ʰ<EFBFBD><CAB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD>Ŀ */
uint16_t index; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IED->groups<70><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD> */
value_t value; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>elements<74><73>ʵʱֵ */
ied_t *ied; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
apr_hash_t *htdots; /**< <20><><EFBFBD><EFBFBD>Ԫ<EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3> */
/* Extend property */
void *sys_ext; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>,<2C>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5> */
void *app_ext; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>,<2C><>Ӧ<EFBFBD>ÿ<EFBFBD>ʵ<EFBFBD><CAB5> */
void *usr_ext; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>,<2C><>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD>ʵ<EFBFBD><CAB5> */
};
//<!-- 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) /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define IED_FLAG_BLOCKED 0x00000004 /**< <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱʡ<C8B1><CAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
#define CHANBEL_TYPE_UNKNOWN (0)
#define CHANNEL_TYPE_IPV4 (1)
#define CHANNEL_TYPE_IPV6 (2) /**< δ<><CEB4> */
#define CHANNEL_TYPE_SERIAL (3) /**< <20><><EFBFBD>ں<EFBFBD> */
#define CHANNEL_TYPE_USER_DEFINED (254) /**< <20>û<EFBFBD><C3BB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
typedef struct channel_t channel_t;
struct channel_t {
uint32_t master; /**< <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ͨ<EFBFBD><CDA8>(Node ID) */
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ2008-08-16<31><36><EFBFBD><EFBFBD><><D6A7>
int channel_type; /**< ͨ<><CDA8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> */
char addr_str[LONGNAME]; /**< ͨ<><CDA8><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʾ */
uint32_t addr; /**< ͨ<>Ŷ˿ڵ<CBBF>ַ */
uint16_t port; /**< ip<69><70>ַ<EFBFBD>Ķ˿<C4B6> */
uint32_t status; /**< ͨ<>Ŷ˿<C5B6>״̬ */
ticks_t last_ticks; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
ticks_t last_send_ticks; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯʱ<D1AF><CAB1> */
void *connect; /**< ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>Ӿ<EFBFBD><D3BE><EFBFBD> */
ied_t *ied; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
int ied_id; /**< <20><><EFBFBD><EFBFBD><EFBFBD>豸id */
};
typedef struct cpuinfo_t cpuinfo_t;
struct cpuinfo_t {
byte_t addr; /**< CPU<50><55>ַ */
byte_t status; /**< CPU״̬ */
byte_t templ; /**< CPUģ<55><C4A3> */
char name[LONGNAME]; /**< CPU<50><55><EFBFBD><EFBFBD> */
ticks_t last_gi; /**< <20><><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯʱ<D1AF><CAB1> */
ticks_t last_gi_send; /**< <20><><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
ticks_t next_gi_send; /**< <20>´<EFBFBD><C2B4>ܲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
ticks_t last_ticks; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
ticks_t last_send_ticks; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯʱ<D1AF><CAB1> */
};
/** IED struct definiens */
struct ied_t {
uint32_t id; /**< Primy key ( = 0 ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>IED ) */
uint32_t flags; /**< Flags define */
byte_t type; /**< Type define */
byte_t chncount; /**< <20>豸ͨ<E8B1B8>Ŷ˿<C5B6><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱʡ=1<><31> */
channel_t *channel; /**< <20>豸ͨ<E8B1B8>Ŷ˿<C5B6><CBBF><EFBFBD><EFBFBD><EFBFBD> */
byte_t cpucount; /**< CPU<50><55><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȱʡ=1<><31> */
cpuinfo_t *cpuinfo; /**< CPU<50><55>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> */
char name[LONGNAME]; /**< <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> */
uint32_t station; /**< <20><><EFBFBD><EFBFBD>վ<EFBFBD><D5BE><><D6B1>Ŀ¼ID> */
uint32_t node; /**< <20><><EFBFBD><EFBFBD>ͨ<EFBFBD>Žڵ<C5BD><DAB5><EFBFBD> */
uint16_t frequency; /**< ͨ<><CDA8>ɨ<EFBFBD><C9A8>Ƶ<EFBFBD><C6B5> */
uint32_t delay; /**< ͨ<><CDA8><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>ʱ(ms) */
uint16_t count; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ */
group_t *groups; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
apr_hash_t *htgroups; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B6A8><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
uint32_t systoken_st; /**< ϵͳ<CFB5><CDB3><EFBFBD>Ƶ<EFBFBD>״̬ */
/* Runtime generate */
uint16_t index; /**< <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD> */
status_t status; /**< <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬ */
ticks_t last_ticks; /**< <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> */
ticks_t last_gi; /**< <20><><EFBFBD><EFBFBD><EFBFBD>ܲ<EFBFBD>ѯʱ<D1AF><CAB1> */
/* Extend property */
void *sys_ext; /**< <20><EFBFBD><E8B1B8>ϵͳ<CFB5><CDB3>չ<EFBFBD><D5B9><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B6A8> */
void *app_ext; /**< <20><EFBFBD><E8B1B8>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><>ÿⶨ<C3BF><E2B6A8> */
void *usr_ext; /**< <20><EFBFBD><E8B1B8><EFBFBD>û<EFBFBD><C3BB><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
};
#ifdef _OS_WIN32_
#pragma pack(pop)
#endif
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif /* _IED_STRUCT_H */