OPC UA 与套接字编程

OPC UA vs socket programming

某工厂有MES(制造执行系统),我有一台机器。工厂想使用他们的 MES 来控制我的机器(start/stop 生产等)并监控实时制造数据(例如生产了多少产品)。

简而言之,目标是:

MES ---controls--> machine
MES <--reports data---  machine

请注意,我的机器已经有一个.NET WinForm应用程序(部署MVP模式),其中包含所有业务逻辑,可以方便离线工作人员使用。为了满足工厂的需要,我必须对我的 .NET 代码做一些 upgrade/transform。

经过一些调查,我找到了 2 种可能的方法来实现目标:

  1. 让我的机器充当OPC UA服务器,让MES适配我的机器
  2. 使用socket编程实现MES与机器之间的通信

我对以上两种方法都没有任何经验,请问您能说说每种方法的优缺点吗?或者有第三种更好的方法吗?

如果您的机器有一个 built-in OPC UA 服务器并且您的 MES 可以充当 OPC UA 客户端,那么第 1 点是一个很好的解决方案。

另一方面,如果您必须在您的机器上编写 OPC UA 服务器程序,那就算了,这是一项非常困难的工作,因为 OPC UA 无疑是所有最常见的工业协议中最复杂的。

如果使用原始套接字编程,那么您必须定义自己的协议,这就像重新发明轮子。

也许您可以选择使用更简单的工业协议,例如 Modbus TCP。

OPC UA 是 long 运行 中的首选选项。 它看起来似乎相当广泛,并且有一点学习曲线,但那是因为它带有许多内置功能(安全、地址 Space、读取、写入、方法调用、数据更改、事件、警报、历史读取等)。当然,您不会立即需要所有这些,但您也不需要使用超过您需要的量。

对于 .NET,您可以使用 OPC Foundation Standard Stack,它为您提供了大部分内容的实现。它是免费的(non-members 的 GPL),但缺少文档,因此您可能会考虑商业选项。

特别是,如果您希望与 MES 的连接简单可靠,那么定义自己的套接字协议就没有任何意义。这会占用你很多时间,是 error-prone,最后,你将是唯一可以用它调试问题的人。最后,您可能需要弄清楚 MES 如何在实践中使用您的协议。

坚持标准解决方案有明显的好处。

我有一些 OPC UA 经验,必须承认它的学习曲线非常陡峭。 Jouni Aro 的回答是正确的。 但第三种选择是另一种现有协议,它可能功能较少但更易于使用,例如 MQTT。几乎每种语言都有大量开源实现。