网站不见了,成品人和精品人的区别在哪里,网站建设实验分析总结,计算机网站建设是什么意思【Opcua】 客户端读写时#xff0c;Opcua Server信息返回处追溯#xff08;1#xff09; 前言从客户端角度展开分析从服务端角度展开分析 前言
基于前文【Node-RED】node-red-contrib-opcua-server模块使用#xff08;2#xff09;介绍#xff0c;我们已经了解到NodeRed… 【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_readAttributeUA_Client_Service_read__UA_Client_ServicesendSymmetricServiceRequestUA_SecureChannel_sendSymmetricMessageUA_MessageContext_finishsendSymmetricChunkconnection-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编译而来那得从编译前文件开始查起来大海捞针路漫漫。。。继续加油这过程很有意思