Le générateur de types de données d'Qt OPC UA
À partir de Qt 6.7, Qt OPC UA intègre 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 contenus dans des fichiers .bsd. En outre, des énumérations d’identifiants de nœuds sont générées à partir de fichiers CSV.
Le générateur est un outil en ligne de commande pouvant être contrôlé à l'aide des arguments suivants :
| Long | Court | Objectif |
|---|---|---|
| --input | -i | Fichier .bsd pour lequel tous les types énumérés et structurés qu'il contient seront générés. Peut être utilisé plusieurs fois pour générer du code pour plusieurs modèles. |
| --dependencyinput | -d | Fichier .bsd d'entrée de dépendances dans lequel seuls les types requis par une structure issue d'un fichier d'entrée transmis via l'option --input seront générés. Peut être utilisé plusieurs fois pour prendre en charge des modèles présentant des dépendances vis-à-vis de plusieurs autres modèles. |
| --nodeids | -n | Un nom et le chemin d'accès à un fichier .csv contenant les identifiants de nœuds pour lesquels générer une énumération, par exemple MyModel:/path/to/nodeids.csv => classe d'énumération MyModelNodeId. Peut être spécifié plusieurs fois. |
| --output | -o | Répertoire de sortie dans lequel les fichiers générés seront placés. |
| --prefix | -p | Le préfixe des 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 de bundle <prefix>datatypes.h et <prefix>datatypes.cpp qui incluent (#include) 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 énumérations d'identifiants de nœuds si l'option -n est spécifiée au moins une fois
- Les fichiers du bundle <prefix>datatypes.h et <prefix>datatypes.cpp si l'option -b est spécifiée
Intégration CMake
La fonction qt_opcua_generate_datatypes() prend un ou plusieurs fichiers .bsd en entrée ainsi que tous les fichiers .bsd de dépendances requis, puis appelle qopcuaxmldatatypes2cpp. Les fichiers source et d'en-tête générés sont écrits dans OUTPUT_DIR et 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 d’inclusion de la cible.
L'extrait de 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 source en incluant les deux en-têtes de niveau supérieur correspondant aux types de données et à la classe d’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.