2015-12-19 7 views
5

Io uso node-opcua module e vorrei monitorare molti opc ua nodes Estesa vedo risultato simile: l'utente in html UI scegliere cosa nodi per monitorare, fare clic sul pulsante Monitor che ha inviato questi nodeIds come parametri e quindi per ogni nodeid verrà impostata la sottoscrizione e. on ("modificato") funzionerà per ognuno di questi elementi come in parallelo. Ora codice è simile:node.js OPC UA molti elementi monitorati

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); 
    }); 
}, 

In questo momento se voglio impostare un nuovo punto di monitorare semplicemente aggiungere molte vars MonitorItem1, ..2, ecc ..3

Come fare in più agile/dynamic modo? se ho array (stringhe) di nodeIds e voglio che ognuno di questi sia monitorato in abbonamento. codice fa parte di async.series ([code])

risposta

1

risolto utilizzando async.each metodo

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); 
     }); 
Problemi correlati