Main Content

프로그래밍 방식 모델링 기본 사항

MATLAB® 명령 창에서 모델 만들기, 모델에 블록 추가, 파라미터 설정 같은 대부분의 Simulink® 모델링 기본 작업을 프로그래밍 방식으로 수행할 수 있습니다. 이 예제에서는 이러한 명령 중 일부와 이를 사용하는 방법을 보여줍니다.

모델 불러오기

모델을 불러오면 메모리로 모델을 가져오지만 편집할 수 있도록 모델이 Simulink 편집기에서 열리지는 않습니다. 모델을 불러온 후 프로그래밍 방식으로 모델로 작업할 수 있습니다. 모델을 연 경우에만 Simulink 편집기를 사용하여 모델을 편집할 수 있습니다.

시스템을 불러오려면 load_system 명령을 사용하십시오.

예를 들어 MATLAB 경로에 myModel이라는 모델이 있다고 가정하겠습니다. 모델을 불러오려면 MATLAB 명령 창에 다음 명령을 입력하십시오.

load_system('myModel')

모델 만들기 및 파라미터 설정 지정하기

모델을 만들고 선호하는 설정을 사용하는 함수를 작성할 수 있습니다. 예를 들어, 다음 함수는 배경이 녹색이고 ode3 솔버를 사용하는 모델을 만듭니다.

function new_model(modelname) 
% NEW_MODEL Create a new, empty Simulink model
%    NEW_MODEL('MODELNAME') creates a new model with
%    the name 'MODELNAME'. Without the 'MODELNAME'
%    argument, the new model is named 'my_untitled'.

if nargin == 0 
     modelname = 'my_untitled';
end 

% create and open the model
open_system(new_system(modelname));

% set default screen color
set_param(modelname,'ScreenColor','green');

% set default solver
set_param(modelname,'Solver','ode3');

% save the model
save_system(modelname);

모델을 열 때 프로그래밍 방식으로 변수 불러오기

블록 파라미터 값으로 변수를 할당하는 경우 모델에 변수의 값을 정의해야 합니다. set_param 함수에 PreloadFcn 콜백을 사용하여 프로그래밍 방식으로 변수를 정의할 수 있습니다. 이 함수는 다음과 같은 형식으로 사용합니다.

set_param('mymodel','PreloadFcn','expression')

expression은 MATLAB 명령 또는 MATLAB 검색 경로의 MATLAB 스크립트입니다. 이 명령은 모델 PreloadFcn 콜백을 사용자가 지정한 값으로 설정합니다. 설정을 저장하려면 모델을 저장하십시오.

예를 들어, 모델 modelname.slx에 대해 MATLAB 스크립트 loadvar.m에 변수를 정의하는 경우 다음 명령을 사용합니다.

set_param('modelname','PreloadFcn','loadvar')
변수 K에 값 15를 할당하려면 다음 명령을 사용하십시오.

set_param('modelname','PreloadFcn','K=15')

모델을 저장한 후 다음에 모델을 열 때 PreloadFcn 콜백이 실행됩니다.

프로그래밍 방식으로 블록을 추가하고 연결하기

이 예제에서는 함수를 사용하여 프로그래밍 방식으로 블록을 추가하고 연결하는 방법을 보여줍니다. 블록을 모델에 추가한 후 세 가지 방법, 즉 라우팅 선, port 핸들, 포트 ID를 사용하여 블록을 연결할 수 있습니다. 라우팅 선을 사용하면 모든 연결 선분 끝점의 정확한 (x,y) 좌표를 지정할 수 있습니다. port 핸들과 포트 ID를 사용하면 포트 위치 좌표를 모르는 상태에서도 선을 블록 포트에 연결할 수 있습니다.

빈 모델 ‘mymodel’을 만들어 엽니다.

서브시스템 블록을 포함한 블록을 추가합니다. set_param 함수에 position 배열을 사용하여 블록의 크기와 위치를 설정합니다. (x,y) 좌표를 사용하여 블록의 왼쪽 위 코너와 오른쪽 아래 코너를 설정합니다.

add_block('simulink/Sources/Sine Wave','mymodel/Sine1');
set_param('mymodel/Sine1','position',[140,80,180,120]);
add_block('simulink/Sources/Pulse Generator','mymodel/Pulse1');
set_param('mymodel/Pulse1','position',[140,200,180,240]);
add_block('simulink/Ports & Subsystems/Subsystem','mymodel/Subsystem1');
set_param('mymodel/Subsystem1','position',[315,120,395,200]);
add_block('simulink/Sinks/Scope','mymodel/Scope1');
set_param('mymodel/Scope1','position',[535,140,575,180]);

