使用node-opcua在Kepserver中创buildvariables

我有一台西门子1200 PLC。 使用node-opcua客户端和Kepserver,我可以读取variables并更改值。 现在我想在KepServer的node-opcua中的PLC中创build一个新的variables。 在这里输入图像描述

我试过使用节点opcua服务器,因为在我看到如何创buildvariables的例子,但我得到一个错误,因为我想连接到相同的端口,KepServer做的。

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

在这里输入图像描述

我怎样才能创build一个新的variables? 并从节点opcua创build一个组标签?

是否有可能在Kepserver中有一个opcua服务器,并创build连接到该服务器的variables直接? 我的Kepserver是在:opc.tcp:// localhost:49320要连接到这个Kepserver我使用nodeopcua客户端:

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(){}); }) ; 

我想从我的Kepserver中的代码创build新的variables。 我已经看到,与nodeopcua服务器代码有一种创buildvariables的方式: https : //github.com/node-opcua/node-opcua/blob/master/documentation/creating_a_server.md

我想使用像KepServer: server.engine.addressSpace.addVariable

我能做些什么来解决我的问题?

您不能在节点opcua客户端的KEPServerEx创buildvariables。

但是你甚至不需要创build它们。 您可以使用KEPServerEx的function将variables正确地传送到PLC中。 这意味着如果你尝试读取服务器variables列表中未定义的variables,KEPServerEx将尝试在PLC中find它们。 所以你不必在KEPServerEx中创build甚至维护variables列表。 只要用正确的variables地址读取它:

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