[Simulink 개발] C언어로 작성된 코드를 Simulink에서 실행시키는 방법 (2)

2020. 8. 19. 19:0003. Resources/Matlab & Simulink

728x90
반응형

Simulink에서 C 함수 실행시키는 법 (2)

1. 목적

이전 포스팅에서는 하나의 디렉토리에 있는 하나의 헤더파일과 하나의 소스파일을 시뮬링크에 넣어서 실행시켰다.

그런데, 프로젝트의 사이즈가 더 커지는 경우, 여러 폴더에 있는 파일들을 참조해서 이용하게 된다.

이러한 부분에 대한 정리를 위해 이 문서를 작성한다!


2. 테스트용 소스파일 작성

여러 함수를 여러 폴더에 나누어 작성하였다. 총 3개의 폴더에서 3개의 함수를 참조하여 최상위 디렉토리에서 복합적인 연산을 처리한 결과를 출력으로 내준다.

작성한 함수

  • add
  • subtract
  • multiply

작성된 함수를 참조하여 복합적인 연산을 처리하는 함수

  • complexCalc

위의 함수들은 아래의 디렉터리 구조에 맞게 위치한다.

각각의 파일들은 아래와 같이 작성했다.

2.1.1 참조하는 소스파일 (./Test_1/Test_1_1.c)

#include "Test_1_1.h"

double add(double u1, double u2)
{
    return u1 + u2;
}

2.1.2 참조하는 헤더파일 (./Test_1/Test_1_1.h)

#ifndef _TEST_1_1_H_
#define _TEST_1_1_H_


extern double add(double u1, double u2);

#endif

2.2.1 참조하는 소스파일 (./Test_2/Test_2_1.c)

#include "Test_2_1.h"

double subtract(double u1, double u2)
{
    return u1 - u2;
}

2.2.2 참조하는 헤더파일 (./Test_2/Test_2_1.h)

#ifndef _TEST_2_1_H_
#define _TEST_2_1_H_


extern double subtract(double u1, double u2);

#endif

2.3.1 참조하는 소스파일 (./Test_3/Test_3_1.c)

#include "Test_3_1.h"

double multiply(double u1, double u2)
{
    return u1 * u2;
}

2.3.2 참조하는 헤더파일 (./Test_3/Test_3_1.h)

#ifndef _TEST_3_1_H_
#define _TEST_3_1_H_

extern double multiply(double u1, double u2);

#endif

2.4.1 시뮬링크에서 실행하는 소스파일 (./Test.c)

#include "Test.h"

double complexCalc(double u1, double u2, double u3, double u4)
{
    double tmp, tmp2, tmp3;
    tmp = add(u1,u2);
    tmp2 = subtract(tmp, u3);
    tmp3 = multiply(tmp2, u4);

    return tmp3;
}

2.4.2 시뮬링크에서 실행하는 헤더파일 (./Test.h)

#ifndef _TEST_H_
#define _TEST_H_

// 다른 디렉토리의 함수를 불러오는 부분
#include "./Test_1/Test_1_1.h"
#include "./Test_2/Test_2_1.h"
#include "./Test_3/Test_3_1.h"

// 매트랩에서 실행시킬 함수
extern double complexCalc(double u1, double u2, double u3, double u4);

#endif

3. Simulink 세팅

시뮬링크는 역시나 간단하게 만들었다. 함수를 불러와서 지정된 입력을 제공하여 결과를 보는 형식이다.

이전과 마찬가지로 C 함수를 불러오기 위해서 C caller 블락을 이용했다.

이전과 마찬가지로 직접 작성한 C 코드를 실행시키기 위해서 시뮬링크 설정을 바꿔줘야한다.

Simulation Target 탭에서 두 개의 체크박스를 모두 체크해주고, Headerfile#include "Test.h" 를 작성해준다.

이번 작업에서는 여러 디렉토리에서 함수를 참조해야하기 때문에, 이전과는 달리 Include directories 에 값을 추가해준다.

참조할 경로를 설정해줬으니, 참조할 소스파일을 Source files 탭에 추가해준다.

위와 같이 설정한 뒤에 C Caller 블락을 새로고침 해보면 아래와 같이 extern 한 함수들을 다 확인할 수 있다.


4. 결과

complexCalc 는 4개의 값을 받아서 순서대로 더하고(add), 빼고(subtract), 곱하는(multiply) 연산을 한 뒤 결과값을 출력으로 내보내주는 함수이다.

세팅한 시뮬링크에서 입력이 5,2,3,4가 들어가기 때문에 예상되는 결과 값은 아래와 같이 16이 된다.

C Caller 블락을 거쳐서 나온 결과 값은 아래와 같다.

계산한 대로 16이 나오는 것을 볼 수 있다.


5. 결론

Include directories 에 추가 주소를 넣어주고, 함수들이 작성된 파일을 참조한다면, 규모가 큰 프로젝트라도 필요한 함수들을 불러와서 빌드하고 실행시킬 수 있음을 확인했다.

반응형