OPC UA 客户端
更多...
#include <rmvl/opcua/client.hpp>
|
| 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 的路径搜索命名空间 ns 为 1 的节点
|
|
Variable | read (const NodeId &node) const |
| 从指定的变量节点读数据
|
|
bool | write (const NodeId &node, const Variable &val) const |
| 给指定的变量节点写数据
|
|
std::pair< bool, Variables > | call (const NodeId &obj_nd, std::string_view name, const Variables &inputs) const |
| 在客户端调用指定对象节点中的方法
|
|
std::pair< bool, Variables > | call (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 (NodeId nd, const std::vector< std::string > &names, EventNotificationCallback on_event) |
| 创建事件监视项,以实现事件的订阅功能
|
|
bool | remove (NodeId nd) |
| 移除监视项
|
|
◆ 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()
◆ addViewNode()
NodeId rm::Client::addViewNode |
( |
const View & | view | ) |
const |
Python: |
---|
| rm.Client.addViewNode( | view | ) -> | nd |
添加 OPC UA 视图节点 ViewNode 至 ViewsFolder
中
- 参数
-
- 返回
- 添加至服务器后,对应视图节点的唯一标识
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 |
◆ 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 | 输入参数列表 |
- 返回值
-
- 返回
- 是否成功完成当前操作,以及输出参数列表
◆ find()
Python: |
---|
| rm.Client.find( | browse_path[, src_nd] | ) -> | nd |
通过 BrowseName 的路径搜索命名空间 ns
为 1
的节点
- 参数
-
- 返回
- 节点 ID
auto node = cli.find(
"person/name", src_nd);
FindNodeInClient node(std::string_view browse_name, uint16_t ns=1U) const
获取路径搜索必要信息
定义 client.hpp:177
◆ monitor() [1/2]
Python: |
---|
| rm.Client.monitor( | nd, on_change[, q_size] | ) -> | <success ?> |
| rm.Client.monitor( | nd, names, on_event | ) -> | <success ?> |
创建事件监视项,以实现事件的订阅功能
- 参数
-
- 返回
- 事件监视创建成功?
◆ monitor() [2/2]
Python: |
---|
| rm.Client.monitor( | nd, on_change[, q_size] | ) -> | <success ?> |
| rm.Client.monitor( | nd, 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 ?> |
◆ operator ClientView()
◆ read()
Python: |
---|
| rm.Client.read( | node | ) -> | val |
◆ remove()
bool rm::Client::remove |
( |
NodeId | nd | ) |
|
Python: |
---|
| rm.Client.remove( | nd | ) -> | <success ?> |
◆ 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 | 待写入的数据 |
- 返回
- 是否写入成功
该类的文档由以下文件生成: