node-opcua @https://github.com/node-opcua/node-opcuaの例では、OPCサーバに追加されたすべての変数のコードを書き直す必要があると言われていますが、これは 'addressSpace.addVariableしかし、もし私が1000の変数を持っているのなら、それは難しい作業かもしれません。そして最終的に各カスタムユーザはコードを書き直したいと思うかもしれません。面倒かもしれません...だから私はそれを動的にやろうとしています。jsはnode-opcuaの動的変数で設定されます
opcは、別のカスタムサーバー(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には変数を動的に読み取るために使用できる 'this.browseName'(タグ名)プロパティがあり、現在動作しています。
問題はセットで、 'this.browseName'と 'this.nodeId'が存在しません。したがって、「未定義」エラーが発生します。バリアント変数にも存在しません。
上記のコードで動的変数を使用する場合の回避策をご存知ですか?私は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のようなもの)には到達できません。