E015.D.011-FXLS90230/Drivers/BSP/DataProcess.h

137 lines
5.2 KiB
C

#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