| RMVL 1.5.2 Robotic Manipulation and Vision Library

载入中...
搜索中...
未找到
Public 类型 | Public 成员函数 | Protected 属性 | 所有成员列表
rm::Server类 参考
基于 open62541 的 OPC UA 二次开发库

OPC UA 服务器 更多...

`#include <rmvl/opcua/server.hpp>`

类 rm::Server 继承关系图:
rm::Server 的协作图:

## Public 类型
using | ValueCallbackWrapper = std::pair<ValueCallbackBeforeRead, ValueCallbackAfterWrite>
using | DataSourceCallbackWrapper = std::pair<DataSourceRead, DataSourceWrite>

## Public 成员函数
| Server (uint16_t port, std::string_view name={}, const std::vector< UserConfig > &users={})
| 创建 OPC UA 服务器
| Server (ServerUserConfig on_config, uint16_t port, std::string_view name={}, const std::vector< UserConfig > &users={})
| 从服务器配置函数指针创建 OPC UA 服务器
| Server (const Server &)=delete
| Server (Server &&srv)=delete
| operator ServerView () const
void | start ()
| 运行服务器，调用方线程不阻塞
void | stop ()
| 停止服务器
void | join ()
| 阻塞
| ~Server ()
FindNodeInServer | find (std::string_view browse_name, uint16_t ns=1U) const
| 获取路径搜索必要信息
NodeId | addVariableTypeNode (const VariableType &vtype) const
| 添加变量类型节点 VariableTypeNode 至 `BaseDataVariableType` 中
NodeId | addVariableNode (const Variable &val, const NodeId &parent_id=nodeObjectsFolder) const noexcept
| 添加变量节点 VariableNode 至指定父节点中，并指定引用类型
bool | addVariableNodeValueCallback (NodeId id, ValueCallbackBeforeRead before_read, ValueCallbackAfterWrite after_write) const noexcept
| 为既有的变量节点 VariableNode 添加值回调
NodeId | addDataSourceVariableNode (const Variable &val, DataSourceRead on_read, DataSourceWrite on_write, NodeId parent_id=nodeObjectsFolder) const noexcept
| 添加数据源变量节点 VariableNode 至指定父节点中
Variable | read (const NodeId &node) const
| 从指定的变量节点读数据
bool | write (const NodeId &node, const Variable &val) const
| 给指定的变量节点写数据
NodeId | addMethodNode (const Method &method, const NodeId &parent_id=nodeObjectsFolder) const
| 添加方法节点 MethodNode 至指定父节点中
void | setMethodNodeCallBack (const NodeId &id, MethodCallback on_method) const
| 为既有的方法节点 MethodNode 设置方法的回调函数
NodeId | addObjectTypeNode (const ObjectType &otype) const
| 添加对象类型节点 ObjectTypeNode 至 `rm::nodeBaseObjectType` 中
NodeId | addObjectNode (const Object &obj, NodeId parent_id=nodeObjectsFolder) const
| 添加对象节点 ObjectNode 至指定的父节点中
NodeId | addViewNode (const View &view) const
| 添加视图节点 ViewNode 至 `rm::nodeViewsFolder` 中
NodeId | addEventTypeNode (const EventType &etype) const
| 添加事件类型至 `BaseEventType` 中
bool | triggerEvent (const NodeId &node_id, const Event &event) const
| 创建并触发事件

## Protected 属性
UA_Server * | _server
| OPC UA 服务器指针
bool | _running {}
| 服务器运行状态
std::thread | _run
| 服务器运行线程

## 详细描述

OPC UA 服务器

示例
  samples/opcua/opcua_server.cpp.

## 成员类型定义说明

## ◆ DataSourceCallbackWrapper

using rm::Server::DataSourceCallbackWrapper = std::pair<DataSourceRead, DataSourceWrite>

## ◆ ValueCallbackWrapper

using rm::Server::ValueCallbackWrapper = std::pair<ValueCallbackBeforeRead, ValueCallbackAfterWrite>

## 构造及析构函数说明

## ◆ Server() [1/4]

rm::Server::Server | ( | uint16_t | port,
|  | std::string_view | name = {},
|  | const std::vector< UserConfig > & | users = {} )

创建 OPC UA 服务器

参数

  [in] | port | OPC UA 服务器端口号，一般设置为 `4840U`
  [in] | name | OPC UA 服务器名称，为空则采用默认值 `open62541-based OPC UA Application`
  [in] | users | 用户列表

