주요 콘텐츠

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

MATLAB Function

Simulink 모델에 MATLAB 코드 포함

  • MATLAB Function block icon.

라이브러리:
Simulink / User-Defined Functions
HDL Coder / User-Defined Functions

설명

MATLAB Function 블록을 사용하면 Simulink® 모델에서 실행되는 MATLAB® 함수를 쓸 수 있습니다. MATLAB 함수는 각 시간 스텝에서 시뮬레이션 중에 실행됩니다. MATLAB 코드를 Simulink 모델에 통합하는 방법에 대한 자세한 내용은 MATLAB Function 블록으로 Simulink에서 MATLAB 함수 구현하기 항목을 참조하십시오. Simulink Coder™ 라이선스가 있는 경우에는 MATLAB Function 블록에서 Simulink Coder 타깃에 대한 C/C++ 코드도 생성할 수 있습니다.

MATLAB Function 블록을 더블 클릭하여 MATLAB Function 블록 편집기를 열어서 MATLAB 함수를 쓸 수 있습니다. 또한 모델 탐색기 또는 기호 창을 사용하여 변수를 정의하고 입력 트리거를 추가하고 함수 호출 출력을 만들 수 있습니다. 자세한 내용은 Create and Define MATLAB Function Block Variables 항목, Manage the Input Trigger of a MATLAB Function Block 항목, Manage Function Call Outputs of a MATLAB Function Block 항목을 참조하십시오.

기호 창에서 블록 입력을 포트가 아닌 Simulink 파라미터로 선언할 수 있습니다. MATLAB Function 블록은 또한 입력, 출력, 파라미터에 대한 유형 및 크기의 상속을 지원합니다. 이러한 속성을 명시적으로 지정할 수 있습니다. Define and Modify Variable Data Types 항목, Specify Size of MATLAB Function Block Variables항목, 파라미터 변수를 정의하여 여러 MATLAB Function 블록에서 데이터 사용 항목을 참조하십시오.

MATLAB Function 블록을 포함하는 모델을 시뮬레이션하면 이 블록에서 이진 코드 또는 C/C++ MATLAB 실행 파일(MEX) 코드가 생성되고 이 코드는 모델과 통합됩니다. MATLAB Function 블록은 Simulink 외부의 MATLAB 코드에서 C/C++ 코드를 생성하는 데 사용할 수 있는 MATLAB Coder와 동일한 인프라를 사용합니다. 따라서 MATLAB Function 블록 코드는 코드 생성 시 지원되는 MATLAB 규칙을 사용해야 합니다. Code and Integration Limitations for MATLAB Function Blocks 항목을 참조하십시오.

데이터의 시각화를 지원하기 위해 MATLAB Function 블록은 시뮬레이션에 대해서만 MATLAB 함수에 대한 호출을 지원합니다 MATLAB Engine을 사용하여 MATLAB Function 블록에서 함수 호출 실행하기 항목을 참조하십시오. Simulink Coder를 사용하여 코드를 생성하는 경우, 함수 호출이 Simulink 입력 또는 출력에 직접적인 영향을 미치지 않으면 호출은 생성 코드에 나타나지 않습니다.

예제

모두 확장

입력 신호를 수정하기 위해 모델에 MATLAB Function을 추가합니다.

  1. 시뮬레이션 탭에서 라이브러리 브라우저를 클릭합니다. Simulink > User-Defined Functions를 선택합니다. MATLAB Function 블록을 Simulink 캔버스로 끌어서 놓습니다.

  2. 블록을 더블 클릭하여 MATLAB Function 블록 편집기를 엽니다. 함수 본문 코드를 다음과 같이 바꿉니다.

    y = 2*u;
  3. "부모로" 버튼 을 클릭하여 모델로 돌아갑니다. Sine Wave 블록을 입력 신호로 추가하고 Scope 블록을 추가하여 MATLAB Function 블록의 입력과 출력을 캡처합니다.

    This shows the example model the instructions describe. It attaches a Sine Wave block and a Scope block to a MATLAB Function block you created.

  4. 시뮬레이션을 실행하고 Scope 블록을 열어서 코드의 영향을 확인합니다.

