본문 바로가기
programming language/MATLAB

Simulink From/To workspace 블록 사용하기

by __observer__ 2012. 5. 28.
반응형

Simulink 에서 소스데이터를 발생시키는 방법은 다양하게 있겠지만, 덤프 받은 데이터 등을 사용할 때 From/To workspace 블록을 주로 사용합니다.

 

From workspace 블록은 말 그대로 workspace 상의 변수를 simulink 상으로 불러 오는 것을 말하고 ~ To workspace블록은 반대로 Simulink 상에서 MATLAB workspace 로 값을 내보내는 것을 말하죠~

 

아래 예는 간단하게 Fixed step solver 에서 간단하게 Sin, cosine 값을 읽어 들여서 두 배 해서 a 라는 변수로 내보내는 예인데요.

 

 

From Workspace 창을 열어서 읽어보면 아시겠지만, 1차원 데이터에 대해서는 matrix 형태로 읽어 들여도 되지만, Multi-dimentsion 신호의 경우에는 구조체의 형태로 읽어 들여야 합니다.

 

다음과 같이 sin, cosine 값을 m 파일로 만들고 실행 시켜서 workspace 에 변수가 생성 되도록 합니다.

 

t=linspace(0,2*pi,100);

y=sin(t);

y2=cos(t);

 

time_v=0.1*[0:length(y)-1]; % 시간

 

% 구조체 부분

sin_v2.time= time_v; % time

sin_v2.signals.values=[y(:) y2(:)];        % sin,cosine 신호

sin_v2.signals.dimensions=2;               % 2 차원

 

그 담에 아래 그림처럼 From Workspace 블록을 설정해 줬습니다. Extrapolation 으로 설정 할 때는 intrerpolate data 부분에 꼭 체크를 해야 합니다. 그리고 위 코드에서 신호 구조체를 만들 때 신호의 시간을 설정 해줘야 에러가 안 납니다.

 

 

To workspace 블록은 간단하게 아래 그림처럼 설정했구요.

 

 

이제 결과로 나온 a 변수를 command 창에서 그려보면 아래 그림처럼 나옵니다. 신호의 맨 끝의 두 점을 이용하여 extrapolation 을 하기 때문에 발산하는 형태의 그림이 나오게 되죠~

 

 

그럼 이제 From workspace 블록을 Cyclic repetition 으로 설정해 볼까요? Cyclic repetition으로 설정 할 때는 일단 interpolate data 의 체크를 해제 해 줘야 합니다. 그런데 이 상태에서는 아래와 같은 에러 메시지를 받게 됩니다.

 

 

잘 읽어보면 아시겠지만, 구조체의 시간 field 를 empty time vector로 설정하라고 나옵니다.

 

즉 위 코드에서 time field 를 다음과 같이 고친 다음에 Cyclic repetition 옵션으로 실행 시켜야 에러가 나지 않습니다.

 

sin_v2.time= []; % time

 

요렇게 고치고~ 실행 시킨 후에 command 창에서 그려 보면 아래와 같은 그래프를 얻을 수가 있습니다.

 



반응형

댓글