Qt Quick ウォーターポンプ

OPC UA サーバーと対話し、シンプルなウォーターポンプマシンの QML ベースの HMI を構築する。

Qt Quick Water Pump の例では、 QML API を使用して OPC UA サーバーと対話し、シンプルな機械の QML ベースの HMI を構築する方法を示します。Qt OPC UA

サーバーの構築

Water Pump の例を使用する前に、Water Pump Simulation Server を構築する必要があります。QtCreator で開くか、通常通りターミナルからビルドしてください。

シミュレーション

このサンプルに含まれるOPC UAサーバーは、2つのタンク、水ポンプ、バルブを含む機械のシミュレーションを実行します。水は1つ目のタンクから2つ目のタンクに汲み上げられ、バルブを開くことで2つ目のタンクから流されます。どちらの操作にも、ユーザーが設定可能なセットポイントがあり、2 番目のタンクに水を汲み上げたり、2 番目のタンクから水を流したりする量を制御します。

サーバーには以下のノードが存在する:

NodeId機能
ns=2;s=Machineマシンのメソッドノードと変数ノードを含むフォルダ
ns=2;s=Machine.Stateマシンの状態
ns=2;s=Machine.Tank1.PercentFilled最初のタンクの現在の充填状態
ns=2;s=Machine.Tank2.PercentFilled(充填率2つ目のタンクの現在の充填状態
ns=2;s=Machine.Tank2.TargetPercentポンピングとフラッシングの設定値
ns=2;s=Machine.Tank2.ValveState第2タンクのバルブの状態
ns=2;s=機械.指定表示用に人間が読み取れる機械の名称
ns=2;s=Machine.Startこのメソッドを呼び出してポンプを始動させる
ns=2;s=Machine.Stopポンプを停止するには、このメソッドを呼び出します。
ns=2;s=Machine.FlushTank2このメソッドをコールして、タンク 2 を洗浄する
ns=2;s=Machine.Resetこのメソッドを呼び出してシミュレーションをリセットする

実装

この例では、メソッド呼び出しと同様に、QMLアイテムを用いて値の読み書きを行います。すべての操作は非同期で、バックグラウンドでQMLによって処理されます。

QMLアイテムは、マシンとそのコンポーネントを表します。このアイテムにはグラフィカルなインターフェイスはなく、マシンのプロパティへのアクセスのみを提供します。また、Tank コンポーネントのインスタンスであるタンクが2つあります。

プロパティ

マシンアイテムは、すべてのプロパティとサブアイテムをプロパティとして公開します。

    ...
    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 をクリックして最初のタンクから 2 番目のタンクへの送水を開始します。第二タンクの現在値より低い設定値を設定した後、Flush をクリックするとバルブが開く。

水が残っていない場合は、Reset simulation をクリックして最初のタンクに水を補給する。

ファイル:

ウォーターポンプもご参照ください

© 2025 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.