이 페이지에서

Qt Quick 물 펌프

OPC UA 서버와 연동하여 간단한 물 펌프 기계를 위한 QML 기반 HMI를 구축합니다.

Qt Qml API는 Qt 6.9에서 더 이상 사용되지 않는 것으로 표시되었으며, 향후 버전에서 제거될 예정입니다.

Qt Quick 'Water Pump' 예제는 Qt OPC UA QML API를 사용하여 OPC UA 서버와 상호 작용하고, 간단한 기계를 위한 QML 기반 HMI를 구축하는 방법을 보여줍니다.

두 개의 탱크, 펌프 제어 장치 및 상태 패널이 포함된 급수 펌프 시스템

서버 빌드

‘Water Pump’ 예제를 사용하기 전에 ‘Water Pump Simulation Server’를 빌드해야 합니다. 평소와 같이 QtCreator에서 열거나 터미널을 통해 빌드할 수 있습니다.

시뮬레이션

이 예제에 포함된 OPC UA 서버는 두 개의 탱크, 워터 펌프 및 밸브로 구성된 기계의 시뮬레이션을 실행합니다. 첫 번째 탱크에서 두 번째 탱크로 물을 펌핑한 다음, 밸브를 열어 두 번째 탱크에서 물을 배출할 수 있습니다. 두 작업 모두 사용자가 설정할 수 있는 설정값(setpoint)을 가지며, 이 설정값은 두 번째 탱크로 펌핑되거나 배출되는 물의 양을 제어합니다.

서버에는 다음과 같은 노드가 있습니다:

노드 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 ` 컴포넌트의 인스턴스인 두 개의 탱크가 있습니다.

속성

machine 항목은 모든 속성과 하위 항목을 속성으로 노출합니다.

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

‘Water Pump’항목도 참조하십시오 .

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