如何在node-opcua服务端创建自定义Structure(ExtensionObject)节点
node-opcua 自定义结构体(ExtensionObject)节点创建解决方案
你的代码遗漏了两个必填核心环节,导致UA客户端无法识别自定义数据类型:
- 创建自定义结构体时未声明内部字段定义,服务端没有完整的结构体元数据
- 变量赋值未转换为OPC UA要求的ExtensionObject格式,类型和值无法匹配
修正后的完整实现代码如下:
// 1. 定义结构体的内部字段规范 const testStructDefinition = [ { name: "firstField", dataType: DataType.Int32 }, { name: "secondField", dataType: DataType.Int32 } ]; const structure = addressSpace.findDataType("Structure"); // 2. 创建自定义数据类型时传入字段定义 const dataType = namespace.createDataType({ browseName: "TestStruct", isAbstract: false, subtypeOf: structure.nodeId, definition: testStructDefinition // 必须传入字段定义生成元数据 }); // 3. 构造符合OPC UA规范的ExtensionObject值 const testParams = { firstField: 0, secondField : 0 }; const extensionObject = namespace.constructExtensionObject(dataType.nodeId, testParams); // 4. 创建变量时用Variant包装ExtensionObject类型的值 const inner_options = { componentOf: testObj, browseName: "TestStructVar", dataType: dataType.nodeId, value: new Variant({ dataType: DataType.ExtensionObject, value: extensionObject }) }; const strucVar = namespace.addVariable(inner_options);
修改完成后重启服务端,UA Expert即可正常识别自定义结构体的DataType定义和字段值。
内容的提问来源于stack exchange,提问作者user1983920
相关产品推荐
相关产品推荐

