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

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

728x90
반응형

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

1. 목적

C언어로 개발된 프로젝트를 simulink에서 실행시키려면 S-function을 만들어야 된다고 하는데 그냥 C를 쓸 수 있는 방법은 없을까 찾아보다가 예제파일을 발견했다.

slexCCallerExample % 시뮬링크에서 C 함수를 C Caller 함수로 불러와 이용하는 예제 파일

예제 파일을 읽어보고 내가 원하는 함수를 이용하는 방법을 테스트하면서, 설정해야하는 조건들이 여기저기에 있어서 정리를 하려고 이 문서를 작성한다!


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

두 입력을 받아서 간단하게 더해주는 함수를 작성했다.

소스파일

// Test.c

#include "Test.h"

double add(double u1, double u2) // 두 입력을 받아서 더한 값을 리턴해주는 간단한 함수
{
    return u1 + u2;
}

위에서 작성한 함수를 시뮬링크에서 C caller 함수가 인식하도록 하려면 헤더파일에서 extern으로 설정을 해줘야한다.

헤더파일

// Test.h

#ifndef _TEST_H_
#define _TEST_H_

extern double add(double u1, double u2); // 소스파일에서 만든 함수를 simulink에서도 이용할 수 있도록 extern 처리

#endif

3. Simulink 세팅

시뮬링크는 정말 간단하게 만들었다. 함수를 불러와서 결과를 보는 형식이다.

C 함수를 불러오기 위해서 C caller 블락을 이용했고, 이 블락은 아래 사진처럼 User-Defined Funcions에 있다.

해당 블락을 불러오면 맨 처음에는 아래 사진처럼 아무것도 안 떠있고, 새로고침 버튼을 눌러도 아무것도 뜨지 않는다.

새로고침을 했을 때 우리가 작성한 함수를 불러오기 위해서는 시뮬링크 configuration을 설정줘야한다.

시뮬링크의 상단 툴바에 있는 설정(톱니바퀴 모양)을 누르고 아래와 같이 Simulation target 탭으로 들어간다.

우리가 직접 작성한 코드를 추가할 것이기 때문에, Import custom codeEnable custom code analysis 체크박스를 둘 다 체크해준다.

그리고 위쪽의 Header file 부분에 위에서 작성한 Test.h 를 넣어주고
아래 쪽에 Source files 부분에 Test.c 파일을 넣어준다.

이 때 디렉터리 구조는 아래와 같이 되어있다. 그래서 Include directories 에 아무것도 넣지 않아도 된다.

 C:\Users\(username)\Documents\Test_CtoSL 디렉터리

2020-08-19  오전 10:47    <DIR>          .
2020-08-19  오전 10:47    <DIR>          ..
2020-08-19  오전 10:47    <DIR>          MatlabScriptforDebugging
2020-08-19  오전 09:43    <DIR>          slprj
2020-08-19  오전 09:47               409 Test.c
2020-08-19  오전 09:46               287 Test.h
2020-08-19  오전 09:42            25,408 untitled.slx
2020-08-19  오전 09:46            19,787 untitled.slx.autosave

위와 같이 시뮬링크 설정을 하고나서 C caller 블락에 새로고침 버튼을 누르면 내가 만든 add 라는 함수가 매칭시킬 수 있고, 매칭이 된다면 아래 사진처럼 선택이 된다.


4. 결과

간단한 더하기 함수지만 구현한 결과는 아래와 같다.

생각한 대로 4의 값이 나오는 것을 볼 수 있다.


5. 결론

Include directories 에 추가 주소를 넣어주고, Import가 필요한 파일들을 다 연결해준다면, 복잡한 프로젝트라도 실행시킬 수 있을 것 같다는 희망을 봤다.

반응형