이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
프로그래밍 방식으로 결함 추가 및 구성
이 예제는 항공기의 종방향 운동을 위한 비행 제어 알고리즘을 모델링합니다. 정상적인 작동 조건에서 이 모델은 문제 없이 작동합니다. 그러나 컨트롤러 하드웨어나 소프트웨어에 결함이 발생하면 기능적 동작이 방해를 받고 위험한 상황이 발생할 수 있습니다. 결함을 모델링하면 결함의 영향을 조사하고 필요한 경우 설계에 미치는 결함의 영향을 방지하거나 완화할 수 있습니다.
프로그래밍 방식으로 결함을 생성하고 관리할 수 있습니다. 이 예제에서는 프로그래밍 방식으로 모델을 열고 동작에 대한 결함을 추가하고 시뮬레이션합니다. 결함을 대화형으로 정의하고 모델링하는 방법에 대한 자세한 내용은 결함 정의 및 모델링 항목을 참조하십시오.
slexAircraftExampleFaulted
예제 모델을 엽니다.
mdl = "slexAircraftFaultedExample";
open_system(mdl);
이 모델은 항공기 세로 방향 비행 제어 예제의 모델을 이산화한 버전입니다.
모델에 결함 추가
이 예에서 Controller
서브시스템은 종방향 비행 제어를 위한 컨트롤러를 나타냅니다. Controller
내부의 alpha (rad)
블록은 피치 각도 센서의 값을 나타내고, Stick Input
블록은 조종간 센서의 값을 나타냅니다.
함수를 사용하여 Sum 블록의 출력 포트 Simulink.fault.addFault
Sum1
에 두 개의 결함을 추가하고 Gain 블록의 출력 Gain3
에 하나의 결함을 추가합니다.
Simulink.fault.addFault(mdl + "/Sum1/Outport/1",Name="faultA"); Simulink.fault.addFault(mdl + "/Sum1/Outport/1",Name="faultB"); Simulink.fault.addFault(... mdl + "/Controller/Gain3/Outport/1",Name="faultC");
추가하는 각 결함에는 연관된 Fault
객체가 있습니다. 결함 속성을 수정하려면
함수를 사용하여 Simulink.fault.findFaults
Fault
객체를 배열로 가져옵니다. 이 함수는 이름을 기준으로 사전순으로 인덱싱된 Fault
객체를 반환합니다.
faults = Simulink.fault.findFaults(mdl);
결함에 동작 추가 및 결함 트리거 지정
모델에 결함을 추가하는 것 외에도 각 결함에 동작을 할당하여 모델에 미치는 영향을 시뮬레이션해야 합니다.
함수를 사용하여 addBehavior
faultA
에 0에 고정된 동작을 할당하고 faultB
와 faultC
에 잡음 동작을 추가합니다. 현재 디렉터리에 있는 myBehaviors
라는 결함 모델에 동작을 추가합니다.
addBehavior(faults(1),"myBehaviors",... FaultBehavior="mwfaultlib/Stuck-at-Ground") addBehavior(faults(2),"myBehaviors",... FaultBehavior="mwfaultlib/Add Noise") addBehavior(faults(3),"myBehaviors",... FaultBehavior="mwfaultlib/Add Noise")
실수로 결함 동작을 할당한 경우 Fault
객체에서
함수를 사용하여 결함 동작을 삭제합니다.deleteBehavior
지정된 조건이 모델에 발생하면 결함이 주입됩니다. 기본적으로 결함은 시뮬레이션 전체에 걸쳐 주입됩니다. 하지만 트리거라고 알려진 다양한 주입 조건을 지정할 수 있습니다. 첫 번째 결함과 마지막 결함을 시뮬레이션 시간이 30
일 때 삽입되는 시간 기반 결함으로 지정합니다. TriggerType
및 StartTime
속성을 지정하여 트리거 유형과 트리거 시간을 지정합니다.
faults(1).TriggerType = "Timed"; faults(1).StartTime = 30; faults(3).TriggerType = "Timed"; faults(3).StartTime = 30;
조건 만들기
faultB
트리거 유형을 조건으로 지정합니다.
faults(2).TriggerType = "Conditional";
조건에는 사용자가 만들고 사용자 정의할 수 있는 연관된 Conditional
객체가 있습니다. 이 예제에서는
함수를 사용하여 컨트롤러가 Simulink.fault.addConditional
0.4
보다 큰 스틱 값을 읽을 때 트리거되는 조건을 만듭니다.
myConditional = Simulink.fault.addConditional(... mdl,"myConditional","u1 > 0.4");
faultB
에 조건을 할당합니다.
faults(2).Conditional = "myConditional";
표현식이나 모델 요소에 u1
기호를 할당해야 합니다.
함수를 사용하여 기호를 가져오고 이를 컨트롤러가 읽는 스틱의 값에 할당합니다. 이 값은 Transfer Fcn 블록 getSymbols
Stick Prefilter
의 출력에 의해 결정됩니다.
mySymbol = getSymbols(myConditional); mySymbol.Type = "Model Element"; mySymbol.Path = mdl + "/Controller/Stick Prefilter/Outport/1";
이 할당으로 조건은 스틱 신호 값이 0.8
보다 클 때 트리거되며, 그때서야 결함이 컨트롤러로 전송된 신호 값에 잡음을 추가합니다.
결함 켜기 및 활성 결함 선택
결함 속성을 정의한 후 지정된 모델 요소에 대한 결함을 활성화하고, 활성 결함을 선택하고, 결함 모델링을 켭니다.
함수를 사용하여 Sum 블록 출력에서 결함을 활성화하고 Simulink.fault.enable
alpha (rad)
에서 나오는 신호에서 결함을 비활성화합니다.
Simulink.fault.enable(mdl + "/Sum1/Outport/1",true); Simulink.fault.enable(mdl + "/Controller/Gain3/Outport/1",false);
FaultA
를 활성 결함으로 설정합니다.
activate(faults(1))
결과 시뮬레이션 및 검사
결함의 영향을 확인하기 위해 모델을 시뮬레이션합니다.
sim(mdl);
결함 주입 상태와 시뮬레이션 결과를 보려면 시뮬레이션 데이터 인스펙터를 엽니다.
Simulink.sdi.view
해당 대상이 불연속적이지 않으면 연속 신호에서 결함을 시뮬레이션할 수 없습니다. 따라서 faultA
또는 faultB
만 시뮬레이션할 수 있습니다.
참고 항목
getSymbols
| Simulink.fault.addConditional
| Simulink.fault.addFault
| Simulink.fault.enable
| Simulink.fault.save