diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/ManipulateSerialPort.cs b/PipeGallery/Correlator/ManipulateSerialPort.cs index 0715dbc..606dd84 100644 --- a/PipeGallery/Correlator/ManipulateSerialPort.cs +++ b/PipeGallery/Correlator/ManipulateSerialPort.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Threading; @@ -6,20 +7,22 @@ using System.Windows; using PipeGallery.Manage; using PipeGallery.ViewModel; +using Application = System.Windows.Forms.Application; +using Timer = System.Timers.Timer; namespace PipeGallery.Correlator { class ManipulateSerialPort { - public SerialPort sp = new SerialPort(); //实例化串口通讯类 - public System.Timers.Timer timer = new System.Timers.Timer(); - public bool collectData = true; + public readonly SerialPort Sp = new SerialPort(); //实例化串口通讯类 + public readonly Timer timer = new Timer(); + public bool CollectData = true; //DevCode dev = new DevCode(); public ManipulateSerialPort() { - sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); + Sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } @@ -32,12 +35,14 @@ { try { - string strResult = ""; - byte[] bRequestInfo = getRequestInfo(ref strResult); + var strResult = ""; + var bRequestInfo = GetRequestInfo(ref strResult); if (bRequestInfo != null) { LogHelper.Info("接收到的数据:" + BitConverter.ToString(bRequestInfo).Replace("-", "")); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 接收到的数据: " + + BitConverter.ToString(bRequestInfo).Replace("-", "")); } else if (strResult != "") { @@ -50,15 +55,15 @@ if (bRequestInfo != null) { - if (sp == null) + if (Sp == null) return; else - new CmdClass().analysisDataValue(bRequestInfo, sp); + new CmdClass().AnalysisDataValue(bRequestInfo, Sp); } else { if (strResult != "") - new CmdClass().analysisSignalValue(strResult, sp); + new CmdClass().AnalysisSignalValue(strResult, Sp); } } catch (Exception ex) @@ -71,34 +76,34 @@ /// 数据接收 /// /// - private byte[] getRequestInfo(ref string strResult) + private byte[] GetRequestInfo(ref string strResult) { try { - while (sp.BytesToRead < 4) Thread.Sleep(5); - byte[] headerBuff = new byte[2]; - sp.Read(headerBuff, 0, 2); //读取数据 + while (Sp.BytesToRead < 4) Thread.Sleep(5); + var headerBuff = new byte[2]; + Sp.Read(headerBuff, 0, 2); //读取数据 if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范 { byte[] lengthBuffer = new byte[2]; - sp.Read(lengthBuffer, 0, 2); + Sp.Read(lengthBuffer, 0, 2); int length = StringUtil.ConvertBytes2Int(lengthBuffer); if (length < 12) { - sp.DiscardInBuffer(); //长度数据不符合,丢弃 + Sp.DiscardInBuffer(); //长度数据不符合,丢弃 LogHelper.Info("上传数组长度不够,丢弃数据"); return null; } - while (sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 + while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 byte[] result = new byte[length + 6]; result[0] = headerBuff[0]; result[1] = headerBuff[1]; result[2] = lengthBuffer[0]; result[3] = lengthBuffer[1]; - sp.Read(result, 4, result.Length - 4); + Sp.Read(result, 4, result.Length - 4); //if (result[result.Length - 1] != 0x00 || result[result.Length - 2] != 0x00 || // result[result.Length - 3] != 0x00 || result[result.Length - 4] != 0x00) @@ -124,14 +129,14 @@ else { Thread.Sleep(10); - String str = Encoding.UTF8.GetString(headerBuff) + sp.ReadExisting(); + String str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting(); if (str != "" && str.Contains("\r\n")) { strResult = str; } else { - sp.DiscardInBuffer(); + Sp.DiscardInBuffer(); } } @@ -140,9 +145,9 @@ catch (Exception ex) { MessageBox.Show(ex.Message, "出错提示"); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); return null; } } @@ -150,25 +155,25 @@ /// /// 显示信号电量 /// - public void showSignal() + public void ShowSignal() { - double configItr = 20000; - byte devid = 0x01; + const double configItr = 20000; + byte devId = 0x01; try { - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); if (CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMapx.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMapx.Signal)); HomePageViewModel.Instance.TransmitterAFault = devMapx.Status == "1" ? true : false; } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); } catch (Exception e) @@ -181,14 +186,14 @@ { try { - devid = (byte)((devid == 0x01) ? 0x02 : 0x01); - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + devId = (byte)((devId == 0x01) ? 0x02 : 0x01); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); - if (devid.ToString() == DevCode.Dev1.Substring(11, 1) && + if (devId.ToString() == DevCode.Dev1.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMap1.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap1.Signal)); @@ -207,10 +212,10 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1].Signal = "-121"; //初始化信号为0 } - else if (devid.ToString() == DevCode.Dev2.Substring(11, 1) && + else if (devId.ToString() == DevCode.Dev2.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev2)) { - DevStatus devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; + var devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; HomePageViewModel.Instance.TransmitterBBattery = Convert.ToDouble(devMap2.Cell); HomePageViewModel.Instance.TransmitterBSignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap2.Signal)); @@ -230,7 +235,7 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2].Signal = "-121"; //初始化信号为0 } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); //Thread.Sleep(10000); @@ -252,9 +257,9 @@ catch (Exception e) { timer.Stop(); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); } }); } @@ -263,7 +268,7 @@ { //System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = interval; - timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { action(e); }; + timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { action(e); }; timer.Enabled = true; } diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/ManipulateSerialPort.cs b/PipeGallery/Correlator/ManipulateSerialPort.cs index 0715dbc..606dd84 100644 --- a/PipeGallery/Correlator/ManipulateSerialPort.cs +++ b/PipeGallery/Correlator/ManipulateSerialPort.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Threading; @@ -6,20 +7,22 @@ using System.Windows; using PipeGallery.Manage; using PipeGallery.ViewModel; +using Application = System.Windows.Forms.Application; +using Timer = System.Timers.Timer; namespace PipeGallery.Correlator { class ManipulateSerialPort { - public SerialPort sp = new SerialPort(); //实例化串口通讯类 - public System.Timers.Timer timer = new System.Timers.Timer(); - public bool collectData = true; + public readonly SerialPort Sp = new SerialPort(); //实例化串口通讯类 + public readonly Timer timer = new Timer(); + public bool CollectData = true; //DevCode dev = new DevCode(); public ManipulateSerialPort() { - sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); + Sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } @@ -32,12 +35,14 @@ { try { - string strResult = ""; - byte[] bRequestInfo = getRequestInfo(ref strResult); + var strResult = ""; + var bRequestInfo = GetRequestInfo(ref strResult); if (bRequestInfo != null) { LogHelper.Info("接收到的数据:" + BitConverter.ToString(bRequestInfo).Replace("-", "")); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 接收到的数据: " + + BitConverter.ToString(bRequestInfo).Replace("-", "")); } else if (strResult != "") { @@ -50,15 +55,15 @@ if (bRequestInfo != null) { - if (sp == null) + if (Sp == null) return; else - new CmdClass().analysisDataValue(bRequestInfo, sp); + new CmdClass().AnalysisDataValue(bRequestInfo, Sp); } else { if (strResult != "") - new CmdClass().analysisSignalValue(strResult, sp); + new CmdClass().AnalysisSignalValue(strResult, Sp); } } catch (Exception ex) @@ -71,34 +76,34 @@ /// 数据接收 /// /// - private byte[] getRequestInfo(ref string strResult) + private byte[] GetRequestInfo(ref string strResult) { try { - while (sp.BytesToRead < 4) Thread.Sleep(5); - byte[] headerBuff = new byte[2]; - sp.Read(headerBuff, 0, 2); //读取数据 + while (Sp.BytesToRead < 4) Thread.Sleep(5); + var headerBuff = new byte[2]; + Sp.Read(headerBuff, 0, 2); //读取数据 if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范 { byte[] lengthBuffer = new byte[2]; - sp.Read(lengthBuffer, 0, 2); + Sp.Read(lengthBuffer, 0, 2); int length = StringUtil.ConvertBytes2Int(lengthBuffer); if (length < 12) { - sp.DiscardInBuffer(); //长度数据不符合,丢弃 + Sp.DiscardInBuffer(); //长度数据不符合,丢弃 LogHelper.Info("上传数组长度不够,丢弃数据"); return null; } - while (sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 + while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 byte[] result = new byte[length + 6]; result[0] = headerBuff[0]; result[1] = headerBuff[1]; result[2] = lengthBuffer[0]; result[3] = lengthBuffer[1]; - sp.Read(result, 4, result.Length - 4); + Sp.Read(result, 4, result.Length - 4); //if (result[result.Length - 1] != 0x00 || result[result.Length - 2] != 0x00 || // result[result.Length - 3] != 0x00 || result[result.Length - 4] != 0x00) @@ -124,14 +129,14 @@ else { Thread.Sleep(10); - String str = Encoding.UTF8.GetString(headerBuff) + sp.ReadExisting(); + String str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting(); if (str != "" && str.Contains("\r\n")) { strResult = str; } else { - sp.DiscardInBuffer(); + Sp.DiscardInBuffer(); } } @@ -140,9 +145,9 @@ catch (Exception ex) { MessageBox.Show(ex.Message, "出错提示"); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); return null; } } @@ -150,25 +155,25 @@ /// /// 显示信号电量 /// - public void showSignal() + public void ShowSignal() { - double configItr = 20000; - byte devid = 0x01; + const double configItr = 20000; + byte devId = 0x01; try { - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); if (CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMapx.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMapx.Signal)); HomePageViewModel.Instance.TransmitterAFault = devMapx.Status == "1" ? true : false; } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); } catch (Exception e) @@ -181,14 +186,14 @@ { try { - devid = (byte)((devid == 0x01) ? 0x02 : 0x01); - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + devId = (byte)((devId == 0x01) ? 0x02 : 0x01); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); - if (devid.ToString() == DevCode.Dev1.Substring(11, 1) && + if (devId.ToString() == DevCode.Dev1.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMap1.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap1.Signal)); @@ -207,10 +212,10 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1].Signal = "-121"; //初始化信号为0 } - else if (devid.ToString() == DevCode.Dev2.Substring(11, 1) && + else if (devId.ToString() == DevCode.Dev2.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev2)) { - DevStatus devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; + var devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; HomePageViewModel.Instance.TransmitterBBattery = Convert.ToDouble(devMap2.Cell); HomePageViewModel.Instance.TransmitterBSignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap2.Signal)); @@ -230,7 +235,7 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2].Signal = "-121"; //初始化信号为0 } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); //Thread.Sleep(10000); @@ -252,9 +257,9 @@ catch (Exception e) { timer.Stop(); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); } }); } @@ -263,7 +268,7 @@ { //System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = interval; - timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { action(e); }; + timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { action(e); }; timer.Enabled = true; } diff --git a/PipeGallery/Correlator/SenderClass.cs b/PipeGallery/Correlator/SenderClass.cs index f01350b..16e0e86 100644 --- a/PipeGallery/Correlator/SenderClass.cs +++ b/PipeGallery/Correlator/SenderClass.cs @@ -9,9 +9,8 @@ /// /// 下发唤醒指令 /// - /// /// - public static void sendCorrelatorWakeUpCmd(SerialPort sp) + public static void SendCorrelatorWakeUpCmd(SerialPort sp) { try { @@ -73,7 +72,8 @@ afcrc.CopyTo(reBt, 2); */ LogHelper.Info("下发相关仪唤醒信息:" + BitConverter.ToString(afcrc)); - + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发相关仪唤醒信息 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) @@ -87,7 +87,7 @@ /// /// /// - public static void sendCellAndStatusCollectCmd(SerialPort sp, byte devid) + public static void SendCellAndStatusCollectCmd(SerialPort sp, byte devid) { try { @@ -147,6 +147,8 @@ btcrc.CopyTo(afcrc, result.Length); LogHelper.Info("下发状态采集指令:" + BitConverter.ToString(afcrc)); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发状态采集指令 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/ManipulateSerialPort.cs b/PipeGallery/Correlator/ManipulateSerialPort.cs index 0715dbc..606dd84 100644 --- a/PipeGallery/Correlator/ManipulateSerialPort.cs +++ b/PipeGallery/Correlator/ManipulateSerialPort.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Threading; @@ -6,20 +7,22 @@ using System.Windows; using PipeGallery.Manage; using PipeGallery.ViewModel; +using Application = System.Windows.Forms.Application; +using Timer = System.Timers.Timer; namespace PipeGallery.Correlator { class ManipulateSerialPort { - public SerialPort sp = new SerialPort(); //实例化串口通讯类 - public System.Timers.Timer timer = new System.Timers.Timer(); - public bool collectData = true; + public readonly SerialPort Sp = new SerialPort(); //实例化串口通讯类 + public readonly Timer timer = new Timer(); + public bool CollectData = true; //DevCode dev = new DevCode(); public ManipulateSerialPort() { - sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); + Sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } @@ -32,12 +35,14 @@ { try { - string strResult = ""; - byte[] bRequestInfo = getRequestInfo(ref strResult); + var strResult = ""; + var bRequestInfo = GetRequestInfo(ref strResult); if (bRequestInfo != null) { LogHelper.Info("接收到的数据:" + BitConverter.ToString(bRequestInfo).Replace("-", "")); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 接收到的数据: " + + BitConverter.ToString(bRequestInfo).Replace("-", "")); } else if (strResult != "") { @@ -50,15 +55,15 @@ if (bRequestInfo != null) { - if (sp == null) + if (Sp == null) return; else - new CmdClass().analysisDataValue(bRequestInfo, sp); + new CmdClass().AnalysisDataValue(bRequestInfo, Sp); } else { if (strResult != "") - new CmdClass().analysisSignalValue(strResult, sp); + new CmdClass().AnalysisSignalValue(strResult, Sp); } } catch (Exception ex) @@ -71,34 +76,34 @@ /// 数据接收 /// /// - private byte[] getRequestInfo(ref string strResult) + private byte[] GetRequestInfo(ref string strResult) { try { - while (sp.BytesToRead < 4) Thread.Sleep(5); - byte[] headerBuff = new byte[2]; - sp.Read(headerBuff, 0, 2); //读取数据 + while (Sp.BytesToRead < 4) Thread.Sleep(5); + var headerBuff = new byte[2]; + Sp.Read(headerBuff, 0, 2); //读取数据 if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范 { byte[] lengthBuffer = new byte[2]; - sp.Read(lengthBuffer, 0, 2); + Sp.Read(lengthBuffer, 0, 2); int length = StringUtil.ConvertBytes2Int(lengthBuffer); if (length < 12) { - sp.DiscardInBuffer(); //长度数据不符合,丢弃 + Sp.DiscardInBuffer(); //长度数据不符合,丢弃 LogHelper.Info("上传数组长度不够,丢弃数据"); return null; } - while (sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 + while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 byte[] result = new byte[length + 6]; result[0] = headerBuff[0]; result[1] = headerBuff[1]; result[2] = lengthBuffer[0]; result[3] = lengthBuffer[1]; - sp.Read(result, 4, result.Length - 4); + Sp.Read(result, 4, result.Length - 4); //if (result[result.Length - 1] != 0x00 || result[result.Length - 2] != 0x00 || // result[result.Length - 3] != 0x00 || result[result.Length - 4] != 0x00) @@ -124,14 +129,14 @@ else { Thread.Sleep(10); - String str = Encoding.UTF8.GetString(headerBuff) + sp.ReadExisting(); + String str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting(); if (str != "" && str.Contains("\r\n")) { strResult = str; } else { - sp.DiscardInBuffer(); + Sp.DiscardInBuffer(); } } @@ -140,9 +145,9 @@ catch (Exception ex) { MessageBox.Show(ex.Message, "出错提示"); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); return null; } } @@ -150,25 +155,25 @@ /// /// 显示信号电量 /// - public void showSignal() + public void ShowSignal() { - double configItr = 20000; - byte devid = 0x01; + const double configItr = 20000; + byte devId = 0x01; try { - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); if (CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMapx.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMapx.Signal)); HomePageViewModel.Instance.TransmitterAFault = devMapx.Status == "1" ? true : false; } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); } catch (Exception e) @@ -181,14 +186,14 @@ { try { - devid = (byte)((devid == 0x01) ? 0x02 : 0x01); - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + devId = (byte)((devId == 0x01) ? 0x02 : 0x01); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); - if (devid.ToString() == DevCode.Dev1.Substring(11, 1) && + if (devId.ToString() == DevCode.Dev1.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMap1.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap1.Signal)); @@ -207,10 +212,10 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1].Signal = "-121"; //初始化信号为0 } - else if (devid.ToString() == DevCode.Dev2.Substring(11, 1) && + else if (devId.ToString() == DevCode.Dev2.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev2)) { - DevStatus devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; + var devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; HomePageViewModel.Instance.TransmitterBBattery = Convert.ToDouble(devMap2.Cell); HomePageViewModel.Instance.TransmitterBSignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap2.Signal)); @@ -230,7 +235,7 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2].Signal = "-121"; //初始化信号为0 } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); //Thread.Sleep(10000); @@ -252,9 +257,9 @@ catch (Exception e) { timer.Stop(); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); } }); } @@ -263,7 +268,7 @@ { //System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = interval; - timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { action(e); }; + timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { action(e); }; timer.Enabled = true; } diff --git a/PipeGallery/Correlator/SenderClass.cs b/PipeGallery/Correlator/SenderClass.cs index f01350b..16e0e86 100644 --- a/PipeGallery/Correlator/SenderClass.cs +++ b/PipeGallery/Correlator/SenderClass.cs @@ -9,9 +9,8 @@ /// /// 下发唤醒指令 /// - /// /// - public static void sendCorrelatorWakeUpCmd(SerialPort sp) + public static void SendCorrelatorWakeUpCmd(SerialPort sp) { try { @@ -73,7 +72,8 @@ afcrc.CopyTo(reBt, 2); */ LogHelper.Info("下发相关仪唤醒信息:" + BitConverter.ToString(afcrc)); - + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发相关仪唤醒信息 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) @@ -87,7 +87,7 @@ /// /// /// - public static void sendCellAndStatusCollectCmd(SerialPort sp, byte devid) + public static void SendCellAndStatusCollectCmd(SerialPort sp, byte devid) { try { @@ -147,6 +147,8 @@ btcrc.CopyTo(afcrc, result.Length); LogHelper.Info("下发状态采集指令:" + BitConverter.ToString(afcrc)); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发状态采集指令 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) diff --git a/PipeGallery/MainWindow.xaml b/PipeGallery/MainWindow.xaml index 746bc2f..99d36e5 100644 --- a/PipeGallery/MainWindow.xaml +++ b/PipeGallery/MainWindow.xaml @@ -7,6 +7,7 @@ Left="0" Top="0" WindowStartupLocation="Manual" - WindowState="Maximized"> + WindowState="Maximized" + WindowStyle="None"> diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/ManipulateSerialPort.cs b/PipeGallery/Correlator/ManipulateSerialPort.cs index 0715dbc..606dd84 100644 --- a/PipeGallery/Correlator/ManipulateSerialPort.cs +++ b/PipeGallery/Correlator/ManipulateSerialPort.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Threading; @@ -6,20 +7,22 @@ using System.Windows; using PipeGallery.Manage; using PipeGallery.ViewModel; +using Application = System.Windows.Forms.Application; +using Timer = System.Timers.Timer; namespace PipeGallery.Correlator { class ManipulateSerialPort { - public SerialPort sp = new SerialPort(); //实例化串口通讯类 - public System.Timers.Timer timer = new System.Timers.Timer(); - public bool collectData = true; + public readonly SerialPort Sp = new SerialPort(); //实例化串口通讯类 + public readonly Timer timer = new Timer(); + public bool CollectData = true; //DevCode dev = new DevCode(); public ManipulateSerialPort() { - sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); + Sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } @@ -32,12 +35,14 @@ { try { - string strResult = ""; - byte[] bRequestInfo = getRequestInfo(ref strResult); + var strResult = ""; + var bRequestInfo = GetRequestInfo(ref strResult); if (bRequestInfo != null) { LogHelper.Info("接收到的数据:" + BitConverter.ToString(bRequestInfo).Replace("-", "")); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 接收到的数据: " + + BitConverter.ToString(bRequestInfo).Replace("-", "")); } else if (strResult != "") { @@ -50,15 +55,15 @@ if (bRequestInfo != null) { - if (sp == null) + if (Sp == null) return; else - new CmdClass().analysisDataValue(bRequestInfo, sp); + new CmdClass().AnalysisDataValue(bRequestInfo, Sp); } else { if (strResult != "") - new CmdClass().analysisSignalValue(strResult, sp); + new CmdClass().AnalysisSignalValue(strResult, Sp); } } catch (Exception ex) @@ -71,34 +76,34 @@ /// 数据接收 /// /// - private byte[] getRequestInfo(ref string strResult) + private byte[] GetRequestInfo(ref string strResult) { try { - while (sp.BytesToRead < 4) Thread.Sleep(5); - byte[] headerBuff = new byte[2]; - sp.Read(headerBuff, 0, 2); //读取数据 + while (Sp.BytesToRead < 4) Thread.Sleep(5); + var headerBuff = new byte[2]; + Sp.Read(headerBuff, 0, 2); //读取数据 if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范 { byte[] lengthBuffer = new byte[2]; - sp.Read(lengthBuffer, 0, 2); + Sp.Read(lengthBuffer, 0, 2); int length = StringUtil.ConvertBytes2Int(lengthBuffer); if (length < 12) { - sp.DiscardInBuffer(); //长度数据不符合,丢弃 + Sp.DiscardInBuffer(); //长度数据不符合,丢弃 LogHelper.Info("上传数组长度不够,丢弃数据"); return null; } - while (sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 + while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 byte[] result = new byte[length + 6]; result[0] = headerBuff[0]; result[1] = headerBuff[1]; result[2] = lengthBuffer[0]; result[3] = lengthBuffer[1]; - sp.Read(result, 4, result.Length - 4); + Sp.Read(result, 4, result.Length - 4); //if (result[result.Length - 1] != 0x00 || result[result.Length - 2] != 0x00 || // result[result.Length - 3] != 0x00 || result[result.Length - 4] != 0x00) @@ -124,14 +129,14 @@ else { Thread.Sleep(10); - String str = Encoding.UTF8.GetString(headerBuff) + sp.ReadExisting(); + String str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting(); if (str != "" && str.Contains("\r\n")) { strResult = str; } else { - sp.DiscardInBuffer(); + Sp.DiscardInBuffer(); } } @@ -140,9 +145,9 @@ catch (Exception ex) { MessageBox.Show(ex.Message, "出错提示"); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); return null; } } @@ -150,25 +155,25 @@ /// /// 显示信号电量 /// - public void showSignal() + public void ShowSignal() { - double configItr = 20000; - byte devid = 0x01; + const double configItr = 20000; + byte devId = 0x01; try { - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); if (CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMapx.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMapx.Signal)); HomePageViewModel.Instance.TransmitterAFault = devMapx.Status == "1" ? true : false; } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); } catch (Exception e) @@ -181,14 +186,14 @@ { try { - devid = (byte)((devid == 0x01) ? 0x02 : 0x01); - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + devId = (byte)((devId == 0x01) ? 0x02 : 0x01); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); - if (devid.ToString() == DevCode.Dev1.Substring(11, 1) && + if (devId.ToString() == DevCode.Dev1.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMap1.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap1.Signal)); @@ -207,10 +212,10 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1].Signal = "-121"; //初始化信号为0 } - else if (devid.ToString() == DevCode.Dev2.Substring(11, 1) && + else if (devId.ToString() == DevCode.Dev2.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev2)) { - DevStatus devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; + var devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; HomePageViewModel.Instance.TransmitterBBattery = Convert.ToDouble(devMap2.Cell); HomePageViewModel.Instance.TransmitterBSignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap2.Signal)); @@ -230,7 +235,7 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2].Signal = "-121"; //初始化信号为0 } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); //Thread.Sleep(10000); @@ -252,9 +257,9 @@ catch (Exception e) { timer.Stop(); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); } }); } @@ -263,7 +268,7 @@ { //System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = interval; - timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { action(e); }; + timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { action(e); }; timer.Enabled = true; } diff --git a/PipeGallery/Correlator/SenderClass.cs b/PipeGallery/Correlator/SenderClass.cs index f01350b..16e0e86 100644 --- a/PipeGallery/Correlator/SenderClass.cs +++ b/PipeGallery/Correlator/SenderClass.cs @@ -9,9 +9,8 @@ /// /// 下发唤醒指令 /// - /// /// - public static void sendCorrelatorWakeUpCmd(SerialPort sp) + public static void SendCorrelatorWakeUpCmd(SerialPort sp) { try { @@ -73,7 +72,8 @@ afcrc.CopyTo(reBt, 2); */ LogHelper.Info("下发相关仪唤醒信息:" + BitConverter.ToString(afcrc)); - + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发相关仪唤醒信息 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) @@ -87,7 +87,7 @@ /// /// /// - public static void sendCellAndStatusCollectCmd(SerialPort sp, byte devid) + public static void SendCellAndStatusCollectCmd(SerialPort sp, byte devid) { try { @@ -147,6 +147,8 @@ btcrc.CopyTo(afcrc, result.Length); LogHelper.Info("下发状态采集指令:" + BitConverter.ToString(afcrc)); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发状态采集指令 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) diff --git a/PipeGallery/MainWindow.xaml b/PipeGallery/MainWindow.xaml index 746bc2f..99d36e5 100644 --- a/PipeGallery/MainWindow.xaml +++ b/PipeGallery/MainWindow.xaml @@ -7,6 +7,7 @@ Left="0" Top="0" WindowStartupLocation="Manual" - WindowState="Maximized"> + WindowState="Maximized" + WindowStyle="None"> diff --git a/PipeGallery/PipeGallery.csproj b/PipeGallery/PipeGallery.csproj index c277173..7a81a20 100644 --- a/PipeGallery/PipeGallery.csproj +++ b/PipeGallery/PipeGallery.csproj @@ -101,36 +101,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/ManipulateSerialPort.cs b/PipeGallery/Correlator/ManipulateSerialPort.cs index 0715dbc..606dd84 100644 --- a/PipeGallery/Correlator/ManipulateSerialPort.cs +++ b/PipeGallery/Correlator/ManipulateSerialPort.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Threading; @@ -6,20 +7,22 @@ using System.Windows; using PipeGallery.Manage; using PipeGallery.ViewModel; +using Application = System.Windows.Forms.Application; +using Timer = System.Timers.Timer; namespace PipeGallery.Correlator { class ManipulateSerialPort { - public SerialPort sp = new SerialPort(); //实例化串口通讯类 - public System.Timers.Timer timer = new System.Timers.Timer(); - public bool collectData = true; + public readonly SerialPort Sp = new SerialPort(); //实例化串口通讯类 + public readonly Timer timer = new Timer(); + public bool CollectData = true; //DevCode dev = new DevCode(); public ManipulateSerialPort() { - sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); + Sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } @@ -32,12 +35,14 @@ { try { - string strResult = ""; - byte[] bRequestInfo = getRequestInfo(ref strResult); + var strResult = ""; + var bRequestInfo = GetRequestInfo(ref strResult); if (bRequestInfo != null) { LogHelper.Info("接收到的数据:" + BitConverter.ToString(bRequestInfo).Replace("-", "")); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 接收到的数据: " + + BitConverter.ToString(bRequestInfo).Replace("-", "")); } else if (strResult != "") { @@ -50,15 +55,15 @@ if (bRequestInfo != null) { - if (sp == null) + if (Sp == null) return; else - new CmdClass().analysisDataValue(bRequestInfo, sp); + new CmdClass().AnalysisDataValue(bRequestInfo, Sp); } else { if (strResult != "") - new CmdClass().analysisSignalValue(strResult, sp); + new CmdClass().AnalysisSignalValue(strResult, Sp); } } catch (Exception ex) @@ -71,34 +76,34 @@ /// 数据接收 /// /// - private byte[] getRequestInfo(ref string strResult) + private byte[] GetRequestInfo(ref string strResult) { try { - while (sp.BytesToRead < 4) Thread.Sleep(5); - byte[] headerBuff = new byte[2]; - sp.Read(headerBuff, 0, 2); //读取数据 + while (Sp.BytesToRead < 4) Thread.Sleep(5); + var headerBuff = new byte[2]; + Sp.Read(headerBuff, 0, 2); //读取数据 if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范 { byte[] lengthBuffer = new byte[2]; - sp.Read(lengthBuffer, 0, 2); + Sp.Read(lengthBuffer, 0, 2); int length = StringUtil.ConvertBytes2Int(lengthBuffer); if (length < 12) { - sp.DiscardInBuffer(); //长度数据不符合,丢弃 + Sp.DiscardInBuffer(); //长度数据不符合,丢弃 LogHelper.Info("上传数组长度不够,丢弃数据"); return null; } - while (sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 + while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 byte[] result = new byte[length + 6]; result[0] = headerBuff[0]; result[1] = headerBuff[1]; result[2] = lengthBuffer[0]; result[3] = lengthBuffer[1]; - sp.Read(result, 4, result.Length - 4); + Sp.Read(result, 4, result.Length - 4); //if (result[result.Length - 1] != 0x00 || result[result.Length - 2] != 0x00 || // result[result.Length - 3] != 0x00 || result[result.Length - 4] != 0x00) @@ -124,14 +129,14 @@ else { Thread.Sleep(10); - String str = Encoding.UTF8.GetString(headerBuff) + sp.ReadExisting(); + String str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting(); if (str != "" && str.Contains("\r\n")) { strResult = str; } else { - sp.DiscardInBuffer(); + Sp.DiscardInBuffer(); } } @@ -140,9 +145,9 @@ catch (Exception ex) { MessageBox.Show(ex.Message, "出错提示"); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); return null; } } @@ -150,25 +155,25 @@ /// /// 显示信号电量 /// - public void showSignal() + public void ShowSignal() { - double configItr = 20000; - byte devid = 0x01; + const double configItr = 20000; + byte devId = 0x01; try { - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); if (CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMapx.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMapx.Signal)); HomePageViewModel.Instance.TransmitterAFault = devMapx.Status == "1" ? true : false; } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); } catch (Exception e) @@ -181,14 +186,14 @@ { try { - devid = (byte)((devid == 0x01) ? 0x02 : 0x01); - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + devId = (byte)((devId == 0x01) ? 0x02 : 0x01); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); - if (devid.ToString() == DevCode.Dev1.Substring(11, 1) && + if (devId.ToString() == DevCode.Dev1.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMap1.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap1.Signal)); @@ -207,10 +212,10 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1].Signal = "-121"; //初始化信号为0 } - else if (devid.ToString() == DevCode.Dev2.Substring(11, 1) && + else if (devId.ToString() == DevCode.Dev2.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev2)) { - DevStatus devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; + var devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; HomePageViewModel.Instance.TransmitterBBattery = Convert.ToDouble(devMap2.Cell); HomePageViewModel.Instance.TransmitterBSignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap2.Signal)); @@ -230,7 +235,7 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2].Signal = "-121"; //初始化信号为0 } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); //Thread.Sleep(10000); @@ -252,9 +257,9 @@ catch (Exception e) { timer.Stop(); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); } }); } @@ -263,7 +268,7 @@ { //System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = interval; - timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { action(e); }; + timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { action(e); }; timer.Enabled = true; } diff --git a/PipeGallery/Correlator/SenderClass.cs b/PipeGallery/Correlator/SenderClass.cs index f01350b..16e0e86 100644 --- a/PipeGallery/Correlator/SenderClass.cs +++ b/PipeGallery/Correlator/SenderClass.cs @@ -9,9 +9,8 @@ /// /// 下发唤醒指令 /// - /// /// - public static void sendCorrelatorWakeUpCmd(SerialPort sp) + public static void SendCorrelatorWakeUpCmd(SerialPort sp) { try { @@ -73,7 +72,8 @@ afcrc.CopyTo(reBt, 2); */ LogHelper.Info("下发相关仪唤醒信息:" + BitConverter.ToString(afcrc)); - + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发相关仪唤醒信息 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) @@ -87,7 +87,7 @@ /// /// /// - public static void sendCellAndStatusCollectCmd(SerialPort sp, byte devid) + public static void SendCellAndStatusCollectCmd(SerialPort sp, byte devid) { try { @@ -147,6 +147,8 @@ btcrc.CopyTo(afcrc, result.Length); LogHelper.Info("下发状态采集指令:" + BitConverter.ToString(afcrc)); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发状态采集指令 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) diff --git a/PipeGallery/MainWindow.xaml b/PipeGallery/MainWindow.xaml index 746bc2f..99d36e5 100644 --- a/PipeGallery/MainWindow.xaml +++ b/PipeGallery/MainWindow.xaml @@ -7,6 +7,7 @@ Left="0" Top="0" WindowStartupLocation="Manual" - WindowState="Maximized"> + WindowState="Maximized" + WindowStyle="None"> diff --git a/PipeGallery/PipeGallery.csproj b/PipeGallery/PipeGallery.csproj index c277173..7a81a20 100644 --- a/PipeGallery/PipeGallery.csproj +++ b/PipeGallery/PipeGallery.csproj @@ -101,36 +101,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs b/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs index 1764d65..a214289 100644 --- a/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs +++ b/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using PipeGallery.Correlator; +using PipeGallery.Manage; namespace PipeGallery.SensorHubTag { @@ -15,51 +16,45 @@ return false; } - UploadTag uploadTag = tag as UploadTag; + var uploadTag = tag as UploadTag; return uploadTag.BizType == 4; //噪声 } //0000 0071 前四个字节暂时不用 - public override void execute(Tag tag, String devCode, CellTag cellTag, + public override void execute(Tag tag, string devCode, CellTag cellTag, SystemDateTag systemDateTag) { - double[] clobData = new double[3750]; //3750个采样点 + var clobData = new double[3750]; //3750个采样点 //TODO LIST:解析噪声数据保存噪声数据 - UploadTag noiseTag = tag as UploadTag; - int itv = noiseTag.CollectInter; + var noiseTag = tag as UploadTag; + var itv = noiseTag?.CollectInter; //String collecTime = systemDateTag.CollectDate; - int len = noiseTag.Len; - byte[] dataValue = noiseTag.DataValue; + var len = noiseTag?.Len; + var dataValue = noiseTag?.DataValue; + //保存原始16进制数据 + CmdClass.SaveHexData(devCode, dataValue); //int validCount = dataValue.Length / 6; //bool flag = true;//是否有数据缺失标志位 // LogHelper.Info("相关仪数据上传TAG:oid:" + noiseTag.Oid + " 采集间隔: " + //itv + "采集时间:" + collecTime + "上传数值:" + dataValue); - int num = len / 3; //上传的噪声数据个数,修改末3个字节 - for (int i = 0; i < num; i++) + var num = len / 3; //上传的噪声数据个数,修改末3个字节 + for (var i = 0; i < num; i++) { - byte[] dStr = new byte[3]; + var dStr = new byte[3]; Array.Copy(dataValue, i * 3, dStr, 0, 3); clobData[i] = strHexToDouble(dStr); } - string devCodeOther; - if (devCode == DevCode.Dev1) - { - devCodeOther = DevCode.Dev2; - } - else - { - devCodeOther = DevCode.Dev1; - } + var devCodeOther = devCode == DevCode.Dev1 ? DevCode.Dev2 : DevCode.Dev1; if (CorrelatorDataSaveThread.devDataValueMap.ContainsKey(devCode)) { - int devCodeLength = CorrelatorDataSaveThread.devDataValueMap[devCode].Count; - int devCodeOtherLength = CorrelatorDataSaveThread.devDataValueMap[devCodeOther].Count; + var devCodeLength = CorrelatorDataSaveThread.devDataValueMap[devCode].Count; + var devCodeOtherLength = CorrelatorDataSaveThread.devDataValueMap[devCodeOther].Count; if (devCodeLength == devCodeOtherLength && devCode == DevCode.Dev1) { @@ -82,14 +77,13 @@ else if (devCode == DevCode.Dev1 || (devCode == DevCode.Dev2 && CorrelatorDataSaveThread.devDataValueMap.ContainsKey(devCodeOther))) { - List clobDataDoubleArray = new List(); - clobDataDoubleArray.Add(clobData); + var clobDataDoubleArray = new List { clobData }; CorrelatorDataSaveThread.devDataValueMap.Add(devCode, clobDataDoubleArray); //LogHelper.Info("设备【" + devCode + "】添加到Map"); } else { - //LogHelper.Info("将设备【" + devCode + "】数据丢弃"); + LogHelper.Info("将设备【" + devCode + "】数据丢弃"); } //////////////////////////////////////////////////////////////////////////////////////// @@ -101,9 +95,9 @@ if (src.Length != 3) return 0; - Int16 result1 = src[0]; - Int16 result2 = src[1]; - Int16 result3 = src[2]; + short result1 = src[0]; + short result2 = src[1]; + short result3 = src[2]; if ((result1 & 0x80) == 0x80) { @@ -112,7 +106,7 @@ result3 = Convert.ToInt16(result3 - 255); } - double data = (((result1 * 65536 + result2 * 256 + result3) * 5) / 83.88607) / 100000; + var data = (result1 * 65536 + result2 * 256 + result3) * 5 / 83.88607 / 100000; //String strData = ((decimal)Math.Round(data, 8)).ToString(); diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/ManipulateSerialPort.cs b/PipeGallery/Correlator/ManipulateSerialPort.cs index 0715dbc..606dd84 100644 --- a/PipeGallery/Correlator/ManipulateSerialPort.cs +++ b/PipeGallery/Correlator/ManipulateSerialPort.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Threading; @@ -6,20 +7,22 @@ using System.Windows; using PipeGallery.Manage; using PipeGallery.ViewModel; +using Application = System.Windows.Forms.Application; +using Timer = System.Timers.Timer; namespace PipeGallery.Correlator { class ManipulateSerialPort { - public SerialPort sp = new SerialPort(); //实例化串口通讯类 - public System.Timers.Timer timer = new System.Timers.Timer(); - public bool collectData = true; + public readonly SerialPort Sp = new SerialPort(); //实例化串口通讯类 + public readonly Timer timer = new Timer(); + public bool CollectData = true; //DevCode dev = new DevCode(); public ManipulateSerialPort() { - sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); + Sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } @@ -32,12 +35,14 @@ { try { - string strResult = ""; - byte[] bRequestInfo = getRequestInfo(ref strResult); + var strResult = ""; + var bRequestInfo = GetRequestInfo(ref strResult); if (bRequestInfo != null) { LogHelper.Info("接收到的数据:" + BitConverter.ToString(bRequestInfo).Replace("-", "")); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 接收到的数据: " + + BitConverter.ToString(bRequestInfo).Replace("-", "")); } else if (strResult != "") { @@ -50,15 +55,15 @@ if (bRequestInfo != null) { - if (sp == null) + if (Sp == null) return; else - new CmdClass().analysisDataValue(bRequestInfo, sp); + new CmdClass().AnalysisDataValue(bRequestInfo, Sp); } else { if (strResult != "") - new CmdClass().analysisSignalValue(strResult, sp); + new CmdClass().AnalysisSignalValue(strResult, Sp); } } catch (Exception ex) @@ -71,34 +76,34 @@ /// 数据接收 /// /// - private byte[] getRequestInfo(ref string strResult) + private byte[] GetRequestInfo(ref string strResult) { try { - while (sp.BytesToRead < 4) Thread.Sleep(5); - byte[] headerBuff = new byte[2]; - sp.Read(headerBuff, 0, 2); //读取数据 + while (Sp.BytesToRead < 4) Thread.Sleep(5); + var headerBuff = new byte[2]; + Sp.Read(headerBuff, 0, 2); //读取数据 if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范 { byte[] lengthBuffer = new byte[2]; - sp.Read(lengthBuffer, 0, 2); + Sp.Read(lengthBuffer, 0, 2); int length = StringUtil.ConvertBytes2Int(lengthBuffer); if (length < 12) { - sp.DiscardInBuffer(); //长度数据不符合,丢弃 + Sp.DiscardInBuffer(); //长度数据不符合,丢弃 LogHelper.Info("上传数组长度不够,丢弃数据"); return null; } - while (sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 + while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 byte[] result = new byte[length + 6]; result[0] = headerBuff[0]; result[1] = headerBuff[1]; result[2] = lengthBuffer[0]; result[3] = lengthBuffer[1]; - sp.Read(result, 4, result.Length - 4); + Sp.Read(result, 4, result.Length - 4); //if (result[result.Length - 1] != 0x00 || result[result.Length - 2] != 0x00 || // result[result.Length - 3] != 0x00 || result[result.Length - 4] != 0x00) @@ -124,14 +129,14 @@ else { Thread.Sleep(10); - String str = Encoding.UTF8.GetString(headerBuff) + sp.ReadExisting(); + String str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting(); if (str != "" && str.Contains("\r\n")) { strResult = str; } else { - sp.DiscardInBuffer(); + Sp.DiscardInBuffer(); } } @@ -140,9 +145,9 @@ catch (Exception ex) { MessageBox.Show(ex.Message, "出错提示"); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); return null; } } @@ -150,25 +155,25 @@ /// /// 显示信号电量 /// - public void showSignal() + public void ShowSignal() { - double configItr = 20000; - byte devid = 0x01; + const double configItr = 20000; + byte devId = 0x01; try { - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); if (CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMapx.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMapx.Signal)); HomePageViewModel.Instance.TransmitterAFault = devMapx.Status == "1" ? true : false; } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); } catch (Exception e) @@ -181,14 +186,14 @@ { try { - devid = (byte)((devid == 0x01) ? 0x02 : 0x01); - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + devId = (byte)((devId == 0x01) ? 0x02 : 0x01); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); - if (devid.ToString() == DevCode.Dev1.Substring(11, 1) && + if (devId.ToString() == DevCode.Dev1.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMap1.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap1.Signal)); @@ -207,10 +212,10 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1].Signal = "-121"; //初始化信号为0 } - else if (devid.ToString() == DevCode.Dev2.Substring(11, 1) && + else if (devId.ToString() == DevCode.Dev2.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev2)) { - DevStatus devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; + var devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; HomePageViewModel.Instance.TransmitterBBattery = Convert.ToDouble(devMap2.Cell); HomePageViewModel.Instance.TransmitterBSignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap2.Signal)); @@ -230,7 +235,7 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2].Signal = "-121"; //初始化信号为0 } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); //Thread.Sleep(10000); @@ -252,9 +257,9 @@ catch (Exception e) { timer.Stop(); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); } }); } @@ -263,7 +268,7 @@ { //System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = interval; - timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { action(e); }; + timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { action(e); }; timer.Enabled = true; } diff --git a/PipeGallery/Correlator/SenderClass.cs b/PipeGallery/Correlator/SenderClass.cs index f01350b..16e0e86 100644 --- a/PipeGallery/Correlator/SenderClass.cs +++ b/PipeGallery/Correlator/SenderClass.cs @@ -9,9 +9,8 @@ /// /// 下发唤醒指令 /// - /// /// - public static void sendCorrelatorWakeUpCmd(SerialPort sp) + public static void SendCorrelatorWakeUpCmd(SerialPort sp) { try { @@ -73,7 +72,8 @@ afcrc.CopyTo(reBt, 2); */ LogHelper.Info("下发相关仪唤醒信息:" + BitConverter.ToString(afcrc)); - + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发相关仪唤醒信息 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) @@ -87,7 +87,7 @@ /// /// /// - public static void sendCellAndStatusCollectCmd(SerialPort sp, byte devid) + public static void SendCellAndStatusCollectCmd(SerialPort sp, byte devid) { try { @@ -147,6 +147,8 @@ btcrc.CopyTo(afcrc, result.Length); LogHelper.Info("下发状态采集指令:" + BitConverter.ToString(afcrc)); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发状态采集指令 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) diff --git a/PipeGallery/MainWindow.xaml b/PipeGallery/MainWindow.xaml index 746bc2f..99d36e5 100644 --- a/PipeGallery/MainWindow.xaml +++ b/PipeGallery/MainWindow.xaml @@ -7,6 +7,7 @@ Left="0" Top="0" WindowStartupLocation="Manual" - WindowState="Maximized"> + WindowState="Maximized" + WindowStyle="None"> diff --git a/PipeGallery/PipeGallery.csproj b/PipeGallery/PipeGallery.csproj index c277173..7a81a20 100644 --- a/PipeGallery/PipeGallery.csproj +++ b/PipeGallery/PipeGallery.csproj @@ -101,36 +101,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs b/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs index 1764d65..a214289 100644 --- a/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs +++ b/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using PipeGallery.Correlator; +using PipeGallery.Manage; namespace PipeGallery.SensorHubTag { @@ -15,51 +16,45 @@ return false; } - UploadTag uploadTag = tag as UploadTag; + var uploadTag = tag as UploadTag; return uploadTag.BizType == 4; //噪声 } //0000 0071 前四个字节暂时不用 - public override void execute(Tag tag, String devCode, CellTag cellTag, + public override void execute(Tag tag, string devCode, CellTag cellTag, SystemDateTag systemDateTag) { - double[] clobData = new double[3750]; //3750个采样点 + var clobData = new double[3750]; //3750个采样点 //TODO LIST:解析噪声数据保存噪声数据 - UploadTag noiseTag = tag as UploadTag; - int itv = noiseTag.CollectInter; + var noiseTag = tag as UploadTag; + var itv = noiseTag?.CollectInter; //String collecTime = systemDateTag.CollectDate; - int len = noiseTag.Len; - byte[] dataValue = noiseTag.DataValue; + var len = noiseTag?.Len; + var dataValue = noiseTag?.DataValue; + //保存原始16进制数据 + CmdClass.SaveHexData(devCode, dataValue); //int validCount = dataValue.Length / 6; //bool flag = true;//是否有数据缺失标志位 // LogHelper.Info("相关仪数据上传TAG:oid:" + noiseTag.Oid + " 采集间隔: " + //itv + "采集时间:" + collecTime + "上传数值:" + dataValue); - int num = len / 3; //上传的噪声数据个数,修改末3个字节 - for (int i = 0; i < num; i++) + var num = len / 3; //上传的噪声数据个数,修改末3个字节 + for (var i = 0; i < num; i++) { - byte[] dStr = new byte[3]; + var dStr = new byte[3]; Array.Copy(dataValue, i * 3, dStr, 0, 3); clobData[i] = strHexToDouble(dStr); } - string devCodeOther; - if (devCode == DevCode.Dev1) - { - devCodeOther = DevCode.Dev2; - } - else - { - devCodeOther = DevCode.Dev1; - } + var devCodeOther = devCode == DevCode.Dev1 ? DevCode.Dev2 : DevCode.Dev1; if (CorrelatorDataSaveThread.devDataValueMap.ContainsKey(devCode)) { - int devCodeLength = CorrelatorDataSaveThread.devDataValueMap[devCode].Count; - int devCodeOtherLength = CorrelatorDataSaveThread.devDataValueMap[devCodeOther].Count; + var devCodeLength = CorrelatorDataSaveThread.devDataValueMap[devCode].Count; + var devCodeOtherLength = CorrelatorDataSaveThread.devDataValueMap[devCodeOther].Count; if (devCodeLength == devCodeOtherLength && devCode == DevCode.Dev1) { @@ -82,14 +77,13 @@ else if (devCode == DevCode.Dev1 || (devCode == DevCode.Dev2 && CorrelatorDataSaveThread.devDataValueMap.ContainsKey(devCodeOther))) { - List clobDataDoubleArray = new List(); - clobDataDoubleArray.Add(clobData); + var clobDataDoubleArray = new List { clobData }; CorrelatorDataSaveThread.devDataValueMap.Add(devCode, clobDataDoubleArray); //LogHelper.Info("设备【" + devCode + "】添加到Map"); } else { - //LogHelper.Info("将设备【" + devCode + "】数据丢弃"); + LogHelper.Info("将设备【" + devCode + "】数据丢弃"); } //////////////////////////////////////////////////////////////////////////////////////// @@ -101,9 +95,9 @@ if (src.Length != 3) return 0; - Int16 result1 = src[0]; - Int16 result2 = src[1]; - Int16 result3 = src[2]; + short result1 = src[0]; + short result2 = src[1]; + short result3 = src[2]; if ((result1 & 0x80) == 0x80) { @@ -112,7 +106,7 @@ result3 = Convert.ToInt16(result3 - 255); } - double data = (((result1 * 65536 + result2 * 256 + result3) * 5) / 83.88607) / 100000; + var data = (result1 * 65536 + result2 * 256 + result3) * 5 / 83.88607 / 100000; //String strData = ((decimal)Math.Round(data, 8)).ToString(); diff --git a/PipeGallery/View/AuditionView.xaml.cs b/PipeGallery/View/AuditionView.xaml.cs index 875e1f4..6021caf 100644 --- a/PipeGallery/View/AuditionView.xaml.cs +++ b/PipeGallery/View/AuditionView.xaml.cs @@ -56,12 +56,12 @@ if (this.btnRed.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); } if (this.btnBlue.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); } } @@ -93,7 +93,7 @@ private void btnRed_Click(object sender, RoutedEventArgs e) { - if (!CalculteSatus.msp.sp.IsOpen) + if (!CalculteSatus.msp.Sp.IsOpen) { this.btnRed.IsChecked = false; new PopupWindow("未插入串口!").ShowDialog(); @@ -102,7 +102,7 @@ if (this.btnRed.IsChecked == false || this.btnRed.IsChecked == null) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); String josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); @@ -118,7 +118,7 @@ { if (this.btnBlue.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); this.btnBlue.IsChecked = false; } @@ -131,7 +131,7 @@ private void btnBlue_Click(object sender, RoutedEventArgs e) { - if (!CalculteSatus.msp.sp.IsOpen) + if (!CalculteSatus.msp.Sp.IsOpen) { this.btnBlue.IsChecked = false; new PopupWindow("未插入串口!").ShowDialog(); @@ -140,7 +140,7 @@ if (this.btnBlue.IsChecked == false || this.btnBlue.IsChecked == null) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); String josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); @@ -156,7 +156,7 @@ { if (this.btnRed.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); this.btnRed.IsChecked = false; } @@ -175,7 +175,7 @@ Correlator.CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 Thread.Sleep(3000); - SenderClass.sendSoundCollectCmd(CalculteSatus.msp.sp, devcode as string); + SenderClass.sendSoundCollectCmd(CalculteSatus.msp.Sp, devcode as string); Thread.Sleep(2000); CalculteSatus.isListening = true; new Thread(new ThreadStart(timer)) { IsBackground = true }.Start(); diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/ManipulateSerialPort.cs b/PipeGallery/Correlator/ManipulateSerialPort.cs index 0715dbc..606dd84 100644 --- a/PipeGallery/Correlator/ManipulateSerialPort.cs +++ b/PipeGallery/Correlator/ManipulateSerialPort.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Threading; @@ -6,20 +7,22 @@ using System.Windows; using PipeGallery.Manage; using PipeGallery.ViewModel; +using Application = System.Windows.Forms.Application; +using Timer = System.Timers.Timer; namespace PipeGallery.Correlator { class ManipulateSerialPort { - public SerialPort sp = new SerialPort(); //实例化串口通讯类 - public System.Timers.Timer timer = new System.Timers.Timer(); - public bool collectData = true; + public readonly SerialPort Sp = new SerialPort(); //实例化串口通讯类 + public readonly Timer timer = new Timer(); + public bool CollectData = true; //DevCode dev = new DevCode(); public ManipulateSerialPort() { - sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); + Sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } @@ -32,12 +35,14 @@ { try { - string strResult = ""; - byte[] bRequestInfo = getRequestInfo(ref strResult); + var strResult = ""; + var bRequestInfo = GetRequestInfo(ref strResult); if (bRequestInfo != null) { LogHelper.Info("接收到的数据:" + BitConverter.ToString(bRequestInfo).Replace("-", "")); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 接收到的数据: " + + BitConverter.ToString(bRequestInfo).Replace("-", "")); } else if (strResult != "") { @@ -50,15 +55,15 @@ if (bRequestInfo != null) { - if (sp == null) + if (Sp == null) return; else - new CmdClass().analysisDataValue(bRequestInfo, sp); + new CmdClass().AnalysisDataValue(bRequestInfo, Sp); } else { if (strResult != "") - new CmdClass().analysisSignalValue(strResult, sp); + new CmdClass().AnalysisSignalValue(strResult, Sp); } } catch (Exception ex) @@ -71,34 +76,34 @@ /// 数据接收 /// /// - private byte[] getRequestInfo(ref string strResult) + private byte[] GetRequestInfo(ref string strResult) { try { - while (sp.BytesToRead < 4) Thread.Sleep(5); - byte[] headerBuff = new byte[2]; - sp.Read(headerBuff, 0, 2); //读取数据 + while (Sp.BytesToRead < 4) Thread.Sleep(5); + var headerBuff = new byte[2]; + Sp.Read(headerBuff, 0, 2); //读取数据 if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范 { byte[] lengthBuffer = new byte[2]; - sp.Read(lengthBuffer, 0, 2); + Sp.Read(lengthBuffer, 0, 2); int length = StringUtil.ConvertBytes2Int(lengthBuffer); if (length < 12) { - sp.DiscardInBuffer(); //长度数据不符合,丢弃 + Sp.DiscardInBuffer(); //长度数据不符合,丢弃 LogHelper.Info("上传数组长度不够,丢弃数据"); return null; } - while (sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 + while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 byte[] result = new byte[length + 6]; result[0] = headerBuff[0]; result[1] = headerBuff[1]; result[2] = lengthBuffer[0]; result[3] = lengthBuffer[1]; - sp.Read(result, 4, result.Length - 4); + Sp.Read(result, 4, result.Length - 4); //if (result[result.Length - 1] != 0x00 || result[result.Length - 2] != 0x00 || // result[result.Length - 3] != 0x00 || result[result.Length - 4] != 0x00) @@ -124,14 +129,14 @@ else { Thread.Sleep(10); - String str = Encoding.UTF8.GetString(headerBuff) + sp.ReadExisting(); + String str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting(); if (str != "" && str.Contains("\r\n")) { strResult = str; } else { - sp.DiscardInBuffer(); + Sp.DiscardInBuffer(); } } @@ -140,9 +145,9 @@ catch (Exception ex) { MessageBox.Show(ex.Message, "出错提示"); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); return null; } } @@ -150,25 +155,25 @@ /// /// 显示信号电量 /// - public void showSignal() + public void ShowSignal() { - double configItr = 20000; - byte devid = 0x01; + const double configItr = 20000; + byte devId = 0x01; try { - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); if (CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMapx.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMapx.Signal)); HomePageViewModel.Instance.TransmitterAFault = devMapx.Status == "1" ? true : false; } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); } catch (Exception e) @@ -181,14 +186,14 @@ { try { - devid = (byte)((devid == 0x01) ? 0x02 : 0x01); - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + devId = (byte)((devId == 0x01) ? 0x02 : 0x01); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); - if (devid.ToString() == DevCode.Dev1.Substring(11, 1) && + if (devId.ToString() == DevCode.Dev1.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMap1.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap1.Signal)); @@ -207,10 +212,10 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1].Signal = "-121"; //初始化信号为0 } - else if (devid.ToString() == DevCode.Dev2.Substring(11, 1) && + else if (devId.ToString() == DevCode.Dev2.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev2)) { - DevStatus devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; + var devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; HomePageViewModel.Instance.TransmitterBBattery = Convert.ToDouble(devMap2.Cell); HomePageViewModel.Instance.TransmitterBSignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap2.Signal)); @@ -230,7 +235,7 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2].Signal = "-121"; //初始化信号为0 } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); //Thread.Sleep(10000); @@ -252,9 +257,9 @@ catch (Exception e) { timer.Stop(); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); } }); } @@ -263,7 +268,7 @@ { //System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = interval; - timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { action(e); }; + timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { action(e); }; timer.Enabled = true; } diff --git a/PipeGallery/Correlator/SenderClass.cs b/PipeGallery/Correlator/SenderClass.cs index f01350b..16e0e86 100644 --- a/PipeGallery/Correlator/SenderClass.cs +++ b/PipeGallery/Correlator/SenderClass.cs @@ -9,9 +9,8 @@ /// /// 下发唤醒指令 /// - /// /// - public static void sendCorrelatorWakeUpCmd(SerialPort sp) + public static void SendCorrelatorWakeUpCmd(SerialPort sp) { try { @@ -73,7 +72,8 @@ afcrc.CopyTo(reBt, 2); */ LogHelper.Info("下发相关仪唤醒信息:" + BitConverter.ToString(afcrc)); - + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发相关仪唤醒信息 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) @@ -87,7 +87,7 @@ /// /// /// - public static void sendCellAndStatusCollectCmd(SerialPort sp, byte devid) + public static void SendCellAndStatusCollectCmd(SerialPort sp, byte devid) { try { @@ -147,6 +147,8 @@ btcrc.CopyTo(afcrc, result.Length); LogHelper.Info("下发状态采集指令:" + BitConverter.ToString(afcrc)); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发状态采集指令 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) diff --git a/PipeGallery/MainWindow.xaml b/PipeGallery/MainWindow.xaml index 746bc2f..99d36e5 100644 --- a/PipeGallery/MainWindow.xaml +++ b/PipeGallery/MainWindow.xaml @@ -7,6 +7,7 @@ Left="0" Top="0" WindowStartupLocation="Manual" - WindowState="Maximized"> + WindowState="Maximized" + WindowStyle="None"> diff --git a/PipeGallery/PipeGallery.csproj b/PipeGallery/PipeGallery.csproj index c277173..7a81a20 100644 --- a/PipeGallery/PipeGallery.csproj +++ b/PipeGallery/PipeGallery.csproj @@ -101,36 +101,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs b/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs index 1764d65..a214289 100644 --- a/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs +++ b/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using PipeGallery.Correlator; +using PipeGallery.Manage; namespace PipeGallery.SensorHubTag { @@ -15,51 +16,45 @@ return false; } - UploadTag uploadTag = tag as UploadTag; + var uploadTag = tag as UploadTag; return uploadTag.BizType == 4; //噪声 } //0000 0071 前四个字节暂时不用 - public override void execute(Tag tag, String devCode, CellTag cellTag, + public override void execute(Tag tag, string devCode, CellTag cellTag, SystemDateTag systemDateTag) { - double[] clobData = new double[3750]; //3750个采样点 + var clobData = new double[3750]; //3750个采样点 //TODO LIST:解析噪声数据保存噪声数据 - UploadTag noiseTag = tag as UploadTag; - int itv = noiseTag.CollectInter; + var noiseTag = tag as UploadTag; + var itv = noiseTag?.CollectInter; //String collecTime = systemDateTag.CollectDate; - int len = noiseTag.Len; - byte[] dataValue = noiseTag.DataValue; + var len = noiseTag?.Len; + var dataValue = noiseTag?.DataValue; + //保存原始16进制数据 + CmdClass.SaveHexData(devCode, dataValue); //int validCount = dataValue.Length / 6; //bool flag = true;//是否有数据缺失标志位 // LogHelper.Info("相关仪数据上传TAG:oid:" + noiseTag.Oid + " 采集间隔: " + //itv + "采集时间:" + collecTime + "上传数值:" + dataValue); - int num = len / 3; //上传的噪声数据个数,修改末3个字节 - for (int i = 0; i < num; i++) + var num = len / 3; //上传的噪声数据个数,修改末3个字节 + for (var i = 0; i < num; i++) { - byte[] dStr = new byte[3]; + var dStr = new byte[3]; Array.Copy(dataValue, i * 3, dStr, 0, 3); clobData[i] = strHexToDouble(dStr); } - string devCodeOther; - if (devCode == DevCode.Dev1) - { - devCodeOther = DevCode.Dev2; - } - else - { - devCodeOther = DevCode.Dev1; - } + var devCodeOther = devCode == DevCode.Dev1 ? DevCode.Dev2 : DevCode.Dev1; if (CorrelatorDataSaveThread.devDataValueMap.ContainsKey(devCode)) { - int devCodeLength = CorrelatorDataSaveThread.devDataValueMap[devCode].Count; - int devCodeOtherLength = CorrelatorDataSaveThread.devDataValueMap[devCodeOther].Count; + var devCodeLength = CorrelatorDataSaveThread.devDataValueMap[devCode].Count; + var devCodeOtherLength = CorrelatorDataSaveThread.devDataValueMap[devCodeOther].Count; if (devCodeLength == devCodeOtherLength && devCode == DevCode.Dev1) { @@ -82,14 +77,13 @@ else if (devCode == DevCode.Dev1 || (devCode == DevCode.Dev2 && CorrelatorDataSaveThread.devDataValueMap.ContainsKey(devCodeOther))) { - List clobDataDoubleArray = new List(); - clobDataDoubleArray.Add(clobData); + var clobDataDoubleArray = new List { clobData }; CorrelatorDataSaveThread.devDataValueMap.Add(devCode, clobDataDoubleArray); //LogHelper.Info("设备【" + devCode + "】添加到Map"); } else { - //LogHelper.Info("将设备【" + devCode + "】数据丢弃"); + LogHelper.Info("将设备【" + devCode + "】数据丢弃"); } //////////////////////////////////////////////////////////////////////////////////////// @@ -101,9 +95,9 @@ if (src.Length != 3) return 0; - Int16 result1 = src[0]; - Int16 result2 = src[1]; - Int16 result3 = src[2]; + short result1 = src[0]; + short result2 = src[1]; + short result3 = src[2]; if ((result1 & 0x80) == 0x80) { @@ -112,7 +106,7 @@ result3 = Convert.ToInt16(result3 - 255); } - double data = (((result1 * 65536 + result2 * 256 + result3) * 5) / 83.88607) / 100000; + var data = (result1 * 65536 + result2 * 256 + result3) * 5 / 83.88607 / 100000; //String strData = ((decimal)Math.Round(data, 8)).ToString(); diff --git a/PipeGallery/View/AuditionView.xaml.cs b/PipeGallery/View/AuditionView.xaml.cs index 875e1f4..6021caf 100644 --- a/PipeGallery/View/AuditionView.xaml.cs +++ b/PipeGallery/View/AuditionView.xaml.cs @@ -56,12 +56,12 @@ if (this.btnRed.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); } if (this.btnBlue.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); } } @@ -93,7 +93,7 @@ private void btnRed_Click(object sender, RoutedEventArgs e) { - if (!CalculteSatus.msp.sp.IsOpen) + if (!CalculteSatus.msp.Sp.IsOpen) { this.btnRed.IsChecked = false; new PopupWindow("未插入串口!").ShowDialog(); @@ -102,7 +102,7 @@ if (this.btnRed.IsChecked == false || this.btnRed.IsChecked == null) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); String josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); @@ -118,7 +118,7 @@ { if (this.btnBlue.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); this.btnBlue.IsChecked = false; } @@ -131,7 +131,7 @@ private void btnBlue_Click(object sender, RoutedEventArgs e) { - if (!CalculteSatus.msp.sp.IsOpen) + if (!CalculteSatus.msp.Sp.IsOpen) { this.btnBlue.IsChecked = false; new PopupWindow("未插入串口!").ShowDialog(); @@ -140,7 +140,7 @@ if (this.btnBlue.IsChecked == false || this.btnBlue.IsChecked == null) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); String josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); @@ -156,7 +156,7 @@ { if (this.btnRed.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); this.btnRed.IsChecked = false; } @@ -175,7 +175,7 @@ Correlator.CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 Thread.Sleep(3000); - SenderClass.sendSoundCollectCmd(CalculteSatus.msp.sp, devcode as string); + SenderClass.sendSoundCollectCmd(CalculteSatus.msp.Sp, devcode as string); Thread.Sleep(2000); CalculteSatus.isListening = true; new Thread(new ThreadStart(timer)) { IsBackground = true }.Start(); diff --git a/PipeGallery/View/FilterEditView.xaml.cs b/PipeGallery/View/FilterEditView.xaml.cs index cc418d7..19f259d 100644 --- a/PipeGallery/View/FilterEditView.xaml.cs +++ b/PipeGallery/View/FilterEditView.xaml.cs @@ -217,7 +217,7 @@ Correlator.CalculteSatus.cutFreHigh = high; } - if (!Correlator.CalculteSatus.msp.sp.IsOpen) + if (!Correlator.CalculteSatus.msp.Sp.IsOpen) { new PopupWindow("未插入串口!", "警告").ShowDialog(); return; @@ -245,7 +245,7 @@ else { Correlator.CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; LogHelper.Info("定位计算前数据清除!!!"); CorrelatorDataSaveThread.devDataValueMap.Clear(); diff --git a/PipeGallery/Correlator/CalculteThread.cs b/PipeGallery/Correlator/CalculteThread.cs index ff1ae03..6a02ff4 100644 --- a/PipeGallery/Correlator/CalculteThread.cs +++ b/PipeGallery/Correlator/CalculteThread.cs @@ -20,21 +20,21 @@ { class CalculteThread { - Timer timer = new Timer(); + private readonly Timer _timer = new Timer(); //private DispatcherTimer passTimer = new DispatcherTimer(); - private int passTime = 0; //经过的时间 + private int _passTime = 0; //经过的时间 public void exe() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //计时器过程 - timer.Enabled = true; - timer.Interval = 900; - timer.Start(); - timer.Elapsed += new ElapsedEventHandler(showTimer); + _timer.Enabled = true; + _timer.Interval = 900; + _timer.Start(); + _timer.Elapsed += new ElapsedEventHandler(ShowTimer); ////启动一个定时器,改变绑定时间数值 //App.Current.Dispatcher.Invoke((Action)(() => @@ -72,7 +72,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(CollectData); saveThread.Start(); //Mtable计算过程 @@ -81,7 +81,7 @@ calThread.IsBackground = true; calThread.Start(); */ - Task calThread = new Task(() => caculate()); + var calThread = new Task(Calculate); calThread.Start(); //HomePageViewModel.Instance.PipeDiameter = CalculteSatus.diameterData + "mm"; @@ -121,7 +121,7 @@ public void exe1() { CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; //数据采集过程 /* 线程优化1 @@ -129,7 +129,7 @@ saveThread.IsBackground = true; saveThread.Start(); */ - Task saveThread = new Task(() => collectData()); + var saveThread = new Task(() => CollectData()); saveThread.Start(); @@ -139,24 +139,26 @@ freThread.IsBackground = true; freThread.Start(); */ - Task freThread = new Task(() => getFreWave()); + var freThread = new Task(() => GetFreWave()); freThread.Start(); } - private void showTimer(object source, ElapsedEventArgs e) + private void ShowTimer(object source, ElapsedEventArgs e) { - HomePageViewModel.Instance.Pass = passTime.ToString() + "s"; - passTime++; + HomePageViewModel.Instance.Pass = _passTime.ToString() + "s"; + _passTime++; } /// /// 下发唤醒指令 /// - private void collectData() + private void CollectData() { - while (CalculteSatus.msp.collectData) + while (CalculteSatus.msp.CollectData) { - SenderClass.sendCorrelatorWakeUpCmd(CalculteSatus.msp.sp); + CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" => 数据清除"); + SenderClass.SendCorrelatorWakeUpCmd(CalculteSatus.msp.Sp); Thread.Sleep(10000); } } @@ -164,9 +166,9 @@ /// /// 调用滤波器接口 /// - private void getFreWave() + private void GetFreWave() { - int num = 0; + var num = 0; while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) @@ -181,14 +183,14 @@ } } - CalculteSatus.msp.collectData = false; //停止下发采集指令 + CalculteSatus.msp.CollectData = false; //停止下发采集指令 CalculteSatus.msp.timer.Start(); //开始状态采集指令的发送 ClassCalculate calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.getFreWave(); + calculate.GetFreWave(); CalculteSatus.isRedCollectComplete = true; CalculteSatus.isBlueCollectComplete = true; @@ -197,13 +199,13 @@ /// /// 计算过程 /// - private void caculate() + private void Calculate() { while (!CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev1) || !CorrelatorDataSaveThread.devDataValueMap.ContainsKey(DevCode.Dev2)) { Thread.Sleep(100); - if (passTime >= 60) + if (_passTime >= 60) { CalculteSatus.isCalculateStop = true; MessageBox.Show("接收不到数据,请重启软件"); @@ -217,20 +219,20 @@ } } - ClassCalculate calculate = ClassCalculate.Instance; + var calculate = ClassCalculate.Instance; calculate.Device1 = DevCode.Dev1; calculate.Device2 = DevCode.Dev2; - calculate.execute(); + CalculteSatus.msp.CollectData = false; + calculate.Execute(); Label: //passTimer.Stop(); - timer.Stop(); - passTime = 0; + _timer.Stop(); + _passTime = 0; Thread.Sleep(1000); HomePageViewModel.Instance.StartState = false; - CalculteSatus.msp.collectData = false; HomePageViewModel.Instance.BtnFilterIsEnabled = false; HomePageViewModel.Instance.BtnSaveIsEnabled = false; @@ -244,70 +246,71 @@ CorrelatorDataSaveThread.devDataValueMap.Clear(); ////////////////////截图///////////////////////////// - int width = Screen.PrimaryScreen.Bounds.Width; - int height = Screen.PrimaryScreen.Bounds.Height; + var width = Screen.PrimaryScreen.Bounds.Width; + var height = Screen.PrimaryScreen.Bounds.Height; - Bitmap memoryImage = new Bitmap(width, height); - Graphics memoryGraphics = Graphics.FromImage(memoryImage); + var memoryImage = new Bitmap(width, height); + var memoryGraphics = Graphics.FromImage(memoryImage); memoryGraphics.CopyFromScreen(0, 0, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); - MemoryStream data = new MemoryStream(); + var data = new MemoryStream(); memoryImage.Save(data, ImageFormat.Png); - String strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\快照." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".png"; + var strPath = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\快照." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".png"; - FileStream fs = new FileStream(strPath, FileMode.OpenOrCreate); - BinaryWriter w = new BinaryWriter(fs); + var fs = new FileStream(strPath, FileMode.OpenOrCreate); + var w = new BinaryWriter(fs); w.Write(data.ToArray()); fs.Close(); data.Close(); //测试序号+1 - String josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); + var jo = JObject.Parse(jsonString); - int locate = Convert.ToInt32(jo["locate"].ToString()); - int count = locate; //一轮计算次数 + var locate = Convert.ToInt32(jo["locate"].ToString()); + var count = locate; //一轮计算次数 locate = locate >= 6 ? 1 : ++locate; jo["locate"] = locate; //jo["locate"] = ++locate; CorrelatorDataSaveThread.Locate = locate; - writeJsonFile(jo); + WriteJsonFile(jo); if (CalculteSatus.isCalculateStop) //定位计算中途停止 { //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } if (count <= 6) { - ColumnGroupInfo snapshot = - DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; - ColumnGroupInfo snapshot_copy = new ColumnGroupInfo(); - snapshot_copy.ColumnListInfo = snapshot.ColumnListInfo; - snapshot_copy.ID = Guid.NewGuid().ToString(); - DataFactory.SnapshotList.Add(snapshot_copy.ID); - DataFactory.ChartBaseDictionary[snapshot_copy.ID] = snapshot_copy; + var snapshot = DataFactory.ChartBaseDictionary[DataFactory.HomePageChartId] as ColumnGroupInfo; + var snapshotCopy = new ColumnGroupInfo + { + ColumnListInfo = snapshot.ColumnListInfo, + ID = Guid.NewGuid().ToString() + }; + DataFactory.SnapshotList.Add(snapshotCopy.ID); + DataFactory.ChartBaseDictionary[snapshotCopy.ID] = snapshotCopy; if (count == 3) //完成3次测试,进行第一轮判断 { - App.Current.Dispatcher.Invoke((Action)(() => + App.Current.Dispatcher.Invoke(() => { CalculteSatus.disAs.Sort(); if (CalculteSatus.disAs[2] - CalculteSatus.disAs[1] < 2 || CalculteSatus.disAs[1] - CalculteSatus.disAs[0] < 2) { - bool? b = new PopupWindow("需要再测试3次").ShowDialog(); + var b = new PopupWindow("需要再测试3次").ShowDialog(); if (b != true) { CalculteSatus.createView = 1; //取消 @@ -315,7 +318,7 @@ } else { - bool? b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); + var b = new PopupWindow("这段管线不存在泄漏").ShowDialog(); CalculteSatus.createView = 2; //创建对比视图 @@ -331,9 +334,9 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); } - })); + }); return; } @@ -342,7 +345,7 @@ CalculteSatus.disAs.Sort(); CalculteSatus.disBs.Sort(); - String txt = ""; + var txt = ""; double disA = 0; double disB = 0; @@ -375,7 +378,7 @@ } else if (CalculteSatus.disAs[5] - CalculteSatus.disAs[1] < 2) { - for (int i = 1; i < 6; i++) + for (var i = 1; i < 6; i++) { disA += CalculteSatus.disAs[i]; disB += CalculteSatus.disBs[5 - i]; @@ -413,14 +416,14 @@ //测试序号复位 jo["locate"] = 1; - writeJsonFile(jo); + WriteJsonFile(jo); return; } App.Current.Dispatcher.Invoke((Action)(() => { - String txt = ""; + var txt = ""; if (count <= 3) { txt += "需进行第" + (++count) + "次测试(至少测3次)"; @@ -430,7 +433,7 @@ txt += "需进行第" + (++count) + "次测试(共6次)"; } - bool? b = new PopupWindow(txt).ShowDialog(); + var b = new PopupWindow(txt).ShowDialog(); if (b != true) { CalculteSatus.createView = 1; @@ -439,9 +442,9 @@ } } - private void writeJsonFile(JObject jo) + private void WriteJsonFile(JObject jo) { - StreamWriter sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); + var sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "number.json"); sw.Write(JsonConvert.SerializeObject(jo)); sw.Flush(); sw.Close(); diff --git a/PipeGallery/Correlator/ClassCalculate.cs b/PipeGallery/Correlator/ClassCalculate.cs index 9a56005..cfbb8be 100644 --- a/PipeGallery/Correlator/ClassCalculate.cs +++ b/PipeGallery/Correlator/ClassCalculate.cs @@ -1,35 +1,23 @@ using System; -using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Text; using System.Windows.Forms; using MathWorks.MATLAB.NET.Arrays; using Newtonsoft.Json.Linq; -using PipeGallery.Manage; using PipeGallery.ViewModel; namespace PipeGallery.Correlator { public class ClassCalculate { - private static double[] vec1 = null; - private static double[] vec2 = null; - private string device1; - private string device2; - CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); + private static double[] _vec1 = null; + private static double[] _vec2 = null; + private readonly CorrelatorSingle.Correlator _correlator = new CorrelatorSingle.Correlator(); - public string Device1 - { - get { return device1; } - set { device1 = value; } - } + public string Device1 { get; set; } - public string Device2 - { - get { return device2; } - set { device2 = value; } - } - + public string Device2 { get; set; } private static ClassCalculate _instance; @@ -50,57 +38,56 @@ } } - public void getFreWave() + public void GetFreWave() { //if (vec1 == null || vec2 == null) // return; - int count = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - Object[] filterOutList = correlator.getFreWave(3, - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device1][count - 1], - (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[device2][count - 1], 7500); + var filterOutList = _correlator.getFreWave(3, + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device1][count - 1], + (MWNumericArray)CorrelatorDataSaveThread.devDataValueMap[Device2][count - 1], 7500); - CalculteSatus.fx = getFreArray((MWNumericArray)filterOutList[0]); //横坐标 - CalculteSatus.freA = getFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 - CalculteSatus.freB = getFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 + CalculteSatus.fx = GetFreArray((MWNumericArray)filterOutList[0]); //横坐标 + CalculteSatus.freA = GetFreArray((MWNumericArray)filterOutList[1]); //红色传感器曲线图纵坐标 + CalculteSatus.freB = GetFreArray((MWNumericArray)filterOutList[2]); //蓝色传感器曲线图纵坐标 CorrelatorDataSaveThread.devDataValueMap.Clear(); //将接收到的数据清除 } - public void execute() + public void Execute() { try { - //int i = CorrelatorDataSaveThread.devDataValueMap[device1].Count; - int count_1 = CorrelatorDataSaveThread.devDataValueMap[device2].Count; + var count1 = CorrelatorDataSaveThread.devDataValueMap[Device2].Count; - vec1 = CorrelatorDataSaveThread.devDataValueMap[device1][count_1 - 1]; //采集数据 - vec2 = CorrelatorDataSaveThread.devDataValueMap[device2][count_1 - 1]; + _vec1 = CorrelatorDataSaveThread.devDataValueMap[Device1][count1 - 1]; //采集数据 + _vec2 = CorrelatorDataSaveThread.devDataValueMap[Device2][count1 - 1]; //保存定位计算的数据 - String filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." - + CorrelatorDataSaveThread.Pipe + "\\测试数据." - + CorrelatorDataSaveThread.Locate + "." - + DateTime.Now.ToString("HHmmss") + ".txt"; - FileStream fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var filename = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\测试数据." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + ".txt"; + var fileStream = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.ReadWrite); - String locateData = DateTime.Now.ToString(); - foreach (double d in vec1) + var locateData = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + foreach (var d in _vec1) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - locateData += "?"; + locateData += "===============" + "\r\n"; - foreach (double d in vec2) + foreach (var d in _vec2) { - locateData += ((decimal)d).ToString("G") + "#"; + locateData += AppendEndZero(d) + "\r\n"; } - byte[] data = Encoding.Default.GetBytes(locateData); + var data = Encoding.Default.GetBytes(locateData); fileStream.Position = fileStream.Length; fileStream.Write(data, 0, data.Length); fileStream.Flush(); @@ -121,18 +108,18 @@ //HomePageViewModel.Instance.BtnFilterIsEnabled = true; - MWNumericArray[] dis = new MWNumericArray[3] { 0, 0, 0 }; - MWNumericArray[] velo = new MWNumericArray[3] { 1, 0, 0 }; + var dis = new MWNumericArray[3] { 0, 0, 0 }; + var velo = new MWNumericArray[3] { 1, 0, 0 }; - for (int i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) + for (var i = 0; i < CalculteSatus.MaterialDatas.Count && i < 3; i++) { dis[i] = CalculteSatus.MaterialDatas[i].Length; velo[i] = CalculteSatus.MaterialDatas[i].Soundspeed; } //TODO 2022-11-29 暂时只测试一次,方便定位 - Caculator((MWNumericArray)vec1, (MWNumericArray)vec2, fs, dis, velo); + Calculator((MWNumericArray)_vec1, (MWNumericArray)_vec2, fs, dis, velo); // while (CalculteSatus.currNum <= CalculteSatus.totalNum) // { // if (CorrelatorDataSaveThread.isNoFilter) @@ -198,9 +185,16 @@ } } + //数据补零,保持长度一致 + private static string AppendEndZero(double d) + { + //数据固定长度16 + return ((decimal)d).ToString("G").PadRight(16, '0'); + } + //private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray dis, // MWNumericArray material, MWNumericArray diamLow, MWNumericArray diamHigh, MWNumericArray velo) - private void Caculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, + private void Calculator(MWNumericArray vecAMW, MWNumericArray vecBMW, MWNumericArray fs, MWNumericArray[] dis, MWNumericArray[] velo) { //CorrelatorSingle.Correlator correlator = new CorrelatorSingle.Correlator(); @@ -223,20 +217,19 @@ MWNumericArray cutFreHigh = CalculteSatus.cutFreHigh; //接口调用: - Object[] outList = correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], + var outList = _correlator.locating(11, vecAMW, vecBMW, fs, dis[0], velo[0], dis[1], velo[1], dis[2], velo[2], material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh); - LogHelper.Info("算法结果数据:" + outList); //Object[] outList = CorrelatorDataSaveThread.isNoFilter ? correlator.locating(11, vecAMW, vecBMW, fs, dis, velo, material, diamLow, diamHigh, currNum, maxSnrIn, maxFreLowIn, maxFreHighIn, cutFreLow, cutFreHigh) : //correlator.typicalFreInter(7, vecAMW, vecBMW, fs, CorrelatorDataSaveThread.filterInfo.LowPass, CorrelatorDataSaveThread.filterInfo.HighPass, dis, velo); - double snr = Convert.ToDouble(outList[0].ToString()); //信噪比 - double disA = Convert.ToDouble(outList[1].ToString()); //距离A - double disB = Convert.ToDouble(outList[2].ToString()); //距离B - double correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 + var snr = Convert.ToDouble(outList[0].ToString()); //信噪比 + var disA = Convert.ToDouble(outList[1].ToString()); //距离A + var disB = Convert.ToDouble(outList[2].ToString()); //距离B + var correCoeff = Convert.ToDouble(outList[3].ToString()); //最大相关系数 - MWNumericArray corrCoeffVecAbsMW = (MWNumericArray)outList[4]; - MWNumericArray disVecMW = (MWNumericArray)outList[5]; + var corrCoeffVecAbsMw = (MWNumericArray)outList[4]; + var disVecMw = (MWNumericArray)outList[5]; CalculteSatus.timeDiff = CorrelatorDataSaveThread.isNoFilter ? Convert.ToDouble(outList[10].ToString()) @@ -244,8 +237,8 @@ //double[] corrCoeffVecAbs = getArray(corrCoeffVecAbsMW);//柱状图纵坐标集合 //double[] disVec = getArray(disVecMW);//柱状图横坐标集合 - CalculteSatus.corrCoeffVecAbs = getArray(corrCoeffVecAbsMW); //柱状图纵坐标集合 - CalculteSatus.disVec = getArray(disVecMW); //柱状图横坐标集合 + CalculteSatus.corrCoeffVecAbs = GetArray(corrCoeffVecAbsMw); //柱状图纵坐标集合 + CalculteSatus.disVec = GetArray(disVecMw); //柱状图横坐标集合 //CalculteSatus.fx = getArray((MWNumericArray)filterOutList[0]);//横坐标 //CalculteSatus.freA = getArray((MWNumericArray)filterOutList[1]);//红色传感器曲线图纵坐标 @@ -253,17 +246,16 @@ if (CorrelatorDataSaveThread.isNoFilter) { - int maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 - int maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 - bool flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 - int totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 + var maxFreLowOut = Convert.ToInt32(outList[6].ToString()); //低频 + var maxFreHighOut = Convert.ToInt32(outList[7].ToString()); //高频 + var flag = Convert.ToBoolean(Convert.ToInt32(outList[8].ToString())); //是否泄漏 + var totalNum = Convert.ToInt32(outList[9].ToString()); //总的调用次数 CalculteSatus.totalNum = totalNum; CalculteSatus.maxFreLowIn = maxFreLowOut; CalculteSatus.maxFreHighIn = maxFreHighOut; - HomePageViewModel.Instance.FilterValue = - maxFreLowOut.ToString() + "-" + maxFreHighOut.ToString() + "Hz"; + HomePageViewModel.Instance.FilterValue = maxFreLowOut + "-" + maxFreHighOut + "Hz"; } CalculteSatus.currNum++; @@ -276,15 +268,16 @@ //CalculteSatus.disAs.Add(disA); //CalculteSatus.disBs.Add(disB); - //HomePageViewModel.Instance.SpeedDistance = timeDiff; - //HomePageViewModel.Instance.SpeedValue = timeDiff.ToString() + "ms"; + HomePageViewModel.Instance.SpeedDistance = CalculteSatus.timeDiff; + HomePageViewModel.Instance.SpeedValue = + CalculteSatus.timeDiff.ToString(CultureInfo.InvariantCulture) + "ms"; } - private double[] getArray(MWNumericArray inMW) + private double[] GetArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num; i++) { outArray[i] = Convert.ToDouble(inMW[i + 1].ToString()); } @@ -293,11 +286,11 @@ } - private double[] getFreArray(MWNumericArray inMW) + private double[] GetFreArray(MWNumericArray inMW) { - int num = inMW.NumberOfElements; - double[] outArray = new double[num]; - for (int i = 0; i < num - 1; i++) + var num = inMW.NumberOfElements; + var outArray = new double[num]; + for (var i = 0; i < num - 1; i++) { outArray[i] = Convert.ToDouble(inMW[i + 2].ToString()); } @@ -312,13 +305,13 @@ /// /// /// - private static int getVelo(string material, int diamLow, int diamHigh) + private static int GetVelo(string material, int diamLow, int diamHigh) { if (CorrelatorDataSaveThread.materialVeloMaps.ContainsKey(material)) { - List materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; + var materialVelo = CorrelatorDataSaveThread.materialVeloMaps[material]; - foreach (MaterialVelo mv in materialVelo) + foreach (var mv in materialVelo) { if (mv.LowDiameter == diamLow && (mv.HighDiameter == diamHigh || mv.HighDiameter == -1)) { @@ -328,17 +321,17 @@ } else { - string josnString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", + var jsonString = File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "config.json", Encoding.UTF8); - JObject jo = JObject.Parse(josnString); + var jo = JObject.Parse(jsonString); foreach (var v in jo["CustomMaterial"]) { if (material == v["name"].ToString()) { - string[] diameterArr = v["range"].ToString().Split('-'); - int lowDiameter = int.Parse(diameterArr[0]); - int highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; + var diameterArr = v["range"].ToString().Split('-'); + var lowDiameter = int.Parse(diameterArr[0]); + var highDiameter = diameterArr.Length == 2 ? int.Parse(diameterArr[1]) : -1; if (lowDiameter == diamLow && highDiameter == diamHigh) { diff --git a/PipeGallery/Correlator/CmdClass.cs b/PipeGallery/Correlator/CmdClass.cs index 381657e..ee857c8 100644 --- a/PipeGallery/Correlator/CmdClass.cs +++ b/PipeGallery/Correlator/CmdClass.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.IO.Ports; +using System.Text; using PipeGallery.Manage; using PipeGallery.SensorHubTag; @@ -8,7 +11,7 @@ { public class CmdClass { - private static string devCode = ""; + private static string _devCode = ""; /// /// 数据解析 @@ -22,24 +25,24 @@ // else // analysisDataValue(receiveData, sp); //} - public void analysisDataValue(byte[] receiveData, SerialPort sp) + public void AnalysisDataValue(byte[] receiveData, SerialPort sp) { - byte[] deviceId = new byte[6]; + var deviceId = new byte[6]; Array.Copy(receiveData, 4, deviceId, 0, 6); - String strDeviceId = StringUtil.ConvertBytes2String(deviceId); + var strDeviceId = StringUtil.ConvertBytes2String(deviceId); - byte[] pduType = new byte[2]; + var pduType = new byte[2]; Array.Copy(receiveData, 13, pduType, 0, 2); - byte[] settings = new byte[receiveData.Length - 18]; + var settings = new byte[receiveData.Length - 18]; Array.Copy(receiveData, 16, settings, 0, receiveData.Length - 18); //String devType = SensorHubClass.getDeviceTypeByPdu(pduType); - String operType = SensorHubClass.getOpeTypeByPdu(pduType); + var operType = SensorHubClass.getOpeTypeByPdu(pduType); - List tags = this.getTags(settings); - CellTag cellTag = this.getCellTag(tags); - SystemDateTag systemDateTag = this.getSystemDateTag(tags); + var tags = this.GetTags(settings); + var cellTag = this.GetCellTag(tags); + var systemDateTag = this.GetSystemDateTag(tags); try { @@ -66,7 +69,7 @@ if (operType == "WakeupResponse") { - devCode = strDeviceId; + _devCode = strDeviceId; sp.Write("+++"); LogHelper.Info("发送“+++”指令"); } @@ -77,7 +80,7 @@ } } - public void analysisSignalValue(String receiveDate, SerialPort sp) + public void AnalysisSignalValue(string receiveDate, SerialPort sp) { if (receiveDate.Contains("NO CARRIER")) { @@ -87,37 +90,37 @@ else if (receiveDate.Contains("ATS124?")) { //ATS124?\r\nN/A\r\nOK\r\n - string strReceiveDate = receiveDate.Replace("\r\n", ","); - string[] signalArray = strReceiveDate.Split(','); - DevStatus devStatus = CorrelatorDataSaveThread.devStatusMaps[devCode]; + var strReceiveDate = receiveDate.Replace("\r\n", ","); + var signalArray = strReceiveDate.Split(','); + var devStatus = CorrelatorDataSaveThread.devStatusMaps[_devCode]; devStatus.Signal = signalArray[1]; } } - private List getTags(byte[] strTags) + private List GetTags(byte[] strTags) { - List tags = new List(); + var tags = new List(); try { - int i = 0; + var i = 0; while (i < strTags.Length) { //get each tag from strTag and construct tag list; - byte[] oid = new byte[4]; - byte[] len = new byte[2]; + var oid = new byte[4]; + var len = new byte[2]; Array.Copy(strTags, i, oid, 0, 4); Array.Copy(strTags, i + 4, len, 0, 2); Array.Reverse(len); - int iLen = System.BitConverter.ToInt16(len, 0); - string strOid = StringUtil.ConvertBytes2String(oid); + int iLen = BitConverter.ToInt16(len, 0); + var strOid = StringUtil.ConvertBytes2String(oid); - byte[] value = new byte[iLen]; + var value = new byte[iLen]; Array.Copy(strTags, i + 6, value, 0, iLen); i = i + 6 + iLen; //TODO LIST:Construct a tag according to oid - Tag tag = TagFactory.create(strOid, iLen, value); + var tag = TagFactory.create(strOid, iLen, value); tags.Add(tag); } } @@ -129,30 +132,50 @@ return tags; } - private CellTag getCellTag(List tags) + private CellTag GetCellTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is CellTag) + if (tag is CellTag cellTag) { - return (CellTag)tag; + return cellTag; } } return null; } - private SystemDateTag getSystemDateTag(List tags) + private SystemDateTag GetSystemDateTag(List tags) { - foreach (Tag tag in tags) + foreach (var tag in tags) { - if (tag != null && tag is SystemDateTag) + if (tag is SystemDateTag dateTag) { - return (SystemDateTag)tag; + return dateTag; } } return null; } + + public static void SaveHexData(string devCode, byte[] receiveData) + { + var hexFileName = "data\\locate\\测试报告" + CorrelatorDataSaveThread.Date + "." + + CorrelatorDataSaveThread.Pipe + "\\" + devCode + "." + + CorrelatorDataSaveThread.Locate + "." + + DateTime.Now.ToString("HHmmss") + + ".txt"; + + var hexFileStream = new FileStream(hexFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite); + var hexVec = DateTime.Now.ToString(CultureInfo.InvariantCulture) + "\r\n"; + hexVec += devCode + "\r\n"; + hexVec += BitConverter.ToString(receiveData).Replace("-", ""); //采集数据 + + var hexData = Encoding.Default.GetBytes(hexVec); + hexFileStream.Position = hexFileStream.Length; + hexFileStream.Write(hexData, 0, hexData.Length); + hexFileStream.Flush(); + hexFileStream.Close(); + } } } \ No newline at end of file diff --git a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs index 60a403b..9be9718 100644 --- a/PipeGallery/Correlator/CorrelatorDataSaveThread.cs +++ b/PipeGallery/Correlator/CorrelatorDataSaveThread.cs @@ -7,8 +7,8 @@ { public static Dictionary> devDataValueMap = new Dictionary>(); - public static Dictionary> - devRangingDataValueMap = new Dictionary>(); //测距数据 + public static Dictionary> + devRangingDataValueMap = new Dictionary>(); //测距数据 public static bool isNoFilter = true; diff --git a/PipeGallery/Correlator/ManipulateSerialPort.cs b/PipeGallery/Correlator/ManipulateSerialPort.cs index 0715dbc..606dd84 100644 --- a/PipeGallery/Correlator/ManipulateSerialPort.cs +++ b/PipeGallery/Correlator/ManipulateSerialPort.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.IO.Ports; using System.Text; using System.Threading; @@ -6,20 +7,22 @@ using System.Windows; using PipeGallery.Manage; using PipeGallery.ViewModel; +using Application = System.Windows.Forms.Application; +using Timer = System.Timers.Timer; namespace PipeGallery.Correlator { class ManipulateSerialPort { - public SerialPort sp = new SerialPort(); //实例化串口通讯类 - public System.Timers.Timer timer = new System.Timers.Timer(); - public bool collectData = true; + public readonly SerialPort Sp = new SerialPort(); //实例化串口通讯类 + public readonly Timer timer = new Timer(); + public bool CollectData = true; //DevCode dev = new DevCode(); public ManipulateSerialPort() { - sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); + Sp.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived); } @@ -32,12 +35,14 @@ { try { - string strResult = ""; - byte[] bRequestInfo = getRequestInfo(ref strResult); + var strResult = ""; + var bRequestInfo = GetRequestInfo(ref strResult); if (bRequestInfo != null) { LogHelper.Info("接收到的数据:" + BitConverter.ToString(bRequestInfo).Replace("-", "")); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 接收到的数据: " + + BitConverter.ToString(bRequestInfo).Replace("-", "")); } else if (strResult != "") { @@ -50,15 +55,15 @@ if (bRequestInfo != null) { - if (sp == null) + if (Sp == null) return; else - new CmdClass().analysisDataValue(bRequestInfo, sp); + new CmdClass().AnalysisDataValue(bRequestInfo, Sp); } else { if (strResult != "") - new CmdClass().analysisSignalValue(strResult, sp); + new CmdClass().AnalysisSignalValue(strResult, Sp); } } catch (Exception ex) @@ -71,34 +76,34 @@ /// 数据接收 /// /// - private byte[] getRequestInfo(ref string strResult) + private byte[] GetRequestInfo(ref string strResult) { try { - while (sp.BytesToRead < 4) Thread.Sleep(5); - byte[] headerBuff = new byte[2]; - sp.Read(headerBuff, 0, 2); //读取数据 + while (Sp.BytesToRead < 4) Thread.Sleep(5); + var headerBuff = new byte[2]; + Sp.Read(headerBuff, 0, 2); //读取数据 if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范 { byte[] lengthBuffer = new byte[2]; - sp.Read(lengthBuffer, 0, 2); + Sp.Read(lengthBuffer, 0, 2); int length = StringUtil.ConvertBytes2Int(lengthBuffer); if (length < 12) { - sp.DiscardInBuffer(); //长度数据不符合,丢弃 + Sp.DiscardInBuffer(); //长度数据不符合,丢弃 LogHelper.Info("上传数组长度不够,丢弃数据"); return null; } - while (sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 + while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待 byte[] result = new byte[length + 6]; result[0] = headerBuff[0]; result[1] = headerBuff[1]; result[2] = lengthBuffer[0]; result[3] = lengthBuffer[1]; - sp.Read(result, 4, result.Length - 4); + Sp.Read(result, 4, result.Length - 4); //if (result[result.Length - 1] != 0x00 || result[result.Length - 2] != 0x00 || // result[result.Length - 3] != 0x00 || result[result.Length - 4] != 0x00) @@ -124,14 +129,14 @@ else { Thread.Sleep(10); - String str = Encoding.UTF8.GetString(headerBuff) + sp.ReadExisting(); + String str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting(); if (str != "" && str.Contains("\r\n")) { strResult = str; } else { - sp.DiscardInBuffer(); + Sp.DiscardInBuffer(); } } @@ -140,9 +145,9 @@ catch (Exception ex) { MessageBox.Show(ex.Message, "出错提示"); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); return null; } } @@ -150,25 +155,25 @@ /// /// 显示信号电量 /// - public void showSignal() + public void ShowSignal() { - double configItr = 20000; - byte devid = 0x01; + const double configItr = 20000; + byte devId = 0x01; try { - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); if (CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMapx = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMapx.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMapx.Signal)); HomePageViewModel.Instance.TransmitterAFault = devMapx.Status == "1" ? true : false; } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); } catch (Exception e) @@ -181,14 +186,14 @@ { try { - devid = (byte)((devid == 0x01) ? 0x02 : 0x01); - SenderClass.sendCellAndStatusCollectCmd(sp, devid); + devId = (byte)((devId == 0x01) ? 0x02 : 0x01); + SenderClass.SendCellAndStatusCollectCmd(Sp, devId); Thread.Sleep(7000); - if (devid.ToString() == DevCode.Dev1.Substring(11, 1) && + if (devId.ToString() == DevCode.Dev1.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev1)) { - DevStatus devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; + var devMap1 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1]; HomePageViewModel.Instance.TransmitterABattery = Convert.ToDouble(devMap1.Cell); HomePageViewModel.Instance.TransmitterASignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap1.Signal)); @@ -207,10 +212,10 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev1].Signal = "-121"; //初始化信号为0 } - else if (devid.ToString() == DevCode.Dev2.Substring(11, 1) && + else if (devId.ToString() == DevCode.Dev2.Substring(11, 1) && CorrelatorDataSaveThread.devStatusMaps.ContainsKey(DevCode.Dev2)) { - DevStatus devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; + var devMap2 = CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2]; HomePageViewModel.Instance.TransmitterBBattery = Convert.ToDouble(devMap2.Cell); HomePageViewModel.Instance.TransmitterBSignalIntensity = SetSignalIntensity(Convert.ToInt32(devMap2.Signal)); @@ -230,7 +235,7 @@ CorrelatorDataSaveThread.devStatusMaps[DevCode.Dev2].Signal = "-121"; //初始化信号为0 } - sp.Write("ATA" + Environment.NewLine); + Sp.Write("ATA" + Environment.NewLine); LogHelper.Info("发送“ATA+回车”指令"); //Thread.Sleep(10000); @@ -252,9 +257,9 @@ catch (Exception e) { timer.Stop(); - System.Windows.Forms.Application.Restart(); //重启当前程序 + Application.Restart(); //重启当前程序 Thread.Sleep(2000); - System.Diagnostics.Process.GetCurrentProcess().Kill(); + Process.GetCurrentProcess().Kill(); } }); } @@ -263,7 +268,7 @@ { //System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = interval; - timer.Elapsed += delegate(object sender, System.Timers.ElapsedEventArgs e) { action(e); }; + timer.Elapsed += delegate(object sender, ElapsedEventArgs e) { action(e); }; timer.Enabled = true; } diff --git a/PipeGallery/Correlator/SenderClass.cs b/PipeGallery/Correlator/SenderClass.cs index f01350b..16e0e86 100644 --- a/PipeGallery/Correlator/SenderClass.cs +++ b/PipeGallery/Correlator/SenderClass.cs @@ -9,9 +9,8 @@ /// /// 下发唤醒指令 /// - /// /// - public static void sendCorrelatorWakeUpCmd(SerialPort sp) + public static void SendCorrelatorWakeUpCmd(SerialPort sp) { try { @@ -73,7 +72,8 @@ afcrc.CopyTo(reBt, 2); */ LogHelper.Info("下发相关仪唤醒信息:" + BitConverter.ToString(afcrc)); - + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发相关仪唤醒信息 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) @@ -87,7 +87,7 @@ /// /// /// - public static void sendCellAndStatusCollectCmd(SerialPort sp, byte devid) + public static void SendCellAndStatusCollectCmd(SerialPort sp, byte devid) { try { @@ -147,6 +147,8 @@ btcrc.CopyTo(afcrc, result.Length); LogHelper.Info("下发状态采集指令:" + BitConverter.ToString(afcrc)); + Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + @" 下发状态采集指令 => " + + BitConverter.ToString(afcrc)); sp.Write(afcrc, 0, afcrc.Length); } catch (Exception e) diff --git a/PipeGallery/MainWindow.xaml b/PipeGallery/MainWindow.xaml index 746bc2f..99d36e5 100644 --- a/PipeGallery/MainWindow.xaml +++ b/PipeGallery/MainWindow.xaml @@ -7,6 +7,7 @@ Left="0" Top="0" WindowStartupLocation="Manual" - WindowState="Maximized"> + WindowState="Maximized" + WindowStyle="None"> diff --git a/PipeGallery/PipeGallery.csproj b/PipeGallery/PipeGallery.csproj index c277173..7a81a20 100644 --- a/PipeGallery/PipeGallery.csproj +++ b/PipeGallery/PipeGallery.csproj @@ -101,36 +101,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs b/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs index 1764d65..a214289 100644 --- a/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs +++ b/PipeGallery/SensorHubTag/CorrelatorTagHandler.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using PipeGallery.Correlator; +using PipeGallery.Manage; namespace PipeGallery.SensorHubTag { @@ -15,51 +16,45 @@ return false; } - UploadTag uploadTag = tag as UploadTag; + var uploadTag = tag as UploadTag; return uploadTag.BizType == 4; //噪声 } //0000 0071 前四个字节暂时不用 - public override void execute(Tag tag, String devCode, CellTag cellTag, + public override void execute(Tag tag, string devCode, CellTag cellTag, SystemDateTag systemDateTag) { - double[] clobData = new double[3750]; //3750个采样点 + var clobData = new double[3750]; //3750个采样点 //TODO LIST:解析噪声数据保存噪声数据 - UploadTag noiseTag = tag as UploadTag; - int itv = noiseTag.CollectInter; + var noiseTag = tag as UploadTag; + var itv = noiseTag?.CollectInter; //String collecTime = systemDateTag.CollectDate; - int len = noiseTag.Len; - byte[] dataValue = noiseTag.DataValue; + var len = noiseTag?.Len; + var dataValue = noiseTag?.DataValue; + //保存原始16进制数据 + CmdClass.SaveHexData(devCode, dataValue); //int validCount = dataValue.Length / 6; //bool flag = true;//是否有数据缺失标志位 // LogHelper.Info("相关仪数据上传TAG:oid:" + noiseTag.Oid + " 采集间隔: " + //itv + "采集时间:" + collecTime + "上传数值:" + dataValue); - int num = len / 3; //上传的噪声数据个数,修改末3个字节 - for (int i = 0; i < num; i++) + var num = len / 3; //上传的噪声数据个数,修改末3个字节 + for (var i = 0; i < num; i++) { - byte[] dStr = new byte[3]; + var dStr = new byte[3]; Array.Copy(dataValue, i * 3, dStr, 0, 3); clobData[i] = strHexToDouble(dStr); } - string devCodeOther; - if (devCode == DevCode.Dev1) - { - devCodeOther = DevCode.Dev2; - } - else - { - devCodeOther = DevCode.Dev1; - } + var devCodeOther = devCode == DevCode.Dev1 ? DevCode.Dev2 : DevCode.Dev1; if (CorrelatorDataSaveThread.devDataValueMap.ContainsKey(devCode)) { - int devCodeLength = CorrelatorDataSaveThread.devDataValueMap[devCode].Count; - int devCodeOtherLength = CorrelatorDataSaveThread.devDataValueMap[devCodeOther].Count; + var devCodeLength = CorrelatorDataSaveThread.devDataValueMap[devCode].Count; + var devCodeOtherLength = CorrelatorDataSaveThread.devDataValueMap[devCodeOther].Count; if (devCodeLength == devCodeOtherLength && devCode == DevCode.Dev1) { @@ -82,14 +77,13 @@ else if (devCode == DevCode.Dev1 || (devCode == DevCode.Dev2 && CorrelatorDataSaveThread.devDataValueMap.ContainsKey(devCodeOther))) { - List clobDataDoubleArray = new List(); - clobDataDoubleArray.Add(clobData); + var clobDataDoubleArray = new List { clobData }; CorrelatorDataSaveThread.devDataValueMap.Add(devCode, clobDataDoubleArray); //LogHelper.Info("设备【" + devCode + "】添加到Map"); } else { - //LogHelper.Info("将设备【" + devCode + "】数据丢弃"); + LogHelper.Info("将设备【" + devCode + "】数据丢弃"); } //////////////////////////////////////////////////////////////////////////////////////// @@ -101,9 +95,9 @@ if (src.Length != 3) return 0; - Int16 result1 = src[0]; - Int16 result2 = src[1]; - Int16 result3 = src[2]; + short result1 = src[0]; + short result2 = src[1]; + short result3 = src[2]; if ((result1 & 0x80) == 0x80) { @@ -112,7 +106,7 @@ result3 = Convert.ToInt16(result3 - 255); } - double data = (((result1 * 65536 + result2 * 256 + result3) * 5) / 83.88607) / 100000; + var data = (result1 * 65536 + result2 * 256 + result3) * 5 / 83.88607 / 100000; //String strData = ((decimal)Math.Round(data, 8)).ToString(); diff --git a/PipeGallery/View/AuditionView.xaml.cs b/PipeGallery/View/AuditionView.xaml.cs index 875e1f4..6021caf 100644 --- a/PipeGallery/View/AuditionView.xaml.cs +++ b/PipeGallery/View/AuditionView.xaml.cs @@ -56,12 +56,12 @@ if (this.btnRed.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); } if (this.btnBlue.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); } } @@ -93,7 +93,7 @@ private void btnRed_Click(object sender, RoutedEventArgs e) { - if (!CalculteSatus.msp.sp.IsOpen) + if (!CalculteSatus.msp.Sp.IsOpen) { this.btnRed.IsChecked = false; new PopupWindow("未插入串口!").ShowDialog(); @@ -102,7 +102,7 @@ if (this.btnRed.IsChecked == false || this.btnRed.IsChecked == null) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); String josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); @@ -118,7 +118,7 @@ { if (this.btnBlue.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); this.btnBlue.IsChecked = false; } @@ -131,7 +131,7 @@ private void btnBlue_Click(object sender, RoutedEventArgs e) { - if (!CalculteSatus.msp.sp.IsOpen) + if (!CalculteSatus.msp.Sp.IsOpen) { this.btnBlue.IsChecked = false; new PopupWindow("未插入串口!").ShowDialog(); @@ -140,7 +140,7 @@ if (this.btnBlue.IsChecked == false || this.btnBlue.IsChecked == null) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev2); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev2); String josnString = File.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory + "number.json", Encoding.UTF8); @@ -156,7 +156,7 @@ { if (this.btnRed.IsChecked == true) { - SenderClass.sendSoundStopCmd(CalculteSatus.msp.sp, DevCode.Dev1); + SenderClass.sendSoundStopCmd(CalculteSatus.msp.Sp, DevCode.Dev1); this.btnRed.IsChecked = false; } @@ -175,7 +175,7 @@ Correlator.CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 Thread.Sleep(3000); - SenderClass.sendSoundCollectCmd(CalculteSatus.msp.sp, devcode as string); + SenderClass.sendSoundCollectCmd(CalculteSatus.msp.Sp, devcode as string); Thread.Sleep(2000); CalculteSatus.isListening = true; new Thread(new ThreadStart(timer)) { IsBackground = true }.Start(); diff --git a/PipeGallery/View/FilterEditView.xaml.cs b/PipeGallery/View/FilterEditView.xaml.cs index cc418d7..19f259d 100644 --- a/PipeGallery/View/FilterEditView.xaml.cs +++ b/PipeGallery/View/FilterEditView.xaml.cs @@ -217,7 +217,7 @@ Correlator.CalculteSatus.cutFreHigh = high; } - if (!Correlator.CalculteSatus.msp.sp.IsOpen) + if (!Correlator.CalculteSatus.msp.Sp.IsOpen) { new PopupWindow("未插入串口!", "警告").ShowDialog(); return; @@ -245,7 +245,7 @@ else { Correlator.CalculteSatus.msp.timer.Stop(); //停止状态采集指令的发送 - CalculteSatus.msp.collectData = true; + CalculteSatus.msp.CollectData = true; LogHelper.Info("定位计算前数据清除!!!"); CorrelatorDataSaveThread.devDataValueMap.Clear(); diff --git a/PipeGallery/View/HomePageView.xaml b/PipeGallery/View/HomePageView.xaml index d6e37d1..7ebfd51 100644 --- a/PipeGallery/View/HomePageView.xaml +++ b/PipeGallery/View/HomePageView.xaml @@ -553,7 +553,6 @@ Margin="0,2" HorizontalAlignment="Left" Content="干扰采集" - IsEnabled="{Binding BtnFilterIsEnabled}" Style="{StaticResource BtnHomepageStyle}"> @@ -569,7 +568,6 @@ Margin="0,2" HorizontalAlignment="Left" Content="听音" - IsEnabled="{Binding BtnAuditionIsEnabled}" Style="{StaticResource BtnHomepageStyle}"> @@ -585,7 +583,6 @@ Margin="0,2" HorizontalAlignment="Left" Content="快照" - IsEnabled="{Binding BtnSnapshotIsEnabled}" Style="{StaticResource BtnHomepageStyle}"> @@ -602,7 +599,6 @@ Margin="0,2" HorizontalAlignment="Right" Content="复位" - IsEnabled="{Binding BtnResetIsEnabled}" Style="{StaticResource BtnHomepageStyle}"> @@ -619,7 +615,6 @@ Margin="0,2" HorizontalAlignment="Right" Content="{Binding StartState, Converter={StaticResource pipeMaterialContentConverter}}" - IsEnabled="{Binding BtnStartIsEnabled}" Style="{StaticResource BtnHomepageStartStyle}" Tag="{Binding StartState, Converter={StaticResource pipeMaterialStateConverter}}" />