RMVL  1.1.0
RoboMaster Vision Library
Public 成员函数 | 所有成员列表

OPC UA 客户端 更多...

#include <rmvl/opcua/client.hpp>

rm::Client 的协作图:

Public 成员函数

 Client (std::string_view address, UserConfig usr={})
 创建新的客户端对象,并建立连接 更多...
 
 ~Client ()
 
 Client (const Client &)=delete
 
 Client (Client &&)=delete
 
FindNodeInClient find (const std::string &browse_name)
 获取路径搜索必要信息 更多...
 
void spin ()
 在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理 更多...
 
void spinOnce ()
 在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理 更多...
 
bool read (const UA_NodeId &node, Variable &val)
 从指定的变量节点读数据 更多...
 
bool write (const UA_NodeId &node, const Variable &val)
 给指定的变量节点写数据 更多...
 
bool call (const UA_NodeId &obj_node, const std::string &name, const std::vector< Variable > &inputs, std::vector< Variable > &outputs)
 在客户端调用指定对象节点中的方法 更多...
 
bool call (const std::string &name, const std::vector< Variable > &inputs, std::vector< Variable > &outputs)
 在客户端调用 ObjectsFolder 中的方法 更多...
 
bool subscribe (UA_NodeId node, UA_Client_DataChangeNotificationCallback on_change, uint32_t queue_size)
 创建变量节点监视项,以实现订阅节点的功能 更多...
 
bool subscribe (UA_NodeId node_id, const std::vector< std::string > &names, UA_Client_EventNotificationCallback on_event)
 创建事件监视项,以实现事件的订阅功能 更多...
 

详细描述

OPC UA 客户端

构造及析构函数说明

◆ Client() [1/3]

rm::Client::Client ( std::string_view  address,
UserConfig  usr = {} 
)

创建新的客户端对象,并建立连接

参数
[in]address连接地址,形如 opc.tcp://127.0.0.1:4840
[in]usr用户信息

◆ ~Client()

rm::Client::~Client ( )

◆ Client() [2/3]

rm::Client::Client ( const Client )
delete

◆ Client() [3/3]

rm::Client::Client ( Client &&  )
delete

成员函数说明

◆ call() [1/2]

bool rm::Client::call ( const std::string &  name,
const std::vector< Variable > &  inputs,
std::vector< Variable > &  outputs 
)
inline

在客户端调用 ObjectsFolder 中的方法

参数
[in]name方法名
[in]inputs输入参数列表
[out]outputs输出参数列表
返回
是否成功完成当前操作
函数调用图:

◆ call() [2/2]

bool rm::Client::call ( const UA_NodeId &  obj_node,
const std::string &  name,
const std::vector< Variable > &  inputs,
std::vector< Variable > &  outputs 
)

在客户端调用指定对象节点中的方法

参数
[in]obj_node对象节点
[in]name方法名
[in]inputs输入参数列表
[out]outputs输出参数列表
返回
是否成功完成当前操作

◆ find()

FindNodeInClient rm::Client::find ( const std::string &  browse_name)
inline

获取路径搜索必要信息

需要配合管道运算符 | 完成路径搜索

auto dst_mode = src_node | clt.find("person") | clt.find("name");
参数
[in]browse_name浏览名
返回
目标节点信息
返回值
fnic[_client, browse_name] 元组

◆ read()

bool rm::Client::read ( const UA_NodeId &  node,
Variable val 
)

从指定的变量节点读数据

参数
[in]node既存的变量节点的 UA_NodeId
[out]val读出的用 rm::Variable 表示的数据,未成功读取则返回空
返回
是否读取成功

◆ spin()

void rm::Client::spin ( )

在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理

  • 执行事件循环,等效于 ROS/ROS2 工具包中的 ros::spin() 以及 rclcpp::spin()

◆ spinOnce()

void rm::Client::spinOnce ( )

在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理

  • 处理当前已到来的事件,等效于 ROS/ROS2 工具包中的 ros::spinOnce() 以及 rclcpp::spin_some()

◆ subscribe() [1/2]

bool rm::Client::subscribe ( UA_NodeId  node,
UA_Client_DataChangeNotificationCallback  on_change,
uint32_t  queue_size 
)

创建变量节点监视项,以实现订阅节点的功能

  • 服务器在设定的采样频率 opcua_param.SAMPLING_INTERVAL 下监视变量,若发生更改会尝试发出通知,通知的发送频率受到 opcua_param.PUBLISHING_INTERVAL 控制。当客户端收到通知时,执行 on_change 回调函数
  • 类似于 ROS 中的订阅话题,这里是订阅变量节点
    // on_change 回调函数的用法示例,假设订阅的变量节点为 Int32 类型
    void on_change(UA_Client *client, UA_UInt32 sub_id, void *sub_context,
    UA_UInt32 mon_id, void *mon_context, UA_DataValue *value)
    {
    UA_Int32 current_value = *reinterpret_cast<UA_Int32 *>(value->value.data);
    // 显示当前值
    UA_LOG_INFO(UA_Log_Stdout, UA_LOGCATEGORY_CLIENT, "current value: %d", current_value);
    }
参数
[in]node待监视节点的 UA_NodeId
[in]on_change数据变更回调函数
[in]queue_size通知存放的队列大小,若队列已满,新的通知会覆盖旧的通知
返回
是否成功订阅变量节点?

◆ subscribe() [2/2]

bool rm::Client::subscribe ( UA_NodeId  node_id,
const std::vector< std::string > &  names,
UA_Client_EventNotificationCallback  on_event 
)

创建事件监视项,以实现事件的订阅功能

参数
[in]node_id待监视节点的 UA_NodeId
[in]names关注的事件属性名列表
参见
rm::Event::getProperties()
参数
[in]on_event事件回调函数
返回
是否成功订阅事件?

◆ write()

bool rm::Client::write ( const UA_NodeId &  node,
const Variable val 
)

给指定的变量节点写数据

参数
[in]node既存的变量节点的 UA_NodeId
[in]val待写入的数据
返回
是否写入成功

该类的文档由以下文件生成: