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()
{
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 =>
{
if (string.IsNullOrEmpty(a.ItemName))
if (!a.IsItem || string.IsNullOrEmpty(a.ItemName))
{
return null;
}
@@ -132,7 +141,7 @@ public partial class ImportVariable
return data;
}
private List<OPCDATagModel> PopulateBranch(string sourceId)
private List<OPCDATagModel> PopulateBranch(string sourceId, bool isAll = false)
{
List<OPCDATagModel> nodes = new()
{
@@ -164,9 +173,13 @@ public partial class ImportVariable
Name = target.Name,
Tag = target
};
if (target.HasChildren)
{
child.Nodes = PopulateBranch(target.ItemName);
if (isAll)
child.Nodes = PopulateBranch(target.ItemName);
else
child.Nodes = new();
}
else
{
@@ -197,5 +210,21 @@ public partial class ImportVariable
internal string NodeId => (Tag?.ItemName)?.ToString();
internal List<OPCDATagModel> Nodes { get; set; } = new();
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();
//动态加载子项时,导出内容需要添加手动加载代码
foreach (var node in Selected)
foreach (var node in Selected.ToList())
{
List<OPCUATagModel> nodes = await PopulateBranchAsync((NodeId)node.NodeId, true);
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 =>
@@ -275,5 +275,23 @@ public partial class ImportVariable
internal string NodeId => (Tag.NodeId).ToString();
internal List<OPCUATagModel> Nodes { get; set; } = new();
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);
}
}
}
}