Qt OPC UA データ型ジェネレータ

Qt 6.7 以降、Qt OPC UA には、Qt OPC UA と互換性のある C++ 列挙型とデータクラスを .bsd ファイルの列挙型と構造化型から生成する、qopcuaxmldatatypes2cpp というデータ型ジェネレータが付属しています。二次的な機能として、ノードID列挙型がCSVファイルから生成されます。

このジェネレーターはコマンドラインツールで、以下の引数で制御できます:

ロング短い目的
--入力-ienum型とstruct型がすべて生成される.bsdファイル。複数のモデルのコードを生成するために複数回使用することができます。
--dependencyinput-d--input経由で渡された入力ファイルから構造体が必要とする型のみが生成される依存入力.bsdファイル。他の複数のモデルに依存するモデルに対応するために、複数回使用することができます。
--nodeids-nenum を生成するノード ID を含む .csv ファイルの名前とパスを指定します。例えば、MyModel:/path/to/nodeids.csv => enum class MyModelNodeId のようになります。複数回指定できます。
--output-o生成されたファイルが置かれる出力ディレクトリ。
--プレフィックス-p生成されるファイル、列挙型、およびクラス名の接頭辞。デフォルト値はGeneratedOpcUa です。
-bundle-bバンドルファイル <prefix>datatypes.h と <prefix>datatypes.cpp を生成する。

実行ごとに以下のファイルが生成される:

  • すべての列挙型を含む名前空間を含む.h ファイル。
  • 構造化タイプごとに.h ファイルと.cpp ファイルを1つずつ。
  • エンコード・メソッドとデコード・メソッドを含む.h ファイルと.cpp ファイル。
  • nが少なくとも1回指定された場合、ノードID列挙型を含む.h
  • 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

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