2017-08-28 43 views
1

OPC-UA宇宙とMilo SDKの新機能ですので、私が何をしようとしているのかを説明するために最善を尽くします。サーバーの参照名前空間とカスタム参照へのアクセス

私はOPC-UAサーバーインスタンスを実行しており、サーバーNameSapceにいくつかのノードをロードしています。一方、私はこのサーバーに加入し、このノードを参照しようとするクライアントを持っています。私はクライアント内のノードを見ることができ、このノードに定義されている参照のいくつかにアクセスできます。私が今ホワイトアウトを成功させようとしているのは、サーバで定義されているリファレンスにアクセスすることです.UA-Expertはそれを見ることができますが、Milo Clientの実装はできません。 カスタムリファレンスがサーバー側で定義されましたが、私の目標は「BrowseName」または「DisplayName」にアクセスすることです。

これは簡単な問題ですが、今私はこれで苦労していると思います。

私は上記のテキストで私は何を意味するか例示するために、いくつかのプリントスクリーンを残す:私たちは可能な第2の画像におけるので、私は読んしようとしている参照に赤い矢印ポイント下の画像では

HasComponentの製造と説明が正しくリードされているが、HasAMLRoleReferenceがデバッグウィンドウに表示されていないことを確認してください。

Custom Reference

Debug info

、それは私は私は正しい実装を保証することはできませんが、サーバ側では、私はこれが起こることを知っているではありません。このコード:だから

server.getNodeMap().addReference(new Reference(
        new NodeId(NAMESPACE_IDX, getPrefix(e.getParentElement())), 
        new NodeId(1, 4001),// new NodeId(1,4001) = HasAmlRoleReference 
        server.getNodeMap().getNode(new NodeId(NAMESPACE_IDX, name)).get().getNodeId().expanded(), 
        server.getNodeMap().getNode(new NodeId(NAMESPACE_IDX, name)).get().getNodeClass(), 
        true) 

ReferenceTypeIdnew NodeId(1, 4001)で、これはクライアント側で読み取ろうとしているタイプです。私のコードは、Milo git repoのBrowseNode Exempleに基づいています。私たちは、アドレス空間を見ることができます。この最後の画像で

ので、ここで我々はHasComponentとして参考にも存在しているいくつかのパラメータを持っているので、私はその私ができる1にアクセスするために間違った方法を使用してすることができますHasAMLRoleReference、私は心から知らない。 enter image description here

ご協力いただきありがとうございます。


[EDIT 1]

public void browseNode(String indent, OpcUaClient client, NodeId browseRoot){ 
try 
{ 

    String equipmentNamespace = "openMOSRoleClassLib/Equipment"; 
    String skillNamespace = "openMOSRoleClassLib/Skill"; 
    String moduleNamespace = "openMOSRoleClassLib/Equipment/Module"; 

    BrowseDescription browse = new BrowseDescription(
      browseRoot, 
      BrowseDirection.Forward, 
      Identifiers.References, 
      true, 
      //uint(NodeClass.Object.getValue() | NodeClass.Variable.getValue()), 
      uint(NodeClass.Object.getValue() | NodeClass.Variable.getValue() | NodeClass.ReferenceType.getValue()), 
      uint(BrowseResultMask.All.getValue()) 
); 

    BrowseDescription browse2 = new BrowseDescription(
      browseRoot, 
      BrowseDirection.Forward, 
      new NodeId(1, 4001), 
      true, 
      //uint(NodeClass.Object.getValue() | NodeClass.Variable.getValue()), 
      uint(NodeClass.Object.getValue() | NodeClass.Variable.getValue() | NodeClass.ReferenceType.getValue()), 
      uint(BrowseResultMask.All.getValue()) 
); 

    BrowseResult browseResult = client.browse(browse).get(); 
    List<ReferenceDescription> references = toList(browseResult.getReferences()); 

    System.out.println("\n"); 
    for (ReferenceDescription rd : references) 
    { 

    //logger.info("Node={}", rd.getBrowseName().getName()); 
    System.out.println(indent + "Node=       " + rd.getBrowseName().getName()); 
    System.out.println(indent + "Type=       " + rd.getTypeId().toParseableString()); 
    System.out.println(indent + "NodeId:      " + rd.getNodeId().toString()); 
    System.out.println(indent + "Other INFO[]:     " + rd.getTypeDefinition().toParseableString()); 
    System.out.println(indent + "Other INFO[NamespaceIndex]: " + rd.getReferenceTypeId().expanded().getNamespaceIndex()); 
    System.out.println(indent + "Other INFO[ReferenceTypeId]: " + rd.getReferenceTypeId().expanded().toString()); 

    // recursively browse to children 
    rd.getNodeId().local().ifPresent(nodeId -> browseNode("\t" + indent, client, nodeId)); 

    } 
} catch (InterruptedException | ExecutionException e) 
{ 
    logger.error("Browsing nodeId={} failed: {}", browseRoot, e.getMessage(), e); 
} 
} 

[EDIT 2]

enter image description here

Iは右機器参照をクリックすることが示されている情報をロード以下。オブジェクト、変数、のReferenceType:

enter image description here

+0

参照を一覧表示するクライアントコードも同様ですか?それはミロで書かれていますか? UaExpertはあなたのMiloサーバーや、あなたが使用している別のサーバーを例にしていますか? –

+0

Milo SDKのgit repoで提供されているサンプルに基づいています。上のコードは、私が今作った編集で見つけることができます。 UaExpertはMilo Serverを指しています。 –

+0

どのような種類のノード機器とモジュールがあるか知っていますか? UaExpertでクリックして調べることができます。 –

答えて

1

OK]をクリックして、問題はあなただけNodeClassを持つノードをブラウズしていることのようです。

あなたが探しているHasAMLRoleReferenceは、ObjectTypeのNodeClassを持つノードを指しています。なぜなら、それらが返されるのを見ていないからです。

+0

ヤップ、あなたは正しい!感謝万円 :) –

関連する問題