如何使用 Eclipse Milo 按顺序写入两个 OPC-UA 数组元素?

How can I write to two OPC-UA array elements in order with Eclipse Milo?

我是 运行 一个 OPC-UA 服务器,我使用 Eclipse Milo 客户端连接。我希望能够写入两个节点,均使用 DataType Double Array[60]。

为了覆盖节点值,我复制了一个客户端示例并将其集成到我的代码中:

    public void writeNodeValue(Node node, Object input) {
        Variant v = new Variant(input);
        DataValue dv = new DataValue(v, null, null);
        NodeId nodeId = node.getNodeId();
        
        CompletableFuture<StatusCode> f =
                client.writeValue(nodeId, dv);
        
        StatusCode statusCode = null;
        try {
            statusCode = f.get();
        } catch (Throwable t) {
            logger.error("Error writing value: {}", t.getMessage(), t);
            future.completeExceptionally(t);
        }
    }

首先,这个实现是否有问题,即输入一个对象而不是特定的数据类型?

此外,关于写入数组节点,我有两个主要问题。

  1. 如何写入我的数组之一的特定元素?
  2. 如何保证客户端先更新一个数组?

感谢您提供的任何建议。

Firstly, is there an issue with this implementation, i.e. inputting an Object rather than a specific data type?

在类型签名中使用 Object 没问题,但值实际上必须是服务器期望的类型。

How can I write to a specific element of one of my arrays?

使用 WriteValueindexRange 参数并调用接受 WriteValue.

列表的 OpcUaClient::write 方法

或者,如果服务器在地址空间中将每个元素公开为它自己的节点,您可以尝试将标量值直接写入该节点。

无论哪种情况,都不能保证服务器会支持或允许它。

How can I guarantee that the client updates one array before the other?

进行两个单独的写入调用并等待第一个完成后再执行第二个。