5

私が使用node-opcua moduleしていて、サブスクリプションで多くを監視したいのですが、次のような結果が表示されます: HTML UI のユーザーが監視するノードを選択し、これらをパラメーターとしてopc ua nodes送信した [監視] ボタンをクリックすると、すべてのサブスクリプションと .on("changed" が設定されます) 並列のように、これらのすべてのアイテムに対して機能します。コードは次のようになります。nodeIdsnodeid

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

新しい項目を監視するように設定したい場合は、多くの変数 MonitorItem1 、 ..2 、 ..3 などを追加するだけです。

より多くの方法でそれを行うagile/dynamic方法は?の配列(文字列)がnodeIdsあり、これらのそれぞれをサブスクリプションで監視したい場合。コードはasync.series([ コード ])の一部です

4

2 に答える 2

2

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);
      });
于 2015-12-20T09:55:35.803 に答える