【问题标题】:OPC UA unique IDOPC UA 唯一 ID
【发布时间】:2016-01-15 06:51:38
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您正在编写 OPC 客户端应用程序,则无法选择创建项目 ID 或节点 ID 的语法。它们由您要连接的 OPC 服务器指定,您能做的最好的事情就是编写您的 OPC 客户端,使其能够与它们很好地配合使用。另外,稍微修正一下,OPC DA 没有规定“.”。作为分隔符;由服务器决定如何构造项目 ID,而“.”好像挺常见的,有很多服务器不用。

标签: opc opc-ua node-opcua


【解决方案1】:

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

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

我对允许更改 NodeId 是错误的。规范说:“服务器应持久化节点的 NodeId,即重启时不应生成新的 NodeId。”

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-05-29
        • 1970-01-01
        • 2017-08-23
        • 2021-03-26
        • 2023-02-09
        • 1970-01-01
        • 2017-06-14
        • 2016-10-07
        • 1970-01-01
        相关资源
        最近更新 更多