CAN优化
This commit is contained in:
@@ -111,10 +111,10 @@ namespace MonitorModule.ViewModels.Dialogs
|
||||
}
|
||||
|
||||
// 2. 发现设备方法信号并加入 ValueLimitList / DeviceSingleList
|
||||
foreach (var signal in DiscoverDeviceSignals())
|
||||
foreach (var (displayName, fingerprint, methodName) in DiscoverDeviceSignals())
|
||||
{
|
||||
//DeviceSingleList.Add(signal);
|
||||
EnsureValueLimit(signal);
|
||||
//DeviceSingleList.Add(displayName);
|
||||
EnsureValueLimit(fingerprint, displayName, displayName, methodName);
|
||||
}
|
||||
|
||||
// 3. 发现 CAN 信号并加入 ValueLimitList / DeviceSingleList
|
||||
@@ -122,15 +122,15 @@ namespace MonitorModule.ViewModels.Dialogs
|
||||
{
|
||||
//DeviceSingleList.Add(displayName);
|
||||
_canSignalMap[displayName] = (fingerprint, methodName);
|
||||
EnsureValueLimit(displayName);
|
||||
EnsureValueLimit(fingerprint, displayName, displayName, methodName);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 发现当前作用域所有可监测的设备方法信号(与 MonitorViewModel 逻辑一致)。
|
||||
/// 返回 DisplayName 列表。
|
||||
/// 返回 (DisplayName, Fingerprint, MethodName) 列表。
|
||||
/// </summary>
|
||||
private IEnumerable<string> DiscoverDeviceSignals()
|
||||
private IEnumerable<(string DisplayName, string Fingerprint, string MethodName)> DiscoverDeviceSignals()
|
||||
{
|
||||
if (_deviceManager?.DeviceMap == null) yield break;
|
||||
|
||||
@@ -159,7 +159,7 @@ namespace MonitorModule.ViewModels.Dialogs
|
||||
string displayName = !string.IsNullOrEmpty(attr?.Description)
|
||||
? $"{deviceName}.{attr.Description}"
|
||||
: $"{deviceName}.{method.Name}";
|
||||
yield return displayName;
|
||||
yield return (displayName, fingerprint, method.Name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -191,12 +191,13 @@ namespace MonitorModule.ViewModels.Dialogs
|
||||
if (_systemConfig?.ConfigurationList == null) yield break;
|
||||
|
||||
var msgDb = _deviceManager.CANFD.DBCParser.MsgDatabase;
|
||||
string canDeviceFingerprint = _deviceManager.GetCanDeviceFingerprint();
|
||||
foreach (var cfg in _systemConfig.ConfigurationList)
|
||||
{
|
||||
if (string.IsNullOrEmpty(cfg.SignalName)) continue;
|
||||
if (cfg.Channel < 0 || cfg.Channel >= msgDb.Count) continue;
|
||||
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint((uint)cfg.Channel);
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(canDeviceFingerprint, (uint)cfg.Channel);
|
||||
string methodName = CANSignalBroadcaster.BuildMethodName((uint)cfg.MessageID, cfg.SignalName);
|
||||
string displayName = CANSignalBroadcaster.BuildDisplayName(cfg.MessageName, cfg.SignalName);
|
||||
|
||||
@@ -224,13 +225,16 @@ namespace MonitorModule.ViewModels.Dialogs
|
||||
/// <summary>
|
||||
/// 确保 ValueLimitList 中存在指定信号;不存在则添加默认值。
|
||||
/// </summary>
|
||||
private void EnsureValueLimit(string signalName)
|
||||
private void EnsureValueLimit(string fingerprint, string displayName, string signalName, string methodName = "")
|
||||
{
|
||||
if (ValueLimitList.Any(x => x.SignalName == signalName)) return;
|
||||
|
||||
ValueLimitList.Add(new ValueLimitVM
|
||||
{
|
||||
DisplayName = displayName,
|
||||
Fingerprint = fingerprint,
|
||||
SignalName = signalName,
|
||||
MethodName = methodName,
|
||||
Upper = 9999,
|
||||
Lower = -9999,
|
||||
UpperExtreme = 9999,
|
||||
@@ -323,7 +327,8 @@ namespace MonitorModule.ViewModels.Dialogs
|
||||
var msgDb = _deviceManager.CANFD.DBCParser.MsgDatabase;
|
||||
if (channel < 0 || channel >= msgDb.Count) return;
|
||||
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(args.Channel);
|
||||
string canDeviceFingerprint = _deviceManager.GetCanDeviceFingerprint();
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(canDeviceFingerprint, args.Channel);
|
||||
|
||||
// 1. 移除该通道中已失效的 CAN 信号限制项
|
||||
var staleSignals = _canSignalMap
|
||||
@@ -353,7 +358,7 @@ namespace MonitorModule.ViewModels.Dialogs
|
||||
_canSignalMap[displayName] = (fingerprint, methodName);
|
||||
//if (!DeviceSingleList.Contains(displayName))
|
||||
// DeviceSingleList.Add(displayName);
|
||||
EnsureValueLimit(displayName);
|
||||
EnsureValueLimit(fingerprint, displayName, displayName, methodName);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -366,7 +371,8 @@ namespace MonitorModule.ViewModels.Dialogs
|
||||
{
|
||||
if (args.Scope != _systemConfig?.Title) return;
|
||||
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(args.Channel);
|
||||
string canDeviceFingerprint = _deviceManager.GetCanDeviceFingerprint();
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(canDeviceFingerprint, args.Channel);
|
||||
var toRemove = _canSignalMap
|
||||
.Where(kvp => kvp.Value.Fingerprint == fingerprint)
|
||||
.Select(kvp => kvp.Key)
|
||||
|
||||
@@ -556,7 +556,8 @@ namespace MonitorModule.ViewModels
|
||||
{
|
||||
if (_systemConfig?.ConfigurationList == null) return;
|
||||
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(channel);
|
||||
string canDeviceFingerprint = _deviceManager?.GetCanDeviceFingerprint() ?? string.Empty;
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(canDeviceFingerprint, channel);
|
||||
var configs = _systemConfig.ConfigurationList.Where(c => c.Channel == (int)channel).ToList();
|
||||
bool changed = false;
|
||||
|
||||
@@ -650,7 +651,8 @@ namespace MonitorModule.ViewModels
|
||||
{
|
||||
if (args.Scope != TestStatus) return;
|
||||
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(args.Channel);
|
||||
string canDeviceFingerprint = _deviceManager?.GetCanDeviceFingerprint() ?? string.Empty;
|
||||
string fingerprint = CANSignalBroadcaster.BuildFingerprint(canDeviceFingerprint, args.Channel);
|
||||
|
||||
// 从 AvailableMethods 中移除
|
||||
var toRemoveMethods = AvailableMethods.Where(m => m.Fingerprint == fingerprint).ToList();
|
||||
|
||||
Reference in New Issue
Block a user