问题描述
假设有一个名为Fruit的读/写变量。 可选选项为苹果,梨,草莓和菠萝。
使用OptionSetType似乎是最合适的方法。 但是我没有找到node-opcua
的任何示例有人可以提供示例吗?或者还有其他/更好/更聪明的方法吗?
解决方法
枚举成为我最好的朋友
const fruitEnumType = ownNameSpace.addEnumerationType({
browseName: "Fruits",enumeration: ["apple","pear","strawberry","pineapple"],});
let selected = "apple";
ownNameSpace.addVariable({
browseName: "Fruit",componentOf: folder,dataType: fruitEnumType,value: {
get: () =>
new Variant({
dataType: DataType.String,value: selected,}),set: (value: Variant) => {
selected = value.value;
return StatusCodes.Good;
},},});
,
node-opcua 中的 UAVariable 类带有两个辅助方法,可以轻松处理枚举。 readEnumValue
和 writeEnumValue
.
你会发现这个表格更实用:
const fruit2 = ownNameSpace.addVariable({
browseName: "Fruit2s",componentOf: myObject,dataType: fruitEnumType
});
fruit2.writeEnumValue("strawberry");
console.log("enum value = ",fruit2.readEnumValue());
console.log("enum value name = ",fruit2.readEnumValue().name);
console.log("enum value value = ",fruit2.readEnumValue().value);
console.log("dataValue is ",fruit2.readValue().toString());
enum value = { value: 2,name: 'strawberry' }
enum value name = strawberry
enum value value = 2
dataValue is { /* DataValue */
value: Variant(Scalar<Int32>,value: 2)
statusCode: Good (0x00000)
serverTimestamp: 2021-01-23T08:59:04.273Z $ 990.400.000
sourceTimestamp: 2021-01-23T08:59:04.273Z $ 990.400.000
}
注意:您不需要使用 get/set 形式,并且值已经存储在变量中。