node-opcua how to write to variables
Asked Answered
S

2

6

A very basic question I'm sure. I have made the client and the server from the examples on http://node-opcua.github.io/.

The example demonstrates reading the variables but not how to write.

Thanks for the help

Sprinkler answered 14/9, 2017 at 15:49 Comment(0)
S
5

I figured it out for those with the same question see the code below. The writing function is at step 4

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

var client = new opcua.OPCUAClient();
var endpointUrl = "opc.tcp://" + require("os").hostname() + ":4334/UA/MyLittleServer";


var the_session, the_subscription;
async.series([

    // step 1 : connect to
    function(callback)  {
        client.connect(endpointUrl,function (err) {
            if(err) {
                console.log(" cannot connect to endpoint :" , endpointUrl );
            } else {
                console.log("Step 1 connected !");
            }
            callback(err);
        });
    },

    // step 2 : createSession
    function(callback) {
        client.createSession( function(err,session) {
            if(!err) {
                the_session = session;
            }
            callback(err);
        });
    },

    // step 3 : browse
    function(callback) {
       the_session.browse("RootFolder", function(err,browse_result){
           if(!err) {
               browse_result[0].references.forEach(function(reference) {
                   console.log("Step 3" + reference.browseName.toString());
               });
           }
           callback(err);
       });
    },

    // step 4 : read a variable with readVariableValue
    function(callback) {
       the_session.readVariableValue("ns=1;s=myvariable1", function(err,dataValue) {
           if (!err) {
               console.log("Step4 free mem % = " , dataValue.toString());
           }
           callback(err);

       });


    },

    // step 4' : read a variable with read
    function(callback) {
       var max_age = 0;
       var nodes_to_read = [
          { nodeId: "ns=1;s=myvariable2", attributeId: opcua.AttributeIds.Value } 
       ];
       the_session.read(nodes_to_read, max_age, function(err,nodes_to_read,dataValues) {
           if (!err) {
               console.log("Step 4 again free mem % = " , dataValues[0].value.value);
           }
           //callback(err);

       });

         var nodesToWrite = [{
                nodeId: "ns=1;s=myvariable2",
                attributeId: opcua.AttributeIds.Value,
                indexRange: null,
                value: { 
                    value: { 
                        dataType: opcua.DataType.Double,
                         value: 34
                    }
              }
       }];
      the_session.write(nodesToWrite, function(err,statusCode,diagnosticInfo) {
           if (!err) {
               console.log(" write ok" );
               console.log(diagnosticInfo);
               console.log(statusCode);
           }
           callback(err);
       });  


    },

    // step 5: install a subscription and install a monitored item for 10 seconds
    function(callback) {

       the_subscription=new opcua.ClientSubscription(the_session,{
           requestedPublishingInterval: 100,
           requestedLifetimeCount: 10,
           requestedMaxKeepAliveCount: 2,
           maxNotificationsPerPublish: 10,
           publishingEnabled: true,
           priority: 10
       });

       the_subscription.on("started",function(){
           console.log("subscription started for 2 seconds - subscriptionId=",the_subscription.subscriptionId);
       }).on("keepalive",function(){
           console.log("keepalive");
       }).on("terminated",function(){
           callback();
       });
       /*
       setTimeout(function(){
           the_subscription.terminate();
       },10000);
       */
       // install monitored item
       var monitoredItem  = the_subscription.monitor({
           nodeId: opcua.resolveNodeId("ns=1;s=myvariable1"),
           attributeId: opcua.AttributeIds.Value
       },
       {
           samplingInterval: 100,
           discardOldest: true,
           queueSize: 10
       },
       opcua.read_service.TimestampsToReturn.Both
       );
       console.log("-------------------------------------");

       monitoredItem.on("changed",function(dataValue){
          console.log("variable 1 = ",dataValue.value.value);
       });
    },

    // close session
    function(callback) {
        the_session.close(function(err){
            if(err) {
                console.log("session closed failed ?");
            }
            callback();
        });
    }

],
function(err) {
    if (err) {
        console.log(" failure ",err);
    } else {
        console.log("done!");
    }
    client.disconnect(function(){});
}) ;
Sprinkler answered 14/9, 2017 at 17:27 Comment(0)
V
2

You can use the session#write method

function (callback) {
  var setPointTemperatureId = "ns=4;s=SetPointTemperature";
  var nodesToWrite = [
    {
      nodeId: setPointTemperatureId,
      attributeId: AttributeIds.Value,
      value: /*new DataValue(*/{
        value: {/* Variant */
          dataType: DataType.Double,
          value: 10.0
        }
      }
    }
  ];

  session.write(nodesToWrite, function (err, statusCodes) {
     if (!err) {
     }
     callback(err);
  });
}
Vicious answered 14/9, 2017 at 20:0 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.