주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

MATLAB 함수를 정의하여 MATLAB 코드 재사용하기

Stateflow® 차트 내 MATLAB® 함수는 그래픽 요소로, 내장된 MATLAB 함수를 호출하여 알고리즘을 작성하는 것이 더 용이할 때 사용합니다. 일반적인 응용 사례는 다음과 같습니다.

  • 행렬 기반 계산

  • 데이터 분석 및 시각화

이 함수 유형은 그래픽 Stateflow 구조체를 사용하는 것보다 MATLAB 함수를 사용할 때 더 쉽게 표현되는 알고리즘을 코딩할 때 유용합니다. MATLAB 함수는 임베디드 애플리케이션에서 효율적인 프로덕션 품질의 C 코드를 생성할 수 있도록 최적화 기능도 제공합니다.

MATLAB 함수는 차트, 상태 또는 서브차트의 어디에나 있을 수 있습니다. 함수의 위치에 따라 함수를 호출할 수 있는 상태 집합과 천이 집합이 결정됩니다.

  • 하나의 상태 또는 서브차트와, 그 하위 상태 내에서 함수를 호출하려면 해당 상태 또는 서브차트에 MATLAB 함수를 배치하십시오. 이 함수는 해당 상태 또는 서브차트의 부모와 선조에서 동일한 이름의 함수를 모두 재정의합니다.

  • 차트의 어디서나 함수를 호출하려면 차트 수준에 MATLAB 함수를 배치하십시오.

  • 모델에 있는 임의의 차트에서 함수를 호출하려면 MATLAB 함수를 차트 수준에 배치하고 차트 수준 함수의 내보내기를 활성화합니다. 자세한 내용은 재사용을 위해 Stateflow 함수 내보내기 항목을 참조하십시오.

참고

MATLAB 함수는 Stateflow 계층 구조에서 자신의 상위에 있는 차트 데이터와 상태 데이터에 액세스할 수 있습니다.

예를 들어 이 MATLAB 함수의 이름은 stdevstats입니다. 이 함수는 인수 vals를 받고 출력값 stdevout를 반환합니다.

Stateflow chart with a MATLAB function called stdevstats.

함수는 vals 값의 표준편차를 계산하기 위해 다음 코드를 사용합니다.

function stdevout = stdevstats(vals)
%#codegen

% Calculates the standard deviation for vals

len = length(vals);
stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len);

function mean = avg(array,size)
mean = sum(array)/size;

