java中使用opcUaClient1个客户端3个采集IP和scheduleAtFixedRate实现轮询1秒钟采集数据一次
时间: 2024-03-07 12:50:22 浏览: 115
基于JAVA的一个OPC Client例子
4星 · 用户满意度95%
下面是一个简单的Java代码示例,可以帮助你使用opcUaClient实现1个客户端3个采集IP和scheduleAtFixedRate实现轮询1秒钟采集数据一次:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.eclipse.milo.opcua.sdk.client.OpcUaClient;
import org.eclipse.milo.opcua.sdk.client.nodes.UaVariableNode;
import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId;
import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
public class OpcUaClientExample {
public static void main(String[] args) throws Exception {
// 创建OpcUaClient对象,并连接到服务器
OpcUaClient client = new OpcUaClient("opc.tcp://localhost:62541/milo");
client.connect().get();
// 创建ScheduledExecutorService对象,并设置轮询频率为1秒
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
// 定义需要采集的路径
List<String> paths = new ArrayList<String>();
paths.add("ns=2;s=Temperature1");
paths.add("ns=2;s=Pressure1");
paths.add("ns=2;s=Flow1");
paths.add("ns=2;s=Temperature2");
paths.add("ns=2;s=Pressure2");
paths.add("ns=2;s=Flow2");
paths.add("ns=2;s=Temperature3");
paths.add("ns=2;s=Pressure3");
paths.add("ns=2;s=Flow3");
// 遍历采集路径
for (String path : paths) {
try {
// 使用readValue方法读取数据
NodeId nodeId = new NodeId(2, path);
UaVariableNode node = client.getAddressSpace().getVariableNode(nodeId);
DataValue value = node.readValue().get();
Variant variant = value.getValue();
// 将数据保存到容器中
System.out.println(path + ": " + variant.getValue());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}, 0, 1, TimeUnit.SECONDS);
// 等待轮询结束
Thread.sleep(10000);
// 关闭连接和轮询任务
executor.shutdown();
client.disconnect().get();
}
}
```
可以看到,代码中定义了9个需要采集的路径,其中包括3个不同的IP地址(Temperature1/Pressure1/Flow1、Temperature2/Pressure2/Flow2、Temperature3/Pressure3/Flow3)。在run方法中,使用OpcUaClient的readValue方法读取每个路径的数据,并将其保存到容器中。在轮询结束后,关闭ScheduledExecutorService和OpcUaClient连接。
阅读全文