RMVL  2.1.1
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到
rm::Server类 参考

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 (UA_StatusCode(*on_config)(UA_Server *), uint16_t port, std::string_view name={}, const std::vector< UserConfig > &users={})
 从服务器配置函数指针创建 OPC UA 服务器
 
 operator ServerView () const
 
void spin ()
 启动服务器并阻塞
 
void spinOnce ()
 单次处理网络层中的重复回调和事件(单次启动服务器)
 
void shutdown ()
 停止服务器
 
 ~Server ()
 
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 的路径搜索命名空间 ns1 的节点
 
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 Variable &val, DataSourceRead on_read, DataSourceWrite on_write, 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 NodeId &nd, const Event &event) const
 创建并触发事件
 

Protected 属性

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

详细描述

OPC UA 服务器

示例
samples/opcua/opcua_server.cpp.

成员类型定义说明

◆ DataSourceCallbackWrapper

◆ ValueCallbackWrapper

构造及析构函数说明

◆ Server() [1/2]

rm::Server::Server ( uint16_t port,
std::string_view name = {},
const std::vector< UserConfig > & users = {} )
Python:
rm.Server(port[, name[, users]]) -> <Server object>

创建 OPC UA 服务器

参数
[in]portOPC UA 服务器端口号,一般设置为 4840U
[in]nameOPC UA 服务器名称,为空则采用默认值 open62541-based OPC UA Application
[in]users用户列表
参见
UserConfig

◆ Server() [2/2]

rm::Server::Server ( UA_StatusCode(* on_config )(UA_Server *),
uint16_t port,
std::string_view name = {},
const std::vector< UserConfig > & users = {} )
Python:
rm.Server(port[, name[, users]]) -> <Server object>

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

  • 服务器配置函数指针需提供 *.xml 文件,并由 nodeset_compiler 生成
  • 关于 *.xml 文件的编写,参考 4.2 从 XML 配置 OPC UA
参数
[in]on_confignodeset_compiler 生成的服务器配置函数指针
[in]portOPC UA 服务器端口号,一般设置为 4840U
[in]nameOPC UA 服务器名称,为空则采用默认值 open62541-based OPC UA Application
[in]users用户列表
参见
UserConfig

◆ ~Server()

rm::Server::~Server ( )

成员函数说明

◆ addDataSourceVariableNode()

NodeId rm::Server::addDataSourceVariableNode ( const Variable & val,
DataSourceRead on_read,
DataSourceWrite on_write,
NodeId parent_nd = nodeObjectsFolder )
noexcept
Python:
rm.Server.addDataSourceVariableNode(val, on_read, on_write[, parent_nd]) -> nd

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

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

  • 值回调是在现有变量节点之上添加读取 和写入 的回调函数,本质上仍然是从服务器中获取数据
  • 数据源变量节点会把每次 IO 都绑定到各自的回调函数中,即可以重定向到一个实际的物理过程中,从而跟服务器本身的数据读写脱离关系
参数
[in]valrm::Variable 表示的变量,仅取 browse_namedescriptiondisplay_nameaccess_level 以及 ns 字段,以及对应的变量类型节点
[in]on_read重定向的读取回调函数
[in]on_write重定向的写入回调函数
[in]parent_nd指定父节点的 NodeId,默认为 rm::nodeObjectsFolder
返回
添加至服务器后,对应数据源变量节点的唯一标识 NodeId

◆ addEventTypeNode()

NodeId rm::Server::addEventTypeNode ( const EventType & etype)
Python:
rm.Server.addEventTypeNode(etype) -> nd

添加事件类型至 BaseEventType

参数
[in]etyperm::EventType 表示的事件类型
返回
添加至服务器后,对应事件类型的唯一标识 NodeId

◆ addMethodNode()

NodeId rm::Server::addMethodNode ( const Method & method,
const NodeId & parent_nd = nodeObjectsFolder )
Python:
rm.Server.addMethodNode(method[, parent_nd]) -> nd

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

参数
[in]methodrm::Method 表示的方法
[in]parent_nd指定父节点的 NodeId,默认为 rm::nodeObjectsFolder
返回
添加至服务器后,对应方法节点的唯一标识 NodeId

◆ addObjectNode()

NodeId rm::Server::addObjectNode ( const Object & obj,
NodeId parent_nd = nodeObjectsFolder )
Python:
rm.Server.addObjectNode(obj[, parent_nd]) -> nd

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

参数
[in]objrm::Object 表示的对象
[in]parent_nd指定的父节点 NodeId,默认为 rm::nodeObjectsFolder
返回
添加至服务器后,对应对象节点的唯一标识 NodeId

