MATLAB 함수에서 영속 변수 초기화하기
영속 변수는 MATLAB® 함수의 지역 변수로 함수에 대한 호출 간에 변수 값이 메모리에 유지됩니다. 모델에서 코드를 생성하면 MATLAB 함수에 영속 변수를 초기화해야 합니다. 자세한 내용은 persistent
항목을 참조하십시오.
Simulink® 모델에서 영속 변수를 포함하는 MATLAB 함수를 사용하는 경우 다음 지침을 따라야 합니다.
상수에 액세스하는 방법으로만 함수의 영속 변수를 초기화합니다.
초기화 실행 여부에 따라 함수의 제어 흐름이 달라지지 않아야 합니다.
이러한 지침을 따르지 않으면 여러 조건에서 초기화 오류가 발생합니다.
직접 피드스루 허용 속성이 선택 해제된 영속 변수가 있는 MATLAB Function 블록
상태 제어가
동기식
으로 설정된 State Control 블록을 사용하는 모델에 영속 변수가 있는 MATLAB Function 블록무어 머신 의미 체계를 구현하고 영속 변수가 있는 MATLAB 함수를 사용하는Stateflow® 차트
예를 들면, 아래 영속 변수 n
을 사용하는 fcn
함수입니다. fcn
은 두 지침을 모두 위반합니다. n
의 초기값은 입력 u
에 따라 다르고 return
명령문은 함수의 일반 제어 흐름을 방해합니다. 결과적으로 이 코드는 위에 설명된 조건 중 하나라도 해당하는 모델에서 사용하면 오류가 발생합니다.
function y = fcn(u) persistent n if isempty(n) n = u; y = 1; return end y = n; n = n + u; end
이 오류를 방지하려면 영속 변수에 상수 값을 설정하고 return
명령문을 제거하여 영속 변수를 초기화하십시오. 아래 수정된 버전의 fcn
은 오류 없이 영속 변수를 초기화합니다.
function y = fcn(u) persistent n if isempty(n) n = 1; end y = n; n = n + u; end
직접 피드스루가 없는 MATLAB Function 블록
이 모델에는 앞서 설명한 fcn
의 첫 번째 버전을 사용하는 MATLAB Function 블록이 포함되어 있습니다. MATLAB Function 블록 입력은 구형파이며 Sign 블록과 Sine Wave 블록에서 제공합니다. MATLAB Function 블록은 시간 스텝마다 u
값을 영속 변수 n
에 추가합니다.
모델을 시뮬레이션합니다. 시뮬레이션은 다음과 같은 이유로 오류를 반환합니다.
영속 변수
n
의 초기값이 입력u
에 따라 다릅니다.return
명령문이 함수의 일반 제어 흐름을 방해합니다.MATLAB Function 블록의 직접 피드스루 허용이 선택 해제되어 있습니다.
fcn
의 수정된 버전과 같이 MATLAB Function 블록 코드를 수정합니다. 모델을 다시 시뮬레이션합니다.
동기식 모드의 State Control 블록
이 모델에는 앞서 설명한 fcn
의 첫 번째 버전을 사용하는 MATLAB Function 블록이 포함되어 있습니다. MATLAB Function 블록 입력은 구형파이며 Sign 블록과 Sine Wave 블록에서 제공합니다. MATLAB Function 블록은 시간 스텝마다 u
값을 영속 변수 n
에 추가합니다. 이 모델에는 상태 제어가 Synchronous
로 설정된 State Control 블록이 포함되어 있습니다.
모델을 시뮬레이션합니다. 시뮬레이션은 다음과 같은 이유로 오류를 반환합니다.
영속 변수
n
의 초기값이 입력u
에 따라 다릅니다.return
명령문이 함수의 일반 제어 흐름을 방해합니다.이 모델에는 상태 제어가
Synchronous
로 설정된 State Control 블록이 포함되어 있습니다.
fcn
의 수정된 버전과 같이 MATLAB Function 블록 코드를 수정합니다. 모델을 다시 시뮬레이션합니다.
무어 의미 체계를 구현하는 Stateflow 차트
이 모델에는 앞서 설명한 fcn
의 첫 번째 버전을 사용하는 MATLAB 함수가 있는 Stateflow 차트가 포함되어 있습니다. MATLAB 함수는 시간 스텝마다 영속 변수 n
에 대한 활성 상태로 결정되는 값(1
또는 -1
)을 추가합니다.
모델을 시뮬레이션합니다. 시뮬레이션은 다음과 같은 이유로 오류를 반환합니다.
영속 변수
n
의 초기값이 입력u
에 따라 다릅니다.return
명령문이 함수의 일반 제어 흐름을 방해합니다.차트가 무어 의미 체계를 구현합니다.
fcn
의 수정된 버전과 같이 MATLAB 함수를 수정합니다. 모델을 다시 시뮬레이션합니다.
참고 항목
블록
- MATLAB Function | State Control (HDL Coder) | Chart (Stateflow)