Qt Quick Pompe à eau
Interagir avec un serveur OPC UA pour construire une IHM basée sur QML pour une simple pompe à eau.
L'API QML a été marquée comme dépréciée dans Qt 6.9 et sera supprimée dans une prochaine version.
Qt Quick L'exemple de lapompe à eau montre comment utiliser Qt OPC UA QML API pour interagir avec un serveur OPC UA afin de construire une IHM basée sur QML pour une machine simple.

Construction du serveur
Avant de pouvoir utiliser les exemples Water Pump, vous devez construire le serveur de simulation Water Pump. Vous pouvez l'ouvrir et le construire dans QtCreator ou à partir du terminal comme d'habitude.
La simulation
Le serveur OPC UA inclus dans cet exemple exécute une simulation d'une machine contenant deux réservoirs, une pompe à eau et une vanne. L'eau peut être pompée du premier réservoir vers le second, puis évacuée du second en ouvrant la vanne. Les deux opérations ont un point de consigne configurable par l'utilisateur qui contrôle la quantité d'eau pompée ou évacuée du second réservoir.
Les nœuds suivants existent sur le serveur :
| NodeId | Fonction |
|---|---|
| ns=2;s=Machine | Dossier contenant les nœuds de méthode et de variable de la machine. |
| ns=2;s=Machine.State | L'état de la machine |
| ns=2;s=Machine.Tank1.PercentFilled | L'état de remplissage actuel du premier réservoir |
| ns=2;s=Machine.Tank2.PercentFilled | L'état de remplissage actuel du deuxième réservoir |
| ns=2;s=Machine.Tank2.TargetPercent | Le point de consigne pour le pompage et le rinçage |
| ns=2;s=Machine.Tank2.ValveState | L'état de la vanne du deuxième réservoir |
| ns=2;s=Machine.Designation | Désignation de la machine lisible par l'homme à des fins d'affichage |
| ns=2;s=Machine.Start | Appeler cette méthode pour démarrer la pompe |
| ns=2;s=Machine.Stop | Appeler cette méthode pour arrêter la pompe |
| ns=2;s=Machine.FlushTank2 | Appel de cette méthode pour rincer le réservoir 2 |
| ns=2;s=Machine.Reset | Appelle cette méthode pour réinitialiser la simulation |
Mise en œuvre
Cet exemple utilise des éléments QML pour lire et écrire des valeurs ainsi que des appels de méthode. Toutes les opérations sont asynchrones et gérées par QML en arrière-plan.
Un élément QML représente la machine et ses composants. Cet élément n'a pas d'interface graphique et permet uniquement d'accéder aux propriétés de la machine. Il possède deux réservoirs qui sont des instances d'un composant Tank distinct.
Propriétés
L'élément machine expose toutes les propriétés et sous-éléments en tant que propriétés.
...
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
...Gestionnaires asynchrones
Les parties asynchrones de l'API sont gérées automatiquement par QML car des signaux sont émis par défaut pour chaque changement de propriété.
Par exemple, le bouton permettant de rincer le deuxième réservoir n'est activé que si le backend est connecté au serveur, que la machine est inactive et que le niveau du réservoir est supérieur au point de consigne. En cas de clic, la méthode flushTank2() est appelée sur le serveur.
Tank2Unit { flushButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle && machine.tank2.percentFilled > machine.tank2.targetPercent percentFilled: machine.tank2.percentFilled valveState: machine.tank2valveState
Utilisation
Le serveur est démarré automatiquement par l'application IHM. Après s'être connecté au serveur en cliquant sur le bouton Connect, faites glisser le curseur pour définir un point de consigne, puis cliquez sur Start pour commencer à pomper l'eau du premier réservoir vers le second. Après avoir défini un point de consigne inférieur à la valeur actuelle du deuxième réservoir, un clic sur Flush ouvre la vanne.
S'il n'y a plus d'eau, cliquez sur Reset simulation pour remplir le premier réservoir.
Fichiers :
- waterpump/waterpump-qml/CMakeLists.txt
- waterpump/waterpump-qml/MachineDisplay.qml
- waterpump/waterpump-qml/Pump.qml
- waterpump/waterpump-qml/ServerControl.qml
- waterpump/waterpump-qml/Tank1Unit.qml
- waterpump/waterpump-qml/Tank2Unit.qml
- waterpump/waterpump-qml/TankDisplay.qml
- waterpump/waterpump-qml/ValueDisplay.qml
- waterpump/waterpump-qml/machine/Machine.qml
- waterpump/waterpump-qml/machine/Tank.qml
- waterpump/waterpump-qml/main.cpp
- waterpump/waterpump-qml/main.qml
- waterpump/waterpump-qml/qml.qrc
- waterpump/waterpump-qml/waterpump-qml.pro
Voir aussi Pompe à eau.
© 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.