본문으로 바로가기

[MATLAB 연재] 6. Simulink의 기초 2

category Software/MATLAB 2010.03.17 16:32
본 강좌에 사용되는 MATLAB은 버젼 7.9.0 (R2009b)을 대상으로 합니다.

Structure 데이터 유형 !

MATLAB도 Structure 데이터 유형을 가지고 있습니다. 닷(.)으로 표현하게 되는데요.

빈 행렬을 하나 만들고, 

 

위와 같이 입력하면

 

이렇게 structure 형태로 저장이 됩니다. 확인할때는 A.data 이렇게 호출해서 사용하게 됩니다.  나중에 simulink의 데이터를 workspace에 저장할때 사용할 거라 미리 설명합니다.^^

Fcn 블럭과 Gain 블럭 !

위 식을 simulink로 구현해서 출력 y를 확인해보도록 하죠.

복잡하게 sin블럭을 두개 꾸미지 말고 Fcn블럭을 사용해서 간단히 꾸며보는 겁니다. 위 Fcn블럭의 내용은

Fcn블럭을 더블클릭해서 위와 같이 적어주면 됩니다. u[1]은 첫번째 입력이라는 뜻인데, 우리는 입력이 하나뿐이라 그냥 u[1]이라고 적어주면 됩니다. 그러면

실행해보면 위의 결과를 얻을 수 있습니다. 다음으론 미분방정식을 한번 시뮬레이션을 해보겠습니다.

바로 위 식인데요. 이와 같은 미분방정식의 시뮬레이션은 적분기(integrator)를 사용합니다. 

위와 같이 꾸며주는 거죠. 적분기를 두개 통과한 Scope 바로 앞의 신호는 x가 되고 두 적분기 사이의 신호는 dot_x가 되는 겁니다. 위 미분방정식과 블럭의 구조가 이해가 되어야만 합니다.

Gain1 블럭의 방향이 반대죠? 저렇게 방향을 바구는 것은 Ctrl+R키를 누르거나 블럭에서 우클릭으로 나타나는 팝업에서 Rotation을 찾아가면 ClockWise라는 항목이 있습니다. 그러면 90도씩 회전합니다. 그리고 Sum 블럭을 보시면

위와 같이 "|--"로 입력했는데요. "|"기호는 빈공간입니다. 모양을 맞춰주는 거지요. 위와 같이 구현하기도 하고, 저는 위의 방법보다는

이렇게 구현하는 것을 더 좋아합니다. 제일 왼쪽의 demux블럭의 1번은 x를 2번은 dot_x를 입력하도록 하고 Fcn블럭에 넣어두는 거지요.

그리고 나서 Fcn 블럭에다 위와 같이 입력해 두면 애초 제가 의도하는 형태의 미분방정식이 완성되는 겁니다.

이 상태로 플레이버튼을 누르면, 즉 시뮬레이션을 실행하면 그냥 '0'에 가만히 있습니다.저 표시된 블럭을 더블클릭해서 초기치를

좀 주고 시뮬레이션을 해야합니다.^^

결과입니다.

Simulink 데이터의 Workspace 저장 !

Simulink에서 실행되어 생성된 데이터를 workspace에 저장하는 것은 To Workspace라는 블럭이 따로 준비되어 있습니다.

위에서처럼 연결해주고, To Workspace 블럭을 더블클릭해서 보면

저장될 변수명을 선택할 수 있는데요. 그리고 Save Format이라는 항목에서 Structure로 되어있는 부분이 보이실텐데요. 여기에 들어가서

Structure With Time으로 변경하시면 시간도 같이 저장됩니다. 그리고 다시 실행하시면

Workspace에 simout이라는 변수로된 데이터가 하나 나타났음을 볼 수 있습니다. 예가 Struct 구조에요.

내용은 위와 같구요. time이라는 변수에 시간이 signals를 다시 더블클릭해서 보시면

values에 원하는 데이터가 들어가 있습니다.

위와 같이 plot명령으로 깨끗한 그래프를 얻을 수 있습니다. 일일이 저렇게 그림을 얻는 것이 싫다면 Annotation을 이용해서 한 mdl화일에 두실 수도 있습니다. => 참조자료

그리고, To workspace 블럭보다 저는 그냥 scope의 기능을 이용하는 것을 좋아하는데요.

위에서 표시된 부분을 클릭해보시면

나타나는 창에서 Data History 탭을 선택하세요

위에 표시된 부분은 데이터의 표시개수입니다. 보통은 해제해서 사용합니다. 그리고

위의 표시된 부분을 보시면 To Workspace 블럭과 같다는 것을 확인 할 수 있습니다. 디폴트로 된 이름만 다르네요^^ 

MATLAB 06. Simulink의 기초 2.pdf


댓글을 달아 주세요

  1. 이전 댓글 더보기
  2. jun's 2011.03.31 19:13 신고

    자료 잘 보고 있습니다. 제가 3차 미분 방정식을 시뮬링크 하는데
    2sin(x(2))랑 +exp(-3t) 는 어떤 식으로 해야지 시뮬 링크에 포함대나요?

    제가 만들 식은 x(''') = 4x('')-2sin(x('))-1x+exp(-3t)
    이거 에요 (''')은 미분수..에요

    • BlogIcon PinkWink 2011.04.01 08:37 신고

      http://pinkwink.kr/272 에 보면 Fcn 블럭을 사용하는 방법이 있습니다. 그것을 이용하시면 손쉽게 구현될것입니다.

  3. jun's 2011.04.01 09:06 신고

    fcn으로 손쉽게 해결됫습니다 감사해요..
    근데 ㅠ exp(-3) 까지는 댓눈데 exp(-3*t) 을 넣을려고 하는데
    클럭으로 입력할려고 하는데 어디서 입력해야 하나요?

  4. jun's 2011.04.01 15:56 신고

    그러면 입력할때 exp(-3t)라고 해야 하나요? 아니면 exp(-3) 이라고 해야하나요? exp(-3t)라고 fcn에 입력하니깐 에러가 떠요

  5. 2011.04.12 15:45

    비밀댓글입니다

  6. Bruce 2011.05.12 14:17 신고

    안녕하세요 scope 에 입력값을 여러개 받게 할수도 있나요???
    제가 참고하고 있는 책에는 한개의 scope에 입력값을 여러개 받고 있는데 어떻게 하는지 궁금합니다~~

  7. 시뮬링 2011.09.27 00:13 신고

    안녕하세요 ㅠ
    여쭤볼게 있어서요~!?
    simulation stop time 설정을 어떻게 하는지 궁금합니다.
    숫자를 넣어 시간을 입력할 수도 있지만, 제가 원하는건
    일정 값에 도달했을 때 멈추게 하고 싶거든요.. 이럴경우 어떻게 입력을
    해줘야 하나요'?>

    • BlogIcon PinkWink 2011.09.27 18:55 신고

      앗... 글쎄요...
      그러고보니.. 저는 한번도 그런적이 없어서... 음...
      테스트를 해보면 좋겠지만,
      요즘은 블로그활동도 못할 정도로 갑자기 바빠져서 말이죠...
      도움이 되지 못해 죄송합니다.ㅠㅠ

  8. kjw4676 2011.11.10 06:55 신고

    최고에요`~

  9. junllama 2011.11.10 21:40 신고

    감사합니다 덕분에 많은거 알고갑니다^^최고에요

  10. 2011.12.22 15:11

    비밀댓글입니다

    • BlogIcon PinkWink 2011.12.26 13:43 신고

      시뮬링크에서의 FFT가 생각보다 잘 되지 않습니다.
      시뮬링크를 시간에 대해 구성하셨다면
      데이터를 모아두고, 처리하는 과정이 필요합니다.
      물론 FFT블럭이 있었던걸로 기억납니다만..
      simulink의 help에서 fft로 검색해보시면 나올거 같습니다.
      저는 사용하진 않았구요
      직접 꾸몄던적은 있습니다..
      위에서 말씀드린데로, 시간이 다 돌면 저장한 데이터를
      function으로 다시 처리하는 과정을 거쳤습니다.

  11. 초보 2012.03.05 10:52 신고

    매트랩 초보 입니다.
    혹시 simulink 상에서 figure를 띄우는 것도 가능한가요??
    제가 점이 깜박이는 figure를 만들고 싶은데 matlab상에서 get, set을 이용하여 만들었습니다.
    하지만 simulink에서는 사용을 할 수가 없네요;;ㅠㅠ

    • BlogIcon PinkWink 2012.03.05 11:38 신고

      네.. 하나의 방법이 아니라 아주 많습니다.
      단순히 fcn문에서 figure를 작성하도록 m-file을 작성하셔도 됩니다.

  12. DSP 2012.03.06 19:42 신고

    강좌 정말 잘 보고있습니다
    질문이 있는데요
    simulink에서 scope에 나오는 그림을 실시간으로 천천히 나오게 할 순 없나요?
    스코프를 열어놓고 실행을 시키면 sine wave가 나오는 과정을 내가 직접 볼수있다던지
    이런걸로 필터의 인풋과 아웃풋이 나오는걸 실시간으로 비교해보려고 하거든요

    • BlogIcon PinkWink 2012.03.07 08:34 신고

      글쎄요.. 그건 안해봐서... (사실.. 저 한테는 그럴 필요가 없었거든요ㅠㅠ)
      시간축에 대한 비교는 결과가 나온다음에 해도 되어서 말이죠

  13. 초보 2012.03.06 22:10 신고

    답변 감사드립니다. 그냥 단순히 figure를 띄우는 것은 확인이 되었습니다.
    그런데 문제점이 figure의 속성을 바꿀려니 좀 어렵네요.
    matlab에서 m파일로 만들었으나 simulink에서 적용이 안되네요.
    가능하시다면 이메일로 문의드리고 싶은데 가능한가요..ㅠㅠ
    그리고 혹시 국내에 mathworks에서는 기술지원을 하지는 않는지요?
    감사합니다.

  14. 에릭 2012.10.14 15:00 신고

    질문이 있는데요
    제어공학의 전달함수와 피드백함수 G H가 있을때 시뮬링크로 구성해보려고하는데요
    G는 트랜스폼 펑션을 이용해서 가능했는데
    만약 H 피드백 함수가 10s와 같이 s가 분모보다 큰 차수로 존재하게 될경우
    시뮬링크로 어떻게 구성해야할까요??

    G(s) = 1/ (s^2 * (s+12) ) , H(s)=Kts
    Kt=10

    위와같은 경우입니다 ㅜㅜ

  15. 에릭 2012.11.02 17:59 신고

    안녕하세요? ^^
    관련 링크들 하나하나 살펴보면서 공부하고 있는 학생입니다
    너무나도 도움이 되고 있고 정말 감사하단 말씀드리고 싶습니다
    혹시 실례가 되지 않는다면
    저도 이러한 시뮬링크랑 매틀랩 공부를 하고 싶은데
    시중에서는 이러한 관련된 책들을 구할 수 있을까요??
    따라해 보면서 공부하고 싶은데..... ~~
    혹시 추천해주실 만한 책이 있으면 알려주시면 정말로... 감사하겠습니다ㅎㅎㅎ
    현재 전기공학과 4학년 재학생이고 모터드라이브 쪽 PWM 등 이러한 제어에 대해서
    공부해보고 싶습니다 ^^
    방명록보단 댓글로 남겨야 보실 것 같아서 이곳에 남긴점 양해해 주세요 !

    • BlogIcon PinkWink 2012.11.05 09:33 신고

      MATLAB의 기초에 관한 책이라면, 사실 아무거나 괜찮던데요.^^
      요즘은 책들이 하도 잘나와서 말이죠^^

    • 에릭 2012.11.11 17:43 신고

      학생인지라 중도한번 들러봤는데
      신간 책들이 다 있더라구요 ~~
      yse24에 있는 책들 다 빌려와서
      봤는데 다들 괜찮은거같아요 ㅎㅎㅎ
      물론 어려운것도 있지만....
      코멘트 감사합니다
      자주 놀러와서 정보도 얻고 질문도 하구 그럴게요
      늦었지만 결혼 축하드려요 ~

    • BlogIcon PinkWink 2012.11.14 12:58 신고

      네.. 감사합니다. 무언가를 알아간다는건 참 즐거운 일이지요^^

  16. 누인무 2014.07.28 16:58 신고

    처음으로 Matlab을 접하는 데요
    simulink에서 m파일에 있는 코딩을 그대로 가지고 쓸 수는 없나요..?

    • BlogIcon PinkWink 2014.07.28 21:17 신고

      네.. 가능합니다. MATLAB Fuction이라는 블럭을 사용하시면 됩니다. 만약 코드까지 다 넣고 싶다면 기능의 제한이 좀 있긴하지만 embedded function 블럭을 사용하시면 됩니다.

  17. 배우는자 2015.09.21 20:19 신고

    안녕하세요. 좋은글 감사합니다 여기서 많이 배우고있는데요..
    저기의 블럭이 x'' = -2x' -x가 되는지 궁금합니다.
    FCN에서 연산되어지는 수식도 궁금하고, 그 인전에 Integrator를 이용해서 만들어진 블럭이 어떻게 저 수식이 될 수있는지 궁금합니다.

    • BlogIcon PinkWink 2015.09.22 10:34 신고

      그건 적분기때문이지요. 적분기를 두번통과한 제일 오른쪽이 x라면, 적분기를 두번 통과하기전은 ddot_x이니까요... 그리고 블럭안에 수식이 만들어 진거죠^^

  18. 동역학 2015.10.17 14:57 신고

    10초까지밖에 그래프가 안나오는데 시간 더 길게 해서 시뮬레이션 할 수는 없나요?

  19. 맛탱 2016.08.04 18:42 신고

    오 이블로그 아직도 잘관리 되고 있네요 ㅎㅎㅎ
    제가 6년전에 여기 블로그 보고서 벨런싱로봇 시뮬레이션 따라해보고
    하드웨어 설계해보고 많이 배웠었는데요 ㅎㅎㅎㅎㅎ
    질문에 답변도 잘해주시고

  20. polar 2016.11.04 09:52 신고

    안녕하세요. 여쭤볼게있어서 댓글을 남기게 되었습니다.ㅠ 저희가 시뮬링크로 이중진자 운동 방정식을 풀어서 스코프로 확인했는데 해가 theta이므로 2pi 보다는 클수가 없는데 시뮬링크 자체에서는 theta로 인식하지 않고 그냥함수값으로 인식하여 2pi 가 넘는 값이 나옵니다 혹시 이것을 해결할 방법은 없나요?

    • BlogIcon PinkWink 2016.11.04 13:01 신고

      강제로 값의 범위를 제한할 수도 있겠죠...
      그러나... 2Pi를 넘어가서 3Pi...4Pi가 되어도 보는 사람이 한바퀴돌고 다시 두바퀴돌고^^라고 생각해도 되지 않을까요?^^

    • polar 2016.11.04 13:46 신고

      혹시 그런 방법 말고는 다른방법은 없는건가요 ?ㅠㅠ

    • BlogIcon PinkWink 2016.11.04 15:45 신고

      네.. 그래프적 표현을 scope 바로 앞에서 2pi->0으로 순환하도록 다시 꾸미는 것 외에는 언듯 떠오르는 것이 없네요.ㅠㅠ

  21. 이규진 2016.11.18 18:19 신고

    안녕하세요 저는 전자공학과 학생입니다.
    MATLAB의 SIMULINK를 이용해서 파형을 출력하는 걸 공부하고 있는데요.
    SINE WAVE를 FFT(고속푸리에변환) 블럭을 사용해서 SCOPE로 출력하면 제가 원하는 모양이 안나옵니다 ㅠㅠ
    그러니까 특정 주파수에서만 툭 임펄스가 나와야 하는데.. 이런 모양이 안나옵니다.SIMULINK를 이용해서 FFT를 꼭해야하는데 시간영역이 주파수영역으로 변환된 걸 어떻게 볼 수 있는지 알려주시면 정말 감사하겠습니다.

    • BlogIcon PinkWink 2016.11.21 12:12 신고

      simulink에서 fft를 안해봤는데... 블럭이 있던가요?

      저는 workspace로 데이터를 저장해서 그 데이터를 fft로 돌리는 습관이 있어서요.ㅠㅠ.