我对OPC UA的发现功能有疑问:
答案 0 :(得分:1)
- 如何在发现服务器上注册OPC UA服务器?如果制造商为此提供了诸如Web界面之类的东西,还是只有一种标准化的方法可以做到?
制造商需要支持发现配置文件。 OPC UA规范第11部分(注册后可免费获得:https://opcfoundation.org/developer-tools/specifications-unified-architecture/)对此进行了详细说明。
OPC UA发现有三个主要概念:
本地发现服务器(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服务器自动启动的发现服务器?
由于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
当前正在为open62541堆栈开发GDS功能。 (免责声明:我是open62541的核心开发人员之一)
其他资源:
您还可以查看我写的有关OPC UA LDS-ME发现功能和特定用例的论文用于即插即用的OPC UA:使用LDS-ME进行自动设备发现( https://mediatum.ub.tum.de/node?id=1375255)