Main Content

이 페이지의 내용은 이전 릴리스에 관한 것입니다. 해당 영문 페이지는 최신 릴리스에서 제거되었습니다.

MATLAB Function 블록을 사용하여 사용자 지정 기능 만들기

이 예제에서는 값으로 구성된 벡터의 평균과 표준편차를 계산하기 위해 MATLAB Function 블록을 사용하는 모델을 사용자 지정하는 방법을 보여줍니다.

모델 열기

모델 call_stats_block1에는 빈 MATLAB Function 블록과 이 예제에 필요한 블록이 들어 있습니다. 모델을 열어 시작합니다.

MATLAB Function 블록 프로그래밍하기

값으로 구성된 벡터의 평균과 표준편차를 계산하도록 블록을 프로그래밍합니다.

  1. MATLAB Function 블록을 더블 클릭하여 MATLAB Function 블록 편집기를 엽니다. MATLAB Function 블록 편집기에 하나의 입력 및 출력 인수가 있는 디폴트 함수가 표시됩니다.

    this image shows the MATLAB Function Block Editor after it has been opened from the call_stats_block1 model. It includes a default function.

  2. 다음과 같이 함수 선언문을 편집하여 함수 입력과 출력을 정의합니다.

    function [mean, stdev] = stats(vals)
    

    이 코드에서 stats라는 함수를 정의합니다. 이 함수는 벡터 vals의 값에 대한 통계적 평균과 표준편차를 계산합니다. 함수 선언문은 stats 함수에 대한 인수로 vals를 선언하며 meanstdev를 반환 값으로 정의합니다.

  3. MATLAB Function 블록 편집기에서 함수 선언문 다음에 한 줄 공백을 입력하고 다음 코드를 추가합니다.

    % Calculates a statistical mean and a standard
    % deviation for the values in vals.
    
    len = length(vals);
    mean = avg(vals,len);
    stdev = sqrt(sum(((vals-avg(vals,len)).^2))/len);
    plot(vals,'-+');
    
    function mean = avg(array,size)
    mean = sum(array)/size;
    
  4. 블록을 종료합니다. 함수 출력 meanstdev는 블록 아웃포트 meanstdev에 대응하고, 함수 입력 vals는 블록 인포트 vals에 대응합니다.

  5. 다음과 같이 MATLAB Function 블록에 대한 연결을 완료합니다.

    This shows connected signals between the blocks established in the previous image.

  6. 모델을 call_stats_block2로 저장합니다.

함수를 빌드하고 오류가 있는지 검사하기

Simulink® 모델에서 블록을 프로그래밍한 후 함수를 빌드하고 오류가 있는지 테스트할 수 있습니다. MATLAB Function 블록을 빌드하려면 지원되는 컴파일러가 필요합니다. MATLAB®은 이러한 컴파일러 하나를 디폴트 컴파일러로 자동으로 선택합니다. MATLAB에서 지원되는 컴파일러가 시스템에 여러 개 설치된 경우 mex -setup 명령을 사용하여 디폴트 컴파일러를 변경할 수 있습니다. 디폴트 컴파일러 변경하기 항목을 참조하십시오.

시뮬레이션 및 코드 생성 빌드에 지원되는 컴파일러

시뮬레이션 및 코드 생성을 수행할 MATLAB Function 블록을 포함하는 모델을 빌드하는 데 사용할 수 있는 컴파일러 목록을 확인합니다.

  1. 지원 및 호환되는 컴파일러 페이지로 이동한 다음, 사용 중인 플랫폼을 선택합니다.

  2. Simulink Product Family 아래의 표가 나올 때까지 스크롤합니다.

  3. 표에서 시뮬레이션할 MATLAB Function 블록을 포함하는 모델을 확인하려면 Simulink For Model Referencing, Accelerator mode, Rapid Accelerator mode, and MATLAB Function blocks 제목의 열에 확인 표시가 있는 컴파일러를 찾습니다.

    표에서 코드를 생성할 MATLAB Function 블록을 포함하는 모델을 확인하려면 Simulink Coder™ 제목의 열에 확인 표시가 있는 컴파일러를 찾습니다.

코드 생성에 지원되는 컴파일러

MATLAB Function 블록을 포함하는 모델의 코드를 생성하려면 Simulink Coder를 사용하여 코드를 생성할 때 Simulink에서 지원되는 C 컴파일러를 사용하면 됩니다. 그러한 컴파일러 목록을 보려면 다음을 수행하십시오.

  1. Supported and Compatible Compilers 웹 페이지로 이동합니다.

  2. 사용 중인 플랫폼을 선택합니다.

  3. Simulink와 관련 제품에 대한 표에서 Simulink Coder 제목의 열에 확인 표시가 있는 컴파일러를 찾습니다.

