diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 4fde315..555343a 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -59,7 +59,7 @@ FlowStatus.RedSensorTagLists.Clear(); FlowStatus.BlueSensorTagLists.Clear(); - //延迟5s开始计算 + //延迟3s开始计算 _runningTimer.Start(); } }); @@ -67,7 +67,7 @@ _runningTimer.Tick += delegate { _runningSeconds++; - if (_runningSeconds >= 5) + if (_runningSeconds >= 3) { _runningTimer.Stop(); Messenger.Default.Send(_dataModel, MessengerToken.HomePageDeviceData); diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 4fde315..555343a 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -59,7 +59,7 @@ FlowStatus.RedSensorTagLists.Clear(); FlowStatus.BlueSensorTagLists.Clear(); - //延迟5s开始计算 + //延迟3s开始计算 _runningTimer.Start(); } }); @@ -67,7 +67,7 @@ _runningTimer.Tick += delegate { _runningSeconds++; - if (_runningSeconds >= 5) + if (_runningSeconds >= 3) { _runningTimer.Stop(); Messenger.Default.Send(_dataModel, MessengerToken.HomePageDeviceData); diff --git a/Correlator/ViewModel/HomePageProViewModel.cs b/Correlator/ViewModel/HomePageProViewModel.cs index f6db7c0..3f7b697 100644 --- a/Correlator/ViewModel/HomePageProViewModel.cs +++ b/Correlator/ViewModel/HomePageProViewModel.cs @@ -490,72 +490,8 @@ }); //计算测试数据 - Messenger.Default.Register(this, MessengerToken.HomePageDeviceData, it => - { - //开始计算停止收集指令 - if (!FlowStatus.IsHydrophone) - { - _accelerometerCommandTimer.Stop(); - } - - //给音频数据赋值 - FlowStatus.CorrelatorData = it; - using (var manager = new DataBaseManager()) - { - var today = DateTime.Now.ToString("yyyyMMdd"); - var configModel = manager - .Table() - .Where(x => x.Date == today) - .OrderBy(x => x.Date) - .LastOrDefault() ?? new CorrelatorConfigModel - { - Date = today, - Pipe = 1, - LocateTimes = 1, - ListenTimes = 1 - }; - - //如果配置里面的日期相同,则取配置里面的Pipe作为index,如果配置里面的日期不相同,则默认index=1 - var pipeIndex = configModel.Date.Equals(today) ? configModel.Pipe : 1; - _locateDataDir = Constant.GetLocateDataDir(pipeIndex); - _locateTimes = configModel.LocateTimes; - - //计算 - try - { - //异步保存定位数据 - new TaskFactory().StartNew(delegate - { - var fileName = _locateDataDir + "\\测试数据." + _locateTimes + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - StringUtil.SaveLocateData(it, fileName); - "HomePageViewModel".WriteLog("定位数据路径:" + fileName); - }); - - //异步计算数据 - var task = new Task(() => CalculateData(it)); - task.Start(); - - //同步保存截图,需要等待Task出结果并且渲染完成,才能保存截图 - _snapShotPath = _locateDataDir + "\\快照." + _locateTimes + "." + - DateTime.Now.ToString("HHmmss") + ".png"; - - if (task.Result) - { - _snapShotTimer.Start(); - } - - //插入新纪录 - configModel.Pipe++; - configModel.LocateTimes++; - manager.Insert(configModel); - } - catch (Exception e) - { - "HomePageViewModel".WriteLog(e.Message); - } - } - }); + Messenger.Default.Register(this, MessengerToken.HomePageDeviceData, + StartCalculateData); //水听器 Messenger.Default.Register(this, MessengerToken.ShowCheckResponseDialog, s => @@ -566,6 +502,94 @@ }); } + private async void StartCalculateData(CorrelatorDataModel it) + { + //开始计算停止收集指令 + if (!FlowStatus.IsHydrophone) + { + _accelerometerCommandTimer.Stop(); + } + + //给音频数据赋值 + FlowStatus.CorrelatorData = it; + using (var manager = new DataBaseManager()) + { + var today = DateTime.Now.ToString("yyyyMMdd"); + var configModel = manager.Table() + .Where(x => x.Date == today) + .OrderBy(x => x.Date) + .LastOrDefault() ?? new CorrelatorConfigModel + { Date = today, Pipe = 1, LocateTimes = 1, ListenTimes = 1 }; + + //如果配置里面的日期相同,则取配置里面的Pipe作为index,如果配置里面的日期不相同,则默认index=1 + var pipeIndex = configModel.Date.Equals(today) ? configModel.Pipe : 1; + _locateDataDir = Constant.GetLocateDataDir(pipeIndex); + _locateTimes = configModel.LocateTimes; + + //计算 + try + { + DialogHub.Get.ShowLoadingDialog(_homePageWindow, "样品数据计算中,请稍后..."); + //开始计算就不收集收据了 + FlowStatus.CanCollectData = false; + + //异步保存定位数据 + // var fileName = _locateDataDir + "\\测试数据." + _locateTimes + "." + // + DateTime.Now.ToString("HHmmss") + ".txt"; + // var isSaveSuccess = await SaveSaveLocateData(it, fileName); + // if (isSaveSuccess) + // { + // "HomePageViewModel".WriteLog("定位数据路径:" + fileName); + // } + + //异步计算数据 + var array = await GetCalculateResult(it); + if (array == null) return; + + //数据绑定 + var snr = Convert.ToDouble(array[0].ToString()); //信噪比 + Snr = snr.ToString("0.0") + ":1"; + RedTransmitterDistance = Convert.ToDouble(array[1].ToString()); //距离A + BlueTransmitterDistance = Convert.ToDouble(array[2].ToString()); //距离B + //最大相关系数 + var maxCorrelationCoefficient = Convert.ToDouble(array[3].ToString()); + + //时间差 + var timeDiff = Convert.ToDouble(array[6].ToString()); + + //将数据发送到HomePageWindow.xaml.cs页面进行渲染 + Messenger.Default.Send(array, MessengerToken.RenderOscillogram); + + var maxFreLowOut = Convert.ToInt32(array[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(array[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(array[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(array[9].ToString()); //总的调用次数 + + FilterValue = maxFreLowOut + " ~ " + maxFreHighOut + "Hz"; + + _runningTimer.Stop(); + StartButtonEnabled = true; + FlowStatus.RedSensorIsEnable = false; + FlowStatus.BlueSensorIsEnable = false; + DialogHub.Get.DismissLoadingDialog(); + + //同步保存截图,需要等待Task出结果并且渲染完成,才能保存截图 + _snapShotPath = _locateDataDir + "\\快照." + _locateTimes + "." + DateTime.Now.ToString("HHmmss") + + ".png"; + _snapShotTimer.Start(); + + //插入新纪录 + configModel.Pipe++; + configModel.LocateTimes++; + manager.Insert(configModel); + } + catch (Exception e) + { + "HomePageViewModel".WriteLog(e.Message); + } + } + } + /// /// 各种定时器 /// @@ -828,55 +852,34 @@ FlowStatus.CanCollectData = false; } + private Task SaveSaveLocateData(CorrelatorDataModel dataModel, string fileName) + { + return Task.Run(() => StringUtil.SaveLocateData(dataModel, fileName)); + } + /// /// Matlab计算过程 /// /// 收集到的传感器数据 /// 计算结果 - private bool CalculateData(CorrelatorDataModel dataModel) + private Task GetCalculateResult(CorrelatorDataModel dataModel) { - DialogHub.Get.ShowLoadingDialog(_homePageWindow, "样品数据计算中,请稍后..."); - //开始计算就不收集收据了 - FlowStatus.CanCollectData = false; - var array = _correlator.locating(11, - (MWNumericArray)dataModel.LeftDeviceDataArray, (MWNumericArray)dataModel.RightDeviceDataArray, - Constant.SamplingRate, - int.Parse(_pipeLength), int.Parse(_soundSpeed), - 0, 0, - 0, 0, - _pipeName, - int.Parse(_pipeDiameter), int.Parse(_pipeDiameter), - 1, -1, - -1, -1, - int.Parse(_lowFrequency), int.Parse(_highFrequency)); - - //数据绑定 - var snr = Convert.ToDouble(array[0].ToString()); //信噪比 - Snr = snr.ToString("0.0") + ":1"; - RedTransmitterDistance = Convert.ToDouble(array[1].ToString()); //距离A - BlueTransmitterDistance = Convert.ToDouble(array[2].ToString()); //距离B - //最大相关系数 - var maxCorrelationCoefficient = Convert.ToDouble(array[3].ToString()); - - //时间差 - var timeDiff = Convert.ToDouble(array[6].ToString()); - - //将数据发送到HomePageWindow.xaml.cs页面进行渲染 - Messenger.Default.Send(array, MessengerToken.RenderOscillogram); - - var maxFreLowOut = Convert.ToInt32(array[6].ToString()); //低频 - var maxFreHighOut = Convert.ToInt32(array[7].ToString()); //高频 - var flag = Convert.ToBoolean(Convert.ToInt32(array[8].ToString())); //是否泄漏 - var totalNum = Convert.ToInt32(array[9].ToString()); //总的调用次数 - - FilterValue = maxFreLowOut + " ~ " + maxFreHighOut + "Hz"; - - _runningTimer.Stop(); - StartButtonEnabled = true; - FlowStatus.RedSensorIsEnable = false; - FlowStatus.BlueSensorIsEnable = false; - DialogHub.Get.DismissLoadingDialog(); - return true; + var task = Task.Run(delegate + { + var array = _correlator.locating(11, + (MWNumericArray)dataModel.LeftDeviceDataArray, (MWNumericArray)dataModel.RightDeviceDataArray, + Constant.SamplingRate, + int.Parse(_pipeLength), int.Parse(_soundSpeed), + 0, 0, + 0, 0, + _pipeName, + int.Parse(_pipeDiameter), int.Parse(_pipeDiameter), + 1, -1, + -1, -1, + int.Parse(_lowFrequency), int.Parse(_highFrequency)); + return array; + }); + return task; } } } \ No newline at end of file