node.js node-opcua kepserverex

node.js - crear variable en Kepserver con node-opcua



kepserverex (1)

Tengo un PLC Siemens 1200. Al node-opcua cliente de node-opcua y Kepserver, puedo leer las variables y cambiar los valores. Ahora me gustaría crear una nueva variable en el PLC desde node-opcua en KepServer.

He intentado usar el servidor de node-opcua porque en los ejemplos he visto cómo crear variables, pero recibo un error porque estoy tratando de conectarme al mismo puerto que 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) } });

¿Cómo podría tratar de crear una nueva variable? y para crear una etiqueta de grupo de node-opcua?

¿Es posible tener un servidor de opcua en Kepserver y crear variables que se conecten a ese servidor directamente? Mi Kepserver está en: opc.tcp: // localhost: 49320 Para conectarme a este Kepserver, utilizo el cliente 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(){}); });

Me gustaría crear nuevas variables a partir de código en mi Kepserver. He visto que con el código del servidor nodeopcua hay una forma de crear variables: Crear un servidor simple

Me gustaría usar algo como en KepServer:

server.engine.addressSpace.addVariable

¿Qué podría hacer para resolver mi problema?


No puede crear variables en KEPServerEx desde el KEPServerEx de node-opcua .

Pero ni siquiera tienes que crearlos. Puede usar la función de KEPServerEx para hacer un túnel de las variables directamente en el PLC. Eso significa que si intenta leer la variable que no está definida en la lista de variables del servidor, KEPServerEx intentará encontrarlas dentro del PLC. Entonces, no tiene que crear o incluso mantener la lista de variables en KEPServerEx. Solo léalo por el cliente con la dirección de la variable correcta:

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