| RMVL 2.4.0 Robotic Manipulation and Vision Library

载入中...
搜索中...
未找到
Public 类型 | Public 成员函数 | Protected 属性 | 所有成员列表
rm::OpcuaServer类 参考
OPC UA 模块

OPC UA 服务器 更多...

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

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

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

## Public 成员函数
| OpcuaServer (uint16_t port, std::string_view name={}, const std::vector< UserConfig > &users={})
| 创建 OPC UA 服务器
| OpcuaServer (UA_StatusCode(*on_config)(UA_Server *), uint16_t port, std::string_view name={}, const std::vector< UserConfig > &users={})
| 从服务器配置函数指针创建 OPC UA 服务器
| operator OpcuaServerView () const
void | spin ()
| 启动服务器并阻塞
void | spinOnce ()
| 单次处理网络层中的重复回调和事件（单次启动服务器）
void | shutdown ()
| 停止服务器
| ~OpcuaServer ()
FindNodeInServer | 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 的节点
NodeId | addVariableTypeNode (const VariableType &vtype)
| 添加变量类型节点 VariableTypeNode 至 BaseDataVariableType 中
NodeId | addVariableNode (const Variable &val, const NodeId &parent_nd=nodeObjectsFolder) noexcept
| 添加变量节点 VariableNode 至指定父节点中，并指定引用类型
bool | addVariableNodeValueCallback (NodeId nd, ValueCallbackBeforeRead before_read, ValueCallbackAfterWrite after_write) noexcept
| 为既有的变量节点 VariableNode 添加值回调
NodeId | addDataSourceVariableNode (const DataSourceVariable &val, NodeId parent_nd=nodeObjectsFolder) noexcept
| 添加数据源变量节点 VariableNode 至指定父节点中
Variable | read (const NodeId &node) const
| 从指定的变量节点读数据
bool | write (const NodeId &node, const Variable &val)
| 给指定的变量节点写数据
NodeId | addMethodNode (const Method &method, const NodeId &parent_nd=nodeObjectsFolder)
| 添加方法节点 MethodNode 至指定父节点中
bool | setMethodNodeCallBack (const NodeId &nd, MethodCallback on_method)
| 为既有的方法节点 MethodNode 设置方法的回调函数
NodeId | addObjectTypeNode (const ObjectType &otype)
| 添加对象类型节点 ObjectTypeNode 至 rm::nodeBaseObjectType 中
NodeId | addObjectNode (const Object &obj, NodeId parent_nd=nodeObjectsFolder)
| 添加对象节点 ObjectNode 至指定的父节点中
NodeId | addViewNode (const View &view)
| 添加视图节点 ViewNode 至 rm::nodeViewsFolder 中
NodeId | addEventTypeNode (const EventType &etype)
| 添加事件类型至 BaseEventType 中
bool | triggerEvent (const Event &event) const
| 创建并触发事件

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

## 详细描述

OPC UA 服务器

示例
  samples/opcua/opcua_server.cpp.

## 成员类型定义说明

## ◆ DataSourceCallbackWrapper

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

## ◆ ValueCallbackWrapper

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

## 构造及析构函数说明

## ◆ OpcuaServer() [1/2]

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

Python:
| rm.OpcuaServer( | port[, name[, users]] | ) -> | <OpcuaServer object>

创建 OPC UA 服务器

参数

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

参见
  UserConfig

## ◆ OpcuaServer() [2/2]

rm::OpcuaServer::OpcuaServer | ( | UA_StatusCode(* | on_config )(UA_Server *),
|  | uint16_t | port,
|  | std::string_view | name = {},
|  | const std::vector< UserConfig > & | users = {} )

Python:
| rm.OpcuaServer( | port[, name[, users]] | ) -> | <OpcuaServer object>

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

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

参数

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

参见
  UserConfig

## ◆ ~OpcuaServer()

rm::OpcuaServer::~OpcuaServer | ( |  | ) |

## 成员函数说明

## ◆ addDataSourceVariableNode()

NodeId rm::OpcuaServer::addDataSourceVariableNode | ( | const DataSourceVariable & | val,
|  | NodeId | parent_nd = nodeObjectsFolder )
| noexcept

Python:
| rm.OpcuaServer.addDataSourceVariableNode( | val[, parent_nd] | ) -> | nd

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

参见
  DataSourceVariable

参数

  [in] | val | rm::DataSourceVariable 表示的数据源变量
  [in] | parent_nd | 指定父节点的 NodeId，默认为 rm::nodeObjectsFolder

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

## ◆ addEventTypeNode()

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

Python:
| rm.OpcuaServer.addEventTypeNode( | etype | ) -> | nd

添加事件类型至 BaseEventType 中

参数

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

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

## ◆ addMethodNode()

NodeId rm::OpcuaServer::addMethodNode | ( | const Method & | method,
|  | const NodeId & | parent_nd = nodeObjectsFolder )

Python:
| rm.OpcuaServer.addMethodNode( | method[, parent_nd] | ) -> | nd

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

参数

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

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

## ◆ addObjectNode()

NodeId rm::OpcuaServer::addObjectNode | ( | const Object & | obj,
|  | NodeId | parent_nd = nodeObjectsFolder )

Python:
| rm.OpcuaServer.addObjectNode( | obj[, parent_nd] | ) -> | nd

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

参数

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

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

## ◆ addObjectTypeNode()

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

Python:
| rm.OpcuaServer.addObjectTypeNode( | otype | ) -> | nd

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

参数

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

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

## ◆ addVariableNode()

NodeId rm::OpcuaServer::addVariableNode | ( | const Variable & | val,
|  | const NodeId & | parent_nd = nodeObjectsFolder )
| noexcept

Python:
| rm.OpcuaServer.addVariableNode( | val[, parent_nd] | ) -> | nd

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

参数

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

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

## ◆ addVariableNodeValueCallback()

bool rm::OpcuaServer::addVariableNodeValueCallback | ( | NodeId | nd,
|  | ValueCallbackBeforeRead | before_read,
|  | ValueCallbackAfterWrite | after_write )
| noexcept

Python:
| rm.OpcuaServer.addVariableNodeValueCallback( | nd, before_read, after_write | ) -> | <success ?>

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

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

参数

  [in] | nd | 既有的变量节点的 NodeId，因变量节点可能位于任意一个父节点下，因此可以使用 路径搜索 进行查找
  [in] | before_read | ValueCallBackBeforeRead 可调用对象
  [in] | after_write | ValueCallBackAfterWrite 可调用对象

返回
  是否添加成功

## ◆ addVariableTypeNode()

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

Python:
| rm.OpcuaServer.addVariableTypeNode( | vtype | ) -> | nd

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

参数

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

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

## ◆ addViewNode()

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

Python:
| rm.OpcuaServer.addViewNode( | view | ) -> | nd

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

参数

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

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

## ◆ find()

NodeId rm::OpcuaServer::find | ( | std::string_view | browse_path,
|  | const NodeId & | src_nd = nodeObjectsFolder ) const
| noexcept

Python:
| rm.OpcuaServer.find( | browse_path[, src_nd] | ) -> | nd

通过 BrowseName 的路径搜索命名空间 ns 为 1 的节点

参数

  [in] | browse_path | BrowseName 路径，使用 / 分隔
  [in] | src_nd | 源节点 ID，默认为 rm::nodeObjectsFolder

返回
  节点 ID

auto node = srv.find("person/name", src_nd);
// 等效于 auto node = src_nd | srv.node("person") | srv.node("name");
rm::OpcuaServer::node
FindNodeInServer node(std::string_view browse_name, uint16_t ns=1U) const
获取路径搜索必要信息
定义 server.hpp:201

## ◆ node()

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

获取路径搜索必要信息

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

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

参数

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

返回
  目标节点信息

返回值

  fnis | [_client, browse_name] 元组

## ◆ operator OpcuaServerView()

rm::OpcuaServer::operator OpcuaServerView | ( |  | ) | const
| inline

## ◆ read()

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

Python:
| rm.OpcuaServer.read( | node | ) -> | val

从指定的变量节点读数据

参数

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

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

函数调用图:

## ◆ setMethodNodeCallBack()

bool rm::OpcuaServer::setMethodNodeCallBack | ( | const NodeId & | nd,
|  | MethodCallback | on_method )

Python:
| rm.OpcuaServer.setMethodNodeCallBack( | nd, on_method | ) -> | <success ?>

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

参数

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

返回
  是否设置成功

## ◆ shutdown()

void rm::OpcuaServer::shutdown | ( |  | ) |
| inline

停止服务器

## ◆ spin()

void rm::OpcuaServer::spin | ( |  | ) |

启动服务器并阻塞

注解
  - 当 rm::para::opcua_param.SERVER_WAIT 为 false 时，该函数会立即返回，因此可在多线程环境下使用
  - 创建单线程事件循环，并在此事件循环中不断处理网络事件

## ◆ spinOnce()

void rm::OpcuaServer::spinOnce | ( |  | ) |

Python:
| rm.OpcuaServer.spinOnce( |  | ) -> | None

单次处理网络层中的重复回调和事件（单次启动服务器）

注解
  - 当 rm::para::opcua_param.SERVER_WAIT 为 false 时，该函数会立即返回，因此可在多线程环境下使用
  - 这一部分可以在事件驱动的单线程架构中由外部主循环驱动

## ◆ triggerEvent()

bool rm::OpcuaServer::triggerEvent | ( | const Event & | event | ) | const

Python:
| rm.OpcuaServer.triggerEvent( | event | ) -> | <success ?>

创建并触发事件

参数

  [in] | event | rm::Event 表示的事件

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

## ◆ write()

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

Python:
| rm.OpcuaServer.write( | node, val | ) -> | <success ?>

给指定的变量节点写数据

参数

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

返回
  是否写入成功

函数调用图:

## 类成员变量说明

## ◆ _running

std::atomic_bool rm::OpcuaServer::_running {}
| protected

服务器运行状态

## ◆ _server

UA_Server* rm::OpcuaServer::_server
| protected

OPC UA 服务器指针