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

这篇具有很好参考价值的文章主要介绍了通过Milo实现的OPC UA客户端连接并订阅Prosys OPC UA Simulation Server模拟服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

前面我们搭建了一个本地的 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 后,首页显示了服务器的地址信息。

milo opc,IIoT,OPC,Prosys OPC UA,OPC UA模拟服务器,Milo读取ProsysOPC,订阅OPC UA,工业互联网

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

milo opc,IIoT,OPC,Prosys OPC UA,OPC UA模拟服务器,Milo读取ProsysOPC,订阅OPC UA,工业互联网

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

milo opc,IIoT,OPC,Prosys OPC UA,OPC UA模拟服务器,Milo读取ProsysOPC,订阅OPC UA,工业互联网

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

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

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

milo opc,IIoT,OPC,Prosys OPC UA,OPC UA模拟服务器,Milo读取ProsysOPC,订阅OPC UA,工业互联网

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);
    }
}

测试结果如下:
milo opc,IIoT,OPC,Prosys OPC UA,OPC UA模拟服务器,Milo读取ProsysOPC,订阅OPC UA,工业互联网

可能遇到的问题

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

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

milo opc,IIoT,OPC,Prosys OPC UA,OPC UA模拟服务器,Milo读取ProsysOPC,订阅OPC UA,工业互联网

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

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

milo opc,IIoT,OPC,Prosys OPC UA,OPC UA模拟服务器,Milo读取ProsysOPC,订阅OPC UA,工业互联网

原因分析: 根据状态提示,再结合我们读取节点数据的实现: 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助手,自然语言编程来了。

milo opc,IIoT,OPC,Prosys OPC UA,OPC UA模拟服务器,Milo读取ProsysOPC,订阅OPC UA,工业互联网

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!文章来源地址https://www.toymoban.com/news/detail-604559.html

到了这里,关于通过Milo实现的OPC UA客户端连接并订阅Prosys OPC UA Simulation Server模拟服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kepserver EX6配置opc ua服务端 以及客户端

    阿里云盘分享(下载不限速) 链接:KepServer EX6下载破解工具 1.打开opc ua 设置 右击ex图标=》点击OPC UA 配置 2.设置opc ua 连接配置 选中编辑 网络配置: 这里给了三种配置根据自己业务进行选择,端口一般默认,也可以自定义端口。 一种是Default(默认),通过本机的计算机名称连

    2024年02月08日
    浏览(39)
  • WebSocket 实现长连接及通过WebSocket获取客户端IP

    WebSocket 是一种支持双向通讯的网络通信协议。 实现过程: 1 添加ServerEndpointExporter配置bean 2 实现过程 需求是通过WebSocket,建立长连接,并获取当前在线的人数。通过Websocket 不断发送消息,建立长连接,给Session续命。我是通过MAC地址,区分不同的设备,因为我的需求中需要一

    2024年02月09日
    浏览(42)
  • 通过 EPOLL 解决客户端同时连接多服务器的问题

    项目需求是  程序上 同时配置了多个服务端 设备 每隔一段时间需要 比如1分钟 连一下服务器看下是否连通   并将结果上报给平台  原来是用线程池来做的   具体大概就是 定时器到了之后  遍历设备列表  找到设备之后  通过 socket连接 发送一个指令 等待服务器返回 用来

    2024年02月13日
    浏览(30)
  • OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换

            在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义         OPC UA全称为“开放性生产控制和统一架构”。简单来说,它是

    2024年01月20日
    浏览(28)
  • OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换[一]

            在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义         OPC UA全称为“开放性生产控制和统一架构”。简单来说,它是

    2024年01月16日
    浏览(38)
  • 【C#项目实战】OPC_DA客户端开发

    大家好,我是雷工。 之前练习过一个OPC客户端的样例,并总结了博文,记录了C#开发OPC客户端的一些知识: C#学习记录——【实例】C#实现OPC Client 最近看到一个不同的思路开发的OPC DA客户端,开发并测试了下,下面将开发过程记录如下。 开发OPC客户端程序,其访问接口方式

    2024年02月03日
    浏览(27)
  • 手机、电脑mqtt客户端通过腾讯云服务器远程连接ESP32

            本文将实现:         1、esp32与腾讯云物联网服务器通过mqtt协议通信         2、电脑和手机客户端通过mqtt与腾讯云相通信         3、腾讯云服务器内部消息转发,将手机、电脑发布的主题转发给esp32订阅,实现手机、电脑与esp32的远程通信。      

    2024年02月11日
    浏览(46)
  • Java 001:通过OPC UA协议连接KepServerEx进行读、写、订阅操作

    参考前辈的踩坑记录https://blog.csdn.net/weixin_45411740/article/details/124275985?spm=1001.2014.3001.5502,我Hyb在2023-3-15调通了自己的JavaOpcUaDemo。具体Java代码和KepServerEX延时补丁都在资源中。 第1步:安装激活KepServer,补丁在资源中,不详述。 第2步:在KepServer中做OpcUa配置。 2.1 先看桌面右下

    2024年02月08日
    浏览(30)
  • Hive连接异常:无法通过JDBC连接打开客户端传输(JDBC Uri: jdbc:hive2:// 大数据)

    Hive连接异常:无法通过JDBC连接打开客户端传输(JDBC Uri: jdbc:hive2:// 大数据) 在大数据领域中,Hive是一个常用的数据仓库解决方案,可以用于处理和分析大规模的结构化数据。然而,在使用Hive时,我们有时会遇到一些连接问题。其中之一就是\\\"Hive连接报错:Could not open clien

    2024年02月08日
    浏览(32)
  • QT实现客户端断开连接

    Widget.cpp Widget.h main.cpp

    2024年04月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包