Auf dieser Seite

QOpcUaNode Class

QOpcUaNode ermöglicht die Interaktion mit einem OPC-UA-Knoten. Mehr...

Kopfzeile: #include <QOpcUaNode>
CMake: find_package(Qt6 REQUIRED COMPONENTS OpcUa)
target_link_libraries(mytarget PRIVATE Qt6::OpcUa)
qmake: QT += opcua
Erbt von: QObject

Öffentliche Typen

Öffentliche Funktionen

QVariant attribute(QOpcUa::NodeAttribute attribute) const
QOpcUa::UaStatusCode attributeError(QOpcUa::NodeAttribute attribute) const
bool browse(const QOpcUaBrowseRequest &request)
bool browseChildren(QOpcUa::ReferenceTypeId referenceType = QOpcUa::ReferenceTypeId::HierarchicalReferences, QOpcUa::NodeClasses nodeClassMask = QOpcUa::NodeClass::Undefined)
bool callMethod(const QString &methodNodeId, const QList<QOpcUa::TypedVariant> &args = QList<QOpcUa::TypedVariant>())
QOpcUaClient *client() const
bool disableMonitoring(QOpcUa::NodeAttributes attr)
bool enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
bool modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter)
bool modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter)
bool modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value)
QOpcUaMonitoringParameters monitoringStatus(QOpcUa::NodeAttribute attr)
QString nodeId() const
bool readAttributeRange(QOpcUa::NodeAttribute attribute, const QString &indexRange)
bool readAttributes(QOpcUa::NodeAttributes attributes = mandatoryBaseAttributes())
(since 6.7) QOpcUaHistoryReadResponse *readHistoryEvents(const QDateTime &startTime, const QDateTime &endTime, QOpcUaMonitoringParameters::EventFilter &filter, quint32 numValues = 0)
(since 6.3) QOpcUaHistoryReadResponse *readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds)
(since 6.7) QOpcUaHistoryReadResponse *readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds, QOpcUa::TimestampsToReturn timestampsToReturn)
bool readValueAttribute()
bool resolveBrowsePath(const QList<QOpcUaRelativePathElement> &path)
QDateTime serverTimestamp(QOpcUa::NodeAttribute attribute) const
QDateTime sourceTimestamp(QOpcUa::NodeAttribute attribute) const
QVariant valueAttribute() const
QOpcUa::UaStatusCode valueAttributeError() const
bool writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)
bool writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant &value, const QString &indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined)
bool writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType = QOpcUa::Types::Undefined)
bool writeValueAttribute(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)

Signale

void attributeRead(QOpcUa::NodeAttributes attributes)
void attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value)
void attributeWritten(QOpcUa::NodeAttribute attribute, QOpcUa::UaStatusCode statusCode)
void browseFinished(QList<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode)
void dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value)
void disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
void enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
void eventOccurred(QVariantList eventFields)
void methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode)
void monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUa::UaStatusCode statusCode)
void resolveBrowsePathFinished(QList<QOpcUaBrowsePathTarget> targets, QList<QOpcUaRelativePathElement> path, QOpcUa::UaStatusCode statusCode)
(since 6.7) void valueAttributeUpdated(const QVariant &value)

Statische öffentliche Mitglieder

QOpcUa::NodeAttributes allBaseAttributes()
QOpcUa::NodeAttributes mandatoryBaseAttributes()

Ausführliche Beschreibung

Der Knoten ist der Grundbaustein des OPC-UA-Adressraums. Er verfügt über Attribute wie den Browse-Namen, den Wert und zugehörige Eigenschaften und kann Verweise auf andere Knoten im Adressraum enthalten. Knoten sind in Namensräumen organisiert und verfügen über IDs, die beispielsweise numerisch, eine Zeichenkette, ein namensraumspezifisches Format (opaque) oder ein global eindeutiger Bezeichner sein können. Ein Knoten wird durch die Namespace-ID und die Knoten-ID identifiziert. Diese Kennung wird üblicherweise als Zeichenkette angegeben: Die Kennung eines Knotens, der sich im Namespace 0 befindet und die numerische Kennung 42 hat, ergibt die Zeichenkette „ ns=0;i=42 “. Ein Knoten mit einer Zeichenketten-Kennung kann über „ ns=0;s=myStringIdentifier “ adressiert werden.

Objekte dieses Typs gehören dem Benutzer und müssen gelöscht werden, wenn sie nicht mehr benötigt werden. Sie sind so lange gültig, wie der Knoten QOpcUaClient, der sie erstellt hat, existiert.

Lesen und Schreiben von Attributen

