Sur cette page

Qt Quick Pompe à eau

Interaction avec un serveur OPC UA pour créer une IHM basée sur QML pour une pompe à eau simple.

L'API Qml a été marquée comme obsolète dans Qt 6.9 et sera supprimée dans une prochaine version.

Qt Quick L'exemple «Pompe à eau » montre comment utiliser l'API QML d'Qt OPC UA pour interagir avec un serveur OPC UA afin de créer une IHM basée sur QML pour une machine simple.

Application de pompe à eau avec deux réservoirs, commandes de pompe et panneau d'état

Compilation du serveur

Avant de pouvoir utiliser les exemples de la pompe à eau, vous devez compiler le serveur de simulation de la pompe à eau. Vous pouvez l'ouvrir et le compiler dans QtCreator ou depuis le terminal, comme d'habitude.

La simulation

Le serveur OPC UA inclus dans cet exemple exécute une simulation d’une machine comprenant 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 de ce dernier en ouvrant la vanne. Ces deux opérations disposent d’un point de consigne configurable par l’utilisateur qui contrôle la quantité d’eau pompée vers le second réservoir ou évacuée de celui-ci.

Les nœuds suivants existent sur le serveur :

NodeIdFonction
ns=2;s=MachineLe dossier contenant les nœuds de méthode et de variable pour la machine
ns=2;s=Machine.StateL'état de la machine
ns=2;s=Machine.Tank1.PercentFilledL'état de remplissage actuel du premier réservoir
ns=2;s=Machine.Tank2.PercentFilledL'état de remplissage actuel du deuxième réservoir
ns=2;s=Machine.Tank2.TargetPercentLa valeur de consigne pour le pompage et la purge
ns=2;s=Machine.Tank2.ValveStateL'état de la vanne du deuxième réservoir
ns=2;s=Machine.DesignationUne désignation lisible par l'utilisateur de la machine à des fins d'affichage
ns=2;s=Machine.StartAppelez cette méthode pour démarrer la pompe
ns=2;s=Machine.StopAppelez cette méthode pour arrêter la pompe
ns=2;s=Machine.FlushTank2Appelez cette méthode pour vidanger le réservoir 2
ns=2;s=Machine.ResetAppelez cette méthode pour réinitialiser la simulation

Implémentation

Cet exemple utilise des éléments QML pour lire et écrire des valeurs, ainsi que pour appeler des méthodes. 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 ne dispose d’aucune interface graphique et permet uniquement d’accéder aux propriétés de la machine. Il comporte deux réservoirs qui sont des instances d’un composant distinct Tank.

Propriétés

L'élément « machine » expose toutes ses propriétés et sous-éléments sous forme de 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 à chaque modification de propriété.

Par exemple, le bouton permettant de vider le deuxième réservoir n’est activé que si le backend est connecté au serveur, si la machine est inactive et si le niveau du réservoir est supérieur au seuil défini. Lorsqu’on clique dessus, 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 lancé automatiquement par l’application IHM. Après vous ê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 lancer le pompage de l’eau du premier réservoir vers le second. Après avoir défini un point de consigne inférieur à la valeur actuelle du second réservoir, un clic sur « Flush » ouvre la vanne.

S'il ne reste plus d'eau, cliquez sur « Reset simulation » pour remplir à nouveau le premier réservoir.

Exemple de projet sur code.qt.io

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.