Select Git revision
objects-13.c
opc_server.cpp 1.30 KiB
/// @file opc_server.cpp
///
#include <opc/ua/node.h>
#include <opc/ua/server/server.h>
using namespace OpcUa;
UaServer server;
Node renewable;
std::vector<OpcUa::Variant> my_method(NodeId context, std::vector<OpcUa::Variant> arguments)
{
std::cout << "Method triggered" << std::endl;
std::cout << renewable.GetValue().ToString() << std::endl;
std::vector<OpcUa::Variant> result;
result.push_back(Variant(static_cast<uint8_t>(0)));
return result;
}
void add_nodes_to(uint32_t idx, Node &objects)
{
Node smart_grid = objects.AddFolder(idx, "smart_grid");
renewable = smart_grid.AddVariable(idx, "renewable_power", Variant(42.0));
Node prop = smart_grid.AddProperty(idx, "a_property_thin", Variant("something"));
Node method = smart_grid.AddMethod(idx, "trigger_method_x", my_method);
}
int main(int argc, char **argv)
{
auto logger = spdlog::stderr_color_mt("server");
server = UaServer(logger);
server.SetEndpoint("opc.tcp://localhost:4840/opcua/smartgridserver");
server.SetServerURI("Smart Grid OPC UA Server");
server.Start();
auto idx = server.RegisterNamespace("smart-grid");
Node objects = server.GetObjectsNode();
add_nodes_to(idx, objects);
while (true)
{
std::this_thread::sleep_for(std::chrono::seconds(1));
}
return 0;
}