Qt Quick Wasserpumpe

Interaktion mit einem OPC UA Server, um eine QML-basierte HMI für eine einfache Wasserpumpe zu erstellen.

Qt Quick Das BeispielWasserpumpe zeigt, wie die Qt OPC UA QML API verwendet wird, um mit einem OPC UA Server zu interagieren und eine QML-basierte HMI für eine einfache Maschine zu erstellen.

Aufbau des Servers

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

Die Simulation

Der in diesem Beispiel enthaltene OPC UA Server simuliert eine Maschine mit zwei Tanks, einer Wasserpumpe und einem Ventil. Wasser kann aus dem ersten Tank in den zweiten Tank gepumpt werden und dann durch Öffnen des Ventils aus dem zweiten Tank gespült werden. Für beide Vorgänge gibt es einen vom Benutzer konfigurierbaren Sollwert, der steuert, wie viel Wasser in den zweiten Tank gepumpt bzw. aus ihm gespült wird.

Die folgenden Knoten sind auf dem Server vorhanden:

NodeIdFunktion
ns=2;s=MaschineDer Ordner, der die Methoden- und Variablenknoten für die Maschine enthält
ns=2;s=Maschine.ZustandDer Zustand der Maschine
ns=2;s=Machine.Tank1.PercentFilledDer aktuelle Füllstand des ersten Tanks
ns=2;s=Maschine.Tank2.PercentFilledDer aktuelle Füllstand des zweiten Tanks
ns=2;s=Maschine.Tank2.SollProzentDer Sollwert für das Abpumpen und Spülen
ns=2;s=Maschine.Tank2.VentilZustandDer Zustand des Ventils des zweiten Tanks
ns=2;s=Machine.DesignationEine für den Menschen lesbare Bezeichnung der Maschine zu Anzeigezwecken
ns=2;s=Maschine.StartAufruf dieser Methode, um die Pumpe zu starten
ns=2;s=Maschine.StopAufruf dieser Methode, um die Pumpe zu stoppen
ns=2;s=Machine.FlushTank2Aufruf dieser Methode zum Spülen von Tank 2
ns=2;s=Maschine.ResetAufruf dieser Methode, um die Simulation zurückzusetzen

Implementierung

In diesem Beispiel werden QML-Elemente zum Lesen und Schreiben von Werten sowie zum Aufrufen von Methoden verwendet. Alle Operationen sind asynchron und werden von QML im Hintergrund verarbeitet.

Ein QML-Element stellt die Maschine und ihre Komponenten dar. Dieses Element verfügt über keine grafische Schnittstelle und bietet lediglich Zugriff auf die Eigenschaften der Maschine. Es hat zwei Tanks, die Instanzen einer separaten Komponente Tank sind.

Eigenschaften

Das Element "Maschine" stellt alle Eigenschaften und Unterelemente als Eigenschaften zur Verfügung.

    ...
    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 gehandhabt, da bei jeder Eigenschaftsänderung standardmäßig Signale ausgegeben werden.

Zum Beispiel wird die Schaltfläche zum Spülen 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 Anklicken 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 einzustellen, und klicken Sie dann auf Start, um mit dem Pumpen von Wasser aus dem ersten Tank in den zweiten Tank zu beginnen. Nachdem Sie einen Sollwert eingestellt haben, der niedriger ist als der aktuelle Wert des zweiten Tanks, ö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.

Dateien:

Siehe auch Wasserpumpe.

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