【问题标题】:Communicate OPCDA client with OPC UA server与 OPC UA 服务器通信 OPCDA 客户端
【发布时间】:2020-12-23 17:03:13
【问题描述】:

所以,这是我第一次在这里发帖,所以请耐心等待。(不是以英语为母语的人) 我正在一个项目中工作,我必须将 OPC DA 客户端连接到 OPC UA 服务器(西门子 PLC)。 三个月前,我从未听说过 OPC、PLC 等。对我来说都是全新的,有点困惑。 到目前为止,我在 OPC DA 客户端中使用 Wrapper(OPC Expert),将其作为 OPC UA 服务器显示给我。 所以我两边都有两台服务器,中间有一个客户端(C# 堆栈)(我正在处理),用于进行通信。 客户端为每个服务器打开两个会话,并订阅双方感兴趣的项目(标签)。所以我在一侧得到更改并将其写入另一侧。目前我正在使用两个线程来读取每个订阅并写入更改。我正在使用将节点从一台服务器映射到另一台服务器中的节点的文件。引号之间是文件的一行,(+) 是分隔符。 "ns=3;s=UMUARAMA->OA.OpcOAenterprise.1->Test.Equipment.Motor.CV_E101.EquipmentControlCommand+ns=3;s="MotorControl_CV_E101"."EquipmentCommand"。" 目前我正在逐一读取订阅中的受监控项,如果附加任何值,我将值写入另一台服务器。我很确定有很多不那么愚蠢的方法可以做到这一点。所以,我正在寻求一些建议。提前致谢。

【问题讨论】:

  • 嗯 - 我不太确定你在这里问什么。如果这有效 - 它有效。为什么你想要一个不同的解决方案?你遇到性能问题了吗?这需要大量维护吗?你的天使/问题是什么?
  • 您可以将两台服务器视为数据库。通常是 c# 在您使用 BulkCopy 的数据库之间进行复制。我不知道客户端和服务器之间的连接类型,所以不确定接口是否支持 BulkCopy。也许以下内容会有所帮助:cogentdatahub.com/products/datahub-opc-gateway/?https://…
  • @jdweng - 谢谢,它支持某种批量复制。链接中的软件似乎是一个包装器,就像我已经在使用的一样,但我会看看。
  • @sommmen - 好吧,也许有人遇到了类似的任务并有一些建议可以提供。对于我所读到的内容,我向服务器调用发布请求,以便它知道我正确接收了数据。但我只是从订阅中读取受监控的项目。它会导致任何问题吗?

标签: c# opc-ua


【解决方案1】:

我不知道你的包装器有哪个 api,但在 OPC UA 中,你可以向 MonitoredItem 注册一个事件,该事件在节点值更改时触发。

您可以在Github Repository from the OPCFoundation中找到注册和处理程序的示例

(第 606 行)

【讨论】:

  • 好的。所以每个监控项都有自己的监控项通知事件处理程序。我可能必须处理类似 2000 个受监控的项目,这会是个问题吗?另一个问题,我在代码中注意到 MonitoredItem_Notification 方法使用'if (this.InvokeRequired) 和'this.BeginInvoke'。我想这是因为它在一个Form中执行,所以它可以异步调用。由于我没有在表单上运行此代码,我应该进行异步调用吗?如果是这样,最好的方法是什么?使用 task.run()?或者其他的东西?谢谢
  • 我从来不需要这么多 MonitoredItems,你应该测试一下行为。但是基金会有广泛的合规性测试,所以我认为框架可以处理这个问题。调用 InvokeRequired 是因为可以从不同的线程触发事件。如果您没有 UI,则不需要它。简单地将值从一台服务器复制到另一台服务器应该没问题,因为the client api is thread safe
  • 非常感谢
猜你喜欢
  • 2023-04-11
  • 2020-05-26
  • 2020-03-08
  • 2022-08-17
  • 2020-07-24
  • 2020-01-14
  • 2021-04-06
  • 2018-06-02
  • 2020-08-28
相关资源
最近更新 更多