| RMVL 1.5.2 Robotic Manipulation and Vision Library

载入中...
搜索中...
未找到
类 | 宏定义 | 类型定义 | 枚举 | 函数 | 变量
基于 open62541 的 OPC UA 二次开发库

本模块基于 `open62541` 开发 更多...

## 类
class | rm::ClientView
| OPC UA 客户端视图 更多...
class | rm::Client
| OPC UA 客户端 更多...
class | rm::EventType
| OPC UA 事件类型 更多...
class | rm::Event
| OPC UA 事件 更多...
struct | rm::Argument
| OPC UA 方法参数信息 更多...
class | rm::Method
| OPC UA 方法 更多...
class | rm::ObjectType
| OPC UA 对象类型 更多...
class | rm::Object
| OPC UA 对象 更多...
struct | rm::PublishedDataSet
| 待发布的数据集 (PDS) 更多...
class | rm::Publisher< Tpid >
| OPC UA 发布者 更多...
class | rm::Publisher< TransportID::UDP_UADP >
| 使用 `UDP` 协议以及 `UADP` 序列化方式的 Publisher 特化 更多...
class | rm::ServerView
| OPC UA 服务器视图 更多...
class | rm::Server
| OPC UA 服务器 更多...
struct | rm::FieldMetaData
| 数据集字段元数据 更多...
class | rm::Subscriber< Tpid >
| OPC UA 订阅者 更多...
class | rm::Subscriber< TransportID::UDP_UADP >
| 使用 `UDP` 协议以及 `UADP` 序列化方式的订阅者特化 更多...
struct | rm::NodeId
| OPC UA 节点 ID 更多...
class | rm::DataType
| OPC UA 数据类型 更多...
struct | rm::UserConfig
| 用户信息 更多...
class | rm::VariableType
| OPC UA 变量类型 更多...
class | rm::Variable
| OPC UA 变量 更多...
class | rm::View
| OPC UA 视图 更多...

## 宏定义
#define | uaCreateVariableType(val, ...)
| 创建变量类型，BrowseName、DisplayName、Description 均为变量类型的名称
#define | uaCreateVariable(val, ...)
| 创建变量，BrowseName、DisplayName、Description 均为变量类型的名称

## 类型定义
using | rm::DataChangeNotificationCallback = std::function<void(ClientView, const Variable &)>
| 数据变更通知回调函数
using | rm::EventNotificationCallback = std::function<void(ClientView, const std::vector<Variable> &)>
using | rm::MethodCallback = std::function<std::vector<Variable>(ServerView, const NodeId &, const std::vector<Variable> &)>
| OPC UA 方法回调函数
using | rm::ValueCallbackBeforeRead = std::function<void(ServerView, const NodeId &, const Variable &)>
| 值回调函数，Read 可调用对象定义
using | rm::ValueCallbackAfterWrite = std::function<void(ServerView, const NodeId &, const Variable &)>
| 值回调函数，Write 可调用对象定义
using | rm::DataSourceRead = std::function<Variable(ServerView, const NodeId &)>
| 数据源回调函数，Read 函数指针定义
using | rm::DataSourceWrite = std::function<void(ServerView, const NodeId &, const Variable &)>
| 数据源回调函数，Write 函数指针定义
using | rm::ServerUserConfig = UA_StatusCode (*)(UA_Server *)
| 服务器配置函数指针，由 `nodeset_compiler` 生成
using | rm::FindNodeInServer = ::std::tuple<UA_Server *, ::std::string_view, uint16_t>
| 目标节点信息（服务端指针、浏览名、命名空间索引）
using | rm::FindNodeInClient = ::std::tuple<UA_Client *, ::std::string_view, uint16_t>
| 目标节点信息（客户端指针、浏览名、命名空间索引）

## 枚举
enum class | rm::TransportID : uint8_t { rm::TransportID::UDP_UADP = 1U , rm::TransportID::MQTT_UADP = 2U , rm::TransportID::MQTT_JSON = 3U }
| 传输协议 更多...
enum | rm::AccessLevel : uint8_t { rm::VARIABLE_READ = 1U , rm::VARIABLE_WRITE = 2U }

