跳到主要内容

Discovery 发现

OpcUaDiscovery 是静态类, 不需要 Session 即可调用. 用于"连接前先探测":

子页跳转
  • 列出某 Server 全部 Endpoint 请参考 GetEndpoints.
  • 通过 LDS 列出域内全部 Server 请参考 FindServers.

用法模式

import com.darra.opcua.*;
import java.util.List;

// 1. 先 getEndpoints 看服务端支持哪些组合
List<EndpointDescription> endpoints =
OpcUaDiscovery.getEndpoints("opc.tcp://server:4840");

// 2. 挑一个匹配的 (例如 SignAndEncrypt + Username)
EndpointDescription ep = endpoints.stream()
.filter(e -> e.getSecurityMode() == Enums.MessageSecurityMode.SignAndEncrypt
&& e.getUserTokens().stream().anyMatch(t ->
t.getTokenType() == Enums.UserTokenType.Username))
.findFirst()
.orElseThrow();

// 3. 用挑出来的 Endpoint 真正连接
try (OpcUaSession ua = new OpcUaSession(
ep.getEndpointUrl(),
ep.getSecurityMode(),
"operator", "secret",
600_000, 10_000, 10_000,
10_000, true, true,
"client.pfx", "123456",
null, ep.getSecurityPolicyUri())) {
ua.connect();
}

下一步