diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index 7d38620..6cc9b26 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -27,6 +27,7 @@
public event EventHandler DetectNoiseEvent;
public event EventHandler StartCalculateEvent;
public event EventHandler CheckResponseEvent;
+ public event EventHandler ResponseIndexReceivedEvent;
public SerialPortServiceImpl(IEventAggregator eventAggregator, IAudioService audioService,
ICommandService commandService, IApplicationDataService dataService)
@@ -156,10 +157,11 @@
{
if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
{
+ //取出seq,确定收到的是第几包数据
int index = receivedData[15];
// "SerialPortServiceImpl".WriteLog($@"index => {index}");
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
+ var indexEventArgs = new ResponseIndexEventArgs(deviceId, index);
+ ResponseIndexReceivedEvent?.Invoke(this, indexEventArgs);
var response = BitConverter.ToString(receivedData).Replace("-", "");
//收集数据
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index 7d38620..6cc9b26 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -27,6 +27,7 @@
public event EventHandler DetectNoiseEvent;
public event EventHandler StartCalculateEvent;
public event EventHandler CheckResponseEvent;
+ public event EventHandler ResponseIndexReceivedEvent;
public SerialPortServiceImpl(IEventAggregator eventAggregator, IAudioService audioService,
ICommandService commandService, IApplicationDataService dataService)
@@ -156,10 +157,11 @@
{
if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
{
+ //取出seq,确定收到的是第几包数据
int index = receivedData[15];
// "SerialPortServiceImpl".WriteLog($@"index => {index}");
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
+ var indexEventArgs = new ResponseIndexEventArgs(deviceId, index);
+ ResponseIndexReceivedEvent?.Invoke(this, indexEventArgs);
var response = BitConverter.ToString(receivedData).Replace("-", "");
//收集数据
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml b/Correlator/Dialog/CheckResponseDialog.xaml
index a571920..95785ce 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml
+++ b/Correlator/Dialog/CheckResponseDialog.xaml
@@ -2,6 +2,7 @@
x:Class="Correlator.Dialog.CheckResponseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cvt="clr-namespace:Correlator.Converter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:hc="https://handyorg.github.io/handycontrol"
@@ -16,7 +17,7 @@
+
+
@@ -71,6 +99,12 @@
+
+
+
+
+
+
@@ -78,11 +112,13 @@
+ FontSize="16"
+ IsEnabled="{Binding RedNextStepButtonState}" />
@@ -105,17 +141,45 @@
Margin="0,0,10,0"
VerticalAlignment="Center"
Orientation="Vertical">
-
-
-
+ ItemsSource="{Binding BlueResponseCollection}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,6 +187,12 @@
+
+
+
+
+
+
@@ -130,9 +200,9 @@
@@ -141,28 +211,12 @@
-
-
-
-
-
-
-
-
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index 7d38620..6cc9b26 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -27,6 +27,7 @@
public event EventHandler DetectNoiseEvent;
public event EventHandler StartCalculateEvent;
public event EventHandler CheckResponseEvent;
+ public event EventHandler ResponseIndexReceivedEvent;
public SerialPortServiceImpl(IEventAggregator eventAggregator, IAudioService audioService,
ICommandService commandService, IApplicationDataService dataService)
@@ -156,10 +157,11 @@
{
if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
{
+ //取出seq,确定收到的是第几包数据
int index = receivedData[15];
// "SerialPortServiceImpl".WriteLog($@"index => {index}");
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
+ var indexEventArgs = new ResponseIndexEventArgs(deviceId, index);
+ ResponseIndexReceivedEvent?.Invoke(this, indexEventArgs);
var response = BitConverter.ToString(receivedData).Replace("-", "");
//收集数据
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml b/Correlator/Dialog/CheckResponseDialog.xaml
index a571920..95785ce 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml
+++ b/Correlator/Dialog/CheckResponseDialog.xaml
@@ -2,6 +2,7 @@
x:Class="Correlator.Dialog.CheckResponseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cvt="clr-namespace:Correlator.Converter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:hc="https://handyorg.github.io/handycontrol"
@@ -16,7 +17,7 @@
+
+
@@ -71,6 +99,12 @@
+
+
+
+
+
+
@@ -78,11 +112,13 @@
+ FontSize="16"
+ IsEnabled="{Binding RedNextStepButtonState}" />
@@ -105,17 +141,45 @@
Margin="0,0,10,0"
VerticalAlignment="Center"
Orientation="Vertical">
-
-
-
+ ItemsSource="{Binding BlueResponseCollection}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,6 +187,12 @@
+
+
+
+
+
+
@@ -130,9 +200,9 @@
@@ -141,28 +211,12 @@
-
-
-
-
-
-
-
-
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs
index 4398657..4873020 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml.cs
+++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs
@@ -1,18 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using System.Windows.Shapes;
-using System.Windows.Threading;
-using Correlator.DataService;
-using Correlator.Events;
-using Correlator.Model;
-using Correlator.SensorHubTag;
-using Correlator.Util;
-using Prism.Events;
-using Prism.Services.Dialogs;
+using System.Windows.Controls;
namespace Correlator.Dialog
{
@@ -21,373 +7,9 @@
///
public partial class CheckResponseDialog : UserControl
{
- private readonly DispatcherTimer _redResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _blueResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _checkResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private static readonly Lazy LazyDataBase = new Lazy(
- () => new DataBaseManager()
- );
-
- private bool _isCheckRedSensor;
- private bool _isCheckBlueSensor;
- private readonly IEventAggregator _eventAggregator;
- private readonly ISerialPortService _serialPortService;
- private readonly ICommandService _commandService;
-
- public CheckResponseDialog(IEventAggregator eventAggregator, ISerialPortService serialPortService,
- ICommandService commandService)
+ public CheckResponseDialog()
{
InitializeComponent();
-
- _eventAggregator = eventAggregator;
- _serialPortService = serialPortService;
- _commandService = commandService;
-
- var today = DateTime.Now.ToString("yyyyMMdd");
- var configModel = LazyDataBase.Value.Table()
- .Where(x => x.Date == today)
- .OrderBy(x => x.Date)
- .LastOrDefault() ?? new CorrelatorConfigModel
- { Date = today, Pipe = 1, LocateTimes = 1, ListenTimes = 1 };
-
- //如果配置里面的日期相同,则取配置里面的Pipe作为index,如果配置里面的日期不相同,则默认index=1
- var pipeIndex = configModel.Date.Equals(today) ? configModel.Pipe : 1;
- var locateDataDir = DirectoryManager.GetLocateDataDir(pipeIndex);
-
- InitDot();
-
- InitEvent(locateDataDir);
-
- _redResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _blueResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _checkResponseTimer.Start();
- _checkResponseTimer.Tick += delegate
- {
- if (_isCheckRedSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- else if (_isCheckBlueSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- };
- }
-
- private void InitDot()
- {
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- RedResponsePanel.Children.Add(ellipse);
- }
-
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- BlueResponsePanel.Children.Add(ellipse);
- }
- }
-
- private void InitEvent(string locateDataDir)
- {
- GoBackButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled || _blueResponseTimer.IsEnabled)
- {
- var result = MessageBox.Show("数据未校验结束,确定要退出吗?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- _eventAggregator.GetEvent().Publish(
- new DialogResult(ButtonResult.Abort)
- );
- }
- }
- else
- {
- _eventAggregator.GetEvent().Publish(new DialogResult(ButtonResult.Cancel));
- }
- };
-
- RedNextStepButton.Click += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- RedSensorStepBar.Next();
- }
- }
- else
- {
- RedSensorStepBar.Next();
- }
- };
-
- RedSensorStepBar.StepChanged += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev1);
-
- _redResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (RedSensorStepBar.StepIndex == 2)
- {
- //下发数据全部正常指令
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev1}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.RedSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.RedSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev1, tags);
-
- #endregion
- }
- else if (RedSensorStepBar.StepIndex == 3)
- {
- _redResponseTimer.Stop();
- RedNextStepButton.IsEnabled = false;
- ReCheckButton.IsEnabled = false;
- }
- };
-
- BlueNextStepButton.Click += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- BlueSensorStepBar.Next();
- }
- }
- else
- {
- BlueSensorStepBar.Next();
- }
- };
-
- BlueSensorStepBar.StepChanged += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev2);
-
- _blueResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (BlueSensorStepBar.StepIndex == 2)
- {
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev2}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.BlueSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.BlueSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev2, tags);
-
- #endregion
- }
- else if (BlueSensorStepBar.StepIndex == 3)
- {
- _blueResponseTimer.Stop();
- ReCheckButton.IsEnabled = false;
-
- //关闭窗口
- _checkResponseTimer.Stop();
- //再次检查数据是否收集完整
- DialogResult dialogResult;
- if (IsDataCollectedCompleted())
- {
- dialogResult = new DialogResult(ButtonResult.OK);
- }
- else
- {
- dialogResult = new DialogResult(ButtonResult.Abort);
- }
-
- _eventAggregator.GetEvent().Publish(dialogResult);
- }
- };
-
- ReCheckButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled)
- {
- _isCheckRedSensor = true;
- var redIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < RedResponsePanel.Children.Count; i++)
- {
- var child = RedResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- redIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- redIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, redIndexArray);
- }
- else
- {
- _isCheckBlueSensor = true;
- var blueIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < BlueResponsePanel.Children.Count; i++)
- {
- var child = BlueResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- blueIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- blueIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, blueIndexArray);
- }
- };
- }
-
- ///
- /// 判断数据是否收集完整
- ///
- ///
- private bool IsDataCollectedCompleted()
- {
- return RedResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray)) &&
- BlueResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray));
}
}
}
\ No newline at end of file
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index 7d38620..6cc9b26 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -27,6 +27,7 @@
public event EventHandler DetectNoiseEvent;
public event EventHandler StartCalculateEvent;
public event EventHandler CheckResponseEvent;
+ public event EventHandler ResponseIndexReceivedEvent;
public SerialPortServiceImpl(IEventAggregator eventAggregator, IAudioService audioService,
ICommandService commandService, IApplicationDataService dataService)
@@ -156,10 +157,11 @@
{
if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
{
+ //取出seq,确定收到的是第几包数据
int index = receivedData[15];
// "SerialPortServiceImpl".WriteLog($@"index => {index}");
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
+ var indexEventArgs = new ResponseIndexEventArgs(deviceId, index);
+ ResponseIndexReceivedEvent?.Invoke(this, indexEventArgs);
var response = BitConverter.ToString(receivedData).Replace("-", "");
//收集数据
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml b/Correlator/Dialog/CheckResponseDialog.xaml
index a571920..95785ce 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml
+++ b/Correlator/Dialog/CheckResponseDialog.xaml
@@ -2,6 +2,7 @@
x:Class="Correlator.Dialog.CheckResponseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cvt="clr-namespace:Correlator.Converter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:hc="https://handyorg.github.io/handycontrol"
@@ -16,7 +17,7 @@
+
+
@@ -71,6 +99,12 @@
+
+
+
+
+
+
@@ -78,11 +112,13 @@
+ FontSize="16"
+ IsEnabled="{Binding RedNextStepButtonState}" />
@@ -105,17 +141,45 @@
Margin="0,0,10,0"
VerticalAlignment="Center"
Orientation="Vertical">
-
-
-
+ ItemsSource="{Binding BlueResponseCollection}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,6 +187,12 @@
+
+
+
+
+
+
@@ -130,9 +200,9 @@
@@ -141,28 +211,12 @@
-
-
-
-
-
-
-
-
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs
index 4398657..4873020 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml.cs
+++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs
@@ -1,18 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using System.Windows.Shapes;
-using System.Windows.Threading;
-using Correlator.DataService;
-using Correlator.Events;
-using Correlator.Model;
-using Correlator.SensorHubTag;
-using Correlator.Util;
-using Prism.Events;
-using Prism.Services.Dialogs;
+using System.Windows.Controls;
namespace Correlator.Dialog
{
@@ -21,373 +7,9 @@
///
public partial class CheckResponseDialog : UserControl
{
- private readonly DispatcherTimer _redResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _blueResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _checkResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private static readonly Lazy LazyDataBase = new Lazy(
- () => new DataBaseManager()
- );
-
- private bool _isCheckRedSensor;
- private bool _isCheckBlueSensor;
- private readonly IEventAggregator _eventAggregator;
- private readonly ISerialPortService _serialPortService;
- private readonly ICommandService _commandService;
-
- public CheckResponseDialog(IEventAggregator eventAggregator, ISerialPortService serialPortService,
- ICommandService commandService)
+ public CheckResponseDialog()
{
InitializeComponent();
-
- _eventAggregator = eventAggregator;
- _serialPortService = serialPortService;
- _commandService = commandService;
-
- var today = DateTime.Now.ToString("yyyyMMdd");
- var configModel = LazyDataBase.Value.Table()
- .Where(x => x.Date == today)
- .OrderBy(x => x.Date)
- .LastOrDefault() ?? new CorrelatorConfigModel
- { Date = today, Pipe = 1, LocateTimes = 1, ListenTimes = 1 };
-
- //如果配置里面的日期相同,则取配置里面的Pipe作为index,如果配置里面的日期不相同,则默认index=1
- var pipeIndex = configModel.Date.Equals(today) ? configModel.Pipe : 1;
- var locateDataDir = DirectoryManager.GetLocateDataDir(pipeIndex);
-
- InitDot();
-
- InitEvent(locateDataDir);
-
- _redResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _blueResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _checkResponseTimer.Start();
- _checkResponseTimer.Tick += delegate
- {
- if (_isCheckRedSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- else if (_isCheckBlueSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- };
- }
-
- private void InitDot()
- {
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- RedResponsePanel.Children.Add(ellipse);
- }
-
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- BlueResponsePanel.Children.Add(ellipse);
- }
- }
-
- private void InitEvent(string locateDataDir)
- {
- GoBackButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled || _blueResponseTimer.IsEnabled)
- {
- var result = MessageBox.Show("数据未校验结束,确定要退出吗?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- _eventAggregator.GetEvent().Publish(
- new DialogResult(ButtonResult.Abort)
- );
- }
- }
- else
- {
- _eventAggregator.GetEvent().Publish(new DialogResult(ButtonResult.Cancel));
- }
- };
-
- RedNextStepButton.Click += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- RedSensorStepBar.Next();
- }
- }
- else
- {
- RedSensorStepBar.Next();
- }
- };
-
- RedSensorStepBar.StepChanged += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev1);
-
- _redResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (RedSensorStepBar.StepIndex == 2)
- {
- //下发数据全部正常指令
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev1}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.RedSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.RedSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev1, tags);
-
- #endregion
- }
- else if (RedSensorStepBar.StepIndex == 3)
- {
- _redResponseTimer.Stop();
- RedNextStepButton.IsEnabled = false;
- ReCheckButton.IsEnabled = false;
- }
- };
-
- BlueNextStepButton.Click += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- BlueSensorStepBar.Next();
- }
- }
- else
- {
- BlueSensorStepBar.Next();
- }
- };
-
- BlueSensorStepBar.StepChanged += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev2);
-
- _blueResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (BlueSensorStepBar.StepIndex == 2)
- {
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev2}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.BlueSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.BlueSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev2, tags);
-
- #endregion
- }
- else if (BlueSensorStepBar.StepIndex == 3)
- {
- _blueResponseTimer.Stop();
- ReCheckButton.IsEnabled = false;
-
- //关闭窗口
- _checkResponseTimer.Stop();
- //再次检查数据是否收集完整
- DialogResult dialogResult;
- if (IsDataCollectedCompleted())
- {
- dialogResult = new DialogResult(ButtonResult.OK);
- }
- else
- {
- dialogResult = new DialogResult(ButtonResult.Abort);
- }
-
- _eventAggregator.GetEvent().Publish(dialogResult);
- }
- };
-
- ReCheckButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled)
- {
- _isCheckRedSensor = true;
- var redIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < RedResponsePanel.Children.Count; i++)
- {
- var child = RedResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- redIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- redIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, redIndexArray);
- }
- else
- {
- _isCheckBlueSensor = true;
- var blueIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < BlueResponsePanel.Children.Count; i++)
- {
- var child = BlueResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- blueIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- blueIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, blueIndexArray);
- }
- };
- }
-
- ///
- /// 判断数据是否收集完整
- ///
- ///
- private bool IsDataCollectedCompleted()
- {
- return RedResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray)) &&
- BlueResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray));
}
}
}
\ No newline at end of file
diff --git a/Correlator/Events/CheckResponseEvent.cs b/Correlator/Events/CheckResponseEvent.cs
deleted file mode 100644
index ea1d6ae..0000000
--- a/Correlator/Events/CheckResponseEvent.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Prism.Events;
-using Prism.Services.Dialogs;
-
-namespace Correlator.Events
-{
- public class CheckResponseEvent : PubSubEvent
- {
- }
-}
\ No newline at end of file
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index 7d38620..6cc9b26 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -27,6 +27,7 @@
public event EventHandler DetectNoiseEvent;
public event EventHandler StartCalculateEvent;
public event EventHandler CheckResponseEvent;
+ public event EventHandler ResponseIndexReceivedEvent;
public SerialPortServiceImpl(IEventAggregator eventAggregator, IAudioService audioService,
ICommandService commandService, IApplicationDataService dataService)
@@ -156,10 +157,11 @@
{
if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
{
+ //取出seq,确定收到的是第几包数据
int index = receivedData[15];
// "SerialPortServiceImpl".WriteLog($@"index => {index}");
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
+ var indexEventArgs = new ResponseIndexEventArgs(deviceId, index);
+ ResponseIndexReceivedEvent?.Invoke(this, indexEventArgs);
var response = BitConverter.ToString(receivedData).Replace("-", "");
//收集数据
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml b/Correlator/Dialog/CheckResponseDialog.xaml
index a571920..95785ce 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml
+++ b/Correlator/Dialog/CheckResponseDialog.xaml
@@ -2,6 +2,7 @@
x:Class="Correlator.Dialog.CheckResponseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cvt="clr-namespace:Correlator.Converter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:hc="https://handyorg.github.io/handycontrol"
@@ -16,7 +17,7 @@
+
+
@@ -71,6 +99,12 @@
+
+
+
+
+
+
@@ -78,11 +112,13 @@
+ FontSize="16"
+ IsEnabled="{Binding RedNextStepButtonState}" />
@@ -105,17 +141,45 @@
Margin="0,0,10,0"
VerticalAlignment="Center"
Orientation="Vertical">
-
-
-
+ ItemsSource="{Binding BlueResponseCollection}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,6 +187,12 @@
+
+
+
+
+
+
@@ -130,9 +200,9 @@
@@ -141,28 +211,12 @@
-
-
-
-
-
-
-
-
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs
index 4398657..4873020 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml.cs
+++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs
@@ -1,18 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using System.Windows.Shapes;
-using System.Windows.Threading;
-using Correlator.DataService;
-using Correlator.Events;
-using Correlator.Model;
-using Correlator.SensorHubTag;
-using Correlator.Util;
-using Prism.Events;
-using Prism.Services.Dialogs;
+using System.Windows.Controls;
namespace Correlator.Dialog
{
@@ -21,373 +7,9 @@
///
public partial class CheckResponseDialog : UserControl
{
- private readonly DispatcherTimer _redResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _blueResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _checkResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private static readonly Lazy LazyDataBase = new Lazy(
- () => new DataBaseManager()
- );
-
- private bool _isCheckRedSensor;
- private bool _isCheckBlueSensor;
- private readonly IEventAggregator _eventAggregator;
- private readonly ISerialPortService _serialPortService;
- private readonly ICommandService _commandService;
-
- public CheckResponseDialog(IEventAggregator eventAggregator, ISerialPortService serialPortService,
- ICommandService commandService)
+ public CheckResponseDialog()
{
InitializeComponent();
-
- _eventAggregator = eventAggregator;
- _serialPortService = serialPortService;
- _commandService = commandService;
-
- var today = DateTime.Now.ToString("yyyyMMdd");
- var configModel = LazyDataBase.Value.Table()
- .Where(x => x.Date == today)
- .OrderBy(x => x.Date)
- .LastOrDefault() ?? new CorrelatorConfigModel
- { Date = today, Pipe = 1, LocateTimes = 1, ListenTimes = 1 };
-
- //如果配置里面的日期相同,则取配置里面的Pipe作为index,如果配置里面的日期不相同,则默认index=1
- var pipeIndex = configModel.Date.Equals(today) ? configModel.Pipe : 1;
- var locateDataDir = DirectoryManager.GetLocateDataDir(pipeIndex);
-
- InitDot();
-
- InitEvent(locateDataDir);
-
- _redResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _blueResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _checkResponseTimer.Start();
- _checkResponseTimer.Tick += delegate
- {
- if (_isCheckRedSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- else if (_isCheckBlueSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- };
- }
-
- private void InitDot()
- {
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- RedResponsePanel.Children.Add(ellipse);
- }
-
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- BlueResponsePanel.Children.Add(ellipse);
- }
- }
-
- private void InitEvent(string locateDataDir)
- {
- GoBackButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled || _blueResponseTimer.IsEnabled)
- {
- var result = MessageBox.Show("数据未校验结束,确定要退出吗?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- _eventAggregator.GetEvent().Publish(
- new DialogResult(ButtonResult.Abort)
- );
- }
- }
- else
- {
- _eventAggregator.GetEvent().Publish(new DialogResult(ButtonResult.Cancel));
- }
- };
-
- RedNextStepButton.Click += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- RedSensorStepBar.Next();
- }
- }
- else
- {
- RedSensorStepBar.Next();
- }
- };
-
- RedSensorStepBar.StepChanged += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev1);
-
- _redResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (RedSensorStepBar.StepIndex == 2)
- {
- //下发数据全部正常指令
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev1}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.RedSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.RedSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev1, tags);
-
- #endregion
- }
- else if (RedSensorStepBar.StepIndex == 3)
- {
- _redResponseTimer.Stop();
- RedNextStepButton.IsEnabled = false;
- ReCheckButton.IsEnabled = false;
- }
- };
-
- BlueNextStepButton.Click += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- BlueSensorStepBar.Next();
- }
- }
- else
- {
- BlueSensorStepBar.Next();
- }
- };
-
- BlueSensorStepBar.StepChanged += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev2);
-
- _blueResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (BlueSensorStepBar.StepIndex == 2)
- {
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev2}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.BlueSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.BlueSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev2, tags);
-
- #endregion
- }
- else if (BlueSensorStepBar.StepIndex == 3)
- {
- _blueResponseTimer.Stop();
- ReCheckButton.IsEnabled = false;
-
- //关闭窗口
- _checkResponseTimer.Stop();
- //再次检查数据是否收集完整
- DialogResult dialogResult;
- if (IsDataCollectedCompleted())
- {
- dialogResult = new DialogResult(ButtonResult.OK);
- }
- else
- {
- dialogResult = new DialogResult(ButtonResult.Abort);
- }
-
- _eventAggregator.GetEvent().Publish(dialogResult);
- }
- };
-
- ReCheckButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled)
- {
- _isCheckRedSensor = true;
- var redIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < RedResponsePanel.Children.Count; i++)
- {
- var child = RedResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- redIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- redIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, redIndexArray);
- }
- else
- {
- _isCheckBlueSensor = true;
- var blueIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < BlueResponsePanel.Children.Count; i++)
- {
- var child = BlueResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- blueIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- blueIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, blueIndexArray);
- }
- };
- }
-
- ///
- /// 判断数据是否收集完整
- ///
- ///
- private bool IsDataCollectedCompleted()
- {
- return RedResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray)) &&
- BlueResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray));
}
}
}
\ No newline at end of file
diff --git a/Correlator/Events/CheckResponseEvent.cs b/Correlator/Events/CheckResponseEvent.cs
deleted file mode 100644
index ea1d6ae..0000000
--- a/Correlator/Events/CheckResponseEvent.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Prism.Events;
-using Prism.Services.Dialogs;
-
-namespace Correlator.Events
-{
- public class CheckResponseEvent : PubSubEvent
- {
- }
-}
\ No newline at end of file
diff --git a/Correlator/Events/ResponseIndexEventArgs.cs b/Correlator/Events/ResponseIndexEventArgs.cs
new file mode 100644
index 0000000..ac35a6a
--- /dev/null
+++ b/Correlator/Events/ResponseIndexEventArgs.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace Correlator.Events
+{
+ public class ResponseIndexEventArgs : EventArgs
+ {
+ public string DeviceId { get; }
+ public int Index { get; }
+
+ public ResponseIndexEventArgs(string deviceId, int index)
+ {
+ DeviceId = deviceId;
+ Index = index;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index 7d38620..6cc9b26 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -27,6 +27,7 @@
public event EventHandler DetectNoiseEvent;
public event EventHandler StartCalculateEvent;
public event EventHandler CheckResponseEvent;
+ public event EventHandler ResponseIndexReceivedEvent;
public SerialPortServiceImpl(IEventAggregator eventAggregator, IAudioService audioService,
ICommandService commandService, IApplicationDataService dataService)
@@ -156,10 +157,11 @@
{
if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
{
+ //取出seq,确定收到的是第几包数据
int index = receivedData[15];
// "SerialPortServiceImpl".WriteLog($@"index => {index}");
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
+ var indexEventArgs = new ResponseIndexEventArgs(deviceId, index);
+ ResponseIndexReceivedEvent?.Invoke(this, indexEventArgs);
var response = BitConverter.ToString(receivedData).Replace("-", "");
//收集数据
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml b/Correlator/Dialog/CheckResponseDialog.xaml
index a571920..95785ce 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml
+++ b/Correlator/Dialog/CheckResponseDialog.xaml
@@ -2,6 +2,7 @@
x:Class="Correlator.Dialog.CheckResponseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cvt="clr-namespace:Correlator.Converter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:hc="https://handyorg.github.io/handycontrol"
@@ -16,7 +17,7 @@
+
+
@@ -71,6 +99,12 @@
+
+
+
+
+
+
@@ -78,11 +112,13 @@
+ FontSize="16"
+ IsEnabled="{Binding RedNextStepButtonState}" />
@@ -105,17 +141,45 @@
Margin="0,0,10,0"
VerticalAlignment="Center"
Orientation="Vertical">
-
-
-
+ ItemsSource="{Binding BlueResponseCollection}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,6 +187,12 @@
+
+
+
+
+
+
@@ -130,9 +200,9 @@
@@ -141,28 +211,12 @@
-
-
-
-
-
-
-
-
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs
index 4398657..4873020 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml.cs
+++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs
@@ -1,18 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using System.Windows.Shapes;
-using System.Windows.Threading;
-using Correlator.DataService;
-using Correlator.Events;
-using Correlator.Model;
-using Correlator.SensorHubTag;
-using Correlator.Util;
-using Prism.Events;
-using Prism.Services.Dialogs;
+using System.Windows.Controls;
namespace Correlator.Dialog
{
@@ -21,373 +7,9 @@
///
public partial class CheckResponseDialog : UserControl
{
- private readonly DispatcherTimer _redResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _blueResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _checkResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private static readonly Lazy LazyDataBase = new Lazy(
- () => new DataBaseManager()
- );
-
- private bool _isCheckRedSensor;
- private bool _isCheckBlueSensor;
- private readonly IEventAggregator _eventAggregator;
- private readonly ISerialPortService _serialPortService;
- private readonly ICommandService _commandService;
-
- public CheckResponseDialog(IEventAggregator eventAggregator, ISerialPortService serialPortService,
- ICommandService commandService)
+ public CheckResponseDialog()
{
InitializeComponent();
-
- _eventAggregator = eventAggregator;
- _serialPortService = serialPortService;
- _commandService = commandService;
-
- var today = DateTime.Now.ToString("yyyyMMdd");
- var configModel = LazyDataBase.Value.Table()
- .Where(x => x.Date == today)
- .OrderBy(x => x.Date)
- .LastOrDefault() ?? new CorrelatorConfigModel
- { Date = today, Pipe = 1, LocateTimes = 1, ListenTimes = 1 };
-
- //如果配置里面的日期相同,则取配置里面的Pipe作为index,如果配置里面的日期不相同,则默认index=1
- var pipeIndex = configModel.Date.Equals(today) ? configModel.Pipe : 1;
- var locateDataDir = DirectoryManager.GetLocateDataDir(pipeIndex);
-
- InitDot();
-
- InitEvent(locateDataDir);
-
- _redResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _blueResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _checkResponseTimer.Start();
- _checkResponseTimer.Tick += delegate
- {
- if (_isCheckRedSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- else if (_isCheckBlueSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- };
- }
-
- private void InitDot()
- {
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- RedResponsePanel.Children.Add(ellipse);
- }
-
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- BlueResponsePanel.Children.Add(ellipse);
- }
- }
-
- private void InitEvent(string locateDataDir)
- {
- GoBackButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled || _blueResponseTimer.IsEnabled)
- {
- var result = MessageBox.Show("数据未校验结束,确定要退出吗?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- _eventAggregator.GetEvent().Publish(
- new DialogResult(ButtonResult.Abort)
- );
- }
- }
- else
- {
- _eventAggregator.GetEvent().Publish(new DialogResult(ButtonResult.Cancel));
- }
- };
-
- RedNextStepButton.Click += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- RedSensorStepBar.Next();
- }
- }
- else
- {
- RedSensorStepBar.Next();
- }
- };
-
- RedSensorStepBar.StepChanged += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev1);
-
- _redResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (RedSensorStepBar.StepIndex == 2)
- {
- //下发数据全部正常指令
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev1}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.RedSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.RedSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev1, tags);
-
- #endregion
- }
- else if (RedSensorStepBar.StepIndex == 3)
- {
- _redResponseTimer.Stop();
- RedNextStepButton.IsEnabled = false;
- ReCheckButton.IsEnabled = false;
- }
- };
-
- BlueNextStepButton.Click += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- BlueSensorStepBar.Next();
- }
- }
- else
- {
- BlueSensorStepBar.Next();
- }
- };
-
- BlueSensorStepBar.StepChanged += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev2);
-
- _blueResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (BlueSensorStepBar.StepIndex == 2)
- {
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev2}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.BlueSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.BlueSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev2, tags);
-
- #endregion
- }
- else if (BlueSensorStepBar.StepIndex == 3)
- {
- _blueResponseTimer.Stop();
- ReCheckButton.IsEnabled = false;
-
- //关闭窗口
- _checkResponseTimer.Stop();
- //再次检查数据是否收集完整
- DialogResult dialogResult;
- if (IsDataCollectedCompleted())
- {
- dialogResult = new DialogResult(ButtonResult.OK);
- }
- else
- {
- dialogResult = new DialogResult(ButtonResult.Abort);
- }
-
- _eventAggregator.GetEvent().Publish(dialogResult);
- }
- };
-
- ReCheckButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled)
- {
- _isCheckRedSensor = true;
- var redIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < RedResponsePanel.Children.Count; i++)
- {
- var child = RedResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- redIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- redIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, redIndexArray);
- }
- else
- {
- _isCheckBlueSensor = true;
- var blueIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < BlueResponsePanel.Children.Count; i++)
- {
- var child = BlueResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- blueIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- blueIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, blueIndexArray);
- }
- };
- }
-
- ///
- /// 判断数据是否收集完整
- ///
- ///
- private bool IsDataCollectedCompleted()
- {
- return RedResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray)) &&
- BlueResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray));
}
}
}
\ No newline at end of file
diff --git a/Correlator/Events/CheckResponseEvent.cs b/Correlator/Events/CheckResponseEvent.cs
deleted file mode 100644
index ea1d6ae..0000000
--- a/Correlator/Events/CheckResponseEvent.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Prism.Events;
-using Prism.Services.Dialogs;
-
-namespace Correlator.Events
-{
- public class CheckResponseEvent : PubSubEvent
- {
- }
-}
\ No newline at end of file
diff --git a/Correlator/Events/ResponseIndexEventArgs.cs b/Correlator/Events/ResponseIndexEventArgs.cs
new file mode 100644
index 0000000..ac35a6a
--- /dev/null
+++ b/Correlator/Events/ResponseIndexEventArgs.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace Correlator.Events
+{
+ public class ResponseIndexEventArgs : EventArgs
+ {
+ public string DeviceId { get; }
+ public int Index { get; }
+
+ public ResponseIndexEventArgs(string deviceId, int index)
+ {
+ DeviceId = deviceId;
+ Index = index;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Correlator/Model/ResponseModel.cs b/Correlator/Model/ResponseModel.cs
new file mode 100644
index 0000000..fa98bf8
--- /dev/null
+++ b/Correlator/Model/ResponseModel.cs
@@ -0,0 +1,31 @@
+using System.ComponentModel;
+
+namespace Correlator.Model
+{
+ ///
+ /// 报文数据模型
+ ///
+ public class ResponseModel : INotifyPropertyChanged
+ {
+ public int ResponseIndex { set; get; }
+
+ private string _colorBrush;
+
+ public string ColorBrush
+ {
+ get => _colorBrush;
+ set
+ {
+ _colorBrush = value;
+ OnPropertyChanged(nameof(ColorBrush));
+ }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ protected virtual void OnPropertyChanged(string propertyName)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index 7d38620..6cc9b26 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -27,6 +27,7 @@
public event EventHandler DetectNoiseEvent;
public event EventHandler StartCalculateEvent;
public event EventHandler CheckResponseEvent;
+ public event EventHandler ResponseIndexReceivedEvent;
public SerialPortServiceImpl(IEventAggregator eventAggregator, IAudioService audioService,
ICommandService commandService, IApplicationDataService dataService)
@@ -156,10 +157,11 @@
{
if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
{
+ //取出seq,确定收到的是第几包数据
int index = receivedData[15];
// "SerialPortServiceImpl".WriteLog($@"index => {index}");
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
+ var indexEventArgs = new ResponseIndexEventArgs(deviceId, index);
+ ResponseIndexReceivedEvent?.Invoke(this, indexEventArgs);
var response = BitConverter.ToString(receivedData).Replace("-", "");
//收集数据
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml b/Correlator/Dialog/CheckResponseDialog.xaml
index a571920..95785ce 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml
+++ b/Correlator/Dialog/CheckResponseDialog.xaml
@@ -2,6 +2,7 @@
x:Class="Correlator.Dialog.CheckResponseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cvt="clr-namespace:Correlator.Converter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:hc="https://handyorg.github.io/handycontrol"
@@ -16,7 +17,7 @@
+
+
@@ -71,6 +99,12 @@
+
+
+
+
+
+
@@ -78,11 +112,13 @@
+ FontSize="16"
+ IsEnabled="{Binding RedNextStepButtonState}" />
@@ -105,17 +141,45 @@
Margin="0,0,10,0"
VerticalAlignment="Center"
Orientation="Vertical">
-
-
-
+ ItemsSource="{Binding BlueResponseCollection}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,6 +187,12 @@
+
+
+
+
+
+
@@ -130,9 +200,9 @@
@@ -141,28 +211,12 @@
-
-
-
-
-
-
-
-
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs
index 4398657..4873020 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml.cs
+++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs
@@ -1,18 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using System.Windows.Shapes;
-using System.Windows.Threading;
-using Correlator.DataService;
-using Correlator.Events;
-using Correlator.Model;
-using Correlator.SensorHubTag;
-using Correlator.Util;
-using Prism.Events;
-using Prism.Services.Dialogs;
+using System.Windows.Controls;
namespace Correlator.Dialog
{
@@ -21,373 +7,9 @@
///
public partial class CheckResponseDialog : UserControl
{
- private readonly DispatcherTimer _redResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _blueResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _checkResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private static readonly Lazy LazyDataBase = new Lazy(
- () => new DataBaseManager()
- );
-
- private bool _isCheckRedSensor;
- private bool _isCheckBlueSensor;
- private readonly IEventAggregator _eventAggregator;
- private readonly ISerialPortService _serialPortService;
- private readonly ICommandService _commandService;
-
- public CheckResponseDialog(IEventAggregator eventAggregator, ISerialPortService serialPortService,
- ICommandService commandService)
+ public CheckResponseDialog()
{
InitializeComponent();
-
- _eventAggregator = eventAggregator;
- _serialPortService = serialPortService;
- _commandService = commandService;
-
- var today = DateTime.Now.ToString("yyyyMMdd");
- var configModel = LazyDataBase.Value.Table()
- .Where(x => x.Date == today)
- .OrderBy(x => x.Date)
- .LastOrDefault() ?? new CorrelatorConfigModel
- { Date = today, Pipe = 1, LocateTimes = 1, ListenTimes = 1 };
-
- //如果配置里面的日期相同,则取配置里面的Pipe作为index,如果配置里面的日期不相同,则默认index=1
- var pipeIndex = configModel.Date.Equals(today) ? configModel.Pipe : 1;
- var locateDataDir = DirectoryManager.GetLocateDataDir(pipeIndex);
-
- InitDot();
-
- InitEvent(locateDataDir);
-
- _redResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _blueResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _checkResponseTimer.Start();
- _checkResponseTimer.Tick += delegate
- {
- if (_isCheckRedSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- else if (_isCheckBlueSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- };
- }
-
- private void InitDot()
- {
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- RedResponsePanel.Children.Add(ellipse);
- }
-
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- BlueResponsePanel.Children.Add(ellipse);
- }
- }
-
- private void InitEvent(string locateDataDir)
- {
- GoBackButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled || _blueResponseTimer.IsEnabled)
- {
- var result = MessageBox.Show("数据未校验结束,确定要退出吗?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- _eventAggregator.GetEvent().Publish(
- new DialogResult(ButtonResult.Abort)
- );
- }
- }
- else
- {
- _eventAggregator.GetEvent().Publish(new DialogResult(ButtonResult.Cancel));
- }
- };
-
- RedNextStepButton.Click += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- RedSensorStepBar.Next();
- }
- }
- else
- {
- RedSensorStepBar.Next();
- }
- };
-
- RedSensorStepBar.StepChanged += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev1);
-
- _redResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (RedSensorStepBar.StepIndex == 2)
- {
- //下发数据全部正常指令
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev1}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.RedSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.RedSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev1, tags);
-
- #endregion
- }
- else if (RedSensorStepBar.StepIndex == 3)
- {
- _redResponseTimer.Stop();
- RedNextStepButton.IsEnabled = false;
- ReCheckButton.IsEnabled = false;
- }
- };
-
- BlueNextStepButton.Click += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- BlueSensorStepBar.Next();
- }
- }
- else
- {
- BlueSensorStepBar.Next();
- }
- };
-
- BlueSensorStepBar.StepChanged += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev2);
-
- _blueResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (BlueSensorStepBar.StepIndex == 2)
- {
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev2}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.BlueSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.BlueSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev2, tags);
-
- #endregion
- }
- else if (BlueSensorStepBar.StepIndex == 3)
- {
- _blueResponseTimer.Stop();
- ReCheckButton.IsEnabled = false;
-
- //关闭窗口
- _checkResponseTimer.Stop();
- //再次检查数据是否收集完整
- DialogResult dialogResult;
- if (IsDataCollectedCompleted())
- {
- dialogResult = new DialogResult(ButtonResult.OK);
- }
- else
- {
- dialogResult = new DialogResult(ButtonResult.Abort);
- }
-
- _eventAggregator.GetEvent().Publish(dialogResult);
- }
- };
-
- ReCheckButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled)
- {
- _isCheckRedSensor = true;
- var redIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < RedResponsePanel.Children.Count; i++)
- {
- var child = RedResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- redIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- redIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, redIndexArray);
- }
- else
- {
- _isCheckBlueSensor = true;
- var blueIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < BlueResponsePanel.Children.Count; i++)
- {
- var child = BlueResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- blueIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- blueIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, blueIndexArray);
- }
- };
- }
-
- ///
- /// 判断数据是否收集完整
- ///
- ///
- private bool IsDataCollectedCompleted()
- {
- return RedResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray)) &&
- BlueResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray));
}
}
}
\ No newline at end of file
diff --git a/Correlator/Events/CheckResponseEvent.cs b/Correlator/Events/CheckResponseEvent.cs
deleted file mode 100644
index ea1d6ae..0000000
--- a/Correlator/Events/CheckResponseEvent.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Prism.Events;
-using Prism.Services.Dialogs;
-
-namespace Correlator.Events
-{
- public class CheckResponseEvent : PubSubEvent
- {
- }
-}
\ No newline at end of file
diff --git a/Correlator/Events/ResponseIndexEventArgs.cs b/Correlator/Events/ResponseIndexEventArgs.cs
new file mode 100644
index 0000000..ac35a6a
--- /dev/null
+++ b/Correlator/Events/ResponseIndexEventArgs.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace Correlator.Events
+{
+ public class ResponseIndexEventArgs : EventArgs
+ {
+ public string DeviceId { get; }
+ public int Index { get; }
+
+ public ResponseIndexEventArgs(string deviceId, int index)
+ {
+ DeviceId = deviceId;
+ Index = index;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Correlator/Model/ResponseModel.cs b/Correlator/Model/ResponseModel.cs
new file mode 100644
index 0000000..fa98bf8
--- /dev/null
+++ b/Correlator/Model/ResponseModel.cs
@@ -0,0 +1,31 @@
+using System.ComponentModel;
+
+namespace Correlator.Model
+{
+ ///
+ /// 报文数据模型
+ ///
+ public class ResponseModel : INotifyPropertyChanged
+ {
+ public int ResponseIndex { set; get; }
+
+ private string _colorBrush;
+
+ public string ColorBrush
+ {
+ get => _colorBrush;
+ set
+ {
+ _colorBrush = value;
+ OnPropertyChanged(nameof(ColorBrush));
+ }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ protected virtual void OnPropertyChanged(string propertyName)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Correlator/Util/RuntimeCache.cs b/Correlator/Util/RuntimeCache.cs
index f6b4769..4d78069 100644
--- a/Correlator/Util/RuntimeCache.cs
+++ b/Correlator/Util/RuntimeCache.cs
@@ -35,11 +35,6 @@
public static bool IsHydrophone = false;
///
- /// 数据包index
- ///
- public static readonly List SeqCaches = new List();
-
- ///
/// 水听器下发唤醒指令时间戳
///
public static byte[] HydrophoneWakeUpTimestamp = new byte[6];
diff --git a/Correlator/Correlator.csproj b/Correlator/Correlator.csproj
index a5d4326..731cc8d 100644
--- a/Correlator/Correlator.csproj
+++ b/Correlator/Correlator.csproj
@@ -260,8 +260,10 @@
SoundSampleRateDialog.xaml
+
+
@@ -281,7 +283,6 @@
SoundSpeedDialog.xaml
-
diff --git a/Correlator/DataService/ISerialPortService.cs b/Correlator/DataService/ISerialPortService.cs
index 9be2e9e..4ef37f6 100644
--- a/Correlator/DataService/ISerialPortService.cs
+++ b/Correlator/DataService/ISerialPortService.cs
@@ -41,5 +41,10 @@
/// 水听器模式点数事件
///
event EventHandler CheckResponseEvent;
+
+ ///
+ /// 水听器分包数据 Index 事件
+ ///
+ event EventHandler ResponseIndexReceivedEvent;
}
}
\ No newline at end of file
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index 7d38620..6cc9b26 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -27,6 +27,7 @@
public event EventHandler DetectNoiseEvent;
public event EventHandler StartCalculateEvent;
public event EventHandler CheckResponseEvent;
+ public event EventHandler ResponseIndexReceivedEvent;
public SerialPortServiceImpl(IEventAggregator eventAggregator, IAudioService audioService,
ICommandService commandService, IApplicationDataService dataService)
@@ -156,10 +157,11 @@
{
if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
{
+ //取出seq,确定收到的是第几包数据
int index = receivedData[15];
// "SerialPortServiceImpl".WriteLog($@"index => {index}");
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
+ var indexEventArgs = new ResponseIndexEventArgs(deviceId, index);
+ ResponseIndexReceivedEvent?.Invoke(this, indexEventArgs);
var response = BitConverter.ToString(receivedData).Replace("-", "");
//收集数据
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml b/Correlator/Dialog/CheckResponseDialog.xaml
index a571920..95785ce 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml
+++ b/Correlator/Dialog/CheckResponseDialog.xaml
@@ -2,6 +2,7 @@
x:Class="Correlator.Dialog.CheckResponseDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:cvt="clr-namespace:Correlator.Converter"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:hc="https://handyorg.github.io/handycontrol"
@@ -16,7 +17,7 @@
+
+
@@ -71,6 +99,12 @@
+
+
+
+
+
+
@@ -78,11 +112,13 @@
+ FontSize="16"
+ IsEnabled="{Binding RedNextStepButtonState}" />
@@ -105,17 +141,45 @@
Margin="0,0,10,0"
VerticalAlignment="Center"
Orientation="Vertical">
-
-
-
+ ItemsSource="{Binding BlueResponseCollection}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123,6 +187,12 @@
+
+
+
+
+
+
@@ -130,9 +200,9 @@
@@ -141,28 +211,12 @@
-
-
-
-
-
-
-
-
diff --git a/Correlator/Dialog/CheckResponseDialog.xaml.cs b/Correlator/Dialog/CheckResponseDialog.xaml.cs
index 4398657..4873020 100644
--- a/Correlator/Dialog/CheckResponseDialog.xaml.cs
+++ b/Correlator/Dialog/CheckResponseDialog.xaml.cs
@@ -1,18 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Media;
-using System.Windows.Shapes;
-using System.Windows.Threading;
-using Correlator.DataService;
-using Correlator.Events;
-using Correlator.Model;
-using Correlator.SensorHubTag;
-using Correlator.Util;
-using Prism.Events;
-using Prism.Services.Dialogs;
+using System.Windows.Controls;
namespace Correlator.Dialog
{
@@ -21,373 +7,9 @@
///
public partial class CheckResponseDialog : UserControl
{
- private readonly DispatcherTimer _redResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _blueResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private readonly DispatcherTimer _checkResponseTimer = new DispatcherTimer
- {
- Interval = TimeSpan.FromSeconds(1)
- };
-
- private static readonly Lazy LazyDataBase = new Lazy(
- () => new DataBaseManager()
- );
-
- private bool _isCheckRedSensor;
- private bool _isCheckBlueSensor;
- private readonly IEventAggregator _eventAggregator;
- private readonly ISerialPortService _serialPortService;
- private readonly ICommandService _commandService;
-
- public CheckResponseDialog(IEventAggregator eventAggregator, ISerialPortService serialPortService,
- ICommandService commandService)
+ public CheckResponseDialog()
{
InitializeComponent();
-
- _eventAggregator = eventAggregator;
- _serialPortService = serialPortService;
- _commandService = commandService;
-
- var today = DateTime.Now.ToString("yyyyMMdd");
- var configModel = LazyDataBase.Value.Table()
- .Where(x => x.Date == today)
- .OrderBy(x => x.Date)
- .LastOrDefault() ?? new CorrelatorConfigModel
- { Date = today, Pipe = 1, LocateTimes = 1, ListenTimes = 1 };
-
- //如果配置里面的日期相同,则取配置里面的Pipe作为index,如果配置里面的日期不相同,则默认index=1
- var pipeIndex = configModel.Date.Equals(today) ? configModel.Pipe : 1;
- var locateDataDir = DirectoryManager.GetLocateDataDir(pipeIndex);
-
- InitDot();
-
- InitEvent(locateDataDir);
-
- _redResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _blueResponseTimer.Tick += delegate
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- };
-
- _checkResponseTimer.Start();
- _checkResponseTimer.Tick += delegate
- {
- if (_isCheckRedSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (RedResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- else if (_isCheckBlueSensor)
- {
- for (var i = 1; i <= 60; i++)
- {
- if (RuntimeCache.SeqCaches.Contains(i))
- {
- if (BlueResponsePanel.Children[i - 1] is Ellipse child)
- {
- child.Fill = new SolidColorBrush(Colors.LimeGreen);
- }
- }
- }
- }
- };
- }
-
- private void InitDot()
- {
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- RedResponsePanel.Children.Add(ellipse);
- }
-
- for (var i = 0; i < 60; i++)
- {
- var ellipse = new Ellipse
- {
- Width = 25,
- Height = 25,
- Margin = new Thickness(8),
- Fill = new SolidColorBrush(Colors.LightGray)
- };
- BlueResponsePanel.Children.Add(ellipse);
- }
- }
-
- private void InitEvent(string locateDataDir)
- {
- GoBackButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled || _blueResponseTimer.IsEnabled)
- {
- var result = MessageBox.Show("数据未校验结束,确定要退出吗?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- _eventAggregator.GetEvent().Publish(
- new DialogResult(ButtonResult.Abort)
- );
- }
- }
- else
- {
- _eventAggregator.GetEvent().Publish(new DialogResult(ButtonResult.Cancel));
- }
- };
-
- RedNextStepButton.Click += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- RedSensorStepBar.Next();
- }
- }
- else
- {
- RedSensorStepBar.Next();
- }
- };
-
- RedSensorStepBar.StepChanged += delegate
- {
- if (RedSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev1);
-
- _redResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (RedSensorStepBar.StepIndex == 2)
- {
- //下发数据全部正常指令
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev1}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.RedSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.RedSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev1, tags);
-
- #endregion
- }
- else if (RedSensorStepBar.StepIndex == 3)
- {
- _redResponseTimer.Stop();
- RedNextStepButton.IsEnabled = false;
- ReCheckButton.IsEnabled = false;
- }
- };
-
- BlueNextStepButton.Click += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- var result = MessageBox.Show("请确认数据是否已接收完整?", "温馨提示", MessageBoxButton.YesNo,
- MessageBoxImage.Question);
- if (result == MessageBoxResult.Yes)
- {
- BlueSensorStepBar.Next();
- }
- }
- else
- {
- BlueSensorStepBar.Next();
- }
- };
-
- BlueSensorStepBar.StepChanged += delegate
- {
- if (BlueSensorStepBar.StepIndex == 1)
- {
- RuntimeCache.SeqCaches.Clear();
- _commandService.StartCheckResponse(_serialPortService.Sp, RuntimeCache.Dev2);
-
- _blueResponseTimer.Start();
- ReCheckButton.IsEnabled = true;
- }
- else if (BlueSensorStepBar.StepIndex == 2)
- {
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, new List());
-
- #region 保存原始数据
-
- var fileName = $"{locateDataDir}\\原始数据.{RuntimeCache.Dev2}.txt";
- //将Dictionary按照index排序
- var sortResult = from pair in RuntimeCache.BlueSensorOriginalResp orderby pair.Key select pair;
-
- //Dictionary排序结果转List
- var result = sortResult.Select(valuePair => valuePair.Value).ToList();
-
- fileName.SaveSensorResponse(result);
-
- #endregion
-
- #region 处理数据
-
- //将Dictionary按照index排序
- var tagsSortResult = from pair in RuntimeCache.BlueSensorResponseTags orderby pair.Key select pair;
- var tags = new List();
- foreach (var valuePair in tagsSortResult)
- {
- //每个List均包含[CellTag,TimeTag,UploadTag],所以需要挑选出每个List里面的UploadTag
- var noiseTag = valuePair.Value.GetUploadNoiseTag();
- tags.Add(noiseTag);
- }
-
- _serialPortService.HandleHydrophoneData(RuntimeCache.Dev2, tags);
-
- #endregion
- }
- else if (BlueSensorStepBar.StepIndex == 3)
- {
- _blueResponseTimer.Stop();
- ReCheckButton.IsEnabled = false;
-
- //关闭窗口
- _checkResponseTimer.Stop();
- //再次检查数据是否收集完整
- DialogResult dialogResult;
- if (IsDataCollectedCompleted())
- {
- dialogResult = new DialogResult(ButtonResult.OK);
- }
- else
- {
- dialogResult = new DialogResult(ButtonResult.Abort);
- }
-
- _eventAggregator.GetEvent().Publish(dialogResult);
- }
- };
-
- ReCheckButton.Click += delegate
- {
- if (_redResponseTimer.IsEnabled)
- {
- _isCheckRedSensor = true;
- var redIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < RedResponsePanel.Children.Count; i++)
- {
- var child = RedResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- redIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- redIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev1, redIndexArray);
- }
- else
- {
- _isCheckBlueSensor = true;
- var blueIndexArray = new List();
- //查找ResponsePanel中颜色为浅灰色的index
- for (var i = 0; i < BlueResponsePanel.Children.Count; i++)
- {
- var child = BlueResponsePanel.Children[i] as Ellipse;
- var index = i + 1;
- if (child == null)
- {
- blueIndexArray.Add(index);
- }
- else if (child.Fill.ToString().Equals("#FFD3D3D3"))
- {
- blueIndexArray.Add(index);
- }
- }
-
- _commandService.SendDataCheckResultCmd(_serialPortService.Sp, RuntimeCache.Dev2, blueIndexArray);
- }
- };
- }
-
- ///
- /// 判断数据是否收集完整
- ///
- ///
- private bool IsDataCollectedCompleted()
- {
- return RedResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray)) &&
- BlueResponsePanel.Children
- .Cast()
- .All(child => child.Fill != new SolidColorBrush(Colors.LightGray));
}
}
}
\ No newline at end of file
diff --git a/Correlator/Events/CheckResponseEvent.cs b/Correlator/Events/CheckResponseEvent.cs
deleted file mode 100644
index ea1d6ae..0000000
--- a/Correlator/Events/CheckResponseEvent.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Prism.Events;
-using Prism.Services.Dialogs;
-
-namespace Correlator.Events
-{
- public class CheckResponseEvent : PubSubEvent
- {
- }
-}
\ No newline at end of file
diff --git a/Correlator/Events/ResponseIndexEventArgs.cs b/Correlator/Events/ResponseIndexEventArgs.cs
new file mode 100644
index 0000000..ac35a6a
--- /dev/null
+++ b/Correlator/Events/ResponseIndexEventArgs.cs
@@ -0,0 +1,16 @@
+using System;
+
+namespace Correlator.Events
+{
+ public class ResponseIndexEventArgs : EventArgs
+ {
+ public string DeviceId { get; }
+ public int Index { get; }
+
+ public ResponseIndexEventArgs(string deviceId, int index)
+ {
+ DeviceId = deviceId;
+ Index = index;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Correlator/Model/ResponseModel.cs b/Correlator/Model/ResponseModel.cs
new file mode 100644
index 0000000..fa98bf8
--- /dev/null
+++ b/Correlator/Model/ResponseModel.cs
@@ -0,0 +1,31 @@
+using System.ComponentModel;
+
+namespace Correlator.Model
+{
+ ///
+ /// 报文数据模型
+ ///
+ public class ResponseModel : INotifyPropertyChanged
+ {
+ public int ResponseIndex { set; get; }
+
+ private string _colorBrush;
+
+ public string ColorBrush
+ {
+ get => _colorBrush;
+ set
+ {
+ _colorBrush = value;
+ OnPropertyChanged(nameof(ColorBrush));
+ }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ protected virtual void OnPropertyChanged(string propertyName)
+ {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Correlator/Util/RuntimeCache.cs b/Correlator/Util/RuntimeCache.cs
index f6b4769..4d78069 100644
--- a/Correlator/Util/RuntimeCache.cs
+++ b/Correlator/Util/RuntimeCache.cs
@@ -35,11 +35,6 @@
public static bool IsHydrophone = false;
///
- /// 数据包index
- ///
- public static readonly List SeqCaches = new List();
-
- ///
/// 水听器下发唤醒指令时间戳
///
public static byte[] HydrophoneWakeUpTimestamp = new byte[6];
diff --git a/Correlator/ViewModels/CheckResponseDialogViewModel.cs b/Correlator/ViewModels/CheckResponseDialogViewModel.cs
index 22fa6a3..670c67c 100644
--- a/Correlator/ViewModels/CheckResponseDialogViewModel.cs
+++ b/Correlator/ViewModels/CheckResponseDialogViewModel.cs
@@ -1,22 +1,310 @@
using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Windows;
+using Correlator.DataService;
using Correlator.Events;
-using Prism.Events;
+using Correlator.Model;
+using Correlator.Util;
+using HandyControl.Controls;
+using Prism.Commands;
+using Prism.Mvvm;
using Prism.Services.Dialogs;
+using MessageBox = System.Windows.MessageBox;
+using Tag = Correlator.SensorHubTag.Tag;
namespace Correlator.ViewModels
{
- public class CheckResponseDialogViewModel : IDialogAware
+ public class CheckResponseDialogViewModel : BindableBase, IDialogAware
{
public event Action RequestClose;
+ #region VM
+
public string Title => "水听器信号清点";
- public CheckResponseDialogViewModel(IEventAggregator eventAggregator)
+ private ObservableCollection _redResponseCollection = new ObservableCollection();
+
+ public ObservableCollection RedResponseCollection
{
- eventAggregator.GetEvent().Subscribe(delegate(IDialogResult result)
+ get => _redResponseCollection;
+ set
{
- RequestClose?.Invoke(result);
- });
+ _redResponseCollection = value;
+ RaisePropertyChanged();
+ }
+ }
+
+ private ObservableCollection _blueResponseCollection = new ObservableCollection();
+
+ public ObservableCollection BlueResponseCollection
+ {
+ get => _blueResponseCollection;
+ set
+ {
+ _blueResponseCollection = value;
+ RaisePropertyChanged();
+ }
+ }
+
+ private bool _checkButtonState;
+
+ public bool CheckButtonState
+ {
+ get => _checkButtonState;
+ set
+ {
+ _checkButtonState = value;
+ RaisePropertyChanged();
+ }
+ }
+
+ private bool _redNextStepButtonState = true;
+
+ public bool RedNextStepButtonState
+ {
+ get => _redNextStepButtonState;
+ set
+ {
+ _redNextStepButtonState = value;
+ RaisePropertyChanged();
+ }
+ }
+
+ #endregion
+
+ #region DelegateCommand
+
+ public DelegateCommand RedNextStepCommand { set; get; }
+ public DelegateCommand