Skip to content
Snippets Groups Projects
Select Git revision
  • d8dfb20710b19e428a83eddfaffd85a546429168
  • 2024ws default
  • 2023ws
  • 2022ws
  • 2021ws
  • 2020ws
  • 2018ws
  • 2019ws
  • 2017ws
  • 2016ws
10 results

objects-13.c

Blame
  • 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;
    }