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) |
| 获取路径搜索必要信息
|
|
bool | ok () const |
| 是否成功创建客户端
|
|
void | spin () |
| 在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理
|
|
void | spinOnce () |
| 在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理
|
|
Variable | read (const UA_NodeId &node) |
| 从指定的变量节点读数据
|
|
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 中的方法
|
|
UA_NodeId | addViewNode (const View &view) |
| 添加视图节点 ViewNode 至 ViewsFolder 中
|
|
bool | monitor (UA_NodeId node, UA_Client_DataChangeNotificationCallback on_change, uint32_t queue_size) |
| 创建变量节点监视项,以实现订阅节点的功能
|
|
bool | monitor (UA_NodeId node, 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 |
◆ addViewNode()
UA_NodeId rm::Client::addViewNode |
( |
const View & | view | ) |
|
添加视图节点 ViewNode 至 ViewsFolder
中
- 参数
-
- 返回
- 添加至服务器后,对应视图节点的唯一标识
UA_NodeId
◆ 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] 元组 |
- 示例
- samples/opcua/opcua_client.cpp.
◆ monitor() [1/2]
bool rm::Client::monitor |
( |
UA_NodeId | node, |
|
|
const std::vector< std::string > & | names, |
|
|
UA_Client_EventNotificationCallback | on_event ) |
创建事件监视项,以实现事件的订阅功能
- 参数
-
[in] | node | 待监视节点的 UA_NodeId |
[in] | names | 关注的事件属性名列表,参考 Event::data() |
[in] | on_event | 事件回调函数 |
- 返回
- 事件监视创建成功?
◆ monitor() [2/2]
bool rm::Client::monitor |
( |
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 | 通知存放的队列大小,若队列已满,新的通知会覆盖旧的通知 |
- 返回
- 变量节点监视创建成功?
◆ ok()
bool rm::Client::ok |
( |
| ) |
const |
|
inline |
◆ read()
Variable rm::Client::read |
( |
const UA_NodeId & | node | ) |
|
◆ spin()
void rm::Client::spin |
( |
| ) |
|
在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理
- 执行事件循环,等效于 ROS/ROS2 工具包中的
ros::spin()
以及 rclcpp::spin()
◆ spinOnce()
void rm::Client::spinOnce |
( |
| ) |
|
在网络上监听并处理到达的异步响应,同时进行内部维护、安全通道的更新和订阅管理
- 处理当前已到来的事件,等效于 ROS/ROS2 工具包中的
ros::spinOnce()
以及 rclcpp::spin_some()
◆ write()
bool rm::Client::write |
( |
const UA_NodeId & | node, |
|
|
const Variable & | val ) |
给指定的变量节点写数据
- 参数
-
[in] | node | 既存的变量节点的 UA_NodeId |
[in] | val | 待写入的数据 |
- 返回
- 是否写入成功
该类的文档由以下文件生成: