강좌 순서

1. MATLAB 각 Window 사용법 [바로가기]
2. M-File을 사용한 기초연산법 및 데이터의 그래픽 출력 [바로가기]
3. 데이터의 3D 출력 [바로가기]
4. 조건문 및 반복문의 사용. 에러대비 [바로가기]
5. Simulink의 기초 [바로가기]
6. Simulink의 기초 2 [바로가기]
7.  Function 문의 사용 [바로가기]
8. 동역학 시뮬레이션하기 [바로가기]
9. 애니메이션 구현하기 [바로가기]
10. 애니메이션을 이용한 동역학 시뮬레이션하기 [바로가기]
11. LQR 툴박스를 사용하여 제어기 구현하기 [바로가기]
12. GUI 시작하기 - Static, Edit Text 및 Push Button [바로가기]
13. GUI - Slider 사용하기 [바로가기]
14. GUI - List Box와 Pop-up Menu [바로가기]
15. GUI - Check Box와 Radio Button [바로가기]
16. GUI - 종합 예제 [바로가기]

본 강좌에 사용되는 MATLAB은 버젼 7.9.0 (R2009b)을 대상으로 합니다.




   Simulink 실행하기 !  
 

Simulink를 실행하는 방법은 Command Window에서 "Simulink"라고 입력하거나 혹은


위에 표시된 아이콘을 누르면 됩니다. 그러면 Simulink Library가


나타나는데요. 위에 표시된 새화일 열기를 클릭하시면

 
위와 같이 작업이 가능한 창이 나타납니다. 일단 저 창에 뭘 입력하고 실행하기 전에 자주사용하는 (순전히 제가 사용하는 기준입니다...^^) 블럭들을 간단히 소개하고 시작해야겠네요. 




   Sources !  
 

Sources 폴더에는 출력만 가지는 블럭들이 모여있습니다. 

 
위에서 보시면 

- Clock : 시간을 출력해줍니다. 몇분몇초 이런 형식이 아니라 그냥 초 단위로 나타납니다.  
- From File : mat화일로 저장된 블럭에서 데이터를 가져와서 일정 시간간격으로 출력해줍니다. 
-  Signal Builder : sin과 같이 수학적으로 간단히 수식화 할 수 없는 신호를 GUI기반으로 편집할 수 있게 해줍니다. 
- Chirp Signal : 통상 system identification에서 시스템에 가하는 입력신호로 많이 사용되는 걸로 알고 있는데요. 저주파부터 고주파까지의 정현파신호를 출력으로 가집니다.
- Constant : 말 그대로 상수를 출력으로 가집니다.
- From Workspace : Workspace상에서 저장되어있는 변수를 일정시간간격에 맞춰 출력해 줍니다.
- In1 : subsystem등을 만들때 subsystem내에서 입력을 정의할 때 사용합니다.
- Signal Generator : matlab상의 function generator라고 생각하시면 됩니다. 다양한 신호를 생성할 수 있습니다. 
- Step : 원하는 시간에 step입력을 가지도록 설정할 수 있습니다.




   Sink !  
 

데이터의 출력을 어떤 형태로 표현 혹은 저장할 것인지를 정해주는 폴더입니다.


- Out1 : 위의 In1처럼 subsystem내에서 사용하는 것입니다.
- To File : 입력받은 데이터들을 mat화일 형태로 바로 저장해줍니다.
- XY Graph : X축 데이터와 Y축 데이터를 받아 그림을 그려줍니다.
- Scope : 시뮬레이션 시간을 x축으로 가지고, 주어진 신호를 y축신호로 해서 그림을 출력해 줍니다.
- To Workspace : 입력받은 데이터들을 workspace에 저장해줍니다. 


   Continuous & Discontinuities !  
 


