拥有服务器实例(node-opcua)时如何更改节点的值

How can I change value from a node when having a server instance (node-opcua)

我正在使用 node-opcua 库。我有 OPCUAServer 的实例。如何获取节点值并对其进行编辑?

我假设 OPC 客户端应该能够做到这一点,但我想与 OPC 服务器交互,因为我正在响应内部事件。

我是否应该使用 WriteRequest 之类的东西来执行这样的操作?

我设法用 UAVariable 的 writeValue() 方法解决了它:

var opcua = require('node-opcua');

var server = new opcua.OPCUAServer({
  port: OpcServerConfig.port, 
  resourcePath: OpcServerConfig.resourcePath, 
  buildInfo: OpcServerConfig.buildInfo
});

var nodeToChange = server.engine.addressSpace.findNode('ns=1;b=1020FFAA');

nodeToChange.writeValue(
      null, 
      new opcua.DataValue({
        value: new opcua.Variant({dataType: opcua.DataType.Double, value: 5})
      }),
      null, 
      () => { }
);

或者您可以对变量使用 setValueFromSource 方法。 这将绕过 writeValue 中发生的所有 Read/Write 访问检查。 也是同步的

nodeToChange.setValueFromSource({ dataType: "Double", value: 3.14});

setValueFromSource 可以取一个可选的 statusCode

nodeToChange.setValueFromSource(
     { dataType: "Double", value: 3.14}, 
     opcua.StatusCodes.BadWaitingForInitialData
);

如果未指定,则假定为 StatusCodes.Good。

和一个可选的源时间戳

nodeToChange.setValueFromSource(
    { dataType: "Double", value: 3.14},
     opcua.StatusCodes.Good, new Date());