차트에서 MATLAB 함수 정의하기

  1. 객체 팔레트에서 MATLAB 함수 아이콘 을 클릭합니다.

  2. 차트 캔버스에서 새 MATLAB 함수의 위치를 클릭합니다.

  3. 함수의 시그니처 레이블을 입력합니다.

    함수의 시그니처 레이블은 함수의 이름과 인수 및 반환 값의 형식 이름을 지정합니다. 시그니처 레이블의 구문은 다음과 같습니다.

    [return_val1,return_val2,...] = function_name(arg1,arg2,...)
    여러 개의 반환 값과 여러 개의 입력 인수를 지정할 수 있습니다. 각 반환 값과 입력 인수는 스칼라이거나, 벡터이거나, 값으로 구성된 행렬일 수 있습니다. 반환 값이 1개뿐인 함수의 경우 시그니처 레이블에서 대괄호를 생략하십시오.

    인수와 반환 값에는 동일한 변수 이름을 사용할 수 있습니다. 입력과 출력에 동일한 변수를 사용하는 경우 인 플레이스(in-place) 데이터를 만듭니다. 예를 들어, 다음 시그니처 레이블이 있는 함수는 변수 y1y2를 입력과 출력 모두로 사용합니다.

    [y1,y2,y3] = f(y1,u,y2)
    이 함수를 C 코드로 내보내면 생성 코드는 y1y2를 참조로 전달되는 인플레이스(in-place) 인수로 처리합니다. 인 플레이스(in-place) 데이터를 사용하면 생성된 코드가 중간 데이터를 복사하는 횟수가 줄어들어 코드의 효율성이 향상됩니다.

    기호 창과 모델 탐색기에서 함수 시그니처의 인수와 반환 값은 함수에 속한 데이터 항목으로 표시됩니다. 인수는 범위 입력을 갖습니다. 반환 값은 범위 출력을 갖습니다.

  4. 각 인수와 반환 값의 데이터 속성을 지정합니다. 인수와 반환 값의 이름이 같은 경우 인수의 속성만 편집할 수 있습니다. 반환 값의 속성은 읽기 전용입니다.

  5. 함수를 프로그래밍하기 위해 함수 상자를 더블 클릭하여 MATLAB 함수 블록 편집기를 엽니다.

  6. MATLAB 함수 블록 편집기에 함수를 구현하는 MATLAB 코드를 입력합니다. 자세한 내용은 Stateflow 차트 안에 MATLAB 함수 통합하기 항목을 참조하십시오.

  7. 함수에 필요한 추가 데이터 항목을 만듭니다. 자세한 내용은 모델 탐색기를 통해 데이터 추가하기 항목을 참조하십시오.

    함수는 자체 데이터 또는 부모 상태나 차트에 속한 데이터에 액세스할 수 있습니다. 함수의 데이터 항목은 다음 범위 중 하나를 가질 수 있습니다.

    • Constant — 상수 데이터가 모든 함수 호출에서 초기값을 유지합니다.

    • Parameter — 파라미터 데이터가 모든 함수 호출에서 초기값을 유지합니다.

    MATLAB 함수에서는 로컬 함수 데이터 또는 임시 함수 데이터를 명시적으로 만들 필요가 없습니다. 대신, 정의되지 않은 변수를 사용하여 나머지 함수 호출 중에만 액세스할 수 있는 값을 저장할 수 있습니다. 여러 함수 호출에서 유지되는 값을 저장하려면 로컬 데이터를 차트 수준에서 사용하거나 키워드 persistent를 사용하십시오.

상태와 천이에서 MATLAB 함수 호출하기

임의의 상태 동작이나 천이 동작 또는 다른 함수에서 MATLAB 함수를 호출할 수 있습니다. MATLAB 함수를 내보내는 경우 모델에 있는 임의의 차트에서 그래픽 함수를 호출할 수 있습니다. 함수 내보내기에 대한 자세한 내용은 재사용을 위해 Stateflow 함수 내보내기 항목을 참조하십시오.

MATLAB 함수를 호출하려면 함수 시그니처를 사용하고 함수 시그니처에 각 형식 인수에 대한 실제 인수 값을 포함하십시오.

[return_val1,return_val2,...] = function_name(arg1,arg2,...)

실제 인수와 형식 인수의 데이터형이 다른 경우 그래픽 함수는 실제 인수를 형식 인수의 데이터형으로 형변환합니다.

MATLAB 함수의 속성 지정하기

아래에 나열된 속성은 MATLAB 함수가 Stateflow 차트의 다른 컴포넌트와 상호 작용하는 방식을 지정합니다. 이러한 속성은 속성 인스펙터, 모델 탐색기 또는 MATLAB 함수 속성 대화 상자에서 수정할 수 있습니다.

속성 인스펙터를 사용하려면 다음을 수행하십시오.

  1. 모델링 탭의 설계 데이터 아래에서 속성 인스펙터를 선택합니다.

  2. Stateflow 편집기에서 MATLAB 함수를 선택합니다.

  3. 속성 인스펙터에서 천이 속성을 편집합니다.

모델 탐색기를 사용하려면 다음을 수행하십시오.

  1. 모델링 탭의 설계 데이터 아래에서 모델 탐색기를 선택합니다.

  2. 모델 계층 구조 창에서 MATLAB 함수를 선택합니다.

  3. 대화 상자 창에서 MATLAB 함수 속성을 편집합니다.

