summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLena Biliaieva <lena.biliaieva@qt.io>2023-12-20 18:31:23 +0100
committerLena Biliaieva <lena.biliaieva@qt.io>2023-12-21 15:16:24 +0100
commitc7baf0b2d83cd9ec0e71cd593eea742b686d8dc1 (patch)
tree204ae2798fa6c1bcd0731806150bb329827460f7
parent67af59331dd5e1e4786d1845f2bbd9e0a10c588b (diff)
Review Simulation Server Ex: Refactor code
Use a literal operator u""s to create QString. Clean-up includes. Fix too long lines. Task-number: QTBUG-120312 Pick-to: 6.7 Change-Id: I3a9f3cb3f48e53896f41ebd55b0350f6ab314b97 Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
-rw-r--r--examples/opcua/waterpump/simulationserver/simulationserver.cpp164
-rw-r--r--examples/opcua/waterpump/simulationserver/simulationserver.h1
2 files changed, 132 insertions, 33 deletions
diff --git a/examples/opcua/waterpump/simulationserver/simulationserver.cpp b/examples/opcua/waterpump/simulationserver/simulationserver.cpp
index 5c8ad48..b978588 100644
--- a/examples/opcua/waterpump/simulationserver/simulationserver.cpp
+++ b/examples/opcua/waterpump/simulationserver/simulationserver.cpp
@@ -2,16 +2,17 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
#include "simulationserver.h"
+
#include <qopen62541utils.h>
#include <qopen62541valueconverter.h>
-#include <QtOpcUa/qopcuatype.h>
#include <QtCore/QDebug>
#include <QtCore/QLoggingCategory>
-#include <QtCore/QUuid>
#include <cstring>
+using namespace Qt::Literals::StringLiterals;
+
QT_BEGIN_NAMESPACE
// Node ID conversion is included from the open62541 plugin but warnings from there should be logged
@@ -70,8 +71,9 @@ void DemoServer::shutdown()
}
}
-UA_NodeId DemoServer::addObject(const QString &parent, const QString &nodeString, const QString &browseName,
- const QString &displayName, const QString &description, quint32 referenceType)
+UA_NodeId DemoServer::addObject(const QString &parent, const QString &nodeString,
+ const QString &browseName, const QString &displayName,
+ const QString &description, quint32 referenceType)
{
UA_NodeId resultNode;
UA_ObjectAttributes oAttr = UA_ObjectAttributes_default;
@@ -84,7 +86,8 @@ UA_NodeId DemoServer::addObject(const QString &parent, const QString &nodeString
UA_NodeId requestedNodeId = Open62541Utils::nodeIdFromQString(nodeString);
UA_NodeId parentNodeId = Open62541Utils::nodeIdFromQString(parent);
- UA_QualifiedName nodeBrowseName = UA_QUALIFIEDNAME_ALLOC(requestedNodeId.namespaceIndex, browseName.toUtf8().constData());
+ UA_QualifiedName nodeBrowseName = UA_QUALIFIEDNAME_ALLOC(requestedNodeId.namespaceIndex,
+ browseName.toUtf8().constData());
result = UA_Server_addObjectNode(m_server,
requestedNodeId,
@@ -108,9 +111,9 @@ UA_NodeId DemoServer::addObject(const QString &parent, const QString &nodeString
return resultNode;
}
-UA_NodeId DemoServer::addVariable(const UA_NodeId &folder, const QString &variableNode, const QString &browseName,
- const QString &displayName, const QVariant &value, QOpcUa::Types type,
- quint32 referenceType)
+UA_NodeId DemoServer::addVariable(const UA_NodeId &folder, const QString &variableNode,
+ const QString &browseName, const QString &displayName,
+ const QVariant &value, QOpcUa::Types type, quint32 referenceType)
{
UA_NodeId variableNodeId = Open62541Utils::nodeIdFromQString(variableNode);
@@ -120,7 +123,8 @@ UA_NodeId DemoServer::addVariable(const UA_NodeId &folder, const QString &variab
attr.dataType = attr.value.type ? attr.value.type->typeId : UA_TYPES[UA_TYPES_BOOLEAN].typeId;
attr.accessLevel = UA_ACCESSLEVELMASK_READ | UA_ACCESSLEVELMASK_WRITE;
- UA_QualifiedName variableName = UA_QUALIFIEDNAME_ALLOC(variableNodeId.namespaceIndex, browseName.toUtf8().constData());
+ UA_QualifiedName variableName = UA_QUALIFIEDNAME_ALLOC(variableNodeId.namespaceIndex,
+ browseName.toUtf8().constData());
UA_NodeId resultId;
UA_StatusCode result = UA_Server_addVariableNode(m_server,
@@ -145,7 +149,12 @@ UA_NodeId DemoServer::addVariable(const UA_NodeId &folder, const QString &variab
return resultId;
}
-UA_StatusCode DemoServer::startPumpMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle, const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId, void *objectContext, size_t inputSize, const UA_Variant *input, size_t outputSize, UA_Variant *output)
+UA_StatusCode DemoServer::startPumpMethod(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionHandle,
+ const UA_NodeId *methodId, void *methodContext,
+ const UA_NodeId *objectId, void *objectContext,
+ size_t inputSize, const UA_Variant *input,
+ size_t outputSize, UA_Variant *output)
{
Q_UNUSED(server);
Q_UNUSED(sessionId);
@@ -162,7 +171,9 @@ UA_StatusCode DemoServer::startPumpMethod(UA_Server *server, const UA_NodeId *se
double targetValue = data->readTank2TargetValue();
- if (data->m_state == MachineState::Idle && data->m_percentFilledTank1 > 0 && data->m_percentFilledTank2 < targetValue) {
+ if (data->m_state == MachineState::Idle
+ && data->m_percentFilledTank1 > 0
+ && data->m_percentFilledTank2 < targetValue) {
qDebug() << "Start pumping";
data->setState(MachineState::Pumping);
data->m_machineTimer.start();
@@ -174,7 +185,12 @@ UA_StatusCode DemoServer::startPumpMethod(UA_Server *server, const UA_NodeId *se
}
}
-UA_StatusCode DemoServer::stopPumpMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle, const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId, void *objectContext, size_t inputSize, const UA_Variant *input, size_t outputSize, UA_Variant *output)
+UA_StatusCode DemoServer::stopPumpMethod(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionHandle,
+ const UA_NodeId *methodId, void *methodContext,
+ const UA_NodeId *objectId, void *objectContext,
+ size_t inputSize, const UA_Variant *input,
+ size_t outputSize, UA_Variant *output)
{
Q_UNUSED(server);
Q_UNUSED(sessionId);
@@ -200,7 +216,12 @@ UA_StatusCode DemoServer::stopPumpMethod(UA_Server *server, const UA_NodeId *ses
}
}
-UA_StatusCode DemoServer::flushTank2Method(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle, const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId, void *objectContext, size_t inputSize, const UA_Variant *input, size_t outputSize, UA_Variant *output)
+UA_StatusCode DemoServer::flushTank2Method(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionHandle,
+ const UA_NodeId *methodId, void *methodContext,
+ const UA_NodeId *objectId, void *objectContext,
+ size_t inputSize, const UA_Variant *input,
+ size_t outputSize, UA_Variant *output)
{
Q_UNUSED(server);
Q_UNUSED(sessionId);
@@ -230,7 +251,12 @@ UA_StatusCode DemoServer::flushTank2Method(UA_Server *server, const UA_NodeId *s
}
}
-UA_StatusCode DemoServer::resetMethod(UA_Server *server, const UA_NodeId *sessionId, void *sessionHandle, const UA_NodeId *methodId, void *methodContext, const UA_NodeId *objectId, void *objectContext, size_t inputSize, const UA_Variant *input, size_t outputSize, UA_Variant *output)
+UA_StatusCode DemoServer::resetMethod(UA_Server *server,
+ const UA_NodeId *sessionId, void *sessionHandle,
+ const UA_NodeId *methodId, void *methodContext,
+ const UA_NodeId *objectId, void *objectContext,
+ size_t inputSize, const UA_Variant *input,
+ size_t outputSize, UA_Variant *output)
{
Q_UNUSED(server);
Q_UNUSED(sessionId);
@@ -292,8 +318,9 @@ double DemoServer::readTank2TargetValue()
return static_cast<double *>(var.data)[0];
}
-UA_NodeId DemoServer::addMethod(const UA_NodeId &folder, const QString &variableNode, const QString &description,
- const QString &browseName, const QString &displayName, UA_MethodCallback cb,
+UA_NodeId DemoServer::addMethod(const UA_NodeId &folder, const QString &variableNode,
+ const QString &description, const QString &browseName,
+ const QString &displayName, UA_MethodCallback cb,
quint32 referenceType)
{
UA_NodeId methodNodeId = Open62541Utils::nodeIdFromQString(variableNode);
@@ -303,7 +330,8 @@ UA_NodeId DemoServer::addMethod(const UA_NodeId &folder, const QString &variable
attr.description = UA_LOCALIZEDTEXT_ALLOC("en-US", description.toUtf8().constData());
attr.displayName = UA_LOCALIZEDTEXT_ALLOC("en-US", displayName.toUtf8().constData());
attr.executable = true;
- UA_QualifiedName methodBrowseName = UA_QUALIFIEDNAME_ALLOC(methodNodeId.namespaceIndex, browseName.toUtf8().constData());
+ UA_QualifiedName methodBrowseName = UA_QUALIFIEDNAME_ALLOC(methodNodeId.namespaceIndex,
+ browseName.toUtf8().constData());
UA_NodeId resultId;
UA_StatusCode result = UA_Server_addMethodNode(m_server, methodNodeId, folder,
@@ -338,27 +366,97 @@ void DemoServer::launch()
qFatal("Unexpected namespace index for Demo namespace");
}
- UA_NodeId machineObject = addObject(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder), "ns=2;s=Machine",
- "Machine", "Machine", "The machine simulator", UA_NS0ID_ORGANIZES);
- UA_NodeId tank1Object = addObject("ns=2;s=Machine", "ns=2;s=Machine.Tank1", "Tank1", "Tank 1");
- UA_NodeId tank2Object = addObject("ns=2;s=Machine", "ns=2;s=Machine.Tank2", "Tank2", "Tank 2");
+ UA_NodeId machineObject = addObject(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder),
+ u"ns=2;s=Machine"_s,
+ u"Machine"_s,
+ u"Machine"_s,
+ u"The machine simulator"_s,
+ UA_NS0ID_ORGANIZES);
+
+ UA_NodeId tank1Object = addObject(u"ns=2;s=Machine"_s,
+ u"ns=2;s=Machine.Tank1"_s,
+ u"Tank1"_s,
+ u"Tank 1"_s);
+
+ UA_NodeId tank2Object = addObject(u"ns=2;s=Machine"_s,
+ u"ns=2;s=Machine.Tank2"_s,
+ u"Tank2"_s,
+ u"Tank 2"_s);
+
+ m_percentFilledTank1Node = addVariable(tank1Object,
+ u"ns=2;s=Machine.Tank1.PercentFilled"_s,
+ u"PercentFilled"_s,
+ u"Tank 1 Fill Level"_s,
+ 100.0,
+ QOpcUa::Types::Double);
+
+ m_percentFilledTank2Node = addVariable(tank2Object,
+ u"ns=2;s=Machine.Tank2.PercentFilled"_s,
+ u"PercentFilled"_s,
+ u"Tank 2 Fill Level"_s,
+ 0.0,
+ QOpcUa::Types::Double);
+
+ m_tank2TargetPercentNode = addVariable(tank2Object,
+ u"ns=2;s=Machine.Tank2.TargetPercent"_s,
+ u"TargetPercent"_s,
+ u"Tank 2 Target Level"_s,
+ 0.0,
+ QOpcUa::Types::Double);
+
+ m_tank2ValveStateNode = addVariable(tank2Object,
+ u"ns=2;s=Machine.Tank2.ValveState"_s,
+ u"ValveState"_s,
+ u"Tank 2 Valve State"_s,
+ false,
+ QOpcUa::Types::Boolean);
+
+ m_machineStateNode = addVariable(machineObject,
+ u"ns=2;s=Machine.State"_s,
+ u"State"_s,
+ u"Machine State"_s,
+ static_cast<quint32>(MachineState::Idle),
+ QOpcUa::Types::UInt32);
- m_percentFilledTank1Node = addVariable(tank1Object, "ns=2;s=Machine.Tank1.PercentFilled", "PercentFilled", "Tank 1 Fill Level", 100.0, QOpcUa::Types::Double);
- m_percentFilledTank2Node = addVariable(tank2Object, "ns=2;s=Machine.Tank2.PercentFilled", "PercentFilled", "Tank 2 Fill Level", 0.0, QOpcUa::Types::Double);
- m_tank2TargetPercentNode = addVariable(tank2Object, "ns=2;s=Machine.Tank2.TargetPercent", "TargetPercent", "Tank 2 Target Level", 0.0, QOpcUa::Types::Double);
- m_tank2ValveStateNode = addVariable(tank2Object, "ns=2;s=Machine.Tank2.ValveState", "ValveState", "Tank 2 Valve State", false, QOpcUa::Types::Boolean);
- m_machineStateNode = addVariable(machineObject, "ns=2;s=Machine.State", "State", "Machine State", static_cast<quint32>(MachineState::Idle), QOpcUa::Types::UInt32);
UA_NodeId tempId;
- tempId = addVariable(machineObject, "ns=2;s=Machine.Designation", "Designation", "Machine Designation", "TankExample", QOpcUa::Types::String);
+ tempId = addVariable(machineObject,
+ u"ns=2;s=Machine.Designation"_s,
+ u"Designation"_s,
+ u"Machine Designation"_s,
+ u"TankExample"_s,
+ QOpcUa::Types::String);
UA_NodeId_clear(&tempId);
- tempId = addMethod(machineObject, "ns=2;s=Machine.Start", "Starts the pump", "Start", "Start Pump", &startPumpMethod);
+ tempId = addMethod(machineObject,
+ u"ns=2;s=Machine.Start"_s,
+ u"Starts the pump"_s,
+ u"Start"_s,
+ u"Start Pump"_s,
+ &startPumpMethod);
UA_NodeId_clear(&tempId);
- tempId = addMethod(machineObject, "ns=2;s=Machine.Stop", "Stops the pump", "Stop", "Stop Pump", &stopPumpMethod);
+
+ tempId = addMethod(machineObject,
+ u"ns=2;s=Machine.Stop"_s,
+ u"Stops the pump"_s,
+ u"Stop"_s,
+ u"Stop Pump"_s,
+ &stopPumpMethod);
UA_NodeId_clear(&tempId);
- tempId = addMethod(machineObject, "ns=2;s=Machine.FlushTank2", "Flushes tank 2", "FlushTank2", "Flush Tank 2", &flushTank2Method);
+
+ tempId = addMethod(machineObject,
+ u"ns=2;s=Machine.FlushTank2"_s,
+ u"Flushes tank 2"_s,
+ u"FlushTank2"_s,
+ u"Flush Tank 2"_s,
+ &flushTank2Method);
UA_NodeId_clear(&tempId);
- tempId = addMethod(machineObject, "ns=2;s=Machine.Reset", "Resets the simulation", "Reset", "Reset Simulation", &resetMethod);
+
+ tempId = addMethod(machineObject,
+ u"ns=2;s=Machine.Reset"_s,
+ u"Resets the simulation"_s,
+ u"Reset"_s,
+ u"Reset Simulation"_s,
+ &resetMethod);
UA_NodeId_clear(&tempId);
UA_NodeId_clear(&machineObject);
@@ -368,7 +466,9 @@ void DemoServer::launch()
QObject::connect(&m_machineTimer, &QTimer::timeout, this, [this]() {
double targetValue = readTank2TargetValue();
- if (m_state == MachineState::Pumping && m_percentFilledTank1 > 0 && m_percentFilledTank2 < targetValue) {
+ if (m_state == MachineState::Pumping
+ && m_percentFilledTank1 > 0
+ && m_percentFilledTank2 < targetValue) {
setPercentFillTank1(m_percentFilledTank1 - 1);
setPercentFillTank2(m_percentFilledTank2 + 1);
if (qFuzzyIsNull(m_percentFilledTank1) || m_percentFilledTank2 >= targetValue) {
diff --git a/examples/opcua/waterpump/simulationserver/simulationserver.h b/examples/opcua/waterpump/simulationserver/simulationserver.h
index e6b6471..ea86b8d 100644
--- a/examples/opcua/waterpump/simulationserver/simulationserver.h
+++ b/examples/opcua/waterpump/simulationserver/simulationserver.h
@@ -8,7 +8,6 @@
#include <qopcuatype.h>
-#include <QtCore/QDateTime>
#include <QtCore/QObject>
#include <QtCore/QTimer>
#include <QtCore/QVariant>