feat: 为多个服务添加日志记录功能并改进批量导入变量处理
- 为OpcUaServiceManager添加日志记录功能,并实现OnBatchImportVariables事件处理器 - 为OpcUaService添加全面的日志记录,包括连接、断开、读写节点等操作 - 为DataEventService添加日志记录功能,跟踪数据加载和变量值变更事件 - 为S7ServiceManager添加OnBatchImportVariables事件处理器,处理批量导入变量事件 - 在VariableTableViewModel中改进变量添加逻辑,确保变量被正确添加到数据存储中 - 在VariableManagementService中完善变量表信息的填充逻辑
This commit is contained in:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user