diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs index 0d2400a..8066527 100644 --- a/Correlator/Dialog/CheckResponseDialog.xaml.cs +++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs @@ -141,12 +141,17 @@ { //下发数据全部正常指令 CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev1, new List()); - + + //保存原始数据 + FlowStatus.RedSensorOriginalResp.SaveSensorResponse(DevCode.Dev1); + //处理数据 var tags = new List(); - foreach (var list in FlowStatus.RedSensorTagLists) + foreach (var list in FlowStatus.RedSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev1, tags); @@ -189,12 +194,17 @@ else if (BlueSensorStepBar.StepIndex == 2) { CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev2, new List()); + + //保存原始数据 + FlowStatus.BlueSensorOriginalResp.SaveSensorResponse(DevCode.Dev2); //处理数据 var tags = new List(); - foreach (var list in FlowStatus.BlueSensorTagLists) + foreach (var list in FlowStatus.BlueSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev2, tags); diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs index 0d2400a..8066527 100644 --- a/Correlator/Dialog/CheckResponseDialog.xaml.cs +++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs @@ -141,12 +141,17 @@ { //下发数据全部正常指令 CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev1, new List()); - + + //保存原始数据 + FlowStatus.RedSensorOriginalResp.SaveSensorResponse(DevCode.Dev1); + //处理数据 var tags = new List(); - foreach (var list in FlowStatus.RedSensorTagLists) + foreach (var list in FlowStatus.RedSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev1, tags); @@ -189,12 +194,17 @@ else if (BlueSensorStepBar.StepIndex == 2) { CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev2, new List()); + + //保存原始数据 + FlowStatus.BlueSensorOriginalResp.SaveSensorResponse(DevCode.Dev2); //处理数据 var tags = new List(); - foreach (var list in FlowStatus.BlueSensorTagLists) + foreach (var list in FlowStatus.BlueSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev2, tags); diff --git a/Correlator/Util/FlowStatus.cs b/Correlator/Util/FlowStatus.cs index ad1e0fb..4220840 100644 --- a/Correlator/Util/FlowStatus.cs +++ b/Correlator/Util/FlowStatus.cs @@ -39,10 +39,16 @@ //水听器下发唤醒指令时间戳 public static byte[] HydrophoneWakeUpTimeBytes = new byte[6]; - //水听器红色信号接收器数据 - public static readonly List> RedSensorTagLists = new List>(); + //水听器红色信号接收器原始数据 + public static readonly List RedSensorOriginalResp = new List(); - //水听器蓝色信号接收器数据 - public static readonly List> BlueSensorTagLists = new List>(); + //水听器红色信号接收器解析之后的Tags + public static readonly List> RedSensorResponseTags = new List>(); + + //水听器红色信号接收器原始数据 + public static readonly List BlueSensorOriginalResp = new List(); + + //水听器蓝色信号接收器解析之后的Tags + public static readonly List> BlueSensorResponseTags = new List>(); } } \ No newline at end of file diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs index 0d2400a..8066527 100644 --- a/Correlator/Dialog/CheckResponseDialog.xaml.cs +++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs @@ -141,12 +141,17 @@ { //下发数据全部正常指令 CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev1, new List()); - + + //保存原始数据 + FlowStatus.RedSensorOriginalResp.SaveSensorResponse(DevCode.Dev1); + //处理数据 var tags = new List(); - foreach (var list in FlowStatus.RedSensorTagLists) + foreach (var list in FlowStatus.RedSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev1, tags); @@ -189,12 +194,17 @@ else if (BlueSensorStepBar.StepIndex == 2) { CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev2, new List()); + + //保存原始数据 + FlowStatus.BlueSensorOriginalResp.SaveSensorResponse(DevCode.Dev2); //处理数据 var tags = new List(); - foreach (var list in FlowStatus.BlueSensorTagLists) + foreach (var list in FlowStatus.BlueSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev2, tags); diff --git a/Correlator/Util/FlowStatus.cs b/Correlator/Util/FlowStatus.cs index ad1e0fb..4220840 100644 --- a/Correlator/Util/FlowStatus.cs +++ b/Correlator/Util/FlowStatus.cs @@ -39,10 +39,16 @@ //水听器下发唤醒指令时间戳 public static byte[] HydrophoneWakeUpTimeBytes = new byte[6]; - //水听器红色信号接收器数据 - public static readonly List> RedSensorTagLists = new List>(); + //水听器红色信号接收器原始数据 + public static readonly List RedSensorOriginalResp = new List(); - //水听器蓝色信号接收器数据 - public static readonly List> BlueSensorTagLists = new List>(); + //水听器红色信号接收器解析之后的Tags + public static readonly List> RedSensorResponseTags = new List>(); + + //水听器红色信号接收器原始数据 + public static readonly List BlueSensorOriginalResp = new List(); + + //水听器蓝色信号接收器解析之后的Tags + public static readonly List> BlueSensorResponseTags = new List>(); } } \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs index 39028d5..37a42c0 100644 --- a/Correlator/Util/MethodExtensions.cs +++ b/Correlator/Util/MethodExtensions.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Correlator.Model; using Correlator.SensorHubTag; using HandyControl.Controls; using MathWorks.MATLAB.NET.Arrays; @@ -290,5 +292,107 @@ return "未知类型数据"; } } + + /// + /// 二维集合转为一维数组 + /// + /// 二维集合 + /// + public static double[] ToOneDimensionalArray(this List> doubleArrays) + { + var totalData = new List(); + foreach (var item in doubleArrays) + { + totalData.AddRange(item); + } + + return totalData.ToArray(); + } + + /// + /// 本地数据转 CorrelatorDataModel + /// + /// + /// + public static CorrelatorDataModel LocalDataToDataModel(this List strResponses) + { + var dataModel = new CorrelatorDataModel(); + var index = strResponses.IndexOf("==============="); + + var leftCacheData = new double[7500 * 60]; + for (var i = 1; i < index; i++) + { + try + { + leftCacheData[i - 1] = Convert.ToDouble(strResponses[i]); + } + catch (FormatException e) + { + Console.WriteLine(e); + Debug.WriteLine($"MethodExtensions => {strResponses[i]}"); + throw; + } + } + + dataModel.DevCode = DevCode.Dev1; + dataModel.LeftReceiveDataTime = DateTime.Now; + dataModel.LeftDeviceDataArray = leftCacheData; + + var rightCacheData = new double[7500 * 60]; + //450001 - 900000 + for (var i = index + 1; i < strResponses.Count; i++) + { + try + { + rightCacheData[i - 450002] = Convert.ToDouble(strResponses[i]); + } + catch (FormatException e) + { + Console.WriteLine(e); + Debug.WriteLine($"MethodExtensions => {strResponses[i]}"); + throw; + } + } + + dataModel.DevCode = DevCode.Dev2; + dataModel.RightReceiveDataTime = DateTime.Now; + dataModel.RightDeviceDataArray = rightCacheData; + return dataModel; + } + + /// + /// 保存传感器上传的原始数据 + /// + /// + /// + public static void SaveSensorResponse(this List response, string devCode) + { + var rootDir = Constant.GetLocateDataDir(short.MaxValue); + string fileName; + if (devCode == DevCode.Dev1) + { + fileName = rootDir + "\\原始数据." + DateTime.Now.ToString("HHmmss") + ".txt"; + } + else + { + fileName = rootDir + "\\原始数据." + DateTime.Now.ToString("HHmmss") + ".txt"; + } + + var builder = new StringBuilder(); + for (var i = 0; i < response.Count; i++) + { + var str = response[i]; + if (i == response.Count - 1) + { + builder.Append(str); + } + else + { + builder.Append(str).Append("\r\n"); + } + } + + File.AppendAllText(fileName, builder.ToString()); + } } } \ No newline at end of file diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs index 0d2400a..8066527 100644 --- a/Correlator/Dialog/CheckResponseDialog.xaml.cs +++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs @@ -141,12 +141,17 @@ { //下发数据全部正常指令 CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev1, new List()); - + + //保存原始数据 + FlowStatus.RedSensorOriginalResp.SaveSensorResponse(DevCode.Dev1); + //处理数据 var tags = new List(); - foreach (var list in FlowStatus.RedSensorTagLists) + foreach (var list in FlowStatus.RedSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev1, tags); @@ -189,12 +194,17 @@ else if (BlueSensorStepBar.StepIndex == 2) { CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev2, new List()); + + //保存原始数据 + FlowStatus.BlueSensorOriginalResp.SaveSensorResponse(DevCode.Dev2); //处理数据 var tags = new List(); - foreach (var list in FlowStatus.BlueSensorTagLists) + foreach (var list in FlowStatus.BlueSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev2, tags); diff --git a/Correlator/Util/FlowStatus.cs b/Correlator/Util/FlowStatus.cs index ad1e0fb..4220840 100644 --- a/Correlator/Util/FlowStatus.cs +++ b/Correlator/Util/FlowStatus.cs @@ -39,10 +39,16 @@ //水听器下发唤醒指令时间戳 public static byte[] HydrophoneWakeUpTimeBytes = new byte[6]; - //水听器红色信号接收器数据 - public static readonly List> RedSensorTagLists = new List>(); + //水听器红色信号接收器原始数据 + public static readonly List RedSensorOriginalResp = new List(); - //水听器蓝色信号接收器数据 - public static readonly List> BlueSensorTagLists = new List>(); + //水听器红色信号接收器解析之后的Tags + public static readonly List> RedSensorResponseTags = new List>(); + + //水听器红色信号接收器原始数据 + public static readonly List BlueSensorOriginalResp = new List(); + + //水听器蓝色信号接收器解析之后的Tags + public static readonly List> BlueSensorResponseTags = new List>(); } } \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs index 39028d5..37a42c0 100644 --- a/Correlator/Util/MethodExtensions.cs +++ b/Correlator/Util/MethodExtensions.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Correlator.Model; using Correlator.SensorHubTag; using HandyControl.Controls; using MathWorks.MATLAB.NET.Arrays; @@ -290,5 +292,107 @@ return "未知类型数据"; } } + + /// + /// 二维集合转为一维数组 + /// + /// 二维集合 + /// + public static double[] ToOneDimensionalArray(this List> doubleArrays) + { + var totalData = new List(); + foreach (var item in doubleArrays) + { + totalData.AddRange(item); + } + + return totalData.ToArray(); + } + + /// + /// 本地数据转 CorrelatorDataModel + /// + /// + /// + public static CorrelatorDataModel LocalDataToDataModel(this List strResponses) + { + var dataModel = new CorrelatorDataModel(); + var index = strResponses.IndexOf("==============="); + + var leftCacheData = new double[7500 * 60]; + for (var i = 1; i < index; i++) + { + try + { + leftCacheData[i - 1] = Convert.ToDouble(strResponses[i]); + } + catch (FormatException e) + { + Console.WriteLine(e); + Debug.WriteLine($"MethodExtensions => {strResponses[i]}"); + throw; + } + } + + dataModel.DevCode = DevCode.Dev1; + dataModel.LeftReceiveDataTime = DateTime.Now; + dataModel.LeftDeviceDataArray = leftCacheData; + + var rightCacheData = new double[7500 * 60]; + //450001 - 900000 + for (var i = index + 1; i < strResponses.Count; i++) + { + try + { + rightCacheData[i - 450002] = Convert.ToDouble(strResponses[i]); + } + catch (FormatException e) + { + Console.WriteLine(e); + Debug.WriteLine($"MethodExtensions => {strResponses[i]}"); + throw; + } + } + + dataModel.DevCode = DevCode.Dev2; + dataModel.RightReceiveDataTime = DateTime.Now; + dataModel.RightDeviceDataArray = rightCacheData; + return dataModel; + } + + /// + /// 保存传感器上传的原始数据 + /// + /// + /// + public static void SaveSensorResponse(this List response, string devCode) + { + var rootDir = Constant.GetLocateDataDir(short.MaxValue); + string fileName; + if (devCode == DevCode.Dev1) + { + fileName = rootDir + "\\原始数据." + DateTime.Now.ToString("HHmmss") + ".txt"; + } + else + { + fileName = rootDir + "\\原始数据." + DateTime.Now.ToString("HHmmss") + ".txt"; + } + + var builder = new StringBuilder(); + for (var i = 0; i < response.Count; i++) + { + var str = response[i]; + if (i == response.Count - 1) + { + builder.Append(str); + } + else + { + builder.Append(str).Append("\r\n"); + } + } + + File.AppendAllText(fileName, builder.ToString()); + } } } \ No newline at end of file diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 091cc04..3a05341 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -103,14 +103,21 @@ //取出seq,确定收到的是第几包数据 FlowStatus.SeqCaches.Add(receiveData[15]); + var response = BitConverter.ToString(receiveData).Replace("-", ""); //收集数据 if (strDeviceId.Equals(DevCode.Dev1)) { - FlowStatus.RedSensorTagLists.Add(tags); + //原始数据 + FlowStatus.RedSensorOriginalResp.Add(response); + //解析之后的数据 + FlowStatus.RedSensorResponseTags.Add(tags); } else { - FlowStatus.BlueSensorTagLists.Add(tags); + //原始数据 + FlowStatus.BlueSensorOriginalResp.Add(response); + //解析之后的数据 + FlowStatus.BlueSensorResponseTags.Add(tags); } } @@ -215,22 +222,18 @@ _dataModel = new CorrelatorDataModel(); } - var clobData = new double[3750]; //3750个采样点 - //处理接到的噪声数据 var noiseTag = tags.GetUploadNoiseTag(); if (noiseTag != null) { - var len = noiseTag.Len; - var dataValue = noiseTag.DataValue; - - var num = len / 3; //上传的噪声数据个数,修改末3个字节 + var num = noiseTag.Len / 3; + var realData = new double[num]; for (var i = 0; i < num; i++) { var dStr = new byte[3]; - Array.Copy(dataValue, i * 3, dStr, 0, 3); + Array.Copy(noiseTag.DataValue, i * 3, dStr, 0, 3); - clobData[i] = dStr.HexToDouble(); + realData[i] = dStr.HexToDouble(); } _dataModel.DevCode = devCode; @@ -238,13 +241,13 @@ { //接收到数据之后时间重新赋值 _dataModel.LeftReceiveDataTime = DateTime.Now; - _dataModel.LeftDeviceDataArray = clobData; + _dataModel.LeftDeviceDataArray = realData; } else { //接收到数据之后时间重新赋值 _dataModel.RightReceiveDataTime = DateTime.Now; - _dataModel.RightDeviceDataArray = clobData; + _dataModel.RightDeviceDataArray = realData; } //发送消息计算数据 @@ -270,8 +273,8 @@ /// /// 水听器数据 /// - /// - /// + /// 传感器编号 + /// UploadTag的集合 public void HandleHydrophoneData(string devCode, List tags) { if (_dataModel == null) @@ -279,65 +282,36 @@ _dataModel = new CorrelatorDataModel(); } - var clobData = new double[7500 * 60]; //7500*60个采样点 - var noiseTag = tags.GetUploadNoiseTag(); - if (noiseTag != null) + var doubleArrays = new List>(); + foreach (var tag in tags) { - var len = noiseTag.Len; - var dataValue = noiseTag.DataValue; - - var num = len / 3; //上传的噪声数据个数,修改末3个字节 + var num = tag.Len / 3; //上传的噪声数据个数,修改末3个字节 + //单条数据得到的UploadTag转化为 List + var realData = new List(); for (var i = 0; i < num; i++) { var dStr = new byte[3]; - Array.Copy(dataValue, i * 3, dStr, 0, 3); + Array.Copy(tag.DataValue, i * 3, dStr, 0, 3); - clobData[i] = dStr.HexToDouble(); + realData.Add(dStr.HexToDouble()); } - _dataModel.DevCode = devCode; - if (devCode.Equals(DevCode.Dev1)) - { - _dataModel.LeftDeviceDataArray = clobData; - } - else - { - _dataModel.RightDeviceDataArray = clobData; - } + //60包数据里面的UploadTag转化为 List> + doubleArrays.Add(realData); + } - FlowStatus.CorrelatorData = _dataModel; - "SerialPortManager".WriteLog(devCode + "数据处理完成"); + _dataModel.DevCode = devCode; + if (devCode.Equals(DevCode.Dev1)) + { + _dataModel.LeftDeviceDataArray = doubleArrays.ToOneDimensionalArray(); } else { - Debug.WriteLine("SerialPortManager => noiseTag == null"); + _dataModel.RightDeviceDataArray = doubleArrays.ToOneDimensionalArray(); } - // var dataFromFile = "C:\\Users\\Administrator\\Desktop\\测试数据.16.134833.txt".ReadFromFile(); - // var index = dataFromFile.IndexOf("==============="); - // - // _dataModel.DevCode = devCode; - // if (devCode.Equals(DevCode.Dev1)) - // { - // for (var i = 1; i < index; i++) - // { - // clobData[i - 1] = Convert.ToDouble(dataFromFile[i]); - // } - // - // _dataModel.LeftDeviceDataArray = clobData; - // } - // else - // { - // for (var i = index + 1; i < dataFromFile.Count; i++) - // { - // clobData[i - 450002] = Convert.ToDouble(dataFromFile[i]); - // } - // - // _dataModel.RightDeviceDataArray = clobData; - // } - // - // FlowStatus.CorrelatorData = _dataModel; - // "SerialPortManager".WriteLog(devCode + "数据处理完成"); + FlowStatus.CorrelatorData = _dataModel; + "SerialPortManager".WriteLog(devCode + "数据处理完成"); } private void HandleListenData(List tags) diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs index 0d2400a..8066527 100644 --- a/Correlator/Dialog/CheckResponseDialog.xaml.cs +++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs @@ -141,12 +141,17 @@ { //下发数据全部正常指令 CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev1, new List()); - + + //保存原始数据 + FlowStatus.RedSensorOriginalResp.SaveSensorResponse(DevCode.Dev1); + //处理数据 var tags = new List(); - foreach (var list in FlowStatus.RedSensorTagLists) + foreach (var list in FlowStatus.RedSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev1, tags); @@ -189,12 +194,17 @@ else if (BlueSensorStepBar.StepIndex == 2) { CommandSender.SendDataCheckResultCmd(SerialPortManager.Get.Sp, DevCode.Dev2, new List()); + + //保存原始数据 + FlowStatus.BlueSensorOriginalResp.SaveSensorResponse(DevCode.Dev2); //处理数据 var tags = new List(); - foreach (var list in FlowStatus.BlueSensorTagLists) + foreach (var list in FlowStatus.BlueSensorResponseTags) { - tags.AddRange(list); + //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag + var noiseTag = list.GetUploadNoiseTag(); + tags.Add(noiseTag); } SerialPortManager.Get.HandleHydrophoneData(DevCode.Dev2, tags); diff --git a/Correlator/Util/FlowStatus.cs b/Correlator/Util/FlowStatus.cs index ad1e0fb..4220840 100644 --- a/Correlator/Util/FlowStatus.cs +++ b/Correlator/Util/FlowStatus.cs @@ -39,10 +39,16 @@ //水听器下发唤醒指令时间戳 public static byte[] HydrophoneWakeUpTimeBytes = new byte[6]; - //水听器红色信号接收器数据 - public static readonly List> RedSensorTagLists = new List>(); + //水听器红色信号接收器原始数据 + public static readonly List RedSensorOriginalResp = new List(); - //水听器蓝色信号接收器数据 - public static readonly List> BlueSensorTagLists = new List>(); + //水听器红色信号接收器解析之后的Tags + public static readonly List> RedSensorResponseTags = new List>(); + + //水听器红色信号接收器原始数据 + public static readonly List BlueSensorOriginalResp = new List(); + + //水听器蓝色信号接收器解析之后的Tags + public static readonly List> BlueSensorResponseTags = new List>(); } } \ No newline at end of file diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs index 39028d5..37a42c0 100644 --- a/Correlator/Util/MethodExtensions.cs +++ b/Correlator/Util/MethodExtensions.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; +using Correlator.Model; using Correlator.SensorHubTag; using HandyControl.Controls; using MathWorks.MATLAB.NET.Arrays; @@ -290,5 +292,107 @@ return "未知类型数据"; } } + + /// + /// 二维集合转为一维数组 + /// + /// 二维集合 + /// + public static double[] ToOneDimensionalArray(this List> doubleArrays) + { + var totalData = new List(); + foreach (var item in doubleArrays) + { + totalData.AddRange(item); + } + + return totalData.ToArray(); + } + + /// + /// 本地数据转 CorrelatorDataModel + /// + /// + /// + public static CorrelatorDataModel LocalDataToDataModel(this List strResponses) + { + var dataModel = new CorrelatorDataModel(); + var index = strResponses.IndexOf("==============="); + + var leftCacheData = new double[7500 * 60]; + for (var i = 1; i < index; i++) + { + try + { + leftCacheData[i - 1] = Convert.ToDouble(strResponses[i]); + } + catch (FormatException e) + { + Console.WriteLine(e); + Debug.WriteLine($"MethodExtensions => {strResponses[i]}"); + throw; + } + } + + dataModel.DevCode = DevCode.Dev1; + dataModel.LeftReceiveDataTime = DateTime.Now; + dataModel.LeftDeviceDataArray = leftCacheData; + + var rightCacheData = new double[7500 * 60]; + //450001 - 900000 + for (var i = index + 1; i < strResponses.Count; i++) + { + try + { + rightCacheData[i - 450002] = Convert.ToDouble(strResponses[i]); + } + catch (FormatException e) + { + Console.WriteLine(e); + Debug.WriteLine($"MethodExtensions => {strResponses[i]}"); + throw; + } + } + + dataModel.DevCode = DevCode.Dev2; + dataModel.RightReceiveDataTime = DateTime.Now; + dataModel.RightDeviceDataArray = rightCacheData; + return dataModel; + } + + /// + /// 保存传感器上传的原始数据 + /// + /// + /// + public static void SaveSensorResponse(this List response, string devCode) + { + var rootDir = Constant.GetLocateDataDir(short.MaxValue); + string fileName; + if (devCode == DevCode.Dev1) + { + fileName = rootDir + "\\原始数据." + DateTime.Now.ToString("HHmmss") + ".txt"; + } + else + { + fileName = rootDir + "\\原始数据." + DateTime.Now.ToString("HHmmss") + ".txt"; + } + + var builder = new StringBuilder(); + for (var i = 0; i < response.Count; i++) + { + var str = response[i]; + if (i == response.Count - 1) + { + builder.Append(str); + } + else + { + builder.Append(str).Append("\r\n"); + } + } + + File.AppendAllText(fileName, builder.ToString()); + } } } \ No newline at end of file diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 091cc04..3a05341 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -103,14 +103,21 @@ //取出seq,确定收到的是第几包数据 FlowStatus.SeqCaches.Add(receiveData[15]); + var response = BitConverter.ToString(receiveData).Replace("-", ""); //收集数据 if (strDeviceId.Equals(DevCode.Dev1)) { - FlowStatus.RedSensorTagLists.Add(tags); + //原始数据 + FlowStatus.RedSensorOriginalResp.Add(response); + //解析之后的数据 + FlowStatus.RedSensorResponseTags.Add(tags); } else { - FlowStatus.BlueSensorTagLists.Add(tags); + //原始数据 + FlowStatus.BlueSensorOriginalResp.Add(response); + //解析之后的数据 + FlowStatus.BlueSensorResponseTags.Add(tags); } } @@ -215,22 +222,18 @@ _dataModel = new CorrelatorDataModel(); } - var clobData = new double[3750]; //3750个采样点 - //处理接到的噪声数据 var noiseTag = tags.GetUploadNoiseTag(); if (noiseTag != null) { - var len = noiseTag.Len; - var dataValue = noiseTag.DataValue; - - var num = len / 3; //上传的噪声数据个数,修改末3个字节 + var num = noiseTag.Len / 3; + var realData = new double[num]; for (var i = 0; i < num; i++) { var dStr = new byte[3]; - Array.Copy(dataValue, i * 3, dStr, 0, 3); + Array.Copy(noiseTag.DataValue, i * 3, dStr, 0, 3); - clobData[i] = dStr.HexToDouble(); + realData[i] = dStr.HexToDouble(); } _dataModel.DevCode = devCode; @@ -238,13 +241,13 @@ { //接收到数据之后时间重新赋值 _dataModel.LeftReceiveDataTime = DateTime.Now; - _dataModel.LeftDeviceDataArray = clobData; + _dataModel.LeftDeviceDataArray = realData; } else { //接收到数据之后时间重新赋值 _dataModel.RightReceiveDataTime = DateTime.Now; - _dataModel.RightDeviceDataArray = clobData; + _dataModel.RightDeviceDataArray = realData; } //发送消息计算数据 @@ -270,8 +273,8 @@ /// /// 水听器数据 /// - /// - /// + /// 传感器编号 + /// UploadTag的集合 public void HandleHydrophoneData(string devCode, List tags) { if (_dataModel == null) @@ -279,65 +282,36 @@ _dataModel = new CorrelatorDataModel(); } - var clobData = new double[7500 * 60]; //7500*60个采样点 - var noiseTag = tags.GetUploadNoiseTag(); - if (noiseTag != null) + var doubleArrays = new List>(); + foreach (var tag in tags) { - var len = noiseTag.Len; - var dataValue = noiseTag.DataValue; - - var num = len / 3; //上传的噪声数据个数,修改末3个字节 + var num = tag.Len / 3; //上传的噪声数据个数,修改末3个字节 + //单条数据得到的UploadTag转化为 List + var realData = new List(); for (var i = 0; i < num; i++) { var dStr = new byte[3]; - Array.Copy(dataValue, i * 3, dStr, 0, 3); + Array.Copy(tag.DataValue, i * 3, dStr, 0, 3); - clobData[i] = dStr.HexToDouble(); + realData.Add(dStr.HexToDouble()); } - _dataModel.DevCode = devCode; - if (devCode.Equals(DevCode.Dev1)) - { - _dataModel.LeftDeviceDataArray = clobData; - } - else - { - _dataModel.RightDeviceDataArray = clobData; - } + //60包数据里面的UploadTag转化为 List> + doubleArrays.Add(realData); + } - FlowStatus.CorrelatorData = _dataModel; - "SerialPortManager".WriteLog(devCode + "数据处理完成"); + _dataModel.DevCode = devCode; + if (devCode.Equals(DevCode.Dev1)) + { + _dataModel.LeftDeviceDataArray = doubleArrays.ToOneDimensionalArray(); } else { - Debug.WriteLine("SerialPortManager => noiseTag == null"); + _dataModel.RightDeviceDataArray = doubleArrays.ToOneDimensionalArray(); } - // var dataFromFile = "C:\\Users\\Administrator\\Desktop\\测试数据.16.134833.txt".ReadFromFile(); - // var index = dataFromFile.IndexOf("==============="); - // - // _dataModel.DevCode = devCode; - // if (devCode.Equals(DevCode.Dev1)) - // { - // for (var i = 1; i < index; i++) - // { - // clobData[i - 1] = Convert.ToDouble(dataFromFile[i]); - // } - // - // _dataModel.LeftDeviceDataArray = clobData; - // } - // else - // { - // for (var i = index + 1; i < dataFromFile.Count; i++) - // { - // clobData[i - 450002] = Convert.ToDouble(dataFromFile[i]); - // } - // - // _dataModel.RightDeviceDataArray = clobData; - // } - // - // FlowStatus.CorrelatorData = _dataModel; - // "SerialPortManager".WriteLog(devCode + "数据处理完成"); + FlowStatus.CorrelatorData = _dataModel; + "SerialPortManager".WriteLog(devCode + "数据处理完成"); } private void HandleListenData(List tags) diff --git a/Correlator/ViewModel/HomePageProViewModel.cs b/Correlator/ViewModel/HomePageProViewModel.cs index dbfa00c..75a4540 100644 --- a/Correlator/ViewModel/HomePageProViewModel.cs +++ b/Correlator/ViewModel/HomePageProViewModel.cs @@ -590,8 +590,8 @@ _runningTimer.Stop(); StartButtonEnabled = true; //清空缓存 - FlowStatus.RedSensorTagLists.Clear(); - FlowStatus.BlueSensorTagLists.Clear(); + FlowStatus.RedSensorResponseTags.Clear(); + FlowStatus.BlueSensorResponseTags.Clear(); FlowStatus.RedSensorIsEnable = false; FlowStatus.BlueSensorIsEnable = false; @@ -722,51 +722,10 @@ var result = fileDialog.ShowDialog(); if (result == true) { - var dataModel = new CorrelatorDataModel(); var dataFromFile = fileDialog.FileName.ReadFromFile(); - var index = dataFromFile.IndexOf("==============="); - - var leftCacheData = new double[7500 * 60]; - for (var i = 1; i < index; i++) - { - try - { - leftCacheData[i - 1] = Convert.ToDouble(dataFromFile[i]); - } - catch (FormatException e) - { - Console.WriteLine(e); - Debug.WriteLine($"HomePageProViewModel => {dataFromFile[i]}"); - throw; - } - } - - dataModel.DevCode = DevCode.Dev1; - dataModel.LeftReceiveDataTime = DateTime.Now; - dataModel.LeftDeviceDataArray = leftCacheData; - - var rightCacheData = new double[7500 * 60]; - //450001 - 900000 - for (var i = index + 1; i < dataFromFile.Count; i++) - { - try - { - rightCacheData[i - 450002] = Convert.ToDouble(dataFromFile[i]); - } - catch (FormatException e) - { - Console.WriteLine(e); - Debug.WriteLine($"HomePageProViewModel => {dataFromFile[i]}"); - throw; - } - } - - dataModel.DevCode = DevCode.Dev2; - dataModel.RightReceiveDataTime = DateTime.Now; - dataModel.RightDeviceDataArray = rightCacheData; //赋值给缓存,比用消息传递更直接 - FlowStatus.CorrelatorData = dataModel; + FlowStatus.CorrelatorData = dataFromFile.LocalDataToDataModel(); Messenger.Default.Send("", MessengerToken.HomePageDeviceData); }