Main Content

모델 콜백

모델 콜백은 모델을 불러온 후나 저장한 후와 같은 특정 작업 지점에서 실행됩니다.

모델 콜백을 사용하여 Automatically Initialize Variables and Load Data 등의 일반적인 작업을 수행할 수 있습니다.

라이브러리에 대부분의 동일한 콜백을 설정할 수 있습니다. 라이브러리에 대해 실행할 수 있는 콜백만 라이브러리에 설정할 수 있습니다. 예를 들어, 라이브러리는 시뮬레이션할 수 없으므로 시뮬레이션의 일부로 호출되는 InitFcn 콜백은 라이브러리에 설정할 수 없습니다.

모델 콜백 만들기

  1. Simulink® 툴스트립의 모델링 탭에서 설계 갤러리의 속성 인스펙터를 클릭합니다.

  2. 모델 또는 참조된 모델의 최상위 수준에서 선택 항목이 없는 경우 속성 탭의 콜백 섹션에서 설정할 콜백을 선택합니다.

    참고

    블록 콜백은 모델 콜백과 다릅니다. 참조된 모델에 대한 모델 콜백을 설정하기 위해 Model 블록을 선택하면 안 됩니다.

  3. 상자에 콜백이 수행하려는 함수를 입력합니다.

프로그래밍 방식으로 모델 콜백을 만들려면 set_param 함수를 사용하여 MATLAB® 코드를 모델 콜백 파라미터에 할당하십시오.

모델 콜백 파라미터

모델 콜백 파라미터실행 시점

PreLoadFcn

모델을 불러오기 전에 실행됩니다.

모델을 불러온 후에 파라미터를 불러오므로 PreLoadFcn 모델 콜백에서 모델 파라미터를 사용하지 마십시오. 대신, 모델을 불러올 때 모델 파라미터로 작업하려면 PostLoadFcn 콜백을 사용하십시오.

이 파라미터에 콜백 코드를 정의하면 모델이 사용하는 변수를 불러오는 데 유용합니다.

MATLAB 파일에서 모델을 열지 않고 호출하려면 PreLoadFcn이 실행되도록 load_system 함수를 사용하십시오.

예제는 Automatically Initialize Variables and Load Data 항목을 참조하십시오.

다음과 같은 제한 사항이 있습니다.

  • PreLoadFcn 콜백의 경우 모델을 아직 불러오지 않았으므로 get_param은 모델 파라미터 값을 반환하지 않습니다. 대신 get_param은 다음을 반환합니다.

    • 표준 모델 파라미터의 디폴트 값(예: solver)

    • add_param으로 추가된 모델 파라미터의 오류 메시지

  • Scope에 대한 프로그래밍적 접근은 지원하지 않습니다.

PostLoadFcn

모델을 불러온 후에 실행됩니다.

이 파라미터에 콜백 코드를 정의하면 불러온 모델이 필요한 인터페이스를 생성하는 데 유용할 수 있습니다.

다음과 같은 제한 사항이 있습니다.

  • PostLoadFcn에 구조적 변경이 있는 경우 함수는 저장되지 않은 변경을 나타내기 위해 모델에 Dirty 플래그를 설정하지 않습니다. 모델을 닫을 때 Simulink에서 저장할지 묻는 메시지를 표시하지 않습니다.

  • Scope에 대한 프로그래밍적 접근은 지원하지 않습니다.

Simulink 편집기는 이 콜백이 실행된 후에 열리므로 PostLoadFcn 콜백은 모델 보기를 설정(예: 확대/축소 배율 설정)하는 데 적합하지 않습니다. 특정 확대/축소 배율로 모델을 열려면 모델과 함께 확대/축소 정보를 저장합니다.

InitFcn

블록 파라미터를 평가하기 전 업데이트 단계 중에 실행됩니다. 이 콜백은 모델을 업데이트하고 시뮬레이션 중에 호출됩니다.

모델의 구조체를 수정하는 InitFcn 모델 콜백이 호출되지 않도록 하십시오. Simulink는 모델의 불러오기 상태에 따라 이러한 콜백을 실행하거나 무시할 수 있습니다.

참조된 모델의 내용을 수정하는 InitFcn 모델 콜백이 호출되지 않도록 하십시오. 그렇게 하면 Simulink 모델을 시뮬레이션할 때 예기치 않은 동작(예: 오류 또는 잘못된 결과)이 발생할 수 있습니다.

InitFcn 콜백에 대한 자세한 내용은 초기화 함수 항목을 참조하십시오.

예제는 Call MATLAB Function Files in MATLAB Function Blocks 항목을 참조하십시오.

StartFcn

시뮬레이션 단계 전에 실행됩니다. 이 콜백은 모델을 업데이트하는 중에 호출되지 않습니다.

이 콜백은 빠른 재시작에서 시뮬레이션을 실행할 때마다 호출됩니다.

PauseFcn

