QOpcUaClient Class
QOpcUaClient permite la interacción con un servidor OPC UA. Más...
| Cabecera: | #include <QOpcUaClient> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpcUa)target_link_libraries(mytarget PRIVATE Qt6::OpcUa) |
| qmake: | QT += opcua |
| Hereda: | QObject |
Tipos públicos
| enum | ClientError { NoError, InvalidUrl, AccessDenied, ConnectionError, UnknownError, …, CertificateUntrusted } |
| enum | ClientState { Disconnected, Connecting, Connected, Closing } |
Propiedades
Funciones públicas
| 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) |
Señales
| 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) |
Descripción detallada
QOpcUaClient
QOpcUaClient implementa capacidades básicas de cliente para comunicarse con dispositivos y aplicaciones habilitados para OPC UA. Esto incluye la consulta a un servidor de descubrimiento de servidores conocidos, la solicitud de una lista de puntos finales de un servidor, la conexión y desconexión.
Después de conectarse con éxito a un servidor, QOpcUaClient permite obtener objetos QOpcUaNode que permiten una mayor interacción con los nodos en el servidor OPC UA. Para operaciones que conciernen a múltiples nodos, QOpcUaClient ofrece una API que soporta la lectura de múltiples atributos de múltiples nodos en una única petición al servidor.
QOpcUaClient también mantiene una copia local de la matriz de espacio de nombres del servidor que se crea después de una conexión exitosa. Esta información puede ser consultada o actualizada mientras dure la conexión. La copia de la matriz de espacios de nombres también se utiliza para la resolución de ids de nodos expandidos y la creación de nombres cualificados a partir de un URI de espacio de nombres.
Direccionamiento de nodos
Para una introducción a los nodos y a los identificadores de nodo, véase QOpcUaNode.
Utilización
Cree un QOpcUaClient utilizando QOpcUaProvider, solicite una lista de puntos finales al servidor utilizando requestEndpoints y llame a connectToEndpoint() para conectarse a uno de los puntos finales disponibles. Una vez establecida la conexión, se solicita un objeto QOpcUaNode para el nodo raíz.
QOpcUaProvider provider;if (provider.availableBackends().isEmpty()) return;QOpcUaClient *client = provider.createClient(provider.availableBackends()[0]);if (!client) return;// Conectar a la señal stateChanged. Se pueden utilizar slots compatibles de QObjects en lugar de una lambda.QObject::connect(cliente, &QOpcUaClient::stateChanged, [cliente](QOpcUaClient::ClientState estado) { qDebug() << "Client state changed:" << state; if (state == QOpcUaClient::ClientState::Conectado) { QOpcUaNode *nodo = cliente->nodo("ns=0;i=84"); if (nodo) qDebug() << "A node object has been created"; } });QObject::connect(cliente, &QOpcUaClient::endpointsRequestFinished, [cliente](QList<QOpcUaEndpointDescription> endpoints) { qDebug() << "Endpoints returned:" << endpoints.count(); if (endpoints.size()) client->connectToEndpoint(endpoints.first()); // Conectarse al primer endpoint de la lista}); client->requestEndpoints(QUrl("opc.tcp://127.0.0.1:4840")); // Solicitar una lista de extremos al servidor
Documentación del tipo de miembro
enum QOpcUaClient::ClientError
Este tipo enum especifica el estado de error actual del cliente.
| Constante | Valor | Descripción |
|---|---|---|
QOpcUaClient::NoError | 0 | No se ha producido ningún error. |
QOpcUaClient::InvalidUrl | 1 | La url a la que conectarse se ha especificado erróneamente o ha fallado una conexión a esta url. |
QOpcUaClient::AccessDenied | 2 | Un intento de conexión a un servidor usando nombre de usuario/contraseña falló debido a credenciales incorrectas. |
QOpcUaClient::ConnectionError | 3 | Se ha producido un error en la conexión. |
QOpcUaClient::UnknownError | 4 | Se ha producido un error desconocido. |
QOpcUaClient::UnsupportedAuthenticationInformation | 5 | No se admite el tipo o los datos de información de autenticación proporcionados. |
QOpcUaClient::InvalidAuthenticationInformation | 6 | La información de autenticación proporcionada no es válida. |
QOpcUaClient::InvalidEndpointDescription | 7 | La descripción del punto final no es válida, por ejemplo, debido a una URL vacía o a que no hay tokens de identidad de usuario. |
QOpcUaClient::NoMatchingUserIdentityTokenFound | 8 | El endpoint seleccionado no admite el tipo de token solicitado o las políticas admitidas. |
QOpcUaClient::UnsupportedSecurityPolicy | 9 | La política de seguridad del punto final no es compatible. |
QOpcUaClient::InvalidPki | 10 | Un certificado o clave de la PKI no se ha podido cargar o no es válido. |
QOpcUaClient::CertificateUntrusted | 11 | El certificado del servidor no es de confianza |
enum QOpcUaClient::ClientState
Este tipo enum especifica el estado de conexión del cliente.
| Constante | Valor | Descripción |
|---|---|---|
QOpcUaClient::Disconnected | 0 | El cliente no está conectado a ningún servidor. |
QOpcUaClient::Connecting | 1 | El cliente se está conectando a un servidor. |
QOpcUaClient::Connected | 2 | El cliente está conectado a un servidor. |
QOpcUaClient::Closing | 3 | El cliente se ha conectado y solicita la desconexión del servidor. |
Documentación de propiedades
[read-only] error : ClientError
Especifica el estado de error actual del cliente.
Funciones de acceso:
| QOpcUaClient::ClientError | error() const |
Señal del notificador:
| void | errorChanged(QOpcUaClient::ClientError error) |
[read-only] state : ClientState
Indica el estado actual de la conexión del cliente.
Funciones de acceso:
| QOpcUaClient::ClientState | state() const |
Señal del notificador:
| void | stateChanged(QOpcUaClient::ClientState state) |
Documentación de la función miembro
[virtual noexcept] QOpcUaClient::~QOpcUaClient()
Destruye la instancia QOpcUaClient.
bool QOpcUaClient::addNode(const QOpcUaAddNodeItem &nodeToAdd)
Añade el nodo descrito por nodeToAdd en el servidor.
Devuelve true si la llamada asíncrona se ha despachado con éxito.
El éxito de la operación se devuelve en la señal addNodeFinished().
El siguiente código de ejemplo añade un nuevo nodo Variable en el servidor:
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);
Véase también deleteNode(), addNodeFinished(), y QOpcUaAddNodeItem.
[signal] void QOpcUaClient::addNodeFinished(QOpcUaExpandedNodeId requestedNodeId, QString assignedNodeId, QOpcUa::UaStatusCode statusCode)
Esta señal se emite tras finalizar una operación addNode(). requestedNodeId es el id de nodo solicitado en la llamada a addNode(), assignedNodeId es el id de nodo que el servidor ha asignado al nuevo nodo. statusCode contiene el resultado de la operación. Si el resultado es Bad, assignedNodeId está vacío y no se ha añadido ningún nodo al espacio de direcciones del servidor.
bool QOpcUaClient::addReference(const QOpcUaAddReferenceItem &referenceToAdd)
Añade la referencia descrita por referenceToAdd al servidor.
Devuelve true si la llamada asíncrona se ha enviado correctamente.
El éxito de la operación se devuelve en la señal addReferenceFinished().
El siguiente código de ejemplo añade una referencia a un nodo a la carpeta "Objetos":
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);
Véase también deleteReference(), addReferenceFinished(), y QOpcUaAddReferenceItem.
[signal] void QOpcUaClient::addReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)
Esta señal se emite tras finalizar una operación addReference(). sourceNodeId, referenceTypeId, targetNodeId y isForwardReference son los valores de la llamada a addReference(). statusCode contiene el resultado de la operación.
[since QtOpcUa 5.13] QOpcUaApplicationIdentity QOpcUaClient::applicationIdentity() const
Devuelve la identidad de la aplicación de esta instancia QOpcUaClient.
Esta función se introdujo en QtOpcUa 5.13.
Véase también setApplicationIdentity().
const QOpcUaAuthenticationInformation &QOpcUaClient::authenticationInformation() const
Devuelve la información de autenticación actual.
Véase también setAuthenticationInformation().
QString QOpcUaClient::backend() const
Devuelve el nombre del backend utilizado por esta instancia de QOpcUaClient, por ejemplo "open62541".
[signal, since QtOpcUa 5.13] void QOpcUaClient::connectError(QOpcUaErrorState *errorState)
Esta señal se emite cuando se produce un error durante el establecimiento de la conexión. El parámetro errorState contiene información sobre el error.
En caso de errores del lado del cliente, éstos pueden ignorarse llamando a QOpcUaErrorState::setIgnoreError en el objeto.
Durante la ejecución de una ranura conectada a esta señal, el backend se detiene y espera a que regresen todas las ranuras. Esto permite abrir un diálogo de usuario para preguntarle, por ejemplo, si confía en un certificado desconocido antes de que el backend continúe.
Esta función se introdujo en QtOpcUa 5.13.
[invokable, since QtOpcUa 5.13] void QOpcUaClient::connectToEndpoint(const QOpcUaEndpointDescription &endpoint)
Se conecta al punto final OPC UA indicado en endpoint.
QEndpointDescription endpointDescription; ... client->connectToEndpoint(endpointDescription);
Normalmente se obtiene una lista de endpoints disponibles llamando a QOpcUaClient::requestEndpoints().
Si el endpoint requiere autenticación por nombre de usuario, debe establecerse al menos un nombre de usuario en QOpcUaAuthenticationInformation. Si se llama a esta función antes de establecer una información de autenticación, se utilizará la autenticación anónima.
QOpcUaAuthenticationInformation authInfo; authInfo.setUsernameAuthentication("user", "password"); client->setAuthenticationInformation(authInfo);
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
Esta función fue introducida en QtOpcUa 5.13.
Véase también connected(), stateChanged(), setAuthenticationInformation(), y QOpcUaEndpointDescription.
[signal] void QOpcUaClient::connected()
Esta señal se emite cuando se ha establecido una conexión.
[since 6.6] QOpcUaConnectionSettings QOpcUaClient::connectionSettings() const
Devuelve la configuración de conexión de este cliente.
Esta función se introdujo en Qt 6.6.
Véase también setConnectionSettings().
bool QOpcUaClient::deleteNode(const QString &nodeId, bool deleteTargetReferences = true)
Elimina del servidor el nodo con id nodeId. Si deleteTargetReferences es false, sólo se eliminan las referencias con el nodo de origen nodeId. Si deleteTargetReferences es true, también se eliminan las referencias con nodeId como destino.
Devuelve true si la llamada asíncrona se ha enviado correctamente.
El éxito de la operación se devuelve en la señal deleteNodeFinished().
El siguiente código de ejemplo borra un nodo y todas sus referencias del servidor:
m_client->deleteNode(QOpcUaExpandedNodeId("ns=3;s=MyNewVariableNode"), true);
Véase también addNode() y deleteNodeFinished().
[signal] void QOpcUaClient::deleteNodeFinished(QString nodeId, QOpcUa::UaStatusCode statusCode)
Esta señal se emite tras finalizar una operación deleteNode(). nodeId es el id de nodo de la llamada a deleteNode(). statusCode contiene el resultado de la operación.
bool QOpcUaClient::deleteReference(const QOpcUaDeleteReferenceItem &referenceToDelete)
Elimina del servidor la referencia descrita por referenceToDelete.
Devuelve true si la llamada asíncrona se ha despachado con éxito.
El éxito de la operación se devuelve en la señal deleteReferenceFinished().
El siguiente código de ejemplo elimina una referencia a un nodo de la carpeta "Objetos":
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);
Véase también addReference(), deleteReferenceFinished(), y QOpcUaDeleteReferenceItem.
[signal] void QOpcUaClient::deleteReferenceFinished(QString sourceNodeId, QString referenceTypeId, QOpcUaExpandedNodeId targetNodeId, bool isForwardReference, QOpcUa::UaStatusCode statusCode)
Esta señal se emite tras finalizar una operación deleteReference(). sourceNodeId, referenceTypeId, targetNodeId y isForwardReference son los valores de la llamada a deleteReference(). statusCode contiene el resultado de la operación.
[invokable] void QOpcUaClient::disconnectFromEndpoint()
Se desconecta del servidor.
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
Véase también disconnected() y connectToEndpoint().
[signal] void QOpcUaClient::disconnected()
Esta señal se emite cuando se ha cerrado una conexión tras una petición de cierre.
QOpcUaEndpointDescription QOpcUaClient::endpoint() const
Devuelve la descripción del punto final al que el cliente está conectado actualmente o al que se conectó por última vez.
[signal] void QOpcUaClient::endpointsRequestFinished(QList<QOpcUaEndpointDescription> endpoints, QOpcUa::UaStatusCode statusCode, QUrl requestUrl)
Esta señal se emite tras finalizar una operación requestEndpoints(). statusCode contiene el resultado de la operación. Si el resultado es Good, endpoints contiene las descripciones de todos los endpoints que están disponibles en el servidor. requestUrl contiene la URL que se utilizó en la llamada a requestEndpoints().
QOpcUaClient::ClientError QOpcUaClient::error() const
Devuelve el estado de error actual del cliente.
Nota: Función getter para error de propiedad.
bool QOpcUaClient::findServers(const QUrl &url, const QStringList &localeIds = QStringList(), const QStringList &serverUris = QStringList())
Inicia una petición asíncrona FindServers para leer una lista de servidores conocidos de un servidor o servidor de descubrimiento en url. Devuelve true si la llamada asíncrona se ha despachado con éxito.
localeIds puede utilizarse para seleccionar el idioma de los nombres de aplicación devueltos por la petición. El formato se especifica en OPC UA 1.05 parte 3, 8.4, por ejemplo "en" para inglés, o "de-DE" para alemán (Alemania). Si se especifica más de un ID de configuración regional, el servidor utilizará el primero que coincida. Si no hay ninguna coincidencia o localeIds está vacío, el servidor elige una configuración regional por defecto.
serverUris puede utilizarse para restringir los resultados a los servidores con una applicationUri coincidente en la descripción de su aplicación. Por ejemplo, para encontrar la URL actual del servidor con la applicationUri "MyPLC", se puede utilizar la siguiente llamada:
client->findServers(discoveryServerUrl, QStringList(), QStringList({"MyPLC"}));
Los resultados se devuelven en la señal findServersFinished().
[signal] void QOpcUaClient::findServersFinished(QList<QOpcUaApplicationDescription> servers, QOpcUa::UaStatusCode statusCode, QUrl requestUrl)
Esta señal se emite tras finalizar una operación findServers(). statusCode contiene el resultado de la operación. Si el resultado es Good, servers contiene las descripciones de aplicación de todos los servidores conocidos por el servidor consultado que coinciden con los criterios de filtrado. requestUrl contiene la URL que se utilizó en la llamada a findServers().
bool QOpcUaClient::isNamespaceAutoupdateEnabled() const
Devuelve si está activada la actualización automática de la matriz de espacios de nombres.
QStringList QOpcUaClient::namespaceArray() const
Devuelve el valor almacenado en caché de la matriz de espacios de nombres.
El valor sólo es válido después de que se haya emitido la señal namespaceArrayUpdated().
Véase también updateNamespaceArray() y namespaceArrayUpdated().
[signal] void QOpcUaClient::namespaceArrayChanged(QStringList namespaces)
Esta señal se emite después de que la matriz de espacios de nombres haya cambiado. namespaces contiene el contenido de la tabla de espacios de nombres del servidor. El índice de una entrada en namespaces corresponde al índice del espacio de nombres utilizado en el id del nodo.
Véase también namespaceArrayUpdated() y updateNamespaceArray().
[signal] void QOpcUaClient::namespaceArrayUpdated(QStringList namespaces)
Esta señal se emite tras finalizar una operación updateNamespaceArray. namespaces contiene el contenido de la tabla de espacios de nombres del servidor. El índice de una entrada en namespaces corresponde al índice de espacio de nombres utilizado en el id de nodo.
Si el contenido de la matriz de espacios de nombres sigue siendo el mismo después de la actualización, esta señal se emite de todas formas.
Véase también namespaceArrayChanged() y updateNamespaceArray().
int QOpcUaClient::namespaceAutoupdateInterval() const
Devuelve el intervalo de actualización revisado actual de la matriz de espacios de nombres.
Véase también setNamespaceAutoupdateInterval(int interval).
QOpcUaNode *QOpcUaClient::node(const QOpcUaExpandedNodeId &expandedNodeId)
Devuelve un objeto QOpcUaNode asociado al nodo OPC UA identificado por expandedNodeId. El llamante se convierte en propietario del objeto nodo.
Si el nodo no está en el servidor actualmente conectado, el espacio de nombres no puede resolverse, el id del nodo está malformado o el cliente no está conectado, se devuelve nullptr.
Véase también updateNamespaceArray().
QOpcUaNode *QOpcUaClient::node(const QString &nodeId)
Devuelve un objeto QOpcUaNode asociado al nodo OPC UA identificado por nodeId. El llamante se convierte en propietario del objeto nodo.
Si el cliente no está conectado, se devuelve nullptr. Los backends también pueden devolver nullptr para otros casos de error (por ejemplo, para un id de nodo malformado).
[signal, since QtOpcUa 5.13] void QOpcUaClient::passwordForPrivateKeyRequired(QString keyFilePath, QString *password, bool previousTryWasInvalid)
Esta señal se emite cuando se requiere una contraseña para una clave privada encriptada. El parámetro keyFilePath contiene la ruta del archivo a la clave que se utiliza. El parámetro previousTryWasInvalid es verdadero si un intento anterior de descifrar la clave falló (contraseña no válida). El parámetro password apunta a un QString que debe rellenarse con la contraseña real de la clave. En caso de que el intento anterior fallara, contiene la contraseña utilizada anteriormente.
Durante la ejecución de una ranura conectada a esta señal, el backend se detiene y espera a que vuelvan todas las ranuras. Esto permite abrir un diálogo de usuario para pedir la contraseña al usuario final.
Esta función se introdujo en QtOpcUa 5.13.
[since QtOpcUa 5.13] QOpcUaPkiConfiguration QOpcUaClient::pkiConfiguration() const
Devuelve la configuración PKI de la aplicación de esta instancia QOpcUaClient.
Esta función se introdujo en QtOpcUa 5.13.
Véase también setPkiConfiguration().
QOpcUaQualifiedName QOpcUaClient::qualifiedNameFromNamespaceUri(const QString &namespaceUri, const QString &name, bool *ok = nullptr) const
Intenta crear un nombre cualificado a partir de namespaceUri y la cadena de nombre name. Devuelve el nombre cualificado resultante. Se devuelve un nombre cualificado vacío si no se puede resolver namespaceUri.
ok se establecerá en true si la resolución del URI del espacio de nombres se ha realizado correctamente. Si no se ha podido resolver el URI del espacio de nombres, ok se establecerá en false.
[since 6.3] QOpcUaHistoryReadResponse *QOpcUaClient::readHistoryData(const QOpcUaHistoryReadRawRequest &request)
Inicia una lectura de historial sin procesar request para uno o varios nodos. Esta es la representación Qt OPC UA para el servicio OPC UA ReadHistory de lectura de datos históricos sin procesar definido en OPC UA 1.05 parte 4, 5.10.3.
La marca de tiempo inicial, la marca de tiempo final, el número de valores por nodo, returnBounds y los nodos a leer pueden especificarse en QOpcUaHistoryReadRawRequest.
Devuelve un QOpcUaHistoryReadResponse que contiene el estado de la petición si la petición asíncrona se ha enviado con éxito. Los resultados se devuelven en la señal QOpcUaHistoryReadResponse::readHistoryDataFinished(const QList<QOpcUaHistoryData> &results, QOpcUa::UaStatusCode serviceResult).
En el siguiente ejemplo, se solicitan e imprimen los datos históricos de los dos últimos días de dos nodos. El resultado está limitado a diez valores por nodo.
QOpcUaHistoryReadRawRequest request( { QOpcUaReadItem("ns=1;s=miValor1"), QOpcUaReadItem("ns=1;s=miValor2")}, QDateTime::currentDateTime(), QDateTime::currentDateTime().addDays(-2), 10, true);QOpcUaHistoryReadResponse *response = m_client->readHistoryData(request);if (response) { QObject::connect(respuesta, &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(); } } }); }
Esta función se introdujo en Qt 6.3.
[since 6.7] QOpcUaHistoryReadResponse *QOpcUaClient::readHistoryEvents(const QOpcUaHistoryReadEventRequest &request)
Inicia una solicitud de lectura del historial de eventos para uno o varios ids de nodo con los parámetros de request.
Devuelve un QOpcUaHistoryReadResponse que contiene el estado de la petición si la petición asíncrona ha sido enviada con éxito. Los resultados se devuelven en la señal QOpcUaHistoryReadResponse::readHistoryEventsFinished(const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult).
El siguiente ejemplo recupera los eventos históricos de los dos últimos días para dos nodos. Se devuelven hasta 10 eventos por nodo a la vez. Mientras haya más eventos que coincidan con el filtro y el rango de tiempo proporcionado, hasMoreData() será true y se podrán obtener más eventos mediante readMoreData().
QOpcUaMonitoringParameters::EventFilter filtro; filtro<< QOpcUaSimpleAttributeOperand("Mensaje"); filter<< QOpcUaSimpleAttributeOperand("Hora");const QOpcUaHistoryReadEventRequest request({ QOpcUaReadItem("ns=2;s=EventHistorian"), QOpcUaReadItem("ns=2;s=EventHistorian2")}, QDateTime::currentDateTime().addDays(-2), QDateTime::currentDateTime(),filter, 10);// El objeto respuesta debe ser liberado por el usuario una vez se hayan recuperado todos los datos deseadosconst auto response = opcuaClient->readHistoryEvents(request);QObject::connect(respuesta, &QOpcUaHistoryReadResponse::readHistoryEventsFinished, this, [response](const QList<QOpcUaHistoryEvent> &results, QOpcUa::UaStatusCode serviceResult) { if (serviceResult != QOpcUa::UaStatusCode::Good) { qDebug() << "Service call failed with" << serviceResult; return; } // Imprime lo que tenemos hasta ahora 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(); });
Esta función se introdujo en Qt 6.7.
bool QOpcUaClient::readNodeAttributes(const QList<QOpcUaReadItem> &nodesToRead)
Inicia una lectura de múltiples atributos en diferentes nodos. Se puede especificar el id del nodo, el atributo y un rango de índices para cada entrada en nodesToRead.
Devuelve true si la petición asíncrona se ha enviado con éxito. Los resultados se devuelven en la señal readNodeAttributesFinished().
Esta función de lectura ofrece una forma alternativa de leer atributos de nodos que puede utilizarse en situaciones en las que deben leerse los valores de un gran número de atributos de nodos en diferentes nodos sin requerir otras características de la API basada en QOpcUaNode, como la supervisión de los cambios de valor. Todos los elementos de lectura de la solicitud se envían al servidor en una única solicitud y se responden en una única respuesta que genera una única señal readNodeAttributesFinished(). Esto reduce la sobrecarga de la red y el número de conexiones de ranura de señal si hay muchos nodos diferentes implicados.
En el siguiente ejemplo, el atributo nombre para mostrar y los dos rangos de índices "0:2" y "5:7" del atributo valor del mismo nodo y todo el atributo valor de un segundo nodo se leen utilizando una única llamada al servicio:
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);
Véase también QOpcUaReadItem y readNodeAttributesFinished().
[signal] void QOpcUaClient::readNodeAttributesFinished(QList<QOpcUaReadResult> results, QOpcUa::UaStatusCode serviceResult)
Esta señal se emite tras finalizar una operación readNodeAttributes().
Los elementos en results tienen el mismo orden que los elementos en la solicitud. Para cada elemento solicitado, hay un valor junto con marcas de tiempo y el código de estado en results. serviceResult contiene el código de estado del servicio OPC UA Read.
Véase también readNodeAttributes(), QOpcUaReadResult, y QOpcUaReadItem.
[since 6.7] bool QOpcUaClient::registerNodes(const QStringList &nodesToRegister)
Registra los identificadores de nodo en nodesToRegister en el servidor y devuelve true si la solicitud se ha enviado correctamente. Los resultados se devuelven en la señal registerNodesFinished().
El servicio de registro de nodos se utiliza para que el servidor sepa que se va a acceder a un nodo con frecuencia, de modo que pueda realizar operaciones como mantener abierta la conexión a un recurso externo. El servidor también puede devolver un id de nodo alias que se recomienda que sea numérico. Esto puede resultar útil si un nodo con un identificador de nodo de cadena larga se utiliza en muchas peticiones. La ganancia real de rendimiento (si la hay) depende de la implementación del servidor.
Sólo se garantiza que los identificadores de nodo registrados sean válidos para la sesión actual. Cualquier registro que ya no sea necesario debe ser anulado tan pronto como sea posible para que el servidor pueda liberar los recursos asociados.
Esta función se introdujo en Qt 6.7.
Véase también unregisterNodes().
[signal, since 6.7] void QOpcUaClient::registerNodesFinished(const QStringList &nodesToRegister, const QStringList ®isteredNodeIds, QOpcUa::UaStatusCode statusCode)
Esta señal se emite tras finalizar una operación registerNodes(). nodesToRegister contiene los ids de nodo de la petición a efectos de correlación. Los ids de nodos devueltos por el servidor están en registeredNodeIds y tienen el mismo orden que los ids de la petición. statusCode indica si la operación se ha realizado correctamente.
Esta función se introdujo en Qt 6.7.
Véase también registerNodes().
bool QOpcUaClient::requestEndpoints(const QUrl &url)
Inicia una petición asíncrona GetEndpoints para leer una lista de endpoints disponibles del servidor en url. Devuelve true si la llamada asíncrona ha sido enviada con éxito.
La información del punto final se devuelve en la señal endpointsRequestFinished().
QString QOpcUaClient::resolveExpandedNodeId(const QOpcUaExpandedNodeId &expandedNodeId, bool *ok = nullptr) const
Intenta resolver expandedNodeId a una cadena de identificación de nodo con índice numérico de espacio de nombres. Devuelve la cadena de id de nodo si la conversión se ha realizado correctamente.
Se devuelve una cadena vacía si no se puede resolver el índice del espacio de nombres o si la parte del identificador del id de nodo expandido está malformada. ok se establecerá en true si la conversión ha tenido éxito. Si no se ha podido resolver el id de nodo expandido, ok se establecerá en false.
[since QtOpcUa 5.13] void QOpcUaClient::setApplicationIdentity(const QOpcUaApplicationIdentity &identity)
Establece la identidad de la aplicación para esta instancia de QOpcUaClient en identity.
Esta función fue introducida en QtOpcUa 5.13.
Véase también applicationIdentity().
void QOpcUaClient::setAuthenticationInformation(const QOpcUaAuthenticationInformation &authenticationInformation)
Establece la información de autenticación de este cliente en authenticationInformation.
Véase también authenticationInformation() y connectToEndpoint().
[since 6.6] void QOpcUaClient::setConnectionSettings(const QOpcUaConnectionSettings &connectionSettings)
Establece la configuración de conexión para este cliente en connectionSettings.
Ejemplo:
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);
Los valores de connectionSettings se aplican a cualquier nueva conexión después de este punto.
El complemento open62541 admite la actualización de los identificadores de configuración regional de sesión para la conexión actual. Todos los demás valores que se modifiquen pero que no admitan ser actualizados mientras se está conectado provocarán un mensaje de advertencia y se aplicarán durante la siguiente llamada a connectToEndpoint().
Esta función se introdujo en Qt 6.6.
Véase también connectionSettings().
void QOpcUaClient::setNamespaceAutoupdate(bool isEnabled)
Habilita la actualización automática de la tabla de espacios de nombres.
Habilitando esto se mantendrá la copia local de la tabla de espacios de nombres actualizada automáticamente. namespaceArrayUpdated será emitido cuando la matriz cambie. isEnabled determina si la actualización automática está siendo habilitada o deshabilitada.
Se realizará una suscripción en el nodo en el servidor para realizar un seguimiento de los cambios. En caso de que un servidor no soporte suscripciones esto no funcionará y isNamespaceAutoupdateEnabled devolverá false.
Véase también namespaceArray() y namespaceArrayUpdated().
void QOpcUaClient::setNamespaceAutoupdateInterval(int interval)
Establece el intervalo para la suscripción a la tabla de espacios de nombres.
La suscripción puede ser revisada por el servidor.
interval determina el intervalo para comprobar los cambios en milisegundos. El valor por defecto es una vez por segundo.
Véase también namespaceAutoupdateInterval() y QOpcUaClient::setNamespaceAutoupdate(bool isEnabled).
[since QtOpcUa 5.13] void QOpcUaClient::setPkiConfiguration(const QOpcUaPkiConfiguration &config)
Establece la configuración PKI de la aplicación para esta instancia de QOpcUaClient en config.
Esta función se introdujo en QtOpcUa 5.13.
Véase también pkiConfiguration().
[since QtOpcUa 5.14] QStringList QOpcUaClient::supportedSecurityPolicies() const
Devuelve las políticas de seguridad soportadas por el backend utilizado.
Esta función está actualmente disponible como Muestra de Tecnología, y por lo tanto la API y la funcionalidad proporcionada por la función puede estar sujeta a cambios en cualquier momento sin previo aviso.
Esta función se introdujo en QtOpcUa 5.14.
[since QtOpcUa 5.14] QList<QOpcUaUserTokenPolicy::TokenType> QOpcUaClient::supportedUserTokenTypes() const
Devuelve los tipos de token de usuario admitidos por el backend utilizado.
Esta función está actualmente disponible como Muestra de Tecnología, y por lo tanto la API y la funcionalidad proporcionada por la función puede estar sujeta a cambios en cualquier momento sin previo aviso.
Esta función se introdujo en QtOpcUa 5.14.
Véase también QOpcUaUserTokenPolicy::TokenType.
[since 6.7] bool QOpcUaClient::unregisterNodes(const QStringList &nodesToUnregister)
Desregistra los ids de nodo en nodesToUnregister en el servidor y devuelve true si la petición ha sido enviada con éxito. Los resultados se devuelven en la señal unregisterNodesFinished().
Los ids de nodo a pasar en nodesToUnregister deben haber sido obtenidos a través de registerNodes().
Esta función se introdujo en Qt 6.7.
Véase también registerNodes().
[signal, since 6.7] void QOpcUaClient::unregisterNodesFinished(const QStringList &nodesToUnregister, QOpcUa::UaStatusCode statusCode)
Esta señal se emite una vez finalizada la operación unregisterNodes(). nodesToUnregister contiene los identificadores de nodo de la solicitud a efectos de correlación. statusCode indica si la operación se ha realizado correctamente.
Esta función se introdujo en Qt 6.7.
Véase también unregisterNodes().
bool QOpcUaClient::updateNamespaceArray()
Solicita al servidor una actualización de la matriz de espacios de nombres. Devuelve true si la operación se ha enviado correctamente.
La señal namespaceArrayUpdated() se emite una vez finalizada la operación.
Véase también namespaceArray() y namespaceArrayUpdated().
bool QOpcUaClient::writeNodeAttributes(const QList<QOpcUaWriteItem> &nodesToWrite)
Inicia una escritura para múltiples atributos en diferentes nodos. Se puede especificar el id del nodo, el atributo, el valor, el tipo de valor y un rango de índices para cada entrada en nodesToWrite.
Devuelve true si la solicitud asíncrona se ha enviado correctamente. Los resultados se devuelven en la señal writeNodeAttributesFinished().
Esta función de escritura ofrece una forma alternativa de escribir atributos de nodos que puede utilizarse en situaciones en las que los valores de un gran número de atributos de nodos en diferentes nodos deben escribirse sin requerir otras características de la API basada en QOpcUaNode como la monitorización de cambios de valor. Todos los elementos de escritura de la solicitud se envían al servidor en una única solicitud y se responden en una única respuesta que genera una única señal writeNodeAttributesFinished(). Esto reduce la sobrecarga de la red y el número de conexiones de ranura de señal si hay muchos nodos diferentes implicados.
En el siguiente ejemplo, los atributos Values de dos nodos diferentes se escriben en una sola llamada. El segundo nodo tiene un valor de matriz del que sólo se sobrescriben los dos primeros elementos:
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);
Véase también QOpcUaWriteItem y writeNodeAttributesFinished().
[signal] void QOpcUaClient::writeNodeAttributesFinished(QList<QOpcUaWriteResult> results, QOpcUa::UaStatusCode serviceResult)
Esta señal se emite tras finalizar una operación writeNodeAttributes().
Los elementos de results tienen el mismo orden que los elementos de la solicitud de escritura. Contienen el valor, las marcas de tiempo y el código de estado recibidos del servidor, así como el id de nodo, el atributo y el rango de índice del elemento de escritura. Esto facilita la correspondencia del resultado con la solicitud.
serviceResult es el código de estado del servicio OPC UA Write. Si serviceResult no es Good, las entradas de results también tienen un código de estado no válido y no deben utilizarse.
Véase también writeNodeAttributes() y QOpcUaWriteResult.
© 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.