확장 예제

제한 사항

  • 이 블록의 코드는 MATLAB과 정확히 동일한 결과를 생성하려고 시도하지만, 반올림 오차로 인해 차이가 발생할 수 있습니다. 이러한 수치적 차이는 처음에는 몇 eps일 수 있지만 연산이 반복되면 더 커질 수 있습니다. nan의 동작에 의존하는 것은 권장되지 않습니다. 여러 다른 C 컴파일러는 동일한 계산에 대해 다른 결과를 산출할 수 있습니다.

  • 재귀적 호출은 MATLAB Function 블록에서 허용되지 않습니다.

포트

입력

모두 확장

MATLAB 함수의 입력 변수로, 실수 값 스칼라, 벡터 또는 행렬로 지정됩니다. 각 입력 변수에는 변수의 이름을 사용하는 연결된 포트가 있습니다.

MATLAB에서는 지원되지만 Simulink에서는 지원되지 않는 데이터형은 Simulink 모델과 MATLAB Function 블록의 함수 사이에 전달할 수 없습니다. 이러한 데이터 유형을 MATLAB Function 블록에서는 사용할 수 있습니다.

이 블록의 고정소수점 데이터형 지원에 대한 자세한 내용은 Fixed-Point Data Types with MATLAB Function Block (Fixed-Point Designer) 항목과 Data Type Override with MATLAB Function Block (Fixed-Point Designer). 항목을 참조하십시오.

종속성

입력 포트를 만들려면 블록을 열고 기호 창에서 입력 변수를 만드십시오. Create and Define MATLAB Function Block Variables 항목을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | string | fixed point | enumerated | bus

출력

모두 확장

MATLAB 함수의 출력 변수로, 실수 값 스칼라, 벡터 또는 행렬로 지정됩니다. 각 출력 변수에는 변수의 이름을 사용하는 연결된 포트가 있습니다.

종속성

출력 포트를 만들려면 블록을 열고 기호 창에서 출력 변수를 만드십시오. Create and Define MATLAB Function Block Variables 항목을 참조하십시오.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | string | fixed point | enumerated | bus

파라미터

모두 확장

블록 파라미터를 대화형 방식으로 편집하려면 속성 인스펙터를 사용합니다. Simulink 툴스트립의 시뮬레이션 탭에 있는 준비 갤러리에서 속성 인스펙터를 선택하십시오.

참고

MATLAB Function 블록에는 Subsystem 블록 파라미터도 있으며, 이는 블록을 마우스 오른쪽 버튼으로 클릭하고 블록 파라미터(Subsystem)를 클릭하여 액세스할 수 있습니다. 그러나 이러한 블록 파라미터를 업데이트하는 것은 권장되지 않습니다.

MATLAB Function 블록 활성화 방법을 다음 값 중 하나로 지정합니다.

  • 상속됨 — Simulink 모델로부터의 입력이 MATLAB Function 블록을 활성화합니다.

    입력 트리거를 정의하면, Simulink 신호 또는 트리거 포트의 함수 호출 이벤트에 대한 응답으로 MATLAB Function 블록이 실행됩니다. 입력 트리거를 정의하지 않으면 MATLAB Function 블록은 모델에서 트리거를 묵시적으로 상속합니다. 이러한 묵시적 이벤트는 블록에 입력을 제공하는 신호의 이산 샘플 시간 또는 연속 샘플 시간입니다.

    데이터 입력을 정의하면 MATLAB Function 블록은 가장 빠른 데이터 입력 레이트로 샘플링됩니다. 데이터 입력을 정의하지 않으면 MATLAB Function 블록은 부모 서브시스템의 실행 동작에 의해 정의된 레이트로 샘플링됩니다.

  • 이산MATLAB Function 블록이 블록의 샘플 시간 파라미터에 지정된 레이트를 사용하여 활성화됩니다. 블록은 지정된 레이트에 대응되는 규칙적인 시간 간격으로 묵시적 이벤트를 생성합니다. 모델의 나머지 블록들은 샘플 시간이 서로 다를 수 있습니다.

  • 연속MATLAB Function 블록이 주 시간 스텝 동안에만 활성화되고 주 시간 스텝과 보조 시간 스텝 동안 출력 변수와 로컬 연속 변수를 계산합니다. 이 블록은 영점교차를 등록할 수 있으므로, Simulink 모델은 상태 변경이 발생할 때마다 블록을 샘플링할 수 있습니다. 이 블록은 로컬 연속 변수에 대한 도함수를 계산합니다.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 객체 속성을 변경합니다.