시뮬레이션이 일시 중지된 후에 실행됩니다.

ContinueFcn

시뮬레이션이 계속되기 전에 실행됩니다.

StopFcn

시뮬레이션이 중지된 후에 실행됩니다.

출력은 StopFcn이 실행되기 전에 작업 공간 변수와 파일에 기록됩니다.

시뮬레이션 출력은 명령줄 시뮬레이션을 목적으로 StopFcn 콜백에서 사용할 수 없습니다.

이 콜백은 빠른 재시작에서 시뮬레이션을 실행할 때마다 호출됩니다.

PreSaveFcn

모델이 저장되기 전에 실행됩니다.

PostSaveFcn

모델이 저장된 후에 실행됩니다.

PostSaveFcn에 구조적 변경이 있는 경우 함수는 저장되지 않은 변경을 나타내기 위해 모델에 Dirty 플래그를 설정하지 않습니다. 모델을 닫을 때 Simulink에서 저장할지 묻는 메시지를 표시하지 않습니다.

CloseFcn

블록 다이어그램을 닫기 전에 실행됩니다.

모델의 블록에 설정된 모든 ModelCloseFcnDeleteFcn 콜백은 모델 CloseFcn 콜백 전에 호출됩니다. 모델 모든 블록의 DestroyFcn 콜백은 모델 CloseFcn 콜백 후에 호출됩니다.

참조된 모델 콜백

모델 계층 구조에서 콜백의 실행은 최상위 모델과 최상위 모델이 참조하는 모델이 콜백을 실행하는 순서를 반영합니다. 예를 들어, 다음을 가정하겠습니다.

  • 모델 A:

    • 액셀러레이터 모드에서 모델 B를 참조합니다.

    • MATLAB 작업 공간에서 변수를 만드는 PostLoadFcn 콜백을 포함합니다.

    • 항상, 변경 사항이 감지된 경우 또는 알려진 종속성의 변경 사항이 감지된 경우로 설정된 재빌드 구성 파라미터를 포함합니다.

  • 모델 B:

    • MATLAB 작업 공간을 지우는 CloseFcn 콜백을 포함합니다.

    • 빌드되지 않았거나 최신 상태가 아닙니다.

A를 시뮬레이션하면 참조된 모델 B의 재빌드가 트리거됩니다. Simulink가 모델 B를 재빌드하면 모델 B를 연 후 모델 B를 닫으면서 모델 B의 CloseFcn 콜백을 호출합니다. CloseFcn은 모델 A의 OpenFcn 콜백으로 생성된 변수를 비롯하여 MATLAB 작업 공간을 지웁니다.

모델 B의 CloseFcn 콜백을 사용하는 대신 모델 A에서 StopFcn 콜백을 사용하여 모델에서 사용한 변수를 MATLAB 작업 공간에서 지울 수 있습니다. 또는 데이터 사전을 사용하여 데이터가 기본 작업 공간에 변수를 포함하는 것을 방지할 수도 있습니다.

Model 블록의 시뮬레이션 모드는 참조된 모델의 모델 콜백이 실행되는 시점에 영향을 줍니다.

Model 블록의 시뮬레이션 모드동작
표준

모델을 컴파일하는 동안 Simulink는 표준 모드로 시뮬레이션하도록 구성되어 있고 아직 불러오지 않은 각 참조된 모델을 불러옵니다.

대부분의 경우 Simulink는 모델을 참조하는 Model 블록의 개수와 상관없이 표준 모드의 참조된 모델을 각각 한 번씩 컴파일합니다.

InitFcn, StartFcn, PauseFcn, ContinueFcn, StopFcn 모델 콜백은 모델 컴파일러에서 만든 실행 가능한 형식의 모델마다 실행됩니다.

참조된 모델은 모델 컴파일 후에도 불러온 상태로 유지됩니다.

액셀러레이터

모델 컴파일 도중 Simulink는 재빌드 설정과 시뮬레이션 대상에 따라 액셀러레이터 모드로 시뮬레이션하도록 구성된 참조 모델을 열고 닫을 수 있습니다. 모델 컴파일 전에 열린 모델은 열려 있는 상태로 유지됩니다.

Simulink는 일부 콜백을 실행하지 않습니다.

  • 모든 항목이 최신 상태이고 재빌드 구성 파라미터가 알려진 종속성의 변경 사항이 감지된 경우로 설정된 경우 참조된 모델은 컴파일되지 않고 참조된 모델의 InitFcn 콜백은 실행되지 않습니다.

  • 액셀러레이터 모드의 참조된 모델은 참조된 모델 대신 시작하고 중지하는 S-Function을 사용하므로 StartFcnStopFcn과 같은 콜백이 실행되지 않습니다.

모델 참조 시뮬레이션 모드에 대한 자세한 내용은 Choose Simulation Modes for Model Hierarchies 항목을 참조하십시오.

관련 항목