El generador de tipos de datos Qt OPC UA
A partir de Qt 6.7, Qt OPC UA viene con un generador de tipos de datos llamado qopcuaxmldatatypes2cpp que genera enumeraciones y clases de datos C++ compatibles con Qt OPC UA a partir de enums y tipos estructurados en archivos .bsd. Como función secundaria, se generan enumeraciones de id de nodos a partir de archivos CSV.
El generador es una herramienta de línea de comandos que puede controlarse mediante los siguientes argumentos:
| Largo | Corto | Propósito |
|---|---|---|
| -entrada | -i | Un fichero .bsd para el que se generarán todos los tipos enum y struct contenidos. Puede utilizarse más de una vez para generar código para varios modelos. |
| --dependencyinput | -d | Un fichero .bsd de entrada de dependencia en el que sólo se generarán los tipos requeridos por una estructura de un fichero de entrada pasado mediante --input. Puede usarse más de una vez para acomodar modelos con dependencias a otros modelos múltiples. |
| --nodeids | -n | Un nombre y la ruta a un archivo .csv con ids de nodos para generar un enum, por ejemplo MyModel:/ruta/a/nodeids.csv => enum class MyModelNodeId. Se puede especificar varias veces. |
| --output | -o | El directorio de salida donde se colocarán los archivos generados. |
| --prefix | -p | El prefijo para los nombres de archivo, enum y clase generados. El valor por defecto es GeneratedOpcUa. |
| --bundle | -b | Generar archivos de paquete <prefix>datatypes.h y <prefix>datatypes.cpp que #include todos los archivos generados. |
Los siguientes archivos se generan para cada ejecución:
- Un fichero .h que contiene un espacio de nombres con todos los tipos enumerados.
- Un fichero .h y otro .cpp para cada tipo estructurado
- Un archivo .h y otro .cpp con los métodos de codificación y descodificación.
- Un archivo .h con los identificadores de nodo si se indica -n al menos una vez.
- Los archivos de paquete <prefix>datatypes.h y <prefix>datatypes.cpp si se indica -b
Integración CMake
La función qt_opcua_generate_datatypes() toma uno o varios archivos .bsd de entrada y cualquier archivo .bsd de dependencia necesario e invoca qopcuaxmldatatypes2cpp. Los archivos fuente y de cabecera generados se escriben en OUTPUT_DIR y se añaden al destino especificado como primer argumento.
El directorio OUTPUT_DIR o su directorio padre también deben añadirse a los directorios de inclusión del objetivo.
El siguiente fragmento CMakeLists.txt muestra cómo integrar el generador de código en un proyecto basado en 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)Los archivos generados pueden utilizarse en cualquier cabecera o archivo fuente incluyendo las dos cabeceras de nivel superior para los tipos de datos y la clase codificador/decodificador.
#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.