如何在OPC-UA中选择选项?

问题描述

假设有一个名为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 类带有两个辅助方法,可以轻松处理枚举。 readEnumValuewriteEnumValue .

你会发现这个表格更实用:

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 形式,并且值已经存储在变量中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...