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

如何在node-opcua服务端创建自定义Structure(ExtensionObject)节点

node-opcua 自定义结构体(ExtensionObject)节点创建解决方案

你的代码遗漏了两个必填核心环节,导致UA客户端无法识别自定义数据类型:

  1. 创建自定义结构体时未声明内部字段定义,服务端没有完整的结构体元数据
  2. 变量赋值未转换为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:48:02