Die Knotenattribute werden beim Aufruf von ` readAttributes()` oder ` readAttributeRange()` vom Server gelesen. Die Ergebnisse werden lokal zwischengespeichert und können nach dem Empfang des Signals „ attributeRead “ mit ` attribute()` abgerufen werden.

Attribute können mit den Funktionen ` writeAttribute()`, ` writeAttributes()` und ` writeAttributeRange()` geschrieben werden, sofern der Benutzer über die erforderlichen Rechte verfügt. Der Erfolg des Schreibvorgangs wird über das Signal ` attributeWritten ` gemeldet.

attributeError() enthält einen Statuscode, der mit dem letzten Lese- oder Schreibvorgang für das Attribut verknüpft ist. Dabei handelt es sich um den vom OPC-UA-Dienst zurückgegebenen Low-Level-Statuscode. Dieser Statuscode kann vereinfacht werden, indem er mithilfe von ` QOpcUa::errorCategory()` in einen ` QOpcUa::ErrorCategory ` umgewandelt wird.

Abonnements und überwachte Elemente

Abonnements sind ein Konzept in OPC UA, das es ermöglicht, Benachrichtigungen über Datenänderungen oder Ereignisse zu erhalten, anstatt einen Knoten kontinuierlich auf Änderungen abzufragen. Überwachte Elemente legen fest, wie Attribute eines Knotens auf Änderungen überwacht werden. Sie werden einem Abonnement hinzugefügt, und alle von ihnen generierten Benachrichtigungen werden über das Abonnement an den Benutzer weitergeleitet. Das Intervall der Aktualisierungen sowie viele weitere Optionen der überwachten Elemente und Abonnements können vom Benutzer konfiguriert werden.

QOpcUaNode bietet eine Abstraktion für die Interaktion mit Abonnements und überwachten Elementen. ` enableMonitoring()` aktiviert Benachrichtigungen über Datenänderungen für ein oder mehrere Attribute. Das Signal ` dataChangeOccurred ` enthält neue Werte, und der lokale Cache wird aktualisiert. ` disableMonitoring()` deaktiviert die Benachrichtigungen über Datenänderungen. Das Signal ` monitoringStatusChanged ` benachrichtigt über Änderungen des Überwachungsstatus, z. B. nach manuellem Aktivieren und Deaktivieren oder einer Statusänderung auf dem Server.

Die Ereignisüberwachung nutzt dieselbe API für die Einrichtung und das Lebenszyklusmanagement. Das Attribut „ EventNotifier “ muss mithilfe eines „ EventFilter “ überwacht werden, der die erforderlichen Ereignisfelder auswählt und die gemeldeten Ereignisse nach benutzerdefinierten Kriterien filtert. Die Ereignisse werden im Signal „ eventOccurred()“ als „ QVariantList “ gemeldet, das die Werte der ausgewählten Ereignisfelder enthält.

Die Einstellungen des Abonnements und des überwachten Elements können zur Laufzeit mithilfe von ` modifyMonitoring()` geändert werden.

Durchsuchen des Adressraums

Der OPC-UA-Adressraum besteht aus Knoten, die durch Referenzen miteinander verbunden sind. ` browseChildren ` folgt diesen Referenzen in Vorwärtsrichtung und gibt im Signal ` browseFinished ` die Attribute aller Knoten zurück, die mit dem Knoten hinter einer Instanz von ` QOpcUaNode ` verbunden sind. ` browse()` ähnelt ` browseChildren()`, bietet jedoch mehr Optionen zur Konfiguration des Durchsuchungsaufrufs.

Methodenaufrufe

OPC UA definiert Methoden auf dem Server, die vom Benutzer aufgerufen werden können. „ QOpcUaNode “ unterstützt dies über „ callMethod “, das Parameter entgegennimmt und die Ergebnisse des Aufrufs im Signal „ methodCallFinished “ zurückgibt.

Auflösen von Browse-Pfaden

Um die Programmierung anhand einer Typbeschreibung zu unterstützen, ermöglicht OPC UA die Auflösung eines Pfads aus Browse-Namen, der von einem bestimmten Knoten ausgeht, um die Knoten-ID des Zielknotens zu ermitteln. Die Methode „ resolveBrowsePath()“ folgt einem Pfad, der von dem Knoten ausgeht, auf dem sie aufgerufen wurde, und gibt das Ergebnis im Signal „ resolveBrowsePathFinished()“ zurück.

Beispiel

Informationen zum Herstellen einer Verbindung zwischen Client und Server und zum Abrufen eines „ QOpcUaNode “-Objekts finden Sie unter „ QOpcUaClient “.

Nachdem der Knoten erfolgreich angelegt wurde, wird der „BrowseName“ des Stammknotens vom Server gelesen:

