C# opcua浏览节点树代码

332浏览 · 2023-07-12 16:43:32
以下是使用 C# 编写的 OPC UA 客户端代码,可用于连接 OPC UA 服务器并浏览节点树: ```csharp using Opc.Ua; using Opc.Ua.Client; using System; namespace OpcUaClient class Program static void Main(string[] args) // 创建一个 OPC UA 客户端实例 var client = new OpcClient(); // 连接到 OPC UA 服务器 client.Connect("opc.tcp://localhost:4840"); // 获取根节点 var rootNode = client.BrowseNode(Objects.RootFolder); // 浏览节点树 BrowseNode(rootNode); // 断开连接 client.Disconnect(); Console.ReadLine(); static void BrowseNode(Node node, int depth = 0) Console.WriteLine($"{new string(' ', depth)}{node.DisplayName}"); // 如果节点有子节点,则递归浏览子节点 if (node.NodeClass == NodeClass.Object || node.NodeClass == NodeClass.View) var childNodes = node.GetChildren(); foreach (var childNode in childNodes) BrowseNode(childNode, depth + 2); // OPC UA 客户端类 class OpcClient private Session session; // 连接到 OPC UA 服务器 public void Connect(string endpointUrl) var endpoint = new ConfiguredEndpoint(null, new EndpointDescription(endpointUrl)); var session = Session.Create( new SessionCreationData( null, null, null, endpoint, false, null, session.ReturnDiagnostics = DiagnosticsMasks.All; // 打开会话 session.Open(); this.session = session; // 获取节点 public Node BrowseNode(NodeId nodeId) var node = this.session.NodeCache.Find(nodeId) ?? session.ReadNode(nodeId); return node; // 断开连接 public void Disconnect() this.session.Close(); this.session.Dispose(); 这段代码使用 OPC UA 的 NuGet 包 Opc.Ua 和 Opc.Ua.Client。在代码中,我们创建了一个 OpcClient 类用于连接到 OPC UA 服务器。在 Main 方法中,我们连接到 OPC UA 服务器,获取根节点,然后调用 BrowseNode 方法来浏览节点树。BrowseNode 方法使用递归方式遍历节点树并输出节点名称和深度。