首页 > 解决方案 > NodeId 作为 ModelCompiler OPC UA 中的字符串

问题描述

我正在尝试自己开发一个 OPC UA 服务器,但是由于我是编码新手,所以对我来说很难。我从这里找到的 QuickstartApplication 开始:https ://github.com/OPCFoundation/UA-.NET-Legacy

特别是我编辑 ModelDesign.xml 文件以根据需要对其进行自定义 https://github.com/OPCFoundation/UA-.NET-Legacy/blob/master/ComIOP/Common/Common/ModelDesign.xml

我想用 NodeId 定义一些节点作为字符串(示例中 ModelDesign.xml 中的所有 NodeId 都是数字)在这个 xsd 之后,我发现“StringId”和“NumericId”看起来像在寻找
https:/ /github.com/OPCFoundation/UA-ModelCompiler/blob/master/ModelCompiler/UA%20Model%20Design.xsd
但在 ModelDesign.xml 中更改它们的值对 NodeId 没有任何影响。没有错误,只是编译器分配了新的 NodeIds(全是数字),就好像它没有考虑我所做的更改一样。

作为编译器,我使用的是 GitHub https://github.com/OPCFoundation/UA-ModelCompiler上的 ModelCompiler

有人可以帮我吗?如何自定义节点的 NodeId?

谢谢江户

标签: githubdeploymentopcopc-ua

解决方案


在这个阶段我能提供的最好的建议是克隆UA-.NETStandard并运行 NetCoreConsoleServer

UA-.NETStandard/SampleApplications/Samples/NetCoreConsoleServer

通过调试器。如果我没记错的话,锅炉节点管理器会使用 stringID。ISystemContext.cs 中的接口 INodeIdFactory 提供了一些关于如何生成 ID 的见解。

恕我直言,如您所知,模型设计者没有强制执行字符串 ID 的开关。因此,您需要在服务器启动时以编程方式将字符串 ID 而不是数字 ID 分配给节点。我也还没想通。

因此,您可以在 中设置断点BoilerNodeManager.cs并查看 nodeID 的实际构造方式。


推荐阅读