【问题标题】:How to properly use the TypeDefinition and Object instances in OPC UA with the OPC foundation UA-.net standard libraries如何通过 OPC 基础 UA-.net 标准库正确使用 OPC UA 中的 TypeDefinition 和 Object 实例
【发布时间】:2020-06-11 12:06:23
【问题描述】:

通读一些现有的 OPC UA 文档 (OPC UA eBook), (github repo), (Home page) 您会遇到类型定义以及如何使用它们来蓝图引用它的任何对象。

但是,通过 github 存储库中的一些示例代码,我找不到明确的示例,类型定义如何使数据访问更容易或更清晰。

例如: 在 github 存储库中的解决方案“UA QuickStart applications”中,有一个 windows 窗体项目“Boiler client”,它在地址空间中使用 2 个不同的“Boiler Type”实例,并根据所选的组合框项目将其变量投影到文本框中。
查看代码时,您可以看到锅炉确实是使用“锅炉类型”标志选择的,但要映射的属性仍然是硬编码的,并且使用相对路径而不是使用类型找到。

Two different boiler instances

Fetch boilers method

Boiler client with seperate variable display

目前,为我使用 OPC UA 数据(节点)意味着我必须列出我想要读取的所有节点地址中的每一个,并在 Session.Read() 中使用它们或使用它们监听它们监控项。
相反,我认为应该可以读取对象中的所有节点并将它们映射到 CLR 对象。

我的问题: C# repo 是否可以从整个对象中捕获数据(使用类型定义或其他方式),而不必使用其地址手动读取每个节点? (读取(“节点地址”))

替代问题: 如果不能在消费者中使用,即使添加类型定义又有什么用? 这对 PLC 程序员来说是一种安慰吗?

【问题讨论】:

    标签: c# plc opc opc-ua


    【解决方案1】:

    我认为答案已经包含在您的问题中。是的,您使用相对路径来到达实际对象的节点。但是相对路径由类型决定,并且对于该类型的所有对象都是相同的。因此,类型为您(除其他外)提供了相对路径的知识。而且您可以依赖于任何此类对象都可以使用相同的相对路径这一事实。这就是您所要求的“消费者的杠杆作用”。

    但是不,没有针对对象的通用“全部给我”读取服务。您仍然需要单独阅读每篇文章。这是有道理的,因为 Object 的全部内容可能很大(即使不是无限的),所以为了提高效率,客户端应用程序需要选择它实际需要的内容。同样,这个答案隐含在您的问题中,因为您写道“我必须列出我想要读取的所有节点地址中的每一个” - 但其他人需要不同的。

    一些服务器可能会在单个变量中提供有关对象的最重要信息,可能作为自定义 DataType,但在一般情况下您不能依赖它。

    【讨论】:

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