MATLABFunctionConfiguration 객체를 사용하는 경우 다음 옵션을 사용하여 속성을 지정합니다.

파라미터: UpdateMethod
값: "Inherited" (디폴트 값) | "Continuous" | "Discrete"

Stateflow.EMChart 객체를 사용하는 경우 다음 옵션을 사용하여 속성을 지정합니다.

파라미터: ChartUpdate
값: "INHERITED" (디폴트 값) | "CONTINUOUS" | "DISCRETE"

시뮬레이션 중에 MATLAB Function 블록이 활성화되는 시간 간격을 지정합니다. 디폴트 값은 블록이 Simulink로부터 샘플 시간을 상속한다는 것을 의미합니다. 샘플 시간 지정에 대한 자세한 내용은 샘플 시간 지정하기 항목을 참조하십시오.

Subsystem 블록 파라미터에서 샘플 시간 파라미터를 사용하지 마십시오. 대신 속성 인스펙터를 사용하십시오.

종속성

이 파라미터를 활성화하려면 업데이트 방법이산으로 설정하십시오.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 객체 속성을 변경합니다.

파라미터: SampleTime
값: "-1" (디폴트 값) | scalar | vector
데이터형: string | char

고급

MATLAB Function 블록의 데이터가 정수 오버플로 시 포화되는지 여부를 다음 값 중 하나로 지정합니다.

  • on — 블록이 정수를 워드 크기에서 허용되는 최대 양수 값 또는 음수 값으로 설정하여 정수를 포화시킵니다. 이 설정은 MATLAB 동작과 일치합니다.

  • off — 오버플로 상태가 발생하면 블록이 시뮬레이션 모드에서 런타임 오류를 생성합니다. Simulink Coder를 사용하여 코드를 생성하면 이 동작은 C 언어 컴파일러에 따라 달라집니다.

  • 이 파라미터가 on이면 MATLAB은 시뮬레이션 중에 추가 검사를 추가하여 정수 오버플로 또는 정수 언더플로를 감지합니다. MATLAB Function 블록 코드에서 정수 오버플로가 발생하지 않은 경우 이 옵션을 비활성화하는 것이 더 효율적입니다.

  • Simulink Coder에 의해 생성된 코드는 정수 오버플로 또는 정수 언더플로를 검사하지 않으므로 이 파라미터가 off이면 예기치 않은 결과가 발생할 수 있습니다. 이러한 상황에서는 코드를 생성하기 전에 모델을 시뮬레이션하여 오버플로와 언더플로를 테스트하십시오.

  • 이 파라미터 설정은 정수 연산과만 관련이 있습니다. 고정소수점 연산 또는 배정밀도 연산에는 영향을 미치지 않습니다.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 객체 속성을 변경합니다.

파라미터: SaturateOnIntegerOverflow
값: true or 1 (디폴트 값) | false or 0
데이터형: logical

MATLAB Function 블록이 시뮬레이션 중에 차원이 달라지는 입력 데이터와 출력 데이터를 지원하는지 여부를 지정합니다. 이 파라미터가 on이면 출력 변수의 가변 크기 속성을 활성화하여 가변 크기 출력을 정의할 수 있습니다. 자세한 내용은 가변 크기의 MATLAB Function 블록 변수 선언하기 항목과 Variable size 항목을 참조하십시오.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 객체 속성을 변경합니다.

