Eclipse Milo: Как получить аргумент метода DataType? - PullRequest
0 голосов
/ 24 апреля 2020

Используйте eclipse milo для подключения к серверу OPCUA, можете использовать browse для получения узлов метода, а затем узнать, как получить DataType аргументов метода?

Так же, как: final BrowseDescription browseDes c = new BrowseDescription (nodeId Root, BrowseDirection.Forward, Identifiers.References, true, uint (NodeClass.Method.getValue ()), uint (BrowseResultMask.All.getValue ()));

BrowseResult browseResult = client.browse(browseDesc).get();
for (final ReferenceDescription rf : browseResult.getReferences()) {
    final NodeId childId = rf.getNodeId().local().orElse(null);
    List<Node> nodes = client.getAddressSpace().browse(childId).get();
    for (Node node : nodes) {
        // Now, I get the Node of method.
        // How to get the method arguments data types?
        system.out.println("need Input types {}" /*, InputArgument */);
        system.out.println("will get Output types {}" /*, OutputArgument */);
    }
}

1 Ответ

0 голосов
/ 25 апреля 2020

Узлы метода имеют ссылки HasProperty на узлы свойств с именами InputArguments и / или OutputArguments, если этот метод получает входные или выходные аргументы.

Если вы прочитаете атрибут значения, если эти узлы, вы получите Argument[] описание аргументов (Name, DataType, ValueRank, ArrayDimensions, Description).


UaMethodNode имеет getInputArguments и getOutputArguments вызовов, которые также могут помочь:

UaMethodNode methodNode = (UaMethodNode) client.getAddressSpace().getNodeInstance(methodId).get();

CompletableFuture<Argument[]> iaf = methodNode
    .getInputArguments()
    .exceptionally(ex -> new Argument[0]);
CompletableFuture<Argument[]> oaf = methodNode
    .getOutputArguments()
    .exceptionally(ex -> new Argument[0]);

iaf.thenAcceptBoth(oaf, (ia, oa) -> {
    System.out.println("inputArgs: " + Arrays.toString(ia));
    System.out.println("outputArgs: " + Arrays.toString(oa));
});
...