opcda/ua浏览地址空间 初始只加载首层节点
This commit is contained in:
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user