## 函数
constexpr NodeId | rm::nodeBoolean (0, UA_NS0ID_BOOLEAN)
| 数据类型节点：`Boolean` 节点 ID
constexpr NodeId | rm::nodeSbyte (0, UA_NS0ID_SBYTE)
| 数据类型节点：`Sbyte` 节点 ID
constexpr NodeId | rm::nodeByte (0, UA_NS0ID_BYTE)
| 数据类型节点：`Byte` 节点 ID
constexpr NodeId | rm::nodeInt16 (0, UA_NS0ID_INT16)
| 数据类型节点：`Int16` 节点 ID
constexpr NodeId | rm::nodeUint16 (0, UA_NS0ID_UINT16)
| 数据类型节点：`Uint16` 节点 ID
constexpr NodeId | rm::nodeInt32 (0, UA_NS0ID_INT32)
| 数据类型节点：`Int32` 节点 ID
constexpr NodeId | rm::nodeUint32 (0, UA_NS0ID_UINT32)
| 数据类型节点：`Uint32` 节点 ID
constexpr NodeId | rm::nodeInt64 (0, UA_NS0ID_INT64)
| 数据类型节点：`Int64` 节点 ID
constexpr NodeId | rm::nodeUint64 (0, UA_NS0ID_UINT64)
| 数据类型节点：`Uint64` 节点 ID
constexpr NodeId | rm::nodeFloat (0, UA_NS0ID_FLOAT)
| 数据类型节点：`Float` 节点 ID
constexpr NodeId | rm::nodeDouble (0, UA_NS0ID_DOUBLE)
| 数据类型节点：`Double` 节点 ID
constexpr NodeId | rm::nodeString (0, UA_NS0ID_STRING)
| 数据类型节点：`String` 节点 ID
constexpr NodeId | rm::nodeDatetime (0, UA_NS0ID_DATETIME)
| 数据类型节点：`Datetime` 节点 ID
constexpr NodeId | rm::nodeObjectsFolder (0, UA_NS0ID_OBJECTSFOLDER)
| 对象节点：`ObjectsFolder` 节点 ID
constexpr NodeId | rm::nodeTypesFolder (0, UA_NS0ID_TYPESFOLDER)
| 对象节点：`TypesFolder` 节点 ID
constexpr NodeId | rm::nodeViewsFolder (0, UA_NS0ID_VIEWSFOLDER)
| 对象节点：`ViewsFolder` 节点 ID
constexpr NodeId | rm::nodeObjectTypesFolder (0, UA_NS0ID_OBJECTTYPESFOLDER)
| 对象节点：`ObjectTypesFolder` 节点 ID
constexpr NodeId | rm::nodeVariableTypesFolder (0, UA_NS0ID_VARIABLETYPESFOLDER)
| 对象节点：`VariableTypesFolder` 节点 ID
constexpr NodeId | rm::nodeServer (0, UA_NS0ID_SERVER)
| 对象节点：`Server` 节点 ID
constexpr NodeId | rm::nodeFolderType (0, UA_NS0ID_FOLDERTYPE)
| 对象类型节点：`FolderType` 节点 ID
constexpr NodeId | rm::nodeBaseObjectType (0, UA_NS0ID_BASEOBJECTTYPE)
| 对象类型节点：`BaseObjectType` 节点 ID
constexpr NodeId | rm::nodeBaseEventType (0, UA_NS0ID_BASEEVENTTYPE)
| 对象类型节点：`BaseEventType` 节点 ID
constexpr NodeId | rm::nodeBaseDataVariableType (0, UA_NS0ID_BASEDATAVARIABLETYPE)
| 变量类型节点：`BaseDataVariableType` 节点 ID
constexpr NodeId | rm::nodePropertyType (0, UA_NS0ID_PROPERTYTYPE)
| 变量类型节点：`PropertyType` 节点 ID
constexpr NodeId | rm::nodeOrganizes (0, UA_NS0ID_ORGANIZES)
| 引用类型节点：`Organizes` 节点 ID
constexpr NodeId | rm::nodeHasTypeDefinition (0, UA_NS0ID_HASTYPEDEFINITION)
| 引用类型节点：`HasTypeDefinition` 节点 ID
constexpr NodeId | rm::nodeHasComponent (0, UA_NS0ID_HASCOMPONENT)
| 引用类型节点：`HasComponent` 节点 ID
constexpr NodeId | rm::nodeHasProperty (0, UA_NS0ID_HASPROPERTY)
| 引用类型节点：`HasProperty` 节点 ID
constexpr NodeId | rm::nodeHasSubtype (0, UA_NS0ID_HASSUBTYPE)
| 引用类型节点：`HasSubtype` 节点 ID
constexpr NodeId | rm::nodeHasModellingRule (0, UA_NS0ID_HASMODELLINGRULE)
| 引用类型节点：`HasModellingRule` 节点 ID
NodeId | rm::operator| (NodeId origin, rm::FindNodeInServer &&fnis)
| 服务端路径搜索
NodeId | rm::operator| (NodeId origin, rm::FindNodeInClient &&fnic)
| 客户端路径搜索

