diff --git a/CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs b/CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs
index edb98b5..2e4fbc6 100644
--- a/CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs
+++ b/CapMachine.Wpf/CanDrive/CanFD/ToomossCanFD.cs
@@ -611,6 +611,7 @@ namespace CapMachine.Wpf.CanDrive
catch (TaskCanceledException)
{
// 任务被取消,正常退出
+ IsSendOk = false;
break;
}
catch (Exception ex)
@@ -618,6 +619,7 @@ namespace CapMachine.Wpf.CanDrive
LogService.Error(ex.Message);
Console.WriteLine($"CAN周期发送异常: {ex.Message}");
// 短暂暂停避免异常情况下CPU占用过高
+ IsSendOk = false;
await Task.Delay(10, token);
}
}
@@ -629,11 +631,13 @@ namespace CapMachine.Wpf.CanDrive
LogService.Error(ex.Message);
// 清理其他可能的资源
Console.WriteLine("CAN周期发送任务已结束,资源已清理");
+ IsSendOk = false;
}
finally
{
// 确保在任何情况下(正常退出、异常、取消)都会停止计时器
Stopwatcher.Stop();
+ IsSendOk = false;
}
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
@@ -739,6 +743,25 @@ namespace CapMachine.Wpf.CanDrive
}
}
+
+ private bool _IsReviceOk;
+ ///
+ /// 接收报文是否OK
+ ///
+ public bool IsReviceOk
+ {
+ get { return _IsReviceOk; }
+ set
+ {
+ if (_IsReviceOk != value)
+ {
+ RaisePropertyChanged();
+ _IsReviceOk = value;
+ }
+ }
+ }
+
+
///
/// 要发送的数据
///
@@ -763,6 +786,7 @@ namespace CapMachine.Wpf.CanDrive
int CanNum = USB2CANFD.CANFD_GetMsg(DevHandle, ReadCANIndex, msgPtRead, CanMsgBuffer.Length);
if (CanNum > 0)
{
+ IsReviceOk = true;
Console.WriteLine("Read CanMsgNum = {0}", CanNum);
for (int i = 0; i < CanNum; i++)
{
@@ -787,10 +811,12 @@ namespace CapMachine.Wpf.CanDrive
}
else if (CanNum == 0)
{
+ IsReviceOk = false;
Console.WriteLine("No CAN data!");
}
else
{
+ IsReviceOk = false;
Console.WriteLine("Get CAN data error!");
}
Console.WriteLine("");
@@ -826,6 +852,7 @@ namespace CapMachine.Wpf.CanDrive
}
catch (Exception ex)
{
+ IsReviceOk = false;
LogService.Error(ex.Message);
//LogService.Info($"时间:{DateTime.Now.ToString()}-【Meter】-{ex.Message}");
}
diff --git a/CapMachine.Wpf/CanDrive/ToomossCan.cs b/CapMachine.Wpf/CanDrive/ToomossCan.cs
index 153e1f2..6b9082f 100644
--- a/CapMachine.Wpf/CanDrive/ToomossCan.cs
+++ b/CapMachine.Wpf/CanDrive/ToomossCan.cs
@@ -1,6 +1,7 @@
using CapMachine.Wpf.Models.Tag;
using CapMachine.Wpf.Services;
using HslCommunication;
+using NLog;
using NPOI.OpenXmlFormats.Wordprocessing;
using Prism.Ioc;
using Prism.Mvvm;
@@ -33,7 +34,8 @@ namespace CapMachine.Wpf.CanDrive
{
ContainerProvider = containerProvider;
HighSpeedDataService = ContainerProvider.Resolve();
-
+ LoggerService = ContainerProvider.Resolve();
+
//Stopwatch.Frequency表示高精度计时器每秒的计数次数(ticks/秒)每毫秒的ticks数 = 每秒的ticks数 ÷ 1000
TicksPerMs = Stopwatch.Frequency / 1000.0;
}
@@ -57,6 +59,11 @@ namespace CapMachine.Wpf.CanDrive
///
public HighSpeedDataService HighSpeedDataService { get; set; }
+ ///
+ /// Logger 实例
+ ///
+ public ILogService LoggerService { get; set; }
+
///
/// 开始Dbc文件写入
///
@@ -501,6 +508,23 @@ namespace CapMachine.Wpf.CanDrive
}
}
+ private bool _IsReviceOk;
+ ///
+ /// 接收报文是否OK
+ ///
+ public bool IsReviceOk
+ {
+ get { return _IsReviceOk; }
+ set
+ {
+ if (_IsReviceOk != value)
+ {
+ RaisePropertyChanged();
+ _IsReviceOk = value;
+ }
+ }
+ }
+
///
/// 要发送的数据
///
@@ -653,6 +677,7 @@ namespace CapMachine.Wpf.CanDrive
// 严重延迟,重新校准
NextExecutionTime = Stopwatcher.ElapsedTicks;
Console.WriteLine("定时发送延迟过大,重新校准时间");
+ LoggerService.Info($"定时发送延迟过大,重新校准时间");
}
// 使用Stopwatch记录实际的执行间隔,而不是DateTime
@@ -711,14 +736,19 @@ namespace CapMachine.Wpf.CanDrive
}
catch (TaskCanceledException)
{
+ LoggerService.Info($"精确周期发送CAN数据-任务被取消,正常退出");
// 任务被取消,正常退出
+ IsSendOk = false;
break;
}
catch (Exception ex)
{
Console.WriteLine($"CAN周期发送异常: {ex.Message}");
// 短暂暂停避免异常情况下CPU占用过高
+ IsSendOk = false;
await Task.Delay(10, token);
+
+ LoggerService.Info($"精确周期发送CAN数据-{ex.Message}");
}
}
}
@@ -726,17 +756,21 @@ namespace CapMachine.Wpf.CanDrive
{
// 确保在任何情况下(正常退出、异常、取消)都会停止计时器
Stopwatcher.Stop();
-
+ LoggerService.Info($"精确周期发送CAN数据-{ex.Message}");
// 清理其他可能的资源
Console.WriteLine("CAN周期发送任务已结束,资源已清理");
+ IsSendOk = false;
}
finally
{
// 确保在任何情况下(正常退出、异常、取消)都会停止计时器
Stopwatcher.Stop();
+ LoggerService.Info("精确周期发送CAN数据-正常退出、异常、取消)都会停止计时器");
+ IsSendOk = false;
}
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default);
+
}
@@ -771,6 +805,7 @@ namespace CapMachine.Wpf.CanDrive
int CanNum = USB2CAN.CAN_GetMsgWithSize(DevHandle, ReadCANIndex, msgPtRead, CanMsgBuffer.Length);
if (CanNum > 0)
{
+ IsReviceOk = true;
Console.WriteLine("Read CanMsgNum = {0}", CanNum);
for (int i = 0; i < CanNum; i++)
{
@@ -798,10 +833,12 @@ namespace CapMachine.Wpf.CanDrive
}
else if (CanNum == 0)
{
+ IsReviceOk=false;
Console.WriteLine("No CAN data!");
}
else
{
+ IsReviceOk = false;
Console.WriteLine("Get CAN data error!");
}
Console.WriteLine("");
@@ -839,7 +876,8 @@ namespace CapMachine.Wpf.CanDrive
}
catch (Exception ex)
{
- //LogService.Info($"时间:{DateTime.Now.ToString()}-【Meter】-{ex.Message}");
+ IsReviceOk = false;
+ LoggerService.Info("接收出现异常");
}
}
});
diff --git a/CapMachine.Wpf/LinDrive/ToomossLin.cs b/CapMachine.Wpf/LinDrive/ToomossLin.cs
index c5c1368..ca34c80 100644
--- a/CapMachine.Wpf/LinDrive/ToomossLin.cs
+++ b/CapMachine.Wpf/LinDrive/ToomossLin.cs
@@ -55,11 +55,18 @@ namespace CapMachine.Wpf.LinDrive
{
ContainerProvider = containerProvider;
HighSpeedDataService = ContainerProvider.Resolve();
+ LoggerService = ContainerProvider.Resolve();
+
//Stopwatch.Frequency表示高精度计时器每秒的计数次数(ticks/秒)每毫秒的ticks数 = 每秒的ticks数 ÷ 1000
TicksPerMs = Stopwatch.Frequency / 1000.0;
}
+ ///
+ /// Logger 实例
+ ///
+ public ILogService LoggerService { get; set; }
+
///
/// HighSpeedDataService 实例
///
@@ -359,10 +366,19 @@ namespace CapMachine.Wpf.LinDrive
LDFParser.LDF_GetSignalValueStr(LDFHandle, new StringBuilder(itemMsg.Key), new StringBuilder(itemSignal.SignalName), ReadValueStr);
itemSignal.SignalRtValueSb = ReadValueStr;
}
+ //报文给高速记录的服务
+ //HighSpeedDataService.AppendOrUpdateMsg(new Models.HighSpeed.CommMsg()
+ //{
+ // Category = "LIN",
+ // MsgInfo = "0x" + CanMsgBuffer[i].ID.ToString("X8"),
+ // MsgData = BitConverter.ToString(CanMsgBuffer[i].Data),
+ // Time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
+ //});
}
}
+ IsReviceOk= true;
//StringBuilder ValueStr = new StringBuilder(64);
//LDFParser.LDF_ExeFrameToBus(LDFHandle, new StringBuilder("ID_DATA"), 1);
@@ -376,7 +392,8 @@ namespace CapMachine.Wpf.LinDrive
}
catch (Exception ex)
{
- //LogService.Info($"时间:{DateTime.Now.ToString()}-【Meter】-{ex.Message}");
+ IsReviceOk = false;
+ LoggerService.Info($"{ex.Message}");
}
}
});
@@ -454,6 +471,23 @@ namespace CapMachine.Wpf.LinDrive
}
+ private bool _IsReviceOk;
+ ///
+ /// 接收报文是否OK
+ ///
+ public bool IsReviceOk
+ {
+ get { return _IsReviceOk; }
+ set
+ {
+ if (_IsReviceOk != value)
+ {
+ RaisePropertyChanged();
+ _IsReviceOk = value;
+ }
+ }
+ }
+
#region 精确发送报文数据
@@ -578,17 +612,19 @@ namespace CapMachine.Wpf.LinDrive
}
}
-
+ IsSendOk=true;
}
}
catch (TaskCanceledException)
{
+ IsSendOk = false;
// 任务被取消,正常退出
break;
}
catch (Exception ex)
{
+ IsSendOk = false;
Console.WriteLine($"LIN周期发送异常: {ex.Message}");
// 短暂暂停避免异常情况下CPU占用过高
await Task.Delay(10, token);
@@ -597,14 +633,16 @@ namespace CapMachine.Wpf.LinDrive
}
catch (Exception ex)
{
+ IsSendOk = false;
// 确保在任何情况下(正常退出、异常、取消)都会停止计时器
Stopwatcher.Stop();
-
+ LoggerService.Info("接收出现异常");
// 清理其他可能的资源
Console.WriteLine("LIN周期发送任务已结束,资源已清理");
}
finally
{
+ IsSendOk = false;
// 确保在任何情况下(正常退出、异常、取消)都会停止计时器
Stopwatcher.Stop();
}
diff --git a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
index 33a2c24..c5c2516 100644
--- a/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
+++ b/CapMachine.Wpf/ViewModels/CANConfigViewModel.cs
@@ -58,6 +58,29 @@ namespace CapMachine.Wpf.ViewModels
EventAggregator.GetEvent().Subscribe(LogicRuleChangeEventCall);
+ //数据波特率
+ DataBaudRateCbxItems = new ObservableCollection()
+ {
+ new CbxItems(){ Key="100000",Text="100 Kbps"},
+ new CbxItems(){ Key="125000",Text="125 Kbps"},
+ new CbxItems(){ Key="200000",Text="200 Kbps"},
+ new CbxItems(){ Key="250000",Text="250 Kbps"},
+ new CbxItems(){ Key="400000",Text="400 Kbps"},
+ new CbxItems(){ Key="500000",Text="500 Kbps"},
+ new CbxItems(){ Key="666000",Text="666 Kbps"},
+ new CbxItems(){ Key="800000",Text="800 Kbps"},
+ new CbxItems(){ Key="1000000",Text="1.0 Mbps"},
+
+ new CbxItems(){ Key="1500000",Text="1.5 Mbps"},
+ new CbxItems(){ Key="2000000",Text="2.0 Mbps"},
+ new CbxItems(){ Key="3000000",Text="3.0 Mbps"},
+ new CbxItems(){ Key="4000000",Text="4.0 Mbps"},
+ new CbxItems(){ Key="5000000",Text="5.0 Mbps"},
+ new CbxItems(){ Key="6700000",Text="6.7 Mbps"},
+ new CbxItems(){ Key="8000000",Text="8.0 Mbps"},
+ new CbxItems(){ Key="10000000",Text="10.0 Mbps"},
+ };
+
WriteNameCbxItems = new ObservableCollection()
{
new CbxItems(){ Key="转速",Text="转速"},
@@ -843,6 +866,16 @@ namespace CapMachine.Wpf.ViewModels
set { _SelectedCANConfigExdDto = value; RaisePropertyChanged(); }
}
+ private ObservableCollection _DataBaudRateCbxItems;
+ ///
+ /// CAN FD 数据波特率
+ ///
+ public ObservableCollection DataBaudRateCbxItems
+ {
+ get { return _DataBaudRateCbxItems; }
+ set { _DataBaudRateCbxItems = value; RaisePropertyChanged(); }
+ }
+
private DelegateCommand _CanOpCmd;
///
/// CAN操作的指令
diff --git a/CapMachine.Wpf/Views/CANConfigView.xaml b/CapMachine.Wpf/Views/CANConfigView.xaml
index 704c8d8..cbec289 100644
--- a/CapMachine.Wpf/Views/CANConfigView.xaml
+++ b/CapMachine.Wpf/Views/CANConfigView.xaml
@@ -406,7 +406,14 @@
FontSize="18"
Text="" />
-
+
+
@@ -574,6 +581,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CapMachine.Wpf/Views/CANFDConfigView.xaml b/CapMachine.Wpf/Views/CANFDConfigView.xaml
index 28032a4..d16fd1f 100644
--- a/CapMachine.Wpf/Views/CANFDConfigView.xaml
+++ b/CapMachine.Wpf/Views/CANFDConfigView.xaml
@@ -636,6 +636,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CapMachine.Wpf/Views/LINConfigView.xaml b/CapMachine.Wpf/Views/LINConfigView.xaml
index bec5411..778c8d1 100644
--- a/CapMachine.Wpf/Views/LINConfigView.xaml
+++ b/CapMachine.Wpf/Views/LINConfigView.xaml
@@ -573,6 +573,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+