バックグラウンド
先ほどローカル シミュレーション環境をセットアップしPLC
、 でデータをKEPServerEX6
読み取りPLC
、最後にこの OPC サーバーからのデータ読み取りとサブスクリプション機能を完了するためにクライアントUAExpert
として使用しました。 SpringBoot は Milo ライブラリを統合して OPC UA クライアントを実現します: 接続、ノードのトラバース、読み取り、書き込み、サブスクライブ、およびバッチ サブスクライブ。OPC
KEPServerEX6
実際の作業でクライアントの機能をテストするだけであれば、Duck はローカルシミュレーション環境OPC UA
を構築する必要はなく、いくつかのサーバーサイド シミュレーション ツールを使用することに注意してください。この記事では、シミュレートされたサーバーのサーバーとして使用し、以前に実装したクライアントを介してシミュレートされたサーバーに接続します。PLC
OPC UA
Prosys OPC UA Simulation Server
OPC UA
OPC UA
OPC UA
クライアントは
Milo
実装を通じてシミュレートされたサーバーに接続しました。OPC UA
Prosys OPC UA Simulation Server
OPC UA
ダウンロードしてインストールします: Prosys OPC UA シミュレーション サーバー
https://downloads.prosysopc.com/opc-ua-simulation-server-downloads.php
OPC UAサーバーをシミュレートする
ダブルクリックして を起動するとProsys OPC UA Simulation Server
、ホームページにサーバーのアドレス情報が表示されます。
デフォルトの接続アドレスを変更する必要がある場合は、Endpoints
メニューから設定できます (ここではデフォルトのアドレスを使用します)。
メニューの下には、カウンター、乱数、ラダー図、ノコギリ波、サイン波、三角波、その他のノードがデフォルトで付属しており、クライアントを通じて読み取ってテストできることObjects
がわかります。Prosys OPC UA Simulation Server
OPC UA
Milo に基づく OPC UA クライアント テスト
例として、次の例では、サーバーに接続 (匿名接続) し、指定されたノードの値を読み取り、指定されたノードをサブスクライブすることProsys OPC UA Simulation Server
により、シミュレートされたOPC UA
サーバーでの操作を完了します。
実際のコーディング テストの前に、クライアントUAExpert
として使用しOPC
て、シミュレートされたサーバーからのデータの読み取りとサブスクリプション機能を完了し、NodeId
情報を再度明確にすることができます。
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);
}
}
テスト結果は次のとおりです。
考えられる問題
Prosys OPC UA Simulation Server
Endpoints
インターフェイスにメニューがありませんか?
解決策:Prosys OPC UA Simulation Server
インターフェースにEndpoints
メニューがない場合は、左上隅のOptions
メニューからSwitch to Expert Mode
切り替えることができます。
Milo に基づいて実装された OPC UA クライアントは、どのようにしてProsys OPC UA Simulation Server
ノード データを読み取り、サブスクライブしますか?
StatusCode{名前=Bad_NodeIdUnknown、値=0x80340000、品質=悪い}
理由分析: ステータス プロンプトによると、ノード データの読み取り実装と組み合わせて、readNodeValue
メソッドの主要なパラメーターは次のとおりint namespaceIndex
ですString identifier
。KEPServer
とMilo 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
。現時点ではさまざまな方法で定義できNodeId
、NodeId
さまざまなオーバーロードと分析メソッドが提供されています。
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 アシスタント、自然言語プログラミングはこちらです。
参照
Prosys_OPC_UA_Simulation_Server_UserManual ユーザー マニュアル
ソースコード
https://github.com/heartsuit/demo-spring-boot/tree/master/springboot-opcua
ご質問やバグが見つかった場合は、お気軽にご連絡ください。
ご意見やご提案は大歓迎です。