DLT-Viewer의 샘플 플러그인으로 DltWorkdepotPlugin을 만들고, 등록하는 방법을 자세하게 설명하며, 각 화면을 캡쳐하여 설명하므로, 쉽게 따라해 보실 수 있습니다.
DLT-Viewer의 소스를 받아서 컴파일하고 실행을 시켜 보았다. (DLT-Viewer 받아서 컴파일하고 실행하자)
DLT-Viewer에서 제공하는 기능 이외에 추가적으로 필요한 기능을 Plugin을 통해서 만들어서 사용할 수 있다.
DLT 로그들 중에서 필터링을 할 수는 있지만, 예를 들어서 각 로그에 있는 값들의 변화량을 계산하거나, DLT의 Payload에 있는 내용을 분석할 수 있는 기능은 DLT-Viewer에서는 제공을 하고 있지 않다.
그래서 플러그인을 통해서 별도의 UI를 만들고, DLT-Viewer에서 선택한 메시지 하나를 세부적으로 분석하거나, 로딩된 전체 메시지에서 필요한 내용을 뽑아서 CSV 파일 등으로 저장하는 기능을 추가할 수 있다.
만드는 설명은..
DLT-Viewer 프로젝트의 doc에 있는 dlt_viewer_plugins_programming_guide.pdf 파일을 기준으로 설명한다.
예제는
DLT-Viewer 프로젝트의 plugin 아래에 dummyviewerplugin 프로젝트를 참고해 보면 동작을 알 수 있다.
이걸 예제로 자세하게 설명을 해보자.
기존의 샘플 프로젝트에서 내용을 변경해서 새로운 프로젝트로 생성할 수도 있고, 신규 서브 프로젝트를 만들 수도 있다.
기존 샘플 프로젝트는 DLT-Viewer의 소스에서 하위 plugin 폴더에 있는 dltviewerplugin과 dummy로 시작하는 플러그인을 참고하면 신규로 만들 수 있다.
새로운 Plugin 만드는 방법
여기에서 처음부터 서브 프로젝트로 만드는 법을 정리해 본다.
먼저 플러그인을 만들기 위해서는 DLT-Viewer의 Plugin 프로젝트 내에 Subproject로 추가해야 된다.
Qt Widget Application으로 서브 프로젝트를 plugin project 아래에 추가하고, 상위 프로젝트인 plugin.pro 프로젝트와 연결 시키고, 플러그 인으로 동작할 클래스를 추가하고 거기에 필요한 기능을 추가해 주어서 DLT-Viewer가 실행 될 때, 신규 플러그인이 추가/로딩 될 수 있도록 해야 한다.
[참조 플러그인 정리]
소스에 추가되어 있는 플러그인 정리한다.
이미 여러 개의 플러그인이 등록되어 있으므로, 일단 정리 좀 하고 시작한다. plugin.pro 프로젝트 파일에서, 필요한 것만 두고 정리한다.
위에서 주석처리한 부분이 원래 있던 부분으로, 주석 처리하고, dltviewerplugin만 남겨둔다.
이미 컴파일된 플러그인 결과물 정리
DLT-Viewer를 한번 컴파일해서 실행했었다면 이미 결과물들이 build 폴더 하위에 있을 것이므로, 정리하고 시작한다.
[개발디렉토리]\dlt-viewer-2.27.0\build\Qt_5_12_2_msvc2017_64-Release\release\plugins 에 있는 이미 있는 dll 파일 들을 삭제해 준다.
위와 같이 결과물이 없도록 삭제해 둔다. 컴파일하면 dltviewerplugin만 생기게 될 것이다.
[서브 프로젝트 추가하기]
서브 프로젝트를 생성하는 과정을 설명한다.
DLT-Viewer 프로젝트에서, plugin에서 우클릭 메뉴 > New subproject 를 통해서 서브 프로젝트를 추가한다.
프로젝트 만들 때, Qt Widget Application 선택하고 (> Choose...)
Name 에 dltworkdepotplugin 을 넣고, 아레에 보면, plugin 디렉토리가 선택되어 있다. (> Next)
(dltworkdepotplugin은 만들고 싶은 프로젝트 이름으로 변경하면 된다.)
Build system에 qmake를 선택 (> Next)
Class name을 Form 으로 설정하고, Base Class를 QWidget을 선택하고 Next...
Form으로 설정하는 이유는, 샘플로 등록되어 있는 다른 프로젝트들에서 모두 Form으로 생성하고 있어서,
여기서도 기존 것과 동일하게 하기 위해서 Form으로 설정한다.
별도의 Language를 설정할 것이 아니므로, <none>상태로 Next
Kit는 기본 설정되어 있는 상태에서 Next
지금까지 설정한 내용을 다시 한번 확인한다.
plugin.pro의 서브 프로젝트로 추가하고, 화면 구성하는 클래스는 Form으로 설정한다.
Finish를 선택하면, 서브 프로젝트가 생성되고, plugin 아래에 프로젝트가 생성된다.
[Main.cpp 삭제]
main.cpp는 필요 없음. 삭제한다.
[프로젝트 연결하기]
기존에 있던 dltviewerplugin.pro 파일과 생성한 dltworkdepotplugin.pro 파일을 비교해 보자.
예제에 있는 내용을 dltworkdepotplugin.pro에도 그대로 적용한다.
pro 프로젝트 파일에 global settings 추가 시키고,
build directory에 중간단계 파일 위치 지정하고
target name 설정한다. 예제에는 dltviewerplugin으로 되어 있으므로, 여기는 dltworkdepotplugin으로 수정한다.
프로젝트를 저장한다.
dltworkdepotplugin.pro 프로젝트 파일을 수정하고 저장하면 위와 같이 프로젝트가 기존 예제 프로젝트 동일하게 변경이 된다.
[DLT-VIewer와 연결하기 위한 DltWorkdepotPlugin 클래스 추가하기]
이제 서브 브로젝트를 생성하였고, 프로젝트 파일도 변경하여 연결시켰다.
DLT-Viewer에 연결하는 클래스를 만들어야 한다. 클래스를 추가하고, 관련 인터페이스를 구현한다.
신규 클래스 추가를 위해서, dltworkdepotplugin에서 우클릭해서 Add New선택한다.
New Files에서 C++ Class 선택
Class Name은 DltWorkdepotPlugin 입력, Base Class는 QObject, 추가되는 Path 확인해 보고, Next
해당 클래스는 신규로 생성된 dltworkdepotplugin.pro 프로젝트에 추가 되는지 확인한 후 Finish 선택..
프로젝트에 해당 클래스가 추가되었고, 프로젝트 파일에도 해당 클래스가 추가되었다.
[클래츠 추가 후 확인]
이제 Plugin의 하위 프로젝트에 대해서 QMake를 하고, 다시 Rebuild를 해보자.
plugin에서 우클릭해서 Run qmake, Build “plugin”을 차례로 실행하자.
컴파일 완료 후, 결과 폴더에 보면 위와 같이 결과 파일이 생성이 된다.
실행을 해보자
Ctrl + R 로 실행을 하면, 위와 같은 에러가 발생하면서 dltworkdepotplugin.dll을 로딩되지 않는다고 팝업이 표시된다.
OK 선택하면, DLT-Viewer가 실행은 되는데, Plugin에 Dlt Workdepot Plugin은 표시되지 않는다.
DLT-Viewer에 등록되는 클래스를 상속받고, 해당 함수들을 구현하지 않아서 발생한다.
[플러그인 클래스 구현]
이제 DLT-Viewer에 등록될 수 있도록 DltWorkdepotPlugin 클래스를 수정한다.
위와 같이 DltViewerPlugin 클래스와 DltWorkdepotPlugin 클래스를 비교해 보면, 하나도 구현해 주지 않았다.
위 부분을 차례로 구현해 준다.
위와 같이 QDLTPluginInterface 를 먼저 구현한다.
헤더 파일을 include하고, 구현이 필요한 함수들을 추가한다.
위 처럼 CPP에 함수들을 구현해 준다.
각 함수에서 필요한 내용은 위 주석에 추가해 두었다.
- name() 함수 : 등록될 플러그인의 이름을 넘겨주며, DLT-Viewer의 플러그인에 해당 이름이 표시된다.
- pluginVersion() 함수 : 구현하고 있는 현재 플러그인의 버전을 리턴한다. 지금은 1.0.1 로 되어 있다.
- pluginInterfaceVersion() 함수 : DLT-Viewer의 플러그인 버전을 리턴하는데, 만약 현재 구현하고 있는 DLT-Veiwer의 플러그인 버전과 다른 버전의 DLT-Viewer에 로딩하게 되면, 이 버전이 달라서 로딩이 안된다. 그래서 plugininterface.h에 있는 버전을 리턴하게 구현한다.
[실행해 보자]
구현이 1차적으로 끝났다. 실행해서 결과를 보자.
컴파일 하면 build 밑에 결과물이 생성되고, 실행하면 플러그인이 등록된다.
위 처럼 dltworkdepotplugin에 대한 결과물이 생성이 된다.
DLT-Viewer를 실행하고, Plugin을 선택해 보면,
등록한 이름인 DLT Workdepot Plugin 이 표시되고 있다.
여기서 Enabled&Not visible 은, DLTPluginInterface만 구현하였으므로, 자동 Enable은 되는데,
DLTPluginViewerInterface 를 구현하지 않았기에, 표시할 Form이 없으므로 Not Visible이 된다.
'SW Developer > DLT-Viewer' 카테고리의 다른 글
DLT-Viewer의 메시지 항목에 Context 메뉴 추가하기 (0) | 2025.03.10 |
---|---|
DLT-Viewer에서 필터 사용하기 (0) | 2025.03.09 |
DLT-Viewer 받아서 컴파일하고 실행하자 (0) | 2025.03.09 |