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: | 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() |
Detaillierte Beschreibung
Der Knoten ist der Grundbaustein des OPC UA Adressraums. Er hat Attribute wie Browse-Name, Wert, zugehörige Eigenschaften und kann Referenzen zu anderen Knoten im Adressraum haben. Knoten sind in Namespaces organisiert und haben IDs, die z.B. numerisch, ein String, ein Namespace-spezifisches Format (opak) oder ein global eindeutiger Bezeichner sein können. Ein Knoten wird durch die Namespace-ID und die Knoten-ID identifiziert. Dieser Bezeichner wird normalerweise als Zeichenkette angegeben: Der Bezeichner eines Knotens, der sich im Namensraum 0 befindet und den numerischen Bezeichner 42 hat, ergibt die Zeichenfolge ns=0;i=42
. Ein Knoten mit einem String-Identifikator kann über ns=0;s=myStringIdentifier
angesprochen werden.
Objekte dieses Typs sind Eigentum des Benutzers und müssen gelöscht werden, wenn sie nicht mehr benötigt werden. Sie sind so lange gültig, wie die QOpcUaClient, die sie erstellt hat, existiert.
Lesen und Schreiben von Attributen
Die Knotenattribute werden vom Server gelesen, wenn readAttributes() oder readAttributeRange() aufgerufen wird. Die Ergebnisse werden lokal zwischengespeichert und können mit attribute() abgerufen werden, nachdem das Signal attributeRead empfangen wurde.
Attribute können mit writeAttribute(), writeAttributes() und writeAttributeRange() geschrieben werden, wenn der Benutzer über die erforderlichen Rechte verfügt. Der Erfolg des Schreibvorgangs wird mit dem Signal attributeWritten gemeldet.
attributeError() enthält einen Statuscode, der mit dem letzten Lese- oder Schreibvorgang für das Attribut verbunden ist. Dies ist der Low-Level-Statuscode, der vom OPC-UA-Dienst zurückgegeben wird. Dieser Statuscode kann vereinfacht werden, indem er mit QOpcUa::errorCategory() in ein QOpcUa::ErrorCategory umgewandelt wird.
Abonnements und überwachte Elemente
Subskriptionen sind ein Konzept in OPC UA, das den Empfang von Benachrichtigungen bei Datenänderungen oder bei Ereignissen ermöglicht, anstatt einen Knoten ständig auf Änderungen abzufragen. Monitored Items definieren, wie die Attribute eines Knotens auf Änderungen überwacht werden. Sie werden zu einer Subskription hinzugefügt und alle von ihnen erzeugten Benachrichtigungen werden über die Subskription an den Benutzer weitergeleitet. Das Intervall der Aktualisierungen sowie viele andere Optionen der überwachten Elemente und Abonnements können vom Benutzer konfiguriert werden.
QOpcUaNode bietet eine Abstraktion zur Interaktion mit Abonnements und überwachten Elementen. enableMonitoring() ermöglicht die Benachrichtigung ü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 Datenänderungsbenachrichtigungen. Das Signal monitoringStatusChanged benachrichtigt über Änderungen des Überwachungsstatus, z. B. nach manueller Aktivierung und Deaktivierung oder einer Statusänderung auf dem Server.
Die Ereignisüberwachung verwendet dieselbe API für die Einrichtung und die Verwaltung des Lebenszyklus. Das Attribut EventNotifier muss über ein EventFilter überwacht werden, das die erforderlichen Ereignisfelder auswählt und die gemeldeten Ereignisse nach benutzerdefinierten Kriterien filtert. Die Ereignisse werden in dem Signal eventOccurred() als QVariantList gemeldet, das die Werte der ausgewählten Ereignisfelder enthält.
Die Einstellungen für das Abonnement und das überwachte Element können zur Laufzeit mit modifyMonitoring() geändert werden.
Durchsuchen des Adressraums
Der OPC UA Adressraum besteht aus Knoten, die durch Referenzen verbunden sind. browseChildren folgt diesen Referenzen in Vorwärtsrichtung und gibt Attribute von allen Knoten zurück, die mit dem Knoten hinter einer Instanz von QOpcUaNode im Signal browseFinished verbunden sind. browse() ist ähnlich wie browseChildren(), bietet aber mehr Optionen zur Konfiguration des Browse-Aufrufs.
Methodenaufrufe
OPC UA spezifiziert 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 Suchpfaden
Um die Programmierung gegen eine Typbeschreibung zu unterstützen, unterstützt OPC UA die Auflösung eines Pfades von Browse-Namen ausgehend von einem bestimmten Knoten, um die Node-ID des Zielknotens zu erhalten. Die Methode resolveBrowsePath() folgt einem Pfad ausgehend von dem Knoten, an dem sie aufgerufen wurde, und gibt das Ergebnis im Signal resolveBrowsePathFinished() zurück.
Beispiel
Um den Client mit einem Server zu verbinden und ein QOpcUaNode Objekt zu erhalten, siehe QOpcUaClient.
Nachdem der Knoten erfolgreich erstellt wurde, wird der BrowseName des Wurzelknotens vom Server gelesen:
QOpcUaNode *rootNode; // Zuvor erstellt, siehe QOpcUaClient-Dokumentation.// Verbinden Sie sich mit dem attributeRead-Signal. Kompatible Slots von QObjects können anstelle eines Lambdas 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); // Startet einen Lesevorgang für das Attribut BrowseName des Knotens.
Dokumentation der Mitgliedstypen
QOpcUaNode::AttributeMap
Dieser Typ wird von writeAttributes() verwendet, um mehr als ein Attribut auf einmal zu schreiben. QVariant Werte müssen den zu schreibenden Attributen zugewiesen werden.
Dokumentation der Mitgliedsfunktionen
[static constexpr]
QOpcUa::NodeAttributes QOpcUaNode::allBaseAttributes()
Enthält alle Attribute der OPC UA Basisknotenklasse.
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 gesendet wurde. Ein leeres QVariant wird zurückgegeben, wenn es keinen zwischengespeicherten Wert für das Attribut gibt.
QOpcUa::UaStatusCode QOpcUaNode::attributeError(QOpcUa::NodeAttribute attribute) const
Gibt den Fehlercode für das in attribute angegebene Attribut zurück.
Der Fehlercode ist nur gültig, nachdem das Signal attributeRead oder attributeWritten ausgegeben wurde.
Wenn kein Eintrag im Attribut-Cache vorhanden ist, wird BadNoEntryExists zurückgegeben.
Siehe auch QOpcUa::errorCategory.
[signal]
void QOpcUaNode::attributeRead(QOpcUa::NodeAttributes attributes)
Dieses Signal wird ausgegeben, nachdem ein readAttributes() oder readAttributeRange() Vorgang beendet wurde. Der Empfänger muss den Statuscode für die in attributes enthaltenen Attribute überprüfen.
[signal]
void QOpcUaNode::attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value)
Dieses Signal wird ausgegeben, nachdem der Wert im Attribut-Cache durch eine Datenänderungsmeldung des Servers, einen Lese- oder 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 ausgegeben, nachdem eine writeAttribute(), writeAttributes() oder writeAttributeRange() Operation beendet wurde.
Bevor dieses Signal ausgegeben wird, wird der Attribut-Cache im Falle eines erfolgreichen Schreibvorgangs aktualisiert. Bei writeAttributes() wird für jedes Attribut im Schreibaufruf ein Signal ausgegeben. statusCode enthält die Erfolgsinformation 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 abgewickelt wurde.
Alle Verweise, die den in request angegebenen Kriterien entsprechen, werden in dem Signal browseFinished() zurückgegeben.
Ein inverser Browse-Aufruf kann zum Beispiel verwendet werden, um den übergeordneten Knoten eines Eigenschaftsknotens zu finden:
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 Aufruf zum Durchsuchen in Vorwärtsrichtung aus, ausgehend von dem Knoten, für den diese Methode aufgerufen wird. Die Browse-Operation sammelt Informationen über Kindknoten, die mit dem Knoten verbunden sind, und liefert die Ergebnisse im Signal browseFinished().
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Um nur Kinder anzufordern, die mit dem Knoten durch einen bestimmten Referenztyp verbunden sind, muss referenceType auf diesen Referenztyp gesetzt werden. Dies kann zum Beispiel verwendet werden, um alle Eigenschaften eines Knotens zu erhalten, indem HasProperty in referenceType übergeben wird. Die Ergebnisse können gefiltert werden, so dass sie nur Knoten mit bestimmten Knotenklassen enthalten, indem diese in nodeClassMask angegeben werden.
[signal]
void QOpcUaNode::browseFinished(QList<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem eine browseChildren() oder browse() Operation beendet wurde.
children enthält Informationen über alle Knoten, die den Kriterien in browseChildren() entsprechen. statusCode enthält das Ergebnis des Suchvorgangs. Wenn statusCode nicht Good ist, ist der übergebene children Vektor 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 in dem Signal methodCallFinished zurückgegeben.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt 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 ausgegeben, nachdem eine Datenänderungsmeldung 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 für die in attr angegebenen Attribute.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Nach Beendigung des Aufrufs wird das Signal disableMonitoringFinished ausgegeben und monitoringStatus gibt einen konstruierten Standardwert mit dem Statuscode BadMonitoredItemIdIinvalid für attr zurück.
[signal]
void QOpcUaNode::disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem ein asynchroner Aufruf von disableMonitoring() beendet wurde. statusCode enthält den von der Operation erzeugten Statuscode. Nachdem dieses Signal ausgegeben wurde, gibt monitoringStatus einen konstruierten Standardwert 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 in attr angegebenen Attribute ein überwachtes Element. Die Einstellungen aus settings werden bei der Erstellung der überwachten Elemente und des Abonnements verwendet.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich versendet wurde.
Bei Beendigung des Aufrufs wird das Signal enableMonitoringFinished ausgegeben. Es gibt mehrere Fehlerfälle, in denen ein schlechter Statuscode erzeugt wird: Ein Abonnement mit der in settings angegebenen Abonnement-ID existiert nicht, der Knoten existiert nicht auf dem Server, der Knoten hat nicht das angeforderte Attribut oder die maximale Anzahl der überwachten Elemente 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. Wenn ein Ereignis auf dem Server ausgelöst wird, sammelt ein ereignisüberwachtes Item ausgewählte Werte von Knotenattributen des Ereignisobjekts und seiner Kindknoten. Jeder Knoten, der eine Ereignisquelle hat, kann auf Ereignisse überwacht werden. Um einen Knoten auf Ereignisse zu überwachen, muss das Attribut EventNotifier mit Hilfe einer EventFilter überwacht werden, die die vom Benutzer benötigten Ereignisfelder und optional eine Where-Klausel enthält, mit der Ereignisse nach Kriterien gefiltert werden können (weitere Einzelheiten finden Sie unter QOpcUaMonitoringParameters::EventFilter).
[signal]
void QOpcUaNode::enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem ein asynchroner Aufruf von enableMonitoring() beendet wurde. Nachdem dieses Signal ausgegeben wurde, gibt monitoringStatus() gültige Informationen für attr zurück. 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 enthält die Werte der Ereignisfelder in der Reihenfolge, die in der select
Klausel des Ereignisfilters angegeben ist.
[static constexpr]
QOpcUa::NodeAttributes QOpcUaNode::mandatoryBaseAttributes()
Enthält alle obligatorischen Attribute der OPC UA Basisknotenklasse.
[signal]
void QOpcUaNode::methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem ein Methodenaufruf für methodNodeId auf dem Server beendet 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 ist nicht Good. Die Variante result ist entweder ein einzelner Wert, wenn es nur ein Ausgangsargument gibt, oder sie enthält eine Liste von Varianten, falls die aufgerufene Funktion mehrere Ausgangsargumente zurückgegeben hat.
if (result.canConvert<QVariantList>()) { // handle list type } else { // handle value type }
bool QOpcUaNode::modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter)
Ändert eine bestehende Datenänderungsüberwachung, um filter als Datenänderungsfilter zu verwenden.
Gibt true
zurück, wenn die Anfrage zur Filteränderung erfolgreich an das Backend gesendet wurde.
monitoringStatusChanged für attr wird nach Abschluss des Vorgangs ausgegeben.
bool QOpcUaNode::modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter)
Ändert eine bestehende Ereignisüberwachung, um eventFilter als Ereignisfilter zu verwenden.
Gibt true
zurück, wenn die Anfrage zur Filteränderung erfolgreich an das Backend gesendet wurde.
monitoringStatusChanged für EventNotifier wird ausgegeben, nachdem der Vorgang abgeschlossen ist.
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 Elements oder des Abonnements, das mit attr verbunden ist, auf value zu setzen.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Nachdem der Aufruf beendet ist, wird das Signal monitoringStatusChanged ausgegeben. Dieses Signal enthält die geänderten Parameter und den Statuscode. Ein schlechter Statuscode wird erzeugt, wenn es kein überwachtes Element gibt, das mit dem angeforderten Attribut verknüpft ist, wenn 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 mit dem Attribut attr verbunden sind. Dies kann verwendet werden, um den Erfolg von enableMonitoring() zu überprüfen oder um festzustellen, ob die Parameter geändert wurden. Die zurückgegebenen Werte sind nur gültig, nachdem enableMonitoringFinished oder monitoringStatusChanged für attr gesendet wurden. Wenn der Status abgefragt wird, bevor ein Signal gesendet wurde, gibt QOpcUaMonitoringParameters::statusCode() BadNoEntryExists zurück.
[signal]
void QOpcUaNode::monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem ein asynchroner Aufruf von modifyMonitoring() beendet wurde. Das Knotenattribut, für das die Operation angefordert wurde, wird in attr zurückgegeben. items enthält die Parameter, die geändert wurden. 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 Zeichenkette, die zur Auswahl eines Teils eines Arrays verwendet werden kann. Sie ist in OPC UA 1.05 Teil 4, 7.27 definiert. Das erste Element in einem Array 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 abgewickelt wurde.
Die Attributwerte enthalten nur gültige Informationen, nachdem das Signal attributeRead gesendet 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 abgewickelt wurde.
Die Attributwerte enthalten erst dann gültige Informationen, wenn das Signal attributeRead ausgegeben worden ist.
[since 6.7]
QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryEvents(const QDateTime &startTime, const QDateTime &endTime, QOpcUaMonitoringParameters::EventFilter &filter, quint32 numValues = 0)
Startet eine Anfrage zum Lesen des Ereignisverlaufs für diesen Knoten unter Verwendung der Parameter startTime, endTime, filter und numValues. Mit filter bestimmt der Server, welche Ereignisse und welche Felder zurückgegeben werden sollen.
Gibt ein QOpcUaHistoryReadResponse zurück, das den Status der Anfrage enthält, wenn die asynchrone Anfrage erfolgreich versendet wurde. Die Ergebnisse werden in dem Signal QOpcUaHistoryReadResponse::readHistoryEventsFinished(const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) zurückgegeben.
Das folgende Beispiel ruft historische Ereignisse für die letzten zwei Tage ab. Es werden bis zu 10 Ereignisse auf einmal zurückgegeben. Solange es mehr Ereignisse gibt, die dem Filter und der angegebenen Zeitspanne entsprechen, ist hasMoreData()
wahr und weitere Ereignisse können über readMoreData() 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(Antwort, &QOpcUaHistoryReadResponse::readHistoryEventsFinished, this, [response](const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) { if (serviceResult != QOpcUa::UaStatusCode::Good) { qDebug() << "Service call failed with" << serviceResult; return; } // Druckt aus, was wir bis jetzt erhalten haben 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 Read-History-Anfrage für diesen Knoten. Dies ist die Qt OPC UA Repräsentation für den OPC UA ReadHistory Dienst zum Lesen von historischen Rohdaten, definiert in OPC UA 1.05 Teil 4, 5.10.3. Er liest die Historie basierend auf den Parementern, startTime, endTime, numValues und returnBounds.
Gibt eine QOpcUaHistoryReadResponse zurück, die den Status der Anfrage enthält, wenn die asynchrone Anfrage erfolgreich versendet wurde. Die Ergebnisse werden in dem Signal QOpcUaHistoryReadResponse::readHistoryDataFinished(const QList<QOpcUaHistoryData> &results, QOpcUa::UaStatusCode serviceResult) zurückgegeben.
Im folgenden Beispiel werden die historischen Daten der letzten zwei Tage eines Knotens abgefragt und ausgegeben. Das Ergebnis ist auf zehn Werte pro Knoten begrenzt.
QOpcUaHistoryReadResponse *Antwort = node->readHistoryRaw(QDateTime::currentDateTime(), QDateTime::currentDateTime().addDays(-2), 10, true);if (response) { QObject::connect(antwort123, &QOpcUaHistoryReadResponse::readHistoryDataFinished, [] (QList<QOpcUaHistoryData> results, 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 Anfrage zum Lesen der Historie für diesen Knoten. Der zusätzliche Parameter timestampsToReturn bestimmt, 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 Attribut "Wert" des Knotens.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Siehe auch readAttributes().
bool QOpcUaNode::resolveBrowsePath(const QList<QOpcUaRelativePathElement> &path)
Löst den Suchpfad path in eine oder mehrere Knoten-IDs auf, die von diesem Knoten ausgehen, indem der in OPC UA 1.05 Teil 4, 5.8.4 spezifizierte Dienst TranslateBrowsePathsToNodeIds verwendet wird.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
TranslateBrowsePathsToNodeIds wird hauptsächlich verwendet, um gegen Typdefinitionen zu programmieren, anstatt gegen eine konkrete Menge von Knoten im OPC UA Adressraum. Zum Beispiel 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" hat. Der Lüfter hat eine Komponente mit dem Browse-Namen "RPM", die ein Variablenknoten ist, 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 ein Objekt des Maschinentyps abgebildet. Für jedes dieser Maschinenobjekte ist der Pfad vom Maschinenknoten zum "RPM"-Knoten derselbe. Wenn ein Client den aktuellen RPM-Wert lesen möchte, muss er resolveBrowsePath() mit dem Maschinenknoten als Startknoten und dem Browse-Pfad von der Maschine zum "RPM"-Knoten 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 in resolveBrowsePathFinished() zurückgegebene Ergebnis enthält die Knoten-ID des "RPM"-Knotens, die für den Zugriff auf die Attribute des Knotens verwendet 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 ausgegeben, nachdem ein resolveBrowsePath()-Aufruf beendet wurde.
QOpcUaBrowsePathTarget targets enthält die Treffer, statusCode ist der Statuscode des Vorgangs. Wenn statusCode nicht Good ist, ist targets leer. Der Suchpfad path ist der Suchpfad aus der Anfrage. Er kann verwendet werden, um Ergebnisse mit Anfragen zu verknüpfen.
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 attributeRead - oder dataChangeOccurred -Signal ausgegeben wurde, wird eine Null-Datetime 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 attributeRead - oder dataChangeOccurred -Signal gesendet wurde, wird ein Nullzeitpunkt zurückgegeben.
QVariant QOpcUaNode::valueAttribute() const
Gibt den Wert des Attributs "Wert" des Knotens zurück.
Der zurückgegebene Wert ist nur gültig, nachdem das Attribut Wert erfolgreich gelesen oder geschrieben wurde oder nachdem eine Datenänderung aus einer Überwachung den Attribut-Cache aktualisiert hat. Dies wird durch ein attributeRead() oder attributeWritten() Signal mit Statuscode Good oder ein dataChangeOccurred() Signal für das Attribut Value angezeigt.
Befindet sich kein Wert im Attribut-Cache, wird ein ungültiger QVariant zurückgegeben.
Siehe auch readValueAttribute(), writeValueAttribute(), und valueAttributeError().
QOpcUa::UaStatusCode QOpcUaNode::valueAttributeError() const
Gibt den Fehlercode für das Attribut "Wert" des Knotens zurück. Der Statuscode Good zeigt einen gültigen Rückgabewert für valueAttribute() an. Wenn kein Eintrag im Attribut-Cache vorhanden ist, wird BadNoEntryExists zurückgegeben.
[signal, since 6.7]
void QOpcUaNode::valueAttributeUpdated(const QVariant &value)
Dieses Signal wird ausgegeben, nachdem das Wertattribut im Attribut-Cache durch eine Datenänderungsmeldung vom Server, eine Lese- oder Schreiboperation aktualisiert wurde. value enthält den neuen Wert für das Wertattribut.
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 in attribute angegebene Attribut unter Verwendung der Typinformationen von type. Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Wenn der Parameter type weggelassen wird, versucht das Backend den richtigen Typ zu finden. Die folgenden Standardtypen werden angenommen:
Qt MetaType | OPC UA Typ |
---|---|
Bool | Boolean |
UChar | Byte |
Char | SByte |
UShort | UInt16 |
Kurz | Int16 |
Int | Int32 |
UInt | UInt32 |
ULongLong | UInt64 |
LongLong | Int64 |
Doppelt | Doppelt |
Fließkomma | Fließkomma |
QString | Zeichenkette |
QDateTime | DatumZeit |
QByteArray | ByteString |
QUuid | Guid |
bool QOpcUaNode::writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant &value, const QString &indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined)
Schreibt value in das in attribute angegebene Attribut unter Verwendung der Typinformationen von type. Für indexRange, siehe readAttributeRange().
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt 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 aus.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Der Parameter valueAttributeType kann verwendet werden, um Typinformationen für das Attribut value zu liefern. Alle anderen Attribute haben bekannte Typen.
Siehe auch writeAttribute().
bool QOpcUaNode::writeValueAttribute(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)
Schreibt value in das Attribut Value des Knotens unter Verwendung der Typinformationen von type.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Siehe auch writeAttribute().
© 2025 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.