通过Milo实现的OPC UA客户端连接并订阅Prosys OPC UA Simulation Server模拟服务器

news2024/11/17 23:43:45

背景

前面我们搭建了一个本地的 PLC 仿真环境,并通过 KEPServerEX6 读取 PLC 上的数据,最后还使用 UAExpert 作为 OPC 客户端完成从 KEPServerEX6 这个OPC服务器的数据读取与订阅功能:SpringBoot集成Milo库实现OPC UA客户端:连接、遍历节点、读取、写入、订阅与批量订阅。

注意,如果实际工作中,仅仅需要测试下 OPC UA 客户端的功能,那么就Duck不必搭建本地的 PLC 仿真环境,而是借助一些 OPC UA 服务端的模拟工具。在这篇文章中,我们将使用 Prosys OPC UA Simulation Server 作为 OPC UA 的服务端,并通过我们前面自己实现的 OPC UA 客户端来连接这个模拟的 OPC UA 的服务器,即:

通过 Milo 实现的 OPC UA 客户端连接 Prosys OPC UA Simulation Server 模拟的 OPC UA 服务器。

下载安装:Prosys OPC UA Simulation Server

https://downloads.prosysopc.com/opc-ua-simulation-server-downloads.php

模拟OPC UA服务器

双击启动 Prosys OPC UA Simulation Server 后,首页显示了服务器的地址信息。

2023-04-16-Home.jpg

如果需要修改这个默认的连接地址,可通过 Endpoints 菜单进行设置(我这里用的是默认的地址)。

2023-04-16-Endpoints.jpg

Objects 菜单下,可以看到 Prosys OPC UA Simulation Server 默认自带了计数器、随机数、梯形图、锯齿波、正弦波、三角波等节点,可通过 OPC UA 客户端进行读取测试。

2023-04-16-Objects.jpg

基于Milo实现的OPC UA客户端测试

作为示例,以下通过连接服务器(匿名连接)读取指定节点的值以及订阅指定节点来完成与 Prosys OPC UA Simulation Server 模拟 OPC UA 服务器的操作。

在实际编码测试之前,可以先通过 UAExpert 作为 OPC 客户端完成从模拟服务器的数据读取与订阅功能,顺便再次明确下 NodeId 的信息。

2023-04-16-UAExpert.jpg

public class OpcUaStart {
    public void start() throws Exception {
        OpcUaClientService opcUaClientService = new OpcUaClientService();

        // 与OPC UA服务端建立连接,并返回客户端实例
        OpcUaClient client = opcUaClientService.connectOpcUaServer("你的机器名称", "53530", "/OPCUA/SimulationServer");

        // 两种方式定义节点
        NodeId nodeId = new NodeId(3, 1002); // 注意第2个参数类型为数字
//        NodeId nodeId = NodeId.parse("ns=3;i=1002"); // 通过parse静态方法定义

        // 读取指定节点的值
        opcUaClientService.readNodeValue(client, nodeId);

        // 订阅指定节点
        opcUaClientService.subscribe(client, nodeId);
    }
}

测试结果如下:
2023-04-16-Result.jpg

可能遇到的问题

Prosys OPC UA Simulation Server 界面上没有 Endpoints 菜单?

解决方法: Prosys OPC UA Simulation Server 界面上如果没有 Endpoints 菜单,可通过左上角的 Options 菜单 Switch to Expert Mode 切换一下。

2023-04-16-Options.jpg

基于Milo实现的OPC UA客户端如何读取、订阅 Prosys OPC UA Simulation Server 中的节点数据?

StatusCode{name=Bad_NodeIdUnknown, value=0x80340000, quality=bad}

2023-04-16-Cursor.jpg

原因分析: 根据状态提示,再结合我们读取节点数据的实现: readNodeValue 方法关键的参数分别为: int namespaceIndex , String identifier 。之前连接 KEPServerMilo Serveridentifier 的类型都是 String ,可以正常读取,但是连接 Prosys OPC UA Simulation Server 后,无法读取,我尝试直接改为 int 类型后,读取成功。

解决方法:

方法1:将 readNodeValue 方法的 String identifier 参数改为 int identifier ,即在传参时使用整数类型,可以通过增加一个重载的方法实现。

public void readNodeValue(OpcUaClient client, int namespaceIndex, int identifier)

方法2: 修改 readNodeValue 方法直接接收 NodeId 类型,这时可以通过各种方式定义 NodeIdNodeId 提供了各种重载和解析方法。

public void readNodeValue(OpcUaClient client, NodeId nodeId)

// 方式1:构造方法定义NodeId,注意第2个参数类型为数字
NodeId nodeId = new NodeId(3, 1002); 

// 方式2:静态解析定义NodeId
NodeId nodeId = NodeId.parse("ns=3;i=1002");

Note:方式2:静态解析定义NodeId,这种方法是我通过基于 GPT-4 大模型的 Cursor 问答得知的:Cursor编程初体验,搭载GPT-4大模型,你的AI助手,自然语言编程来了。

2023-04-15-MiloResult.jpg

Reference

Prosys_OPC_UA_Simulation_Server_UserManual用户手册

Source Code

https://github.com/heartsuit/demo-spring-boot/tree/master/springboot-opcua


If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新一代信息技术赋能,安科瑞搭建智慧水务体系的新思路

随着新时期治水方针的逐步落实,水利现代化、智能化建设已开启,物联网、图像识别、数字孪生等新技术的成熟,也为智慧水务体系的搭建提供了技术保障,新时代治水新思路正逐步得到落实。本文对智慧水务的总体架构与包含的建设内容进行…