参见
  UserConfig

## ◆ Server() [2/4]

rm::Server::Server | ( | ServerUserConfig | on_config,
|  | uint16_t | port,
|  | std::string_view | name = {},
|  | const std::vector< UserConfig > & | users = {} )

从服务器配置函数指针创建 OPC UA 服务器

- 服务器配置函数指针需提供 `*.xml` 文件，并由 `nodeset_compiler` 生成
- 关于 `*.xml` 文件的编写，参考 4.2 从 XML 配置 OPC UA

参数

  [in] | on_config | 服务器配置函数指针
  [in] | port | OPC UA 服务器端口号，一般设置为 `4840U`
  [in] | name | OPC UA 服务器名称，为空则采用默认值 `open62541-based OPC UA Application`
  [in] | users | 用户列表

参见
  UserConfig

## ◆ Server() [3/4]

rm::Server::Server | ( | const Server & |  | ) |
| delete

函数调用图:

## ◆ Server() [4/4]

rm::Server::Server | ( | Server && | srv | ) |
| delete

函数调用图:

## ◆ ~Server()

rm::Server::~Server | ( |  | ) |

## 成员函数说明

## ◆ addDataSourceVariableNode()

NodeId rm::Server::addDataSourceVariableNode | ( | const Variable & | val,
|  | DataSourceRead | on_read,
|  | DataSourceWrite | on_write,
|  | NodeId | parent_id = nodeObjectsFolder ) const
| noexcept

添加数据源变量节点 VariableNode 至指定父节点中

数据源变量节点不同于变量节点的值回调

- 值回调是在现有变量节点之上添加读取 前 和写入 后 的回调函数，本质上仍然是从服务器中获取数据
- 数据源变量节点会把每次 IO 都绑定到各自的回调函数中，即可以重定向到一个实际的物理过程中，从而跟服务器本身的数据读写脱离关系

参数

  [in] | val | `rm::Variable` 表示的变量，仅取 `browse_name`、`description`、`display_name`、`access_level` 以及 `ns` 字段，以及对应的变量类型节点
  [in] | on_read | 重定向的读取回调函数
  [in] | on_write | 重定向的写入回调函数
  [in] | parent_id | 指定父节点的 `NodeId`，默认为 `rm::nodeObjectsFolder`

返回
  添加至服务器后，对应数据源变量节点的唯一标识 `NodeId`

函数调用图:

## ◆ addEventTypeNode()

NodeId rm::Server::addEventTypeNode | ( | const EventType & | etype | ) | const

添加事件类型至 `BaseEventType` 中

参数

  [in] | etype | `rm::EventType` 表示的事件类型

返回
  添加至服务器后，对应事件类型的唯一标识 `NodeId`

## ◆ addMethodNode()

NodeId rm::Server::addMethodNode | ( | const Method & | method,
|  | const NodeId & | parent_id = nodeObjectsFolder ) const

添加方法节点 MethodNode 至指定父节点中

参数

  [in] | method | `rm::Method` 表示的方法
  [in] | parent_id | 指定父节点的 `NodeId`，默认为 `rm::nodeObjectsFolder`

返回
  添加至服务器后，对应方法节点的唯一标识 `NodeId`

函数调用图:

## ◆ addObjectNode()

NodeId rm::Server::addObjectNode | ( | const Object & | obj,
|  | NodeId | parent_id = nodeObjectsFolder ) const

添加对象节点 ObjectNode 至指定的父节点中

参数

  [in] | obj | `rm::Object` 表示的对象
  [in] | parent_id | 指定的父节点 `NodeId`，默认为 `rm::nodeObjectsFolder`

返回
  添加至服务器后，对应对象节点的唯一标识 `NodeId`

函数调用图:

## ◆ addObjectTypeNode()

NodeId rm::Server::addObjectTypeNode | ( | const ObjectType & | otype | ) | const

添加对象类型节点 ObjectTypeNode 至 `rm::nodeBaseObjectType` 中

参数

  [in] | otype | `rm::ObjectType` 表示的对象类型

返回
  添加至服务器后，对应对象类型节点的唯一标识 `NodeId`

## ◆ addVariableNode()

NodeId rm::Server::addVariableNode | ( | const Variable & | val,
|  | const NodeId & | parent_id = nodeObjectsFolder ) const
| noexcept

添加变量节点 VariableNode 至指定父节点中，并指定引用类型

