Auf dieser Seite

Der Datentyp-Generator von „ Qt OPC UA “

Ab Qt 6.7 enthält „ Qt OPC UA “ einen Datentyp-Generator namens „ qopcuaxmldatatypes2cpp “, der aus Enums und strukturierten Typen in .bsd-Dateien „ Qt OPC UA “-kompatible C++-Enumerationen und Datenklassen generiert. Als sekundäre Funktion werden Knoten-ID-Enums aus CSV-Dateien generiert.

Der Generator ist ein Befehlszeilentool, das über die folgenden Argumente gesteuert werden kann:

LangKurzZweck
--input-iEine .bsd-Datei, für die alle enthaltenen Enum- und Strukturtypen generiert werden. Kann mehrfach verwendet werden, um Code für mehrere Modelle zu generieren.
--dependencyinput-dEine .bsd-Datei mit Abhängigkeiten, in der nur die Typen generiert werden, die von einer Struktur aus einer über --input übergebenen Eingabedatei benötigt werden. Kann mehrfach verwendet werden, um Modelle mit Abhängigkeiten zu mehreren anderen Modellen zu berücksichtigen.
--nodeids-nEin Name und der Pfad zu einer .csv-Datei mit Knoten-IDs, für die eine Enumeration generiert werden soll, z. B. MyModel:/path/to/nodeids.csv => Enumerationsklasse MyModelNodeId. Kann mehrfach angegeben werden.
--output-oDas Ausgabeverzeichnis, in dem die generierten Dateien abgelegt werden.
--prefix-pDas Präfix für die Namen der generierten Dateien, Enums und Klassen. Der Standardwert lautet „ GeneratedOpcUa “.
--bundle-bErzeugt die Bundle-Dateien <prefix>datatypes.h und <prefix>datatypes.cpp, die alle generierten Dateien mit #include einbinden

Bei jedem Durchlauf werden folgende Dateien generiert:

  • Eine Datei „ .h “, die einen Namespace mit allen Aufzählungstypen enthält
  • Je eine Datei „ .h “ und „ .cpp “ für jeden strukturierten Typ
  • Eine „ .h “- und eine „ .cpp “-Datei, die Kodierungs- und Dekodierungsmethoden enthalten
  • Eine „ .h “-Datei, die die Knoten-ID-Enumerationen enthält, sofern -n mindestens einmal angegeben wurde
  • 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 sowie alle erforderlichen abhängigen BSD -Dateien entgegen und ruft qopcuaxmldatatypes2cpp auf. Die generierten Quell- und Header-Dateien werden in OUTPUT_DIR geschrieben und dem als erstes Argument angegebenen Ziel hinzugefügt.

Das Verzeichnis OUTPUT_DIR oder dessen übergeordnetes Verzeichnis muss ebenfalls zu den Include-Verzeichnissen des Ziels hinzugefügt werden.

Der folgende Ausschnitt aus der Datei „CMakeLists.txt“ 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 Header der obersten Ebene 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

© 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.