Announcement

REXYGEN forum has been moved. This one is closed.
Head over to the new REXYGEN Community Forum at https://forum.rexygen.com.

Looking forward to meeting you there!
 

#1 2016-03-24 18:55:20

fish19
Member
Registered: 2016-03-24
Posts: 7

Node OPCUA

Is there a way to pass rex variables to the node opcua server to fill in the stuff like is shown in MyVariable below.

/*global require,setInterval,console */
var opcua = require("node-opcua");


// Let's create an instance of OPCUAServer
var server = new opcua.OPCUAServer({
    port: 4334, // the port of the listening socket of the server
    resourcePath: "UA/MyLittleServer", // this path will be added to the endpoint resource name
     buildInfo : {
        productName: "MySampleServer1",
        buildNumber: "7658",
        buildDate: new Date(2014,5,2)
    }
});

function post_initialize() {
    console.log("initialized");
    function construct_my_address_space(server) {
   
        var addressSpace = server.engine.addressSpace;
       
        // declare a new object
        var device = addressSpace.addObject({
            organizedBy: addressSpace.rootFolder.objects,
            browseName: "MyDevice"
        });
       
        // add some variables
        // add a variable named MyVariable1 to the newly created folder "MyDevice"
        var variable1 = 1;
       
        // emulate variable1 changing every 500 ms
        setInterval(function(){  variable1+=1; }, 500);
       
        addressSpace.addVariable({
            componentOf: device,
            browseName: "MyVariable1",
            dataType: "Double",
            value: {
                get: function () {
                    return new opcua.Variant({dataType: opcua.DataType.Double, value: variable1 });
                }
            }
        });
       
        // add a variable named MyVariable2 to the newly created folder "MyDevice"
        var variable2 = 10.0;
       
        server.engine.addressSpace.addVariable({
           
            componentOf: device,
           
            nodeId: "ns=1;b=1020FFAA", // some opaque NodeId in namespace 4
           
            browseName: "MyVariable2",
           
            dataType: "Double",   
           
            value: {
                get: function () {
                    return new opcua.Variant({dataType: opcua.DataType.Double, value: variable2 });
                },
                set: function (variant) {
                    variable2 = parseFloat(variant.value);
                    return opcua.StatusCodes.Good;
                }
            }
        });
        var os = require("os");
        /**
         * returns the percentage of free memory on the running machine
         * @return {double}
         */
        function available_memory() {
            // var value = process.memoryUsage().heapUsed / 1000000;
            var percentageMemUsed = os.freemem() / os.totalmem() * 100.0;
            return percentageMemUsed;
        }
        server.engine.addressSpace.addVariable({
           
            componentOf: device,
           
            nodeId: "ns=1;s=free_memory", // a string nodeID
            browseName: "FreeMemory",
            dataType: "Double",   
            value: {
                get: function () {return new opcua.Variant({dataType: opcua.DataType.Double, value: available_memory() });}
            }
        });
    }
    construct_my_address_space(server);
    server.start(function() {
        console.log("Server is now listening ... ( press CTRL+C to stop)");
        console.log("port ", server.endpoints[0].port);
        var endpointUrl = server.endpoints[0].endpointDescriptions()[0].endpointUrl;
        console.log(" the primary server endpoint url is ", endpointUrl );
    });
}
server.initialize(post_initialize);

Offline

#2 2016-03-29 09:11:10

jaroslav_sobota
Administrator
Registered: 2015-10-27
Posts: 535

Re: Node OPCUA

Thank you for your question. At the moment I cannot help with this one.

A native OPC UA server for the REX Control System is in development. As soon as we have it ready, I'll let you know. Thanks for your patience.

Offline

Board footer

Powered by FluxBB