java代码配置连接OPCUA
2024-01-01 10:34:07
pom依赖如下
<dependency>
<groupId>org.eclipse.milo</groupId>
<artifactId>sdk-client</artifactId>
<version>0.6.9</version>
</dependency>
<dependency>
<groupId>org.eclipse.milo</groupId>
<artifactId>sdk-server</artifactId>
<version>0.6.9</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.70</version>
</dependency>
业务代码
package com.opcua.opcuatest.serve;
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.sdk.client.api.identity.UsernameProvider;
import org.eclipse.milo.opcua.stack.core.AttributeId;
import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy;
import org.eclipse.milo.opcua.stack.core.types.builtin.*;
import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger;
import org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode;
import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn;
import org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemCreateRequest;
import org.eclipse.milo.opcua.stack.core.types.structured.MonitoringParameters;
import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
*
* </p>
*
* @author wsh
* @date 2023/4/27 21:35
*/
public class OpcUaTest {
//opc ua服务端地址
private final static String endPointUrl = "opc.tcp://127.0.0.1:49320";
public static void main(String[] args) {
try {
//创建OPC UA客户端
OpcUaClient opcUaClient = createClient();
//开启连接
opcUaClient.connect().get();
// 订阅消息
subscribe(opcUaClient);
// 写入
// writeValue(opcUaClient);
// 读取
// readValue(opcUaClient);
// 关闭连接
opcUaClient.disconnect().get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 创建OPC UA客户端
*
* @return
* @throws Exception
*/
private static OpcUaClient createClient() throws Exception {
Path securityTempDir = Paths.get(System.getProperty("java.io.tmpdir"), "security");
Files.createDirectories(securityTempDir);
if (!Files.exists(securityTempDir)) {
throw new Exception("unable to create security dir: " + securityTempDir);
}
return OpcUaClient.create(endPointUrl,
endpoints ->
endpoints.stream()
.filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri()))
.findFirst(),
configBuilder ->
configBuilder
.setApplicationName(LocalizedText.english("")) // huazh-01
.setApplicationUri("") // ns=2:s=huazh-01.device1.data-huazh
//访问方式 new AnonymousProvider()
.setIdentityProvider(new UsernameProvider("ua", "12345678901112"))
.setRequestTimeout(UInteger.valueOf(5000))
.build()
);
}
private static void subscribe(OpcUaClient client) throws Exception {
//创建发布间隔1000ms的订阅对象
client.getSubscriptionManager()
.createSubscription(1000.0)
.thenAccept(t -> {
//节点ns=2;s=test.device2.test2
NodeId nodeId = new NodeId(2, "test.device2.test2");
ReadValueId readValueId = new ReadValueId(nodeId, AttributeId.Value.uid(), null, null);
//创建监控的参数
MonitoringParameters parameters = new MonitoringParameters(UInteger.valueOf(1), 1000.0, null, UInteger.valueOf(10), true);
//创建监控项请求
//该请求最后用于创建订阅。
MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(readValueId, MonitoringMode.Reporting, parameters);
List<MonitoredItemCreateRequest> requests = new ArrayList<>();
requests.add(request);
//创建监控项,并且注册变量值改变时候的回调函数。
t.createMonitoredItems(
TimestampsToReturn.Both,
requests,
(item, id) -> item.setValueConsumer((it, val) -> {
System.out.println("=====订阅nodeid====== :" + it.getReadValueId().getNodeId());
System.out.println("=====订阅value===== :" + val.getValue().getValue());
})
);
}).get();
//持续订阅
Thread.sleep(Long.MAX_VALUE);
}
public static void readValue(OpcUaClient client) {
try {
NodeId nodeId = new NodeId(2, "test.device.name");
DataValue value = client.readValue(0.0, TimestampsToReturn.Both, nodeId).get();
System.out.println("=====读取ua1====:" + value.getValue().getValue());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void writeValue(OpcUaClient client) {
try {
//创建变量节点 test.device2.test2
NodeId nodeId = new NodeId(2, "test.device2.test2");
//uda3 boolean
Short value = 11;
//创建Variant对象和DataValue对象
Variant v = new Variant(value);
DataValue dataValue = new DataValue(v, null, null);
StatusCode statusCode = client.writeValue(nodeId, dataValue).get();
System.out.println(statusCode);
System.out.println("=====写入ua1====:" + statusCode.isGood());
} catch (Exception e) {
e.printStackTrace();
}
}
}
文章来源:https://blog.csdn.net/oThrowsException/article/details/135322376
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!