Subsystem1 내에서 In1Out1 사이의 디폴트 연결을 삭제합니다. 또한 블록 라이브러리에서 In1을 복사한 후 이름을 변경하여 두 번째 입력 포트를 추가합니다.

delete_line('mymodel/Subsystem1','In1/1','Out1/1');
add_block('simulink/Sources/In1','mymodel/Subsystem1/In2');

Subsystem1 내에서 내부 입력 및 출력 포트 블록을 재배치합니다.

set_param('mymodel/Subsystem1/In1','position',[50,50,90,70]);
set_param('mymodel/Subsystem1/In2','position',[50,130,90,150]);
set_param('mymodel/Subsystem1/Out1','position',[500,80,540,100]);

Subsystem1 내에 Add 블록을 삽입한 후 배치합니다.

add_block('simulink/Math Operations/Add','mymodel/Subsystem1/Add1');
set_param('mymodel/Subsystem1/Add1','position',[250,80,290,120]);

다음으로, 선을 추가하여 모델의 모든 블록을 연결합니다. 먼저 라우팅 선을 사용하여 Sine1 블록과 Pulse1 블록을 연결합니다.

Sine1 출력 포트의 (x,y) 좌표를 구합니다.

Sine1_Port = get_param('mymodel/Sine1','PortConnectivity')

Sine1_Port = 

  struct with fields:

        Type: '1'
    Position: [185 100]
    SrcBlock: []
     SrcPort: []
    DstBlock: [1×0 double]
     DstPort: [1×0 double]

get_param은 포트 위치가 [185 100]임을 보여줍니다.

Pulse1 출력 포트의 (x,y) 좌표를 구합니다.

Pulse1_Port = get_param('mymodel/Pulse1','PortConnectivity')

Pulse1_Port = 

  struct with fields:

        Type: '1'
    Position: [185 220]
    SrcBlock: []
     SrcPort: []
    DstBlock: [1×0 double]
     DstPort: [1×0 double]

get_param은 포트 위치가 [185 220]임을 보여줍니다.

라우팅 선의 3개 선분을 사용하여 Sine1의 출력을 Subsystem1의 첫 번째 입력에 연결합니다.

add_line('mymodel', [185 100; 275 100]);
add_line('mymodel', [275 100; 275 140]);
add_line('mymodel', [275 140; 310 140]);

라우팅 선의 3개 선분을 사용하여 Pulse1의 출력을 Subsystem1의 두 번째 입력에 연결합니다.

add_line('mymodel', [185 220; 275 220]);
add_line('mymodel', [275 220; 275 180]);
add_line('mymodel', [275 180; 310 180]);

get_param을 사용하여, 연결되는 블록의 port 핸들을 가져옵니다. 그런 다음, 블록 port 핸들을 사용하여 Subsystem1의 출력을 Scope1의 입력에 연결합니다.

SubsysPortHandles = get_param('mymodel/Subsystem1','PortHandles');
ScopePortHandles = get_param('mymodel/Scope1','PortHandles');
add_line('mymodel',SubsysPortHandles.Outport(1),...
ScopePortHandles.Inport(1));

포트 이름과 포트 ID를 사용하여 Subsystem1 내의 Add1 블록을 서브시스템 입력 및 출력에 연결합니다. Simulink는 최단 경로를 사용하여 포트를 연결합니다.

add_line('mymodel/Subsystem1','In1/1','Add1/1');
add_line('mymodel/Subsystem1','In2/1','Add1/2');
add_line('mymodel/Subsystem1','Add1/1','Out1/1');

프로그래밍 방식으로 블록을 주석 처리하거나 통과형 주석 처리하기

블록의 주석 처리된 상태를 프로그래밍 방식으로 보거나 변경하려면 get_paramset_param 명령을 사용하십시오.

  • 블록의 주석 처리된 상태를 보려면 다음을 입력하십시오.

    get_param(gcb,'commented');

  • 블록을 주석으로 처리하려면 다음을 입력하십시오.

    set_param(gcb,'commented','on');

  • 블록을 통과형 주석으로 처리하려면 다음을 입력하십시오.

    set_param(gcb,'commented','through');

  • 블록의 주석을 해제하려면 다음을 입력하십시오.

    set_param(gcb,'commented','off');

