Le générateur de type de données Qt OPC UA
À partir de Qt 6.7, Qt OPC UA est livré avec un générateur de types de données nommé qopcuaxmldatatypes2cpp qui génère des énumérations et des classes de données C++ compatibles avec Qt OPC UA à partir d'énumérations et de types structurés dans des fichiers .bsd. Une fonction secondaire consiste à générer des énumérations d'identifiants de nœuds à partir de fichiers CSV.
Le générateur est un outil en ligne de commande qui peut être contrôlé par les arguments suivants :
| Long | Court | Objectif |
|---|---|---|
| --input | -i | Un fichier .bsd pour lequel tous les types enum et struct contenus seront générés. Peut être utilisé plusieurs fois pour générer du code pour plusieurs modèles. |
| --dependencyinput | -d | Un fichier .bsd d'entrée de dépendance dans lequel seuls les types requis par une structure provenant d'un fichier d'entrée passé via --input seront générés. Peut être utilisé plus d'une fois pour accommoder les modèles avec des dépendances vers plusieurs autres modèles. |
| --nodeids | -n | Un nom et le chemin vers un fichier .csv avec les identifiants de noeuds pour générer une énumération, par exemple MyModel:/path/to/nodeids.csv => enum class MyModelNodeId. Peut être spécifié plusieurs fois. |
| --output | -o | Le répertoire de sortie où les fichiers générés seront placés. |
| --prefix | -p | Le préfixe pour les noms de fichiers, d'énumérations et de classes générés. La valeur par défaut est GeneratedOpcUa. |
| --bundle | -b | Génère les fichiers bundle <prefix>datatypes.h et <prefix>datatypes.cpp qui #incluent tous les fichiers générés. |
Les fichiers suivants sont générés à chaque exécution :
- Un fichier .h contenant un espace de noms avec tous les types énumérés
- Un fichier .h et un fichier .cpp pour chaque type structuré
- Un fichier .h et un fichier .cpp contenant les méthodes d'encodage et de décodage.
- Un fichier .h contenant les enums d'identification des nœuds si -n est donné au moins une fois.
- Les fichiers bundle <prefix>datatypes.h et <prefix>datatypes.cpp si -b est donné.
Intégration de CMake
La fonction qt_opcua_generate_datatypes() prend un ou plusieurs fichiers .bsd en entrée et tous les fichiers .bsd de dépendance nécessaires et invoque qopcuaxmldatypes2cpp. Les fichiers source et d'en-tête générés sont écrits dans OUTPUT_DIR et sont ajoutés à la cible spécifiée comme premier argument.
Le répertoire OUTPUT_DIR ou son répertoire parent doit également être ajouté aux répertoires include de la cible.
L'extrait CMakeLists.txt suivant montre comment intégrer le générateur de code dans un projet basé sur CMake :
find_package(Qt6 REQUIRED COMPONENTS Core OpcUa)
qt_standard_project_setup()
qt_add_executable(my_codegen
mycodegen.cpp
)
qt_opcua_generate_datatypes(
my_codegen # The target to add the generated files to
INPUT_BSD "${CMAKE_CURRENT_SOURCE_DIR}/mymodel.bsd" # Must be set at least once if INPUT_CSV_MAP is not set
INPUT_BSD "${CMAKE_CURRENT_SOURCE_DIR}/myothermodel.bsd"
DEPENDENCY_BSD "${CMAKE_CURRENT_SOURCE_DIR}/mydependency.bsd" # Optional
INPUT_CSV_MAP "MyModel:${CMAKE_CURRENT_SOURCE_DIR}/mymodel.csv" # Must be set at least once if INPUT_BSD is not set
INPUT_CSV_MAP "MyOtherModel:${CMAKE_CURRENT_SOURCE_DIR}/myothermodel.csv"
PREFIX "GeneratedOpcUa" # Mandatory
OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/generated" # Mandatory
)
target_include_directories(my_codegen
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}
)
target_link_libraries(my_codegen PRIVATE Qt6::Core Qt6::OpcUa)Les fichiers générés peuvent ensuite être utilisés dans n'importe quel fichier d'en-tête ou fichier source en incluant les deux en-têtes de premier niveau pour les types de données et la classe de l'encodeur/décodeur.
#include <generated/generatedopcuabinarydeencoder.h> // If INPUT_BSD was set #include <generated/generatedopcuadatatypes.h> // If INPUT_BSD was set #include <generated/generatedopcuanodeids.h> // If INPUT_CSV_MAP was set
© 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.