저는 Continuous 폴더에서는 딱 두개를 참 자주 사용하는데요. 바로
미분(
미분 (derivative)
적분 (integrator) 블럭입니다. 적분블럭에는 초기치를 지정할 수 있도록 되어있습니다.


Discontinuities 폴더에서는 Saturation 블럭을 많이 사용합니다. 이 블럭은 입력받은 신호를 특정범위를 벗어날때 일정한 값을 가지도록 변환해줍니다.


   Math Operation !  
 

각종 수학 함수를 많이 가지고 있는데, 전 블럭으로 복잡하게 꾸미기 보다는 function블럭이나 embedded function 블럭을 m-file로 작성하는 버릇이 있어서 이 폴더에서는 몇가지만 사용을 합니다. 제가 자주 사용한다는 방금전의 방법은 다음에 다시 알려드리겠습니다.


- Gain : 신호에 특정한 값을 이용해 실수배를 수행합니다.
- Product : 두 개 이상의 신호를 곱해줍니다.


- Sign : 경계값(0)을 기준으로 1과 -1의 값을 가지도록 합니다.
- Sine Wave Function : 정현파 신호를 만들어 줍니다.
- Sum : 두개이상의 신호를 더해줍니다.


   User-Defined Function !  
 


말 그대로 Function문을 작성할 수 있습니다. 
- Fcn : mux를 통해 다수의 입력을 받아 그것을 이용해서 적절한 출력을 가지도록 한줄의 함수를 작성할 수 있습니다.
- MATLAB Fcn : matlab의 command window에서 실행할 수 있는 명령이라면 이 블럭에 입력해서 그 함수의 출력을 사용할 수 있게 해줍니다.
- Embedded Matlab Function : Fcn블럭은 한줄의 명령어만 사용해서 복잡한 코드의 구현이 힘들때가 있는데, 이때 MATLAB Fcn을 사용하면 됩니다. 그러나 이 블럭은 M-File을 계속 가지고 다녀야해서 어떨때는 불편할 때가 있는데, 그럴때 embedded matlab function을 사용하면 유용합니다. 그러나 이 embedded블럭은 사용상의 범위가 약간 한정적입니다.


   블럭 찾기 !  
 

처음 사용하는 분이라면, 일일이 찾아다니며 내가 필요로 하는 블럭의 위치를 알아둘 필요가 있습니다만, 저같은 경우는 대부분 블럭찾기를 통해 사용할 블럭을 찾습니다.


위에 표시된 부분에 fcn이라고 치고 엔터를 누르면

 
fcn 과 관련있는 블럭들이 검색되는데 거기서 원하는 것을 사용하는 것이지요^^ 




   간단한 예제 !  
 

이제 간단한 예제를 통해 simulink의 사용을 익혀보겠습니다.


처음에 만들었던 untitled.mdl 창에서 위 블럭을 구성하려고 한번 시도해 보시길 바랍니다. Library에서 블럭을 마우스로 왼쪽 버튼으로 누르고 새로 열린 작업창에 가져다 놓으면 됩니다. 그리고, 왼쪽 버튼으로 누르고 선을 그어 주거나, Clock 블럭을 마우스 왼쪽 버튼을 누르고 키보드에서 Ctrl키를 누르고 다음 블럭을 마우스 오른쪽 버튼을 눌러가면서 클릭하면 위 그림처럼 흐름선이 만들어 집니다.


Sine Wave Function을 더블클릭하면 위의 창이 나타나는데요. 표시된 부분을 보시면 설명이 나타나있습니다. 이걸 보고 아래의 각 성분을 수정하시면 됩니다. 지금은 그저 첫 사용에서 사용법만 익히는 것이니 그대로 두도록 하지요. 작업창의 상단에 플레이버튼이 있습니다. 그걸 누르고, Scope창을 더블클릭하시면

 
와 같은 결과를 얻을 수 있습니다. 이제 조금더 확장해서

 
위 그림처럼 미분하고 적분까지 해서 원신호와 같이 세개의 신호를 한 Scope창에서 확인해보도록 하겠습니다. 이때 사용하는 것이 mux라는 블럭입니다. 이 블럭을 library에서 가져와서 더블클릭하시면


위와 같이 나타나는데, 여기서 우리는 신호가 세개니까 "3"이라고 입력하시면 됩니다.

 
mux블럭으로 scope블럭에 두개이상의 신호를 넣은 경우 노란색이 제일 위의 신호, 그 다음이 적색, 그 다음이 청록색입니다. 그런데 화면에서 청록색, 즉 미분된 신호의 처음이 좀 이상하죠? 그것은 시뮬레이션이 시작하는 첫 단계에서 미분값이 약간 오차를 가지기 때문인데다, 지금은 설정에 auto로 잡혀있는 샘플링간격이 좀 넓게 나타나서 눈에 거슬려보이기 때문입니다. 아까도 말했지만, 지금은 뭐 그냥 한번 실행해보는 것이 목적이니까. 패쓰~~~^^ 

http://pinkwink.kr/trackback/271 관련글 쓰기
  • elgar328 2010/03/30 23:15

    쉽게 잘 설명해주셔서 연재 잘 보고 있어요 ^___^

    시뮬링크 따라 해봤는데요,, Clock 에서 SineWave 로 연결하니깐 빨간 점선으로 나오네요;;;
    그리고 SineWave에서 두갈래로 보낼려고 해도 하나는 점선으로 나오네요.. ^__^;;;

    시뮬링크 처음 해보는데,, 잘 안되네요.. ^__^;;;

    • PinkWink 2010/03/31 08:59

      얼핏 비슷해보이지만
      Source에 SineWave를 사용하신게 아닐까 합니다
      저는 Math Function에 SineWave Fcn을 사용했습니다^^

      Source의 SineWave 블럭은 출력만 있고 입력이 없는 블럭이거든요^^

  • elgar328 2010/03/31 14:25

    아,, 그렇네요.. ^___^;; ㅋㅋ 감사합니다..

    어제 처음 시작해서 밤새고 오늘 계속 하고 있는데,, 3자유도계 진동 시뮬레이션 만들어서

    돌리는데요,, 댐핑에 10^6 까지 수치를 주니깐,, 스코프에서 쭈욱~ 그리다가 다 그리고 나서는

    마지막에 0.몇초 빼고는 다 사라지더라고요... 뭐가 잘못 됬나 하고 한참 고생하다가,,

    아웃을 매트랩 파일로 뽑아주는 To File 연결해서 하니깐 수치들 안사라지고 남아있는거

    방금 확인 했어요.. 아~ 정말 힘드네요.. ^__^;;;;;

    암튼 요점은요,, 좋은 강좌 감사하다는거에요.. ㅋㅋ ^____^

    • PinkWink 2010/03/31 14:28

      에러를 발견하셔서 다행입니다.
      조금만 더 익숙해지시면
      MATLAB MATLAB자체의 사용을 위한 기술을 빼고나면 큰 어려움 없이 사용할 수 있는 Tool이랍니다^^

  • modelky 2010/05/09 02:07

    안녕하세여 여기서 좋은 정보 많이 배워가는데요 한가지 여쭤볼께 있어요
    제가 지금 프로젝트를 하고 있는데 매트랩 파일은 디버깅하면서 잘되는데
    시뮬링크는 첨이라서 잘 모르겠네요 에러가 이런식으로 나는데...Attempted to access wi1(:,1); index out of bounds because size(wi1)=[0,0]. 입력을 2개로 해서 matlab fcn을 써서 하고 있는데 이 함수 부분에서 에러가 나네요 그리고 mfile에서는 입력의 사이즈라던가 값들을 알 수 있잖아요 근데 이 시뮬링크에서는 to workspace로 해서 알 수 있는 것 같은데 값 조차 들어 가지 않는 경우에는 어떻게 알 수 있나요 ㅠㅠ

    • PinkWink 2010/05/09 21:34

      먼길 오셨는데... 정말 죄송합니다. 말씀하신 질문에 답변을 드리기가 너무 어렵습니다. 주신 정보가 너무 작고.. 제가 아는것이 너무 없어서입니다...ㅜㅜ

  • modelky 2010/05/09 02:08

    제가 생각하기에는 지금 에러가 크기가 안맞다는 것 같은데 ㅠㅠ 님 좀 갈켜주세요 급합니다

    • PinkWink 2010/05/09 21:35

      물론 에러메세지 자체는 입력 벡터의 크기를 거론합니다만, 역시 이것만 가지고 제가 답변을 뭐라 드리기 너무 어렵습니다.

  • Via 2010/06/12 14:00

    simulink를 처음 접하게 되었느데
    cos파를 입력으로 쓰고 싶을떄는 어떻게 해야하는지좀 알려주셧으면 합니다.

    • PinkWink 2010/06/12 14:32

      sin과 cos은 1/4 주기 차이가 나므로

      phase 칸에 pi/2를 입력하시면 cos이 됩니다.^^

  • Via 2010/06/12 14:59

    답변 감사드립니다 ^^

    • PinkWink 2010/06/12 16:17

      예.. 좋은 하루되세요..
      오늘 축구가 이기야할텐데 말이죠.. ㅋㅋ^^

  • Via 2010/06/13 10:48

    축구 시원하게 이겼네요 ^^
    한가지만 더 알려주세요 ;; x,y 그래프에서 선을 하나 그려 너으려고
    콘스탄트 블럭을 이용하여 x 에는[0:0.001:1]를
    y에는 [-1:0.001:0] 까지해서 넣었는데 오류가 떠서 어떻게 해야 할지 모르겠네요 ㅠ

    • PinkWink 2010/06/13 18:22

      네.. 아름답게 이기더군요.. ㅋㅋㅋㅋ
      Constant Block은 말그대로 상수값을 넣어야합니다.
      말씀하신것은 시간별로 변하게 하신거라면 잘못된블럭이 들어간거고,
      의도완달리 그걸 MATLAB은 벡터(행렬)로 취급할 것인데, 만약... 정말 벡터의 개념으로 넣으셨다면 행렬간 크기관계를 잘 고민하셔야합니다.

  • LiR 2010/08/06 00:43

    simulink로 엔코더 만들다가 하두 답답해서 문의드려봅니다...
    DAQ를 통하여 얻어지는 Digital input값이 샘플링 간격이 너무 넓어서 그런지 중간값을 계속 빼먹습니다. 혹시 시뮬링크에서 샘플링간격을 줄이는 방법을아시나요?

    • PinkWink 2010/08/06 07:37

      죄송합니다. 저는 시뮬링크를 이용한 데이터 수집을 해보지 않았습니다. 도움을 드릴 수가 없어 민망하네요^^

  • LiR 2010/08/07 12:21

    아닙니다 ^^
    매트랩에 대해서 참고할곳이 없어서 방황했었는데, 이 블로그에서 잘 배우고 있습니다. 앞으로도 좋은 강의 부탁드리겠습니다 ^^

    • PinkWink 2010/08/07 13:26

      예.. 그나마 다행입니다. 가끔은 아는것도 별로 없는데 내가 지금 블로그에다 뭘 올리는 건가.. 하는 후회가 들때도 있습니다..ㅠㅠ 그래도.. 도움이 되었다니.. 정말 다행입니다.^^

  • 조선 2010/09/20 16:31

    수중로봇 제어 시뮬레이션을 돌리는데요 .. 조류가 들어가는데..
    수중로봇에 운동역학에서 나오는 값보다 조류가 많이 크게 나와요..
    여기서 조류값이 커지면 적분기에서 에러가 뜨네요 ㅠㅠ 적분기에 초기 조건은 초기 배의 속도로 주는데 왜 에러가 날까요.. 초기 속도 말고 계산되는 속도로 입력이 되야하나요?

    • PinkWink 2010/09/21 22:08

      정말 죄송합니다. 현재 제가 뭐라 말씀드리기에는 저에게 주신 정보의 양이 너무 작습니다.ㅠㅠ

  • 조선 2010/09/25 14:15

    혹시 적분기 초기조건에 관한 자료가 있는 곳이 없을까요..

    책이랑 인터넷 헬프 보면서 초기조건을 건들어 보고 있긴한데 오류만 뜨네요 ㅠㅠ

    • PinkWink 2010/09/26 20:42

      MATLAB/Simulink 상에서 적분기에 특별히 해줘야할것이 없습니다. 저 역시도 그냥 help 기능만을 사용하는 편이구요. 오히려 시뮬레이션을 구성하다가 잘못되었을 수 있습니다. 입력이 (선이 하나라 하더라도..) 벡터나 행렬의 형태로 입력될 수도 있구요...

  • 감사 2010/10/26 13:24

    감사해요~매틀랩 하나도 모르는데 설명이 너무 잘되어있어서 이거보고 하나하나 익혀봐야겟네요 학교에서 매틀랩 숙제를 하도 많이내서 해야되는데 ㅋ

    • PinkWink 2010/10/26 14:18

      네 다행입니다. 좋은 성과있으시길 바랍니다.^^

  • 박종혁 2010/11/01 11:40

    너무 감사해요. 교수님이 무턱대고 Simulink 사용하시라기에 막막했었는데
    한줄기 빛을 찾고 갑니다 ㅎ

    • PinkWink 2010/11/01 11:50

      아마 무턱대고 시키시진 않으셨을 겁니다. 사실 저도 MATLAB을 배우게 된 계기가 수업시간에 그냥 MATLAB을 이용해보라는 교수님의 말씀이었거든요. 필요에 의해 익히게 되니 생각보다 속도가 빨라지더군요. 아무튼 화이팅입니다.^^

  • 심메카닉스! 2010/12/01 21:21

    안녕하세요! 저기 저 청록색 첨에 절케 되는거 없애는 방법 아시나요? 이계미분을 해야되는데 초기에 저 모냥이 나와서 에러가 뜨네요..

    • PinkWink 2010/12/01 21:37

      죄송합니다만.. 어디에 무엇을 말씀하시는지요??

  • 박종혁 2010/12/08 00:18

    Envelope detector를 만들기 위해
    다이오드를 사용하려 하는데요,,, 다이오드에 input과 output포트가 없는데
    어떻게 해야하는거죠? '.'?

    • PinkWink 2010/12/08 05:03

      다이오드?? 이 글에서 다이오드를 다루지 않았는데요. 어떤 다이오드를 말씀하시는건가요??

  • 불타는가슴 2011/05/10 22:18

    위에서 강의해주신 simulink를 작성하고 저장하려구하는데요.

    the model 'test1' contains characters that cannot be encoded with the model's cjaracter encoding, 'window-949'. either:~
    라는 창이 뜨면서 저장이 안되는데... 무슨 이유인지를 잘 모르겠습니다..

    • PinkWink 2011/05/11 07:57

      http://pinkwink.kr/26 를 일단 참조하시구요.
      인터넷으로 검색해보면
      MATLAB은 컴퓨터 이름, 사용자 이름 등등이 한글로 지정되어있는경우 말씀하신 에러가 나타난다고 합니다.
      저는 사실 아주 예전부터 PC이름과 네트워크이름을 영문으로 지정하는 버릇이 있어서 그 에러를 모르고 있었는데요...
      http://pinkwink.kr/26 에서 나타난대로 수행해도 에러를 잡지 못하는 경우도 많으신듯합니다.

    • 불타는가슴 2011/05/11 16:11

      감사합니당.. 일단 말씀해 주신데로

      바로 참조해 봐야겟네용 ㅎㅎ

    • PinkWink 2011/05/11 17:59

      네... 해당 글을 보시고.. 에러를 잡을 수 있으셨으면 좋겠네요...^^

  • cowncks 2011/05/28 15:16

    그런데 스코프로는 1~10 까지밖에 못보는건가요? ㅠㅠ

  • luffy 2011/06/16 05:55

    낼 셤보는데.....많은 도움 됐어요~~ 감사합니다~~^^

  • 2011/06/18 23:51

    비밀댓글입니다

    • PinkWink 2011/06/19 08:43

      simulink가 설치 되었는지 확인해보세요. MATLAB은 모듈별로 설치되는데 최초 설치시 어떤 이유에서 simulink가 선택되지 않았을 수도 있습니다.

  • 랄라 2011/06/21 14:48

    정말 쉽고 명확한 설명 감사드립니다. ~!!!!!!

  • sj 2011/08/11 23:34

    공대생에 있어서 꼭 필요한 정보 감사합니다. 덕분에 여러가지 배워갑니다.
    한 가지 질문이 있습니다만, sine wave function에서 어떻게 신호가 세 갈래로 나뉘어 나갈 수 있는 것인가요? Demux 는 써보니 계속 오류가 나고, 그냥 세 개로 나누자니 어찌해야 할 지 모르겠습니다.

  • sj 2011/08/11 23:46

    질문해놓고 죄송합니다만, 금방 해결되었습니다....^^;;

  • lake 2012/02/06 17:44

    위에 말한 샘플린간격을 줄일려면 어떻게 해야하나요???ㅜ

    • PinkWink 2012/02/07 08:30

      시뮬링크 환경설정에서 샘플링 구간을 auto에서 fixed로 바꾸시고 샘플링 시간을 입력하시면 됩니다.

  • 이명화 2012/03/28 06:48

    안녕하세요 갓 매트랩을 시작한 왕초보인데요..
    시뮬링크 누가 만든 예제 하나를 돌리려는데 분명 그사람 컴퓨터에서는 잘 돌아가는데 제 컴으로 옮기니깐 오류가 나네요. 원인을 보니까 마이크로소프트 비주얼 씨 설치에 문제가 있단식으로 뜨는데 그걸 또 따로 깔아야하는건가요??

    • PinkWink 2012/03/28 09:31

      아.. 그건 저도 잘 모르겠네요^^
      저희도 언능 MATLAB을 사야하는데.. 이게 원체 가격이...ㅠㅠ
      일단 예전 학교에 있을때 경험으론 그냥 깔았던 기억이..ㅠㅠ

  • ddolgang 2012/04/17 16:46

    올려주신글 잘보고 갑니다
    한가지 질문이 있는데 여쭤봐도 될런지요?

    WORKSPACE 블락을 불러와서 엑셀파일에서 끌어 쓰고있는데
    엑셀 파일안에 12:00:00 이런 형태의 시간은 인식하지 못하는 것인가요?

    • PinkWink 2012/04/17 18:08

      아닐겁니다. 액셀 서식에서 시간으로 맞춰주시면 인식하게 될겁니다.

  • overpower 2012/05/05 02:17

    안녕하세요. 이제 matlab 시작하는 학생으로서 정말 좋은 글이에요.
    여쭤보고싶은게 있는데요, stepfunction 에 시간을 지정하는 방법이 있을까요?

    가장 기본적인 stepfunction 은 1초부터 1의 신호를 내보내는거잖아요, 이걸 0.5초~ 2초까지만 1의 신호를 보내고 나머지에선 다시 0으로 보내는 그러한 신호로 지정할 수 있는지 여쭤보고 싶네요..

    • PinkWink 2012/05/06 11:57

      이글에 댓글을 다셨으니 simulink의 step 블럭을 말씀하시는거겠죠. simulink의 step블럭을 더블클릭해서 보시면, 원하시는데로, 시작시간이나, 수치까지도 입력할 수 있도록 되어있습니다.
      그리고, 말씀하신 또 구형파와같은 모습은 직접 fcn으로 프로그램을 짜셔도 되고, sum정도를 이용하셔서 두게의 step을 조합하셔도 됩니다.

  • oversh 2012/12/04 03:14

    과제 땜에 공부해야 헸는데 많이 도움됐습니다. 글 잘 보 고 갑 니 다.

  • jun hong 2013/05/21 00:10

    혹시 message 신호랑 반송파 carrier 블럭들이 어디있는지 알수있을까요? ㅠㅠ 찾아도 잘 안나오네요 ㅠㅠ 찾기검색해도 나오지가 않는데 ㅠㅠ 어뜩게 해야되는지 알수 있을까요? ㅠ 오늘 시뮬링크를 처음써봐서 어렵네요 ㅠㅠ

  • op 2013/05/25 20:41

    혹시 반응기 모델을 어디서 추가하는지 알수 있을까요??
    아무리 찾아도 찾을 수가 업네요. cstr반응기가 필요한데.....

    • PinkWink 2013/05/27 09:17

      lookfor나 help document에서 검색해보셔야할 듯 합니다.
      저도 잘 모른답니다.