CAN修复

This commit is contained in:
“hsc”
2026-10-26 10:46:44 +08:00
parent e877dc9a90
commit 9cb139b208
12 changed files with 1462 additions and 167 deletions
+59 -8
View File
@@ -315,9 +315,10 @@ namespace CANModule.ViewModels
}
catch (Exception ex)
{
_dialogService.ShowDialog("MessageDialog", new DialogParameters
_dialogService.ShowDialog("MessageBox", new DialogParameters
{
{ "message", $"报文转换失败:{ex.Message}" }
{ "Message", $"报文转换失败:{ex.Message}" },
{ "ShowOk", true },
});
return;
}
@@ -343,16 +344,43 @@ namespace CANModule.ViewModels
private void SetAndSendMessage()
{
if (int.TryParse(CycleSendInterval, out int sendPeriod) && double.TryParse(SignalValue, out double SValue) && byte.TryParse(MessageSendChannel, out byte c))
if (!int.TryParse(CycleSendInterval, out int sendPeriod) ||
!double.TryParse(SignalValue, out double SValue) ||
!byte.TryParse(MessageSendChannel, out byte c))
{
channel = c;
var message = SelectedMessage.Split(']')[1];
var re = CAN.SetSignalValue(channel, message, SelectedSignal, SValue, IsDirectlySend, sendPeriod);
ShowMessage("发送参数无效:请检查发送周期、信号值和发送通道。");
return;
}
else
{
channel = c;
var parts = SelectedMessage.Split(']');
var message = parts.Length > 1 ? parts[1] : SelectedMessage;
try
{
var re = CAN.SetSignalValue(channel, message, SelectedSignal, SValue, IsDirectlySend, sendPeriod);
if (re != 0)
{
// -1 表示托管缓存里没有这条报文:DBC 没加载到该通道,或加载通道与发送通道不一致
ShowMessage(re == -1
? $"通道 {channel} 的 DBC 缓存中没有报文 [{message}],请先加载 DBC 并确认加载通道与发送通道一致。"
: $"发送报文失败,返回代码 {re}:{CAN.GetErrorDescription(re)}");
}
}
catch (Exception ex)
{
// 93(message not found in database) 等原生错误在这里提示,避免冒泡到全局异常处理器
ShowMessage(ex.Message);
}
}
/// <summary>统一的提示弹窗</summary>
private void ShowMessage(string message)
{
_dialogService.ShowDialog("MessageBox", new DialogParameters
{
{ "Message", message },
{ "ShowOk", true },
});
}
private void ReleaseTSMaster()
@@ -363,6 +391,29 @@ namespace CANModule.ViewModels
private void InitTSMaster()
{
var re = CAN.Init("ACP");
if (re != 0)
{
ShowMessage($"TSMaster 初始化失败,返回代码 {re}:{CAN.GetErrorDescription(re)}");
return;
}
// 驱动被释放后原生 DBC 数据库为空、托管缓存也已被清空,
// 这里按保存的自动加载列表把 DBC 重新下发,否则发送会得到 93
if (CAN.NeedReloadDbc) ReloadAutoDbc();
}
/// <summary>重新下发配置中保存的 DBC(驱动重启后调用)</summary>
private void ReloadAutoDbc()
{
foreach (var item in DBCAutoLoadList)
{
if (item.DBCChannel < 0 || item.DBCChannel >= 4) continue;
if (string.IsNullOrWhiteSpace(item.DBCFilePath) || !File.Exists(item.DBCFilePath)) continue;
var re = CAN.LoadDBC(item.DBCFilePath, new[] { item.DBCChannel }, out _);
if (re != 0)
ShowMessage($"DBC 重新加载失败(通道 {item.DBCChannel}):{item.DBCFilePath},返回代码 {re}");
}
}
private void UpLoadDBC()
{