파라미터: SupportVariableSizing
값: true or 1 (디폴트 값) | false or 0
데이터형: logical

MATLAB Function 블록이 직접 피드스루 의미 체계를 지원하는지 여부를 지정합니다. 이를 통해 입력값이 블록의 출력을 직접적으로 제어할 수 있습니다. 이 파라미터가 off이면 블록 출력은 블록의 현재 상태만 사용합니다. 비직접 피드스루를 사용하면 피드백 루프에서 MATLAB Function 블록을 사용하고 대수 루프를 방지할 수 있습니다. 자세한 내용은 Use Nondirect Feedthrough in a MATLAB Function Block 항목을 참조하십시오.

종속성

이 파라미터를 비활성화하려면 업데이트 방법상속됨 또는 이산으로 설정해야 합니다.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 객체 속성을 변경합니다.

파라미터: AllowDirectFeedthrough
값: true or 1 (디폴트 값) | false or 0
데이터형: logical

R2021b 이후

MATLAB Function 블록이 길이가 1인 차원을 가진 출력 변수를 고정 크기로 처리하는지 여부를 다음 값 중 하나로 지정합니다.

  • off — 변수가 가변 크기를 갖도록 지정되는지 여부에 관계없이 블록은 길이가 1인 차원이 적어도 하나 이상 있는 출력 변수를 고정 크기로 처리합니다.

  • on — 변수가 가변 크기를 갖도록 지정되는 경우 MATLAB Function 블록은 출력 변수를 가변 크기로 처리합니다.

자세한 내용은 Variable size 항목을 참조하십시오.

참고

R2021b 릴리스 및 이전 릴리스에서 MATLAB Function 블록은 항상 출력 열 벡터를 1차원 신호로 변환합니다.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 객체 속성을 변경합니다.

파라미터: VectorOutputs1D
값: false or 0 (디폴트 값) | true or 1
데이터형: logical

R2023a 이후

길이가 1인 차원을 적어도 하나 이상 가진 변수가 고정 크기인지 여부를 다음 값 중 하나로 지정합니다.

  • on — 가변 크기이면서 1인 차원을 가진 변수는 고정 크기입니다.

  • off — 블록 내에서 가변 크기 속성이 활성화되어 있는 변수는 항상 가변 크기입니다.

이 파라미터는 가변 크기 속성이 활성화되어 있는 출력 변수에만 영향을 미칩니다. Variable size 항목을 참조하십시오.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 객체 속성을 변경합니다.

파라미터: TreatDimensionOfLengthOneAsFixedSize
값: true or 1 (디폴트 값) | false or 0
데이터형: logical

고정소수점 속성

상속된 고정소수점 신호와 정수 신호를 Fixed-Point Designer™ fi (Fixed-Point Designer) 객체로 취급할지 여부를 다음 값 중 하나로 지정합니다.

  • Fixed-pointMATLAB Function 블록이 모든 고정소수점 입력을 Fixed-Point Designer fi 객체로 취급합니다.

  • Fixed-point & IntegerMATLAB Function 블록이 모든 고정소수점 입력과 정수 입력을 Fixed-Point Designer fi 객체로 취급합니다.

자세한 내용은 Ways to Construct fi Objects (Fixed-Point Designer) 항목을 참조하십시오.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 객체 속성을 변경합니다.

파라미터: TreatAsFi
값: "Fixed-point" (디폴트 값) | "Fixed-point & Integer"

