Qt OPC UA のデータ型ジェネレータ
Qt 6.7以降、Qt OPC UA には「qopcuaxmldatatypes2cpp 」というデータ型ジェネレータが搭載されており、.bsdファイル内の列挙型や構造化型から、Qt OPC UA と互換性のあるC++の列挙型およびデータクラスを生成します。副次的な機能として、CSVファイルからノードIDの列挙型が生成されます。
このジェネレータはコマンドラインツールであり、以下の引数で制御できます:
| Long | 概要 | 目的 |
|---|---|---|
| --input | -i | 含まれるすべての列挙型および構造体型についてコードが生成される .bsd ファイル。複数のモデル用のコードを生成するために、複数回指定可能です。 |
| --dependencyinput | -d | 依存関係入力用の .bsd ファイル。ここでは、--input 経由で渡された入力ファイル内の struct が要求する型のみが生成されます。他の複数のモデルに依存するモデルに対応するため、複数回使用できます。 |
| --nodeids | -n | 列挙型を生成するためのノード ID が記載された .csv ファイルの名前とパス。例: MyModel:/path/to/nodeids.csv => 列挙型クラス MyModelNodeId。複数回指定可能です。 |
| --output | -o | 生成されたファイルが配置される出力ディレクトリ。 |
| --prefix | -p | 生成されるファイル、列挙型、およびクラス名のプレフィックス。デフォルト値はGeneratedOpcUa です。 |
| --bundle | -b | 生成されたすべてのファイルを #include するバンドルファイル <prefix>datatypes.h および <prefix>datatypes.cpp を生成します |
実行のたびに、以下のファイルが生成されます:
- すべての列挙型を含む名前空間を定義した.h ファイルが 1 つ
- 構造化型ごとに、.h ファイルと.cpp ファイルをそれぞれ1つ生成します
- エンコードおよびデコードメソッドを含む.h ファイルと.cpp ファイルを各構造化型につき1つ
- -n が少なくとも 1 回指定された場合、ノード ID の列挙型を含む.h ファイルが 1 つ
- -bが指定された場合、バンドルファイル<prefix>datatypes.hおよび<prefix>datatypes.cpp
CMake との統合
qt_opcua_generate_datatypes()関数は、1 つまたは複数の入力.bsdファイルと、必要な依存.bsdファイルを受け取り、qopcuaxmldatatypes2cpp を呼び出します。 生成されたソースファイルおよびヘッダーファイルはOUTPUT_DIRに書き込まれ、最初の引数として指定されたターゲットに追加されます。
また、OUTPUT_DIRまたはその親ディレクトリも、ターゲットのインクルードディレクトリに追加する必要があります。
以下のCMakeLists.txtのスニペットは、コードジェネレータを 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)生成されたファイルは、データ型およびエンコーダ/デコーダクラス用の 2 つのトップレベルヘッダーをインクルードすることで、任意のヘッダーファイルやソースファイルで使用できます。
#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.