You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#开发OPC UA服务器:如何自定义添加节点?

在OPC UA .NET服务器中添加自定义数据节点的实现方法

核心步骤说明

要添加"hello world"这类自定义数据节点,需先构建变量节点的元数据,再通过AddNodes方法将节点注册到服务器地址空间。关键是正确配置节点的NodeId、BrowseName、DisplayName及数据类型等核心属性。

完整示例代码

以下代码可直接插入到服务器初始化完成后的逻辑中(比如原示例的StartServer方法末尾):

using Opc.Ua;
using Opc.Ua.Server;

// 假设_server是你的OPC UA服务器实例
// 1. 定义自定义变量节点的属性集合
var nodeAttributes = new VariableAttributes
{
    DisplayName = new LocalizedText("en-US", "HelloWorldVariable"),
    BrowseName = new QualifiedName("HelloWorldVariable", NamespaceIndex), // 替换为你的服务器命名空间索引
    DataType = DataTypeIds.String,
    Value = new Variant("Hello World!"),
    AccessLevel = AccessLevels.CurrentRead | AccessLevels.CurrentWrite,
    UserAccessLevel = AccessLevels.CurrentRead | AccessLevels.CurrentWrite,
    Historizing = false
};

// 2. 构建添加节点的请求模板
var nodeTemplate = new AddNodesItem
{
    ParentNodeId = ObjectIds.ObjectsFolder, // 节点挂载到根Objects文件夹
    ReferenceTypeId = ReferenceTypes.Organizes,
    RequestedNewNodeId = new NodeId("HelloWorldVariable", NamespaceIndex), // 自定义节点ID
    BrowseName = new QualifiedName("HelloWorldVariable", NamespaceIndex),
    NodeClass = NodeClass.Variable,
    NodeAttributes = nodeAttributes,
    TypeDefinitionId = VariableTypeIds.BaseDataVariableType
};

// 3. 执行添加节点操作
var addNodesResults = _server.AddNodes(null, new AddNodesRequest { NodesToAdd = new[] { nodeTemplate } });

// 4. 验证添加结果
if (addNodesResults.Results[0].StatusCode == StatusCodes.Good)
{
    Console.WriteLine("自定义节点添加成功");
}
else
{
    Console.WriteLine($"节点添加失败: {addNodesResults.Results[0].StatusCode}");
}

关键注意事项

  • 命名空间索引:替换代码中的NamespaceIndex为你的服务器自定义命名空间索引(通常在原示例的服务器配置中为1)。
  • 节点挂载位置:示例将节点挂载到ObjectsFolder根目录,若需挂载到其他节点,修改ParentNodeId即可。
  • 数据类型适配:若添加其他类型节点,只需修改DataType(如DataTypeIds.Int32)和Value的对应值。

内容的提问来源于stack exchange,提问作者Choi0310

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:00:36