本页内容

Qt Quick 水泵

通过与 OPC UA 服务器交互,为一台简单的水泵构建基于 QML 的 HMI。

Qt Qml API 在 Qt 6.9 中已被标记为已弃用,并将在未来的版本中移除。

Qt Quick “水泵”示例演示了如何使用Qt OPC UA 的QML API与OPC UA服务器交互,为一台简单机器构建基于QML的人机界面(HMI)。

带两个水箱、水泵控制系统和状态面板的水泵应用

构建服务器

在使用水泵示例之前,您需要构建水泵仿真服务器。您可以像往常一样在 QtCreator 中打开并构建它,或者通过终端进行构建。

模拟

本示例中包含的 OPC UA 服务器模拟了一台包含两个水箱、一台水泵和一个阀门的机器。 水可以从第一个水箱泵入第二个水箱,然后通过打开阀门将水从第二个水箱排出。这两项操作均设有用户可配置的设定点,用于控制泵入或排出第二个水箱的水量。

服务器上存在以下节点:

节点ID功能
ns=2;s=Machine包含该机器的方法节点和变量节点的文件夹
ns=2;s=Machine.State机器的状态
ns=2;s=Machine.Tank1.PercentFilled第一个储罐的当前填充状态
ns=2;s=Machine.Tank2.PercentFilled第二个储罐的当前装填状态
ns=2;s=Machine.Tank2.TargetPercent泵送和冲洗的设定值
ns=2;s=Machine.Tank2.ValveState第二个储罐阀门的状态
ns=2;s=Machine.Designation用于显示的人类可读设备标识
ns=2;s=Machine.Start调用此方法以启动水泵
ns=2;s=Machine.Stop调用此方法以停止水泵
ns=2;s=Machine.FlushTank2调用此方法以冲洗第2号水箱
ns=2;s=Machine.Reset调用此方法以重置仿真

实现

本示例使用 QML 项来读写值以及调用方法。所有操作均为异步操作,并由 QML 在后台处理。

一个 QML 项代表机器及其组件。该项没有图形界面,仅提供对机器属性的访问。它有两个储罐,它们是独立的“Tank ”组件的实例。

属性

“机器”项将所有属性及子项均作为属性对外暴露。

    ...
    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
    ...
异步处理程序

API 的异步部分由 QML 自动处理,因为默认情况下,每次属性变更都会触发信号。

例如,只有当后端已连接到服务器、机器处于空闲状态且储罐液位高于设定值时,清空第二个储罐的按钮才会启用。点击该按钮时,服务器端将调用 `flushTank2() ` 方法。

    Tank2Unit {
        flushButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle
                            && machine.tank2.percentFilled > machine.tank2.targetPercent
        percentFilled: machine.tank2.percentFilled
        valveState: machine.tank2valveState

用法

服务器由 HMI 应用程序自动启动。点击“Connect ”按钮连接到服务器后,拖动滑块设置设定值,然后点击“Start ”开始将水从第一个水箱泵入第二个水箱。将设定值设置为低于第二个水箱当前水位后,点击“Flush ”即可打开阀门。

如果水已用尽,请点击Reset simulation 为第一个水箱注水。

示例项目 @ code.qt.io

另请参阅 “水泵”。

© 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.