2015-12-19 9 views
5

używam node-opcua module i Chciałbym monitorować wiele opc ua nodes z subskrypcji widzę spowodować jak: łatwy w html UI wybrać co węzłów do monitorowania, a następnie kliknij przycisk monitora, który wysłał te nodeIds jako parametry, a następnie dla każdego nodeid zostanie ustawiony subskrypcja i .on ("zmienił") działa dla każdego z tych elementów, jak równolegle. Teraz kod wygląda następująco:node.js OPC UA wielu monitorowanych elementów

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

Teraz jeśli chcę ustawić nowy element do monitorowania po prostu dodać wiele vars MonitorItem1, ..2, ..3 itp

Jak to zrobić w bardziej agile/dynamic droga? jeśli mam tablicę (ciągi) z nodeIds i chcę, aby każdy z nich był monitorowany w subskrypcji. kodu stanowi część kodu async.series ([]),

Odpowiedz

1

rozwiązane za pomocą sposobu async.each

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); 
     }); 
Powiązane problemy