Simulink 는 많은 경우 MATLAB script 를 사용하여 자동화를 할 수가 있습니다. 


당연히 MATLAB 코딩을 잘해야 Simulink를 자유자재로 다룰 수 있을 겁니다.


물론 그냥 노가다로 Simulink를 구현 할 수도 있지만 이렇게 하면 무수한 클릭질에 Simulink 설계가 정말 싫어 질 겁니다.


암튼 오늘은 Simulink 블록의 존재 유무를 MATLAB Command Window 에서 확인 하는 방법에 대해 소개 하려 합니다. 


Simulink 블록의 존재 유무를 확인하기 위해서는  getSimulinkBlockHandle() 함수를 사용하면 됩니다.


함수의 이름을 보면 알겠지만 Simulink 블록의 handle 을 구하는 함수 입니다.


getSimulinkBlockHandle() 함수에 대한 메뉴얼은 아래 주소에서 확인 할 수 있고~ 


https://kr.mathworks.com/help/simulink/slref/getsimulinkblockhandle.html


getSimulinkBlockHandle()을 사용하는 경우 블록이 존재하면 블록의 handle 을 return 하고, 존재하지 않으면 -1 을 return 합니다. 


따라서 아래와 같이 사용 할 수 있을 겁니다.


if (getSimulinkBlockHandle('modelname/sysname') == -1)

 % block does not exist

else

 % block exists

end


블록의 path 를 확인하는 방법은 블록을 클릭하고 MATLAB command window 에 gcb 라고 타이핑 하면 됩니다. 


아래와 같은 모델(NewModel.slx)에서 Scope 를 선택한 후에 MATLAB command window 에 gcb 라고 타이핑 하면~ 다음과 같이 path 가 나옵니다.

NewModel/Scope 

위 path 에 대해 getSimulinkBlockHandle() 함수를 사용해 보면~ 아래와 같이 handle 값이 나오는 것을 확인 할 수 있습니다.

>> getSimulinkBlockHandle('NewModel/Scope')

ans =

   1.6290e+03

  

그럼 위 모델에 없는 블록 이름을 하나 테스트 해 보죠~ 아래 결과를 보면 위 설명대로 -1 이 나오는 것을 확인 할 수 있습니다.

>> getSimulinkBlockHandle('NewModel/Scope 1')

ans =

    -1



 

오늘은 MATLAB figure 창을 클릭 했을 때 특정 동작을 하도록 하는 Button down callback function 에 대해 설명 드립니다.

 

아래 예제 코드를 보면서 설명 드리겠습니다.

 



buttondownfnc_test.m file

 

x=1:10;

y=x*2;

 

h=figure;                                     % 그림 창의 handle , h

h_plot=plot(x,y,'r:.');                       % 그래프의 handle , h_plot

grid on ;

 
% 그림 창의 button down function {@grid_ONOFF2, h_plot} 설정

set(h,
'ButtonDownFcn',{@grid_ONOFF2, h_plot})

 

 

위 예제 코드는 단순하게 y=2x 의 직선을 그리고

 

그림 창을 누르면 선이 없어지거나 다시 생기게 만드는 예제 입니다.

 

먼저 h 라는 그림 창의 핸들과 h_plot 이라는 그래프의 handle 을 얻었습니다.

 

handle 이 무언지 잘 모르겠다 하시는 분들은 자동차의 핸들을 생각하면 될 것 같습니다.

 

자동차의 핸들을 잡아야 자동차를 맘대로 할 수 있는 것처럼 ~~

 

그래프나 그림도 핸들을 통해서 맘대로 조정할 수 있는 것입니다.

 

위 코드의 grid_ONOFF2 함수는 다음과 같이 코딩 후 grid_ONOFF2.m 파일로 저장 했습니다.

 

grid_ONOFF2.m file

 

function grid_ONOFF2(~, ~, arg1)

 

persistent state;

 

if isempty(state)

state=1;

end

 

if state==1

set(arg1,'visible','off'); % 그래프를 보이지 않게

state=0;

else

set(arg1,'visible','on'); % 그래프를 보이게

state=1;

end

end 

 

grid_ONOFF2 함수의 첫 번째argument 는 함수를 호출하는 object의 handle 이 들어가게 됩니다.

 

두 번째 argument 는 호출시의 event 가 들어가게 되는데

 

위 함수에서는 첫 번째와 두 번째 argument 를 이용하지 않기 때문에 ~(물결)로 표시는 한 것입니다.

 

세 번째 argument 로 arg1 이라는 또 다른 입력을 받을 수 있게 했습니다.

 

buttondownfnc_test.m 파일에서 {@grid_ONOFF2, h_plot} 라고 되어 있는 부분의 h_plot 이라는 그래프의 핸들이 grid_ONOFF2 함수의 arg1 로 전달이 되는 겁니다.

 

위 함수 내부의 코드들은 단순히 그림 창을 한번 누르면 h_plot 을 보이게 만들고

 

그림 창을 또 한번 누르면 보이지 않게 만들고 하는 코드 입니다.

 

그럼 이제 buttondownfnc_test.m file 을 실행 시켜보죠.

 

그럼 아래 그림 같은 그래프가 나옵니다.

 

 

그럼 이제 위 그래프의 회색 부분마우스로 클릭해 보시기 바랍니다.

 

아래 그림처럼 그래프가 사라지는 것을 확인 하실 수 있을 겁니다.

 

 

재미있죠? 그럼 오늘의 포스팅은 여기서 마무리 하겠습니다.


'programming language > MATLAB' 카테고리의 다른 글

MATLAB FFT 처리 속도  (0) 2012.03.19
MATLAB varargin, varargout  (6) 2012.03.12
MATLAB GUI 창 크기 조절  (4) 2012.03.03
MATLAB GUI  (4) 2012.02.24
MATLAB figure ButtonDownFcn  (0) 2012.02.22
Simulink Algebraic Loop  (0) 2012.02.13
MATLAB dos 명령 사용하기  (0) 2011.12.21
MATLAB convolution  (0) 2011.11.20
Window command 에서 MATLAB 실행 방법  (0) 2011.11.20

+ Recent posts