Qt第六十二章:图标库QtAwesome的使用

目录 一、安装依赖 二、主页 三、文档 四、案例 1、图标 2、样式 3、alpha 通道 4、 多图标堆叠 5、动画 6、字体 五、系列 1、msc系列 2、fa5系列(选择free栏) 3、fa5s系列(选择free栏) 4、fa5b系列(选…

由libunifex来看Executor的任务构建

前言 之前的一篇文章讲述了future的优缺点,以及future的组合性,其中也讲述了构建任务DAG一些问题,同时给出了比较好的方案则是Executor。 Executor还未进入标准(C23),Executor拥有惰性构建及良好的抽象模型…

尚硅谷大数据技术Zookeeper教程-笔记03【源码解析-算法基础】

视频地址:【尚硅谷】大数据技术之Zookeeper 3.5.7版本教程_哔哩哔哩_bilibili 尚硅谷大数据技术Zookeeper教程-笔记01【Zookeeper(入门、本地安装、集群操作)】尚硅谷大数据技术Zookeeper教程-笔记02【服务器动态上下线监听案例、ZooKeeper分布式锁案例、企业面试真…

多模态大模型的发展、挑战与应用

多模态大模型的发展、挑战与应用 2023/04/15 研究进展 随着 AlexNet [1] 的出现,过去十年里深度学习得到了快速的发展,而卷积神经网络也从 AlexNet 逐步发展到了 VGG [2]、ResNet [3]、DenseNet [4]、HRNet [5] 等更深的网络结构。研究者们发现&#…

用vscode运行Java程序初体验

最近开始学习Java编程了,以前学习过C、C 、Python,主要用微软的visual studio code来运行python程序,于是就尝试了用vscode来运行java代码,记录一下使用的经验,帮助大家少走弯路。 安装了Java的集成编辑器IDE "Ec…

c++STL之关联式容器

目录 set容器 set的默认构造 set的插入与迭代器 set集合的元素排序 set集合的初始化及遍历 从小到大(默认情况下) 从大到小 仿函数 set的查找 pair的使用 multiset容器 map和multimap容器 map的插入与迭代器 map的大小 map的删除 map的查找 关联式容器&#…

【LeetCode: 337. 打家劫舍 III | 暴力递归=>记忆化搜索=>动态规划 | 树形dp】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

整数二分从入门到精通

前言: 开个玩笑,我们写算法可不能这样哈~ 好了,正片开始: 你是否曾经也有过整数二分因为一直死循环而苦恼,你是否因为搞不清楚整数二分的边界处理而焦躁,明明很简单的一道二分,但是最后就是搞…

Python入门教程+项目实战-9.1节: 字符串的定义与编码

目录 9.1.1 理解字符串 9.1.2 字符串的类型名 9.1.3 字符的数字编码 9.1.4 常用的字符编码 9.1.5 字符串的默认编码 9.1.6 字符串的编码与解码 9.1.7 转义字符详解 9.1.8 对字符串进行遍历 9.1.9 知识要点 9.1.10 系统学习python 9.1.1 理解字符串 理解字符串&#…

005:Mapbox GL添加全屏显示功能

第005个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加全屏显示功能 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共60行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://…

还在因为写项目函数太多而烦恼?C++模板一文带你解决难题

📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段>——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程&…

轮廓查找与绘制

轮廓查找与绘制 1)什么是轮廓 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度,提取轮廓就是提取 这些具有相同颜色或者灰度的曲线,或者说是连通域,轮廓在形状分析和物体…

学习系统编程No.20【进程间通信之命名管道】

引言: 北京时间:2023/4/15/10:34,今天起床时间9:25,睡了快8小时,昨天刷视屏刷了一个小时,本来12点的时候发完博客洗把脸就要睡了,可惜,看到了一个标题,说实话&#xff0…

.Net路由操作!!!!

什么是路由 问题 答案 路由是什么? 路由系统负责处理传入的请求并选择控制器和操作方法来处理它们。 路由系统还用于在视图中生成路由,称为传出的URL 路由有什么用? 路由系统能够灵活地处理请求,面不是将URL与Visual Studio…

MySQL(31)-ubuntu20.04-下安装mysql5.7

ubuntu20.04 下apt 默认安装的是8.0版本,如果要安装5.7版有如下3种方式: 1 下载 MySQL 二进制压缩包,解压并设置相关的参数即可运行 2 通过命令 apt install 进行安装,先下载 MySQL 5.7 对应的源,然后执行安装命令 ap…

5 分钟带你小程序入门 [实战总结分享]

微信小程序常常用 4 种文件类型 JS 文件 JS 在小程序中用于编写页面逻辑和交互效果,可调用 API 接口完成数据请求和处理,也可以使用第三方库和框架。 模块化编程:小程序中JS文件可以使用ES6的模块化语法,通过export和import来…

【vue3】关于watch与computed的用法看这个就ok

😉博主:初映CY的前说(前端领域) ,📒本文核心:watch()与computed的使用【vue2中watch|computed概念详解】,本文将介绍在vue3中怎么使用这两者技能 【前言】vue2当中有这两个技能,那么vue3中的watch与compute…

【云原生进阶之容器】第六章容器网络6.4.1--Flannel组网方案综述

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述

【Unity】用HDRI作为Unity的Skybox

教程:用HDRI作为Unity的Skybox 在Unity中,Skybox是用于创建环境背景的一种组件。使用高动态范围图像(HDRI)作为Skybox可以提供更真实的环境背景。以下是使用HDRI作为Unity Skybox的步骤: 步骤1:下载HDRI图…