본문으로 바로가기

[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

신고