Как я могу изменить значение с узла при наличии экземпляра сервера (node-opcua) - PullRequest
0 голосов
/ 11 июня 2018

Я использую библиотеку node-opcua.У меня есть экземпляр OPCUAServer.Как я могу получить значение узла и отредактировать его?

Я предполагаю, что OPC-клиент должен это делать, но я хочу взаимодействовать с OPC-сервером, так как я отвечаю на внутреннее событие.

Должен ли я использовать что-то вроде WriteRequest для выполнения такой операции?

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

в качестве альтернативы вы можете использовать метод setValueFromSource для переменной.Это обойдёт всю проверку доступа на чтение / запись, которая происходит в writeValue.Это также синхронно

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

setValueFromSource может принимать необязательный код состояния

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

, если не указано StatusCodes.Good предполагается.

и необязательная временная метка источника

nodeToChange.setValueFromSource(
    { dataType: "Double", value: 3.14},
     opcua.StatusCodes.Good, new Date());
0 голосов
/ 12 июня 2018

Мне удалось разрешить его с помощью метода writeValue () UAVariable:

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