QOpcUaGenericStructHandler Class
Lit les types de données d'un serveur et décode/encode les structures génériques depuis/vers les objets d'extension. Plus d'informations...
| En-tête : | #include <QOpcUaGenericStructHandler> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS OpcUa)target_link_libraries(mytarget PRIVATE Qt6::OpcUa) |
| qmake : | QT += opcua |
| Depuis : | Qt 6.7 |
| Hérite : | QObject |
Types publics
| enum class | DataTypeKind { Unknown, Struct, Enum, Other } |
Fonctions publiques
| QOpcUaGenericStructHandler(QOpcUaClient *client, QObject *parent = nullptr) | |
| bool | addCustomEnumDefinition(const QOpcUaEnumDefinition &definition, const QString &typeId, const QString &name, QOpcUa::IsAbstract isAbstract = QOpcUa::IsAbstract::NotAbstract) |
| bool | addCustomStructureDefinition(const QOpcUaStructureDefinition &definition, const QString &typeId, const QString &name, QOpcUa::IsAbstract isAbstract = QOpcUa::IsAbstract::NotAbstract) |
| QOpcUaGenericStructValue | createGenericStructValueForTypeId(const QString &typeId) |
| QOpcUaGenericStructHandler::DataTypeKind | dataTypeKindForTypeId(const QString &id) const |
| std::optional<QOpcUaGenericStructValue> | decode(const QOpcUaExtensionObject &extensionObject) const |
| std::optional<QOpcUaExtensionObject> | encode(const QOpcUaGenericStructValue &value) |
| QOpcUaEnumDefinition | enumDefinitionForTypeId(const QString &id) const |
| bool | initialize() |
(since 6.7) bool | initialized() const |
| bool | isAbstractTypeId(const QString &id) const |
| QOpcUaStructureDefinition | structureDefinitionForBinaryEncodingId(const QString &id) const |
| QOpcUaStructureDefinition | structureDefinitionForTypeId(const QString &id) const |
| QString | typeIdForBinaryEncodingId(const QString &id) const |
| QString | typeNameForBinaryEncodingId(const QString &id) const |
| QString | typeNameForTypeId(const QString &id) const |
Signaux
| void | initializedChanged(bool initialized) |
Description détaillée
Le codage des données binaires utilisé dans OPC UA a été conçu dans l'optique d'un message de petite taille et ne contient aucune information sur la structure des données. Cela signifie qu'un décodeur doit connaître à l'avance la structure des données codées pour pouvoir décoder un tampon de données.
Depuis OPC UA 1.04, les nœuds de la classe de nœuds DataType peuvent avoir l'attribut DataTypeDefinition qui contient des informations sur les champs des types structurés et le mappage des valeurs de l'énumération aux noms. Avec les connaissances sur le décodage des types intégrés, cela permet à un client de décoder des types structurés génériques et personnalisés sans dépendre de connaissances extérieures.
QOpcUaGenericStructHandler parcourt la hiérarchie des types d'un serveur en suivant les références HasSubtype à partir de BaseDataType et lit l'attribut DataTypeDefinition des nœuds.
Pour les types structurés dont l'attribut DataTypeDefinition contient une valeur QOpcUaStructureDefinition, le décodage automatique des objets d'extension qui les contiennent est possible. Les champs d'un type intégré ou d'un type pour lequel il existe une classe de données C++ sont désérialisés vers le type Qt OPC UA correspondant, les autres structures génériques sont sérialisées vers un type imbriqué QOpcUaGenericStructValue. Toutes les valeurs de structures génériques imbriquées doivent avoir un QOpcUaStructureDefinition dans le serveur, sinon le décodage échoue.
Les mêmes conditions s'appliquent à l'encodage d'une structure personnalisée.
Exemple de décodage d'une structure personnalisée :
QOpcUaGenericStructHandler handler(opcuaClient) ; handler.initialize() ;QObject::connect(&handler, &QOpcUaGenericStructHandler::initializedChanged, [opcuaClient, &handler](bool initialized) { if (!initialized) return; auto node = opcuaClient->node("ns=4;i=3003") ; // Un nœud de test de structure personnalisée dans l'open62541-testserver node->readValueAttribute() ; QObject::connect(node, &QOpcUaNode::attributeRead, [node, &handler](QOpcUa::NodeAttributes attr) { if (!attr.testFlag(QOpcUa::NodeAttribute::Value) || node->valueAttributeError() != QOpcUa::UaStatusCode::Good) return; auto extObj = node->valueAttribute().value<QOpcUaExtensionObject>() ; qDebug() << "Got object of type" << handler.typeNameForBinaryEncodingId(extObj.encodingTypeId()); const auto result = handler.decode(extObj) ; if (!result) return; qDebug() << *result; }) ; }) ;
Exemple d'encodage d'une structure personnalisée :
QOpcUaGenericStructHandler handler(opcuaClient); handler.initialize(); QObject::connect(&handler, &QOpcUaGenericStructHandler::initializedChanged, [opcuaClient, &handler](bool initialized) { if (!initialized) return; QOpcUaGenericStructValue value = handler.createGenericStructValueForTypeId("ns=4;i=3006"); value.fieldsRef()["MandatoryMember"] = 23.0; value.fieldsRef()["OptionalMember"] = 42.0; const auto ext = handler.encode(value); if (!ext) return; // Use the extension object to write a node's value attribute, in a method parameter, etc... });
Membre Type Documentation
enum class QOpcUaGenericStructHandler::DataTypeKind
Ce type d'énumération spécifie le type de données d'un nœud de type de données.
| Constante | Valeur | Description du type de nœud |
|---|---|---|
QOpcUaGenericStructHandler::DataTypeKind::Unknown | 0 | L'identifiant du nœud de type est inconnu. |
QOpcUaGenericStructHandler::DataTypeKind::Struct | 1 | L'identifiant du nœud de type appartient à un type structuré. |
QOpcUaGenericStructHandler::DataTypeKind::Enum | 2 | L'identifiant du noeud de type appartient à un type enum. |
QOpcUaGenericStructHandler::DataTypeKind::Other | 3 | L'identifiant du noeud de type appartient à un type qui n'est pas un struct ou un enum (autres types intégrés ou leurs sous-types). |
Documentation des fonctions membres
[explicit] QOpcUaGenericStructHandler::QOpcUaGenericStructHandler(QOpcUaClient *client, QObject *parent = nullptr)
Construit un gestionnaire de structure générique pour client.
bool QOpcUaGenericStructHandler::addCustomEnumDefinition(const QOpcUaEnumDefinition &definition, const QString &typeId, const QString &name, QOpcUa::IsAbstract isAbstract = QOpcUa::IsAbstract::NotAbstract)
Ajoute la définition de l'enum personnalisé definition aux types connus. Ceci peut être utilisé pour prendre en charge des structures personnalisées pour lesquelles le serveur n'expose pas de StructureDefinition. Les paramètres definition, typeId et name sont nécessaires pour un décodage et un encodage corrects. Si isAbstract est défini, le type ne peut pas être encodé et décodé.
Retourne true si la définition de l'enum a été ajoutée avec succès.
bool QOpcUaGenericStructHandler::addCustomStructureDefinition(const QOpcUaStructureDefinition &definition, const QString &typeId, const QString &name, QOpcUa::IsAbstract isAbstract = QOpcUa::IsAbstract::NotAbstract)
Ajoute la définition de la structure personnalisée definition aux types connus. Ceci peut être utilisé pour prendre en charge des structures personnalisées pour lesquelles le serveur n'expose pas de StructureDefinition. Les paramètres definition, typeId et name sont nécessaires pour un décodage et un encodage corrects. Si isAbstract est défini, le type ne peut pas être encodé et décodé.
Retourne true si la définition de structure a été ajoutée avec succès.
QOpcUaGenericStructValue QOpcUaGenericStructHandler::createGenericStructValueForTypeId(const QString &typeId)
Renvoie une valeur de structure générique pré-remplie avec la définition de la structure, l'identifiant du type et le nom du type correspondant à typeId. Pour tous les champs obligatoires, un placeholder invalide QVariant sera inséré.
QOpcUaGenericStructHandler::DataTypeKind QOpcUaGenericStructHandler::dataTypeKindForTypeId(const QString &id) const
Renvoie le type de données pour le nœud de type id id.
std::optional<QOpcUaGenericStructValue> QOpcUaGenericStructHandler::decode(const QOpcUaExtensionObject &extensionObject) const
Décode extensionObject en QOpcUaGenericStructValue. Si le décodeur échoue, std::nullopt est renvoyé.
std::optional<QOpcUaExtensionObject> QOpcUaGenericStructHandler::encode(const QOpcUaGenericStructValue &value)
Retourne value encodé en QOpcUaExtensionObject, ou std::nullopt si la valeur n'a pas pu être encodée.
QOpcUaEnumDefinition QOpcUaGenericStructHandler::enumDefinitionForTypeId(const QString &id) const
Renvoie l'adresse QOpcUaEnumDefinition pour le nœud de type id id. Si l'identifiant du nœud est inconnu ou n'appartient pas à un type enum, une valeur construite par défaut est renvoyée.
bool QOpcUaGenericStructHandler::initialize()
Démarre la traversée de la hiérarchie des types de données. Le succès ou l'échec est signalé dans le signal initializedChanged.
Retourne false si l'opération ne peut pas être lancée.
[since 6.7] bool QOpcUaGenericStructHandler::initialized() const
Renvoie true si le gestionnaire de structure générique est initialisé.
Cette fonction a été introduite dans Qt 6.7.
[signal] void QOpcUaGenericStructHandler::initializedChanged(bool initialized)
Ce signal est émis lorsque le processus d'initialisation est terminé. initialized indique si l'initialisation a réussi.
bool QOpcUaGenericStructHandler::isAbstractTypeId(const QString &id) const
Retourne vrai si le type de données décrit par id est abstrait.
QOpcUaStructureDefinition QOpcUaGenericStructHandler::structureDefinitionForBinaryEncodingId(const QString &id) const
Renvoie l'adresse QOpcUaStructureDefinition pour l'identifiant de nœud d'encodage binaire id. Si l'identifiant du nœud est inconnu ou n'appartient pas à un type struct, une valeur construite par défaut est renvoyée.
QOpcUaStructureDefinition QOpcUaGenericStructHandler::structureDefinitionForTypeId(const QString &id) const
Renvoie l'adresse QOpcUaStructureDefinition pour le nœud de type id id. Si l'identifiant du nœud est inconnu ou n'appartient pas à un type struct, une valeur construite par défaut est renvoyée.
QString QOpcUaGenericStructHandler::typeIdForBinaryEncodingId(const QString &id) const
Renvoie l'identifiant du nœud de type associé à l'identifiant de codage binaire id.
QString QOpcUaGenericStructHandler::typeNameForBinaryEncodingId(const QString &id) const
Renvoie le nom du type appartenant à l'id de nœud de codage binaire id. Si l'identifiant du nœud est inconnu ou n'appartient pas à un type struct, une chaîne vide est renvoyée.
QString QOpcUaGenericStructHandler::typeNameForTypeId(const QString &id) const
Renvoie le nom du type appartenant à un nœud de type de données identifié par l'id de nœud de type id. Si l'identifiant du nœud est inconnu, une chaîne vide est renvoyée.
© 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.