DESIGN-Praxis / embedded-HMI Qt OPC UA – Ein Tutorial

SignalHandling und Write

Die verbundenen Slots nehmen den neuen Wert entgegen und setzen das entsprechende Property im Backend, so dass der neue Wert in der QML-Anwendung zur Verfügung steht. Durch das Emittieren des entsprechenden Changed-Signals im Setter ist die Verwendung von Property-Bindings in QML möglich.

Signal-Handler für DataChange und Read

void OpcUaMachineBackend::percentFilledTank1Updated(QOpcUa::NodeAttribute attr, const QVariant &value)
{
    m_percentFilledTank1 = value.toDouble();
    emit percentFilledTank1Changed(m_percentFilledTank1);
}

void OpcUaMachineBackend::machineDesignationRead(QOpcUa::NodeAttributes attr)
{
    m_machineDesignation = m_machineDesignationNode->attribute(
                       QopcUa::NodeAttribute::Value)
              ).toString();
    emit machineDesignationChanged(m_machineDesignation);
}

 

Der Slot für das Schreiben des Sollwerts verwendet dasselbe QOpcUaNode-Objekt wie das DataChange-Monitoring zum Update des Properties. Hier kann optional ein Slot zur Kontrolle des Erfolgs der Operation mit dem writeFinished-Signal des QOpcUaNode verbunden werden.

Schreiben des Sollwerts auf den Server

void OpcUaMachineBackend::machineWriteTank2TargetPercent(double value)
{
    m_tank2TargetPercentNode->writeAttribute(QOpcUa::NodeAttribute::Value,
                          value);
}

 

In den Slots zum Starten und Stoppen der Pumpe, zum Öffnen des Ventils und für den Reset der Simulation werden die Methoden-Knoten Machine.Start, Machine.Stop, Machine.FlushTank2 und Machine.Reset von m_machineNode aus aufgerufen. Um den Rückgabewert des Methodenaufrufs zu erhalten, kann ein Slot mit dem methodCallFinished-Signal des QOpcUaClient verbunden werden.

Methodenaufruf zum Starten der Pumpe

void OpcUaMachineBackend::startPump()
{
    m_machineNode->callMethod("ns=2;s=Machine.Start");
}