4

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

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

我是否应该使用诸如WriteRequest 之类的东西来执行此类操作?

4

2 回答 2

5

或者,您可以setValueFromSource在变量上使用该方法。这将绕过 writeValue 中发生的所有读/写访问检查。也是同步的

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());
于 2018-06-12T20:50:26.363 回答
1

我设法用 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, 
      () => { }
);
于 2018-06-12T11:42:51.163 回答