RMVL  2.2.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到
rm::Client类 参考

OPC UA 客户端 更多...

#include <rmvl/opcua/client.hpp>

rm::Client 的协作图:

Public 成员函数

 Client (std::string_view address, const UserConfig &user={})
 创建新的客户端对象,并建立连接
 
 ~Client ()
 断开与服务器的连接,并释放资源
 
 operator ClientView () const
 
bool ok () const
 是否成功创建客户端并成功连接到服务器
 
void spin () const
 在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理
 
void spinOnce () const
 在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理
 
bool shutdown ()
 断开与服务器的连接
 
FindNodeInClient node (std::string_view browse_name, uint16_t ns=1U) const
 获取路径搜索必要信息
 
NodeId find (std::string_view browse_path, const NodeId &src_nd=nodeObjectsFolder) const noexcept
 通过 BrowseName 的路径搜索命名空间 ns1 的节点
 
Variable read (const NodeId &node) const
 从指定的变量节点读数据
 
bool write (const NodeId &node, const Variable &val) const
 给指定的变量节点写数据
 
std::pair< bool, Variablescall (const NodeId &obj_nd, std::string_view name, const Variables &inputs) const
 在客户端调用指定对象节点中的方法
 
std::pair< bool, Variablescall (std::string_view name, const Variables &inputs) const
 在客户端调用 ObjectsFolder 中的方法
 
NodeId addViewNode (const View &view) const
 添加 OPC UA 视图节点 ViewNode 至 ViewsFolder
 
bool monitor (NodeId nd, DataChangeNotificationCallback on_change, uint32_t q_size=10)
 创建变量节点监视项,以实现订阅节点的功能
 
bool monitor (const std::vector< std::string > &names, EventNotificationCallback on_event)
 创建事件监视项,以实现事件的订阅功能
 
bool remove (NodeId nd)
 移除监视项
 

详细描述

OPC UA 客户端

示例
samples/opcua/opcua_client.cpp.

构造及析构函数说明

◆ Client()

rm::Client::Client ( std::string_view address,
const UserConfig & user = {} )
Python:
rm.Client(address[, user]) -> <Client object>

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

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

◆ ~Client()

rm::Client::~Client ( )

断开与服务器的连接,并释放资源

成员函数说明

◆ addViewNode()

NodeId rm::Client::addViewNode ( const View & view) const
Python:
rm.Client.addViewNode(view) -> nd

添加 OPC UA 视图节点 ViewNode 至 ViewsFolder

参数
[in]viewrm::View 表示的视图
返回
添加至服务器后,对应视图节点的唯一标识 NodeId

◆ call() [1/2]

std::pair< bool, Variables > rm::Client::call ( const NodeId & obj_nd,
std::string_view name,
const Variables & inputs ) const
Python:
rm.Client.call(obj_nd, name, inputs) -> res, outputs
rm.Client.call(name, inputs) -> res, outputs

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

参数
[in]obj_nd对象节点
[in]name方法名
[in]inputs输入参数列表
返回值
res,oargs
返回
是否成功完成当前操作,以及输出参数列表
示例
samples/opcua/opcua_client.cpp.

◆ call() [2/2]

std::pair< bool, Variables > rm::Client::call ( std::string_view name,
const Variables & inputs ) const
inline
Python:
rm.Client.call(obj_nd, name, inputs) -> res, outputs
rm.Client.call(name, inputs) -> res, outputs

在客户端调用 ObjectsFolder 中的方法

参数
[in]name方法名 browse_name
[in]inputs输入参数列表
返回值
res,oargs
返回
是否成功完成当前操作,以及输出参数列表
函数调用图:

◆ find()

NodeId rm::Client::find ( std::string_view browse_path,
const NodeId & src_nd = nodeObjectsFolder ) const
noexcept
Python:
rm.Client.find(browse_path[, src_nd]) -> nd

通过 BrowseName 的路径搜索命名空间 ns1 的节点

参数
[in]browse_pathBrowseName 路径,使用 / 分隔
[in]src_nd源节点 ID,默认为 rm::nodeObjectsFolder
返回
节点 ID
auto node = cli.find("person/name", src_nd);
// 等效于 auto node = src_nd | cli.node("person") | cli.node("name");
FindNodeInClient node(std::string_view browse_name, uint16_t ns=1U) const
获取路径搜索必要信息
定义 client.hpp:177
示例
samples/opcua/opcua_client.cpp.

◆ monitor() [1/2]

bool rm::Client::monitor ( const std::vector< std::string > & names,
EventNotificationCallback on_event )
Python:
rm.Client.monitor(nd, on_change[, q_size]) -> <success ?>
rm.Client.monitor(names, on_event) -> <success ?>

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

参数
[in]names关注的事件属性名列表,参考 Event::data()
[in]on_event事件回调函数
返回
事件监视创建成功?

◆ monitor() [2/2]

bool rm::Client::monitor ( NodeId nd,
DataChangeNotificationCallback on_change,
uint32_t q_size = 10 )
Python:
rm.Client.monitor(nd, on_change[, q_size]) -> <success ?>
rm.Client.monitor(names, on_event) -> <success ?>

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

  • 服务器在设定的采样频率 opcua_param.SAMPLING_INTERVAL 下监视变量,若发生更改会尝试发出通知,通知的发送频率受到 opcua_param.PUBLISHING_INTERVAL 控制。当客户端收到通知时,执行 on_change 回调函数
  • 类似于 ROS 中的订阅话题,这里是订阅变量节点
参数
[in]nd待监视节点的 NodeId
[in]on_change数据变更可调用对象
[in]q_size通知存放的队列大小,若队列已满,新的通知会覆盖旧的通知,默认为 10
返回
变量节点监视创建成功?

◆ node()

FindNodeInClient rm::Client::node ( std::string_view browse_name,
uint16_t ns = 1U ) const
inline

获取路径搜索必要信息

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

auto dst_mode = src_node | cli.node("person") | cli.node("name");
参数
[in]browse_name浏览名
[in]ns命名空间索引,默认为 1
返回
目标节点信息
返回值
fnic[_client, browse_name] 元组

◆ ok()

bool rm::Client::ok ( ) const
inline
Python:
rm.Client.ok() -> <Is Connected ?>

是否成功创建客户端并成功连接到服务器

示例
samples/opcua/opcua_client.cpp.

◆ operator ClientView()

rm::Client::operator ClientView ( ) const
inline

◆ read()

Variable rm::Client::read ( const NodeId & node) const
Python:
rm.Client.read(node) -> val

从指定的变量节点读数据

参数
[in]node既存的变量节点的 NodeId
返回
读出的用 rm::Variable 表示的数据,未成功读取则返回空
示例
samples/opcua/opcua_client.cpp.
函数调用图:

◆ remove()

bool rm::Client::remove ( NodeId nd)
Python:
rm.Client.remove(nd) -> <success ?>

移除监视项

参数
[in]nd待移除监视项的节点号
返回
是否成功移除监视项

◆ shutdown()

bool rm::Client::shutdown ( )
Python:
rm.Client.shutdown() -> <success ?>

断开与服务器的连接

◆ spin()

void rm::Client::spin ( ) const

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

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

◆ spinOnce()

void rm::Client::spinOnce ( ) const
Python:
rm.Client.spinOnce() -> None

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

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

◆ write()

bool rm::Client::write ( const NodeId & node,
const Variable & val ) const
Python:
rm.Client.write(node, val) -> <success ?>

给指定的变量节点写数据

参数
[in]node既存的变量节点的 NodeId
[in]val待写入的数据
返回
是否写入成功
示例
samples/opcua/opcua_client.cpp.
函数调用图:

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