오류를 찾아 해결하기

빌드 프로세스 중에 오류가 발생하면 진단 뷰어 창에 문제가 되는 코드에 대한 링크와 함께 오류가 표시됩니다.

다음 연습에서는 MATLAB Function 블록에서 오류를 찾아 해결하는 방법을 보여줍니다.

  1. stats 함수에서 로컬 함수 avg를 가상 로컬 함수 aug로 변경한 다음 다시 컴파일합니다. 그러면 창에 다음 메시지가 표시됩니다. 진단 뷰어 창에 감지된 각 오류가 음영 처리된 빨간색 선으로 표시됩니다.

  2. Undefined function or variable 'aug' 제목의 오류를 조사합니다. 선택한 오류의 진단 메시지에서 함수 이름 다음에 있는 파란색 링크를 클릭하면 문제가 되는 코드가 표시됩니다. 문제가 되는 라인이 MATLAB Function 블록 편집기에 강조 표시됩니다.

  3. 메시지는 MATLAB 함수의 변수와 표현식의 컴파일타임 유형 정보에 대한 리포트로도 연결됩니다. 그러한 정보를 통해 오류 메시지를 진단하고 유형 전파 규칙을 이해할 수 있습니다. 리포트에 대한 자세한 내용은 MATLAB Function Reports 항목을 참조하십시오. 리포트를 보려면 Launch diagnostic report 라인에 강조 표시된 파란색 링크를 클릭합니다.

  4. aug를 다시 avg로 변경하여 오류를 바로 잡고 다시 컴파일합니다.

입력 속성과 출력 속성 정의하기

MATLAB Function 블록의 각 함수 인수는 고유한 데이터형(스칼라, 벡터 또는 행렬)을 가질 수 있습니다. 하지만 함수 인수 생성 시 바로 데이터형이 지정되지 않습니다. 기본적으로 함수 입력과 출력은 포트에 연결된 신호의 데이터형과 크기를 상속합니다. MATLAB Function 블록의 입력 데이터와 출력 데이터를 점검하여 블록이 올바른 유형과 크기를 상속했는지 확인하십시오.

  1. MATLAB Function 블록 stats를 더블 클릭합니다.

  2. MATLAB Function 블록 편집기에서 포트 및 데이터 관리자를 클릭합니다. MATLAB Function 블록의 인수를 정의하는 데 도움이 되는 포트 및 데이터 관리자가 열립니다.

    MATLAB Function 블록에 대해 이미 생성된 인수 vals와 반환 값 meanstdev가 왼쪽 창에 표시됩니다. vals범위Input(Simulink에서 입력을 나타내는 축약된 형태)으로 할당되고 meanstdev범위Output(Simulink로 출력을 나타내는 축약된 형태)으로 할당된 것을 확인할 수 있습니다.

  3. 포트 및 데이터 관리자의 왼쪽 창에서 vals에 대한 행의 아무 위치를 클릭하여 강조 표시합니다.

    오른쪽 창에 vals에 대한 데이터 속성 대화 상자가 표시됩니다. 기본적으로 입력 인수와 출력 인수의 클래스, 크기, 단위 및 실수/복소수 여부는 각 입력 포트 또는 출력 포트에 연결된 신호에서 상속됩니다. 상속은 크기-1로, 실수/복소수 여부상속됨으로, 유형상속: Simulink와 동일로 설정하여 지정합니다.

    실제 상속된 크기와 유형 값은 모델 컴파일 중에 설정되며, 왼쪽 창의 Compiled Type 열과 Compiled Size 열에 보고됩니다.

    데이터 속성 대화 상자의 유형 필드에서 입력 인수 또는 출력 인수의 유형(예: double)도 지정할 수 있습니다. 또한 크기 필드에 표현식을 입력하여 입력 인수 또는 출력 인수의 크기를 지정할 수도 있습니다. 예를 들어 vals2-by-3 행렬로 지정하려면 크기 필드에 [2 3]을 입력하면 됩니다. 자세한 내용은 Define and Modify Variable Data TypesSpecify Size of MATLAB Function Block Variables 항목을 참조하십시오.

    참고

    MATLAB에서와 마찬가지로, MATLAB Function 블록 함수에 추가하는 모든 배열의 디폴트 첫 번째 인덱스는 1입니다.

프로그래밍 방식으로 MATLAB Function 블록 구성하기