参数

  [in] | val | `rm::Variable` 表示的变量
  [in] | parent_id | 指定父节点的 `NodeId`，默认为 `rm::nodeObjectsFolder`

返回
  添加至服务器后，对应变量节点的唯一标识 `NodeId`

函数调用图:

## ◆ addVariableNodeValueCallback()

bool rm::Server::addVariableNodeValueCallback | ( | NodeId | id,
|  | ValueCallbackBeforeRead | before_read,
|  | ValueCallbackAfterWrite | after_write ) const
| noexcept

为既有的变量节点 VariableNode 添加值回调

值回调表示在对 服务器中的 变量节点进行读写的时候，会在读之前执行 `beforeRead`，在写之后执行 `afterWrite`

参数

  [in] | id | 既有的变量节点的 `NodeId`，因变量节点可能位于任意一个父节点下，因此可以使用 路径搜索 进行查找
  [in] | before_read | 可隐式转换为 `ValueCallBackBeforeRead` 函数指针类型的可调用对象
  [in] | after_write | 可隐式转换为 `ValueCallBackAfterWrite` 函数指针类型的可调用对象

返回
  是否添加成功

## ◆ addVariableTypeNode()

NodeId rm::Server::addVariableTypeNode | ( | const VariableType & | vtype | ) | const

添加变量类型节点 VariableTypeNode 至 `BaseDataVariableType` 中

参数

  [in] | vtype | `rm::VariableType` 表示的变量

返回
  添加至服务器后，对应变量类型节点的唯一标识 `NodeId`

## ◆ addViewNode()

NodeId rm::Server::addViewNode | ( | const View & | view | ) | const

添加视图节点 ViewNode 至 `rm::nodeViewsFolder` 中

参数

  [in] | view | `rm::View` 表示的视图

返回
  添加至服务器后，对应视图节点的唯一标识 `NodeId`

## ◆ find()

FindNodeInServer rm::Server::find | ( | std::string_view | browse_name,
|  | uint16_t | ns = 1U ) const
| inline

获取路径搜索必要信息

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

auto dst_mode = src_node | srv.find("person") | srv.find("name");

参数

  [in] | browse_name | 浏览名
  [in] | ns | 命名空间索引，默认为 `1`

返回
  目标节点信息

返回值

  fnis | `[_client, browse_name]` 元组

## ◆ join()

void rm::Server::join | ( |  | ) |
| inline

阻塞

- 调用方线程阻塞，直到服务器执行 `stop()` 或意外停止后才继续运行

## ◆ operator ServerView()

rm::Server::operator ServerView | ( |  | ) | const
| inline

## ◆ read()

Variable rm::Server::read | ( | const NodeId & | node | ) | const

从指定的变量节点读数据

参数

  [in] | node | 既存的变量节点的 `NodeId`

返回
  读出的用 `rm::Variable` 表示的数据，未成功读取则返回空

## ◆ setMethodNodeCallBack()

void rm::Server::setMethodNodeCallBack | ( | const NodeId & | id,
|  | MethodCallback | on_method ) const

为既有的方法节点 MethodNode 设置方法的回调函数

参数

  [in] | id | 既有的方法节点的 `NodeId`，因方法节点可能位于任意一个父节点下，因此可以使用 路径搜索 进行查找
  [in] | on_method |

## ◆ start()

void rm::Server::start | ( |  | ) |

运行服务器，调用方线程不阻塞

## ◆ stop()

void rm::Server::stop | ( |  | ) |
| inline

停止服务器

## ◆ triggerEvent()

bool rm::Server::triggerEvent | ( | const NodeId & | node_id,
|  | const Event & | event ) const

创建并触发事件

参数

  [in] | node_id | 触发事件的节点 `NodeId`
  [in] | event | `rm::Event` 表示的事件

注解
  `Server` 的 `node_id` 是 `rm::nodeServer`

返回
  是否创建并触发成功？

## ◆ write()

bool rm::Server::write | ( | const NodeId & | node,
|  | const Variable & | val ) const

给指定的变量节点写数据

参数

  [in] | node | 既存的变量节点的 `NodeId`
  [in] | val | 待写入的数据

返回
  是否写入成功

## 类成员变量说明

## ◆ _run

std::thread rm::Server::_run
| protected

服务器运行线程

## ◆ _running

bool rm::Server::_running {}
| protected

服务器运行状态

## ◆ _server

UA_Server* rm::Server::_server
| protected

OPC UA 服务器指针

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

- rmvl/opcua/server.hpp