summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLena Biliaieva <lena.biliaieva@qt.io>2023-12-19 21:23:07 +0100
committerLena Biliaieva <lena.biliaieva@qt.io>2023-12-20 12:06:33 +0100
commit40753e38b6b878dfa1a0027a314ac35c21da62c3 (patch)
treec80c3fe93833ce816743088b04f7a5699eb37321
parent59e284470846ffc2eafd5d33ee80574c099f43e8 (diff)
Review Water Pump Ex: Refactor code
Silenced qml warning. Fixed unqualified access qmllint warning. Fixed too long lines. Fixes: QTBUG-120134 Pick-to: 6.7 Change-Id: I962c2655136ba30b3d1dfe0d8d07fce577bb176a Reviewed-by: Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> Reviewed-by: Rym Bouabid <rym.bouabid@qt.io>
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml7
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml2
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml8
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml12
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml8
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml8
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml7
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/main.qml3
-rw-r--r--examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp98
9 files changed, 120 insertions, 33 deletions
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml
index d6622c9..20bec80 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/Pump.qml
@@ -6,10 +6,12 @@ import OpcUaMachineBackend
Rectangle {
id: pump
+
width: 40
height: 40
radius: width / 2
color: uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping ? "#00BFFF" : "lightgrey"
+
Rectangle {
antialiasing: true
width: height / 4
@@ -17,6 +19,7 @@ Rectangle {
anchors.centerIn: parent
color: "grey"
}
+
Rectangle {
antialiasing: true
width: pump.width * 0.75
@@ -24,9 +27,11 @@ Rectangle {
anchors.centerIn: parent
color: "grey"
}
+
Connections {
target: uaBackend
- onPercentFilledTank2Changed: {
+
+ function onPercentFilledTank2Changed(value) {
if (uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping)
rotation += 15
}
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml b/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml
index a779459..8ec376b 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/ServerControl.qml
@@ -11,6 +11,7 @@ RowLayout {
Layout.fillWidth: true
text: "opc.tcp://127.0.0.1:43344"
}
+
ComboBox {
id: backendSelector
model: uaBackend.backends
@@ -26,6 +27,7 @@ RowLayout {
uaBackend.connectToEndpoint(uaUrl.text, backendSelector.currentIndex)
}
}
+
Button {
text: "Reset simulation"
enabled: uaBackend.connected
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml
index 7c3c55e..db92188 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank.qml
@@ -4,14 +4,18 @@
import QtQuick
Rectangle {
+ id: root
+
property real percentFilled: 0
+
color: "lightgrey"
width: parent.width
height: parent.height
+
Rectangle {
- y: parent.height - percentFilled * (parent.height / 100)
+ y: parent.height - root.percentFilled * (parent.height / 100)
width: parent.width
- height: percentFilled * (parent.height / 100)
+ height: root.percentFilled * (parent.height / 100)
color: "#00BFFF"
}
}
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml
index 29de964..b98c05c 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank1Unit.qml
@@ -11,21 +11,27 @@ Item {
ColumnLayout {
anchors.fill: parent
+
RowLayout {
Button {
id: startButton
text: "Start"
- enabled: uaBackend.connected && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle &&
- uaBackend.percentFilledTank1 > 0 && uaBackend.percentFilledTank2 < uaBackend.tank2TargetPercent
+ enabled: uaBackend.connected
+ && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle
+ && uaBackend.percentFilledTank1 > 0
+ && uaBackend.percentFilledTank2 < uaBackend.tank2TargetPercent
onClicked: uaBackend.startPump()
}
+
Button {
id: stopButton
text: "Stop"
- enabled: uaBackend.connected && uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping
+ enabled: uaBackend.connected
+ && uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping
onClicked: uaBackend.stopPump()
}
}
+
Tank {
id: tank1
Layout.fillHeight: true
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml b/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml
index 99afa54..4ee2a74 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/Tank2Unit.qml
@@ -9,15 +9,19 @@ import OpcUaMachineBackend
Item {
ColumnLayout {
anchors.fill: parent
+ Layout.fillHeight: true
+
Button {
id: flushButton
text: "Flush"
- enabled: uaBackend.connected && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle && uaBackend.percentFilledTank2 > uaBackend.tank2TargetPercent
+ enabled: uaBackend.connected
+ && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle
+ && uaBackend.percentFilledTank2 > uaBackend.tank2TargetPercent
onClicked: {
uaBackend.flushTank2()
}
}
- Layout.fillHeight: true
+
Tank {
id: tank2
Layout.fillHeight: true
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml b/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml
index f75dc24..e65b843 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/TankSimulation.qml
@@ -8,22 +8,27 @@ import OpcUaMachineBackend
RowLayout {
opacity: uaBackend.connected ? 1.0 : 0.25
+
Tank1Unit {
id: tank1unit
Layout.fillHeight: true
Layout.fillWidth: true
}
+
Pump {}
+
Tank2Unit {
Layout.fillHeight: true
Layout.fillWidth: true
}
+
Slider {
id: setpointSlider
Layout.fillHeight: false
Layout.preferredHeight: tank1unit.tankHeight
Layout.alignment: Qt.AlignBottom
- enabled: uaBackend.connected && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle
+ enabled: uaBackend.connected
+ && uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle
from: 0
to: 100
value: uaBackend.tank2TargetPercent
@@ -34,5 +39,6 @@ RowLayout {
uaBackend.machineWriteTank2TargetPercent(value);
}
}
+
ValueDisplay {}
}
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml b/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml
index 63f5309..9414fc8 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/ValueDisplay.qml
@@ -16,8 +16,11 @@ ColumnLayout {
}
Text {
font.pointSize: 10
- text: "<b>State:</b> " + (uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle ?
- "Idle" : (uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping ? "Pumping" : "Flushing"))
+ text: "<b>State:</b> "
+ + (uaBackend.machineState === OpcUaMachineBackend.MachineState.Idle
+ ? "Idle"
+ : (uaBackend.machineState === OpcUaMachineBackend.MachineState.Pumping ? "Pumping"
+ : "Flushing"))
}
Text {
font.pointSize: 10
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/main.qml b/examples/opcua/waterpump/waterpump-qmlcpp/main.qml
index fd87c69..caa947e 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/main.qml
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/main.qml
@@ -17,10 +17,13 @@ Window {
anchors.margins: 10
anchors.fill: parent
spacing: 45
+
ServerControl {}
+
TankSimulation {
Layout.fillHeight: true
}
+
Text {
id: messageText
font.pointSize: 10
diff --git a/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
index fed92f6..dceb13c 100644
--- a/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
+++ b/examples/opcua/waterpump/waterpump-qmlcpp/opcuamachinebackend.cpp
@@ -50,34 +50,79 @@ void OpcUaMachineBackend::clientStateHandler(QOpcUaClient::ClientState state)
m_machineDesignationNode.reset(m_client->node(u"ns=2;s=Machine.Designation"_s));
// Connect signal handlers for subscribed values
- QObject::connect(m_machineStateNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::machineStateUpdated);
- QObject::connect(m_percentFilledTank1Node.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::percentFilledTank1Updated);
- QObject::connect(m_percentFilledTank2Node.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::percentFilledTank2Updated);
- QObject::connect(m_tank2TargetPercentNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::tank2TargetPercentUpdated);
- QObject::connect(m_tank2ValveStateNode.data(), &QOpcUaNode::dataChangeOccurred, this, &OpcUaMachineBackend::tank2ValveStateUpdated);
+ QObject::connect(m_machineStateNode.data(),
+ &QOpcUaNode::dataChangeOccurred,
+ this,
+ &OpcUaMachineBackend::machineStateUpdated);
+ QObject::connect(m_percentFilledTank1Node.data(),
+ &QOpcUaNode::dataChangeOccurred,
+ this,
+ &OpcUaMachineBackend::percentFilledTank1Updated);
+ QObject::connect(m_percentFilledTank2Node.data(),
+ &QOpcUaNode::dataChangeOccurred,
+ this,
+ &OpcUaMachineBackend::percentFilledTank2Updated);
+ QObject::connect(m_tank2TargetPercentNode.data(),
+ &QOpcUaNode::dataChangeOccurred,
+ this,
+ &OpcUaMachineBackend::tank2TargetPercentUpdated);
+ QObject::connect(m_tank2ValveStateNode.data(),
+ &QOpcUaNode::dataChangeOccurred,
+ this,
+ &OpcUaMachineBackend::tank2ValveStateUpdated);
// Subscribe to data changes
- m_machineStateNode->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
- m_percentFilledTank1Node->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
- m_percentFilledTank2Node->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
- m_tank2TargetPercentNode->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
- m_tank2ValveStateNode->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
+ m_machineStateNode->enableMonitoring(
+ QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
+ m_percentFilledTank1Node->enableMonitoring(
+ QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
+ m_percentFilledTank2Node->enableMonitoring(
+ QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
+ m_tank2TargetPercentNode->enableMonitoring(
+ QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
+ m_tank2ValveStateNode->enableMonitoring(
+ QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(100));
// Connect the handler for async reading
- QObject::connect(m_machineDesignationNode.data(), &QOpcUaNode::attributeRead, this, &OpcUaMachineBackend::machineDesignationRead);
+ QObject::connect(m_machineDesignationNode.data(),
+ &QOpcUaNode::attributeRead,
+ this,
+ &OpcUaMachineBackend::machineDesignationRead);
+
// Request the value attribute of the machine designation node
m_machineDesignationNode->readAttributes(QOpcUa::NodeAttribute::Value);
// Add handlers for write and call results
- QObject::connect(m_tank2TargetPercentNode.data(), &QOpcUaNode::attributeWritten, this, &OpcUaMachineBackend::setpointWritten);
- QObject::connect(m_machineNode.data(), &QOpcUaNode::methodCallFinished, this, &OpcUaMachineBackend::handleMethodResult);
+ QObject::connect(m_tank2TargetPercentNode.data(),
+ &QOpcUaNode::attributeWritten,
+ this,
+ &OpcUaMachineBackend::setpointWritten);
+ QObject::connect(m_machineNode.data(),
+ &QOpcUaNode::methodCallFinished,
+ this,
+ &OpcUaMachineBackend::handleMethodResult);
// Add handlers for enableMonitoring results
- QObject::connect(m_machineStateNode.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished);
- QObject::connect(m_percentFilledTank1Node.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished);
- QObject::connect(m_percentFilledTank2Node.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished);
- QObject::connect(m_tank2TargetPercentNode.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished);
- QObject::connect(m_tank2ValveStateNode.data(), &QOpcUaNode::enableMonitoringFinished, this, &OpcUaMachineBackend::enableMonitoringFinished);
+ QObject::connect(m_machineStateNode.data(),
+ &QOpcUaNode::enableMonitoringFinished,
+ this,
+ &OpcUaMachineBackend::enableMonitoringFinished);
+ QObject::connect(m_percentFilledTank1Node.data(),
+ &QOpcUaNode::enableMonitoringFinished,
+ this,
+ &OpcUaMachineBackend::enableMonitoringFinished);
+ QObject::connect(m_percentFilledTank2Node.data(),
+ &QOpcUaNode::enableMonitoringFinished,
+ this,
+ &OpcUaMachineBackend::enableMonitoringFinished);
+ QObject::connect(m_tank2TargetPercentNode.data(),
+ &QOpcUaNode::enableMonitoringFinished,
+ this,
+ &OpcUaMachineBackend::enableMonitoringFinished);
+ QObject::connect(m_tank2ValveStateNode.data(),
+ &QOpcUaNode::enableMonitoringFinished,
+ this,
+ &OpcUaMachineBackend::enableMonitoringFinished);
}
if (state == QOpcUaClient::ClientState::Connecting)
@@ -146,7 +191,9 @@ void OpcUaMachineBackend::setpointWritten(QOpcUa::NodeAttribute attr, QOpcUa::Ua
setMessage(u"Failed to set setpoint"_s);
}
-void OpcUaMachineBackend::handleMethodResult(QString methodNodeId, const QVariant &result, QOpcUa::UaStatusCode statusCode)
+void OpcUaMachineBackend::handleMethodResult(QString methodNodeId,
+ const QVariant &result,
+ QOpcUa::UaStatusCode statusCode)
{
Q_UNUSED(result);
@@ -173,7 +220,8 @@ void OpcUaMachineBackend::handleMethodResult(QString methodNodeId, const QVarian
}
}
-void OpcUaMachineBackend::enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode status)
+void OpcUaMachineBackend::enableMonitoringFinished(QOpcUa::NodeAttribute attr,
+ QOpcUa::UaStatusCode status)
{
Q_UNUSED(attr);
if (!sender())
@@ -296,8 +344,14 @@ void OpcUaMachineBackend::connectToEndpoint(const QString &url, qint32 index)
if (!m_client || (m_client && m_client->backend() != m_backends.at(index))) {
m_client.reset(provider.createClient(m_backends.at(index)));
if (m_client) {
- QObject::connect(m_client.data(), &QOpcUaClient::endpointsRequestFinished, this, &OpcUaMachineBackend::requestEndpointsFinished);
- QObject::connect(m_client.data(), &QOpcUaClient::stateChanged, this, &OpcUaMachineBackend::clientStateHandler);
+ QObject::connect(m_client.data(),
+ &QOpcUaClient::endpointsRequestFinished,
+ this,
+ &OpcUaMachineBackend::requestEndpointsFinished);
+ QObject::connect(m_client.data(),
+ &QOpcUaClient::stateChanged,
+ this,
+ &OpcUaMachineBackend::clientStateHandler);
}
}