mirror of
				https://gitee.com/ThingsGateway/ThingsGateway.git
				synced 2025-10-31 15:43:59 +08:00 
			
		
		
		
	opcda/ua浏览地址空间 初始只加载首层节点
This commit is contained in:
		| @@ -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) | ||||
|                 { | ||||
|                     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); | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -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); | ||||
|                 } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Kimdiego2098
					Kimdiego2098