QOpcUaClient Class
QOpcUaClient ermöglicht die Interaktion mit einem OPC UA Server. Mehr...
Kopfzeile: | #include <QOpcUaClient> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpcUa) target_link_libraries(mytarget PRIVATE Qt6::OpcUa) |
qmake: | QT += opcua |
Vererbungen: | QObject |
Öffentliche Typen
enum | ClientError { NoError, InvalidUrl, AccessDenied, ConnectionError, UnknownError, UnsupportedAuthenticationInformation } |
enum | ClientState { Disconnected, Connecting, Connected, Closing } |
Eigenschaften
Öffentliche Funktionen
virtual | ~QOpcUaClient() |
bool | addNode(const QOpcUaAddNodeItem &nodeToAdd) |
bool | addReference(const QOpcUaAddReferenceItem &referenceToAdd) |
(since QtOpcUa 5.13) QOpcUaApplicationIdentity | applicationIdentity() const |
const QOpcUaAuthenticationInformation & | authenticationInformation() const |
QString | backend() const |
(since QtOpcUa 5.13) void | connectToEndpoint(const QOpcUaEndpointDescription &endpoint) |
(since 6.6) QOpcUaConnectionSettings | connectionSettings() const |
bool | deleteNode(const QString &nodeId, bool deleteTargetReferences = true) |
bool | deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete) |
void | disconnectFromEndpoint() |
QOpcUaEndpointDescription | endpoint() const |
QOpcUaClient::ClientError | error() const |
bool | findServers(const QUrl &url, const QStringList &localeIds = QStringList(), const QStringList &serverUris = QStringList()) |
bool | isNamespaceAutoupdateEnabled() const |
QStringList | namespaceArray() const |
int | namespaceAutoupdateInterval() const |
QOpcUaNode * | node(const QOpcUaExpandedNodeId &expandedNodeId) |
QOpcUaNode * | node(const QString &nodeId) |
(since QtOpcUa 5.13) QOpcUaPkiConfiguration | pkiConfiguration() const |
QOpcUaQualifiedName | qualifiedNameFromNamespaceUri(const QString &namespaceUri, const QString &name, bool *ok = nullptr) const |
(since 6.3) QOpcUaHistoryReadResponse * | readHistoryData(const QOpcUaHistoryReadRawRequest &request) |
(since 6.7) QOpcUaHistoryReadResponse * | readHistoryEvents(const QOpcUaHistoryReadEventRequest &request) |
bool | readNodeAttributes(const QList<QOpcUaReadItem> &nodesToRead) |
(since 6.7) bool | registerNodes(const QStringList &nodesToRegister) |
bool | requestEndpoints(const QUrl &url) |
QString | resolveExpandedNodeId(const QOpcUaExpandedNodeId &expandedNodeId, bool *ok = nullptr) const |
(since QtOpcUa 5.13) void | setApplicationIdentity(const QOpcUaApplicationIdentity &identity) |
void | setAuthenticationInformation(const QOpcUaAuthenticationInformation &authenticationInformation) |
(since 6.6) void | setConnectionSettings(const QOpcUaConnectionSettings &connectionSettings) |
void | setNamespaceAutoupdate(bool isEnabled) |
void | setNamespaceAutoupdateInterval(int interval) |
(since QtOpcUa 5.13) void | setPkiConfiguration(const QOpcUaPkiConfiguration &config) |
QOpcUaClient::ClientState | state() const |
(since QtOpcUa 5.14) QStringList | supportedSecurityPolicies() const |
(since QtOpcUa 5.14) QList<QOpcUaUserTokenPolicy::TokenType> | supportedUserTokenTypes() const |
(since 6.7) bool | unregisterNodes(const QStringList &nodesToUnregister) |
bool | updateNamespaceArray() |
bool | writeNodeAttributes(const QList<QOpcUaWriteItem> &nodesToWrite) |
Signale
void | addNodeFinished(QOpcUaExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode) |
void | addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode) |
(since QtOpcUa 5.13) void | connectError(QOpcUaErrorState *errorState) |
void | connected() |
void | deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode) |
void | deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode) |
void | disconnected() |
void | endpointsRequestFinished(QList<QOpcUaEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode, QUrl requestUrl) |
void | errorChanged(QOpcUaClient::ClientError error) |
void | findServersFinished(QList<QOpcUaApplicationDescription> servers, QOpcUa::UaStatusCode statusCode, QUrl requestUrl) |
void | namespaceArrayChanged(QStringList namespaces) |
void | namespaceArrayUpdated(QStringList namespaces) |
(since QtOpcUa 5.13) void | passwordForPrivateKeyRequired(QString keyFilePath, QString *password, bool previousTryWasInvalid) |
void | readNodeAttributesFinished(QList<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult) |
(since 6.7) void | registerNodesFinished(const QStringList &nodesToRegister, const QStringList ®isteredNodeIds, QOpcUa::UaStatusCode statusCode) |
void | stateChanged(QOpcUaClient::ClientState state) |
(since 6.7) void | unregisterNodesFinished(const QStringList &nodesToUnregister, QOpcUa::UaStatusCode statusCode) |
void | writeNodeAttributesFinished(QList<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult) |
Detaillierte Beschreibung
QOpcUaClient
QOpcUaClient implementiert grundlegende Client-Funktionen für die Kommunikation mit OPC UA-fähigen Geräten und Anwendungen. Dazu gehören die Abfrage eines Discovery-Servers nach bekannten Servern, die Abfrage einer Liste von Endpunkten von einem Server, das Herstellen und Trennen von Verbindungen.
Nach erfolgreicher Verbindung zu einem Server ermöglicht QOpcUaClient den Erhalt von QOpcUaNode Objekten, die eine weitere Interaktion mit Knoten auf dem OPC UA Server ermöglichen. Für Operationen, die mehrere Knoten betreffen, bietet QOpcUaClient eine API, die das Lesen mehrerer Attribute von mehreren Knoten in einer einzigen Anfrage an den Server unterstützt.
QOpcUaClient speichert auch eine lokale Kopie des Namespace-Arrays des Servers, das nach einer erfolgreichen Verbindung erstellt wird. Diese Information kann abgefragt oder aktualisiert werden, während die Verbindung andauert. Die Kopie des Namespace-Arrays wird auch für die Auflösung von erweiterten Node-Ids und die Erstellung von qualifizierten Namen aus einem Namespace-URI verwendet.
Adressierung von Knoten
Für eine Einführung in Knoten und Knoten-IDs siehe QOpcUaNode.
Verwendung
Erstellen Sie ein QOpcUaClient mit QOpcUaProvider, fordern Sie eine Liste von Endpunkten vom Server mit requestEndpoints an und rufen Sie connectToEndpoint() auf, um eine Verbindung zu einem der verfügbaren Endpunkte herzustellen. Nachdem die Verbindung hergestellt ist, wird ein QOpcUaNode Objekt für den Wurzelknoten angefordert.
QOpcUaProvider provider;if (provider.availableBackends().isEmpty()) return;QOpcUaClient *client = provider.createClient(provider.availableBackends()[0]);if (!client) return;// Verbindung mit dem stateChanged-Signal. Kompatible Slots von QObjects können anstelle eines Lambdas verwendet werden.QObject::connect(client, &QOpcUaClient::stateChanged, [client](QOpcUaClient::ClientState state) { qDebug() << "Client state changed:" << state; if (state == QOpcUaClient::ClientState::Connected) { QOpcUaNode *Knoten = client->Knoten("ns=0;i=84"); if (Knoten) qDebug() << "A node object has been created"; } });QObject::connect(client, &QOpcUaClient::endpointsRequestFinished,[ client](QList<QOpcUaEndpointDescription> endpoints) { qDebug() << "Endpoints returned:" << endpoints.count(); if (endpoints.size()) client->connectToEndpoint(endpoints.first()); // Verbindung mit dem ersten Endpunkt in der Liste herstellen}); client->requestEndpoints(QUrl("opc.tcp://127.0.0.1:4840")); // Anfordern einer Liste von Endpunkten vom Server
Dokumentation der Mitgliedstypen
enum QOpcUaClient::ClientError
Dieser Enum-Typ gibt den aktuellen Fehlerzustand des Clients an.
Konstante | Wert | Beschreibung |
---|---|---|
QOpcUaClient::NoError | 0 | Kein Fehler aufgetreten. |
QOpcUaClient::InvalidUrl | 1 | Die zu verbindende URL wurde falsch angegeben oder eine Verbindung zu dieser URL ist fehlgeschlagen. |
QOpcUaClient::AccessDenied | 2 | Der Versuch, eine Verbindung zu einem Server mit Benutzername/Passwort herzustellen, ist aufgrund falscher Anmeldeinformationen fehlgeschlagen. |
QOpcUaClient::ConnectionError | 3 | Bei der Verbindung ist ein Fehler aufgetreten. |
QOpcUaClient::UnknownError | 4 | Ein unbekannter Fehler ist aufgetreten. |
QOpcUaClient::UnsupportedAuthenticationInformation | 5 | Der angegebene Typ oder die Daten der Authentifizierungsinformationen werden nicht unterstützt. |
enum QOpcUaClient::ClientState
Dieser Enum-Typ gibt den Verbindungsstatus des Clients an.
Konstante | Wert | Beschreibung |
---|---|---|
QOpcUaClient::Disconnected | 0 | Der Client ist nicht mit einem Server verbunden. |
QOpcUaClient::Connecting | 1 | Der Client ist gerade mit einem Server verbunden. |
QOpcUaClient::Connected | 2 | Der Client ist mit einem Server verbunden. |
QOpcUaClient::Closing | 3 | Der Client ist mit einem Server verbunden und fordert eine Trennung der Verbindung zum Server an. |
Eigenschaft Dokumentation
[read-only]
error : const ClientError
Gibt den aktuellen Fehlerzustand des Clients an.
Zugriffsfunktionen:
QOpcUaClient::ClientError | error() const |
Benachrichtigungssignal:
void | errorChanged(QOpcUaClient::ClientError error) |
[read-only]
state : const ClientState
Gibt den aktuellen Verbindungsstatus des Clients an.
Zugriffsfunktionen:
QOpcUaClient::ClientState | state() const |
Benachrichtigungssignal:
void | stateChanged(QOpcUaClient::ClientState state) |
Member Function Dokumentation
[virtual noexcept]
QOpcUaClient::~QOpcUaClient()
Zerstört die Instanz QOpcUaClient.
bool QOpcUaClient::addNode(const QOpcUaAddNodeItem &nodeToAdd)
Fügt den durch nodeToAdd beschriebenen Knoten auf dem Server hinzu.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgeschickt wurde.
Der Erfolg des Vorgangs wird mit dem Signal addNodeFinished() zurückgegeben.
Der folgende Beispielcode fügt einen neuen Variablenknoten auf dem Server hinzu:
QOpcUaNodeCreationAttributes attributes; attributes.setDisplayName(QOpcUaLocalizedText("en", "My new Variable node")); attributes.setDescription(QOpcUaLocalizedText("en", "A node which has been added at runtime")); attributes.setValue(23.0, QOpcUa::Types::Double); attributes.setDataTypeId(QOpcUa::ns0ID(QOpcUa::NodeIds::Namespace0::Double)); attributes.setValueRank(-2); // Scalar or array attributes.setAccessLevel(QOpcUa::AccessLevelBit::CurrentRead); attributes.setUserAccessLevel(QOpcUa::AccessLevelBit::CurrentRead); QOpcUaAddNodeItem item; item.setParentNodeId(QOpcUaExpandedNodeId("ns=3;s=TestFolder")); item.setReferenceTypeId(QOpcUa::nodeIdFromReferenceType(QOpcUa::ReferenceTypeId::Organizes)); item.setRequestedNewNodeId(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode")); item.setBrowseName(QOpcUaQualifiedName(3, "MyNewVariableNode")); item.setNodeClass(QOpcUa::NodeClass::Variable); item.setNodeAttributes(attributes); m_client->addNode(item);
Siehe auch deleteNode(), addNodeFinished(), und QOpcUaAddNodeItem.
[signal]
void QOpcUaClient::addNodeFinished(QOpcUaExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem eine addNode()-Operation beendet wurde. requestedNodeId ist die angeforderte Knoten-ID aus dem addNode()-Aufruf, assignedNodeId ist die Knoten-ID, die der Server dem neuen Knoten zugewiesen hat. statusCode enthält das Ergebnis der Operation. Wenn das Ergebnis Bad ist, ist assignedNodeId leer und es wurde kein Knoten zum Adressraum des Servers hinzugefügt.
bool QOpcUaClient::addReference(const QOpcUaAddReferenceItem &referenceToAdd)
Fügt dem Server die durch referenceToAdd beschriebene Referenz hinzu.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Der Erfolg des Vorgangs wird mit dem Signal addReferenceFinished() zurückgegeben.
Der folgende Beispielcode fügt einen Verweis auf einen Knoten in den Ordner "Objects" ein:
QOpcUaAddReferenceItem item; item.setSourceNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder)); item.setReferenceTypeId(QOpcUa::nodeIdFromInteger(0, static_cast<quint32>(QOpcUa::ReferenceTypeId::Organizes))); item.setIsForwardReference(true); item.setTargetNodeId(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode")); item.setTargetNodeClass(QOpcUa::NodeClass::Variable); m_client->addReference(item);
Siehe auch deleteReference(), addReferenceFinished(), und QOpcUaAddReferenceItem.
[signal]
void QOpcUaClient::addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem eine addReference()-Operation beendet wurde. sourceNodeId referenceTypeId , targetNodeId und isForwardReference sind die Werte aus dem Aufruf addReference(). statusCode enthält das Ergebnis der Operation.
[since QtOpcUa 5.13]
QOpcUaApplicationIdentity QOpcUaClient::applicationIdentity() const
Gibt die Anwendungsidentität dieser QOpcUaClient Instanz zurück.
Diese Funktion wurde in QtOpcUa 5.13 eingeführt.
Siehe auch setApplicationIdentity().
const QOpcUaAuthenticationInformation &QOpcUaClient::authenticationInformation() const
Gibt die aktuellen Authentifizierungsinformationen zurück.
Siehe auch setAuthenticationInformation().
QString QOpcUaClient::backend() const
Gibt den Namen des von dieser Instanz von QOpcUaClient verwendeten Backends zurück, z. B. "open62541".
[signal, since QtOpcUa 5.13]
void QOpcUaClient::connectError(QOpcUaErrorState *errorState)
Dieses Signal wird ausgegeben, wenn beim Verbindungsaufbau ein Fehler aufgetreten ist. Der Parameter errorState enthält Informationen über den Fehler.
Im Falle von clientseitigen Fehlern können diese durch den Aufruf von QOpcUaErrorState::setIgnoreError auf dem Objekt ignoriert werden.
Während der Ausführung eines Slots, der mit diesem Signal verbunden ist, wird das Backend angehalten und wartet auf die Rückkehr aller Slots. Dies ermöglicht es, einen Benutzerdialog zu öffnen, um den Endbenutzer zu fragen, ob er einem unbekannten Zertifikat vertrauen soll, bevor das Backend fortfährt.
Diese Funktion wurde in QtOpcUa 5.13 eingeführt.
[invokable, since QtOpcUa 5.13]
void QOpcUaClient::connectToEndpoint(const QOpcUaEndpointDescription &endpoint)
Stellt eine Verbindung zu dem in endpoint angegebenen OPC-UA-Endpunkt her.
QEndpointDescription endpointDescription; ... client->connectToEndpoint(endpointDescription);
Eine Liste der verfügbaren Endpunkte erhält man normalerweise durch den Aufruf von QOpcUaClient::requestEndpoints().
Wenn der Endpunkt eine Authentifizierung über den Benutzernamen erfordert, muss zumindest ein Benutzername in QOpcUaAuthenticationInformation angegeben werden. Wenn Sie diese Funktion aufrufen, bevor Sie eine Authentifizierungsinformation setzen, wird die anonyme Authentifizierung verwendet.
QOpcUaAuthenticationInformation authInfo; authInfo.setUsernameAuthentication("user", "password"); client->setAuthenticationInformation(authInfo);
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Diese Funktion wurde in QtOpcUa 5.13 eingeführt.
Siehe auch connected(), stateChanged(), setAuthenticationInformation(), und QOpcUaEndpointDescription.
[signal]
void QOpcUaClient::connected()
Dieses Signal wird ausgegeben, wenn eine Verbindung zustande gekommen ist.
[since 6.6]
QOpcUaConnectionSettings QOpcUaClient::connectionSettings() const
Gibt die Verbindungseinstellungen für diesen Client zurück.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch setConnectionSettings().
bool QOpcUaClient::deleteNode(const QString &nodeId, bool deleteTargetReferences = true)
Löscht den Knoten mit der Knoten-ID nodeId vom Server. Wenn deleteTargetReferences false
ist, werden nur die Verweise mit dem Quellknoten nodeId gelöscht. Wenn deleteTargetReferences true
ist, werden auch die Verweise mit nodeId als Ziel gelöscht.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Der Erfolg der Operation wird mit dem Signal deleteNodeFinished() zurückgegeben.
Der folgende Beispielcode löscht einen Knoten und alle Verweise auf ihn vom Server:
m_client->deleteNode(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode"), true);
Siehe auch addNode() und deleteNodeFinished().
[signal]
void QOpcUaClient::deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem eine deleteNode()-Operation beendet wurde. nodeId ist die Knoten-ID aus dem deleteNode()-Aufruf. statusCode enthält das Ergebnis der Operation.
bool QOpcUaClient::deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete)
Löscht den durch referenceToDelete beschriebenen Verweis vom Server.
Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Der Erfolg des Vorgangs wird mit dem Signal deleteReferenceFinished() zurückgegeben.
Der folgende Beispielcode löscht einen Verweis auf einen Knoten aus dem Ordner "Objects":
QOpcUaDeleteReferenceItem item; item.setSourceNodeId(QOpcUa::namespace0Id(QOpcUa::NodeIds::Namespace0::ObjectsFolder)); item.setReferenceTypeId(QOpcUa::nodeIdFromInteger(0, static_cast<quint32>(QOpcUa::ReferenceTypeId::Organizes))); item.setIsForwardReference(true); item.setTargetNodeId(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode")); item.setDeleteBidirectional(true); m_client->deleteReference(item);
Siehe auch addReference(), deleteReferenceFinished(), und QOpcUaDeleteReferenceItem.
[signal]
void QOpcUaClient::deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem eine deleteReference()-Operation beendet wurde. sourceNodeId referenceTypeId , targetNodeId und isForwardReference sind die Werte aus dem Aufruf deleteReference(). statusCode enthält das Ergebnis der Operation.
[invokable]
void QOpcUaClient::disconnectFromEndpoint()
Trennt die Verbindung mit dem Server.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch disconnected() und connectToEndpoint().
[signal]
void QOpcUaClient::disconnected()
Dieses Signal wird ausgegeben, wenn eine Verbindung nach einer Schließanfrage geschlossen wurde.
QOpcUaEndpointDescription QOpcUaClient::endpoint() const
Gibt die Beschreibung des Endpunkts zurück, mit dem der Client gerade verbunden ist oder zuletzt verbunden war.
[signal]
void QOpcUaClient::endpointsRequestFinished(QList<QOpcUaEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode, QUrl requestUrl)
Dieses Signal wird ausgegeben, nachdem eine requestEndpoints()-Operation beendet wurde. statusCode enthält das Ergebnis der Operation. Wenn das Ergebnis Good ist, enthält endpoints die Beschreibungen aller Endpunkte, die auf dem Server verfügbar sind. requestUrl enthält die URL, die im Aufruf requestEndpoints() verwendet wurde.
QOpcUaClient::ClientError QOpcUaClient::error() const
Gibt den aktuellen Fehlerstatus des Clients zurück.
Hinweis: Getter-Funktion für die Eigenschaft error.
bool QOpcUaClient::findServers(const QUrl &url, const QStringList &localeIds = QStringList(), const QStringList &serverUris = QStringList())
Startet eine asynchrone FindServers-Anfrage, um eine Liste bekannter Server von einem Server oder Discovery-Server unter url zu lesen. Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
localeIds kann verwendet werden, um die Sprache der von der Anfrage zurückgegebenen Anwendungsnamen auszuwählen. Das Format ist in OPC UA 1.05 Teil 3, 8.4 spezifiziert, z.B. "en" für Englisch oder "de-DE" für Deutsch (Deutschland). Wenn mehr als eine Gebietsschema-ID angegeben wird, verwendet der Server die erste Übereinstimmung. Wenn es keine Übereinstimmung gibt oder localeIds leer ist, wählt der Server ein Standardgebietsschema.
serverUris kann verwendet werden, um die Ergebnisse auf Server mit einer passenden applicationUri in ihrer Anwendungsbeschreibung zu beschränken. Um zum Beispiel die aktuelle URL des Servers mit der applicationUri "MyPLC" zu finden, kann der folgende Aufruf verwendet werden:
client->findServers(discoveryServerUrl, QStringList(), QStringList({"MyPLC"}));
Die Ergebnisse werden mit dem Signal findServersFinished() zurückgegeben.
[signal]
void QOpcUaClient::findServersFinished(QList<QOpcUaApplicationDescription> servers, QOpcUa::UaStatusCode statusCode, QUrl requestUrl)
Dieses Signal wird ausgegeben, nachdem eine findServers()-Operation beendet wurde. statusCode enthält das Ergebnis der Operation. Wenn das Ergebnis Good ist, enthält servers die Anwendungsbeschreibungen aller dem abgefragten Server bekannten Server, die den Filterkriterien entsprechen. requestUrl enthält die URL, die im Aufruf findServers() verwendet wurde.
bool QOpcUaClient::isNamespaceAutoupdateEnabled() const
Gibt zurück, ob die automatische Aktualisierung des Namespace-Arrays aktiviert ist.
QStringList QOpcUaClient::namespaceArray() const
Gibt den zwischengespeicherten Wert des Namespace-Arrays zurück.
Der Wert ist nur gültig, nachdem das Signal namespaceArrayUpdated() ausgegeben wurde.
Siehe auch updateNamespaceArray() und namespaceArrayUpdated().
[signal]
void QOpcUaClient::namespaceArrayChanged(QStringList namespaces)
Dieses Signal wird ausgegeben, nachdem sich das Namespace-Array geändert hat. namespaces enthält den Inhalt der Namespace-Tabelle des Servers. Der Index eines Eintrags in namespaces entspricht dem in der Node-ID verwendeten Namespace-Index.
Siehe auch namespaceArrayUpdated() und updateNamespaceArray().
[signal]
void QOpcUaClient::namespaceArrayUpdated(QStringList namespaces)
Dieses Signal wird ausgegeben, nachdem eine updateNamespaceArray Operation beendet wurde. namespaces enthält den Inhalt der Namensraumtabelle des Servers. Der Index eines Eintrags in namespaces entspricht dem in der Node-ID verwendeten Namespace-Index.
Wenn der Inhalt des Namespace-Arrays nach der Aktualisierung gleich bleibt, wird dieses Signal trotzdem ausgegeben.
Siehe auch namespaceArrayChanged() und updateNamespaceArray().
int QOpcUaClient::namespaceAutoupdateInterval() const
Gibt das aktuelle überarbeitete Aktualisierungsintervall des Namespace-Arrays zurück.
Siehe auch setNamespaceAutoupdateInterval(int interval).
QOpcUaNode *QOpcUaClient::node(const QOpcUaExpandedNodeId &expandedNodeId)
Gibt ein QOpcUaNode Objekt zurück, das mit dem durch expandedNodeId identifizierten OPC UA Knoten verbunden ist. Der Aufrufer wird Eigentümer des Knotenobjekts.
Wenn sich der Knoten nicht auf dem aktuell verbundenen Server befindet, der Namespace nicht aufgelöst werden kann, die Knoten-ID fehlerhaft ist oder der Client nicht verbunden ist, wird nullptr
zurückgegeben.
Siehe auch updateNamespaceArray().
QOpcUaNode *QOpcUaClient::node(const QString &nodeId)
Gibt ein QOpcUaNode Objekt zurück, das mit dem durch nodeId identifizierten OPC UA Knoten verbunden ist. Der Aufrufer wird Eigentümer des Knotenobjekts.
Wenn der Client nicht verbunden ist, wird nullptr
zurückgegeben. Die Backends können auch nullptr
für andere Fehlerfälle zurückgeben (z. B. für eine fehlerhafte Knoten-ID).
[signal, since QtOpcUa 5.13]
void QOpcUaClient::passwordForPrivateKeyRequired(QString keyFilePath, QString *password, bool previousTryWasInvalid)
Dieses Signal wird ausgegeben, wenn ein Passwort für einen verschlüsselten privaten Schlüssel benötigt wird. Der Parameter keyFilePath enthält den Dateipfad zum Schlüssel, der verwendet wird. Der Parameter previousTryWasInvalid ist wahr, wenn ein vorheriger Versuch, den Schlüssel zu entschlüsseln, fehlgeschlagen ist (auch als ungültiges Passwort bekannt). Der Parameter password verweist auf ein QString, das mit dem aktuellen Passwort für den Schlüssel gefüllt werden muss. Falls der vorherige Versuch fehlgeschlagen ist, enthält er das zuvor verwendete Passwort.
Während der Ausführung eines Slots, der mit diesem Signal verbunden ist, wird das Backend angehalten und wartet auf die Rückkehr aller Slots. Dies ermöglicht es, einen Benutzerdialog zu öffnen, um den Endbenutzer nach dem Passwort zu fragen.
Diese Funktion wurde in QtOpcUa 5.13 eingeführt.
[since QtOpcUa 5.13]
QOpcUaPkiConfiguration QOpcUaClient::pkiConfiguration() const
Gibt die PKI-Konfiguration der Anwendung für diese QOpcUaClient -Instanz zurück.
Diese Funktion wurde in QtOpcUa 5.13 eingeführt.
Siehe auch setPkiConfiguration().
QOpcUaQualifiedName QOpcUaClient::qualifiedNameFromNamespaceUri(const QString &namespaceUri, const QString &name, bool *ok = nullptr) const
Versucht, einen qualifizierten Namen aus namespaceUri und der Namenszeichenfolge name zu erstellen. Gibt den resultierenden qualifizierten Namen zurück. Ein leerer qualifizierter Name wird zurückgegeben, wenn namespaceUri nicht aufgelöst werden kann.
ok wird auf true
gesetzt, wenn die Auflösung der Namespace-URI erfolgreich war. Wenn der Namespace-URI nicht aufgelöst werden konnte, wird ok auf false
gesetzt.
[since 6.3]
QOpcUaHistoryReadResponse *QOpcUaClient::readHistoryData(const QOpcUaHistoryReadRawRequest &request)
Startet einen Read Raw History request für einen oder mehrere Knoten. Dies ist die Qt OPC UA Darstellung für den in OPC UA 1.05 Teil 4, 5.10.3 definierten OPC UA ReadHistory Dienst zum Lesen von historischen Rohdaten.
Der Startzeitstempel, der Endzeitstempel, die Anzahl der Werte pro Knoten, returnBounds und die zu lesenden Knoten können in einem QOpcUaHistoryReadRawRequest angegeben werden.
Gibt ein QOpcUaHistoryReadResponse zurück, das den Status der Anfrage enthält, wenn die asynchrone Anfrage erfolgreich abgeschickt 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 von zwei Knoten abgefragt und ausgegeben. Das Ergebnis ist auf zehn Werte pro Knoten begrenzt.
QOpcUaHistoryReadRawRequest request( { QOpcUaReadItem("ns=1;s=myValue1"), QOpcUaReadItem("ns=1;s=myValue2")}, QDateTime::currentDateTime(), QDateTime::currentDateTime().addDays(-2), 10, true);QOpcUaHistoryReadResponse *response = m_client->readHistoryData(request);if (response) { QObject::connect(Antwort, &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 *QOpcUaClient::readHistoryEvents(const QOpcUaHistoryReadEventRequest &request)
Startet eine Anfrage zum Lesen des Ereignisverlaufs für eine oder mehrere Knoten-IDs mit den Parametern in request.
Gibt eine QOpcUaHistoryReadResponse zurück, die den Status der Anfrage enthält, wenn die asynchrone Anfrage erfolgreich abgeschickt wurde. Die Ergebnisse werden in dem Signal QOpcUaHistoryReadResponse::readHistoryEventsFinished(const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) zurückgegeben.
Das folgende Beispiel ruft die historischen Ereignisse der letzten zwei Tage für zwei Knoten ab. Es werden jeweils bis zu 10 Ereignisse pro Knoten 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.
QOpcUaMonitoringParameters::EventFilter filter; filter<< QOpcUaSimpleAttributeOperand("Message"); filter<< QOpcUaSimpleAttributeOperand("Zeit");const QOpcUaHistoryReadEventRequest request({ QOpcUaReadItem("ns=2;s=EventHistorian"), QOpcUaReadItem("ns=2;s=EventHistorian2")}, QDateTime::currentDateTime().addDays(-2), QDateTime::currentDateTime(),filter, 10);// Das Antwortobjekt muss vom Benutzer freigegeben werden, nachdem alle gewünschten Daten abgerufen wurdenconst auto response = opcuaClient->readHistoryEvents(request);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.
bool QOpcUaClient::readNodeAttributes(const QList<QOpcUaReadItem> &nodesToRead)
Startet einen Lesevorgang für mehrere Attribute auf verschiedenen Knoten. Die Knoten-ID, das Attribut und ein Indexbereich können für jeden Eintrag in nodesToRead angegeben werden.
Gibt true zurück, wenn die asynchrone Anfrage erfolgreich versendet wurde. Die Ergebnisse werden mit dem Signal readNodeAttributesFinished() zurückgegeben.
Diese Lesefunktion bietet eine alternative Möglichkeit zum Lesen von Knotenattributen, die für Szenarien verwendet werden kann, in denen die Werte einer großen Anzahl von Knotenattributen auf verschiedenen Knoten gelesen werden müssen, ohne dass die anderen Funktionen der auf QOpcUaNode basierenden API wie die Überwachung von Wertänderungen erforderlich sind. Alle Leseelemente in der Anfrage werden in einer einzigen Anfrage an den Server gesendet und in einer einzigen Antwort beantwortet, die ein einziges readNodeAttributesFinished()-Signal erzeugt. Dies reduziert den Netzwerk-Overhead und die Anzahl der Signalsteckplatzverbindungen, wenn viele verschiedene Knoten beteiligt sind.
Im folgenden Beispiel werden das Attribut display name und die beiden Indexbereiche "0:2" und "5:7" des Attributs value desselben Knotens sowie das gesamte Attribut value eines zweiten Knotens mit einem einzigen Dienstaufruf gelesen:
QList<QOpcUaReadItem> request; request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode", QOpcUa::NodeAttribute::DisplayName)); request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode", QOpcUa::NodeAttribute::Value, "0:2")); request.push_back(QOpcUaReadItem("ns=1;s=MyArrayNode", QOpcUa::NodeAttribute::Value, "5:7")); request.push_back(QOpcUaReadItem("ns=1;s=MyScalarNode)); m_client->readNodeAttributes(request);
Siehe auch QOpcUaReadItem und readNodeAttributesFinished().
[signal]
void QOpcUaClient::readNodeAttributesFinished(QList<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult)
Dieses Signal wird ausgegeben, nachdem eine readNodeAttributes()-Operation beendet wurde.
Die Elemente in results haben die gleiche Reihenfolge wie die Elemente in der Anfrage. Für jedes angeforderte Element gibt es einen Wert zusammen mit Zeitstempeln und dem Statuscode in results. serviceResult enthält den Statuscode vom OPC UA Read-Dienst.
Siehe auch readNodeAttributes(), QOpcUaReadResult, und QOpcUaReadItem.
[since 6.7]
bool QOpcUaClient::registerNodes(const QStringList &nodesToRegister)
Registriert die Knoten-IDs in nodesToRegister auf dem Server und gibt true
zurück, wenn die Anfrage erfolgreich abgeschickt wurde. Die Ergebnisse werden mit dem Signal registerNodesFinished() zurückgegeben.
Der Knotenregistrierungsdienst wird verwendet, um dem Server mitzuteilen, dass auf einen Knoten häufig zugegriffen wird, damit er Vorgänge wie das Offenhalten der Verbindung zu einer externen Ressource durchführen kann. Der Server kann auch eine Alias-Knoten-ID zurückgeben, die am besten numerisch sein sollte. Dies kann sich als nützlich erweisen, wenn ein Knoten mit einer langen String-Identifier-Node-ID in vielen Anfragen verwendet wird. Der tatsächliche Leistungsgewinn (wenn überhaupt) hängt von der Implementierung des Servers ab.
Die registrierten Knoten-IDs sind garantiert nur für die aktuelle Sitzung gültig. Alle Registrierungen, die nicht mehr benötigt werden, sollten so schnell wie möglich aufgehoben werden, damit der Server die zugehörigen Ressourcen freigeben kann.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch unregisterNodes().
[signal, since 6.7]
void QOpcUaClient::registerNodesFinished(const QStringList &nodesToRegister, const QStringList ®isteredNodeIds, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem eine registerNodes()-Operation beendet wurde. nodesToRegister enthält die Knoten-IDs aus der Anfrage zu Korrelationszwecken. Die vom Server zurückgegebenen Knoten-IDs stehen in registeredNodeIds und haben die gleiche Reihenfolge wie die IDs in der Anfrage. statusCode zeigt an, ob die Operation erfolgreich war.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch registerNodes().
bool QOpcUaClient::requestEndpoints(const QUrl &url)
Startet eine asynchrone GetEndpoints
Anfrage, um eine Liste der verfügbaren Endpunkte vom Server unter url zu lesen. Gibt true
zurück, wenn der asynchrone Aufruf erfolgreich abgewickelt wurde.
Die Endpunktinformationen werden mit dem Signal endpointsRequestFinished() zurückgegeben.
QString QOpcUaClient::resolveExpandedNodeId(const QOpcUaExpandedNodeId &expandedNodeId, bool *ok = nullptr) const
Versucht, expandedNodeId in eine node id-Zeichenkette mit numerischem Namespace-Index aufzulösen. Gibt die node id-Zeichenkette zurück, wenn die Konvertierung erfolgreich war.
Eine leere Zeichenkette wird zurückgegeben, wenn der Namespace-Index nicht aufgelöst werden kann oder wenn der Bezeichner-Teil der erweiterten Knoten-ID fehlerhaft ist. ok wird auf true
gesetzt, wenn die Umwandlung erfolgreich war. Wenn die erweiterte Knoten-ID nicht aufgelöst werden konnte, wird ok auf false
gesetzt.
[since QtOpcUa 5.13]
void QOpcUaClient::setApplicationIdentity(const QOpcUaApplicationIdentity &identity)
Setzt die Anwendungsidentität für diese QOpcUaClient Instanz auf identity.
Diese Funktion wurde in QtOpcUa 5.13 eingeführt.
Siehe auch applicationIdentity().
void QOpcUaClient::setAuthenticationInformation(const QOpcUaAuthenticationInformation &authenticationInformation)
Setzt die Authentifizierungsinformationen dieses Clients auf authenticationInformation.
Siehe auch authenticationInformation() und connectToEndpoint().
[since 6.6]
void QOpcUaClient::setConnectionSettings(const QOpcUaConnectionSettings &connectionSettings)
Setzt die Verbindungseinstellungen für diesen Client auf connectionSettings.
Beispiel:
QOpcUaConnectionSettings settings; // Ask the server to give localized texts in german with french as fallback settings.setSessionLocaleIds({ "de", "fr" }); // We need to call some long running methods, increase the request timeout settings.setRequestTimeout(std::chrono::minutes(2)); opcuaClient->setConnectionSettings(settings);
Die Werte von connectionSettings werden auf alle neuen Verbindungen nach diesem Punkt angewendet.
Diese Funktion wurde in Qt 6.6 eingeführt.
Siehe auch connectionSettings().
void QOpcUaClient::setNamespaceAutoupdate(bool isEnabled)
Aktiviert die automatische Aktualisierung der Namespace-Tabelle.
Wenn dies aktiviert ist, wird die lokale Kopie der Namespace-Tabelle automatisch aktualisiert. namespaceArrayUpdated wird ausgegeben, wenn sich das Array geändert hat. isEnabled bestimmt, ob autoupdate aktiviert oder deaktiviert ist.
Ein Abonnement wird auf dem Knoten auf dem Server erstellt, um Änderungen zu verfolgen. Falls ein Server keine Abonnements unterstützt, wird dies nicht funktionieren und isNamespaceAutoupdateEnabled gibt false
zurück.
Siehe auch namespaceArray() und namespaceArrayUpdated().
void QOpcUaClient::setNamespaceAutoupdateInterval(int interval)
Legt das Intervall für das Abonnement der Namespace-Tabelle fest.
Das Abonnement kann vom Server überarbeitet werden.
interval bestimmt das Intervall, in dem auf Änderungen geprüft wird, in Millisekunden. Der Standardwert ist einmal pro Sekunde.
Siehe auch namespaceAutoupdateInterval() und QOpcUaClient::setNamespaceAutoupdate(bool isEnabled).
[since QtOpcUa 5.13]
void QOpcUaClient::setPkiConfiguration(const QOpcUaPkiConfiguration &config)
Setzt die Anwendungs-PKI-Konfiguration für diese QOpcUaClient -Instanz auf config.
Diese Funktion wurde in QtOpcUa 5.13 eingeführt.
Siehe auch pkiConfiguration().
[since QtOpcUa 5.14]
QStringList QOpcUaClient::supportedSecurityPolicies() const
Gibt die vom verwendeten Backend unterstützten Sicherheitsrichtlinien zurück.
Diese Funktion ist derzeit als Technologievorschau verfügbar. Daher können die API und die von der Funktion bereitgestellte Funktionalität jederzeit ohne vorherige Ankündigung geändert werden.
Diese Funktion wurde in QtOpcUa 5.14 eingeführt.
[since QtOpcUa 5.14]
QList<QOpcUaUserTokenPolicy::TokenType> QOpcUaClient::supportedUserTokenTypes() const
Gibt die vom verwendeten Backend unterstützten Benutzer-Token-Typen zurück.
Diese Funktion ist derzeit als Technologievorschau verfügbar. Daher können die API und die von der Funktion bereitgestellte Funktionalität jederzeit ohne vorherige Ankündigung geändert werden.
Diese Funktion wurde in QtOpcUa 5.14 eingeführt.
Siehe auch QOpcUaUserTokenPolicy::TokenType.
[since 6.7]
bool QOpcUaClient::unregisterNodes(const QStringList &nodesToUnregister)
Hebt die Registrierung der Knoten-IDs in nodesToUnregister auf dem Server auf und gibt true
zurück, wenn die Anfrage erfolgreich abgeschickt wurde. Die Ergebnisse werden mit dem Signal unregisterNodesFinished() zurückgegeben.
Die Knoten-IDs, die in nodesToUnregister übergeben werden, müssen über registerNodes() erhalten worden sein.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch registerNodes().
[signal, since 6.7]
void QOpcUaClient::unregisterNodesFinished(const QStringList &nodesToUnregister, QOpcUa::UaStatusCode statusCode)
Dieses Signal wird ausgegeben, nachdem eine unregisterNodes()-Operation beendet wurde. nodesToUnregister enthält die Knoten-IDs aus der Anfrage zu Korrelationszwecken. statusCode zeigt an, ob die Operation erfolgreich war.
Diese Funktion wurde in Qt 6.7 eingeführt.
Siehe auch unregisterNodes().
bool QOpcUaClient::updateNamespaceArray()
Fordert eine Aktualisierung des Namespace-Arrays vom Server an. Gibt true
zurück, wenn der Vorgang erfolgreich ausgeführt wurde.
Das Signal namespaceArrayUpdated() wird ausgegeben, nachdem der Vorgang beendet ist.
Siehe auch namespaceArray() und namespaceArrayUpdated().
bool QOpcUaClient::writeNodeAttributes(const QList<QOpcUaWriteItem> &nodesToWrite)
Startet einen Schreibvorgang für mehrere Attribute auf verschiedenen Knoten. Die Knoten-ID, das Attribut, der Wert, der Wertetyp und ein Indexbereich können für jeden Eintrag in nodesToWrite angegeben werden.
Gibt true
zurück, wenn die asynchrone Anfrage erfolgreich abgeschickt wurde. Die Ergebnisse werden mit dem Signal writeNodeAttributesFinished() zurückgegeben.
Diese Schreibfunktion bietet eine alternative Möglichkeit zum Schreiben von Knotenattributen, die für Szenarien verwendet werden kann, in denen die Werte einer großen Anzahl von Knotenattributen auf verschiedenen Knoten geschrieben werden müssen, ohne dass die anderen Funktionen der QOpcUaNode basierten API wie die Überwachung von Wertänderungen erforderlich sind. Alle Schreibvorgänge in der Anfrage werden in einer einzigen Anfrage an den Server gesendet und in einer einzigen Antwort beantwortet, die ein einziges writeNodeAttributesFinished()-Signal erzeugt. Dies reduziert den Netzwerk-Overhead und die Anzahl der Signalsteckplatzverbindungen, wenn viele verschiedene Knoten beteiligt sind.
Im folgenden Beispiel werden die Werte-Attribute von zwei verschiedenen Knoten in einem einzigen Aufruf geschrieben. Der zweite Knoten hat einen Array-Wert, von dem nur die ersten beiden Elemente überschrieben werden:
QList<QOpcUaWriteItem> request; request.append(QOpcUaWriteItem("ns=2;s=Demo.Static.Scalar.Double", QOpcUa::NodeAttribute::Value, 23.0, QOpcUa::Types::Double)); request.append(QOpcUaWriteItem("ns=2;s=Demo.Static.Arrays.UInt32", QOpcUa::NodeAttribute::Value, QVariantList({0, 1, 2}), QOpcUa::Types::UInt32, "0:2")); m_client->writeNodeAttributes(request);
Siehe auch QOpcUaWriteItem und writeNodeAttributesFinished().
[signal]
void QOpcUaClient::writeNodeAttributesFinished(QList<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult)
Dieses Signal wird ausgegeben, nachdem eine writeNodeAttributes()-Operation beendet wurde.
Die Elemente in results haben die gleiche Reihenfolge wie die Elemente in der Schreibanforderung. Sie enthalten den Wert, die Zeitstempel und den Statuscode, die vom Server empfangen wurden, sowie die Knoten-ID, das Attribut und den Indexbereich des Schreibobjekts. Dies erleichtert den Abgleich des Ergebnisses mit der Anfrage.
serviceResult ist der Statuscode des OPC UA Schreibdienstes. Wenn serviceResult nicht Good ist, haben auch die Einträge in results einen ungültigen Statuscode und dürfen nicht verwendet werden.
Siehe auch writeNodeAttributes() und QOpcUaWriteResult.
© 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.