CAN和LIN增加报文标记
This commit is contained in:
@@ -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<HighSpeedDataService>();
|
||||
|
||||
LoggerService = ContainerProvider.Resolve<ILogService>();
|
||||
|
||||
//Stopwatch.Frequency表示高精度计时器每秒的计数次数(ticks/秒)每毫秒的ticks数 = 每秒的ticks数 ÷ 1000
|
||||
TicksPerMs = Stopwatch.Frequency / 1000.0;
|
||||
}
|
||||
@@ -57,6 +59,11 @@ namespace CapMachine.Wpf.CanDrive
|
||||
/// </summary>
|
||||
public HighSpeedDataService HighSpeedDataService { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Logger 实例
|
||||
/// </summary>
|
||||
public ILogService LoggerService { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 开始Dbc文件写入
|
||||
/// </summary>
|
||||
@@ -501,6 +508,23 @@ namespace CapMachine.Wpf.CanDrive
|
||||
}
|
||||
}
|
||||
|
||||
private bool _IsReviceOk;
|
||||
/// <summary>
|
||||
/// 接收报文是否OK
|
||||
/// </summary>
|
||||
public bool IsReviceOk
|
||||
{
|
||||
get { return _IsReviceOk; }
|
||||
set
|
||||
{
|
||||
if (_IsReviceOk != value)
|
||||
{
|
||||
RaisePropertyChanged();
|
||||
_IsReviceOk = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 要发送的数据
|
||||
/// </summary>
|
||||
@@ -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("接收出现异常");
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user