프로그래밍 방식으로 MATLAB Function 블록을 구성하는 접근 방식에는 두 가지가 있습니다.

  • MATLABFunctionConfiguration 객체를 사용하여 블록의 속성을 쿼리하고 수정합니다. 모델의 블록을 식별하려면 블록 경로를 사용하거나 gcb 함수를 호출하면 됩니다.

  • Stateflow.EMChart 객체를 사용하여 블록의 입력과 출력, 속성에 액세스합니다. Stateflow® API 객체의 계층 구조를 탐색하여 모델의 블록을 식별합니다.

블록 속성 구성하기

이전 예제에서 설명한 call_stats_block1 모델을 살펴보겠습니다. get_param 함수를 호출하여, 이 모델 내 MATLAB Function 블록의 MATLABFunctionConfiguration 객체에 액세스할 수 있습니다.

config = get_param('call_stats_block1/MATLAB Function', ...
    'MATLABFunctionConfiguration');

configuration 객체의 속성을 쿼리하거나 수정하려면 객체 이름에 점 표기법을 사용하십시오.

myConfig.UpdateMethod
ans =

  'Inherited'
config.Description = 'Calculate the mean and standard deviation for a vector of values.';

MATLAB Function 구성 객체에서 수정할 수 있는 속성에 대한 자세한 내용은 MATLABFunctionConfiguration 항목을 참조하십시오.

블록 입력, 출력 및 속성에 액세스하기

프로그래밍 방식으로 MATLAB Function 블록을 보다 세밀하게 조정하려면, 객체의 Stateflow 계층 구조 최상위 수준에서 Simulink.Root 객체에 대해 find (Stateflow) 함수를 호출하여 Stateflow.EMChart 객체에 액세스하십시오.

rt = sfroot;
block = find(rt,'-isa','Stateflow.EMChart', ...
    'Path','call_stats_block1/MATLAB Function');

configuration 객체의 속성을 쿼리하거나 수정하려면 객체 이름에 점 표기법을 사용하십시오.

block.ChartUpdate
ans =

  'INHERITED'
block.Description = 'Calculate the mean and standard deviation for a vector of values.';

Stateflow.EMChart 객체에서는 MATLABFunctionConfiguration 객체에서 사용할 수 없는 추가 속성에 액세스할 수 있습니다. 예를 들어, 블록의 입력과 출력에 대한 table을 만들려면 다음을 입력하십시오.

info = get([block.Inputs;block.Outputs],{'Name','Scope','Port'});
T = table(info(:,2),cell2mat(info(:,3)), ...
    'VariableNames',{'Scope','Port'}, ...
    'RowNames',info(:,1));
T.Scope = categorical(T.Scope)
T =

  3×2 table

             Scope     Port
             ______    ____

    vals     Input      1  
    mean     Output     1  
    stdev    Output     2  

자세한 내용은 Overview of the Stateflow API (Stateflow) 항목을 참조하십시오.

코드 생성을 위한 지역 변수 정의하기

MATLAB Function 블록에서 MATLAB 알고리즘을 사용하여 코드를 생성하려면, 지역 변수를 연산에 사용하거나 로컬 변수를 출력으로 반환하기 전에 로컬 변수의 클래스, 크기 및 실수/복소수 여부를 명시적으로 할당해야 합니다(Data Definition Considerations for Code Generation 참조). 예제 함수 stats에서 지역 변수 len은 평균과 표준편차 계산에 사용되기 전에 정의됩니다.

len = length(vals);

변수에 속성을 할당하고 난 후에는 함수 본문 내 다른 곳에서 변수의 클래스, 크기 또는 실수/복소수 여부를 재정의할 수 없습니다. 단, 몇 가지 예외 사항은 있습니다(Reassignment of Variable Properties 참조).

MATLAB Function 블록의 코드 생성하기

  1. MATLAB Function 블록 프로그래밍하기 섹션 끝부분에서 저장한 call_stats_block2 모델을 엽니다.

  2. stats 블록을 더블 클릭합니다.

  3. SimulinkCoder 앱을 엽니다.

  4. C Code 탭에서 빌드를 클릭하여 예제 모델을 컴파일하고 빌드합니다.

    가변 스텝 솔버와 관련된 오류가 발생하는 경우 구성 파라미터 > 솔버에서 솔버 유형을 고정 스텝 솔버로 변경한 후 빌드를 다시 실행합니다. 고정 스텝 솔버와 가변 스텝 솔버의 차이점에 대한 자세한 내용은 Fixed-Step Versus Variable-Step Solvers 항목을 참조하십시오.

    오류가 발생하지 않으면 진단 뷰어 창에 성공을 나타내는 메시지가 표시됩니다. 오류가 발생한 경우에는 오류를 찾아 해결하기에 설명된 것처럼 이 창에서 오류를 확인할 수 있습니다.

참고 항목

| | | | | | |

관련 항목