## 变量
constexpr UA_Byte | rm::typeflag_ns0 []
| `DataType` 到对应 `NS0` 下的类型名的映射

## 详细描述

本模块基于 `open62541` 开发

- 提供了 `OPC UA` 服务器、客户端的封装，以及 `OPC UA` 支持的数据类型包括 `Object`、`Variable`、`Method`、`View`、`Event` 的定义。
- 关于如何使用此模块，可参考 工业自动化通信协议 OPC UA 说明文档

## 宏定义说明

## ◆ uaCreateVariable

#define uaCreateVariable | ( |  | val,
|  |  | ... )

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

值:
rm::Variable val{__VA_ARGS__}; \
val.browse_name = val.display_name = val.description = #val
rm::Variable
OPC UA 变量
定义 variable.hpp:111
rm::Variable::browse_name
std::string browse_name
浏览名称 BrowseName
定义 variable.hpp:123

创建变量，BrowseName、DisplayName、Description 均为变量类型的名称

参数

  [in] | val | 变量的名称
  [in] | ... | 构造列表

## ◆ uaCreateVariableType

#define uaCreateVariableType | ( |  | val,
|  |  | ... )

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

值:
rm::VariableType val{__VA_ARGS__}; \
val.browse_name = val.display_name = val.description = #val
rm::VariableType
OPC UA 变量类型
定义 variable.hpp:36
rm::VariableType::browse_name
std::string browse_name
浏览名称 BrowseName
定义 variable.hpp:48

创建变量类型，BrowseName、DisplayName、Description 均为变量类型的名称

参数

  [in] | val | 变量类型的名称
  [in] | ... | 构造列表

## 类型定义说明

## ◆ DataChangeNotificationCallback

using rm::DataChangeNotificationCallback = std::function<void(ClientView, const Variable &)>

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

数据变更通知回调函数

参数

  [in] | client_view | 客户端视图，指代当前客户端
  [in] | value | 数据发生变更后的变量

## ◆ DataSourceRead

using rm::DataSourceRead = std::function<Variable(ServerView, const NodeId &)>

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

数据源回调函数，Read 函数指针定义

参数

  [in] | server_view | OPC UA 服务器视图，指代当前服务器
  [in] | nodeid | 待读取的变量节点的 `NodeId`

返回
  向服务器提供的待读取的变量

## ◆ DataSourceWrite

using rm::DataSourceWrite = std::function<void(ServerView, const NodeId &, const Variable &)>

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

数据源回调函数，Write 函数指针定义

参数

  [in] | server_view | OPC UA 服务器视图，指代当前服务器
  [in] | nodeid | 待写入的变量节点的 `NodeId`
  [in] | value | 从服务器接收到的变量，一般用于写入外部数据

## ◆ EventNotificationCallback

using rm::EventNotificationCallback = std::function<void(ClientView, const std::vector<Variable> &)>

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

## ◆ FindNodeInClient

using rm::FindNodeInClient = ::std::tuple<UA_Client *, ::std::string_view, uint16_t>

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

目标节点信息（客户端指针、浏览名、命名空间索引）

## ◆ FindNodeInServer

using rm::FindNodeInServer = ::std::tuple<UA_Server *, ::std::string_view, uint16_t>

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

目标节点信息（服务端指针、浏览名、命名空间索引）

## ◆ MethodCallback

using rm::MethodCallback = std::function<std::vector<Variable>(ServerView, const NodeId &, const std::vector<Variable> &)>

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

OPC UA 方法回调函数

参数

  [in] | server_view | 服务器视图，指代当前服务器
  [in] | obj_id | 方法节点所在对象的 `NodeId`
  [in] | args | 输入参数列表

返回
  输出参数列表

## ◆ ServerUserConfig

using rm::ServerUserConfig = UA_StatusCode (*)(UA_Server *)

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

服务器配置函数指针，由 `nodeset_compiler` 生成

## ◆ ValueCallbackAfterWrite

using rm::ValueCallbackAfterWrite = std::function<void(ServerView, const NodeId &, const Variable &)>

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

值回调函数，Write 可调用对象定义

参数

  [in] | server_view | OPC UA 服务器视图，指代当前服务器
  [in] | nodeid | 待写入的变量节点的 `NodeId`
  [in] | data | 服务器写入的变量

## ◆ ValueCallbackBeforeRead

using rm::ValueCallbackBeforeRead = std::function<void(ServerView, const NodeId &, const Variable &)>

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

值回调函数，Read 可调用对象定义

参数

  [in] | server_view | OPC UA 服务器视图，指代当前服务器
  [in] | node_id | 待读取的变量节点的 `NodeId`
  [in] | value | 服务器读取到的变量

