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