QOpcUaNode*rootNode; // Zuvor angelegt, siehe Dokumentation zu QOpcUaClient.
// An das Signal „attributeRead“ anbinden. Anstelle eines Lambda-Ausdrucks können kompatible Slots von QObjects verwendet werden.
QObject::connect(rootNode, &QOpcUaNode::attributeRead, [rootNode, client](QOpcUa::NodeAttributes attr) {
    qDebug() << "Signal for attributes:" << attr;
   if (rootNode->attributeError(QOpcUa::NodeAttribute::BrowseName) != QOpcUa::UaStatusCode::Good) {
        qDebug() << "Failed to read attribute:" << rootNode->attributeError(QOpcUa::NodeAttribute::BrowseName);
        client->disconnectFromEndpoint();
    }
    qDebug() << "Browse name:" << rootNode->attribute(QOpcUa::NodeAttribute::BrowseName).value<QOpcUaQualifiedName>().name();
});
rootNode->readAttributes(QOpcUa::NodeAttribute::BrowseName); // Lesevorgang für das „BrowseName“-Attribut des Knotens starten.

Dokumentation zum Mitgliedstyp

QOpcUaNode::AttributeMap

Dieser Typ wird von ` writeAttributes()` verwendet, um mehrere Attribute gleichzeitig zu schreiben. Den zu schreibenden Attributen müssen Werte vom Typ ` QVariant ` zugewiesen werden.

Dokumentation der Member-Funktionen

[static constexpr] QOpcUa::NodeAttributes QOpcUaNode::allBaseAttributes()

Enthält alle Attribute der OPC-UA-Basis-Knotenklasse.

QVariant QOpcUaNode::attribute(QOpcUa::NodeAttribute attribute) const

Gibt den Wert des in „ attribute “ angegebenen Attributs zurück.

Der Wert ist erst gültig, nachdem das Signal „ attributeRead “ ausgelöst wurde. Wenn für das Attribut kein zwischengespeicherter Wert vorhanden ist, wird ein leeres „ QVariant “ zurückgegeben.

QOpcUa::UaStatusCode QOpcUaNode::attributeError(QOpcUa::NodeAttribute attribute) const

Gibt den Fehlercode für das in „ attribute “ angegebene Attribut zurück.

Der Fehlercode ist erst gültig, nachdem das Signal „ attributeRead “ oder „ attributeWritten “ ausgelöst wurde.

Wenn im Attribut-Cache kein Eintrag vorhanden ist, wird „ BadNoEntryExists “ zurückgegeben.

Siehe auch QOpcUa::errorCategory.

[signal] void QOpcUaNode::attributeRead(QOpcUa::NodeAttributes attributes)

Dieses Signal wird ausgegeben, nachdem eine Operation vom Typ „ readAttributes()“ oder „ readAttributeRange()“ abgeschlossen wurde. Der Empfänger muss den Statuscode auf die in „ attributes “ enthaltenen Attribute überprüfen.

[signal] void QOpcUaNode::attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value)

Dieses Signal wird ausgelöst, nachdem der Wert im Attribut-Cache durch eine Datenänderungsbenachrichtigung vom Server, einen Lese- oder einen Schreibvorgang aktualisiert wurde. „ value “ enthält den neuen Wert für das Knotenattribut „ attr “.

Siehe auch attribute(), attributeError(), serverTimestamp(), sourceTimestamp() und valueAttributeUpdated().

[signal] void QOpcUaNode::attributeWritten(QOpcUa::NodeAttribute attribute, QOpcUa::UaStatusCode statusCode)

Dieses Signal wird ausgelöst, nachdem eine Operation mit „ writeAttribute()“, „ writeAttributes()“ oder „ writeAttributeRange()“ abgeschlossen wurde.

Bevor dieses Signal ausgesendet wird, wird der Attribut-Cache im Falle eines erfolgreichen Schreibvorgangs aktualisiert. Bei writeAttributes() wird für jedes Attribut im Schreibaufruf ein Signal ausgesendet. statusCode enthält die Erfolgsmeldung für den Schreibvorgang auf attribute.

bool QOpcUaNode::browse(const QOpcUaBrowseRequest &request)

Startet einen Browse-Aufruf von diesem Knoten aus.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Alle Referenzen, die den in „ request “ angegebenen Kriterien entsprechen, werden im Signal „ browseFinished()“ zurückgegeben.

Beispielsweise kann ein inverser „browse“-Aufruf verwendet werden, um den übergeordneten Knoten eines Eigenschaftsknotens zu ermitteln:

QOpcUaBrowseRequest request;
request.setBrowseDirection(QOpcUaBrowseRequest::BrowseDirection::Inverse);
request.setReferenceTypeId(QOpcUa::ReferenceTypeId::HasProperty);
propertyNode->browse(request);

