Springboot集成Milo实现OPCUA客户端,读取OPCUA服务端节点数据

使用Springboot集成Milo实现OPCUA客户端,利用KEPServerEX6.4模拟OPCUA服务端,实现OPCUA客户端读写服务端数据

KEPServerEX6.4模拟OPCUA服务端数据请参考: https://blog.csdn.net/m0_48172732/article/details/126519555?spm=1001.2014.3001.5502
GitHub拉去OPCUA客户端代码: https://github.com/jellyleo/opcua

修改OPCUA配置文件

url是KEPServerEX6.4模拟OPCUA服务端的连接路径
userName是自己新添加的用户名
password是自己新设置的密码
在这里插入图片描述

启动类-OpcUaApplication

在这里插入图片描述

接口在CommonController,里面有连接客户端接口,关闭客户端接口,订阅接口,读取、写入接口

在这里插入图片描述

连接客户端接口

启动OpcUaApplication类,浏览器中输入接口地址http://localhost:9099/connect
在这里插入图片描述
在这里插入图片描述
**注意:**在创建连接过程中,会创建OPCUA的客户端,我们需要注意在创建客户端时会进行安全策略认证,我这里将KEPServerEX6.4中OPCUA配置的安全策略设置成无(None),如果想实现安全策略自行修改。客户端的配置信息,LocalizedText.english(“my”),my是OPCUA服务端中创建的通道名,可以选择用户名密码登录,也可以选择匿名登录。
报红处对程序运行没影响
在这里插入图片描述

关闭客户端接口

在这里插入图片描述

订阅接口

1、模拟一个数据,RANDOM(1000,200,240),1000表示一秒更新一次数据,(200,240)是数据的取值区间。

在这里插入图片描述

2、运行订阅接口,my.device.x2指的是通道名.设备名.标记名

在这里插入图片描述

3、订阅的值一直在运行中

在这里插入图片描述

读取接口

在这里插入图片描述
验证:OPCUA服务端里面该节点的值确实是0
在这里插入图片描述

写入接口(这里只能修改服务端门已有的节点数据)

写入时要注意写入数据的节点是否存在,否则会报(Bad_NodeIdUnknown,0x80340000,节点ID指向服务器地址空间中不存在的节点),也要注意写入值得类型一定要和OPCUA服务端值得数据类型一致,否则会报(Bad_TypeMismatch,0x80740000,为属性提供的值与属性值的类型不匹配)

在这里插入图片描述
id=my.device.x1&value=100&type=Short,my.device.x1表示已有的节点,100表示将节点的值修改成100,Short节点的数据类型是短整型
在这里插入图片描述
验证节点数据成功被修改
在这里插入图片描述

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
Java Eclipse环境下实现OPC UA客户端代码,可以使用Milo库。以下是一个简单实现的示例代码: 1. 导入Milo库和其他必要的依赖: ``` <dependency> <groupId>org.eclipse.milo</groupId> <artifactId>milo-client-sdk</artifactId> <version>x.x.x</version> </dependency> ``` 2. 创建一个OPC UA客户端: ```java OpcUaClient client; try { // 连接OPC UA服务器 OpcUaClientConfig config = OpcUaClientConfig.builder() .setEndpoint(endpointUrl) // OPC UA服务器的URL .setRequestTimeout(uint(5000)) // 请求超时时间 .build(); client = new OpcUaClient(config); client.connect().get(); // 建立连接 // 连接成功后,进行其他操作,例如读取或写入节点值 } catch (Exception e) { e.printStackTrace(); } ``` 3. 读取节点值: ```java try { // 读取单个节点值 NodeId nodeId = new NodeId(namespaceIndex, identifier); // 根据节点的命名空间和标识符创建节点ID DataValue value = client.readValue(Duration.ofMillis(5000), TimestampsToReturn.Both, nodeId).get(); // 处理读取到的值 System.out.println(value.getValue().getValue()); } catch (Exception e) { e.printStackTrace(); } ``` 4. 写入节点值: ```java try { // 写入单个节点值 NodeId nodeId = new NodeId(namespaceIndex, identifier); // 根据节点的命名空间和标识符创建节点ID Variant variant = new Variant(writeValue); // 写入的值 StatusCode statusCode = client.writeValue(nodeId, variant).get(); // 处理写入结果 System.out.println("Write status: " + statusCode); } catch (Exception e) { e.printStackTrace(); } ``` 需要注意的是,以上代码只是一个简单的示例,实际使用中可能会涉及更多的细节和功能。此外,还需要根据具体的OPC UA服务器配置和节点信息进行调整。详细的使用指南可以参考Milo库的文档和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值