Stateflow 차트 안에 MATLAB 함수 통합하기
Stateflow® 차트에서 복잡한 알고리즘을 구현하려면 MATLAB® 함수를 사용합니다. MATLAB 함수를 사용하면 Stateflow 차트 내에서 MATLAB의 수학적 기능들을 결합할 수 있습니다. MATLAB 함수 만들기에 대한 자세한 내용은 MATLAB 함수를 정의하여 MATLAB 코드 재사용하기 항목을 참조하십시오.
지원되는 함수 유형
Stateflow 차트가 호출할 수 있는 MATLAB 함수 유형은 다음과 같습니다.
함수 본문에 정의한 로컬 함수.
그래픽 함수, Simulink® 함수, 진리표 함수.
코드 생성을 지원하는 내장 MATLAB 함수.
오직 시뮬레이션 실행만을 위한 외재적 함수. 자세한 내용은 Call Extrinsic MATLAB Functions in Stateflow Charts 항목을 참조하십시오.
Stateflow 차트에 MATLAB 함수 추가하기
이 예제에서는 2개의 MATLAB 함수를 포함하는 모델을 만든 후, 해당 함수를 사용하여 차트에 입력한 데이터의 평균과 표준편차를 계산합니다.
모델 설정하기
새 Simulink 모델을 만듭니다.
다음 블록을 모델에 추가합니다.
Chart 블록
Constant 블록
2개의 Display 블록
모델을
call_stats_function_stateflow
로 저장합니다.
Stateflow 차트 구성하기
Chart 블록을 엽니다.
MATLAB 함수 아이콘
을 사용하여 2개의 MATLAB 함수를 추가합니다.
다음 시그니처로 함수에 레이블을 지정합니다.
meanout = meanstats(vals)
stdevout = stdevstats(vals)
다음 조건 동작으로 종단 연결점에 디폴트 천이를 추가합니다.
{ mean = meanstats(invals); stdev = stdevstats(invals); }
함수 시그니처의 인수가 스칼라인 경우, 함수 호출의 입력값과 출력값이 스칼라 확장 규칙을 따르는지 검사합니다. 자세한 내용은 값을 행렬의 모든 요소에 대입하기 항목을 참조하십시오.
데이터 요소 정의하기
기호 창을 엽니다.
유형 열을 사용하여 다음 데이터의 데이터형을 설정합니다.
invals
: 입력 데이터stdev
: 출력 데이터mean
: 출력 데이터
표준편차 함수 프로그래밍하기
stdevstats
함수를 열고 다음 코드를 추가합니다.
function stdevout = stdevstats(vals) %#codegen % Calculate standard deviation len = length(vals); stdevout = sqrt(sum(((vals-avg(vals,len)).^2))/len); function meanfcn = avg(inputArray,inputSize) meanfcn = sum(inputArray)/inputSize;
함수 sum
이 stdevout
값을 계산합니다. %#codegen
컴파일 지시문은 코드 생성이 지원되는 MATLAB 함수인 경우 구문과 의미 체계의 컴파일타임 위반을 감지하는 데 도움이 됩니다.
평균 함수 프로그래밍하기
meanstats
함수를 열고 다음 코드를 추가합니다.
function meanout = meanstats(vals) %#codegen % Calculate statistical mean len = length(vals); meanout = avg(vals,len); % Plot results (simulation only) coder.extrinsic("plot"); plot(vals,"-+"); function meanfcn = avg(inputArray,inputSize) meanfcn = sum(inputArray)/inputSize;
length
함수는 코드 생성을 지원하며, 벡터의 길이를 반환합니다. 함수 avg
가 meanout
값을 계산합니다. plot
은 코드 생성이 지원되지 않으므로 외재적 함수로 정의합니다.
모델 시뮬레이션하기
모델을 시뮬레이션하려면 우선 Simulink 블록을 차트 입력 포트와 출력 포트에 연결합니다.
실행을 클릭합니다. 평균과 표준편차 숫자가 Display 블록 창에 나타납니다.
코드 생성 요구 사항
코드를 생성하려면 모든 함수가 코드 생성을 지원해야 합니다. 함수가 코드 생성을 지원하지 않을 경우, coder.extrinsic
(Simulink)을 사용하여 함수를 예외로 표시할 수 있습니다. MATLAB에서 코드 생성이 지원되는 함수의 목록은 C/C++ 코드 생성에 지원되는 함수 및 객체 (MATLAB Coder) 항목을 참조하십시오.
참고 항목
coder.extrinsic
(Simulink)