bool QOpcUaNode::browseChildren(QOpcUa::ReferenceTypeId referenceType = QOpcUa::ReferenceTypeId::HierarchicalReferences, QOpcUa::NodeClasses nodeClassMask = QOpcUa::NodeClass::Undefined)

Führt einen Vorwärts-Browse-Aufruf durch, beginnend bei dem Knoten, auf dem diese Methode aufgerufen wird. Der Browse-Vorgang sammelt Informationen über die mit dem Knoten verbundenen untergeordneten Knoten und liefert die Ergebnisse über das Signal „ browseFinished()“.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Um nur untergeordnete Knoten abzufragen, die über einen bestimmten Referenztyp mit dem Knoten verbunden sind, muss ` referenceType ` auf diesen Referenztyp gesetzt werden. Dies kann beispielsweise genutzt werden, um alle Eigenschaften eines Knotens abzurufen, indem ` HasProperty ` in ` referenceType` übergeben wird. Die Ergebnisse können so gefiltert werden, dass sie nur Knoten bestimmter Knotenklassen enthalten, indem diese in ` nodeClassMask` festgelegt werden.

[signal] void QOpcUaNode::browseFinished(QList<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode)

Dieses Signal wird ausgelöst, nachdem eine Operation mit „ browseChildren()“ oder „ browse()“ abgeschlossen wurde.

children enthält Informationen zu allen Knoten, die den Kriterien in „ browseChildren()“ entsprachen. „ statusCode “ enthält das Serviceergebnis der Durchsuchungsoperation. Wenn „ statusCode “ nicht „ Good “ ist, ist der übergebene Vektor „ children “ leer.

Siehe auch QOpcUaReferenceDescription.

bool QOpcUaNode::callMethod(const QString &methodNodeId, const QList<QOpcUa::TypedVariant> &args = QList<QOpcUa::TypedVariant>())

Ruft die OPC-UA-Methode „ methodNodeId “ mit den über „ args “ übergebenen Parametern auf. Das Ergebnis wird im Signal „ methodCallFinished “ zurückgegeben.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich ausgelöst wurde.

QOpcUaClient *QOpcUaNode::client() const

Gibt einen Zeiger auf den Client zurück, der diesen Knoten erstellt hat.

[signal] void QOpcUaNode::dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value)

Dieses Signal wird ausgelöst, nachdem eine Benachrichtigung über eine Datenänderung empfangen wurde. value enthält den neuen Wert für das Knotenattribut attr.

Siehe auch attribute(), serverTimestamp() und sourceTimestamp().

bool QOpcUaNode::disableMonitoring(QOpcUa::NodeAttributes attr)

Diese Methode deaktiviert die Überwachung der unter attr angegebenen Attribute.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich weitergeleitet wurde.

Nach Abschluss des Aufrufs wird das Signal ` disableMonitoringFinished ` ausgelöst, und ` monitoringStatus ` gibt einen standardmäßig konstruierten Wert mit dem Statuscode `BadMonitoredItemIdIinvalid` für ` attr` zurück.

[signal] void QOpcUaNode::disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)

Dieses Signal wird ausgelöst, nachdem ein asynchroner Aufruf von ` disableMonitoring()` abgeschlossen wurde. ` statusCode ` enthält den von der Operation generierten Statuscode. Nachdem dieses Signal ausgelöst wurde, gibt ` monitoringStatus ` einen standardmäßig konstruierten Wert mit dem Statuscode `BadMonitoredItemIdIinvalid` für ` attr` zurück.

bool QOpcUaNode::enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)

Diese Methode erstellt für jedes der unter attr angegebenen Attribute ein überwachtes Element. Die Einstellungen unter settings werden bei der Erstellung der überwachten Elemente und des Abonnements verwendet.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Nach Abschluss des Aufrufs wird das Signal „ enableMonitoringFinished “ ausgelöst. Es gibt mehrere Fehlerfälle, in denen ein ungültiger Statuscode generiert wird: Ein Abonnement mit der unter settings angegebenen Abonnement-ID existiert nicht, der Knoten existiert nicht auf dem Server, der Knoten verfügt nicht über das angeforderte Attribut oder die maximale Anzahl an überwachten Elementen für den Server ist erreicht.

Die gleiche Methode wird verwendet, um die Ereignisüberwachung zu aktivieren. Ereignisse sind spezielle Objekte im OPC-UA-Adressraum, die Informationen über ein eingetretenes Ereignis enthalten. Wird auf dem Server ein Ereignis ausgelöst, erfasst ein Ereignisüberwachungselement ausgewählte Werte von Knotenattributen des Ereignisobjekts und seiner untergeordneten Knoten. Jeder Knoten, der über eine Ereignisquelle verfügt, kann auf Ereignisse überwacht werden. Um einen Knoten auf Ereignisse zu überwachen, muss das Attribut „ EventNotifier “ mithilfe eines EventFilters überwacht werden, der die vom Benutzer benötigten Ereignisfelder und optional eine „where“-Klausel enthält, mit der Ereignisse nach Kriterien gefiltert werden können (weitere Details finden Sie unter QOpcUaMonitoringParameters::EventFilter).

