Der Qt OPC UA Datentyp-Generator
Beginnend mit Qt 6.7 wird Qt OPC UA mit einem Datentypgenerator namens qopcuaxmldatatypes2cpp ausgeliefert, der Qt OPC UA kompatible C++ Aufzählungen und Datenklassen aus Enums und strukturierten Typen in .bsd-Dateien generiert. Als sekundäre Funktion werden Node-ID-Enums aus CSV-Dateien generiert.
Der Generator ist ein Kommandozeilenwerkzeug, das mit den folgenden Argumenten gesteuert werden kann:
Lang | Kurz | Zweck |
---|---|---|
--Eingabe | -i | Eine .bsd-Datei, für die alle enthaltenen enum- und struct-Typen generiert werden. Kann mehr als einmal verwendet werden, um Code für mehrere Modelle zu generieren. |
--dependencyinput | -d | Eine Abhängigkeitseingabe-.bsd-Datei, in der nur Typen generiert werden, die von einer Struktur aus einer mit --input übergebenen Eingabedatei benötigt werden. Kann mehr als einmal verwendet werden, um Modelle mit Abhängigkeiten zu mehreren anderen Modellen zu berücksichtigen. |
--nodeids | -n | Ein Name und der Pfad zu einer .csv-Datei mit Knoten-IDs, für die eine Enum generiert werden soll, z. B. MyModel:/path/to/nodeids.csv => enum class MyModelNodeId. Kann mehrere Male angegeben werden. |
--output | -o | Das Ausgabeverzeichnis, in dem die generierten Dateien abgelegt werden. |
--prefix | -p | Das Präfix für die generierten Datei-, Enum- und Klassennamen. Der Standardwert ist GeneratedOpcUa. |
--bundle | -b | Erzeugt die Bundle-Dateien <prefix>datatypes.h und <prefix>datatypes.cpp, die alle erzeugten Dateien #include |
Die folgenden Dateien werden für jeden Lauf erzeugt:
- Eine .h Datei, die einen Namespace mit allen aufgezählten Typen enthält
- Eine .h und eine .cpp Datei für jeden strukturierten Typ
- Eine .h und eine .cpp Datei mit den Kodierungs- und Dekodierungsmethoden
- Eine .h Datei, die die Node-ID-Enums enthält, wenn -n mindestens einmal angegeben wird
- Die Bundle-Dateien <prefix>datatypes.h und <prefix>datatypes.cpp, wenn -b angegeben wird
CMake-Integration
Die Funktion qt_opcua_generate_datatypes() nimmt eine oder mehrere Eingabe- .bsd-Dateien und alle erforderlichen Abhängigkeits- .bsd-Dateien und ruft qopcuaxmldatypes2cpp auf. Die erzeugten Quell- und Headerdateien werden nach OUTPUT_DIR geschrieben und zu dem als erstes Argument angegebenen Ziel hinzugefügt.
Das OUTPUT_DIR oder sein übergeordnetes Verzeichnis muss auch zu den Include-Verzeichnissen des Ziels hinzugefügt werden.
Der folgende CMakeLists.txt-Ausschnitt zeigt, wie der Codegenerator in ein CMake-basiertes Projekt integriert wird:
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)
Die generierten Dateien können dann in jeder Header- oder Quelldatei verwendet werden, indem die beiden Top-Level-Header für die Datentypen und die Encoder/Decoder-Klasse eingebunden werden.
#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
© 2025 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.