OPC UA 客户端
更多...
#include <rmvl/opcua/client.hpp>
|
| 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) |
| 创建事件监视项,以实现事件的订阅功能 更多...
|
|
◆ Client() [1/3]
rm::Client::Client |
( |
std::string_view |
address, |
|
|
UserConfig |
usr = {} |
|
) |
| |
创建新的客户端对象,并建立连接
- 参数
-
[in] | address | 连接地址,形如 opc.tcp://127.0.0.1:4840 |
[in] | usr | 用户信息 |
◆ ~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()
获取路径搜索必要信息
需要配合管道运算符 |
完成路径搜索
auto dst_mode = src_node | clt.find("person") | clt.find("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 中的订阅话题,这里是订阅变量节点
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 |
|
) |
| |
◆ write()
bool rm::Client::write |
( |
const UA_NodeId & |
node, |
|
|
const Variable & |
val |
|
) |
| |
给指定的变量节点写数据
- 参数
-
[in] | node | 既存的变量节点的 UA_NodeId |
[in] | val | 待写入的数据 |
- 返回
- 是否写入成功
该类的文档由以下文件生成: