ZBLOG

UA_Client_readValueAttribute

下面是一个示例的C++接口封装,将UA_Client_readValueAttribute函数封装成一个类的成员函数:

  1. #include <open62541/client.h>
  2. class UaClient {
  3. public:
  4. UaClient();
  5. ~UaClient();
  6. bool connect();
  7. void disconnect();
  8. bool readValueAttribute(const UA_NodeId& nodeId, UA_Variant* value);
  9. private:
  10. UA_Client* m_client;
  11. };
  12. UaClient::UaClient() {
  13. m_client = UA_Client_new();
  14. }
  15. UaClient::~UaClient() {
  16. UA_Client_delete(m_client);
  17. }
  18. bool UaClient::connect() {
  19. UA_ClientConfig_setDefault(UA_Client_getConfig(m_client));
  20. UA_StatusCode status = UA_Client_connect(m_client, "opc.tcp://localhost:4840");
  21. if (status != UA_STATUSCODE_GOOD) {
  22. return false;
  23. }
  24. return true;
  25. }
  26. void UaClient::disconnect() {
  27. UA_Client_disconnect(m_client);
  28. }
  29. bool UaClient::readValueAttribute(const UA_NodeId& nodeId, UA_Variant* value) {
  30. // 将UA_Client_readValueAttribute函数的调用代码放在这里
  31. UA_ReadValueId readValueId;
  32. readValueId.nodeId = nodeId;
  33. readValueId.attributeId = UA_ATTRIBUTEID_VALUE;
  34. UA_ReadRequest request;
  35. request.nodesToRead = &readValueId;
  36. request.nodesToReadSize = 1;
  37. UA_ReadResponse response = UA_Client_Service_read(m_client, request);
  38. if (response.responseHeader.serviceResult == UA_STATUSCODE_GOOD &&
  39. response.resultsSize > 0 && response.results[0].hasValue) {
  40. *value = response.results[0].value.value;
  41. // 释放response内存
  42. for (size_t i = 0; i < response.resultsSize; ++i) {
  43. UA_Variant_deleteMembers(&response.results[i].value.value);
  44. }
  45. UA_ReadResponse_deleteMembers(&response);
  46. return true;
  47. }
  48. // 释放response内存
  49. for (size_t i = 0; i < response.resultsSize; ++i) {
  50. UA_Variant_deleteMembers(&response.results[i].value.value);
  51. }
  52. UA_ReadResponse_deleteMembers(&response);
  53. return false;
  54. }
  55. int main() {
  56. UaClient client;
  57. if (!client.connect()) {
  58. // 连接失败处理逻辑
  59. return -1;
  60. }
  61. // 调用readValueAttribute方法读取节点值
  62. client.disconnect();
  63. return 0;
  64. }

请注意,这只是一个简单示例,并且仅包含了部分功能。根据具体情况,您可能需要进行进一步的封装和错误处理。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=15557

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?