2016-09-05 8 views
16

ile değişken oluştur. Siemens 1200 PLC'im var. Node-opcua client ve Kepserver kullanarak değişkenleri okuyabiliyorum ve değerleri değiştirebiliyorum. Şimdi KepServer'da PLC'de node-opcua'dan yeni bir değişken oluşturmak istiyorum. örneklerde Ben değişkenler oluşturmak için nasıl gördüğüm çünkü enter image description hereKepserver'de node-opcua

Ben düğüm-opcua sunucusunu kullanmayı denedik ama KEPServer yapar aynı bağlantı noktasına bağlamak için çalışıyorum çünkü bir hata alıyorum.

var server = new opcua.OPCUAServer({ 
    port: 49320, // the port of the listening socket of the server 
    resourcePath: "", // this path will be added to the endpoint resource name 
    buildInfo : { 
     productName: "MySampleServer1", 
     buildNumber: "7658", 
     buildDate: new Date(2014,5,2) 
    } 
}); 

enter image description here

Nasıl yeni değişken oluşturmak için anlaşma olabilir? ve node-opcua'dan bir grup etiketi oluşturmak için?

Kepserver'da bir opcua sunucusuna sahip olmak ve bu sunucuya doğrudan bağlanan değişkenler oluşturmak mümkün mü? opc.tcp: Benim KEPServer içindedir // localhost: 49320 Ben nodeopcua istemcisi kullanıyorsanız bu KEPServer bağlanmak için:

var opcua = require("node-opcua"); var client = new opcua.OPCUAClient(); var endpointUrl = "opc.tcp://127.0.0.1:49320"; var the_session = null; 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("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,diagnostics){ 
      if(!err) { 
       browse_result[0].references.forEach(function(reference) { 
        console.log(reference.browseName); 
       }); 
      } 
      callback(err); 
     }); 
    }, 
    // step 4 : read a variable 
    function(callback) { 
     the_session.readVariableValue("ns=2;s=S7.1200.nombre", function(err,dataValue) { 
      if (!err) { 
       console.log(" temperature = " , dataValue.toString()); 
      } 
      callback(err); 
     }) 
    }, 

    // step 5: install a subscription and monitored item 
    // 
    // ----------------------------------------- 
    // create subscription 
    function(callback) { 

     the_subscription=new opcua.ClientSubscription(the_session,{ 
      requestedPublishingInterval: 1000, 
      requestedLifetimeCount: 10, 
      requestedMaxKeepAliveCount: 200, 
      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(); 
     },100000); 


     // install monitored item 
     // 
     var monitoredItem = the_subscription.monitor({ 
      nodeId: opcua.resolveNodeId("ns=2;s=S7.1200.nombre"), 
      attributeId: 13 
      //, dataEncoding: { namespaceIndex: 0, name:null } 
     }, 
     { 
      samplingInterval: 100, 
      discardOldest: true, 
      queueSize: 10 
     }); 
     console.log("-------------------------------------"); 

     // subscription.on("item_added",function(monitoredItem){ 
     //xx monitoredItem.on("initialized",function(){ }); 
     //xx monitoredItem.on("terminated",function(value){ }); 


     monitoredItem.on("changed",function(value){ 
      console.log(" New Value = ",value.toString()); 
     }); 

    }, 

    // ------------------------------------------------ 
    // closing session 
    // 
    function(callback) { 
     console.log(" closing session"); 
     the_session.close(function(err){ 

      console.log(" session closed"); 
      callback(); 
     }); 
    }, 


], 
    function(err) { 
     if (err) { 
      console.log(" failure ",err); 
     } else { 
      console.log("done!") 
     } 
     client.disconnect(function(){}); 
}) ; 

ben koddan yeni değişkenleri oluşturmak istiyorum benim KEPServer. Ben nodeopcua sunucu kodu ile değişkenleri yaratmanın bir yol olduğunu gördüm: https://github.com/node-opcua/node-opcua/blob/master/documentation/creating_a_server.md

Ben KEPServer olduğu gibi bu tür bir şey kullanmak istiyorum: server.engine.addressSpace.addVariable

benim sorunu çözmek için ne yapabilir?

+0

Ne istiyorsunuz? Değişken ortam? –

+0

PLC belleğinde dinamik bir şekilde etiket oluşturmak istiyorum – mram888

cevap

0

node-opcua istemcisinden değişkenler yaratamazsınız.

Ancak bunları oluşturmanız gerekmez. Değişkenleri doğrudan PLC'ye tünellemek için KEPServerEx özelliğini kullanabilirsiniz. Bu, sunucu değişken listesinde tanımlanmamış bir değişkeni okumayı denerseniz, KEPServerEx bunları PLC içinde bulmaya çalışacaktır. Öyleyse, KEPServerEx'te değişken listesini oluşturmanıza veya korumanıza gerek yoktur. Sadece doğru değişken adresli istemciden okuyun:

session.readVariableValue("ns=2;s=Channel1.Device1.MB0", function(err,dataValue) { 
    if (!err) { 
     console.log("value=", dataValue.toString()); 
    } 
}