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:
NodeId | Funktion |
---|---|
ns=2;s=Maschine | Der Ordner, der die Methoden- und Variablenknoten für die Maschine enthält |
ns=2;s=Maschine.Zustand | Der Zustand der Maschine |
ns=2;s=Machine.Tank1.PercentFilled | Der aktuelle Füllstand des ersten Tanks |
ns=2;s=Maschine.Tank2.PercentFilled | Der aktuelle Füllstand des zweiten Tanks |
ns=2;s=Maschine.Tank2.SollProzent | Der Sollwert für das Abpumpen und Spülen |
ns=2;s=Maschine.Tank2.VentilZustand | Der Zustand des Ventils des zweiten Tanks |
ns=2;s=Machine.Designation | Eine für den Menschen lesbare Bezeichnung der Maschine zu Anzeigezwecken |
ns=2;s=Maschine.Start | Aufruf dieser Methode, um die Pumpe zu starten |
ns=2;s=Maschine.Stop | Aufruf dieser Methode, um die Pumpe zu stoppen |
ns=2;s=Machine.FlushTank2 | Aufruf dieser Methode zum Spülen von Tank 2 |
ns=2;s=Maschine.Reset | Aufruf 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.