Milo によって実装された OPC UA クライアントは、Prosys OPC UA Simulation Server シミュレーション サーバーに接続してサブスクライブします。

バックグラウンド

先ほどローカル シミュレーション環境をセットアップしPLC、 でデータをKEPServerEX6読み取りPLC、最後にこの OPC サーバーからのデータ読み取りとサブスクリプション機能を完了するためにクライアントUAExpertとして使用しました。 SpringBoot は Milo ライブラリを統合して OPC UA クライアントを実現します: 接続、ノードのトラバース、読み取り、書き込み、サブスクライブ、およびバッチ サブスクライブOPCKEPServerEX6

実際の作業でクライアントの機能をテストするだけであれば、Duck はローカルシミュレーション環境OPC UAを構築する必要はなく、いくつかのサーバーサイド シミュレーション ツールを使用することに注意してください。この記事では、シミュレートされたサーバーのサーバーとして使用し、以前に実装したクライアントを介してシミュレートされたサーバーに接続します。PLCOPC UAProsys OPC UA Simulation ServerOPC UAOPC UAOPC UA

クライアントはMilo実装を通じてシミュレートされたサーバーに接続しましたOPC UAProsys OPC UA Simulation ServerOPC UA

ダウンロードしてインストールします: Prosys OPC UA シミュレーション サーバー

https://downloads.prosysopc.com/opc-ua-simulation-server-downloads.php

OPC UAサーバーをシミュレートする

ダブルクリックして を起動するとProsys OPC UA Simulation Server、ホームページにサーバーのアドレス情報が表示されます。

2023-04-16-ホーム.jpg

デフォルトの接続アドレスを変更する必要がある場合は、Endpointsメニューから設定できます (ここではデフォルトのアドレスを使用します)。

2023-04-16-エンドポイント.jpg

メニューの下には、カウンター、乱数、ラダー図、ノコギリ波、サイン波、三角波、その他のノードがデフォルトで付属しており、クライアントを通じて読み取ってテストできることObjectsがわかります。Prosys OPC UA Simulation ServerOPC UA

2023-04-16-オブジェクト.jpg

Milo に基づく OPC UA クライアント テスト

例として、次の例では、サーバーに接続 (匿名接続) し指定されたノードの値を読み取り指定されたノードをサブスクライブすることProsys OPC UA Simulation Serverにより、シミュレートされたOPC UAサーバーでの操作を完了します。

実際のコーディング テストの前に、クライアントUAExpertとして使用しOPCて、シミュレートされたサーバーからのデータの読み取りとサブスクリプション機能を完了し、NodeId情報を再度明確にすることができます。

2023-04-16-UAEExpert.jpg

public class OpcUaStart {
    
    
    public void start() throws Exception {
    
    
        OpcUaClientService opcUaClientService = new OpcUaClientService();

        // 与OPC UA服务端建立连接,并返回客户端实例
        OpcUaClient client = opcUaClientService.connectOpcUaServer("你的机器名称", "53530", "/OPCUA/SimulationServer");

        // 两种方式定义节点
        NodeId nodeId = new NodeId(3, 1002); // 注意第2个参数类型为数字
//        NodeId nodeId = NodeId.parse("ns=3;i=1002"); // 通过parse静态方法定义

        // 读取指定节点的值
        opcUaClientService.readNodeValue(client, nodeId);

        // 订阅指定节点
        opcUaClientService.subscribe(client, nodeId);
    }
}

テスト結果は次のとおりです。
2023-04-16-結果.jpg

考えられる問題

Prosys OPC UA Simulation ServerEndpointsインターフェイスにメニューがありませんか?

解決策:Prosys OPC UA Simulation ServerインターフェースにEndpointsメニューがない場合は、左上隅のOptionsメニューからSwitch to Expert Mode切り替えることができます。

2023-04-16-オプション.jpg

Milo に基づいて実装された OPC UA クライアントは、どのようにしてProsys OPC UA Simulation Serverノード データを読み取り、サブスクライブしますか?

StatusCode{名前=Bad_NodeIdUnknown、値=0x80340000、品質=悪い}

2023-04-16-Cursor.jpg

理由分析: ステータス プロンプトによると、ノード データの読み取り実装と組み合わせて、readNodeValueメソッドの主要なパラメーターは次のとおりint namespaceIndexですString identifierKEPServerMilo Serverその前に接続したときはidentifier型がどちらも でString正常に読み込めるのですが、Prosys OPC UA Simulation Serverに接続した後は読み込めなくなり、int直接型に変更してみたところ読み込みは成功しました。

解決:

方法 1:readNodeValueメソッドのString identifierパラメーターを に変更しますint identifier。つまり、パラメーターを渡すときに整数型を使用します。これは、オーバーロードされたメソッドを追加することで実現できます。

public void readNodeValue(OpcUaClient client, int namespaceIndex, int identifier)

方法 2:型readNodeValueを直接受け取るようにメソッドを変更しますNodeId。現時点ではさまざまな方法で定義できNodeIdNodeIdさまざまなオーバーロードと分析メソッドが提供されています。

public void readNodeValue(OpcUaClient client, NodeId nodeId)

// 方式1:构造方法定义NodeId,注意第2个参数类型为数字
NodeId nodeId = new NodeId(3, 1002); 

// 方式2:静态解析定义NodeId
NodeId nodeId = NodeId.parse("ns=3;i=1002");

注:方法 2: NodeId を静的に分析して定義するGPT-4この方法は、大規模モデルに基づく質疑応答からCursor学んだものです:カーソル プログラミング初体験、GPT-4 大型モデルを搭載、AI アシスタント、自然言語プログラミングはこちらです

2023-04-15-MiloResult.jpg

参照

Prosys_OPC_UA_Simulation_Server_UserManual ユーザー マニュアル

ソースコード

https://github.com/heartsuit/demo-spring-boot/tree/master/springboot-opcua


ご質問やバグが見つかった場合は、お気軽にご連絡ください。

ご意見やご提案は大歓迎です。

おすすめ

転載: blog.csdn.net/u013810234/article/details/130189271