|
|
/****************************************************************************
|
|
|
** File name : HTIEC61850Data.h
|
|
|
** Description : define iec 61850 dat file parser api
|
|
|
** Create date : 2019.09.01
|
|
|
** Auther by : Liuyx
|
|
|
** Version info : V1.0.01
|
|
|
** Copyright (C) 2002-2019 xi'an huatek, Inc Co., Ltd
|
|
|
** Update record:
|
|
|
** DATE AUTHER DESC
|
|
|
** -------------------------------------------------------------------------
|
|
|
** 2019.09.01 Liuyx first build
|
|
|
****************************************************************************/
|
|
|
#ifndef __HT_IEC_61850_ISO_DATA_H
|
|
|
#define __HT_IEC_61850_ISO_DATA_H
|
|
|
|
|
|
#if defined (__cplusplus)
|
|
|
extern "C" {
|
|
|
#endif /* defined (__cplusplus) */
|
|
|
#pragma pack (push ,1)
|
|
|
|
|
|
|
|
|
/***********************************************************************************
|
|
|
* cmtr_dat_smpdot - 数据文件中的采样点数据信息.
|
|
|
* @index: 端口序号(只是编号,解析时不做序号用);
|
|
|
* @time: 采样点采样时间偏移量,单位微妙;
|
|
|
* @analogs: 模拟量信息,一般为有符号整数,国内有些变态的仪器会生成浮点数(在此不支持);
|
|
|
* @digits: 数字量信息,为有符号整数;
|
|
|
*
|
|
|
************************************************************************************/
|
|
|
typedef struct {
|
|
|
int index;
|
|
|
int time;
|
|
|
int analogs[CMTR_ANALOG_MAX_COUNT];
|
|
|
char digits[CMTR_DIGIT_MAX_COUNT];
|
|
|
}ST_CMTR_DAT_SMPDOT;
|
|
|
|
|
|
/************************************************************************************
|
|
|
* cmtr_cfg_analog - 配置文件模拟量信息
|
|
|
* @index: 模拟量端口序号(只是编号,解析时不做序号用);
|
|
|
* @name: 模拟量端口名称;
|
|
|
* @phase: 模拟量端口相标识,值如(A、B、C、N等);
|
|
|
* @element:标识(还未知,待补充),一般为空;
|
|
|
* @unit: 模拟量端口数值的单位,该单位常用来区分该端口是电压还是电流,值如:kV、V、A、mA等;
|
|
|
* @factor_a: 系数a,一般为整数,可以是浮点数;
|
|
|
* @factor_b: 系数b,一般为整数,可以是浮点数;
|
|
|
* @offset_time: 时间偏移,指第一个点的时间偏移量,一般为0;
|
|
|
* @smp_min: 通道的最小采用值,一般为整数,国内有些变态的仪器会生成浮点数(在次不支持);
|
|
|
* @smp_max: 通道的最大采用值,一般为整数,国内有些变态的仪器会生成浮点数(在次不支持);
|
|
|
*
|
|
|
* 通道采样的实际值计算方法:实际值 = factor_a * smp_value + factor_b;所以根据该公式,可以计算
|
|
|
* 通道的最小值为:factor_a * smp_min + factor_b,最大值为:factor_a * smp_max + factor_b。
|
|
|
*
|
|
|
* 注:本来smp_min、smp_max为两个字节的一个数据(即最大为65535),但不同厂家会生成很大的四字节数据,
|
|
|
* 所以采用int类型;factor_a、factor_b用double类型,用float可能会丢精度;为了提供解析程序的适
|
|
|
* 应性,以适应国内各种变态的有标准不遵循的厂家的仪器生成的cmtr文件。
|
|
|
*
|
|
|
************************************************************************************/
|
|
|
typedef struct {
|
|
|
unsigned int index;
|
|
|
unsigned char name[CMTR_STRING_MAX_LENGTH];
|
|
|
unsigned char phase[CMTR_STRING_MAX_LENGTH];
|
|
|
unsigned char element[CMTR_STRING_MAX_LENGTH];
|
|
|
unsigned char unit[CMTR_STRING_MAX_LENGTH];
|
|
|
double factor_a;
|
|
|
double factor_b;
|
|
|
int offset_time;
|
|
|
int smp_min;
|
|
|
int smp_max;
|
|
|
}ST_CMTR_CFG_ANALOG;
|
|
|
|
|
|
/************************************************************************************
|
|
|
* cmtr_cfg_digit - 配置文件数字量信息
|
|
|
* @index: 数字量端口序号(只是编号,解析时不做序号用);
|
|
|
* @name: 数字量端口名称;
|
|
|
* @state: 数字量起始状态值,一般为1或者0,很少情况下会为2;
|
|
|
*
|
|
|
************************************************************************************/
|
|
|
typedef struct {
|
|
|
int index;
|
|
|
unsigned char name[CMTR_STRING_MAX_LENGTH];
|
|
|
char state;
|
|
|
}ST_CMTR_CFG_DIGIT;
|
|
|
|
|
|
/************************************************************************************
|
|
|
* cmtr_cfg_smprate_info - 配置文件采样点信息
|
|
|
* @rate: 采样率,一般为整数,也有小数表示的;
|
|
|
* @point: 该采样率下采样的点数,为整数;
|
|
|
*
|
|
|
************************************************************************************/
|
|
|
typedef struct {
|
|
|
float rate;
|
|
|
int point;
|
|
|
}ST_CMTR_CFG_SMPRATE;
|
|
|
|
|
|
/************************************************************************************
|
|
|
* cmtr_cfg_info - 配置文件信息。
|
|
|
* @station_name: 厂站名称;
|
|
|
* @kymograph_id: 录波器编号;
|
|
|
* @analog_count: 模拟量个数;
|
|
|
* @digit_count: 数字量个数;
|
|
|
* @analogs: 模拟量信息;
|
|
|
* @digits: 数字量信息;
|
|
|
* @frequency: 基本频率,一般为额定频率,指的是电网频率;
|
|
|
* @smprate_count: 采样率个数;
|
|
|
* @smprates: 采样率信息;
|
|
|
* @begin_time: 录波开始时间;
|
|
|
* @end_time: 录波结束时间;
|
|
|
* @file_type: 数据文件类型,可以“ASCII”和“Binary”,ASCII类型为dat文件可以用记事本打开看详
|
|
|
* 细的采样信息;binary格式的只能用特殊的工具查看,为二进制数据文件;
|
|
|
************************************************************************************/
|
|
|
typedef struct {
|
|
|
unsigned char station_name[CMTR_STRING_MAX_LENGTH];
|
|
|
unsigned char kymograph_id[CMTR_STRING_MAX_LENGTH];
|
|
|
int analog_count;
|
|
|
int digit_count;
|
|
|
ST_CMTR_CFG_ANALOG analogs[CMTR_ANALOG_MAX_COUNT];
|
|
|
ST_CMTR_CFG_DIGIT digits[CMTR_DIGIT_MAX_COUNT];
|
|
|
float frequency;
|
|
|
int smprate_count;
|
|
|
ST_CMTR_CFG_SMPRATE smprates[CMTR_SMPRATE_MAX_COUNT];
|
|
|
unsigned char begin_time[CMTR_STRING_MAX_LENGTH];
|
|
|
unsigned char end_time[CMTR_STRING_MAX_LENGTH];
|
|
|
unsigned char file_type[CMTR_STRING_MAX_LENGTH];
|
|
|
}ST_CMTR_CFG_INFO;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma pack (pop)
|
|
|
#if defined (__cplusplus)
|
|
|
}
|
|
|
#endif /* defined (__cplusplus) */
|
|
|
|
|
|
#endif /* __HT_IEC61850_DATA_H */
|