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

Open62541库用DI Nodeset替代Standard Nodeset配置节点命名空间问题

操作步骤
  • 第一步:获取DI命名空间索引
    加载完DI Nodeset的初始化代码后,调用UA_Server_getNamespaceIndexByName()接口查询DI对应的命名空间索引,不要硬编码数值,避免后续新增命名空间后索引偏移:
UA_StatusCode res;
UA_UInt16 diNsIdx;
res = UA_Server_getNamespaceIndexByName(server, UA_STRING("http://opcfoundation.org/UA/DI/"), &diNsIdx);
// 需自行添加返回值校验逻辑,确认命名空间存在再进行后续操作
  • 第二步:调整节点创建参数
    调用UA_Server_addObjectNode()、UA_Server_addVariableNode()等接口时,所有涉及命名空间的参数都替换为上面获取的diNsIdx:
    1. requestedNewNodeId参数的namespaceIndex字段填diNsIdx
    2. browseName参数的namespaceIndex字段填diNsIdx
    3. 如果用到DI Nodeset中定义的类型作为节点的类型定义,直接调用生成头文件中对应的类型ID宏即可
      示例代码:
// 创建DI命名空间下的自定义变量节点
UA_NodeId customVarId = UA_NODEID_NUMERIC(diNsIdx, 20001); // 节点ID自定义,保证DI命名空间下唯一即可
UA_VariableAttributes varAttr = UA_VariableAttributes_default;
// 此处自行补全变量属性赋值逻辑
res = UA_Server_addVariableNode(server, customVarId,
                                UA_NODEID_NUMERIC(0, UA_NS0ID_OBJECTSFOLDER), // 父节点可根据需求调整
                                UA_NODEID_NUMERIC(0, UA_NS0ID_ORGANIZES), // 引用类型可根据需求调整
                                UA_QUALIFIEDNAME(diNsIdx, "CustomVariable"),
                                UA_NODEID_NUMERIC(0, UA_NS0ID_BASEDATAVARIABLETYPE), // 如需用DI定义的类型替换即可
                                varAttr, NULL, NULL);
  • 第三步:修复DI Nodeset加载为空的问题
    你当前加载后为空节点,基本是初始化顺序错误导致,按以下顺序执行即可:
  1. 完成UA_Server实例的初始化操作
  2. 调用NodesetCompiler生成的DI对应代码中的加载函数,一般命名格式为UA_Server_load<Nodeset名称>(server)
  3. 执行上述获取命名空间索引、创建自定义节点的逻辑
  4. 最后启动UA_Server

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:06:07