CAN修复
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user