Как я могу изменить значение с узла при наличии экземпляра сервера (node-opcua)
Я использую библиотеку node-opcua. У меня есть экземпляр OPCUAServer. Как я могу получить значение узла и отредактировать его?
Я предполагаю, что OPC-клиент должен быть в состоянии сделать это, но я хочу взаимодействовать с OPC-сервером, так как я отвечаю на внутреннее событие.
Должен ли я использовать что-то вроде WriteRequest для выполнения такой операции?
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());
Мне удалось решить это с помощью метода 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,
() => { }
);