Auf dieser Seite

Qt Quick Wasserpumpe

Interaktion mit einem OPC-UA-Server zum Erstellen einer QML-basierten HMI für eine einfache Wasserpumpe.

Die QML-API wurde in Qt 6.9 als veraltet markiert und wird in einer zukünftigen Version entfernt.

Qt Quick Das Beispiel„Wasserpumpe“ zeigt, wie man die QML-API „ Qt OPC UA “ nutzt, um mit einem OPC-UA-Server zu interagieren und eine QML-basierte HMI für eine einfache Maschine zu erstellen.

Wasserpumpenanwendung mit zwei Tanks, Pumpensteuerung und Statusanzeige

Erstellen des Servers

Bevor Sie die Wasserpumpen-Beispiele nutzen können, müssen Sie den Wasserpumpen-Simulationsserver erstellen. Sie können ihn wie gewohnt in QtCreator oder über das Terminal öffnen und erstellen.

Die Simulation

Der in diesem Beispiel enthaltene OPC-UA-Server führt eine Simulation einer Maschine durch, die aus zwei Tanks, einer Wasserpumpe und einem Ventil besteht. Wasser kann aus dem ersten Tank in den zweiten Tank gepumpt und anschließend durch Öffnen des Ventils aus dem zweiten Tank abgelassen werden. Beide Vorgänge verfügen über einen vom Benutzer konfigurierbaren Sollwert, der steuert, wie viel Wasser in den zweiten Tank gepumpt oder aus diesem abgelassen wird.

Auf dem Server sind folgende Knoten vorhanden:

Knoten-IDFunktion
ns=2;s=MachineDer Ordner, der die Methoden- und Variablenknoten für die Maschine enthält
ns=2;s=Machine.StateDer Zustand der Maschine
ns=2;s=Machine.Tank1.PercentFilledDer aktuelle Füllstand des ersten Tanks
ns=2;s=Machine.Tank2.PercentFilledDer aktuelle Füllstand des zweiten Tanks
ns=2;s=Machine.Tank2.TargetPercentDer Sollwert für das Pumpen und Spülen
ns=2;s=Machine.Tank2.ValveStateDer Zustand des Ventils des zweiten Tanks
ns=2;s=Machine.DesignationEine für Menschen lesbare Bezeichnung der Maschine zu Anzeigezwecken
ns=2;s=Machine.StartRufen Sie diese Methode auf, um die Pumpe zu starten
ns=2;s=Machine.StopRufen Sie diese Methode auf, um die Pumpe anzuhalten
ns=2;s=Machine.FlushTank2Rufen Sie diese Methode auf, um Tank 2 zu spülen
ns=2;s=Machine.ResetRufen Sie diese Methode auf, um die Simulation zurückzusetzen

Implementierung

In diesem Beispiel werden QML-Elemente zum Lesen und Schreiben von Werten sowie für Methodenaufrufe verwendet. Alle Vorgänge sind asynchron und werden von QML im Hintergrund abgewickelt.

Ein QML-Element repräsentiert die Maschine und ihre Komponenten. Dieses Element verfügt über keine grafische Benutzeroberfläche und bietet lediglich Zugriff auf die Eigenschaften der Maschine. Es verfügt über zwei Tanks, bei denen es sich um Instanzen einer separaten „ Tank “-Komponente handelt.

Eigenschaften

Das Maschinen-Element macht alle Eigenschaften und Unterelemente als Eigenschaften zugänglich.

    ...
    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
    ...
Asynchrone Handler

Die asynchronen Teile der API werden von QML automatisch verarbeitet, da standardmäßig bei jeder Eigenschaftsänderung Signale ausgesendet werden.

Beispielsweise ist die Schaltfläche zum Entleeren des zweiten Tanks nur aktiviert, wenn das Backend mit dem Server verbunden ist, die Maschine im Leerlauf ist und der Tankfüllstand über dem Sollwert liegt. Beim Klicken wird die Methode „ flushTank2() “ auf dem Server aufgerufen.

    Tank2Unit {
        flushButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle
                            && machine.tank2.percentFilled > machine.tank2.targetPercent
        percentFilled: machine.tank2.percentFilled
        valveState: machine.tank2valveState

Verwendung

Der Server wird automatisch von der HMI-Anwendung gestartet. Nachdem Sie durch Klicken auf die Schaltfläche „ Connect “ eine Verbindung zum Server hergestellt haben, ziehen Sie den Schieberegler, um einen Sollwert festzulegen, und klicken Sie anschließend auf „ Start “, um Wasser aus dem ersten Tank in den zweiten Tank zu pumpen. Nachdem Sie einen Sollwert festgelegt haben, der unter dem aktuellen Wert des zweiten Tanks liegt, öffnet ein Klick auf „ Flush “ das Ventil.

Wenn kein Wasser mehr vorhanden ist, klicken Sie auf „ Reset simulation “, um den ersten Tank wieder aufzufüllen.

Beispielprojekt @ code.qt.io

Siehe auch Wasserpumpe.

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