Qt Quick ウォーターポンプ
OPC UAサーバーと連携し、シンプルなウォーターポンプ装置向けのQMLベースのHMIを構築します。
Qt Qml APIはQt 6.9で非推奨とされており、将来のバージョンで削除される予定です。
Qt Quick 「ウォーターポンプ」の例では、Qt OPC UA のQML APIを使用してOPC UAサーバーと連携し、単純な機械用のQMLベースのHMIを構築する方法を示しています。

サーバーの構築
「ウォーターポンプ」のサンプルを使用するには、まず「ウォーターポンプシミュレーションサーバー」をビルドする必要があります。QtCreatorで開いてビルドするか、通常通りターミナルからビルドすることができます。
シミュレーション
このサンプルに含まれるOPC UAサーバーは、2つのタンク、ウォーターポンプ、およびバルブを備えた機械のシミュレーションを実行します。 第1のタンクから第2のタンクへ水を汲み上げ、その後、バルブを開くことで第2のタンクから水を排出することができます。どちらの操作にも、第2のタンクへ汲み上げる量または排出する量を制御する、ユーザーが設定可能なセットポイントがあります。
サーバー上には以下のノードが存在します:
| NodeId | 関数 |
|---|---|
| ns=2;s=Machine | そのマシン用のメソッドおよび変数ノードを含むフォルダ |
| ns=2;s=Machine.State | マシンの状態 |
| ns=2;s=Machine.Tank1.PercentFilled | 1番目のタンクの現在の充填状況 |
| ns=2;s=Machine.Tank2.PercentFilled | 2番目のタンクの現在の充填状況 |
| ns=2;s=Machine.Tank2.TargetPercent | ポンプ運転および洗浄の目標値 |
| ns=2;s=Machine.Tank2.ValveState | 第2タンクのバルブの状態 |
| ns=2;s=Machine.Designation | 表示用の、人間が読み取れる機械の名称 |
| ns=2;s=Machine.Start | ポンプを起動するには、このメソッドを呼び出します |
| ns=2;s=Machine.Stop | ポンプを停止するには、このメソッドを呼び出します |
| ns=2;s=Machine.FlushTank2 | タンク2を洗浄するには、このメソッドを呼び出します |
| ns=2;s=Machine.Reset | シミュレーションをリセットするには、このメソッドを呼び出します |
実装
この例では、値の読み書きやメソッド呼び出しに QML アイテムを使用しています。すべての操作は非同期であり、バックグラウンドで QML によって処理されます。
QML アイテムは、マシンとそのコンポーネントを表します。このアイテムにはグラフィカルなインターフェースはなく、マシンのプロパティへのアクセスのみを提供します。このマシンには 2 つのタンクがあり、それらは個別の `Tank ` コンポーネントのインスタンスです。
プロパティ
machineアイテムは、すべてのプロパティおよびサブアイテムをプロパティとして公開しています。
...
readonly property alias tank1: tank1
readonly property alias tank2: tank2
readonly property alias state: machineState.value
readonly property alias tank2PercentFilled: tank2.percentFilled
readonly property alias tank2valveState: tank2.valveState
readonly property alias designation: designation.value
property alias resetMethod: resetMethod
property alias startMethod: startMethod
property alias stopMethod: stopMethod
property alias flushMethod: flushMethod
...非同期ハンドラ
APIの非同期部分は、デフォルトでプロパティの変更ごとにシグナルが発行されるため、QMLによって自動的に処理されます。
たとえば、2番目のタンクをフラッシュするボタンは、バックエンドがサーバーに接続されており、機械がアイドル状態で、かつタンクのレベルが設定値を上回っている場合にのみ有効になります。クリックすると、サーバー上でflushTank2() メソッドが呼び出されます。
Tank2Unit {
flushButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle
&& machine.tank2.percentFilled > machine.tank2.targetPercent
percentFilled: machine.tank2.percentFilled
valveState: machine.tank2valveState使用方法
サーバーは HMI アプリケーションによって自動的に起動されます。「Connect 」ボタンをクリックしてサーバーに接続した後、スライダーをドラッグして設定値を設定し、「Start 」をクリックして、第 1 タンクから第 2 タンクへの水の移送を開始します。第 2 タンクの現在の値よりも低い設定値を設定した後、「Flush 」をクリックすると、バルブが開きます。
水がなくなったら、「Reset simulation 」をクリックして第1タンクに水を補充してください。
「ウォーターポンプ」も参照してください 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.