2015-12-19 25 views
5

Ich benutze node-opcua module und Ich möchte viele opc ua nodes mit Abonnement überwachen ich führen sehen wie: Benutzer in HTML-UI wählen, was zu überwachen, die Knoten, dann Monitor-Taste klicken, die diese nodeIds gesendet als Parameter und dann für jede nodeid wird Abonnement festgelegt und .on ("geändert") funktioniert für jeden dieser Artikel wie parallel. Jetzt Code wie folgt aussieht:node.js OPC UA viele überwachten Objekte

var monitoredItem = the_subscription.monitor({ 
     nodeId: opcua.resolveNodeId("ns=6;s=S71500ET200MP station_1.Master.111"), 
     attributeId: 13 
    }, 
    { 
     samplingInterval: 100, 
     discardOldest: true, 
     queueSize: 10 
    }, 
    opcua.read_service.TimestampsToReturn.Both 
    ); 
    console.log("-------------------------------------"); 
    var nodes = []; 

    monitoredItem.on("changed",function(dataValue){ 
     //console.log(" value = ",dataValue.value.value); 
     //console.log(" sourceTimestamp = ",dataValue.sourceTimestamp.toISOString()); 
     //console.log(JSON.stringify(dataValue)); 
     var Node = {nodeId: "ns=6;s=S71500ET200MP station_1.Master.111", nodeName: "111" , nodeValue: dataValue.value.value , nodeTimestamp: dataValue.sourceTimestamp.toISOString()}; 
     var arrayNode = Object.keys(Node).map(function(k) { return Node[k] }); 
     //console.log(JSON.stringify(Node)); 
     nodes.push(arrayNode); 

    // console.log(nodes); 
    }); 
}, 

Gerade jetzt, wenn ich neue Artikel einstellen möchten überwachen sie fügen Sie einfach viele Vars MonitorItem1, ..2, ..3 usw.

Wie es funktioniert in mehr agile/dynamic Weg? wenn ich Array (Strings) von nodeIds habe und ich möchte, dass jede davon im Abonnement überwacht wird. -Code ist ein Teil von async.series ([code])

Antwort

1

Methode async.each gelöst

async.each(nodeIdArr, function(nodeid, callback) { 

    var monitoredItem = the_subscription.monitor({ 
      nodeId: opcua.resolveNodeId(nodeid), 
      attributeId: 13 
     }, 
     { 
      samplingInterval: 100, 
      discardOldest: true, 
      queueSize: 10 
     }, 
     opcua.read_service.TimestampsToReturn.Both 
     ); 
     console.log("-------------------------------------"); 


     monitoredItem.on("changed",function(dataValue){ 
      //console.log(" value = ",dataValue.value.value); 
      //console.log(" sourceTimestamp = ",dataValue.sourceTimestamp.toISOString()); 
      //console.log(JSON.stringify(dataValue)); 
      var Node = {nodeId: nodeid, nodeName: "111" , nodeValue: dataValue.value.value , nodeTimestamp: dataValue.sourceTimestamp.toISOString()}; 
      var arrayNode = Object.keys(Node).map(function(k) { return Node[k] }); 
      //console.log(JSON.stringify(Node)); 
      nodes.push(arrayNode); 

     // console.log(nodes); 
     });