이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
결함 내장 모델로부터 코드 생성
이 예제는 결함 내장 모델로부터 C/C++ 코드를 생성하는 방법을 보여줍니다. 항공기 제어기 모델에 결함을 추가하고, 결함이 내장된 모델을 생성하고, 코드 생성을 지원하도록 모델을 구성한 후 모델로부터 C 코드를 생성합니다. 결함 내장 모델 생성 방법에 대한 자세한 내용은 결함 내장 모델 생성를 참조하십시오.
결함 내장 모델 생성
slexAircraftFaultedExample 모델을 열어 모델을 확인하십시오.

이 모델에는 결함이 없습니다. 이 예제에서는 Controller 서브시스템에 연결된 Sum 블록 출력 포트에 결함을 추가하고, 시뮬레이션 시간이 30일 때 트리거되는 잡음 동작을 해당 결함에 할당합니다.
결함 분석기 앱을 엽니다. 앱 탭에서 결함 분석기를 클릭합니다.
Sum1블록의 출력 신호를 선택합니다.결함 준비 섹션에서 결함 추가를 클릭합니다.
결함 동작을
Add Noise로 설정합니다.트리거 유형을
Timed로 설정하고, 결함 트리거 시점을30로 설정합니다.확인을 클릭합니다.

결함 내장 모델을 생성할 때 Simulink® Fault Analyzer™는 활성화된 모델 요소와 할당된 활성 결함만 내보냅니다. 결함을 결함 내장 모델에 포함시키려면, 해당 결함을 활성화하십시오. 결함 테이블 창에서 켜기 열의 체크박스를 클릭하여 Sum1/Outport/1 모델 요소를 켜고 결함을 활성화합니다.
결함 내장 모델을 생성하고, 이 모델이 포함된 폴더와 다른 디렉터리에 저장하십시오. 함수를 사용하여 결함 내장 모델을 프로그래밍 방식으로 생성할 수도 있습니다.Simulink.fault.exportEmbeddedModel
결함 분석기 탭의 공유 섹션에서 결함 내장 모델 내보내기를 클릭합니다.
새 모델의 이름과 위치를 지정합니다.
선택한 폴더는 비어 있어야 합니다. 폴더가 비어 있지 않은 경우, 폴더 파일을 수동으로 삭제하거나 기존 폴더 내용 삭제를 선택하십시오.
확인을 클릭합니다.
내보내기 프로세스가 완료되면 해당 결함 내장 모델을 여십시오. 이 모델은 결함을 Sum1 블록의 출력 포트와 Controller 서브시스템의 Stick Input 포트 사이의 서브시스템으로 표현합니다.
코드 생성 준비하기
Simulink Coder™ 또는 Embedded Coder® 라이선스를 보유한 경우, 결함 내장 모델로부터 코드를 생성할 수 있습니다. 이 예제에는 이전 섹션에서 생성한 결함 내장 모델의 사본이 포함되어 있습니다. slexAircraftFaultedExample_faultEmbedded 모델을 엽니다.

결함 내장 모델은 처음 생성할 때 코드 생성을 지원하지 않을 수 있습니다. 해당 코드를 MATLAB® 및 Simulink 코드 표준 및 지침에 부합하도록 구성해야 합니다. 코드 인터페이스 구성 (Simulink Coder) 항목을 참조하십시오. 이 예제에서, 결함 내장 모델로부터 코드를 생성하려고 시도하면 모델이 오류를 반환합니다. 이는 모델이 가변 스텝 크기 솔버를 사용하고 myFault 서브시스템 내의 SimulationTime 블록이 해당 샘플 시간을 상속하기 때문입니다.
솔버 유형을 고정 스텝 솔버로 업데이트하려면 다음을 수행하십시오.
모델링 탭에서 모델 설정을 클릭합니다.
왼쪽 창에서 솔버를 선택합니다.
오른쪽 창에서 솔버 선택 섹션에서 유형을
Fixed-Step으로 설정합니다.확인을 클릭합니다.
SimulationTime 블록이 코드 생성을 지원하도록 하려면 블록 샘플 시간을 이산화하십시오. 이 예제에서는 샘플 시간을 0.1로 설정하십시오.
내장된 결함 서브시스템인
myFault를 엽니다.SimulationTime블록을 더블 클릭합니다.블록 파라미터 창에서 샘플 시간을
0.1로 설정합니다.확인을 클릭합니다.
코드 생성
Simulink Coder를 사용하여 코드를 생성합니다. 앱 탭에서 Simulink Coder를 클릭합니다. 코드 생성 섹션에서 빌드를 클릭합니다. 코드 생성 리포트를 열려면 결과 섹션에서 리포트 열기를 클릭합니다. myFault 서브시스템에 대해 생성된 코드를 보려면 slexAircraftFaultedExample_faultEmbedded.c 파일에서 검색하십시오.
/* Outputs for Atomic SubSystem: '<Root>/myFault' */
/* Outputs for Atomic SubSystem: '<S4>/FaultBehavior' */
/* RandomNumber: '<S61>/White Noise' */
slexAircraftFaultedExample_fa_B.WhiteNoise_k =
slexAircraftFaultedExample_f_DW.NextOutput_d; /* Sum: '<S61>/Sum' */
slexAircraftFaultedExample_fa_B.Sum_l =
slexAircraftFaultedExample_fa_B.Sum1_m +
slexAircraftFaultedExample_fa_B.WhiteNoise_k;/* End of Outputs for SubSystem: '<S4>/FaultBehavior' */
/* DigitalClock: '<S4>/SimulationTime' */
slexAircraftFaultedExample_fa_B.SimulationTime =
slexAircraftFaultedExample_f_M->Timing.t[1]; /* Switch: '<S4>/FaultTrigger' */
if (slexAircraftFaultedExample_fa_B.SimulationTime >=
slexAircraftFaultedExample_fa_P.FaultTrigger_Threshold) {
/* Switch: '<S4>/FaultTrigger' */
slexAircraftFaultedExample_fa_B.FaultTrigger =
slexAircraftFaultedExample_fa_B.Sum_l;
} else {
/* Switch: '<S4>/FaultTrigger' */
slexAircraftFaultedExample_fa_B.FaultTrigger =
slexAircraftFaultedExample_fa_B.Sum1_m;
}/* End of Switch: '<S4>/FaultTrigger' */ /* End of Outputs for SubSystem: '<Root>/myFault' */
참고 항목
Simulink.fault.exportEmbeddedModel