## 枚举类型说明

## ◆ AccessLevel

enum rm::AccessLevel : uint8_t

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

枚举值
VARIABLE_READ | 读权限
VARIABLE_WRITE | 写权限

## ◆ TransportID

enum class rm::TransportID : uint8_t
| strong

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

传输协议

枚举值
UDP_UADP | 使用 `UDP` 传输协议映射和 `UADP` 消息映射的组合，此协议用于 无代理 的消息传递
MQTT_UADP | 使用 `MQTT` 传输协议映射和 `UADP` 消息映射的组合，此协议用于 基于代理 的消息传递
MQTT_JSON | 使用 `MQTT` 传输协议映射和 `JSON` 消息映射的组合，此协议用于 基于代理 的消息传递

## 函数说明

## ◆ nodeBaseDataVariableType()

NodeId rm::nodeBaseDataVariableType | ( | 0 | ,
|  | UA_NS0ID_BASEDATAVARIABLETYPE | )
| constexpr

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

变量类型节点：`BaseDataVariableType` 节点 ID

## ◆ nodeBaseEventType()

NodeId rm::nodeBaseEventType | ( | 0 | ,
|  | UA_NS0ID_BASEEVENTTYPE | )
| constexpr

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

对象类型节点：`BaseEventType` 节点 ID

## ◆ nodeBaseObjectType()

NodeId rm::nodeBaseObjectType | ( | 0 | ,
|  | UA_NS0ID_BASEOBJECTTYPE | )
| constexpr

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

对象类型节点：`BaseObjectType` 节点 ID

## ◆ nodeBoolean()

NodeId rm::nodeBoolean | ( | 0 | ,
|  | UA_NS0ID_BOOLEAN | )
| constexpr

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

数据类型节点：`Boolean` 节点 ID

## ◆ nodeByte()

NodeId rm::nodeByte | ( | 0 | ,
|  | UA_NS0ID_BYTE | )
| constexpr

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

数据类型节点：`Byte` 节点 ID

## ◆ nodeDatetime()

NodeId rm::nodeDatetime | ( | 0 | ,
|  | UA_NS0ID_DATETIME | )
| constexpr

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

数据类型节点：`Datetime` 节点 ID

## ◆ nodeDouble()

NodeId rm::nodeDouble | ( | 0 | ,
|  | UA_NS0ID_DOUBLE | )
| constexpr

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

数据类型节点：`Double` 节点 ID

## ◆ nodeFloat()

NodeId rm::nodeFloat | ( | 0 | ,
|  | UA_NS0ID_FLOAT | )
| constexpr

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

数据类型节点：`Float` 节点 ID

## ◆ nodeFolderType()

NodeId rm::nodeFolderType | ( | 0 | ,
|  | UA_NS0ID_FOLDERTYPE | )
| constexpr

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

对象类型节点：`FolderType` 节点 ID

## ◆ nodeHasComponent()

NodeId rm::nodeHasComponent | ( | 0 | ,
|  | UA_NS0ID_HASCOMPONENT | )
| constexpr

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

引用类型节点：`HasComponent` 节点 ID

## ◆ nodeHasModellingRule()

NodeId rm::nodeHasModellingRule | ( | 0 | ,
|  | UA_NS0ID_HASMODELLINGRULE | )
| constexpr

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

引用类型节点：`HasModellingRule` 节点 ID

## ◆ nodeHasProperty()

NodeId rm::nodeHasProperty | ( | 0 | ,
|  | UA_NS0ID_HASPROPERTY | )
| constexpr

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

引用类型节点：`HasProperty` 节点 ID

## ◆ nodeHasSubtype()

NodeId rm::nodeHasSubtype | ( | 0 | ,
|  | UA_NS0ID_HASSUBTYPE | )
| constexpr

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

引用类型节点：`HasSubtype` 节点 ID

## ◆ nodeHasTypeDefinition()

NodeId rm::nodeHasTypeDefinition | ( | 0 | ,
|  | UA_NS0ID_HASTYPEDEFINITION | )
| constexpr

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

引用类型节点：`HasTypeDefinition` 节点 ID

## ◆ nodeInt16()

NodeId rm::nodeInt16 | ( | 0 | ,
|  | UA_NS0ID_INT16 | )
| constexpr

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

数据类型节点：`Int16` 节点 ID

## ◆ nodeInt32()

NodeId rm::nodeInt32 | ( | 0 | ,
|  | UA_NS0ID_INT32 | )
| constexpr

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

数据类型节点：`Int32` 节点 ID

## ◆ nodeInt64()

