【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编译而来,那得从编译前文件开始查起来,大海捞针,路漫漫。。。继续加油,这过程很有意思!

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

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

相关文章

【EI会议征稿通知】第四届信号图像处理与通信国际学术会议(ICSIPC 2024)

第四届信号图像处理与通信国际学术会议(ICSIPC 2024) 2024 4th International Conference on Signal Image Processing and Communication 第四届信号图像处理与通信国际学术会议(ICSIPC2024)将于2024年5月17日-19日在陕西西安再…

测试面试题(0101设计测试用例关键)

1. 测试计划 测试范围,本次改动的模块,新增了哪些功能测试策略,包含测试依据,测试准入标准,准出标准,测试重点及方法(确认功能的优先级),测试工具的选择测试管理&#x…

MySQL进阶之存储过程(变量)

存储过程 存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发 人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想上很简单,就…

用友NC Cloud及YonBIP PMCloudDriveProjectStateServlet JNDI注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

【伪类·HTML】

伪类 在 CSS 中,伪类是添加到选择器的关键字,给指定元素设置一些特殊状态,以 : 开头。 链接有以下四个状态。这四种状态也称之为超链接的伪类。 对于超链接的伪类,推荐的使用顺序是: :link - :visited - :hover - :a…

C++ STL库之Vector简介及例题(哈希表)(一)

文章目录 C STL库之Vector简介及例题(哈希表)(一)一、初始化二、数值操作例题题解哈希表简析C哈希表初始化C哈希表基本操作 C STL库之Vector简介及例题(哈希表)(一) Vector是一个能…

代码随想录刷题笔记-Day15

1. 完全二叉树的的节点个数 222. 完全二叉树的节点个数https://leetcode.cn/problems/count-complete-tree-nodes/ 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没…

幻兽帕鲁服务器多少钱?幻兽帕鲁服务器价格,2月最新

2024年幻兽帕鲁服务器价格表更新,阿里云、腾讯云和华为云Palworld服务器报价大全,4核16G幻兽帕鲁专用服务器阿里云26元、腾讯云32元、华为云26元,阿腾云atengyun.com分享幻兽帕鲁服务器优惠价格表,多配置报价: 幻兽帕鲁…

Spring Boot 中使用 Spring MVC基础

Spring MVC基础 一、控制器 controller1.定制控制器的方法(1)接收请求(2)接收请求参数(3)返回值 二、模型 Modle三、视图 View四、总结 Spring MVC 是非常著名的 Web 应用框架,现在的大多数 Web…

动态规划入门题目

动态规划(记忆化搜索): 将给定问题划分成若干子问题,直到子问题可以被直接解决。然后把子问题的答保存下来以免重复计算,然后根据子问题反推出原问题解的方法 动态规划也称为递推(暴力深搜记忆中间状态结果…

MySQL-运算符

文章目录 1. 运算符概述2. 算术运算符3. 比较运算符4. 逻辑运算符5. 位运算符 1. 运算符概述 在 MySQL 中,可以通过运算符来获取表结构以外的另一种数据。MySQL 所提供的运算符可以直接对表中数据或字段进行运算,进而实现用户的新需求,增强了…

【C++】类和对象之构造函数、析构函数、拷贝构造函数(二)

前言:在上一篇我们对于C中类和对象有了一个初步的了解,今天我们将进一步的学习,今天我们目标是对构造函数、析构函数、拷贝构造函数进行一个初步学习在后面也会进一步的学习,一起加油呐! 💖 博主CSDN主页:卫…

幻兽帕鲁服务器多少钱——幻兽帕鲁服务器价格介绍

2024年幻兽帕鲁服务器价格表更新,阿里云、腾讯云和华为云Palworld服务器报价大全,4核16G幻兽帕鲁专用服务器阿里云26元、腾讯云32元、华为云26元,阿腾云atengyun.com分享幻兽帕鲁服务器优惠价格表,多配置报价: 幻兽帕鲁…

c++vector解释

C中的vector是一种容器&#xff0c;用于存储一组同类型的元素。它类似于数组&#xff0c;但具有更多的功能和灵活性。vector可以自动调整大小&#xff0c;允许动态插入和删除元素。 使用vector之前&#xff0c;需要包含<vector>头文件。然后可以使用vector模板类来创建v…

Windows Service 2008虚拟机安装mysql service 5.7并实现远程连接

安装前必读 mysql好像在5.7.20版本之后的绿色压缩包版解压都没有my.ini或者my-default.ini配置文件了&#xff0c;需要自己添加配置。 也没有data数据库文件夹&#xff0c;data文件夹不能自己新建&#xff0c;需要命令initialize初始化建立。 my-default.ini文件存不存在不重要…

【影像组学入门百问】#93---#96

#93-如何实现影像组学特征的可视化&#xff1f; 特征映射实现影像组学特征的可视化是将特征值映射回原始医学图像上的对应体素&#xff0c;从而直观地展示特征在图像中的分布。通过特征映射&#xff0c;我们可以观察到哪些区域与特定特征更相关&#xff0c;以便更好地理解病变…

知识点积累系列(八)各种IDE编辑器篇【持续更新】

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 知识点积累 系列文章的第八篇&#xff0c;记录日常学习中遇到的 各种IDE编辑器 相关的知识点 1.VS Code 1.1.launch.json是干嘛的 launch.json 文件的主要作用是提供一个结构化的配置方式&#xff0c;以便在V…

JavaWeb学习|Session

学习材料声明 所有知识点都来自互联网&#xff0c;进行总结和梳理&#xff0c;侵权必删。 引用来源&#xff1a;尚硅谷最新版JavaWeb全套教程,java web零基础入门完整版 Session 1、Session 就一个接口&#xff08;HttpSession&#xff09;。 2、Session 就是会话。它是用来…

[ESP32]在Thonny IDE中,如何將MicroPython firmware燒錄到ESP32開發板中?

[ESP32 I MicroPython] Flash Firmware by Thonny(4.1.4) IDE 正常安裝流程&#xff0c;可參考上述影片。然而&#xff0c;本篇文章主要是紀錄安裝過程遇到的bug, 供未來查詢用&#xff0c;也一併供有需要的同好參考。 問題:安裝後&#xff0c;Thonny互動介面顯示一堆亂碼和co…

【lesson26】学习MySQL事务前的基础知识

文章目录 CURD不加控制&#xff0c;会有什么问题&#xff1f;CURD满足什么属性&#xff0c;能解决上述问题&#xff1f;什么是事务&#xff1f;为什么会出现事务事务的版本支持 CURD不加控制&#xff0c;会有什么问题&#xff1f; CURD满足什么属性&#xff0c;能解决上述问题&…