Qt Quick Bomba de agua
Interacción con un servidor OPC UA para construir una HMI basada en QML para una sencilla máquina de bombeo de agua.
La API QML ha sido marcada como obsoleta en Qt 6.9 y será eliminada en una versión futura.
Qt Quick El ejemplo dela bomba de agua muestra cómo utilizar la API QML de Qt OPC UA para interactuar con un servidor OPC UA y construir una HMI basada en QML para una máquina sencilla.

Construcción del servidor
Antes de poder utilizar los ejemplos de la Bomba de Agua, es necesario construir el Servidor de Simulación de la Bomba de Agua. Puedes abrirlo y construirlo en QtCreator o desde el terminal como de costumbre.
La Simulación
El servidor OPC UA incluido en este ejemplo ejecuta una simulación de una máquina que contiene dos tanques, una bomba de agua y una válvula. El agua puede ser bombeada desde el primer tanque al segundo tanque y luego puede ser descargada desde el segundo tanque abriendo la válvula. Ambas operaciones tienen un valor de consigna configurable por el usuario que controla la cantidad de agua que se bombea al segundo depósito o que se expulsa de él.
En el servidor existen los siguientes nodos:
| NodeId | Función |
|---|---|
| ns=2;s=Máquina | La carpeta que contiene los nodos método y variable para la máquina |
| ns=2;s=Máquina.Estado | El estado de la máquina |
| ns=2;s=Máquina.Depósito1.PorcentajeLlenado | El estado actual de llenado del primer tanque |
| ns=2;s=Máquina.Depósito2.PorcentajeLlenado | Estado actual de llenado del segundo depósito |
| ns=2;s=Máquina.Tanque2.PorcentajeObjetivo | El punto de consigna para el bombeo y el lavado |
| ns=2;s=Máquina.Tanque2.EstadoVálvula | El estado de la válvula del segundo tanque |
| ns=2;s=Máquina.Designación | Designación legible de la máquina para su visualización |
| ns=2;s=Máquina.Arrancar | Llama a este método para arrancar la bomba |
| ns=2;s=Máquina.Parar | Llamar a este método para parar la bomba |
| ns=2;s=Máquina.PurgarDepósito2 | Llama a este método para vaciar el tanque 2 |
| ns=2;s=Máquina.Reiniciar | Llama a este método para reiniciar la simulación |
Implementación
Este ejemplo utiliza elementos QML para leer y escribir valores, así como llamadas a métodos. Todas las operaciones son asíncronas y gestionadas por QML en segundo plano.
Un elemento QML representa la máquina y sus componentes. Este elemento no tiene ninguna interfaz gráfica y sólo proporciona acceso a las propiedades de la máquina. Tiene dos depósitos que son instancias de un componente separado Tank.
Propiedades
El elemento máquina expone todas las propiedades y subelementos como propiedades.
...
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
...Manejadores asíncronos
QML gestiona automáticamente las partes asíncronas de la API porque, por defecto, se emiten señales para cada cambio de propiedad.
Por ejemplo, el botón para vaciar el segundo depósito sólo se activa si el backend está conectado al servidor, la máquina está inactiva y el nivel del depósito está por encima del valor de consigna. Al hacer clic, se llama al método flushTank2() en el servidor.
Tank2Unit { flushButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle && machine.tank2.percentFilled > machine.tank2.targetPercent percentFilled: machine.tank2.percentFilled valveState: machine.tank2valveState
Utilización
La aplicación HMI inicia automáticamente el servidor. Después de conectarse al servidor haciendo clic en el botón Connect, arrastre el control deslizante para establecer un valor de consigna y, a continuación, haga clic en Start para iniciar el bombeo de agua desde el primer depósito al segundo. Tras fijar un valor de consigna inferior al valor actual del segundo depósito, un clic en Flush abre la válvula.
Si no queda agua, haga clic en Reset simulation para rellenar el primer depósito.
Ficheros:
- 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
Véase también Bomba de agua.
© 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.