diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index a01d4d1..0a7e32f 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.IO.Ports;
using System.Text;
using System.Threading;
@@ -30,170 +29,170 @@
_eventAggregator = eventAggregator;
_audioService = audioService;
Sp.DataReceived += DataReceivedFromSerialPort;
+ Sp.ErrorReceived += ErrorFromSerialPort;
}
+ ///
+ /// 串口数据
+ ///
+ ///
+ ///
private void DataReceivedFromSerialPort(object sender, SerialDataReceivedEventArgs args)
{
- var strResult = "";
- var receiveData = GetRequestInfo(ref strResult);
-
- if (receiveData != null)
+ while (Sp.BytesToRead < 4)
{
- // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receiveData).Replace("-", ""));
+ return;
+ }
- var deviceIdBytes = new byte[6];
- Array.Copy(receiveData, 4, deviceIdBytes, 0, 6);
- var deviceId = deviceIdBytes.ConvertToString();
+ var headerBuff = new byte[2];
+ Sp.Read(headerBuff, 0, 2); //读取数据
+ if (headerBuff[0] != 0xA3 || headerBuff[1] != 0x20) //符合规范
+ {
+ return;
+ }
- var pduTypeBytes = new byte[2];
- Array.Copy(receiveData, 13, pduTypeBytes, 0, 2);
+ var lengthBuffer = new byte[2];
+ Sp.Read(lengthBuffer, 0, 2);
+ var length = lengthBuffer.ConvertToInt();
- var tagBytes = new byte[receiveData.Length - 18];
- Array.Copy(receiveData, 16, tagBytes, 0, receiveData.Length - 18);
- var tags = tagBytes.GetTags();
-
- //根据数据长度判断数据类型
- switch (receiveData.Length)
- {
- case 32: //设备状态、电量
- var cellTag = tags.GetCellTag();
- if (cellTag != null)
- {
- _devStatus.Cell = cellTag.Cell;
- }
-
- var sensorExceptionTag = tags.GetSensorExceptionTag();
- if (sensorExceptionTag != null)
- {
- _devStatus.Status = sensorExceptionTag.State;
- }
-
- //发送消息更新界面
- if (deviceId.Equals(DevCode.Dev1))
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
- else
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
-
- break;
- case 11293: //数据采集
- if (!RuntimeCache.IsHydrophone)
- {
- HandleCorrelatorData(deviceId, tags);
- }
-
- break;
- case 30:
- if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
- {
- Application.Current.Dispatcher.Invoke(delegate
- {
- //显示点名弹窗
- if (!RuntimeCache.IsShowing)
- {
- //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
- _eventAggregator.GetEvent().Publish();
- RuntimeCache.IsShowing = true;
- }
- });
- }
-
- break;
- case 22543:
- if (receiveData[0] == 0xA3 && receiveData[1] == 0x20)
- {
- int index = receiveData[15];
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
-
- var response = BitConverter.ToString(receiveData).Replace("-", "");
- //收集数据
- if (deviceId.Equals(DevCode.Dev1))
- {
- //原始数据
- RuntimeCache.RedSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.RedSensorResponseTags.Add(index, tags);
- }
- else
- {
- //原始数据
- RuntimeCache.BlueSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.BlueSensorResponseTags.Add(index, tags);
- }
- }
-
- break;
- case 15024: //听音
- HandleListenData(tags);
- break;
- default:
- Console.WriteLine($@"SerialPortServiceImpl => {receiveData.Length}");
- break;
- }
+ if (length < 12)
+ {
+ Sp.DiscardInBuffer(); //长度数据不符合,丢弃
+ "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
}
else
{
- "SerialPortServiceImpl".WriteLog("接收数据存在问题");
+ while (Sp.BytesToRead < length + 2) //数据不够,要等待
+ {
+ Thread.Sleep(20);
+ }
+
+ var 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);
+
+ HandleSerialPortBytes(result);
}
}
- private byte[] GetRequestInfo(ref string strResult)
+ ///
+ /// 错误数据
+ ///
+ ///
+ ///
+ private void ErrorFromSerialPort(object sender, SerialErrorReceivedEventArgs e)
{
- try
- {
- while (Sp.BytesToRead < 4) Thread.Sleep(5);
- var headerBuff = new byte[2];
- Sp.Read(headerBuff, 0, 2); //读取数据
- if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范
- {
- var lengthBuffer = new byte[2];
- Sp.Read(lengthBuffer, 0, 2);
- var length = lengthBuffer.ConvertToInt();
+ Console.WriteLine(@"ErrorFromSerialPort => 错误数据");
+ }
- if (length < 12)
+ ///
+ /// 处理串口发过来的数据
+ ///
+ ///
+ private void HandleSerialPortBytes(byte[] receivedData)
+ {
+ // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receivedData));
+
+ var versionByte = new byte[1];
+ Array.Copy(receivedData, 1, versionByte, 0, 1);
+ var value = BitConverter.ToString(versionByte);
+ //版本分两部分,高半字代表版本的整数部分,低半字代表版本的小数部分,比如:0X20==V2.0
+ var high = short.Parse(value) / 10;
+ var low = short.Parse(value) % 10;
+ var version = $"{high}.{low}";
+ // Console.WriteLine($@"协议版本 => {version}");
+
+ var deviceIdBytes = new byte[6];
+ Array.Copy(receivedData, 4, deviceIdBytes, 0, 6);
+ var deviceId = BitConverter.ToString(deviceIdBytes).Replace("-", "");
+ // Console.WriteLine($@"设备ID => {deviceId}");
+
+ var tagBytes = new byte[receivedData.Length - 18];
+ Array.Copy(receivedData, 16, tagBytes, 0, receivedData.Length - 18);
+ var tags = tagBytes.GetTags();
+ // Console.WriteLine($@"Tag数量 => {tags.Count}");
+
+ switch (receivedData.Length)
+ {
+ case 32: //设备状态、电量
+ var cellTag = tags.GetCellTag();
+ if (cellTag != null)
{
- Sp.DiscardInBuffer(); //长度数据不符合,丢弃
- "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
- return null;
+ _devStatus.Cell = cellTag.Cell;
}
- while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待
-
- var 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);
- return result;
- }
- else
- {
- Thread.Sleep(10);
- var str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting();
- if (str != "" && str.Contains("\r\n"))
+ var sensorExceptionTag = tags.GetSensorExceptionTag();
+ if (sensorExceptionTag != null)
{
- strResult = str;
+ _devStatus.Status = sensorExceptionTag.State;
+ }
+
+ //发送消息更新界面
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
else
{
- Sp.DiscardInBuffer();
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
- }
- return null;
- }
- catch (Exception ex)
- {
- "SerialPortServiceImpl".WriteLog($"错误:{ex.Message}");
- Thread.Sleep(2000);
- Process.GetCurrentProcess().Kill();
- return null;
+ break;
+ case 11293: //数据采集
+ if (!RuntimeCache.IsHydrophone)
+ {
+ HandleCorrelatorData(deviceId, tags);
+ }
+
+ break;
+ case 30:
+ if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
+ {
+ Application.Current.Dispatcher.Invoke(delegate
+ {
+ //显示点名弹窗
+ if (!RuntimeCache.IsShowing)
+ {
+ //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
+ _eventAggregator.GetEvent().Publish();
+ RuntimeCache.IsShowing = true;
+ }
+ });
+ }
+
+ break;
+ case 22543:
+ if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
+ {
+ int index = receivedData[15];
+ //取出seq,确定收到的是第几包数据
+ RuntimeCache.SeqCaches.Add(index);
+
+ var response = BitConverter.ToString(receivedData).Replace("-", "");
+ //收集数据
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ //原始数据
+ RuntimeCache.RedSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.RedSensorResponseTags.Add(index, tags);
+ }
+ else
+ {
+ //原始数据
+ RuntimeCache.BlueSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.BlueSensorResponseTags.Add(index, tags);
+ }
+ }
+
+ break;
+ case 15024: //听音
+ HandleListenData(tags);
+ break;
}
}
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index a01d4d1..0a7e32f 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.IO.Ports;
using System.Text;
using System.Threading;
@@ -30,170 +29,170 @@
_eventAggregator = eventAggregator;
_audioService = audioService;
Sp.DataReceived += DataReceivedFromSerialPort;
+ Sp.ErrorReceived += ErrorFromSerialPort;
}
+ ///
+ /// 串口数据
+ ///
+ ///
+ ///
private void DataReceivedFromSerialPort(object sender, SerialDataReceivedEventArgs args)
{
- var strResult = "";
- var receiveData = GetRequestInfo(ref strResult);
-
- if (receiveData != null)
+ while (Sp.BytesToRead < 4)
{
- // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receiveData).Replace("-", ""));
+ return;
+ }
- var deviceIdBytes = new byte[6];
- Array.Copy(receiveData, 4, deviceIdBytes, 0, 6);
- var deviceId = deviceIdBytes.ConvertToString();
+ var headerBuff = new byte[2];
+ Sp.Read(headerBuff, 0, 2); //读取数据
+ if (headerBuff[0] != 0xA3 || headerBuff[1] != 0x20) //符合规范
+ {
+ return;
+ }
- var pduTypeBytes = new byte[2];
- Array.Copy(receiveData, 13, pduTypeBytes, 0, 2);
+ var lengthBuffer = new byte[2];
+ Sp.Read(lengthBuffer, 0, 2);
+ var length = lengthBuffer.ConvertToInt();
- var tagBytes = new byte[receiveData.Length - 18];
- Array.Copy(receiveData, 16, tagBytes, 0, receiveData.Length - 18);
- var tags = tagBytes.GetTags();
-
- //根据数据长度判断数据类型
- switch (receiveData.Length)
- {
- case 32: //设备状态、电量
- var cellTag = tags.GetCellTag();
- if (cellTag != null)
- {
- _devStatus.Cell = cellTag.Cell;
- }
-
- var sensorExceptionTag = tags.GetSensorExceptionTag();
- if (sensorExceptionTag != null)
- {
- _devStatus.Status = sensorExceptionTag.State;
- }
-
- //发送消息更新界面
- if (deviceId.Equals(DevCode.Dev1))
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
- else
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
-
- break;
- case 11293: //数据采集
- if (!RuntimeCache.IsHydrophone)
- {
- HandleCorrelatorData(deviceId, tags);
- }
-
- break;
- case 30:
- if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
- {
- Application.Current.Dispatcher.Invoke(delegate
- {
- //显示点名弹窗
- if (!RuntimeCache.IsShowing)
- {
- //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
- _eventAggregator.GetEvent().Publish();
- RuntimeCache.IsShowing = true;
- }
- });
- }
-
- break;
- case 22543:
- if (receiveData[0] == 0xA3 && receiveData[1] == 0x20)
- {
- int index = receiveData[15];
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
-
- var response = BitConverter.ToString(receiveData).Replace("-", "");
- //收集数据
- if (deviceId.Equals(DevCode.Dev1))
- {
- //原始数据
- RuntimeCache.RedSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.RedSensorResponseTags.Add(index, tags);
- }
- else
- {
- //原始数据
- RuntimeCache.BlueSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.BlueSensorResponseTags.Add(index, tags);
- }
- }
-
- break;
- case 15024: //听音
- HandleListenData(tags);
- break;
- default:
- Console.WriteLine($@"SerialPortServiceImpl => {receiveData.Length}");
- break;
- }
+ if (length < 12)
+ {
+ Sp.DiscardInBuffer(); //长度数据不符合,丢弃
+ "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
}
else
{
- "SerialPortServiceImpl".WriteLog("接收数据存在问题");
+ while (Sp.BytesToRead < length + 2) //数据不够,要等待
+ {
+ Thread.Sleep(20);
+ }
+
+ var 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);
+
+ HandleSerialPortBytes(result);
}
}
- private byte[] GetRequestInfo(ref string strResult)
+ ///
+ /// 错误数据
+ ///
+ ///
+ ///
+ private void ErrorFromSerialPort(object sender, SerialErrorReceivedEventArgs e)
{
- try
- {
- while (Sp.BytesToRead < 4) Thread.Sleep(5);
- var headerBuff = new byte[2];
- Sp.Read(headerBuff, 0, 2); //读取数据
- if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范
- {
- var lengthBuffer = new byte[2];
- Sp.Read(lengthBuffer, 0, 2);
- var length = lengthBuffer.ConvertToInt();
+ Console.WriteLine(@"ErrorFromSerialPort => 错误数据");
+ }
- if (length < 12)
+ ///
+ /// 处理串口发过来的数据
+ ///
+ ///
+ private void HandleSerialPortBytes(byte[] receivedData)
+ {
+ // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receivedData));
+
+ var versionByte = new byte[1];
+ Array.Copy(receivedData, 1, versionByte, 0, 1);
+ var value = BitConverter.ToString(versionByte);
+ //版本分两部分,高半字代表版本的整数部分,低半字代表版本的小数部分,比如:0X20==V2.0
+ var high = short.Parse(value) / 10;
+ var low = short.Parse(value) % 10;
+ var version = $"{high}.{low}";
+ // Console.WriteLine($@"协议版本 => {version}");
+
+ var deviceIdBytes = new byte[6];
+ Array.Copy(receivedData, 4, deviceIdBytes, 0, 6);
+ var deviceId = BitConverter.ToString(deviceIdBytes).Replace("-", "");
+ // Console.WriteLine($@"设备ID => {deviceId}");
+
+ var tagBytes = new byte[receivedData.Length - 18];
+ Array.Copy(receivedData, 16, tagBytes, 0, receivedData.Length - 18);
+ var tags = tagBytes.GetTags();
+ // Console.WriteLine($@"Tag数量 => {tags.Count}");
+
+ switch (receivedData.Length)
+ {
+ case 32: //设备状态、电量
+ var cellTag = tags.GetCellTag();
+ if (cellTag != null)
{
- Sp.DiscardInBuffer(); //长度数据不符合,丢弃
- "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
- return null;
+ _devStatus.Cell = cellTag.Cell;
}
- while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待
-
- var 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);
- return result;
- }
- else
- {
- Thread.Sleep(10);
- var str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting();
- if (str != "" && str.Contains("\r\n"))
+ var sensorExceptionTag = tags.GetSensorExceptionTag();
+ if (sensorExceptionTag != null)
{
- strResult = str;
+ _devStatus.Status = sensorExceptionTag.State;
+ }
+
+ //发送消息更新界面
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
else
{
- Sp.DiscardInBuffer();
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
- }
- return null;
- }
- catch (Exception ex)
- {
- "SerialPortServiceImpl".WriteLog($"错误:{ex.Message}");
- Thread.Sleep(2000);
- Process.GetCurrentProcess().Kill();
- return null;
+ break;
+ case 11293: //数据采集
+ if (!RuntimeCache.IsHydrophone)
+ {
+ HandleCorrelatorData(deviceId, tags);
+ }
+
+ break;
+ case 30:
+ if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
+ {
+ Application.Current.Dispatcher.Invoke(delegate
+ {
+ //显示点名弹窗
+ if (!RuntimeCache.IsShowing)
+ {
+ //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
+ _eventAggregator.GetEvent().Publish();
+ RuntimeCache.IsShowing = true;
+ }
+ });
+ }
+
+ break;
+ case 22543:
+ if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
+ {
+ int index = receivedData[15];
+ //取出seq,确定收到的是第几包数据
+ RuntimeCache.SeqCaches.Add(index);
+
+ var response = BitConverter.ToString(receivedData).Replace("-", "");
+ //收集数据
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ //原始数据
+ RuntimeCache.RedSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.RedSensorResponseTags.Add(index, tags);
+ }
+ else
+ {
+ //原始数据
+ RuntimeCache.BlueSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.BlueSensorResponseTags.Add(index, tags);
+ }
+ }
+
+ break;
+ case 15024: //听音
+ HandleListenData(tags);
+ break;
}
}
diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs
index b7694e4..3452941 100644
--- a/Correlator/Util/MethodExtensions.cs
+++ b/Correlator/Util/MethodExtensions.cs
@@ -284,30 +284,35 @@
///
/// 字节数组转数据Tag集合
///
- ///
+ ///
///
- public static List GetTags(this byte[] strTags)
+ public static List GetTags(this byte[] tagBytes)
{
var tags = new List();
try
{
var i = 0;
- while (i < strTags.Length)
+ var n = 0;
+ while (i < tagBytes.Length)
{
- 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);
+ n++;
+ var oidBytes = new byte[4];
+ Array.Copy(tagBytes, i, oidBytes, 0, 4);
+ var oid = oidBytes.ConvertToString();
+
+ //value域的长度
+ var tagValueBytes = new byte[2];
+ Array.Copy(tagBytes, i + 4, tagValueBytes, 0, 2);
+ Array.Reverse(tagValueBytes);
+ int tagValueLength = BitConverter.ToInt16(tagValueBytes, 0);
+ Console.WriteLine($@"value域的长度 => {tagValueLength}");
- Array.Reverse(len);
- int iLen = BitConverter.ToInt16(len, 0);
- var strOid = oid.ConvertToString();
+ var valueBytes = new byte[tagValueLength];
+ Array.Copy(tagBytes, i + 6, valueBytes, 0, tagValueLength);
+ // Console.WriteLine($@"第{n}个Tag => {BitConverter.ToString(valueBytes)}");
- var value = new byte[iLen];
- Array.Copy(strTags, i + 6, value, 0, iLen);
-
- i = i + 6 + iLen;
- var tag = TagFactory.Create(strOid, iLen, value);
+ i = i + 6 + tagValueLength;
+ var tag = TagFactory.Create(oid, tagValueLength, valueBytes);
tags.Add(tag);
}
}
@@ -546,7 +551,7 @@
configModel.Pipe++;
configModel.LocateTimes++;
manager.Insert(configModel);
-
+
//清空缓存
RuntimeCache.SoundCaches.Clear();
}
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index a01d4d1..0a7e32f 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.IO.Ports;
using System.Text;
using System.Threading;
@@ -30,170 +29,170 @@
_eventAggregator = eventAggregator;
_audioService = audioService;
Sp.DataReceived += DataReceivedFromSerialPort;
+ Sp.ErrorReceived += ErrorFromSerialPort;
}
+ ///
+ /// 串口数据
+ ///
+ ///
+ ///
private void DataReceivedFromSerialPort(object sender, SerialDataReceivedEventArgs args)
{
- var strResult = "";
- var receiveData = GetRequestInfo(ref strResult);
-
- if (receiveData != null)
+ while (Sp.BytesToRead < 4)
{
- // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receiveData).Replace("-", ""));
+ return;
+ }
- var deviceIdBytes = new byte[6];
- Array.Copy(receiveData, 4, deviceIdBytes, 0, 6);
- var deviceId = deviceIdBytes.ConvertToString();
+ var headerBuff = new byte[2];
+ Sp.Read(headerBuff, 0, 2); //读取数据
+ if (headerBuff[0] != 0xA3 || headerBuff[1] != 0x20) //符合规范
+ {
+ return;
+ }
- var pduTypeBytes = new byte[2];
- Array.Copy(receiveData, 13, pduTypeBytes, 0, 2);
+ var lengthBuffer = new byte[2];
+ Sp.Read(lengthBuffer, 0, 2);
+ var length = lengthBuffer.ConvertToInt();
- var tagBytes = new byte[receiveData.Length - 18];
- Array.Copy(receiveData, 16, tagBytes, 0, receiveData.Length - 18);
- var tags = tagBytes.GetTags();
-
- //根据数据长度判断数据类型
- switch (receiveData.Length)
- {
- case 32: //设备状态、电量
- var cellTag = tags.GetCellTag();
- if (cellTag != null)
- {
- _devStatus.Cell = cellTag.Cell;
- }
-
- var sensorExceptionTag = tags.GetSensorExceptionTag();
- if (sensorExceptionTag != null)
- {
- _devStatus.Status = sensorExceptionTag.State;
- }
-
- //发送消息更新界面
- if (deviceId.Equals(DevCode.Dev1))
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
- else
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
-
- break;
- case 11293: //数据采集
- if (!RuntimeCache.IsHydrophone)
- {
- HandleCorrelatorData(deviceId, tags);
- }
-
- break;
- case 30:
- if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
- {
- Application.Current.Dispatcher.Invoke(delegate
- {
- //显示点名弹窗
- if (!RuntimeCache.IsShowing)
- {
- //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
- _eventAggregator.GetEvent().Publish();
- RuntimeCache.IsShowing = true;
- }
- });
- }
-
- break;
- case 22543:
- if (receiveData[0] == 0xA3 && receiveData[1] == 0x20)
- {
- int index = receiveData[15];
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
-
- var response = BitConverter.ToString(receiveData).Replace("-", "");
- //收集数据
- if (deviceId.Equals(DevCode.Dev1))
- {
- //原始数据
- RuntimeCache.RedSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.RedSensorResponseTags.Add(index, tags);
- }
- else
- {
- //原始数据
- RuntimeCache.BlueSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.BlueSensorResponseTags.Add(index, tags);
- }
- }
-
- break;
- case 15024: //听音
- HandleListenData(tags);
- break;
- default:
- Console.WriteLine($@"SerialPortServiceImpl => {receiveData.Length}");
- break;
- }
+ if (length < 12)
+ {
+ Sp.DiscardInBuffer(); //长度数据不符合,丢弃
+ "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
}
else
{
- "SerialPortServiceImpl".WriteLog("接收数据存在问题");
+ while (Sp.BytesToRead < length + 2) //数据不够,要等待
+ {
+ Thread.Sleep(20);
+ }
+
+ var 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);
+
+ HandleSerialPortBytes(result);
}
}
- private byte[] GetRequestInfo(ref string strResult)
+ ///
+ /// 错误数据
+ ///
+ ///
+ ///
+ private void ErrorFromSerialPort(object sender, SerialErrorReceivedEventArgs e)
{
- try
- {
- while (Sp.BytesToRead < 4) Thread.Sleep(5);
- var headerBuff = new byte[2];
- Sp.Read(headerBuff, 0, 2); //读取数据
- if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范
- {
- var lengthBuffer = new byte[2];
- Sp.Read(lengthBuffer, 0, 2);
- var length = lengthBuffer.ConvertToInt();
+ Console.WriteLine(@"ErrorFromSerialPort => 错误数据");
+ }
- if (length < 12)
+ ///
+ /// 处理串口发过来的数据
+ ///
+ ///
+ private void HandleSerialPortBytes(byte[] receivedData)
+ {
+ // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receivedData));
+
+ var versionByte = new byte[1];
+ Array.Copy(receivedData, 1, versionByte, 0, 1);
+ var value = BitConverter.ToString(versionByte);
+ //版本分两部分,高半字代表版本的整数部分,低半字代表版本的小数部分,比如:0X20==V2.0
+ var high = short.Parse(value) / 10;
+ var low = short.Parse(value) % 10;
+ var version = $"{high}.{low}";
+ // Console.WriteLine($@"协议版本 => {version}");
+
+ var deviceIdBytes = new byte[6];
+ Array.Copy(receivedData, 4, deviceIdBytes, 0, 6);
+ var deviceId = BitConverter.ToString(deviceIdBytes).Replace("-", "");
+ // Console.WriteLine($@"设备ID => {deviceId}");
+
+ var tagBytes = new byte[receivedData.Length - 18];
+ Array.Copy(receivedData, 16, tagBytes, 0, receivedData.Length - 18);
+ var tags = tagBytes.GetTags();
+ // Console.WriteLine($@"Tag数量 => {tags.Count}");
+
+ switch (receivedData.Length)
+ {
+ case 32: //设备状态、电量
+ var cellTag = tags.GetCellTag();
+ if (cellTag != null)
{
- Sp.DiscardInBuffer(); //长度数据不符合,丢弃
- "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
- return null;
+ _devStatus.Cell = cellTag.Cell;
}
- while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待
-
- var 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);
- return result;
- }
- else
- {
- Thread.Sleep(10);
- var str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting();
- if (str != "" && str.Contains("\r\n"))
+ var sensorExceptionTag = tags.GetSensorExceptionTag();
+ if (sensorExceptionTag != null)
{
- strResult = str;
+ _devStatus.Status = sensorExceptionTag.State;
+ }
+
+ //发送消息更新界面
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
else
{
- Sp.DiscardInBuffer();
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
- }
- return null;
- }
- catch (Exception ex)
- {
- "SerialPortServiceImpl".WriteLog($"错误:{ex.Message}");
- Thread.Sleep(2000);
- Process.GetCurrentProcess().Kill();
- return null;
+ break;
+ case 11293: //数据采集
+ if (!RuntimeCache.IsHydrophone)
+ {
+ HandleCorrelatorData(deviceId, tags);
+ }
+
+ break;
+ case 30:
+ if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
+ {
+ Application.Current.Dispatcher.Invoke(delegate
+ {
+ //显示点名弹窗
+ if (!RuntimeCache.IsShowing)
+ {
+ //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
+ _eventAggregator.GetEvent().Publish();
+ RuntimeCache.IsShowing = true;
+ }
+ });
+ }
+
+ break;
+ case 22543:
+ if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
+ {
+ int index = receivedData[15];
+ //取出seq,确定收到的是第几包数据
+ RuntimeCache.SeqCaches.Add(index);
+
+ var response = BitConverter.ToString(receivedData).Replace("-", "");
+ //收集数据
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ //原始数据
+ RuntimeCache.RedSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.RedSensorResponseTags.Add(index, tags);
+ }
+ else
+ {
+ //原始数据
+ RuntimeCache.BlueSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.BlueSensorResponseTags.Add(index, tags);
+ }
+ }
+
+ break;
+ case 15024: //听音
+ HandleListenData(tags);
+ break;
}
}
diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs
index b7694e4..3452941 100644
--- a/Correlator/Util/MethodExtensions.cs
+++ b/Correlator/Util/MethodExtensions.cs
@@ -284,30 +284,35 @@
///
/// 字节数组转数据Tag集合
///
- ///
+ ///
///
- public static List GetTags(this byte[] strTags)
+ public static List GetTags(this byte[] tagBytes)
{
var tags = new List();
try
{
var i = 0;
- while (i < strTags.Length)
+ var n = 0;
+ while (i < tagBytes.Length)
{
- 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);
+ n++;
+ var oidBytes = new byte[4];
+ Array.Copy(tagBytes, i, oidBytes, 0, 4);
+ var oid = oidBytes.ConvertToString();
+
+ //value域的长度
+ var tagValueBytes = new byte[2];
+ Array.Copy(tagBytes, i + 4, tagValueBytes, 0, 2);
+ Array.Reverse(tagValueBytes);
+ int tagValueLength = BitConverter.ToInt16(tagValueBytes, 0);
+ Console.WriteLine($@"value域的长度 => {tagValueLength}");
- Array.Reverse(len);
- int iLen = BitConverter.ToInt16(len, 0);
- var strOid = oid.ConvertToString();
+ var valueBytes = new byte[tagValueLength];
+ Array.Copy(tagBytes, i + 6, valueBytes, 0, tagValueLength);
+ // Console.WriteLine($@"第{n}个Tag => {BitConverter.ToString(valueBytes)}");
- var value = new byte[iLen];
- Array.Copy(strTags, i + 6, value, 0, iLen);
-
- i = i + 6 + iLen;
- var tag = TagFactory.Create(strOid, iLen, value);
+ i = i + 6 + tagValueLength;
+ var tag = TagFactory.Create(oid, tagValueLength, valueBytes);
tags.Add(tag);
}
}
@@ -546,7 +551,7 @@
configModel.Pipe++;
configModel.LocateTimes++;
manager.Insert(configModel);
-
+
//清空缓存
RuntimeCache.SoundCaches.Clear();
}
diff --git a/Correlator/ViewModels/AudioFileViewModel.cs b/Correlator/ViewModels/AudioFileViewModel.cs
index f614c12..5c8b044 100644
--- a/Correlator/ViewModels/AudioFileViewModel.cs
+++ b/Correlator/ViewModels/AudioFileViewModel.cs
@@ -4,6 +4,7 @@
using System.Linq;
using System.Windows.Controls;
using System.Windows.Threading;
+using Correlator.DataService;
using Correlator.Model;
using Correlator.Util;
using HandyControl.Controls;
@@ -21,7 +22,6 @@
public string Title { get; private set; } = string.Empty;
public event Action RequestClose;
- private List _totalFiles;
private List _audioFiles;
@@ -108,7 +108,6 @@
#endregion
private AudioFile _selectedFile;
- private WaveOutEvent _waveOutEvent = new WaveOutEvent();
private AudioFileReader _audioFileReader;
private readonly DispatcherTimer _audioTimer = new DispatcherTimer
@@ -116,11 +115,11 @@
Interval = new TimeSpan(0, 0, 0, 1)
};
- public AudioFileViewModel(IDialogService dialogService)
+ public AudioFileViewModel(IAudioService audioService, IDialogService dialogService)
{
_audioTimer.Tick += delegate
{
- if (_waveOutEvent.PlaybackState == PlaybackState.Stopped)
+ if (audioService.Wave.PlaybackState == PlaybackState.Stopped)
{
_audioTimer.Stop();
AudioState = "未播放";
@@ -144,12 +143,6 @@
_audioFileReader = null;
}
- if (_waveOutEvent != null)
- {
- _waveOutEvent.Dispose();
- _waveOutEvent = null;
- }
-
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
@@ -173,8 +166,9 @@
return;
}
- if (_waveOutEvent.PlaybackState == PlaybackState.Playing)
+ if (audioService.Wave.PlaybackState == PlaybackState.Playing)
{
+ audioService.Wave.Stop();
DisposeResource("已暂停");
}
else
@@ -186,8 +180,8 @@
Max = (int)_audioFileReader.TotalTime.TotalSeconds;
AudioState = $"时长:{_max}s";
- _waveOutEvent.Init(_audioFileReader);
- _waveOutEvent.Play();
+ audioService.Wave.Init(_audioFileReader);
+ audioService.Wave.Play();
}
catch (FormatException)
{
@@ -215,7 +209,7 @@
return;
}
- if (_waveOutEvent.PlaybackState == PlaybackState.Playing)
+ if (audioService.Wave.PlaybackState == PlaybackState.Playing)
{
dialogService.ShowDialog(
"AlertMessageDialog",
@@ -233,11 +227,10 @@
File.Delete(_selectedFile.FullPath);
//刷新数据
- _totalFiles = GetTotalAudioFiles();
- MaxPage = _totalFiles.Count.GetPageSize();
- //页码重置
+ var totalFiles = GetTotalAudioFiles();
+ MaxPage = totalFiles.Count.GetPageSize();
PageIndex = 1;
- AudioFiles = _totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
+ AudioFiles = totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
}
catch (IOException)
{
@@ -247,7 +240,7 @@
PageUpdatedCmd = new DelegateCommand>(args =>
{
- AudioFiles = _totalFiles
+ AudioFiles = GetTotalAudioFiles()
.Skip((args.Info - 1) * RuntimeCache.PerPageItemCount)
.Take(RuntimeCache.PerPageItemCount)
.ToList();
@@ -256,7 +249,6 @@
private void DisposeResource(string message)
{
- _waveOutEvent?.Dispose();
_audioFileReader?.Dispose();
_audioTimer?.Stop();
AudioState = message;
@@ -273,9 +265,9 @@
public void OnDialogOpened(IDialogParameters parameters)
{
- _totalFiles = GetTotalAudioFiles();
- MaxPage = _totalFiles.Count.GetPageSize();
- AudioFiles = _totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
+ var totalFiles = GetTotalAudioFiles();
+ MaxPage = totalFiles.Count.GetPageSize();
+ AudioFiles = totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
}
private static List GetTotalAudioFiles()
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index a01d4d1..0a7e32f 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.IO.Ports;
using System.Text;
using System.Threading;
@@ -30,170 +29,170 @@
_eventAggregator = eventAggregator;
_audioService = audioService;
Sp.DataReceived += DataReceivedFromSerialPort;
+ Sp.ErrorReceived += ErrorFromSerialPort;
}
+ ///
+ /// 串口数据
+ ///
+ ///
+ ///
private void DataReceivedFromSerialPort(object sender, SerialDataReceivedEventArgs args)
{
- var strResult = "";
- var receiveData = GetRequestInfo(ref strResult);
-
- if (receiveData != null)
+ while (Sp.BytesToRead < 4)
{
- // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receiveData).Replace("-", ""));
+ return;
+ }
- var deviceIdBytes = new byte[6];
- Array.Copy(receiveData, 4, deviceIdBytes, 0, 6);
- var deviceId = deviceIdBytes.ConvertToString();
+ var headerBuff = new byte[2];
+ Sp.Read(headerBuff, 0, 2); //读取数据
+ if (headerBuff[0] != 0xA3 || headerBuff[1] != 0x20) //符合规范
+ {
+ return;
+ }
- var pduTypeBytes = new byte[2];
- Array.Copy(receiveData, 13, pduTypeBytes, 0, 2);
+ var lengthBuffer = new byte[2];
+ Sp.Read(lengthBuffer, 0, 2);
+ var length = lengthBuffer.ConvertToInt();
- var tagBytes = new byte[receiveData.Length - 18];
- Array.Copy(receiveData, 16, tagBytes, 0, receiveData.Length - 18);
- var tags = tagBytes.GetTags();
-
- //根据数据长度判断数据类型
- switch (receiveData.Length)
- {
- case 32: //设备状态、电量
- var cellTag = tags.GetCellTag();
- if (cellTag != null)
- {
- _devStatus.Cell = cellTag.Cell;
- }
-
- var sensorExceptionTag = tags.GetSensorExceptionTag();
- if (sensorExceptionTag != null)
- {
- _devStatus.Status = sensorExceptionTag.State;
- }
-
- //发送消息更新界面
- if (deviceId.Equals(DevCode.Dev1))
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
- else
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
-
- break;
- case 11293: //数据采集
- if (!RuntimeCache.IsHydrophone)
- {
- HandleCorrelatorData(deviceId, tags);
- }
-
- break;
- case 30:
- if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
- {
- Application.Current.Dispatcher.Invoke(delegate
- {
- //显示点名弹窗
- if (!RuntimeCache.IsShowing)
- {
- //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
- _eventAggregator.GetEvent().Publish();
- RuntimeCache.IsShowing = true;
- }
- });
- }
-
- break;
- case 22543:
- if (receiveData[0] == 0xA3 && receiveData[1] == 0x20)
- {
- int index = receiveData[15];
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
-
- var response = BitConverter.ToString(receiveData).Replace("-", "");
- //收集数据
- if (deviceId.Equals(DevCode.Dev1))
- {
- //原始数据
- RuntimeCache.RedSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.RedSensorResponseTags.Add(index, tags);
- }
- else
- {
- //原始数据
- RuntimeCache.BlueSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.BlueSensorResponseTags.Add(index, tags);
- }
- }
-
- break;
- case 15024: //听音
- HandleListenData(tags);
- break;
- default:
- Console.WriteLine($@"SerialPortServiceImpl => {receiveData.Length}");
- break;
- }
+ if (length < 12)
+ {
+ Sp.DiscardInBuffer(); //长度数据不符合,丢弃
+ "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
}
else
{
- "SerialPortServiceImpl".WriteLog("接收数据存在问题");
+ while (Sp.BytesToRead < length + 2) //数据不够,要等待
+ {
+ Thread.Sleep(20);
+ }
+
+ var 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);
+
+ HandleSerialPortBytes(result);
}
}
- private byte[] GetRequestInfo(ref string strResult)
+ ///
+ /// 错误数据
+ ///
+ ///
+ ///
+ private void ErrorFromSerialPort(object sender, SerialErrorReceivedEventArgs e)
{
- try
- {
- while (Sp.BytesToRead < 4) Thread.Sleep(5);
- var headerBuff = new byte[2];
- Sp.Read(headerBuff, 0, 2); //读取数据
- if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范
- {
- var lengthBuffer = new byte[2];
- Sp.Read(lengthBuffer, 0, 2);
- var length = lengthBuffer.ConvertToInt();
+ Console.WriteLine(@"ErrorFromSerialPort => 错误数据");
+ }
- if (length < 12)
+ ///
+ /// 处理串口发过来的数据
+ ///
+ ///
+ private void HandleSerialPortBytes(byte[] receivedData)
+ {
+ // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receivedData));
+
+ var versionByte = new byte[1];
+ Array.Copy(receivedData, 1, versionByte, 0, 1);
+ var value = BitConverter.ToString(versionByte);
+ //版本分两部分,高半字代表版本的整数部分,低半字代表版本的小数部分,比如:0X20==V2.0
+ var high = short.Parse(value) / 10;
+ var low = short.Parse(value) % 10;
+ var version = $"{high}.{low}";
+ // Console.WriteLine($@"协议版本 => {version}");
+
+ var deviceIdBytes = new byte[6];
+ Array.Copy(receivedData, 4, deviceIdBytes, 0, 6);
+ var deviceId = BitConverter.ToString(deviceIdBytes).Replace("-", "");
+ // Console.WriteLine($@"设备ID => {deviceId}");
+
+ var tagBytes = new byte[receivedData.Length - 18];
+ Array.Copy(receivedData, 16, tagBytes, 0, receivedData.Length - 18);
+ var tags = tagBytes.GetTags();
+ // Console.WriteLine($@"Tag数量 => {tags.Count}");
+
+ switch (receivedData.Length)
+ {
+ case 32: //设备状态、电量
+ var cellTag = tags.GetCellTag();
+ if (cellTag != null)
{
- Sp.DiscardInBuffer(); //长度数据不符合,丢弃
- "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
- return null;
+ _devStatus.Cell = cellTag.Cell;
}
- while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待
-
- var 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);
- return result;
- }
- else
- {
- Thread.Sleep(10);
- var str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting();
- if (str != "" && str.Contains("\r\n"))
+ var sensorExceptionTag = tags.GetSensorExceptionTag();
+ if (sensorExceptionTag != null)
{
- strResult = str;
+ _devStatus.Status = sensorExceptionTag.State;
+ }
+
+ //发送消息更新界面
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
else
{
- Sp.DiscardInBuffer();
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
- }
- return null;
- }
- catch (Exception ex)
- {
- "SerialPortServiceImpl".WriteLog($"错误:{ex.Message}");
- Thread.Sleep(2000);
- Process.GetCurrentProcess().Kill();
- return null;
+ break;
+ case 11293: //数据采集
+ if (!RuntimeCache.IsHydrophone)
+ {
+ HandleCorrelatorData(deviceId, tags);
+ }
+
+ break;
+ case 30:
+ if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
+ {
+ Application.Current.Dispatcher.Invoke(delegate
+ {
+ //显示点名弹窗
+ if (!RuntimeCache.IsShowing)
+ {
+ //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
+ _eventAggregator.GetEvent().Publish();
+ RuntimeCache.IsShowing = true;
+ }
+ });
+ }
+
+ break;
+ case 22543:
+ if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
+ {
+ int index = receivedData[15];
+ //取出seq,确定收到的是第几包数据
+ RuntimeCache.SeqCaches.Add(index);
+
+ var response = BitConverter.ToString(receivedData).Replace("-", "");
+ //收集数据
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ //原始数据
+ RuntimeCache.RedSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.RedSensorResponseTags.Add(index, tags);
+ }
+ else
+ {
+ //原始数据
+ RuntimeCache.BlueSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.BlueSensorResponseTags.Add(index, tags);
+ }
+ }
+
+ break;
+ case 15024: //听音
+ HandleListenData(tags);
+ break;
}
}
diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs
index b7694e4..3452941 100644
--- a/Correlator/Util/MethodExtensions.cs
+++ b/Correlator/Util/MethodExtensions.cs
@@ -284,30 +284,35 @@
///
/// 字节数组转数据Tag集合
///
- ///
+ ///
///
- public static List GetTags(this byte[] strTags)
+ public static List GetTags(this byte[] tagBytes)
{
var tags = new List();
try
{
var i = 0;
- while (i < strTags.Length)
+ var n = 0;
+ while (i < tagBytes.Length)
{
- 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);
+ n++;
+ var oidBytes = new byte[4];
+ Array.Copy(tagBytes, i, oidBytes, 0, 4);
+ var oid = oidBytes.ConvertToString();
+
+ //value域的长度
+ var tagValueBytes = new byte[2];
+ Array.Copy(tagBytes, i + 4, tagValueBytes, 0, 2);
+ Array.Reverse(tagValueBytes);
+ int tagValueLength = BitConverter.ToInt16(tagValueBytes, 0);
+ Console.WriteLine($@"value域的长度 => {tagValueLength}");
- Array.Reverse(len);
- int iLen = BitConverter.ToInt16(len, 0);
- var strOid = oid.ConvertToString();
+ var valueBytes = new byte[tagValueLength];
+ Array.Copy(tagBytes, i + 6, valueBytes, 0, tagValueLength);
+ // Console.WriteLine($@"第{n}个Tag => {BitConverter.ToString(valueBytes)}");
- var value = new byte[iLen];
- Array.Copy(strTags, i + 6, value, 0, iLen);
-
- i = i + 6 + iLen;
- var tag = TagFactory.Create(strOid, iLen, value);
+ i = i + 6 + tagValueLength;
+ var tag = TagFactory.Create(oid, tagValueLength, valueBytes);
tags.Add(tag);
}
}
@@ -546,7 +551,7 @@
configModel.Pipe++;
configModel.LocateTimes++;
manager.Insert(configModel);
-
+
//清空缓存
RuntimeCache.SoundCaches.Clear();
}
diff --git a/Correlator/ViewModels/AudioFileViewModel.cs b/Correlator/ViewModels/AudioFileViewModel.cs
index f614c12..5c8b044 100644
--- a/Correlator/ViewModels/AudioFileViewModel.cs
+++ b/Correlator/ViewModels/AudioFileViewModel.cs
@@ -4,6 +4,7 @@
using System.Linq;
using System.Windows.Controls;
using System.Windows.Threading;
+using Correlator.DataService;
using Correlator.Model;
using Correlator.Util;
using HandyControl.Controls;
@@ -21,7 +22,6 @@
public string Title { get; private set; } = string.Empty;
public event Action RequestClose;
- private List _totalFiles;
private List _audioFiles;
@@ -108,7 +108,6 @@
#endregion
private AudioFile _selectedFile;
- private WaveOutEvent _waveOutEvent = new WaveOutEvent();
private AudioFileReader _audioFileReader;
private readonly DispatcherTimer _audioTimer = new DispatcherTimer
@@ -116,11 +115,11 @@
Interval = new TimeSpan(0, 0, 0, 1)
};
- public AudioFileViewModel(IDialogService dialogService)
+ public AudioFileViewModel(IAudioService audioService, IDialogService dialogService)
{
_audioTimer.Tick += delegate
{
- if (_waveOutEvent.PlaybackState == PlaybackState.Stopped)
+ if (audioService.Wave.PlaybackState == PlaybackState.Stopped)
{
_audioTimer.Stop();
AudioState = "未播放";
@@ -144,12 +143,6 @@
_audioFileReader = null;
}
- if (_waveOutEvent != null)
- {
- _waveOutEvent.Dispose();
- _waveOutEvent = null;
- }
-
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
@@ -173,8 +166,9 @@
return;
}
- if (_waveOutEvent.PlaybackState == PlaybackState.Playing)
+ if (audioService.Wave.PlaybackState == PlaybackState.Playing)
{
+ audioService.Wave.Stop();
DisposeResource("已暂停");
}
else
@@ -186,8 +180,8 @@
Max = (int)_audioFileReader.TotalTime.TotalSeconds;
AudioState = $"时长:{_max}s";
- _waveOutEvent.Init(_audioFileReader);
- _waveOutEvent.Play();
+ audioService.Wave.Init(_audioFileReader);
+ audioService.Wave.Play();
}
catch (FormatException)
{
@@ -215,7 +209,7 @@
return;
}
- if (_waveOutEvent.PlaybackState == PlaybackState.Playing)
+ if (audioService.Wave.PlaybackState == PlaybackState.Playing)
{
dialogService.ShowDialog(
"AlertMessageDialog",
@@ -233,11 +227,10 @@
File.Delete(_selectedFile.FullPath);
//刷新数据
- _totalFiles = GetTotalAudioFiles();
- MaxPage = _totalFiles.Count.GetPageSize();
- //页码重置
+ var totalFiles = GetTotalAudioFiles();
+ MaxPage = totalFiles.Count.GetPageSize();
PageIndex = 1;
- AudioFiles = _totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
+ AudioFiles = totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
}
catch (IOException)
{
@@ -247,7 +240,7 @@
PageUpdatedCmd = new DelegateCommand>(args =>
{
- AudioFiles = _totalFiles
+ AudioFiles = GetTotalAudioFiles()
.Skip((args.Info - 1) * RuntimeCache.PerPageItemCount)
.Take(RuntimeCache.PerPageItemCount)
.ToList();
@@ -256,7 +249,6 @@
private void DisposeResource(string message)
{
- _waveOutEvent?.Dispose();
_audioFileReader?.Dispose();
_audioTimer?.Stop();
AudioState = message;
@@ -273,9 +265,9 @@
public void OnDialogOpened(IDialogParameters parameters)
{
- _totalFiles = GetTotalAudioFiles();
- MaxPage = _totalFiles.Count.GetPageSize();
- AudioFiles = _totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
+ var totalFiles = GetTotalAudioFiles();
+ MaxPage = totalFiles.Count.GetPageSize();
+ AudioFiles = totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
}
private static List GetTotalAudioFiles()
diff --git a/Correlator/ViewModels/MainWindowViewModel.cs b/Correlator/ViewModels/MainWindowViewModel.cs
index 91e77ea..dce24b5 100644
--- a/Correlator/ViewModels/MainWindowViewModel.cs
+++ b/Correlator/ViewModels/MainWindowViewModel.cs
@@ -817,7 +817,7 @@
{
File.Delete(file);
}
-
+
RuntimeCache.SmallAudioFiles.Clear();
_mainWindow.Close();
}
@@ -833,13 +833,13 @@
//查看图片列表
OpenImageFileCommand = new DelegateCommand(delegate
{
- _dialogService.ShowDialog("PictureFileView", null, delegate { });
+ _dialogService.Show("PictureFileView", null, delegate { });
});
//查看音频列表
OpenAudioFileCommand = new DelegateCommand(delegate
{
- _dialogService.ShowDialog("AudioFileView", null, delegate { });
+ _dialogService.Show("AudioFileView", null, delegate { });
});
//打开听音
@@ -879,7 +879,7 @@
return;
}
- _dialogService.ShowDialog("SoundSpeedDialog",
+ _dialogService.Show("SoundSpeedDialog",
new DialogParameters { { "MaterialName", _materialName } },
delegate { });
});
@@ -889,7 +889,7 @@
{
if (RuntimeCache.IsHydrophone)
{
- _dialogService.ShowDialog("ImportResponseDialog", null, delegate(IDialogResult result)
+ _dialogService.Show("ImportResponseDialog", null, delegate(IDialogResult result)
{
if (result.Result == ButtonResult.Cancel)
{
@@ -914,9 +914,11 @@
PipeLength = configModel.PipeLength;
LowFrequency = configModel.MinFrequency;
HighFrequency = configModel.MaxFrequency;
-
+
//计算声速
- var soundVelocity = _soundSpeedDataService.GetSoundVelocity(_materialName, Convert.ToInt32(_pipeDiameter));
+ var soundVelocity = _soundSpeedDataService.GetSoundVelocity(
+ _materialName, Convert.ToInt32(_pipeDiameter)
+ );
SoundSpeed = soundVelocity.ToString();
}
diff --git a/Correlator/DataService/SerialPortServiceImpl.cs b/Correlator/DataService/SerialPortServiceImpl.cs
index a01d4d1..0a7e32f 100644
--- a/Correlator/DataService/SerialPortServiceImpl.cs
+++ b/Correlator/DataService/SerialPortServiceImpl.cs
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
using System.IO.Ports;
using System.Text;
using System.Threading;
@@ -30,170 +29,170 @@
_eventAggregator = eventAggregator;
_audioService = audioService;
Sp.DataReceived += DataReceivedFromSerialPort;
+ Sp.ErrorReceived += ErrorFromSerialPort;
}
+ ///
+ /// 串口数据
+ ///
+ ///
+ ///
private void DataReceivedFromSerialPort(object sender, SerialDataReceivedEventArgs args)
{
- var strResult = "";
- var receiveData = GetRequestInfo(ref strResult);
-
- if (receiveData != null)
+ while (Sp.BytesToRead < 4)
{
- // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receiveData).Replace("-", ""));
+ return;
+ }
- var deviceIdBytes = new byte[6];
- Array.Copy(receiveData, 4, deviceIdBytes, 0, 6);
- var deviceId = deviceIdBytes.ConvertToString();
+ var headerBuff = new byte[2];
+ Sp.Read(headerBuff, 0, 2); //读取数据
+ if (headerBuff[0] != 0xA3 || headerBuff[1] != 0x20) //符合规范
+ {
+ return;
+ }
- var pduTypeBytes = new byte[2];
- Array.Copy(receiveData, 13, pduTypeBytes, 0, 2);
+ var lengthBuffer = new byte[2];
+ Sp.Read(lengthBuffer, 0, 2);
+ var length = lengthBuffer.ConvertToInt();
- var tagBytes = new byte[receiveData.Length - 18];
- Array.Copy(receiveData, 16, tagBytes, 0, receiveData.Length - 18);
- var tags = tagBytes.GetTags();
-
- //根据数据长度判断数据类型
- switch (receiveData.Length)
- {
- case 32: //设备状态、电量
- var cellTag = tags.GetCellTag();
- if (cellTag != null)
- {
- _devStatus.Cell = cellTag.Cell;
- }
-
- var sensorExceptionTag = tags.GetSensorExceptionTag();
- if (sensorExceptionTag != null)
- {
- _devStatus.Status = sensorExceptionTag.State;
- }
-
- //发送消息更新界面
- if (deviceId.Equals(DevCode.Dev1))
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
- else
- {
- _eventAggregator.GetEvent().Publish(_devStatus);
- }
-
- break;
- case 11293: //数据采集
- if (!RuntimeCache.IsHydrophone)
- {
- HandleCorrelatorData(deviceId, tags);
- }
-
- break;
- case 30:
- if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
- {
- Application.Current.Dispatcher.Invoke(delegate
- {
- //显示点名弹窗
- if (!RuntimeCache.IsShowing)
- {
- //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
- _eventAggregator.GetEvent().Publish();
- RuntimeCache.IsShowing = true;
- }
- });
- }
-
- break;
- case 22543:
- if (receiveData[0] == 0xA3 && receiveData[1] == 0x20)
- {
- int index = receiveData[15];
- //取出seq,确定收到的是第几包数据
- RuntimeCache.SeqCaches.Add(index);
-
- var response = BitConverter.ToString(receiveData).Replace("-", "");
- //收集数据
- if (deviceId.Equals(DevCode.Dev1))
- {
- //原始数据
- RuntimeCache.RedSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.RedSensorResponseTags.Add(index, tags);
- }
- else
- {
- //原始数据
- RuntimeCache.BlueSensorOriginalResp.Add(index, response);
- //解析之后的数据
- RuntimeCache.BlueSensorResponseTags.Add(index, tags);
- }
- }
-
- break;
- case 15024: //听音
- HandleListenData(tags);
- break;
- default:
- Console.WriteLine($@"SerialPortServiceImpl => {receiveData.Length}");
- break;
- }
+ if (length < 12)
+ {
+ Sp.DiscardInBuffer(); //长度数据不符合,丢弃
+ "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
}
else
{
- "SerialPortServiceImpl".WriteLog("接收数据存在问题");
+ while (Sp.BytesToRead < length + 2) //数据不够,要等待
+ {
+ Thread.Sleep(20);
+ }
+
+ var 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);
+
+ HandleSerialPortBytes(result);
}
}
- private byte[] GetRequestInfo(ref string strResult)
+ ///
+ /// 错误数据
+ ///
+ ///
+ ///
+ private void ErrorFromSerialPort(object sender, SerialErrorReceivedEventArgs e)
{
- try
- {
- while (Sp.BytesToRead < 4) Thread.Sleep(5);
- var headerBuff = new byte[2];
- Sp.Read(headerBuff, 0, 2); //读取数据
- if (headerBuff[0] == 0xA3 && headerBuff[1] == 0x20) //符合规范
- {
- var lengthBuffer = new byte[2];
- Sp.Read(lengthBuffer, 0, 2);
- var length = lengthBuffer.ConvertToInt();
+ Console.WriteLine(@"ErrorFromSerialPort => 错误数据");
+ }
- if (length < 12)
+ ///
+ /// 处理串口发过来的数据
+ ///
+ ///
+ private void HandleSerialPortBytes(byte[] receivedData)
+ {
+ // "SerialPortServiceImpl".WriteLog("接收到的数据:" + BitConverter.ToString(receivedData));
+
+ var versionByte = new byte[1];
+ Array.Copy(receivedData, 1, versionByte, 0, 1);
+ var value = BitConverter.ToString(versionByte);
+ //版本分两部分,高半字代表版本的整数部分,低半字代表版本的小数部分,比如:0X20==V2.0
+ var high = short.Parse(value) / 10;
+ var low = short.Parse(value) % 10;
+ var version = $"{high}.{low}";
+ // Console.WriteLine($@"协议版本 => {version}");
+
+ var deviceIdBytes = new byte[6];
+ Array.Copy(receivedData, 4, deviceIdBytes, 0, 6);
+ var deviceId = BitConverter.ToString(deviceIdBytes).Replace("-", "");
+ // Console.WriteLine($@"设备ID => {deviceId}");
+
+ var tagBytes = new byte[receivedData.Length - 18];
+ Array.Copy(receivedData, 16, tagBytes, 0, receivedData.Length - 18);
+ var tags = tagBytes.GetTags();
+ // Console.WriteLine($@"Tag数量 => {tags.Count}");
+
+ switch (receivedData.Length)
+ {
+ case 32: //设备状态、电量
+ var cellTag = tags.GetCellTag();
+ if (cellTag != null)
{
- Sp.DiscardInBuffer(); //长度数据不符合,丢弃
- "SerialPortServiceImpl".WriteLog("上传数组长度不够,丢弃数据");
- return null;
+ _devStatus.Cell = cellTag.Cell;
}
- while (Sp.BytesToRead < length + 2) Thread.Sleep(20); //数据不够,要等待
-
- var 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);
- return result;
- }
- else
- {
- Thread.Sleep(10);
- var str = Encoding.UTF8.GetString(headerBuff) + Sp.ReadExisting();
- if (str != "" && str.Contains("\r\n"))
+ var sensorExceptionTag = tags.GetSensorExceptionTag();
+ if (sensorExceptionTag != null)
{
- strResult = str;
+ _devStatus.Status = sensorExceptionTag.State;
+ }
+
+ //发送消息更新界面
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
else
{
- Sp.DiscardInBuffer();
+ _eventAggregator.GetEvent().Publish(_devStatus);
}
- }
- return null;
- }
- catch (Exception ex)
- {
- "SerialPortServiceImpl".WriteLog($"错误:{ex.Message}");
- Thread.Sleep(2000);
- Process.GetCurrentProcess().Kill();
- return null;
+ break;
+ case 11293: //数据采集
+ if (!RuntimeCache.IsHydrophone)
+ {
+ HandleCorrelatorData(deviceId, tags);
+ }
+
+ break;
+ case 30:
+ if (RuntimeCache.IsHydrophone && RuntimeCache.CanCollectData)
+ {
+ Application.Current.Dispatcher.Invoke(delegate
+ {
+ //显示点名弹窗
+ if (!RuntimeCache.IsShowing)
+ {
+ //因为是广播发的数据,所以会收到两条回复,但是只需要显示一次对话框
+ _eventAggregator.GetEvent().Publish();
+ RuntimeCache.IsShowing = true;
+ }
+ });
+ }
+
+ break;
+ case 22543:
+ if (receivedData[0] == 0xA3 && receivedData[1] == 0x20)
+ {
+ int index = receivedData[15];
+ //取出seq,确定收到的是第几包数据
+ RuntimeCache.SeqCaches.Add(index);
+
+ var response = BitConverter.ToString(receivedData).Replace("-", "");
+ //收集数据
+ if (deviceId.Equals(DevCode.Dev1))
+ {
+ //原始数据
+ RuntimeCache.RedSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.RedSensorResponseTags.Add(index, tags);
+ }
+ else
+ {
+ //原始数据
+ RuntimeCache.BlueSensorOriginalResp.Add(index, response);
+ //解析之后的数据
+ RuntimeCache.BlueSensorResponseTags.Add(index, tags);
+ }
+ }
+
+ break;
+ case 15024: //听音
+ HandleListenData(tags);
+ break;
}
}
diff --git a/Correlator/Util/MethodExtensions.cs b/Correlator/Util/MethodExtensions.cs
index b7694e4..3452941 100644
--- a/Correlator/Util/MethodExtensions.cs
+++ b/Correlator/Util/MethodExtensions.cs
@@ -284,30 +284,35 @@
///
/// 字节数组转数据Tag集合
///
- ///
+ ///
///
- public static List GetTags(this byte[] strTags)
+ public static List GetTags(this byte[] tagBytes)
{
var tags = new List();
try
{
var i = 0;
- while (i < strTags.Length)
+ var n = 0;
+ while (i < tagBytes.Length)
{
- 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);
+ n++;
+ var oidBytes = new byte[4];
+ Array.Copy(tagBytes, i, oidBytes, 0, 4);
+ var oid = oidBytes.ConvertToString();
+
+ //value域的长度
+ var tagValueBytes = new byte[2];
+ Array.Copy(tagBytes, i + 4, tagValueBytes, 0, 2);
+ Array.Reverse(tagValueBytes);
+ int tagValueLength = BitConverter.ToInt16(tagValueBytes, 0);
+ Console.WriteLine($@"value域的长度 => {tagValueLength}");
- Array.Reverse(len);
- int iLen = BitConverter.ToInt16(len, 0);
- var strOid = oid.ConvertToString();
+ var valueBytes = new byte[tagValueLength];
+ Array.Copy(tagBytes, i + 6, valueBytes, 0, tagValueLength);
+ // Console.WriteLine($@"第{n}个Tag => {BitConverter.ToString(valueBytes)}");
- var value = new byte[iLen];
- Array.Copy(strTags, i + 6, value, 0, iLen);
-
- i = i + 6 + iLen;
- var tag = TagFactory.Create(strOid, iLen, value);
+ i = i + 6 + tagValueLength;
+ var tag = TagFactory.Create(oid, tagValueLength, valueBytes);
tags.Add(tag);
}
}
@@ -546,7 +551,7 @@
configModel.Pipe++;
configModel.LocateTimes++;
manager.Insert(configModel);
-
+
//清空缓存
RuntimeCache.SoundCaches.Clear();
}
diff --git a/Correlator/ViewModels/AudioFileViewModel.cs b/Correlator/ViewModels/AudioFileViewModel.cs
index f614c12..5c8b044 100644
--- a/Correlator/ViewModels/AudioFileViewModel.cs
+++ b/Correlator/ViewModels/AudioFileViewModel.cs
@@ -4,6 +4,7 @@
using System.Linq;
using System.Windows.Controls;
using System.Windows.Threading;
+using Correlator.DataService;
using Correlator.Model;
using Correlator.Util;
using HandyControl.Controls;
@@ -21,7 +22,6 @@
public string Title { get; private set; } = string.Empty;
public event Action RequestClose;
- private List _totalFiles;
private List _audioFiles;
@@ -108,7 +108,6 @@
#endregion
private AudioFile _selectedFile;
- private WaveOutEvent _waveOutEvent = new WaveOutEvent();
private AudioFileReader _audioFileReader;
private readonly DispatcherTimer _audioTimer = new DispatcherTimer
@@ -116,11 +115,11 @@
Interval = new TimeSpan(0, 0, 0, 1)
};
- public AudioFileViewModel(IDialogService dialogService)
+ public AudioFileViewModel(IAudioService audioService, IDialogService dialogService)
{
_audioTimer.Tick += delegate
{
- if (_waveOutEvent.PlaybackState == PlaybackState.Stopped)
+ if (audioService.Wave.PlaybackState == PlaybackState.Stopped)
{
_audioTimer.Stop();
AudioState = "未播放";
@@ -144,12 +143,6 @@
_audioFileReader = null;
}
- if (_waveOutEvent != null)
- {
- _waveOutEvent.Dispose();
- _waveOutEvent = null;
- }
-
RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
});
@@ -173,8 +166,9 @@
return;
}
- if (_waveOutEvent.PlaybackState == PlaybackState.Playing)
+ if (audioService.Wave.PlaybackState == PlaybackState.Playing)
{
+ audioService.Wave.Stop();
DisposeResource("已暂停");
}
else
@@ -186,8 +180,8 @@
Max = (int)_audioFileReader.TotalTime.TotalSeconds;
AudioState = $"时长:{_max}s";
- _waveOutEvent.Init(_audioFileReader);
- _waveOutEvent.Play();
+ audioService.Wave.Init(_audioFileReader);
+ audioService.Wave.Play();
}
catch (FormatException)
{
@@ -215,7 +209,7 @@
return;
}
- if (_waveOutEvent.PlaybackState == PlaybackState.Playing)
+ if (audioService.Wave.PlaybackState == PlaybackState.Playing)
{
dialogService.ShowDialog(
"AlertMessageDialog",
@@ -233,11 +227,10 @@
File.Delete(_selectedFile.FullPath);
//刷新数据
- _totalFiles = GetTotalAudioFiles();
- MaxPage = _totalFiles.Count.GetPageSize();
- //页码重置
+ var totalFiles = GetTotalAudioFiles();
+ MaxPage = totalFiles.Count.GetPageSize();
PageIndex = 1;
- AudioFiles = _totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
+ AudioFiles = totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
}
catch (IOException)
{
@@ -247,7 +240,7 @@
PageUpdatedCmd = new DelegateCommand>(args =>
{
- AudioFiles = _totalFiles
+ AudioFiles = GetTotalAudioFiles()
.Skip((args.Info - 1) * RuntimeCache.PerPageItemCount)
.Take(RuntimeCache.PerPageItemCount)
.ToList();
@@ -256,7 +249,6 @@
private void DisposeResource(string message)
{
- _waveOutEvent?.Dispose();
_audioFileReader?.Dispose();
_audioTimer?.Stop();
AudioState = message;
@@ -273,9 +265,9 @@
public void OnDialogOpened(IDialogParameters parameters)
{
- _totalFiles = GetTotalAudioFiles();
- MaxPage = _totalFiles.Count.GetPageSize();
- AudioFiles = _totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
+ var totalFiles = GetTotalAudioFiles();
+ MaxPage = totalFiles.Count.GetPageSize();
+ AudioFiles = totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
}
private static List GetTotalAudioFiles()
diff --git a/Correlator/ViewModels/MainWindowViewModel.cs b/Correlator/ViewModels/MainWindowViewModel.cs
index 91e77ea..dce24b5 100644
--- a/Correlator/ViewModels/MainWindowViewModel.cs
+++ b/Correlator/ViewModels/MainWindowViewModel.cs
@@ -817,7 +817,7 @@
{
File.Delete(file);
}
-
+
RuntimeCache.SmallAudioFiles.Clear();
_mainWindow.Close();
}
@@ -833,13 +833,13 @@
//查看图片列表
OpenImageFileCommand = new DelegateCommand(delegate
{
- _dialogService.ShowDialog("PictureFileView", null, delegate { });
+ _dialogService.Show("PictureFileView", null, delegate { });
});
//查看音频列表
OpenAudioFileCommand = new DelegateCommand(delegate
{
- _dialogService.ShowDialog("AudioFileView", null, delegate { });
+ _dialogService.Show("AudioFileView", null, delegate { });
});
//打开听音
@@ -879,7 +879,7 @@
return;
}
- _dialogService.ShowDialog("SoundSpeedDialog",
+ _dialogService.Show("SoundSpeedDialog",
new DialogParameters { { "MaterialName", _materialName } },
delegate { });
});
@@ -889,7 +889,7 @@
{
if (RuntimeCache.IsHydrophone)
{
- _dialogService.ShowDialog("ImportResponseDialog", null, delegate(IDialogResult result)
+ _dialogService.Show("ImportResponseDialog", null, delegate(IDialogResult result)
{
if (result.Result == ButtonResult.Cancel)
{
@@ -914,9 +914,11 @@
PipeLength = configModel.PipeLength;
LowFrequency = configModel.MinFrequency;
HighFrequency = configModel.MaxFrequency;
-
+
//计算声速
- var soundVelocity = _soundSpeedDataService.GetSoundVelocity(_materialName, Convert.ToInt32(_pipeDiameter));
+ var soundVelocity = _soundSpeedDataService.GetSoundVelocity(
+ _materialName, Convert.ToInt32(_pipeDiameter)
+ );
SoundSpeed = soundVelocity.ToString();
}
diff --git a/Correlator/ViewModels/PictureFileViewModel.cs b/Correlator/ViewModels/PictureFileViewModel.cs
index 74f86fd..897753b 100644
--- a/Correlator/ViewModels/PictureFileViewModel.cs
+++ b/Correlator/ViewModels/PictureFileViewModel.cs
@@ -19,7 +19,6 @@
public string Title { get; private set; } = string.Empty;
public event Action RequestClose;
- private List _totalFiles;
private List _pictureFiles;
public List PictureFiles
@@ -114,11 +113,10 @@
File.Delete(_selectedFile.FullPath);
//刷新数据
- _totalFiles = GetTotalPictureFiles();
- MaxPage = _totalFiles.Count.GetPageSize();
- //页码重置
+ var totalFiles = GetTotalPictureFiles();
+ MaxPage = totalFiles.Count.GetPageSize();
PageIndex = 1;
- PictureFiles = _totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
+ PictureFiles = totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
}
catch (IOException)
{
@@ -128,7 +126,7 @@
PageUpdatedCmd = new DelegateCommand>(args =>
{
- PictureFiles = _totalFiles
+ PictureFiles = GetTotalPictureFiles()
.Skip((args.Info - 1) * RuntimeCache.PerPageItemCount)
.Take(RuntimeCache.PerPageItemCount)
.ToList();
@@ -146,9 +144,9 @@
public void OnDialogOpened(IDialogParameters parameters)
{
- _totalFiles = GetTotalPictureFiles();
- MaxPage = _totalFiles.Count.GetPageSize();
- PictureFiles = _totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
+ var totalFiles = GetTotalPictureFiles();
+ MaxPage = totalFiles.Count.GetPageSize();
+ PictureFiles = totalFiles.Take(RuntimeCache.PerPageItemCount).ToList();
}
private static List GetTotalPictureFiles()