[signal] void QOpcUaNode::enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)

Dieses Signal wird ausgelöst, nachdem ein asynchroner Aufruf von ` enableMonitoring()` abgeschlossen wurde. Nachdem dieses Signal ausgelöst wurde, liefert ` monitoringStatus()` gültige Informationen für ` attr`. ` statusCode ` enthält den Statuscode für den Vorgang.

[signal] void QOpcUaNode::eventOccurred(QVariantList eventFields)

Dieses Signal wird ausgegeben, nachdem ein neues Ereignis empfangen wurde.

eventFields Es enthält die Werte der Ereignisfelder in der Reihenfolge, die in der Klausel „ select “ des Ereignisfilters angegeben ist.

[static constexpr] QOpcUa::NodeAttributes QOpcUaNode::mandatoryBaseAttributes()

Enthält alle obligatorischen Attribute der OPC-UA-Basis-Knotenklasse.

[signal] void QOpcUaNode::methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode)

Dieses Signal wird ausgelöst, nachdem ein Methodenaufruf für „ methodNodeId “ auf dem Server abgeschlossen wurde. „ statusCode “ enthält den Statuscode des Methodenaufrufs, „ result “ enthält die Ausgabeargumente der Methode. „ result “ ist leer, wenn die Methode keine Ausgabeargumente hat oder „ statusCode “ nicht „ Good “ ist. Die Variante „ result “ ist entweder ein einzelner Wert, wenn nur ein Ausgabeargument vorhanden ist, oder sie enthält eine Liste von Varianten, falls die aufgerufene Funktion mehrere Ausgabeargumente zurückgegeben hat.

if (result.canConvert<QVariantList>()) {
    // handle list type
} else {
    // handle value type
}

bool QOpcUaNode::modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter)

Passen Sie eine bestehende Datenänderungsüberwachung so an, dass „ filter “ als Filter für Datenänderungen verwendet wird.

Gibt „ true “ zurück, wenn die Anforderung zur Filteränderung erfolgreich an das Backend übermittelt wurde.

monitoringStatusChanged Nach Abschluss des Vorgangs wird ein Ereignis für „ attr “ ausgelöst.

bool QOpcUaNode::modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter)

Ändert eine bestehende Ereignisüberwachung so, dass „ eventFilter “ als Ereignisfilter verwendet wird.

Gibt „ true “ zurück, wenn die Anforderung zur Filteränderung erfolgreich an das Backend übermittelt wurde.

monitoringStatusChanged Nach Abschluss des Vorgangs wird ein Ereignis für „ EventNotifier “ ausgelöst.

bool QOpcUaNode::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value)

Diese Methode ändert die Einstellungen des überwachten Objekts oder des Abonnements. Es wird versucht, den Parameter „ item “ des überwachten Objekts oder des Abonnements, das mit „ attr “ verknüpft ist, auf „ value “ zu setzen.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Nach Abschluss des Aufrufs wird das Signal „ monitoringStatusChanged “ ausgelöst. Dieses Signal enthält die geänderten Parameter und den Statuscode. Ein Fehler-Statuscode wird generiert, wenn dem angeforderten Attribut kein Überwachungsobjekt zugeordnet ist, die Änderung des angeforderten Parameters nicht implementiert ist oder wenn der Server den angeforderten Wert abgelehnt hat.

QOpcUaMonitoringParameters QOpcUaNode::monitoringStatus(QOpcUa::NodeAttribute attr)

Gibt die Überwachungsparameter zurück, die dem Attribut „ attr “ zugeordnet sind. Dies kann verwendet werden, um den Erfolg von „ enableMonitoring()“ zu überprüfen oder festzustellen, ob Parameter geändert wurden. Die zurückgegebenen Werte sind erst gültig, nachdem für „ attr “ die Signale „ enableMonitoringFinished “ oder „ monitoringStatusChanged “ ausgelöst wurden. Wird der Status abgefragt, bevor ein Signal ausgelöst wurde, gibt „ QOpcUaMonitoringParameters::statusCode()“ den Wert „ BadNoEntryExists “ zurück.

[signal] void QOpcUaNode::monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUa::UaStatusCode statusCode)

