当前位置: 首页 > 知识库问答 >
问题:

Eclipse Milo:如何使用OPC UA的发现功能?

凤衡
2023-03-14

我对OPC UA的发现功能有一些疑问:

  1. 如何在发现服务器上注册OPC UA服务器?这是否只有在制造商提供类似web界面的东西时才可能实现,或者是否有一种标准化的方法来实现

共有1个答案

华哲茂
2023-03-14
  1. 如何在发现服务器上注册OPC UA服务器?这是否只有在制造商提供类似web界面的东西时才可能实现,或者是否有一种标准化的方法来实现

制造商需要支持discovery配置文件。OPC UA规范第11部分(注册后免费提供:https://opcfoundation.org/developer-tools/specifications-unified-architecture/)更详细地描述了这一点。

OPC UA发现有三个主要概念:

>

  • 本地发现服务器(LDS):
    客户端需要知道LDS服务器的IP地址,然后通过OPC UA调用寄存器服务器寄存器服务器2服务。

    具有多播扩展(LDS-ME)的本地发现服务器:
    服务器和客户端使用标准化的mDNS多播查询来查找网络中的其他OPC UA实例。一旦LDS-ME服务器宣布自己,普通的OPC UA服务器就知道IP地址并调用寄存器服务器寄存器服务器2

    全局发现服务器(GDS):
    对于大型系统,可能有多个子网无法进行多播查询。GDS是一个企业范围的发现服务器,它还支持证书管理。

    Eclipse Milo不完全支持发现功能。它基本上支持LDS。目前我有一个公开的公关,但不幸的是,它还没有合并:https://github.com/eclipse/milo/pull/89

    由于Eclipse Milo默认不支持发现服务,因此不会自动启动。无论如何,您可以通过添加或删除相应的服务集来定义支持哪些服务。看看这一行:

    stackServer.addServiceSet((DiscoveryServiceSet) sessionManager);
    

    https://github.com/eclipse/milo/pull/89/files#diff-6eb416ef6889e36b34b34e32cb78b823R122

    另一台服务器通过RegisterServerRegisterServer2注册后,客户端可以通过两个服务调用检索已注册服务器的列表。

    • FindServers返回已注册服务器的列表,该列表称为RegisterServerRegisterServer2

    如果您正在寻找一个完全实现LDS和LDS-ME功能的开源堆栈,您可以看看open62541项目,它是OPC UA的C/C实现:https://github.com/open62541/open62541

    GDS功能目前正在为open62541堆栈开发中。(免责声明:我是open62541的核心开发人员之一)

    其他资源:

    您还可以查看我写的一篇关于OPC UA LDS-ME发现功能和一个名为OPC UA for Plug的特定用例的论文

  •  类似资料:
    • 我有一个用Python编写的OPCUA服务器,它承载变量、属性和方法。此服务器按其应有的方式运行和工作。变量和属性的读写以及用参数调用这些方法都已经使用另一个OPCUA客户机(用Python编写)进行了测试。 然而,最终目标是使用Java和milo堆栈编写一个类似的OPCUA客户机,该客户机应该连接到给定的服务器,执行变量和属性的所有读写操作,并使用参数调用OPCUA方法。 变量和属性的读写与mi

    • 问题内容: 我正在尝试使用current.futures模块使超时在python3.2中工作。但是,当它超时时,并不会真正停止执行。我尝试了使用线程和进程池执行器,但它们都没有停止任务,只有直到完成后,超时才会增加。那么,有谁知道是否有可能使它起作用? 问题答案: 据我所知,TimeoutError实际上是在您期望的时间引发的,而不是在任务完成之后引发的。 但是,您的程序本身将继续运行,直到完成所

    • 问题内容: 我试图找到一种有效,正常或简单的方法来将缓动函数实现到我的Java程序中。我已经启用了缓动功能,但是我觉得 有一种更有效的方法可以实现;我看不到的那一个,可能是因为隧道视线。这是我的代码;有人可以向我展示我应该做些什么吗?或为我指明进行研究的方向 我尝试为在线发现的线性缓动函数实现calc()方法,但是它实际上是无用的,因为 除非被迫将方程式直接插入到行中,否则我无法使它起作用。 问题

    • 问题内容: 有时我需要访问一些运行Linux的服务器(或者可能是另一个类似Unix的SO),但是我不知道如何验证服务器上正在使用哪个分发版本(有时甚至是服务器的“负责人”不知道)。 有没有一种简单而可靠的方法来发现这一点,那就是在所有这些方面都是一致且一致的? 问题答案: 可能为您工作。 更多细节可用 在http://etbe.coker.com.au/2007/08/30/identifying

    • 问题内容: 我试图将一个添加到UIButton,以便在点击时将触发一个功能。我正在使用,并出现一些错误: 由于未捕获的异常’NSInvalidArgumentException’而终止应用程序,原因:’-[[SwiftRunner.ViewController tapBlurButton]:无法识别的选择器已发送到实例0x149e07610’ 这大致就是我所拥有的: 问题答案: 从您的代码中,您正

    • 我已经使用$security->getIndex('/action/upload')得到上传接口了,想使用curl将图片上传到附件 $picUrl是图片地址, $uploadUrl是$security->getIndex的上传接口,都能正常得到想要的值 我感觉问题就出现在这个curl 为什么返回了状态码403? 我使用js的方式很容易上传图片附件,但是使用php却不行。 请问如何使用php,并搭配