【Opcua】 客户端读写时,Opcua Server信息返回处追溯(1)

2024-01-31 15:52

本文主要是介绍【Opcua】 客户端读写时,Opcua Server信息返回处追溯(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【Opcua】 客户端读写时,Opcua Server信息返回处追溯(1)

  • 前言
  • 从客户端角度展开分析
  • 从服务端角度展开分析


前言

基于前文【Node-RED】node-red-contrib-opcua-server模块使用(2)介绍,我们已经了解到NodeRed现有提供的组件已经无法满足服务端信息的再处理,同时根据前期的研究,Opcua Server提供的库中也不存在信号的回调。因此,目前想到的解决方案,是从修改底层代码出发,只要找到了客户端读写时,Opcua Server的信息返回处,那问题其实就简单了。

在追溯开始前,我们已经在博文【opcua】从编译文件到客户端的收发、断连、节点查询等实现中结束了opcua库的编译产生,因此本博文主要先从生成的编译文件展开分析,如果最终定位在这两个文件,那么只要修改这两个文件就行,其实也不难。
在这里插入图片描述

测试文件全放在了资源中,可以直接下载使用。

从客户端角度展开分析

整体思路是,当客户端发起读节点数据操作时候,最终会有一个信息返回,那么我们就根据这个读的函数一一研究就行,以辅以log 输出,代码模块如下:

//sht
UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "sendSymmetricServiceRequest before");
//
...
//sht
UA_LOG_INFO(&client->config.logger, UA_LOGCATEGORY_CLIENT, "sendSymmetricServiceRequest after");
//

初步判断出,函数调用整个流程如下;

  • UA_Client_readValueAttribute
  • __UA_Client_readAttribute
  • UA_Client_Service_read
  • __UA_Client_Service
  • sendSymmetricServiceRequest
  • UA_SecureChannel_sendSymmetricMessage
  • UA_MessageContext_finish
  • sendSymmetricChunk
  • connection->send(channel->connection, &mc->messageBuffer)

到这一步就难受了,因为send函数没有找到,那只能是封装了静态库lib里面了,不死心,以NodeRed 为服务端,qt 中为客户端,跑一下测试一下,整个思路是对的。
在这里插入图片描述

从服务端角度展开分析

客户端没有成功,直接从头文件看服务端的函数注释,最终发现UA_Server_read和__UA_Server_read可能存在相关性。通过log辅以查看:

//sht
UA_LOG_INFO(&server->config.logger, UA_LOGCATEGORY_SERVER, "UA_Server_read sht");//

然后以qt搭建opcua 服务器,nodeRed 为客户端,进行测试
在这里插入图片描述
只有在连接时候输出了 __UA_Server_read sht ,这意味着这两个方法与读没有关系。同时,根据头文件里面看到的服务端相关的函数,没有与信息返回有关系的,最终同样需要定位到了静态库。

由于静态库由vs编译而来,那得从编译前文件开始查起来,大海捞针,路漫漫。。。继续加油,这过程很有意思!

这篇关于【Opcua】 客户端读写时,Opcua Server信息返回处追溯(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/664296

相关文章

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进