Dieses Signal wird ausgelöst, nachdem ein asynchroner Aufruf von ` modifyMonitoring()` abgeschlossen wurde. Das Knotenattribut, für das die Operation angefordert wurde, wird in ` attr` zurückgegeben. ` items ` enthält die geänderten Parameter. ` statusCode ` enthält das Ergebnis der Änderungsoperation auf dem Server.

QString QOpcUaNode::nodeId() const

Gibt die ID des OPC-UA-Knotens zurück.

bool QOpcUaNode::readAttributeRange(QOpcUa::NodeAttribute attribute, const QString &indexRange)

Startet einen asynchronen Lesevorgang für das Knotenattribut „ attribute “. „ indexRange “ ist eine Zeichenfolge, mit der ein Teil eines Arrays ausgewählt werden kann. Sie ist in OPC UA 1.05 Teil 4, 7.27 definiert. Das erste Element eines Arrays ist 0, „1“ gibt das zweite Element zurück, „0:9“ gibt die ersten 10 Elemente zurück, „0,1“ gibt das zweite Element der ersten Zeile in einem zweidimensionalen Array zurück.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Attributwerte enthalten erst dann gültige Informationen, wenn das Signal „ attributeRead “ ausgegeben wurde.

bool QOpcUaNode::readAttributes(QOpcUa::NodeAttributes attributes = mandatoryBaseAttributes())

Startet einen asynchronen Lesevorgang für die Knotenattribute in attributes.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Die Attributwerte enthalten erst dann gültige Informationen, wenn das Signal „ attributeRead “ ausgelöst wurde.

[since 6.7] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryEvents(const QDateTime &startTime, const QDateTime &endTime, QOpcUaMonitoringParameters::EventFilter &filter, quint32 numValues = 0)

Startet eine Abfrage des Ereignisverlaufs für diesen Knoten unter Verwendung der Parameter „ startTime “, „ endTime “, „ filter “ und „ numValues “. Anhand von „ filter “ ermittelt der Server, welche Ereignisse und welche Felder dieser Ereignisse zurückgegeben werden sollen.

Gibt ein ` QOpcUaHistoryReadResponse ` zurück, das den Status der Anfrage enthält, sofern die asynchrone Anfrage erfolgreich versendet wurde. Die Ergebnisse werden über das Signal ` QOpcUaHistoryReadResponse::readHistoryEventsFinished(const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult)` zurückgegeben.

Das folgende Beispiel ruft historische Ereignisse der letzten zwei Tage ab. Es werden jeweils bis zu 10 Ereignisse zurückgegeben. Solange weitere Ereignisse vorhanden sind, die dem Filter und dem angegebenen Zeitbereich entsprechen, ist hasMoreData() wahr, und es können über readMoreData() weitere Ereignisse abgerufen werden.

QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=EventHistorian"));
QVERIFY(node != nullptr);

QOpcUaMonitoringParameters::EventFilter filter;
filter << QOpcUaSimpleAttributeOperand("Message");
filter << QOpcUaSimpleAttributeOperand("Time");

const auto response = node->readHistoryEvents(QDateTime::currentDateTime().addDays(-2), QDateTime::currentDateTime(), filter, 10);

QObject::connect(response, &QOpcUaHistoryReadResponse::readHistoryEventsFinished, this,
                 [response](const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) {
                     if (serviceResult != QOpcUa::UaStatusCode::Good) {
                         qDebug() << "Service call failed with" << serviceResult;
                        return;
                     }

                     // Das bisher Erreichte ausgeben
                     for (const auto &result: response->events()) {
                         qDebug() << "Results for" << result.nodeId() << result.statusCode();
                        for (const auto &event: result.events())
                             qDebug() << "    Event:" << event;
                     }

                     if (response->hasMoreData())
                         response->readMoreData();
                 });

Diese Funktion wurde in Qt 6.7 eingeführt.

[since 6.3] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds)

Startet eine Leseanforderung für den Verlauf dieses Knotens. Hierbei handelt es sich um die „ Qt OPC UA “-Darstellung des OPC UA-Dienstes „ReadHistory“ zum Auslesen von Rohdaten aus dem Verlauf, wie in OPC UA 1.05, Teil 4, Abschnitt 5.10.3 definiert. Der Verlauf wird anhand der folgenden Parameter ausgelesen: „ startTime “, „ endTime “, „ numValues “ und „ returnBounds “.

Gibt ein ` QOpcUaHistoryReadResponse ` zurück, das den Status der Anfrage enthält, sofern die asynchrone Anfrage erfolgreich versendet wurde. Die Ergebnisse werden über das Signal ` QOpcUaHistoryReadResponse::readHistoryDataFinished(const QList<QOpcUaHistoryData> &results, QOpcUa::UaStatusCode serviceResult)` zurückgegeben.