NodeId rm::nodeInt64 | ( | 0 | ,
|  | UA_NS0ID_INT64 | )
| constexpr

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

数据类型节点：`Int64` 节点 ID

## ◆ nodeObjectsFolder()

NodeId rm::nodeObjectsFolder | ( | 0 | ,
|  | UA_NS0ID_OBJECTSFOLDER | )
| constexpr

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

对象节点：`ObjectsFolder` 节点 ID

## ◆ nodeObjectTypesFolder()

NodeId rm::nodeObjectTypesFolder | ( | 0 | ,
|  | UA_NS0ID_OBJECTTYPESFOLDER | )
| constexpr

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

对象节点：`ObjectTypesFolder` 节点 ID

## ◆ nodeOrganizes()

NodeId rm::nodeOrganizes | ( | 0 | ,
|  | UA_NS0ID_ORGANIZES | )
| constexpr

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

引用类型节点：`Organizes` 节点 ID

## ◆ nodePropertyType()

NodeId rm::nodePropertyType | ( | 0 | ,
|  | UA_NS0ID_PROPERTYTYPE | )
| constexpr

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

变量类型节点：`PropertyType` 节点 ID

## ◆ nodeSbyte()

NodeId rm::nodeSbyte | ( | 0 | ,
|  | UA_NS0ID_SBYTE | )
| constexpr

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

数据类型节点：`Sbyte` 节点 ID

## ◆ nodeServer()

NodeId rm::nodeServer | ( | 0 | ,
|  | UA_NS0ID_SERVER | )
| constexpr

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

对象节点：`Server` 节点 ID

## ◆ nodeString()

NodeId rm::nodeString | ( | 0 | ,
|  | UA_NS0ID_STRING | )
| constexpr

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

数据类型节点：`String` 节点 ID

## ◆ nodeTypesFolder()

NodeId rm::nodeTypesFolder | ( | 0 | ,
|  | UA_NS0ID_TYPESFOLDER | )
| constexpr

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

对象节点：`TypesFolder` 节点 ID

## ◆ nodeUint16()

NodeId rm::nodeUint16 | ( | 0 | ,
|  | UA_NS0ID_UINT16 | )
| constexpr

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

数据类型节点：`Uint16` 节点 ID

## ◆ nodeUint32()

NodeId rm::nodeUint32 | ( | 0 | ,
|  | UA_NS0ID_UINT32 | )
| constexpr

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

数据类型节点：`Uint32` 节点 ID

## ◆ nodeUint64()

NodeId rm::nodeUint64 | ( | 0 | ,
|  | UA_NS0ID_UINT64 | )
| constexpr

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

数据类型节点：`Uint64` 节点 ID

## ◆ nodeVariableTypesFolder()

NodeId rm::nodeVariableTypesFolder | ( | 0 | ,
|  | UA_NS0ID_VARIABLETYPESFOLDER | )
| constexpr

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

对象节点：`VariableTypesFolder` 节点 ID

## ◆ nodeViewsFolder()

NodeId rm::nodeViewsFolder | ( | 0 | ,
|  | UA_NS0ID_VIEWSFOLDER | )
| constexpr

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

对象节点：`ViewsFolder` 节点 ID

## ◆ operator|() [1/2]

NodeId rm::operator| | ( | NodeId | origin,
|  | rm::FindNodeInClient && | fnic )

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

客户端路径搜索

参数

  [in] | origin | 起始 NodeId
  [in] | fnic | 目标节点信息（客户端指针、命名空间、浏览名）

返回
  目标 NodeId

## ◆ operator|() [2/2]

NodeId rm::operator| | ( | NodeId | origin,
|  | rm::FindNodeInServer && | fnis )

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

服务端路径搜索

参数

  [in] | origin | 起始 NodeId
  [in] | fnis | 目标节点信息（服务端指针、命名空间、浏览名）

返回
  目标 NodeId

## 变量说明

## ◆ typeflag_ns0

UA_Byte rm::typeflag_ns0[]
| constexpr

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

初始值:
= {UA_NS0ID_BOOLEAN, UA_NS0ID_SBYTE, UA_NS0ID_BYTE,
UA_NS0ID_INT16, UA_NS0ID_UINT16, UA_NS0ID_INT32,
UA_NS0ID_UINT32, UA_NS0ID_INT64, UA_NS0ID_UINT64,
UA_NS0ID_FLOAT, UA_NS0ID_DOUBLE, UA_NS0ID_STRING}

`DataType` 到对应 `NS0` 下的类型名的映射

- 例如：`typeflag_ns0[UA_TYPES_INT16]` 为 `UA_NS0ID_INT16`