En esta página

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.

Aplicación de bomba de agua con dos depósitos, controles de bomba y panel de estado

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:

NodeIdFunción
ns=2;s=MáquinaLa carpeta que contiene los nodos método y variable para la máquina
ns=2;s=Máquina.EstadoEl estado de la máquina
ns=2;s=Máquina.Depósito1.PorcentajeLlenadoEl estado actual de llenado del primer tanque
ns=2;s=Máquina.Depósito2.PorcentajeLlenadoEstado actual de llenado del segundo depósito
ns=2;s=Máquina.Tanque2.PorcentajeObjetivoEl punto de consigna para el bombeo y el lavado
ns=2;s=Máquina.Tanque2.EstadoVálvulaEl estado de la válvula del segundo tanque
ns=2;s=Máquina.DesignaciónDesignación legible de la máquina para su visualización
ns=2;s=Máquina.ArrancarLlama a este método para arrancar la bomba
ns=2;s=Máquina.PararLlamar a este método para parar la bomba
ns=2;s=Máquina.PurgarDepósito2Llama a este método para vaciar el tanque 2
ns=2;s=Máquina.ReiniciarLlama 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:

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.