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.

138 lines
5.4 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.

/****************************************************************************
** 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 */