3

私は、Milo スタックを使用して非 OPC-UA システムを OPC-UA サーバーに統合する OPC-UA 初心者です。これには、OPC-UA サーバーのノードへの値の書き込みが含まれます。私の問題の 1 つは、他のシステムからの値が Java String の形式で取得されるため、ノードの適切なデータ型に変換する必要があることです。私の最初のブルート フォースの概念実証では、以下のコードを使用して、Node への書き込みに使用できる Variant を作成します (WriteExample.java のように)。変数書き込むデータを含む Java String です。たとえば、Integer の場合は「123」、Double の場合は「32.3」です。ソリューションには、Identifiers クラス (org.eclipse.milo.opcua.stack.core、switch ステートメントを参照) からの「タイプ」のハードコーディングが含まれるようになりました。また、UInt64 などのノードに「123」を変換して書き込みたい場合はどうすればよいですか?

       try {
            VariableNode node = client.getAddressSpace().createVariableNode(nodeId);
            Object val = new Object();
            Object identifier = node.getDataType().get().getIdentifier();
            UInteger id = UInteger.valueOf(0);

            if(identifier instanceof UInteger) {
                id = (UInteger) identifier;
            }

            System.out.println("getIdentifier: " + node.getDataType().get().getIdentifier());
            switch (id.intValue()) {
                // Based on the Identifiers class in org.eclipse.milo.opcua.stack.core; 
                case 11: // Double
                    val = Double.valueOf(value);
                    break;
                case 6: //Int32
                    val = Integer.valueOf(value);
                    break;
            }

            DataValue data = new DataValue(new Variant(val),StatusCode.GOOD, null);
            StatusCode status = client.writeValue(nodeId, data).get();
            System.out.println("Wrote DataValue: " + data + " status: " + status);
            returnString = status.toString();
        } catch (Exception e) {
            System.out.println("ERROR: " + e.toString());
        }

このスレッドに対するケビンの応答を見てきました: OPC UAサーバーに確実に書き込むにはどうすればよいですか? しかし、私はまだ少し迷っています...いくつかの小さなコード例は本当に役に立ちます。

4

1 に答える 1