OPC UA 唯一 ID

OPC UA unique ID

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

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

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

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

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

关于允许更改 NodeId,我错了。规范说:"A Server shall persist the NodeId of a Node, that is, it shall not generate new NodeIds when rebooting."

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

OPC 基金会宣布 “OPC UA Open Shared Source” Strategy (04/14/2015)。

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

还有Build OPC UA .NET applications using C#, VB.NET

您可以查看 "SampleApplications" 目录中的示例,看看它们是如何工作的...

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

在 OPC UA 规范第 3 部分的 v1.03 "OPC UA Part 3 - Address Space Model 1.03 Specification.pdf" 中,第 5.2.2 节指出服务器在重新启动时不应更改节点的 NodeId。 (该规范可从 OPC 基金会获得,网址为 https://opcfoundation.org。您可以免费注册和下载。)

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