/// <summary> /// 处理振动数据计算请求 /// </summary> /// <param name="filename">原始数据文件路径</param> /// <param name="sensorId">传感器ID</param> /// <param name="acqTime">数据采集时间</param> /// <param name="calcCompletion">计算完成通知方法</param> public void ProcessRequest(string filename, int sensorId, DateTime acqTime, Action <IEnumerable <string> > calcCompletion) { if (string.IsNullOrEmpty(filename)) { return; } try { ACCSensor.CalcAndSave(sensorId, acqTime, filename); _logger.Info(string.Format("处理数据 监测因素:振动 传感器ID:{0}, 采集时间:{1}, 数据文件:{2}", sensorId, acqTime, filename)); } catch (System.Exception ex) { _logger.Error(string.Format("处理振动数据计算请求时发生异常 SensorID:{0}, AcqTime:{1}, File:{2}, {3}", sensorId, acqTime, filename, ex.Message)); } }
/// <summary> /// 单文件格式振动数据的解析和计算 /// </summary> public static ParserReturn Parse(int structid, string file) { ParserReturn pr = null; if (IsFileOccupation(structid, file, out pr)) { return(pr); } try { using (var fs = new FileStream(file, FileMode.Open, FileAccess.Read)) { var br = new BinaryReader(fs); ushort T = br.ReadUInt16(); ushort L = br.ReadUInt16(); TriggerSaveFileTitle title = (TriggerSaveFileTitle) StructConvert.BytesToStruct(br.ReadBytes(L), typeof(TriggerSaveFileTitle)); var ch = title.CHNum; var mod = title.DeviceID; var fre = title.SampleFreq; var time = new DateTime(2000 + title.year, title.mon, title.day, title.hour, title.min, title.sec); var cnt = title.L_Date / 4; var org = new float[cnt]; for (var i = 0; i < cnt; i++) { org[i] = br.ReadSingle(); } fs.Close(); #if DEBUG //-- 生成数据文件 if (!Directory.Exists("debug")) { Directory.CreateDirectory("debug"); } var debugfile = Path.Combine("debug", Path.GetFileNameWithoutExtension(file) + DateTime.Now.ToString("HHmmss") + ".txt"); using (var fsw = new FileStream(debugfile, FileMode.Create, FileAccess.ReadWrite)) { StreamWriter sw = new StreamWriter(fsw); for (var i = 0; i < cnt; i++) { sw.WriteLine(org[i]); } fsw.Close(); } #endif string err; var affects = ACCSensor.CalcAndSave(structid, mod, ch, fre, time, org, out err); pr = new ParserReturn { Error = err, Struct = structid, File = file, Time = time, Affects = affects, mod = mod, ch = ch, Period = (int)(cnt / fre), freq = (int)fre }; } } catch (Exception ex) { pr = new ParserReturn { Error = ex.Message, Struct = structid, File = file, Time = DateTime.Now, Affects = 0, mod = 0, ch = 0, Period = 0, freq = 0 }; } return(pr); }