Qt Quick 워터 펌프

간단한 워터 펌프 기계에 대한 QML 기반 HMI를 구축하기 위해 OPC UA 서버와 상호 작용하기.

Qt Quick 워터 펌프 예제는 Qt OPC UA QML API를 사용하여 OPC UA 서버와 상호 작용하여 간단한 기계에 대한 QML 기반 HMI를 구축하는 방법을 보여줍니다.

서버 빌드하기

워터 펌프 예제를 사용하려면 먼저 워터 펌프 시뮬레이션 서버를 빌드해야 합니다. 평소와 같이 QtCreator 또는 터미널에서 열고 빌드할 수 있습니다.

시뮬레이션

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

서버에는 다음 노드가 존재합니다:

NodeId함수
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 을 클릭하여 첫 번째 탱크를 다시 채웁니다.

파일:

워터 펌프도참조하세요 .

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