Qt Quick Water Pump
// Copyright (C) 2018 basysKom GmbH, opensource@basyskom.com
// Copyright (C) 2018 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick.Layouts
import QtQuick.Controls
import QtOpcUa as QtOpcUa
import "qrc:/machine"
RowLayout {
property Machine machine
property QtOpcUa.Connection connection
opacity: connection.connected ? 1.0 : 0.25
Tank1Unit {
startButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle
&& machine.tank1.percentFilled > 0
&& machine.tank2.percentFilled < machine.tank2.targetPercent
stopButtonEnabled: connection.connected && machine.state === Machine.MachineState.Pumping
percentFilled: machine.tank1.percentFilled
startButtonText: machine.startMethod.displayName.text
stopButtonText: machine.stopMethod.displayName.text
id: tank1unit
Layout.fillHeight: true
Layout.fillWidth: true
Component.onCompleted: {
tank1unit.startPump.connect(machine.startMethod.callMethod)
tank1unit.stopPump.connect(machine.stopMethod.callMethod)
}
}
Pump {
machineIsPumping: machine.state === Machine.MachineState.Pumping
Component.onCompleted: {
machine.tank2.onPercentFilledChanged.connect(rotatePump)
}
}
Tank2Unit {
flushButtonEnabled: connection.connected && machine.state === Machine.MachineState.Idle
&& machine.tank2.percentFilled > machine.tank2.targetPercent
percentFilled: machine.tank2.percentFilled
valveState: machine.tank2valveState
flushButtonText: machine.flushMethod.displayName.text
Layout.fillHeight: true
Layout.fillWidth: true
id: tank2unit
Component.onCompleted: {
tank2unit.flushTank.connect(machine.flushMethod.callMethod)
}
}
Slider {
id: setpointSlider
Layout.fillHeight: false
Layout.preferredHeight: tank1unit.tankHeight
Layout.alignment: Qt.AlignBottom
enabled: connection.connected && machine.state === Machine.MachineState.Idle
from: 0
to: 100
value: machine.tank2.targetPercent
live: false
stepSize: 1.0
orientation: Qt.Vertical
onValueChanged: {
machine.tank2.targetPercent = value;
}
}
ValueDisplay {
designation: machine.designation
percentFilledTank1: machine.tank1.percentFilled
percentFilledTank2: machine.tank2.percentFilled
targetPercentTank2: machine.tank2.targetPercent
machineState: machine.state === Machine.MachineState.Idle
? "Idle"
: (machine.state === Machine.MachineState.Pumping ? "Pumping" : "Flushing")
valveState: machine.tank2valveState
}
}