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 为第一个水箱注水。
另请参阅 “水泵”。
© 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.