이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
결함 시뮬레이션 실행 및 결과 보기
이 예제에서는 결함 시뮬레이션을 실행하는 방법을 보여줍니다. 결함을 모델링할 때는 시뮬레이션을 두 번 이상 실행해야 할 때가 많습니다. 대화형 시뮬레이션을 실행하거나 결함 동작의 파라미터를 프로그래밍 방식으로 조정하고 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로 기록합니다. 이 예제에서 첫 번째 실행에 대한 결함 목록을 확장하고 결함 throttle_fault를 선택하여 시간에 대한 상태를 표시해 결함이 25초까지 주입되지 않았음을 확인하십시오.

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

스크립트를 사용하여 결함 속성 조정 및 시뮬레이션
각 결함은 프로그래밍 방식으로 조정할 수 있는 속성을 가진 Fault 객체에 해당합니다. 이 예제에서는 결함의 트리거 시간인 throttle_fault를 증가시키고 각각의 조정 후에 시뮬레이션합니다. 이 결함은 To Controller의 첫 번째 입력 포트에서 발생합니다.
To Controller는 결함이 있는 유일한 블록입니다. Simulink.fault.findFaultedElements 함수를 사용하여 이 블록의 결함 경로를 string형 배열로 가져옵니다.
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을 사용하여 시뮬레이션을 실행할 수도 있습니다.
결함의 추가, 삭제, 업데이트 자동화
프로그래밍 옵션을 사용하여 결함을 생성, 삭제, 업데이트할 수도 있습니다. 프로그래밍 옵션 목록은 결함 모델링 및 결함 시뮬레이션 항목을 참조하십시오. 추가 예제를 보려면 프로그래밍 방식으로 결함 추가 및 구성 항목을 참조하십시오.