반응형

Simulink 로 만든 모델을 코드로 떨어뜨려서 사용할 때가 있다.

근데 Simulink에서 지원하는 기능의 헤더가 안나온다.

어떻게 해야될까? [1]

 

문제 기술 Problem Statement

Simulink 모델을 코드 생성을 하면 [MODEL].cpp와 [MODEL].h 가 생성된다.

만든 Simulink 모델에서 사용하는 블록에 따라서 simulink의 헤더를 사용하게 된다.

예를 들면 Integrator 블록의 경우, Continuous-time을 지원하므로 코드 생성 시, [MODEL].h에 rtw_continous.h를 포함한다.

그런데 코드 생성을 누르면 continous-time 헤더(rtw_continuous.h)가 생성되지 않는 경우가 있다.

심지어 Code Generation Report를 보면 Utility Files으로 떨어져있지도 않다.

 

Continous-time 지원은 어떻게 함?

Continous-time을 지원하도록 하려면 다음 창을 보자.

Simulink 모델 -> / -> Configuration Parameter -> Code Gen. -> Interface -> / -> Software Environment

보면 floating-point numbers, non-finite numbers, complex numbers, absolute time, continous time, variable-size signals 등의 총 6가지 체크 박스가 있는데 continuous time을 체크해주면 된다.

소프트웨어 환경 체크하는 항목

이를 체크해주지 않으면 Continous-time domain으로 되어있는 블록을 사용하기가 힘들다. (Integrator, Derivative 등)

그렇다면 모두 Discrete 블록으로 변환해주어야 하는데, 여간 귀찮은게 아니다.

 

해결 방법 How to deal with it? [2-3]

다음 창으로 가보자.

Simulink 모델 -> / -> Model Configuration Parameter -> Code Gen. -> / -> Build Process

그러면 선택지가 Generate code only, Package code and artifacts 가 있는데,

여기서 Package code and artifacts를 체크해서 코드와 리포트들을 압축, 생성하도록 하면 된다.

떨어진 압축 파일을 열어보면 다음과 같이 Simulink의 헤더를 별도로 떨어뜨려주는 것을 볼 수 있다.

 

Simulink 지원 헤더가 떨어져 나온다.

 

만약에 생성한 코드를 다른 시스템에서 빌드하는게 아닌, 동일한 시스템에서 구동한다면

아래 주소에 header가 존재하니 Visual Studio 같은 통합개발환경에 include path 로 추가해주면 된다.[1]

 

\${MATLAB_ROOT}\${MATLAB_VERSION}simulink\include\

 

 

Reference

[1] freccia and Arnaud Miege "rtw_continuous.h and rtw_solver.h not created," https://comp.soft-sys.matlab.narkive.com/GaDtndoQ/rtw-continuous-h-and-rtw-solver-h-not-created 

[2] Massimiliano Curti and GianCarlo, "Simulink Coder GRT Target C Code integration," https://www.mathworks.com/matlabcentral/answers/113443-simulink-coder-grt-target-c-code-integration

[3] MathWorks, "Configure Toolchain or Template Makefile Build Process," https://uk.mathworks.com/help/rtw/ug/program-builds.html#bqufw6y

 

728x90

+ Recent posts