Im folgenden Beispiel werden die historischen Daten eines Knotens aus den letzten zwei Tagen abgefragt und ausgegeben. Das Ergebnis ist auf zehn Werte pro Knoten begrenzt.

QOpcUaHistoryReadResponse*response = node->readHistoryRaw(QDateTime::currentDateTime(),
                                                           QDateTime::currentDateTime().addDays(-2),
                                                           10,
                                                           true);
if (response) {
    QObject::connect(response123, &QOpcUaHistoryReadResponse::readHistoryDataFinished,
                     [] (QList<QOpcUaHistoryData> Ergebnisse, QOpcUa::UaStatusCode serviceResult) {
        if (serviceResult != QOpcUa::UaStatusCode::Good) {
            qWarning() << "Fetching historical data failed with:" << serviceResult;
        } else {
            for (const auto& result : results) {
                qInfo() << "NodeId:" << result.nodeId();
               for (const auto &dataValue: result.result())
                    qInfo() << "Value:" << dataValue.value();
            }
        }
    });
}

Diese Funktion wurde in Qt 6.3 eingeführt.

[since 6.7] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds, QOpcUa::TimestampsToReturn timestampsToReturn)

Startet eine Abfrage des Leseverlaufs für diesen Knoten. Der zusätzliche Parameter „ timestampsToReturn “ legt fest, welche Zeitstempel für jeden Wert zurückgegeben werden.

Diese Funktion wurde in Qt 6.7 eingeführt.

bool QOpcUaNode::readValueAttribute()

Startet einen asynchronen Lesevorgang für das „Value“-Attribut des Knotens.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Siehe auch ` readAttributes()`.

bool QOpcUaNode::resolveBrowsePath(const QList<QOpcUaRelativePathElement> &path)

Löst den Navigationspfad „ path “ in eine oder mehrere Knoten-IDs auf, beginnend mit diesem Knoten, unter Verwendung des in OPC UA 1.05, Teil 4, Abschnitt 5.8.4, spezifizierten Dienstes „TranslateBrowsePathsToNodeIds“.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich ausgelöst wurde.

„TranslateBrowsePathsToNodeIds“ wird hauptsächlich verwendet, um anhand von Typdefinitionen statt anhand einer konkreten Gruppe von Knoten im OPC-UA-Adressraum zu programmieren. Beispielsweise könnte eine Typdefinition für ein Maschinenmodell aus einem Startknoten mit dem Browse-Namen „Machine“ bestehen, der eine Komponente mit dem Browse-Namen „Fan“ enthält. „Fan“ verfügt über eine Komponente mit dem Browse-Namen „RPM“, bei der es sich um einen Variablenknoten handelt, der den aktuellen Drehzahlwert des Lüfters enthält. Es gibt mehrere Maschinen dieses Typs, und jede dieser Maschinen wird im OPC-UA-Adressraum als Objekt des Maschinentyp abgebildet. Für jedes dieser Maschinenobjekte ist der Pfad vom Maschinenknoten zum Knoten „RPM“ identisch. Wenn ein Client den aktuellen Drehzahlwert auslesen möchte, muss er die Funktion `resolveBrowsePath()` mit dem Maschinenknoten als Startknoten und dem Browse-Pfad von der Maschine zum Knoten „RPM“ aufrufen:

QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=1;s=machine1"));

QList<QOpcUaRelativePathElement> path;
path.append(QOpcUaRelativePathElement(QOpcUaQualifiedName(1, "Fan"), QOpcUa::ReferenceTypeId::HasComponent));
path.append(QOpcUaRelativePathElement(QOpcUaQualifiedName(1, "RPM"), QOpcUa::ReferenceTypeId::HasComponent));
node->resolveBrowsePath(path);

Das von ` resolveBrowsePathFinished()` zurückgegebene Ergebnis enthält die Knoten-ID des „RPM“-Knotens, mit der auf die Attribute des Knotens zugegriffen werden kann:

if (!results.size()) {
    qWarning() << "Browse path resolution failed";
   return;
}

if (results.at(0).isFullyResolved()) {
   QOpcUaNode*rpmNode = client->node(results.at(0).targetId());
   if (!rpmNode) {
       qWarning() << "Failed to create node";
      return;
   }
   // Slots verbinden, Methoden aufrufen
} else {
    qWarning() << "Browse path could not be fully resolved, the target node is on another server";
   return;
}

[signal] void QOpcUaNode::resolveBrowsePathFinished(QList<QOpcUaBrowsePathTarget> targets, QList<QOpcUaRelativePathElement> path, QOpcUa::UaStatusCode statusCode)

Dieses Signal wird ausgelöst, nachdem ein Aufruf von ` resolveBrowsePath()` abgeschlossen wurde.