MATLAB Function 블록에 대한 디폴트 fimath (Fixed-Point Designer) 객체 속성을 다음 값 중 하나로 지정합니다.

  • Same as MATLAB — 블록이 현재 디폴트 fimath 객체와 동일한 fimath 객체 속성을 사용합니다. 텍스트 상자가 회색으로 표시되고 현재 전역 fimath 객체가 읽기 전용 형식으로 표시됩니다.

  • Specify other — 다음 두 가지 방법 중 하나로 텍스트 상자에 자신의 고유한 fimath 객체를 지정합니다.

    • 텍스트 상자 내에 fimath 객체를 생성합니다.

    • MATLAB 작업 공간이나 모델 작업 공간에 fimath 객체를 생성한 다음 텍스트 상자에 변수 이름을 입력합니다. 이 옵션을 사용하고 있고 모델을 다른 사람들과 공유하려는 경우 모델 작업 공간에 변수를 정의하십시오.

자세한 내용은 fimath Object Construction (Fixed-Point Designer) 항목과 Fixed-Point Data Types with MATLAB Function Block (Fixed-Point Designer) 항목을 참조하십시오.

  • MATLAB Function 블록의 fimath 객체는 블록의 내용에 대해 globalfimath (Fixed-Point Designer) 객체처럼 동작합니다. 블록은 fi 객체로 취급하도록 선택한 MATLAB Function 블록에 대한 모든 고정소수점 입력 신호와 정수 입력 신호를 이 파라미터의 fimath 객체 속성과 연결합니다. MATLAB Function 블록에서 fi 객체를 생성하는 경우에는 추가적으로 고려해야 할 사항이 있습니다.

    • fi 객체가 생성될 때 연결된 fimath 객체가 없으면 fi 생성자는 MATLAB 함수 fimath의 속성에 관계없이 디폴트 fimath 객체 설정을 사용합니다. fi 객체가 생성된 후 객체에 대해 연산을 수행하면, 이 객체는 MATLAB 함수 fimath의 속성을 채택합니다.

    • fi 생성자에 fimath 객체를 지정하면 fi 생성자는 값을 양자화할 때 해당 fimath 객체를 따릅니다. fi 생성자에 지정되지 않은 fimath 객체 설정은 MATLAB 함수 fimath에 지정된 속성을 사용합니다.

프로그래밍 방식의 사용법

프로그래밍 방식으로 블록 파라미터 값을 설정하려면 블록의 MATLABFunctionConfiguration 객체 또는 Stateflow.EMChart 객체에 액세스하고 점 표기법을 사용하여 연결된 객체 속성을 변경합니다.

MATLABFunctionConfiguration 객체를 사용하는 경우 다음 옵션을 사용하여 속성을 지정합니다.

파라미터: FimathMode
값: "SameAsMATLAB" (디폴트 값) | "UserSpecified"

Stateflow.EMChart 객체를 사용하는 경우 다음 옵션을 사용하여 속성을 지정합니다.

파라미터: EmlDefaultFimath
값: "Same as MATLAB Default" (디폴트 값) | "Other:UserSpecified"

블록 특성

데이터형

Booleana | busa | doublea | enumerateda | fixed pointa | halfa | integera | singlea | stringa

직접 피드스루

a

다차원 신호

a

가변 크기 신호

a

영점교차 검출

아니요

a 실제 데이터형 또는 기능 지원은 블록 구현에 따라 달라집니다.

  • 다음에 정의된 함수를 호출할 수 있습니다.

    • Simulink Function 블록.

    • 차트의 Stateflow® 함수. 차트의 함수를 호출하려면 차트 수준 함수 내보내기 속성과 내보낸 함수를 전역적으로 볼 수 있는 함수로 취급 속성을 활성화하십시오.

  • 기본적으로 MATLAB Function 블록은 %#codegen 지시문을 포함하지 않지만 마치 이 지시문이 포함되어 있는 것처럼 오류를 검사합니다. %#codegen 지시문을 MATLAB Function 블록에 추가해도 오류 검사에 영향을 미치지 않습니다. 자세한 내용은 컴파일 지시문 %#codegen 항목을 참조하십시오.

확장 기능

모두 확장

버전 내역

R2011a에 개발됨

모두 확장