이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.
결함 시뮬레이션 실행 및 결과 보기
이 예제에서는 결함 시뮬레이션을 실행하는 방법을 보여줍니다. 결함을 모델링할 때는 시뮬레이션을 두 번 이상 실행해야 할 때가 많습니다. 대화형 시뮬레이션을 실행하거나 결함 동작의 파라미터를 프로그래밍 방식으로 조정하고 MATLAB® 코드로 시뮬레이션을 자동화할 수 있습니다. 시뮬레이션 데이터 인스펙터에서 결과를 검사할 수 있습니다.
비디오 안내
예제를 살펴보려면 영상을 재생하십시오.
대화형으로 모델 시뮬레이션
sldemo_fuelsys_fault_analyzer 모델을 열고 헬퍼 함수 myFuelSysCase를 사용하여 결함을 설정합니다. 헬퍼 함수는 기존 Simulink® Fault Analyzer™ 모델 아티팩트를 삭제하고 이를 예제에서 사용된 결함으로 대체합니다.
myFuelSysCase(4)
함수를 실행한 후에는 모델에 To Controller 서브시스템의 각 입력 포트에 대한 결함이 포함됩니다. 이 모델에는 시간이 25일 때 트리거되는 활성화된 결함 throttle_fault가 하나 있습니다. 모델을 시뮬레이션합니다.
model = "sldemo_fuelsys_fault_analyzer";
sim(model)시뮬레이션 전체에서 결함 상태를 보기 위해 시뮬레이션 데이터 인스펙터를 사용하여 결과를 검사할 수 있습니다. 결함 분석기 탭의 결과 검토 섹션에서 데이터 인스펙터를 클릭합니다. 다음 명령을 사용하여 시뮬레이션 데이터 인스펙터를 열 수도 있습니다.
Simulink.sdi.view
시뮬레이션 데이터 인스펙터는 결함 상태를 true 또는 false로 기록합니다. 이 예제에서는 첫 번째 실행에 대한 Faults 목록을 펼치고 throttle_fault 결함을 선택하여 시간에 따른 상태를 그래프로 표시함으로써, 해당 결함이 25 초가 될 때까지 주입되지 않는지 확인하십시오.

결함 대시보드 창을 열어서 결함이 주입되었는지 확인할 수도 있습니다. 결함 분석기 탭의 보기 섹션에서 결함 대시보드를 클릭합니다. 시뮬레이션 결과 탭은 시뮬레이션 중에 활성 결함 throttle_fault가 트리거되었음을 보여줍니다.

스크립트를 사용하여 결함 속성 조정 및 시뮬레이션 수행
각 결함은 프로그래밍 방식으로 조정할 수 있는 속성을 가진 Fault 객체에 해당합니다. 이 예제에서는 결함의 트리거 시간인 throttle_fault를 증가시키고 각각의 조정 후에 시뮬레이션합니다. 이 결함은 To Controller의 첫 번째 입력 포트에서 발생합니다.
To Controller는 결함이 있는 유일한 블록입니다. 결함 경로를 string형 배열로 가져오려면 Simulink.fault.findFaultedElements 함수를 사용하십시오.
elements = Simulink.fault.findFaultedElements(model);
각 배열 요소는 입력 포트에 대한 모델 경로를 숫자순으로 나열합니다. 예를 들어, elements의 첫 번째 요소는 첫 번째 입력 포트의 경로입니다.
elements(1)
ans = "sldemo_fuelsys_fault_analyzer/To Controller/Inport/1"
Simulink.fault.findFaults 함수를 사용하여 Fault 객체를 가져옵니다.
sweptFault = Simulink.fault.findFaults(model,... ModelElement=elements(1),Name="throttle_fault",TriggerType="Timed");
To Controller의 첫 번째 입력 포트에서 결함을 활성화하고, Simulink.fault.enable 함수를 사용하여 다른 포트에서 결함을 비활성화합니다.
for n = 1:length(elements) if n == 1 Simulink.fault.enable(elements(n),true) else Simulink.fault.enable(elements(n),false) end end
activate 함수를 사용하여 throttle_fault를 활성 결함으로 설정합니다.
activate(sweptFault)
Simulink.fault.injection 함수를 사용하여 결함 시뮬레이션을 켭니다.
Simulink.fault.injection(model,1);
throttle_fault는 시간 기반 트리거를 사용합니다. 시뮬레이션이 지정된 트리거 시간에 도달하면 결함이 주입됩니다. 트리거 시간을 조정하려면 Fault 객체의 StartTime 속성을 수정합니다. 이 예제에서는 트리거 시간을 10에서 시작하고 트리거 시간을 2씩 증가시킵니다.
numberOfSims = 6; for n = 1:numberOfSims sweptFault.StartTime = 8+2*n; sim(model); end
스크립트를 사용하여 결함 동작 변경 및 시뮬레이션
결함 모델의 Fault Subsystem 블록에 액세스하여 Simulink® 모델의 결함 동작을 수정할 수도 있습니다. 이 예에서는 결함 ego_fault와 연결된 동작을 조정합니다.
ego_fault의 Fault 객체를 가져옵니다.
sweptFault = Simulink.fault.findFaults(model,...
ModelElement=elements(3));Simulink.fault.getFaultModels 및 getBehavior 함수를 사용하여 ego_fault와 연관된 결함 모델 및 Fault Subsystem 블록의 경로를 가져옵니다.
faultModel = Simulink.fault.getFaultModels(model); faultSubsystem = getBehavior(sweptFault);
Fault Subsystem 블록 ego_fault를 열어서 동작을 확인합니다.
open_system(faultModel) open_system(faultSubsystem)
이 동작은 값이 12인 Constant 블록으로 신호를 재정의합니다. 이 예제에서는 이 블록의 값을 조정합니다. To Controller에 대한 세 번째 입력 포트의 결함을 활성화하고 다른 입력 포트의 결함을 비활성화합니다.
for n = 1:length(elements) if n == 3 Simulink.fault.enable(elements(n),true) else Simulink.fault.enable(elements(n),false) end end
ego_fault를 활성 결함으로 설정합니다.
activate(sweptFault)
Constant 블록의 상수 값 파라미터를 각각의 시뮬레이션에서 7에서 12까지 1씩 증가시킵니다.
sweptBlock = "Constant"; numberOfSims = 6; for n = 1:numberOfSims constVal = 6 + n; set_param(faultSubsystem + "/" + sweptBlock,Value=string(constVal)) sim(model); end
추가 시뮬레이션 옵션
모델에 변경 사항을 저장하지 않고 시뮬레이션의 수치적 결과를 캡처하려면 모델에 대해 Simulink.SimulationInput 객체를 정의하고 시뮬레이션 결과를 Simulink.SimulationOutput 객체에 저장하여 모델을 시뮬레이션하십시오. 이러한 객체를 만든 후 parsim을 사용하여 시뮬레이션을 실행할 수도 있습니다.
결함의 추가, 삭제, 업데이트 자동화
프로그래밍 옵션을 사용하여 결함을 생성, 삭제, 업데이트할 수도 있습니다. 프로그래밍 옵션 목록은 결함 모델링 및 결함 시뮬레이션 항목을 참조하십시오. 추가 예제를 보려면 프로그래밍 방식으로 결함 추가 및 구성 항목을 참조하십시오.