- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Java OPC-UA 客户端 Eclipse Milo .每当我使用服务器端点 URL 创建 session 时,方法 UaTcpStackClient.getEndpoints()
都会将 URL 更改为 localhost
。
String endpointUrl = "opc.tcp://10.8.0.104:48809";
EndpointDescription[] endpoints = UaTcpStackClient.getEndpoints(endpointUrl).get();
EndpointDescription endpoint = Arrays.stream(endpoints)
.filter(e -> e.getSecurityPolicyUri().equals(securityPolicy.getSecurityPolicyUri()))
.findFirst().orElseThrow(() -> new Exception("no desired endpoints returned"));
然而 endpoint.getEndpointUrl()
的值返回 opc.tcp://127.0.0.1:4880/
导致连接失败。
我不知道为什么我的 OPC URL 会更改?
最佳答案
这是实现 UA 客户端时非常常见的问题。
服务器最终负责您返回的端点的内容,显然,您连接到的端点被(错误)配置为在端点 URL 中返回 127.0.0.1。
您需要检查从服务器获得的端点,然后根据您的应用程序的性质,立即将它们替换为包含您已修改的 URL 的新复制的 EndpointDescription
,或者让用户知道并首先征求他们的许可。
无论哪种方式,您都需要创建一组新的 EndpointDescription
,在继续创建 OpcUaClient
之前,您已在其中更正了 URL。
或者...您可以弄清楚如何正确配置您的服务器,以便它返回包含可公开访问的主机名或 IP 地址的端点。
更新 2:
从 v0.2.2 开始,EndpointUtil.updateUrl
可用于修改 EndpointDescription
。
更新:
替换端点 URL 的代码可能是以下的一些变体:
private static EndpointDescription updateEndpointUrl(
EndpointDescription original, String hostname) throws URISyntaxException {
URI uri = new URI(original.getEndpointUrl()).parseServerAuthority();
String endpointUrl = String.format(
"%s://%s:%s%s",
uri.getScheme(),
hostname,
uri.getPort(),
uri.getPath()
);
return new EndpointDescription(
endpointUrl,
original.getServer(),
original.getServerCertificate(),
original.getSecurityMode(),
original.getSecurityPolicyUri(),
original.getUserIdentityTokens(),
original.getTransportProfileUri(),
original.getSecurityLevel()
);
}
警告:这在大多数情况下有效,但一个值得注意的情况是当远程端点 URL 包含 URL 主机名中不允许的字符(根据 RFC)时,例如下划线('_ '), 不幸的是,这在例如Windows 机器的主机名。因此,您可能需要使用其他一些方法来解析端点 URL,而不是依赖 URI 类来完成。
关于Java OPC-UA 客户端 Eclipse Milo 端点 URL 更改为本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40554198/
请解释 OPC UA 和 OPC DA 之间的区别是什么? 在哪种情况下应该使用哪个,如果可以为 OPC UA 和 OPC DA 提供任何示例,这将有所帮助 最佳答案 OPC UA 不仅适用于 OPC
我有一个 Kepware OPC 服务器,我能够连接到我的客户端(OPC Foundation UA lib)。我在 Kepware 中创建了一个设备,并在其中创建了一个组。我想从数据库中读取 opc
我想从头开始实现我自己的 OPC DA 客户端(版本 2.02、2.05a、3.00),但不使用任何第三方。我还想利用 OPCEnum.exe 服务来获取已安装 OPC 服务器的列表。是否有任何类型的
我想从头开始实现我自己的 OPC DA 客户端(版本 2.02、2.05a、3.00),但不使用任何第三方。我还想利用 OPCEnum.exe 服务来获取已安装 OPC 服务器的列表。是否有任何类型的
我是 OPC 统一架构世界的新手,我正在从基础开始学习它。命名空间到底是什么?为什么它总是附加 NodeID? 最佳答案 OPC UA 中的命名空间就像节点 ID 的容器。OPC 基金会有索引为 0
我正在尝试通过 openscada 连接到 OPC 服务器。 我已经知道 MatrikonOPC explorer 给出的 OPC 服务器程序 ID,但连接不工作可能是由于错误的 DCOM 配置。在更
我一直在互联网上阅读,以很好地解释 OPC-UA 中的节点。似乎有一些库可以用于它,但实际上没有一个解释节点。 OPC-UA 中节点的用途是什么? 注意:此处为 OPC 和 OPC-UA 菜鸟 最佳答
在我的公司中,我们有许多分布式站点,每个站点都使用一个单一的 Scada 系统供应商(一个使用 Wincc,其他地方使用另一个......)并且该系统使用几乎相同类型的信息。 我们需要从这些系统中检索
我对 OPC-UA 世界完全陌生。 我需要建立一个关于如何让我们的 ERP 与 PLC 通信的概念证明。我正在评估充当 OPC-UA 服务器的软件(它正在运行)。我发现了 Milo 并让代码在 Ecl
我注意到所有 OPC 标记 ID 都以 ns=2;s= 为前缀. 可能的 NodeId 值的一些示例是: ns=2;s=AcquisitionTimeRemaining ns=2;s=Status n
我是 OPC UA 新手,我正在使用 milo OPC Subscriber client连接到本地发现服务。我有 Prosys 模拟服务器,它连接到我的本地发现服务。 注意:如果我直接连接到 pro
我想使用 OPC UA 服务器将我的应用程序生成的数据发送到 OPC UA 客户端。我已经完成了 Eclipse Milo 项目,这是一个很好的资源。但我不知道如何将它集成到我们的应用程序中。应用程序
我有一个应用程序,我需要将数据从 PLC 读取到数据库中,因此我需要开发自己的应用程序来执行此操作。我只需要从 PLC 读取 5 个值并将其记录到数据库中。我有一个正在运行的演示 OPC 服务器,可以
我是一名 OPC-UA 新手,使用 Milo 堆栈将非 OPC-UA 系统集成到 OPC-UA 服务器。其中一部分包括将值写入 OPC-UA 服务器中的节点。我的问题之一是来自其他系统的值以 Java
我已经减少并检查了 SamplingInterval 和 PublishingInterval..values 没有影响。你能提出任何建议吗?让我知道。 最佳答案 如前所述,SamplingInter
我正在使用 opc.net api 部分开发 opc 客户端应用程序,但在连接远程 opc 服务器时遇到了一些问题。下面请看我写的连接opc服务器的代码。 Opc. URL url = new Opc
我正在开发一个 OPC UA 客户端应用程序,它读取存储在 OPC UA 服务器上的文件。出于测试目的,我需要一个 OPC UA 服务器模拟器,我可以在其中添加 FileType 节点并配置这些节点。
我是 OPC-UA 世界和 Eclipse Milo 的新手。我不明白这里的保安是如何运作的,讨论eclipse-milo提供的client-example 我发现连接 OPCUA 服务器时使用了一些
我正在尝试使用 unifiedautomation 的 opc ua DLL 从 Opc ua 服务器(西门子)读取日期和时间 (#DT)。但是我得到了错误的值: 西门子 S7 1500 opc ua
我正在尝试遵循这些教程: https://sandervandevelde.wordpress.com/2018/11/06/getting-started-with-opc-ua-on-azure-
我是一名优秀的程序员,十分优秀!