QOpcUaNode Class
QOpcUaNode permite la interacción con un nodo OPC UA. Más...
| Cabecera: | #include <QOpcUaNode> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS OpcUa)target_link_libraries(mytarget PRIVATE Qt6::OpcUa) |
| qmake: | QT += opcua |
| Hereda: | QObject |
Tipos públicos
Funciones públicas
| 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) |
Señales
| 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) |
Miembros públicos estáticos
| QOpcUa::NodeAttributes | allBaseAttributes() |
| QOpcUa::NodeAttributes | mandatoryBaseAttributes() |
Descripción detallada
El nodo es el bloque de construcción básico del espacio de direcciones OPC UA. Tiene atributos como nombre de exploración, valor, propiedades asociadas y puede tener referencias a otros nodos en el espacio de direcciones. Los nodos se organizan en espacios de nombres y tienen identificadores que pueden ser, por ejemplo, numéricos, una cadena, un formato específico del espacio de nombres (opaco) o un identificador único global. Un nodo se identifica mediante el ID del espacio de nombres y el ID del nodo. Este identificador suele darse en forma de cadena: El identificador de un nodo que reside en el espacio de nombres 0 y tiene el identificador numérico 42 da como resultado la cadena ns=0;i=42. Un nodo con un identificador de cadena puede ser direccionado a través de ns=0;s=myStringIdentifier.
Los objetos de este tipo son propiedad del usuario y deben eliminarse cuando ya no se necesiten. Son válidos mientras exista el QOpcUaClient que los creó.
Lectura y escritura de atributos
Los atributos de los nodos se leen del servidor cuando se llama a readAttributes() o readAttributeRange(). Los resultados se almacenan en caché local y pueden recuperarse mediante attribute() una vez recibida la señal attributeRead.
Los atributos se pueden escribir utilizando writeAttribute(), writeAttributes() y writeAttributeRange() si el usuario tiene los derechos necesarios. El éxito de la operación de escritura se notifica mediante la señal attributeWritten.
attributeError() contiene un código de estado asociado a la última operación de lectura o escritura en el atributo. Se trata del código de estado de bajo nivel devuelto por el servicio OPC UA. Este código de estado puede simplificarse convirtiéndolo en QOpcUa::ErrorCategory mediante QOpcUa::errorCategory().
Suscripciones y elementos supervisados
Las suscripciones son un concepto de OPC UA que permite recibir notificaciones de cambios en los datos o en caso de eventos, en lugar de sondear continuamente un nodo en busca de cambios. Los elementos supervisados definen cómo se supervisan los cambios en los atributos de un nodo. Se añaden a una suscripción y las notificaciones que generan se envían al usuario a través de la suscripción. El usuario puede configurar el intervalo de las actualizaciones, así como muchas otras opciones de los elementos supervisados y las suscripciones.
QOpcUaNode ofrece una abstracción para interactuar con las suscripciones y los elementos supervisados. enableMonitoring() permite las notificaciones de cambio de datos para uno o más atributos. La señal dataChangeOccurred contiene nuevos valores y se actualiza la caché local. disableMonitoring() desactiva las notificaciones de cambio de datos. La señal monitoringStatusChanged notifica los cambios en el estado de monitorización, por ejemplo, tras la activación y desactivación manual o un cambio de estado en el servidor.
La supervisión de eventos utiliza la misma API para la configuración y la gestión del ciclo de vida. El atributo EventNotifier debe supervisarse mediante un EventFilter que seleccione los campos de eventos necesarios y filtre los eventos notificados según los criterios definidos por el usuario. Los eventos se reportan en la señal eventOccurred() como un QVariantList que contiene los valores de los campos de eventos seleccionados.
La configuración de la suscripción y del elemento supervisado puede modificarse en tiempo de ejecución utilizando modifyMonitoring().
Navegación por el espacio de direcciones
El espacio de direcciones OPC UA consiste en nodos conectados por referencias. browseChildren sigue estas referencias en dirección de avance y devuelve atributos de todos los nodos conectados al nodo detrás de una instancia de QOpcUaNode en la señal browseFinished. browse() es similar a browseChildren() pero ofrece más opciones para configurar la llamada de exploración.
Llamadas a métodos
OPC UA especifica métodos en el servidor que pueden ser llamados por el usuario. QOpcUaNode soporta esto a través de callMethod que toma parámetros y devuelve los resultados de la llamada en la señal methodCallFinished.
Resolución de rutas de navegación
Para poder programar en función de una descripción de tipo, OPC UA admite la resolución de una ruta de nombres de búsqueda a partir de un nodo determinado para obtener el identificador de nodo del nodo de destino. El método resolveBrowsePath() sigue una ruta a partir del nodo al que se ha llamado y devuelve el resultado en la señal resolveBrowsePathFinished().
Ejemplo
Para conectar el cliente a un servidor y obtener un objeto QOpcUaNode, véase QOpcUaClient.
Una vez que el nodo se ha creado correctamente, se lee del servidor el BrowseName del nodo raíz:
QOpcUaNode *rootNode; // Creado antes, ver documentación de QOpcUaClient. // Conectar con la señal attributeRead. Se pueden usar slots compatibles de QObjects en lugar de una lambda.QObject::connect(nodoraiz, &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); // Iniciar una operación de lectura del atributo BrowseName del nodo.
Documentación de Tipos de Miembros
QOpcUaNode::AttributeMap
Este tipo es utilizado por writeAttributes() para escribir más de un atributo a la vez. Deben asignarse valores QVariant a los atributos que se van a escribir.
Documentación de las funciones miembro
[static constexpr] QOpcUa::NodeAttributes QOpcUaNode::allBaseAttributes()
Contiene todos los atributos de la clase de nodo base OPC UA.
QVariant QOpcUaNode::attribute(QOpcUa::NodeAttribute attribute) const
Devuelve el valor del atributo dado en attribute.
El valor sólo es válido después de que se haya emitido la señal attributeRead. Se devuelve un QVariant vacío si no hay ningún valor en caché para el atributo.
QOpcUa::UaStatusCode QOpcUaNode::attributeError(QOpcUa::NodeAttribute attribute) const
Devuelve el código de error del atributo indicado en attribute.
El código de error sólo es válido después de que se haya emitido la señal attributeRead o attributeWritten.
Si no hay ninguna entrada en la caché de atributos, se devuelve BadNoEntryExists.
Véase también QOpcUa::errorCategory.
[signal] void QOpcUaNode::attributeRead(QOpcUa::NodeAttributes attributes)
Esta señal se emite tras finalizar una operación readAttributes() o readAttributeRange(). El receptor debe comprobar el código de estado de los atributos contenidos en attributes.
[signal] void QOpcUaNode::attributeUpdated(QOpcUa::NodeAttribute attr, QVariant value)
Esta señal se emite después de que el valor de la caché de atributos haya sido actualizado por una notificación de cambio de datos del servidor, una operación de lectura o escritura. value contiene el nuevo valor del atributo del nodo attr.
Véase también attribute(), attributeError(), serverTimestamp(), sourceTimestamp() y valueAttributeUpdated().
[signal] void QOpcUaNode::attributeWritten(QOpcUa::NodeAttribute attribute, QOpcUa::UaStatusCode statusCode)
Esta señal se emite una vez finalizada una operación writeAttribute(), writeAttributes() o writeAttributeRange().
Antes de que se emita esta señal, la caché de atributos se actualiza en caso de que la escritura se haya realizado correctamente. Para writeAttributes() se emite una señal por cada atributo de la llamada de escritura. statusCode contiene la información de éxito de la operación de escritura en attribute.
bool QOpcUaNode::browse(const QOpcUaBrowseRequest &request)
Inicia una llamada de exploración desde este nodo.
Devuelve true si la llamada asíncrona ha sido enviada con éxito.
Todas las referencias que coincidan con los criterios especificados en request se devuelven en la señal browseFinished().
Por ejemplo, se puede utilizar una llamada browse inversa para encontrar el nodo padre de un nodo propiedad:
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)
Ejecuta una llamada de exploración hacia adelante a partir del nodo en el que se llama a este método. La operación de navegación recoge información sobre los nodos hijos conectados al nodo y entrega los resultados en la señal browseFinished().
Devuelve true si la llamada asíncrona se ha realizado correctamente.
Para solicitar sólo los hijos conectados al nodo por un determinado tipo de referencia, referenceType debe establecerse a ese tipo de referencia. Por ejemplo, esto se puede utilizar para obtener todas las propiedades de un nodo pasando HasProperty en referenceType. Los resultados pueden filtrarse para que sólo contengan nodos con determinadas clases de nodo, estableciéndolas en nodeClassMask.
[signal] void QOpcUaNode::browseFinished(QList<QOpcUaReferenceDescription> children, QOpcUa::UaStatusCode statusCode)
Esta señal se emite tras finalizar una operación browseChildren() o browse().
children contiene información sobre todos los nodos que coinciden con los criterios de browseChildren(). statusCode contiene el resultado del servicio de la operación de navegación. Si statusCode no es Good, el vector children pasado está vacío.
Véase también QOpcUaReferenceDescription.
bool QOpcUaNode::callMethod(const QString &methodNodeId, const QList<QOpcUa::TypedVariant> &args = QList<QOpcUa::TypedVariant>())
Llama al método OPC UA methodNodeId con los parámetros dados a través de args. El resultado se devuelve en la señal methodCallFinished.
Devuelve true si la llamada asíncrona se ha enviado correctamente.
QOpcUaClient *QOpcUaNode::client() const
Devuelve un puntero al cliente que ha creado este nodo.
[signal] void QOpcUaNode::dataChangeOccurred(QOpcUa::NodeAttribute attr, QVariant value)
Esta señal se emite tras la recepción de una notificación de cambio de datos. value contiene el nuevo valor del atributo de nodo attr.
Véase también attribute(), serverTimestamp() y sourceTimestamp().
bool QOpcUaNode::disableMonitoring(QOpcUa::NodeAttributes attr)
Este método desactiva la monitorización de los atributos indicados en attr.
Devuelve true si la llamada asíncrona se ha enviado correctamente.
Una vez finalizada la llamada, se emite la señal disableMonitoringFinished y monitoringStatus devuelve un valor construido por defecto con código de estado BadMonitoredItemIdIinvalid para attr.
[signal] void QOpcUaNode::disableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
Esta señal se emite una vez finalizada una llamada asíncrona a disableMonitoring(). statusCode contiene el código de estado generado por la operación. Una vez emitida esta señal, monitoringStatus devuelve un valor construido por defecto con código de estado BadMonitoredItemIdIinvalid para attr.
bool QOpcUaNode::enableMonitoring(QOpcUa::NodeAttributes attr, const QOpcUaMonitoringParameters &settings)
Este método crea un elemento supervisado para cada uno de los atributos indicados en attr. La configuración de settings se utiliza en la creación de los elementos supervisados y la suscripción.
Devuelve true si la llamada asíncrona se ha realizado correctamente.
Al finalizar la llamada, se emite la señal enableMonitoringFinished. Existen múltiples casos de error en los que se genera un código de estado incorrecto: No existe una suscripción con el id de suscripción especificado en settings, el nodo no existe en el servidor, el nodo no tiene el atributo solicitado o se ha alcanzado el número máximo de elementos monitorizados para el servidor.
El mismo método se utiliza para activar la supervisión de eventos. Los eventos son objetos especiales en el espacio de direcciones de OPC UA que contienen información sobre un evento que se ha producido. Si se desencadena un evento en el servidor, un elemento supervisado por evento recopila valores seleccionados de atributos de nodo del objeto de evento y sus nodos hijos. Todos los nodos que tienen un origen de evento pueden ser monitorizados en busca de eventos. Para monitorizar un nodo en busca de eventos, el atributo EventNotifier debe ser monitorizado usando un EventFilter que contenga los campos de evento que el usuario necesita y opcionalmente una cláusula where que se usa para filtrar eventos por criterios (para más detalles, ver QOpcUaMonitoringParameters::EventFilter).
[signal] void QOpcUaNode::enableMonitoringFinished(QOpcUa::NodeAttribute attr, QOpcUa::UaStatusCode statusCode)
Esta señal se emite tras finalizar una llamada asíncrona a enableMonitoring(). Una vez emitida esta señal, monitoringStatus() devuelve información válida para attr. statusCode contiene el código de estado de la operación.
[signal] void QOpcUaNode::eventOccurred(QVariantList eventFields)
Esta señal se emite tras la recepción de un nuevo evento.
eventFields contiene los valores de los campos de evento en el orden especificado en la cláusula select del filtro de eventos.
[static constexpr] QOpcUa::NodeAttributes QOpcUaNode::mandatoryBaseAttributes()
Contiene todos los atributos obligatorios de la clase de nodo base OPC UA.
[signal] void QOpcUaNode::methodCallFinished(QString methodNodeId, QVariant result, QOpcUa::UaStatusCode statusCode)
Esta señal se emite después de que la llamada a un método methodNodeId haya finalizado en el servidor. statusCode contiene el código de estado de la llamada al método, result contiene los argumentos de salida del método. result está vacía si el método no tiene argumentos de salida o statusCode no es Good. La variante result es un único valor si sólo hay un argumento de salida o contiene una lista de variantes en caso de que la función llamada devolviera múltiples argumentos de salida.
if (result.canConvert<QVariantList>()) { // handle list type } else { // handle value type }
bool QOpcUaNode::modifyDataChangeFilter(QOpcUa::NodeAttribute attr, const QOpcUaMonitoringParameters::DataChangeFilter &filter)
Modifica un control de cambio de datos existente para utilizar filter como filtro de cambio de datos.
Devuelve true si la solicitud de modificación del filtro se ha enviado correctamente al backend.
monitoringStatusChanged para attr se emite una vez finalizada la operación.
bool QOpcUaNode::modifyEventFilter(const QOpcUaMonitoringParameters::EventFilter &eventFilter)
Modifica una monitorización de eventos existente para utilizar eventFilter como filtro de eventos.
Devuelve true si la solicitud de modificación del filtro se ha enviado correctamente al backend.
monitoringStatusChanged para EventNotifier se emite una vez finalizada la operación.
bool QOpcUaNode::modifyMonitoring(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameter item, const QVariant &value)
Este método modifica los parámetros del elemento supervisado o de la suscripción. El parámetro item del elemento supervisado o de la suscripción asociada a attr se intenta establecer en value.
Devuelve true si la llamada asíncrona se ha realizado correctamente.
Una vez finalizada la llamada, se emite la señal monitoringStatusChanged. Esta señal contiene los parámetros modificados y el código de estado. Se genera un código de estado malo si no hay ningún elemento supervisado asociado al atributo solicitado, si la modificación del parámetro solicitado no está implementada o si el servidor ha rechazado el valor solicitado.
QOpcUaMonitoringParameters QOpcUaNode::monitoringStatus(QOpcUa::NodeAttribute attr)
Devuelve los parámetros de supervisión asociados al atributo attr. Puede utilizarse para comprobar el éxito de enableMonitoring() o si se han revisado los parámetros. Los valores devueltos sólo son válidos después de que se haya emitido enableMonitoringFinished o monitoringStatusChanged para attr. Si se consulta el estado antes de que se haya emitido una señal, QOpcUaMonitoringParameters::statusCode() devuelve BadNoEntryExists.
[signal] void QOpcUaNode::monitoringStatusChanged(QOpcUa::NodeAttribute attr, QOpcUaMonitoringParameters::Parameters items, QOpcUa::UaStatusCode statusCode)
Esta señal se emite tras finalizar una llamada asíncrona a modifyMonitoring(). El atributo del nodo para el que se solicitó la operación se devuelve en attr. items contiene los parámetros que se han modificado. statusCode contiene el resultado de la operación de modificación en el servidor.
QString QOpcUaNode::nodeId() const
Devuelve el ID del nodo OPC UA.
bool QOpcUaNode::readAttributeRange(QOpcUa::NodeAttribute attribute, const QString &indexRange)
Inicia una operación de lectura asíncrona para el atributo de nodo attribute. indexRange es una cadena que puede utilizarse para seleccionar una parte de una matriz. Se define en OPC UA 1.05 parte 4, 7.27. El primer elemento de un array es 0, "1" devuelve el segundo elemento, "0:9" devuelve los 10 primeros elementos, "0,1" devuelve el segundo elemento de la primera fila de un array bidimensional.
Devuelve true si la llamada asíncrona se ha enviado correctamente.
Los valores de los atributos sólo contienen información válida después de que se haya emitido la señal attributeRead.
bool QOpcUaNode::readAttributes(QOpcUa::NodeAttributes attributes = mandatoryBaseAttributes())
Inicia una operación de lectura asíncrona de los atributos de nodo en attributes.
Devuelve true si la llamada asíncrona se ha despachado con éxito.
Los valores de los atributos sólo contienen información válida después de que se haya emitido la señal attributeRead.
[since 6.7] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryEvents(const QDateTime &startTime, const QDateTime &endTime, QOpcUaMonitoringParameters::EventFilter &filter, quint32 numValues = 0)
Inicia una solicitud de lectura del historial de eventos para este nodo utilizando los parámetros startTime, endTime, filter y numValues. El parámetro filter es utilizado por el servidor para determinar qué eventos y qué conjunto de sus campos serán devueltos.
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. Se devuelven hasta 10 eventos 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().
QScopedPointer<QOpcUaNode> node(opcuaClient->node("ns=2;s=EventHistorian")); QVERIFY(node != nullptr);QOpcUaMonitoringParameters::EventFilter filtro; filtro<< QOpcUaSimpleAttributeOperand("Mensaje"); filter<< QOpcUaSimpleAttributeOperand("Hora");const auto response = node->readHistoryEvents(QDateTime::currentDateTime().addDays(-2), QDateTime::currentDateTime(), filter, 10);QObject::connect(respuesta, &QOpcUaHistoryReadResponse::readHistoryEventsFinished, this, [respuesta](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.
[since 6.3] QOpcUaHistoryReadResponse *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds)
Inicia una solicitud de lectura de histórico para este nodo. Se trata de 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. Lee el historial basándose en los parementers, startTime, endTime, numValues, y returnBounds.
Devuelve un QOpcUaHistoryReadResponse que contiene el estado de la solicitud si la solicitud asíncrona se ha enviado correctamente. 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 un nodo. El resultado está limitado a diez valores por nodo.
QOpcUaHistoryReadResponse *response = nodo->readHistoryRaw(QDateTime::currentDateTime(), QDateTime::currentDateTime().addDays(-2), 10, true);if (response) { QObject::connect(respuesta123, &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 *QOpcUaNode::readHistoryRaw(const QDateTime &startTime, const QDateTime &endTime, quint32 numValues, bool returnBounds, QOpcUa::TimestampsToReturn timestampsToReturn)
Inicia una solicitud de lectura del historial para este nodo. El parámetro adicional timestampsToReturn determina qué marcas de tiempo se devolverán para cada valor.
Esta función se introdujo en Qt 6.7.
bool QOpcUaNode::readValueAttribute()
Inicia una operación de lectura asíncrona del atributo Valor del nodo.
Devuelve true si la llamada asíncrona se ha realizado correctamente.
Véase también readAttributes().
bool QOpcUaNode::resolveBrowsePath(const QList<QOpcUaRelativePathElement> &path)
Resuelve la ruta de navegación path a uno o más identificadores de nodo a partir de este nodo utilizando el servicio TranslateBrowsePathsToNodeIds especificado en OPC UA 1.05 parte 4, 5.8.4.
Devuelve true si la llamada asíncrona se ha enviado correctamente.
TranslateBrowsePathsToNodeIds se utiliza principalmente para programar contra definiciones de tipo en lugar de un conjunto concreto de nodos en el espacio de direcciones de OPC UA. Por ejemplo, una definición de tipo para un modelo de máquina podría consistir en un nodo inicial con nombre de búsqueda "Máquina" que tiene un componente con nombre de búsqueda "Ventilador". El ventilador tiene un componente con nombre browse "RPM" que es un nodo Variable que contiene el valor actual de RPM del ventilador. Hay múltiples máquinas de ese tipo y cada una de ellas está mapeada en el espacio de direcciones OPC UA como un objeto del tipo máquina. Para cada uno de estos objetos máquina, la ruta desde el nodo máquina al nodo "RPM" es la misma. Si un cliente quiere leer el valor RPM actual, necesita llamar a resolveBrowsePath() con el nodo máquina como nodo inicial y la ruta de navegación desde la máquina al nodo "RPM":
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);
El resultado devuelto en resolveBrowsePathFinished() contiene el id de nodo del nodo "RPM" que puede utilizarse para acceder a los atributos del nodo:
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; } // Conectar ranuras, llamar métodos} 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)
Esta señal se emite tras finalizar una llamada a resolveBrowsePath().
QOpcUaBrowsePathTarget targets contiene las coincidencias, statusCode es el código de estado de la operación. Si statusCode no es Good, targets está vacío. La ruta de navegación path es la ruta de navegación de la solicitud. Puede utilizarse para asociar resultados a peticiones.
QDateTime QOpcUaNode::serverTimestamp(QOpcUa::NodeAttribute attribute) const
Devuelve la fecha y hora del servidor desde la última lectura o cambio de datos de attribute. Antes de que se haya emitido al menos una señal attributeRead o dataChangeOccurred, se devuelve una fecha y hora nula.
QDateTime QOpcUaNode::sourceTimestamp(QOpcUa::NodeAttribute attribute) const
Devuelve la fecha y hora de origen de la última lectura o cambio de datos de attribute. Antes de que se haya emitido al menos una señal de attributeRead o dataChangeOccurred, se devuelve una fecha y hora nula.
QVariant QOpcUaNode::valueAttribute() const
Devuelve el valor del atributo Valor del nodo.
El valor devuelto sólo es válido después de que el atributo Valor haya sido leído o escrito con éxito o después de que un cambio de datos de una monitorización haya actualizado la caché de atributos. Esto se indica mediante una señal attributeRead() o attributeWritten() con código de estado Good o una señal dataChangeOccurred() para el atributo Value.
Si no hay ningún valor en la caché de atributos, se devuelve un QVariant no válido.
Véase también readValueAttribute(), writeValueAttribute() y valueAttributeError().
QOpcUa::UaStatusCode QOpcUaNode::valueAttributeError() const
Devuelve el código de error del atributo Valor del nodo. El código de estado Good indica un valor de retorno válido para valueAttribute(). Si no hay ninguna entrada en la caché de atributos, se devuelve BadNoEntryExists.
[signal, since 6.7] void QOpcUaNode::valueAttributeUpdated(const QVariant &value)
Esta señal se emite después de que el atributo value de la caché de atributos se haya actualizado mediante una notificación de cambio de datos del servidor, una operación de lectura o escritura. value contiene el nuevo valor del atributo value.
Esta función se introdujo en Qt 6.7.
Véase también attribute(), attributeError(), serverTimestamp(), sourceTimestamp() y attributeUpdated().
bool QOpcUaNode::writeAttribute(QOpcUa::NodeAttribute attribute, const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)
Escribe value en el atributo dado en attribute utilizando la información de tipo de type. Devuelve true si la llamada asíncrona se ha enviado correctamente.
Si se omite el parámetro type, el backend intenta encontrar el tipo correcto. Se asumen los siguientes tipos por defecto:
| MetaTipo Qt | Tipo OPC UA |
|---|---|
| Bool | Booleano |
| UChar | Byte |
| Char | SByte |
| UShort | UInt16 |
| Corto | Int16 |
| Int | Int32 |
| UInt | UInt32 |
| ULongLong | UInt64 |
| LongLong | Int64 |
| Doble | Doble |
| Float | Float |
| QString | Cadena |
| QDateTime | DateTime |
| QByteArray | ByteString |
| QUuid | Guid |
bool QOpcUaNode::writeAttributeRange(QOpcUa::NodeAttribute attribute, const QVariant &value, const QString &indexRange, QOpcUa::Types type = QOpcUa::Types::Undefined)
Escribe value en el atributo dado en attribute utilizando la información de tipo de type. Para indexRange, véase readAttributeRange().
Devuelve true si la llamada asíncrona se ha enviado correctamente.
bool QOpcUaNode::writeAttributes(const QOpcUaNode::AttributeMap &toWrite, QOpcUa::Types valueAttributeType = QOpcUa::Types::Undefined)
Ejecuta una operación de escritura para los atributos y valores especificados en toWrite.
Devuelve true si la llamada asíncrona se ha enviado correctamente.
El parámetro valueAttributeType puede utilizarse para proporcionar información sobre el tipo del atributo value. Todos los demás atributos tienen tipos conocidos.
Véase también writeAttribute().
bool QOpcUaNode::writeValueAttribute(const QVariant &value, QOpcUa::Types type = QOpcUa::Types::Undefined)
Escribe value en el atributo Value del nodo utilizando la información de tipo de type.
Devuelve true si la llamada asíncrona ha sido enviada con éxito.
Véase también writeAttribute().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.