MATLAB 함수 속성 대화 상자를 사용하려면 다음을 수행하십시오.

  1. Stateflow 편집기에서 MATLAB 함수를 마우스 오른쪽 버튼으로 클릭합니다.

  2. 속성을 선택합니다.

  3. 속성 대화 상자에서 MATLAB 함수 속성을 편집합니다.

이러한 속성은 Stateflow.EMFunction 객체를 사용하여 프로그래밍 방식으로 수정할 수도 있습니다. Stateflow 프로그래밍 인터페이스에 대한 자세한 내용은 Stateflow API 개요 항목을 참조하십시오.

이름

함수의 이름입니다. MATLAB 함수 블록 편집기에서 함수를 열려면 함수 이름 링크를 클릭합니다.

함수 인라인 옵션

생성 코드에서 함수의 인라인 처리를 제어합니다.

  • 자동 — 내부 계산에 따라 함수를 인라인 처리할지 여부를 결정합니다.

  • 인라인 — 함수를 다른 차트로 내보내지 않고 함수가 재귀의 일부가 아닌 경우 함수를 인라인 처리합니다. (재귀는 함수가 다른 함수 호출을 통해 직접적으로 또는 간접적으로 자신을 호출하는 경우 발생합니다.)

  • 함수 — 함수를 인라인 처리하지 않습니다.

속성 인스펙터에서는 이 속성을 사용할 수 없습니다.

레이블

함수의 시그니처 레이블입니다. 함수 시그니처 레이블은 함수의 이름 및 인수와 반환 값의 형식 이름을 지정합니다. 속성 인스펙터에서는 이 속성을 사용할 수 없습니다.

정수 오버플로 시 포화

생성된 코드에서 정수 오버플로 시 포화 여부를 지정합니다. 자세한 내용은 Handle Integer and Enumeration Overflow for Chart Data 항목을 참조하십시오.

이 속성은 C를 동작 언어로 사용하는 차트의 MATLAB 함수에만 적용됩니다. MATLAB을 동작 언어로 사용하는 차트에서 데이터의 동작은 차트의 정수 오버플로 시 포화 속성 값에 따라 달라집니다.

속성 인스펙터에서는 이 속성을 사용할 수 없습니다.

MATLAB 함수 fimath

MATLAB 함수의 fimath 속성을 정의합니다. 지정된 fimath 속성은 MATLAB 함수에 생성된 모든 fi 객체 및 fimath 객체와 연결됩니다. 다음 옵션 중 하나를 선택합니다.

  • MATLAB과 동일 — 함수가 현재 전역 fimath와 동일한 fimath 속성을 사용합니다. 편집 상자가 흐리게 표시되고 현재 전역 fimath는 읽기 전용 형식으로 표시됩니다. 전역 fimath 객체와 fimath 객체에 대한 자세한 내용은 Fixed-Point Designer™ 문서를 참조하십시오.

  • 다른 항목 지정 — 다음 방법 중 하나로 자체 fimath 객체를 지정합니다.

    • 편집 상자 내에 fimath 객체를 생성합니다.

    • MATLAB 또는 모델 작업 공간에서 fimath 객체를 생성한 다음 편집 상자에 변수 이름을 입력합니다.

이 속성은 C를 동작 언어로 사용하는 차트의 MATLAB 함수에만 적용됩니다. MATLAB을 동작 언어로 사용하는 차트에서 데이터의 동작은 차트의 MATLAB 차트 fimath 속성 값에 따라 달라집니다.

속성 인스펙터에서는 이 속성을 사용할 수 없습니다.

설명

MATLAB 함수에 대한 설명입니다.

문서 링크

MATLAB 함수에 대한 온라인 문서 링크입니다. MATLAB 명령 창에 웹 URL 주소를 입력하거나 문서를 HTML 파일 또는 텍스트로 표시하는 MATLAB 명령을 입력할 수 있습니다. 문서 링크 하이퍼링크를 클릭하면 Stateflow가 링크를 평가하여 문서를 표시합니다.

참고 항목

객체

도움말 항목