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 方法使用递归方式遍历节点树并输出节点名称和深度。