OPC-UA宇宙とMilo SDKの新機能ですので、私が何をしようとしているのかを説明するために最善を尽くします。サーバーの参照名前空間とカスタム参照へのアクセス
私はOPC-UAサーバーインスタンスを実行しており、サーバーNameSapceにいくつかのノードをロードしています。一方、私はこのサーバーに加入し、このノードを参照しようとするクライアントを持っています。私はクライアント内のノードを見ることができ、このノードに定義されている参照のいくつかにアクセスできます。私が今ホワイトアウトを成功させようとしているのは、サーバで定義されているリファレンスにアクセスすることです.UA-Expertはそれを見ることができますが、Milo Clientの実装はできません。 カスタムリファレンスがサーバー側で定義されましたが、私の目標は「BrowseName」または「DisplayName」にアクセスすることです。
これは簡単な問題ですが、今私はこれで苦労していると思います。
私は上記のテキストで私は何を意味するか例示するために、いくつかのプリントスクリーンを残す:私たちは可能な第2の画像におけるので、私は読んしようとしている参照に赤い矢印ポイント下の画像では
HasComponentの製造と説明が正しくリードされているが、HasAMLRoleReferenceがデバッグウィンドウに表示されていないことを確認してください。
、それは私は私は正しい実装を保証することはできませんが、サーバ側では、私はこれが起こることを知っているではありません。このコード:だから
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)
ReferenceTypeIdはnew NodeId(1, 4001)
で、これはクライアント側で読み取ろうとしているタイプです。私のコードは、Milo git repoのBrowseNode Exempleに基づいています。私たちは、アドレス空間を見ることができます。この最後の画像で
ので、ここで我々はHasComponentとして参考にも存在しているいくつかのパラメータを持っているので、私はその私ができる1にアクセスするために間違った方法を使用してすることができますHasAMLRoleReference、私は心から知らない。
ご協力いただきありがとうございます。
[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]
Iは右機器参照をクリックすることが示されている情報をロード以下。オブジェクト、変数、のReferenceType:
参照を一覧表示するクライアントコードも同様ですか?それはミロで書かれていますか? UaExpertはあなたのMiloサーバーや、あなたが使用している別のサーバーを例にしていますか? –
Milo SDKのgit repoで提供されているサンプルに基づいています。上のコードは、私が今作った編集で見つけることができます。 UaExpertはMilo Serverを指しています。 –
どのような種類のノード機器とモジュールがあるか知っていますか? UaExpertでクリックして調べることができます。 –