我对 OPC UA 的发现功能有一些疑问:
- 如何在发现服务器上注册 OPC UA 服务器?如果制造商为此提供类似网络界面的东西,或者是否有标准化的方法来做到这一点,这是否可能?
- 如何在发现服务器上注册使用 milo 创建的 OPC UA 服务器?
- 是否可以禁用使用 milo opc ua-server 自动启动的发现服务器?
- 如何使用 milo 获取注册服务器的信息?
- 如何在发现服务器上注册 OPC UA 服务器?如果制造商为此提供类似网络界面的东西,或者是否有标准化的方法来做到这一点,这是否可能?
制造商需要支持发现配置文件。OPC UA 规范第 11 部分(注册后免费提供: https ://opcfoundation.org/developer-tools/specifications-unified-architecture/ )更详细地描述了这一点。
OPC UA Discovery 有三个主要概念:
本地发现服务器 (LDS):
客户端需要知道 LDS 服务器的 IP 地址,然后通过 OPC UA调用RegisterServer
或服务。RegisterServer2
具有多播扩展的本地发现服务器 (LDS-ME):
服务器和客户端使用标准化的 mDNS 多播查询来查找网络中的其他 OPC UA 实例。一旦 LDS-ME 服务器宣布自己,普通的 OPC UA 服务器就会知道 IP 地址并调用RegisterServer
或RegisterServer2
全局发现服务器 (GDS):
对于大型系统,可能有多个子网,其中多播查询不起作用。GDS 是一个企业范围的发现服务器,它也支持证书管理。
- 如何在发现服务器上注册使用 milo 创建的 OPC UA 服务器?
Eclipse Milo 不完全支持发现功能。它基本上支持LDS。目前自己有一个公开的PR,可惜还没有合并:https ://github.com/eclipse/milo/pull/89
- 是否可以禁用使用 milo opc ua-server 自动启动的发现服务器?
由于 Eclipse Milo 默认不支持发现服务,因此不会自动启动。无论如何,您可以通过添加或删除相应的服务集来定义哪些服务受支持。看看这一行:
stackServer.addServiceSet((DiscoveryServiceSet) sessionManager);
https://github.com/eclipse/milo/pull/89/files#diff-6eb416ef6889e36b34b34e32cb78b823R122
- 如何使用 milo 获取注册服务器的信息?
在另一台服务器通过自身注册后,RegisterServer
客户 RegisterServer2
端可以通过两个服务调用检索已注册服务器的列表。
FindServers
返回注册服务器的列表,它调用RegisterServer
或RegisterServer2
FindServersOnNetwork
仅 LDS-ME 服务器支持,并另外返回通过 mDNS 消息宣布自己但尚未注册的服务器。如果您正在寻找完全实现 LDS 和 LDS-ME 功能的开源堆栈,您可以查看 open62541 项目,它是 OPC UA 的 C/C++ 实现: https ://github.com/open62541 /open62541
GDS 功能目前正在为 open62541 堆栈开发。(免责声明:我是 open62541 的核心开发人员之一)
其他资源:
您还可以查看我写的一篇关于 OPC UA LDS-ME 发现功能的论文和一个名为OPC UA for Plug & Produce:使用 LDS-ME 的自动设备发现的特定用例( https://mediatum.ub.tum。 de/node?id=1375255 )