/// <summary> /// 来自iDAU的计算请求 /// </summary> public static int CalcAndSave(int structid, int module, int channel, float fs, DateTime acqTime, float[] orgdata, out string err) { int affectCnt = 0; double sensitivity = 1; // 灵敏度系数 int formulaid = 0; // 计算公式 err = ""; var sensorid = DataAccessHelper.GetSensorId(structid, module, channel); if (sensorid == -1) { err = string.Format("传感器 {0}-{1}-{2} 不存在", structid, module, channel); return(0); } if (!DataAccessHelper.GetSensorParameter1(sensorid, out sensitivity, out formulaid)) { err = string.Format("传感器 {0}-{1}-{2} 参数不存在", structid, module, channel); return(0); } double[] freq, ampl; var org = new double[orgdata.Length]; for (int i = 0; i < org.Length; i++) { org[i] = orgdata[i]; } PhisicalTrans(ref org, sensitivity); if (formulaid == 21) // 包含滤波 { org = RemoveDcAndFilterWave(org); TWFFT.FFTData(org, fs, 1024, out ampl, out freq);//带平均的FFT } else { var tmp = (double[])org.Clone(); TWFFT.FFTData1(tmp, null, fs, out ampl, out freq); ampl[0] = 0; // 消除频谱中的直流分量 } CheckRedundancy(sensorid, acqTime); #if USE_BULK_COPY affectCnt = InsertDataBulk(sensorid, (int)fs, acqTime, org, freq, ampl); #else affectCnt = InsertData(sensorid, (int)fs, acqTime, org, freq, ampl); #endif return(affectCnt); }
/// <summary> /// 振动数据FFT计算/物理量转换 /// -- 来自数据接收的计算请求 /// </summary> /// <param name="sensorid">传感器ID</param> /// <param name="acqTime">采集时间</param> /// <param name="filepath">文件路径</param> /// <returns>共插入的振动数据个数(原始数据和FFT数据) -1:false </returns> public static int CalcAndSave(int sensorid, DateTime acqTime, string filepath) { int affectCnt = 0; double sensitivity = 1; // 灵敏度系数 int formulaid = 0; // 计算公式 var structId = DataAccessHelper.GetSensorStruct(sensorid); if (!DataAccessHelper.GetSensorParameter1(sensorid, out sensitivity, out formulaid)) { _logger.Warn(string.Format("计算振动数据时发生错误,传感器{0}未能找到计算系数", sensorid)); return(-1); } double[] freq, ampl; double fs = ReadParam(filepath).diSampleFreq; double[] org = ReadDatum(filepath); PhisicalTrans(ref org, sensitivity); // --FILTER BEGIN-- if (structId > 0) { var filter = ConfigHelper.GetAccFilter(structId); string err = ""; if (filter != null && !filter.IsValid(org, out err)) { throw new Exception(err); } } // --FILTER END-- if (formulaid == 21) // 包含滤波 { org = RemoveDcAndFilterWave(org); TWFFT.FFTData(org, fs, 1024, out ampl, out freq);//带平均的FFT } else { var tmp = (double[])org.Clone(); TWFFT.FFTData1(tmp, null, fs, out ampl, out freq); ampl[0] = 0; // 消除频谱中的直流分量 } CheckRedundancy(sensorid, acqTime); // 检查数据库中是否有重复数据 #if USE_BULK_COPY affectCnt = InsertDataBulk(sensorid, (int)fs, acqTime, org, freq, ampl); #else affectCnt = InsertData(sensorid, (int)fs, acqTime, org, freq, ampl); #endif return(affectCnt); }