◆ addObjectTypeNode()

NodeId rm::Server::addObjectTypeNode ( const ObjectType & otype)
Python:
rm.Server.addObjectTypeNode(otype) -> nd

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

参数
[in]otyperm::ObjectType 表示的对象类型
返回
添加至服务器后,对应对象类型节点的唯一标识 NodeId

◆ addVariableNode()

NodeId rm::Server::addVariableNode ( const Variable & val,
const NodeId & parent_nd = nodeObjectsFolder )
noexcept
Python:
rm.Server.addVariableNode(val[, parent_nd]) -> nd

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

参数
[in]valrm::Variable 表示的变量
[in]parent_nd指定父节点的 NodeId,默认为 rm::nodeObjectsFolder
返回
添加至服务器后,对应变量节点的唯一标识 NodeId

◆ addVariableNodeValueCallback()

bool rm::Server::addVariableNodeValueCallback ( NodeId nd,
ValueCallbackBeforeRead before_read,
ValueCallbackAfterWrite after_write )
noexcept
Python:
rm.Server.addVariableNodeValueCallback(nd, before_read, after_write) -> <success ?>

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

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

参数
[in]nd既有的变量节点的 NodeId,因变量节点可能位于任意一个父节点下,因此可以使用 路径搜索 进行查找
[in]before_readValueCallBackBeforeRead 可调用对象
[in]after_writeValueCallBackAfterWrite 可调用对象
返回
是否添加成功

◆ addVariableTypeNode()

NodeId rm::Server::addVariableTypeNode ( const VariableType & vtype)
Python:
rm.Server.addVariableTypeNode(vtype) -> nd

添加变量类型节点 VariableTypeNode 至 BaseDataVariableType

参数
[in]vtyperm::VariableType 表示的变量
返回
添加至服务器后,对应变量类型节点的唯一标识 NodeId

◆ addViewNode()

NodeId rm::Server::addViewNode ( const View & view)
Python:
rm.Server.addViewNode(view) -> nd

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

参数
[in]viewrm::View 表示的视图
返回
添加至服务器后,对应视图节点的唯一标识 NodeId

◆ find()

NodeId rm::Server::find ( std::string_view browse_path,
const NodeId & src_nd = nodeObjectsFolder ) const
noexcept
Python:
rm.Server.find(browse_path[, src_nd]) -> nd

通过 BrowseName 的路径搜索命名空间 ns1 的节点

参数
[in]browse_pathBrowseName 路径,使用 / 分隔
[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");
FindNodeInServer node(std::string_view browse_name, uint16_t ns=1U) const
获取路径搜索必要信息
定义 server.hpp:224

◆ node()

FindNodeInServer rm::Server::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 ServerView()

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

◆ read()

Variable rm::Server::read ( const NodeId & node) const
Python:
rm.Server.read(node) -> val

从指定的变量节点读数据

参数
[in]node既存的变量节点的 NodeId
返回
读出的用 rm::Variable 表示的数据,未成功读取则返回空

◆ setMethodNodeCallBack()

bool rm::Server::setMethodNodeCallBack ( const NodeId & nd,
MethodCallback on_method )
Python:
rm.Server.setMethodNodeCallBack(nd, on_method) -> <success ?>

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

参数
[in]nd既有的方法节点的 NodeId,因方法节点可能位于任意一个父节点下,因此可以使用 路径搜索 进行查找
[in]on_methodMethodCallback 可调用对象
返回
是否设置成功

◆ shutdown()

void rm::Server::shutdown ( )
inline
Python:
rm.Server.shutdown() -> None

停止服务器

◆ spin()

void rm::Server::spin ( )

启动服务器并阻塞

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

◆ spinOnce()

void rm::Server::spinOnce ( )
Python:
rm.Server.spinOnce() -> None

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

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

◆ triggerEvent()

bool rm::Server::triggerEvent ( const NodeId & nd,
const Event & event ) const
Python:
rm.Server.triggerEvent(nd, event) -> <success ?>

创建并触发事件

参数
[in]nd触发事件的节点 NodeId
[in]eventrm::Event 表示的事件
返回
是否创建并触发成功?

◆ write()

bool rm::Server::write ( const NodeId & node,
const Variable & val )
Python:
rm.Server.write(node, val) -> <success ?>

给指定的变量节点写数据

参数
[in]node既存的变量节点的 NodeId
[in]val待写入的数据
返回
是否写入成功

类成员变量说明

◆ _running

std::atomic_bool rm::Server::_running {}
protected

服务器运行状态

◆ _server

UA_Server* rm::Server::_server
protected

OPC UA 服务器指针


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