如何使用 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);
}
}
首先,这个实现是否有问题,即输入一个对象而不是特定的数据类型?
此外,关于写入数组节点,我有两个主要问题。
- 如何写入我的数组之一的特定元素?
- 如何保证客户端先更新一个数组?
感谢您提供的任何建议。
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?
使用 WriteValue
的 indexRange
参数并调用接受 WriteValue
.
列表的 OpcUaClient::write
方法
或者,如果服务器在地址空间中将每个元素公开为它自己的节点,您可以尝试将标量值直接写入该节点。
无论哪种情况,都不能保证服务器会支持或允许它。
How can I guarantee that the client updates one array before the other?
进行两个单独的写入调用并等待第一个完成后再执行第二个。
我是 运行 一个 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);
}
}
首先,这个实现是否有问题,即输入一个对象而不是特定的数据类型?
此外,关于写入数组节点,我有两个主要问题。
- 如何写入我的数组之一的特定元素?
- 如何保证客户端先更新一个数组?
感谢您提供的任何建议。
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?
使用 WriteValue
的 indexRange
参数并调用接受 WriteValue
.
OpcUaClient::write
方法
或者,如果服务器在地址空间中将每个元素公开为它自己的节点,您可以尝试将标量值直接写入该节点。
无论哪种情况,都不能保证服务器会支持或允许它。
How can I guarantee that the client updates one array before the other?
进行两个单独的写入调用并等待第一个完成后再执行第二个。