OPC UA唯一ID

时间:2016-01-15 06:51:38

标签: opc opc-ua node-opcua

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

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

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

3 个答案:

答案 0 :(得分:4)

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

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

我错误地认为NodeId可以改变。规范说:"服务器应该保留节点的NodeId,也就是说,它不会在重新启动时生成新的NodeId。"

我现在认为最好存储NodeIds,并且只使用BrowsePaths来帮助编写类型定义。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

OPC基金会宣布了他们的“OPC UA Open Shared Source” Strategy(2015年4月14日)。

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

另外Build OPC UA .NET applications using C#, VB.NET

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