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

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

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

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


person Astrowie    schedule 11.06.2018    source источник


Ответы (2)


в качестве альтернативы вы можете использовать метод 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());
person Etienne    schedule 12.06.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, 
      () => { }
);
person Astrowie    schedule 12.06.2018