Примеры на node-opcua @https://github.com/node-opcua/node-opcua говорят, что мне нужно переписать код для каждой переменной, добавленной на OPC-сервер, это достигается при вызове 'addressSpace.addVariable()' ... Но если у меня есть 1000 переменных, это может быть трудной задачей ... и в конечном итоге каждый пользовательский пользователь хочет переписать код, это может быть утомительным ... поэтому я пытаюсь сделать это динамически.js get set with dynamic variables in node-opcua
Операция чтения «тегов» с другого пользовательского сервера (не OPC).
С помощью этого 'тега' серверу opc необходимо добавить их в узел 'device'.
Когда OPC сервер узел opcua найти получить или установить переменный, поступающие из сети, это называют получить или набор соответствующих переменный:
for (var i = 0; i < tags.GetTags.length; i++)
{
variables[tags.GetTags[i].Tag] = {"value" : 0.0, "is_set" : false};
addressSpace.addVariable({
componentOf: device, // Parent node
browseName: tags.GetTags[i].Tag, // Variable name
dataType: "Double", // Type
value: {
get: function() {
//console.log(Object.getOwnPropertyNames(this));
return new opcua.Variant({dataType: opcua.DataType.Double, value: variables[this["browseName"]].value }); // WORKS
},
set: function (variant) {
//console.log(Object.getOwnPropertyNames(this));
variables[this["browseName"]].value = parseFloat(variant.value); // this["browseName"] = UNDEFINED!!!
variables[this["browseName"]].is_set = true;
return opcua.StatusCodes.Good;
}
}
});
console.log(tags.GetTags[i].Tag);
}
Как я уже говорил, я пытался использовать 'this' в get и set функции с половиной удачи, get имеет свойство this.browseName (имя тега), которое можно использовать для динамического чтения моих переменных, и в настоящее время оно работает.
Проблема с набором, в наборе 'this.browseName' и 'this.nodeId' не существует! Таким образом, он дает ошибку «undefined». Он также не существует в варианте переменной.
Вы знаете, как использовать динамические переменные с указанным выше кодом? Мне нужно иметь один для цикла с одним get и одним набором определений для всех переменных (тегов), которые читают и записывают объект с несколькими свойствами или массив объектов, например 1 get и 1 набор определений, которые записывают правую переменную в записывает массив.
PS: Я нашел на переполнение стека это:
var foo = { a: 5, b: 6, init: function() { this.c = this.a + this.b; return this; } }
Но в моем случае узел-opcua переменная не имеет «это» работает как на примере. В 'set' (например, init): this.browseName (например a) и this.nodeId (например, b) недоступны.