feat: 为多个服务添加日志记录功能并改进批量导入变量处理

- 为OpcUaServiceManager添加日志记录功能,并实现OnBatchImportVariables事件处理器
  - 为OpcUaService添加全面的日志记录,包括连接、断开、读写节点等操作
  - 为DataEventService添加日志记录功能,跟踪数据加载和变量值变更事件
  - 为S7ServiceManager添加OnBatchImportVariables事件处理器,处理批量导入变量事件
  - 在VariableTableViewModel中改进变量添加逻辑,确保变量被正确添加到数据存储中
  - 在VariableManagementService中完善变量表信息的填充逻辑
This commit is contained in:
2025-10-02 11:26:50 +08:00
parent 078d7b3903
commit 6e9f7c4a44
6 changed files with 350 additions and 20 deletions

View File

@@ -46,6 +46,7 @@ namespace DMS.Infrastructure.Services.S7
_semaphore = new SemaphoreSlim(10, 10); // 默认最大并发连接数为10
_eventService.OnVariableActiveChanged += OnVariableActiveChanged;
_eventService.OnBatchImportVariables += OnBatchImportVariables;
}
private void OnVariableActiveChanged(object? sender, VariablesActiveChangedEventArgs e)
@@ -360,6 +361,52 @@ namespace DMS.Infrastructure.Services.S7
_logger.LogInformation("S7服务管理器资源已释放");
}
}
/// <summary>
/// 处理批量导入变量事件
/// </summary>
private void OnBatchImportVariables(object? sender, BatchImportVariablesEventArgs e)
{
if (e?.Variables == null || !e.Variables.Any())
{
_logger.LogWarning("OnBatchImportVariables: 接收到空变量列表");
return;
}
try
{
_logger.LogInformation("处理批量导入变量事件,共 {Count} 个变量", e.Count);
// 更新相关设备的变量表
var deviceIds = e.Variables.Select(v => v.VariableTable.DeviceId).Distinct();
foreach (var deviceId in deviceIds)
{
// 获取设备的变量表信息
var variablesForDevice = e.Variables.Where(v => v.VariableTable.DeviceId == deviceId).ToList();
if (variablesForDevice.Any())
{
// 更新设备上下文中的变量
if (_deviceContexts.TryGetValue(deviceId, out var context))
{
// 将新导入的变量添加到设备上下文
foreach (var variable in variablesForDevice)
{
if (!context.Variables.ContainsKey(variable.S7Address))
{
context.Variables.AddOrUpdate(variable.S7Address, variable, (key, oldValue) => variable);
}
}
}
}
}
_logger.LogInformation("批量导入变量事件处理完成,更新了 {DeviceCount} 个设备的变量信息", deviceIds.Count());
}
catch (Exception ex)
{
_logger.LogError(ex, "处理批量导入变量事件时发生错误");
}
}
}
/// <summary>