opcda/ua浏览地址空间 初始只加载首层节点

This commit is contained in:
Kimdiego2098
2023-08-27 14:14:47 +08:00
parent 1ccd704e30
commit d63dc3384b
2 changed files with 52 additions and 5 deletions

View File

@@ -68,9 +68,18 @@ public partial class ImportVariable
public (CollectDevice, List<DeviceVariable>) GetImportVariableList() public (CollectDevice, List<DeviceVariable>) GetImportVariableList()
{ {
var device = GetImportDevice(); var device = GetImportDevice();
//动态加载子项时,导出内容需要添加手动加载代码
foreach (var node in Selected.ToList())
{
var nodes = PopulateBranch(node.ItemName, true);
if (nodes.Count > 0)
{
Selected.AddRange(nodes.SelectMany(a => a.GetAllTags()).Select(a => a.Tag).Where(a => a != null).ToList());
}
}
var data = Selected.Select(a => var data = Selected.Select(a =>
{ {
if (string.IsNullOrEmpty(a.ItemName)) if (!a.IsItem || string.IsNullOrEmpty(a.ItemName))
{ {
return null; return null;
} }
@@ -132,7 +141,7 @@ public partial class ImportVariable
return data; return data;
} }
private List<OPCDATagModel> PopulateBranch(string sourceId) private List<OPCDATagModel> PopulateBranch(string sourceId, bool isAll = false)
{ {
List<OPCDATagModel> nodes = new() List<OPCDATagModel> nodes = new()
{ {
@@ -164,9 +173,13 @@ public partial class ImportVariable
Name = target.Name, Name = target.Name,
Tag = target Tag = target
}; };
if (target.HasChildren) if (target.HasChildren)
{ {
child.Nodes = PopulateBranch(target.ItemName); if (isAll)
child.Nodes = PopulateBranch(target.ItemName);
else
child.Nodes = new();
} }
else else
{ {
@@ -197,5 +210,21 @@ public partial class ImportVariable
internal string NodeId => (Tag?.ItemName)?.ToString(); internal string NodeId => (Tag?.ItemName)?.ToString();
internal List<OPCDATagModel> Nodes { get; set; } = new(); internal List<OPCDATagModel> Nodes { get; set; } = new();
internal BrowseElement Tag { get; set; } internal BrowseElement Tag { get; set; }
public List<OPCDATagModel> GetAllTags()
{
List<OPCDATagModel> allTags = new List<OPCDATagModel>();
GetAllTagsRecursive(this, allTags);
return allTags;
}
private void GetAllTagsRecursive(OPCDATagModel parentTag, List<OPCDATagModel> allTags)
{
allTags.Add(parentTag);
if (parentTag.Nodes != null)
foreach (OPCDATagModel childTag in parentTag.Nodes)
{
GetAllTagsRecursive(childTag, allTags);
}
}
} }
} }

View File

@@ -74,12 +74,12 @@ public partial class ImportVariable
{ {
var device = GetImportDevice(); var device = GetImportDevice();
//动态加载子项时,导出内容需要添加手动加载代码 //动态加载子项时,导出内容需要添加手动加载代码
foreach (var node in Selected) foreach (var node in Selected.ToList())
{ {
List<OPCUATagModel> nodes = await PopulateBranchAsync((NodeId)node.NodeId, true); List<OPCUATagModel> nodes = await PopulateBranchAsync((NodeId)node.NodeId, true);
if (nodes.Count > 0) if (nodes.Count > 0)
{ {
Selected.AddRange(nodes.Select(a => a.Tag).Where(a => a != null).ToList()); Selected.AddRange(nodes.SelectMany(a => a.GetAllTags()).Select(a => a.Tag).Where(a => a != null).ToList());
} }
} }
var data = (await SelectAsync(Selected, async a => var data = (await SelectAsync(Selected, async a =>
@@ -275,5 +275,23 @@ public partial class ImportVariable
internal string NodeId => (Tag.NodeId).ToString(); internal string NodeId => (Tag.NodeId).ToString();
internal List<OPCUATagModel> Nodes { get; set; } = new(); internal List<OPCUATagModel> Nodes { get; set; } = new();
internal ReferenceDescription Tag { get; set; } internal ReferenceDescription Tag { get; set; }
public List<OPCUATagModel> GetAllTags()
{
List<OPCUATagModel> allTags = new List<OPCUATagModel>();
GetAllTagsRecursive(this, allTags);
return allTags;
}
private void GetAllTagsRecursive(OPCUATagModel parentTag, List<OPCUATagModel> allTags)
{
allTags.Add(parentTag);
if (parentTag.Nodes != null)
foreach (OPCUATagModel childTag in parentTag.Nodes)
{
GetAllTagsRecursive(childTag, allTags);
}
}
} }
} }