프로그래밍 방식으로 신호 이름 지정하기

  1. 신호 선의 소스인 블록을 선택합니다.

  2. get_param을 사용하여 현재 선택된 블록의 port 핸들을 변수 p에 할당합니다. get_param을 사용하여 이 포트에 연결된 선의 핸들을 변수 l에 할당합니다. 그런 다음, 신호 선의 이름을 's9'로 설정합니다.

p = get_param(gcb,'PortHandles')
l = get_param(p.Outport,'Line')
set_param(l,'Name','s9')

자동으로 모델 레이아웃 정렬하기

Simulink.BlockDiagram.arrangeSystem 명령을 사용하여 모델의 레이아웃을 설정할 수 있습니다. 이 명령은 입력 블록을 왼쪽에, 출력 블록을 오른쪽에, 모델 요소를 입력과 출력 사이의 열에 정렬합니다. 이 명령은 한 번에 하나의 계층에만 영향을 미칩니다.

Simulink.BlockDiagram.routeLine 명령을 사용하여 모델에서 기존 선을 라우팅할 수 있습니다. 기존 선을 라우팅하면 선 라우팅이 더 나은 형태로 조정되고 모델에서 어느 한 선이 다른 선이나 장애물과 중첩되는 것을 피할 수 있습니다.

열려 있는 모든 모델에 이러한 명령을 사용할 수 있지만 프로그래밍 방식으로 빌드하는 모델에 특히 유용합니다. 예제는 Arrange Programmatically Populated Model 항목을 참조하십시오.

여러 창에서 동일한 모델 열기

모델을 열면 Simulink 편집기 창에 모델이 표시됩니다. 예를 들어, 하나의 모델이 열려 있는 상태에서 두 번째 모델을 열면 두 번째 모델은 두 번째 창에 표시됩니다.

두 Simulink 편집기 창에서 동일한 모델을 열려면 MATLAB 명령 프롬프트에서 open_system 명령을 입력하고 window 인수를 사용하십시오. 예를 들어, modelName이라는 모델이 열려 있는 상태에서 modelName의 또 다른 인스턴스를 열려면 다음을 입력하십시오.

open_system('modelName','window')

모델 파인더를 사용하여 모델을 인덱싱 및 검색하고 검색 가능성 높이기

modelfinder 함수를 사용하여 여러 데이터베이스에서 예제, 모델, 프로젝트를 검색할 수 있습니다. 기본적으로 modelfinderMathWorks® Examples 데이터베이스를 검색합니다. 모델 파인더로 데이터베이스를 구성할 수도 있습니다. 모델 파인더에 대한 자세한 내용은 Configure and Search Databases 항목을 참조하십시오.

강조 표시를 사용하여 다이어그램 요소 찾기

열려 있는 모델에서 블록, 선, 포트 또는 주석을 강조 표시하려면 hilite_system을 사용하십시오.

프로그래밍 방식으로 색 지정하기

MATLAB 명령줄 또는 MATLAB 프로그램에서 set_param 명령을 사용하여 다이어그램의 배경색과 다이어그램 요소의 배경색 및 전경색을 결정하는 파라미터를 설정할 수 있습니다. 다음 표에는 모델 색을 제어하는 파라미터가 요약되어 있습니다.

파라미터결정 대상

ScreenColor

모델 배경

BackgroundColor

블록 및 주석 배경

ForegroundColor

블록 및 주석 전경

색 파라미터를 명명된 색이나 RGB 값으로 설정합니다.

  • 명명된 색: 'automatic', 'black', 'white', 'red', 'green', 'blue', 'cyan', 'magenta', 'yellow', 'gray', 'lightBlue', 'orange', 'darkGreen'

  • RGB 값: '[r,g,b]'

    여기서 r, g, b는 범위 0.0 ~ 1.0으로 정규화된 색의 빨간색, 녹색, 파란색 성분입니다.

예를 들어, 다음 명령은 현재 선택된 시스템 또는 서브시스템의 배경색을 연한 녹색으로 설정합니다.

set_param(gcs,'ScreenColor','[0.3, 0.9, 0.5]')

참고 항목

| | | | | | | | | | | |

관련 항목