Qt OPC UA 데이터 유형 생성기
Qt 6.7부터 Qt OPC UA 에는 qopcuaxmldatatypes2cpp 라는 데이터 유형 생성기가 포함되어 있으며, 이 생성기는 .bsd 파일 내의 열거형(enums) 및 구조화된 유형(structured types)을 기반으로 Qt OPC UA 와 호환되는 C++ 열거형 및 데이터 클래스를 생성합니다. 부가 기능으로, CSV 파일로부터 노드 ID 열거형도 생성됩니다.
이 생성기는 다음 인수를 통해 제어할 수 있는 명령줄 도구입니다:
| Long | Short | 용도 |
|---|---|---|
| --input | -i | 포함된 모든 열거형 및 구조체 유형에 대한 코드가 생성될 .bsd 파일입니다. 여러 모델에 대한 코드를 생성하기 위해 한 번 이상 사용할 수 있습니다. |
| --dependencyinput | -d | 의존성 입력 .bsd 파일로, --input을 통해 전달된 입력 파일의 struct에서 요구하는 타입만 생성됩니다. 다른 여러 모델에 의존성을 갖는 모델을 처리하기 위해 여러 번 사용할 수 있습니다. |
| --nodeids | -n | 열거형(enum)을 생성할 노드 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 파일이 생성됩니다
- 인코딩 및 디코딩 메서드를 포함하는 .h 파일 1개와 .cpp 파일 1개
- -n 옵션이 한 번 이상 지정된 경우, 노드 ID 열거형이 포함된 .h 파일 하나
- -b가 지정된 경우, <prefix>datatypes.h 및 <prefix>datatypes.cpp 번들 파일
CMake 통합
qt_opcua_generate_datatypes() 함수는 하나 이상의 입력 .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)생성된 파일은 데이터 유형 및 인코더/디코더 클래스에 대한 두 개의 최상위 헤더를 포함함으로써 모든 헤더 또는 소스 파일에서 사용할 수 있습니다.
#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.