#ifndef __DATAPROCESS_H #define __DATAPROCESS_H #include "main.h" #include "system.h" //#include "stm32f30x_tim.h" #define OVER_VALUE_TIMES 4 //超过次数 #define COLLECT_SPEC_TIME 1 //采集时间 #define STORE_DATA_SIZE 600 //存储采集数据缓存 #define SECTOR_DATA_SIZE 512 //单个扇区包含字节数 #define ALLOW_GETDATA_TIMES 30 //指令响应后等待30s重新进入采集 #define SECTOR_DATA_SIZE 512 //单个扇区包含字节数 #define SECTOR_VIBRATION_GROUPS 64 //振动单个扇区包含字节数 #define SECTOR_SPEED_GROUPS 128 //转速单个扇区包含字节数 #define VIBRATION_SECTOR_START 10 //振动存储起始扇区 #define VIBRATION_SECTOR_END 59000000 //振动存储结束扇区 振动存储扇区范围 10-59000000 0x0A #define SPEED_SECTOR_START 59000100 //转速温度存储起始扇区 #define SPEED_SECTOR_END 61600000 //转速温度存储结束扇区 转速温度存储扇区范围 59000100-61600000 0x3844524 #define DATA_BIT0 0x01 //允许采集计算位 typedef struct Get_Collect_Data { unsigned char Store_Get_Data[STORE_DATA_SIZE]; //存储数据数组 // unsigned char Collect_Spec_Time; //最小定时时间 uint16_t Store_Data_Count; //存储数据记录 uint16_t GET_Data_times; //采集计数 uint16_t Sampling_Wite_times; //采样时间 uint16_t get_tpd; //钻压定时器计数值 uint8_t get_tps; //振动分频值 // u8 Store_Data_Cound; //存储数据计数 }GET_COLLECT_DATA; //振动数据 typedef struct VibrateData { float ViaX_Data; //x轴 float ViaY_Data; //y轴 float ViaZ_Data; //z轴 }VIBRA_DATA; //typedef struct VibrateData //{ // int ViaX_Data; //x轴 // int ViaY_Data; //y轴 // int ViaZ_Data; //z轴 //}VIBRA_DATA; //#define DATALENG 15 // 假设 DATALENG 的值为25 #define DATALENG 25 // 假设 DATALENG 的值为25 #define ROWS 15 #define COLS_NORMAL 5 #define COLS_ABNORMAL 1 typedef union tuGetDataValue { float DataValue[DATALENG]; unsigned char ucDataValueBuf[DATALENG*4]; struct{ float Mean_InPress; //内压平均值 float Mean_OutPress; //外压平均值 float Mean_WOB; //钻压平均值 float Mean_Torque; //扭矩平均值 float Mean_RPM; //转速平均值 float Mean_InTemprature; //管内温度平均值 float Mean_OutTemprature; //环空温度平均值 float Mean_AxisX; //X轴振动平均值 float Mean_AxisY; //X轴振动平均值 float Mean_AxisZ; //X轴振动平均值 float Mean_InDielectric; //管内介电平均值 float Mean_OutDielectric; //环空介电平均值 float Different_Press; //压力差值 float Energy_InPress; //内压能量值 float Energy_OutPress; //外压能量值 float Amplitude_WOB; //钻压幅度值 float Variance_WOB; //钻压方差 float Amplitude_Torque; //扭矩幅度值 float Variance_Torque; //扭矩方差 float Amplitude_RPM; //转速幅度值 float Variance_RPM; //转速方差 float Vibration_AxisX; //X轴振动严重性 float Vibration_AxisY; //Y轴振动严重性 float Vibration_AxisZ; //Z轴振动严重性 float Variance_Vibration; //振动方差 }; }GetDataValue; typedef struct { // 存储正常情况的权重和标准化相关数据 float weights_normal[ROWS][COLS_NORMAL]; // 正常情况的权重 float std_scores_normal[COLS_NORMAL]; // 正常情况的标准化得分 float range_values[COLS_NORMAL]; // 正常情况的范围值 // 存储异常情况的权重和标准化相关数据 float weights_abnormal[ROWS][COLS_ABNORMAL]; // 异常情况的权重 float std_scores_abnormal[COLS_ABNORMAL]; // 异常情况的标准化得分 // 存储每行的最小值和最大值(可能用于归一化等操作) float min_values[ROWS]; // 每行的最小值 float max_values[ROWS]; // 每行的最大值 }GetFeatureValue; extern GetDataValue MeasurementData_Nearbit; //近端测量值 extern GetDataValue MeasurementData_Farbit; //远端测量值 extern GET_COLLECT_DATA GET_Vibration_Data; //振动数据采集 extern GET_COLLECT_DATA GET_Speed_Data; //转速数据采集 extern GET_COLLECT_DATA GET_WobTor_Data; //钻压扭矩数据采集 extern VIBRA_DATA Vibrate_Data_Value; //计算振动数值 extern unsigned char Get_MeasureData(GetDataValue DataValeNear); extern void Get_Data_Process(void); //数据采集处理 extern void DataCompute(void); //数据计算 //extern void Data_Process(void); //数据处理 extern void Store_Vibration_Speed_Time(void); //时间存储 extern void updatetime (void); //时间更新 extern void Data_Cllect(void); extern void Store_Time_Once(void); //存储一次时间 extern void Store_CollVibrateTime_Once(void); // extern void Store_CollSpeedTime_Once(void); // //extern int Get_Mid_Data(int data1,int data2,int data3); //extern int Get_Mid_Data(unsigned int data1,unsigned int data2,unsigned int data3); //extern void Store_Time_Once(void); //extern void GET_MaxData(void); //提取频点及幅值 //extern void GET_SpotData(void); //提取间隔频点数据 //extern void GET_MaxData_Gate(void); //按频点间隔获得幅频数据 //extern void GET_Sort(long *DatTab,unsigned int length,unsigned int *DatOrder); #endif