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
相关产品推荐
相关产品推荐

