RMVL  1.5.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到

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

◆ ValueCallbackWrapper

构造及析构函数说明

◆ Server() [1/4]

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

创建 OPC UA 服务器

参数
[in]portOPC UA 服务器端口号,一般设置为 4840U
[in]nameOPC 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]portOPC UA 服务器端口号,一般设置为 4840U
[in]nameOPC 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]valrm::Variable 表示的变量,仅取 browse_namedescriptiondisplay_nameaccess_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]etyperm::EventType 表示的事件类型
返回
添加至服务器后,对应事件类型的唯一标识 NodeId

◆ addMethodNode()

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

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

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

◆ addObjectNode()

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

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

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

◆ addObjectTypeNode()

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

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

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

◆ addVariableNode()

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

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

参数
[in]valrm::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]vtyperm::VariableType 表示的变量
返回
添加至服务器后,对应变量类型节点的唯一标识 NodeId

◆ addViewNode()

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

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

参数
[in]viewrm::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]eventrm::Event 表示的事件
注解
Servernode_idrm::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 服务器指针


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