QOpcUaBrowsePathTarget targets enthält die Treffer, ist der Statuscode der Operation. Wenn nicht ist, ist leer. Der Browse-Pfad ist der Browse-Pfad aus der Anfrage. Er kann verwendet werden, um Ergebnisse mit Anfragen zu verknüpfen. statusCode statusCode Good targets path

QDateTime QOpcUaNode::serverTimestamp(QOpcUa::NodeAttribute attribute) const

Gibt den Server-Zeitstempel des letzten Lesevorgangs oder der letzten Datenänderung von ` attribute` zurück. Bevor mindestens ein Signal vom Typ ` attributeRead ` oder ` dataChangeOccurred ` ausgelöst wurde, wird ein Null-Datums-/Zeitwert zurückgegeben.

QDateTime QOpcUaNode::sourceTimestamp(QOpcUa::NodeAttribute attribute) const

Gibt den Quellzeitstempel des letzten Lesevorgangs oder der letzten Datenänderung von ` attribute` zurück. Bevor mindestens ein Signal vom Typ ` attributeRead ` oder ` dataChangeOccurred ` ausgelöst wurde, wird ein Null-Datums-/Zeitwert zurückgegeben.

QVariant QOpcUaNode::valueAttribute() const

Gibt den Wert des Attributs „Value“ des Knotens zurück.

Der zurückgegebene Wert ist erst gültig, nachdem das „Value“-Attribut erfolgreich gelesen oder geschrieben wurde oder nachdem eine Datenänderung durch eine Überwachung den Attribut-Cache aktualisiert hat. Dies wird durch ein „ attributeRead()“- oder „ attributeWritten()“-Signal mit dem Statuscode „ Good “ oder durch ein „ dataChangeOccurred()“-Signal für das „Value“-Attribut angezeigt.

Befindet sich kein Wert im Attribut-Cache, wird ein ungültiges „ QVariant “ zurückgegeben.

Siehe auch „ readValueAttribute()“, „ writeValueAttribute()“ und „ valueAttributeError()“.

QOpcUa::UaStatusCode QOpcUaNode::valueAttributeError() const

Gibt den Fehlercode für das Attribut „Value“ des Knotens zurück. Der Statuscode „ Good “ weist auf einen gültigen Rückgabewert für „ valueAttribute()“ hin. Wenn im Attribut-Cache kein Eintrag vorhanden ist, wird „ BadNoEntryExists “ zurückgegeben.

[signal, since 6.7] void QOpcUaNode::valueAttributeUpdated(const QVariant &value)

Dieses Signal wird ausgelöst, nachdem das Attribut „value“ im Attribut-Cache durch eine Datenänderungsbenachrichtigung vom Server, einen Lese- oder einen Schreibvorgang aktualisiert wurde. „ value “ enthält den neuen Wert für das Attribut „value“.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch „ attribute()“, „ attributeError()“, „ serverTimestamp()“, „ sourceTimestamp()“ und „ attributeUpdated()“.

bool QOpcUaNode::writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)

Schreibt „ value “ in das unter attribute angegebene Attribut unter Verwendung der Typinformationen aus type. Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich ausgeführt wurde.

Wird der Parameter ` type ` weggelassen, versucht das Backend, den richtigen Typ zu ermitteln. Dabei werden die folgenden Standardtypen angenommen:

Qt MetaTypeOPC-UA-Typ
BoolBoolean
UCharByte
CharSByte
UShortUInt16
ShortInt16
IntInt32
UIntUInt32
ULongLongUInt64
LongLongInt64
DoubleDouble
FloatFloat
QStringZeichenkette
QDateTimeDateTime
QByteArrayByteString
QUuidGUID

bool QOpcUaNode::writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant &value, const QString &indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined)

Schreibt „ value “ in das unter attribute angegebene Attribut unter Verwendung der Typinformationen aus type. Informationen zu indexRange finden Sie unter readAttributeRange().

Gibt true zurück, wenn der asynchrone Aufruf erfolgreich ausgelöst wurde.

bool QOpcUaNode::writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType = QOpcUa::Types::Undefined)

Führt einen Schreibvorgang für die in „ toWrite “ angegebenen Attribute und Werte durch.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Der Parameter ` valueAttributeType ` kann verwendet werden, um Typinformationen für das Attribut `value` bereitzustellen. Alle anderen Attribute haben bekannte Typen.

Siehe auch ` writeAttribute()`.

bool QOpcUaNode::writeValueAttribute(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)

Schreibt „ value “ unter Verwendung der Typinformationen aus „ type “ in das „Value“-Attribut des Knotens.

Gibt „ true “ zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.

Siehe auch ` writeAttribute()`.

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