【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

相关文章

ShardingSphere之读写分离方式

《ShardingSphere之读写分离方式》:本文主要介绍ShardingSphere之读写分离方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录ShardingSphere-读写分离读写分离mysql主从集群创建 user 表主节点执行见表语句项目代码读写分

Windows Server 2025 搭建NPS-Radius服务器的步骤

《WindowsServer2025搭建NPS-Radius服务器的步骤》本文主要介绍了通过微软的NPS角色实现一个Radius服务器,身份验证和证书使用微软ADCS、ADDS,具有一定的参考价... 目录简介示意图什么是 802.1X?核心作用802.1X的组成角色工作流程简述802.1X常见应用802.

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

C#使用MQTTnet实现服务端与客户端的通讯的示例

《C#使用MQTTnet实现服务端与客户端的通讯的示例》本文主要介绍了C#使用MQTTnet实现服务端与客户端的通讯的示例,包括协议特性、连接管理、QoS机制和安全策略,具有一定的参考价值,感兴趣的可... 目录一、MQTT 协议简介二、MQTT 协议核心特性三、MQTTNET 库的核心功能四、服务端(BR

SQL Server身份验证模式步骤和示例代码

《SQLServer身份验证模式步骤和示例代码》SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证,本文将详细介绍身份... 目录身份验证方式的概念更改身份验证方式的步骤方法一:使用SQL Server Management S

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

《SQLServer中的PIVOT与UNPIVOT用法具体示例详解》这篇文章主要给大家介绍了关于SQLServer中的PIVOT与UNPIVOT用法的具体示例,SQLServer中PIVOT和U... 目录引言一、PIVOT:将行转换为列核心作用语法结构实战示例二、UNPIVOT:将列编程转换为行核心作用语

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程

springboot实现配置文件关键信息加解密

《springboot实现配置文件关键信息加解密》在项目配置文件中常常会配置如数据库连接信息,redis连接信息等,连接密码明文配置在配置文件中会很不安全,所以本文就来聊聊如何使用springboot... 目录前言方案实践1、第一种方案2、第二种方案前言在项目配置文件中常常会配置如数据库连接信息、Red

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服