| RMVL 2.4.0 Robotic Manipulation and Vision Library

载入中...
搜索中...
未找到
samples/opcua/opcua_server.cpp

OPC UA 服务器例程

OPC UA 服务器例程

#include <csignal>
#include "rmvl/opcua/server.hpp"
using namespace rm;
OpcuaServer server(4840, "RMVL Server Demo");
static void onHandle(int) { server.shutdown(); }
static void clearSreen() {
#ifdef _WIN32
int ch = system("cls");
#else
int ch = system("clear");
#endif
if (ch == -1) {
printf("\033[2J");
printf("\033[0;0H");
}
}
static void resetCursor() {
printf("\033[10;0H");
fflush(stdout);
}
static void show() {
constexpr const char *data = " ┌────────────────┬────────────────┬────────────────┬────────────────┐\n"
" │ NodeId │ DisplayName │ BrowseName │ Value │\n"
" ├────────────────┼────────────────┼────────────────┼────────────────┤\n"
" │ │ │ │ │\n"
" ├────────────────┼────────────────┼────────────────┼────────────────┤\n"
" │ │ │ │ │\n"
" ├────────────────┼────────────────┼────────────────┼────────────────┤\n"
" │ │ │ │ │\n"
" └────────────────┴────────────────┴────────────────┴────────────────┘\n";
printf("%s", data);
}
static std::string nodestr(const NodeId &node) { return "ns=" + std::to_string(node.ns) + "," + "s=" + std::to_string(node.id); }
static void update(int row, int col, std::string_view msg) {
if (row < 1 || row > 3 || col < 1 || col > 4)
return;
constexpr int width = 14;
int size = msg.size();
if (size > width) {
msg = msg.substr(0, width);
size = width;
}
int real_row = 2 * row + 2;
int real_col = 17 * col - 12;
int padding = (width - size) / 2;
printf("\033[%d;%dH", real_row, real_col);
printf("%*s%s%*s", padding, "", msg.data(), padding + (width - size) % 2, "");
resetCursor();
}
int main() {
signal(SIGINT, onHandle);
clearSreen();
show();
Variable value_1 = 42;
value_1.display_name = "Value 1";
value_1.browse_name = "value_1";
Variable value_2 = 3.14;
value_2.display_name = "Value 2";
value_2.browse_name = "value_2";
std::string last_call = "-- None --";
Method add = [&](const NodeId &, const Variables &iargs) -> std::pair<bool, Variables> {
int num1 = iargs[0], num2 = iargs[1];
int res = num1 + num2;
last_call = "Result: " + std::to_string(res);
return {true, {res}};
};
add.display_name = "Add";
add.browse_name = "add";
add.iargs = {{"num1", tpInt32}, {"num2", tpInt32}};
add.oargs = {{"result", tpInt32}};
auto nd_value_1 = server.addVariableNode(value_1);
auto nd_value_2 = server.addVariableNode(value_2);
auto nd_add = server.addMethodNode(add);
update(1, 1, nodestr(nd_value_1));
update(1, 2, value_1.display_name);
update(1, 3, value_1.browse_name);
update(2, 1, nodestr(nd_value_2));
update(2, 2, value_2.display_name);
update(2, 3, value_2.browse_name);
update(3, 1, nodestr(nd_add));
update(3, 2, add.display_name);
update(3, 3, add.browse_name);
OpcuaServerTimer timer(server, 50, [&](OpcuaServerView sv) {
auto value_1 = sv.read(sv.find("value_1"));
update(1, 4, std::to_string(value_1.cast<int>()));
auto value_2 = sv.read(sv.find("value_2"));
update(2, 4, std::to_string(value_2.cast<double>()));
update(3, 4, last_call);
});
server.spin();
resetCursor();
return 0;
}
rm::Method
OPC UA 方法
定义 method.hpp:54
rm::Method::iargs
std::vector< Argument > iargs
传入参数列表
定义 method.hpp:87
rm::Method::browse_name
std::string browse_name
浏览名称 BrowseName
定义 method.hpp:72
rm::Method::display_name
std::string display_name
展示名称 DisplayName
定义 method.hpp:81
rm::Method::oargs
std::vector< Argument > oargs
传出参数列表
定义 method.hpp:90
rm::NodeId
OPC UA 节点 ID
定义 utilities.hpp:40
rm::NodeId::id
uint32_t id
节点号
定义 utilities.hpp:86
rm::NodeId::ns
uint16_t ns
命名空间
定义 utilities.hpp:85
rm::OpcuaServerTimer
OPC UA 服务器定时器
定义 server.hpp:344
rm::OpcuaServerView
OPC UA 服务器视图
定义 server.hpp:28
rm::OpcuaServerView::find
NodeId find(std::string_view browse_path, const NodeId &src_nd=nodeObjectsFolder) const noexcept
通过 BrowseName 的路径搜索命名空间 ns 为 1 的节点
rm::OpcuaServerView::read
Variable read(const NodeId &nd) const
从指定的变量节点读数据
rm::OpcuaServer
OPC UA 服务器
定义 server.hpp:123
rm::Variable
OPC UA 变量
定义 variable.hpp:147
rm::Variable::cast
static Tp cast(const rm::Variable &val)
将变量节点转化为指定类型的数据
定义 variable.hpp:234
rm::Variable::browse_name
std::string browse_name
浏览名称 BrowseName
定义 variable.hpp:291
rm::Variable::display_name
std::string display_name
展示名称 DisplayName
定义 variable.hpp:302
rm::reflect::size
consteval std::size_t size(auto &&...args)
获取指定类型的成员个数
定义 util.hpp:304
rm::tpInt32
constexpr DataType tpInt32
数据类型：Int32
定义 utilities.hpp:136
rm::Variables
std::vector< Variable > Variables
变量列表别名
定义 variable.hpp:340
rm::msg
LPSS 消息类型命名空间
定义 point.hpp:20
rm
定义 datastruct.hpp:24