4

我正在尝试构建一个 OPC UA 客户端应用程序。
我希望能够在 OPC 树中唯一标识一个 UA 节点。
我知道在 OPC DA 中,标准节点 ID 是带有“。”的字符串。作为我可以用来识别节点的分隔符。

在 OPC UA 中,节点 ID 不必是字符串,但我仍然希望能够构建一个映射到特定节点的唯一字符串。
我正在考虑基于节点名称。例如:Demo.MyNode.MyValue。
但我担心节点名称可以包含诸如“。”之类的字符。这将使我的 ID 不唯一。

有没有可以用作分隔符的字符?
有没有更好的方法将节点 ID 表示为字符串(包括其路径)?

4

3 回答 3

5

OPC-UA 为每个节点提供了唯一的“BrowsePath”概念,客户端可以选择存储 BrowsePaths 而不是 NodeIds,然后在启动时调用 TranslateBrowsePathsToNodeIds 服务。

事实上,我相信这可能是预期的行为,因为没有要求服务器在重新启动后对任何给定节点使用相同的 NodeId,即使在实践中就是这样做的。

我错了 NodeId 被允许改变。规范说:“服务器应保留节点的 NodeId,即重启时不应生成新的 NodeId。”

我现在认为最好存储 NodeIds 并且只使用 BrowsePaths 来帮助针对类型定义进行编程。

于 2016-01-15T13:06:22.717 回答
3

OPC UA 的特点之一是服务器可以为不同的用户提供不同的菜单树。这对您的客户端可能无关紧要,因为任何给定的用户只会看到一棵树,并且 BrowsePath 对于该用户来说是唯一的。

在 OPC UA 规范第 3 部分的 v1.03 中,“OPC UA 第 3 部分 - 地址空间模型 1.03 Specification.pdf”,第 5.2.2 节说服务器在重新启动时不应更改节点的 NodeId。(该规范可从 OPC 基金会获取,网址为https://opcfoundation.org。您可以免费注册和下载。)

当然,某些 UA 服务器可能不会在重新启动后维护其 NodeID。这是使用 Kevin 建议使用 BrowsePath 为每个节点创建唯一字符串的另一个原因。该字符串可以使用户更清楚他们正在访问哪个节点。好主意!

于 2016-12-29T00:55:43.560 回答
0

OPC 基金会宣布了他们的“OPC UA 开源共享”战略(04/14/2015)。

.NET 堆栈包括大量 DA、Histori... 客户端和服务器示例,可以在 GitHub 上的OPCFoundation/UA-.NET此处免费下载。

使用 C#、VB.NET 构建 OPC UA .NET 应用程序

您可以查看“SampleApplications”目录中的示例,看看它们是如何做的......

于 2016-01-29T10:28:21.303 回答