/* Date : 8 oct. 2018 */ /* DataFlow format */ domain Functions_BasicFunctions_BasicFunctionStatus = {ERRONEOUS, LOST, OK}; domain Functions_BasicFunctions_ModeSelection = {AUTO, MANUAL}; domain Functions_BasicFunctions_Presence = {ABSENT, PRESENT}; domain Functions_BasicFunctions_ModeSelection_ErroneousLost = {AUTO, ERRONEOUS, LOST, MANUAL}; node Functions_BasicFunctions_InOutFunction flow icone:[1,3]:private; input:Functions_BasicFunctions_BasicFunctionStatus:in; output:Functions_BasicFunctions_BasicFunctionStatus:out; state status:Functions_BasicFunctions_BasicFunctionStatus; event fail_loss, fail_error; trans (status = OK) |- fail_loss -> status := LOST; (status = OK) |- fail_error -> status := ERRONEOUS; assert icone = case { (status = OK) : 1, (status = LOST) : 2, else 3 }, output = case { (status = OK) : input, else status }; init status := OK; extern law = constant(1.0E-4); law = constant(1.0E-5); edon node Functions_BasicFunctions_InOutModeFunction flow icone:[1,2]:private; outputMode:Functions_BasicFunctions_ModeSelection:out; inputMode:Functions_BasicFunctions_ModeSelection:in; state status:{OK, STUCK_AUTO, STUCK_MAN}; event stuck_auto, stuck_man; trans (status = OK) |- stuck_man -> status := STUCK_MAN; (status = OK) |- stuck_auto -> status := STUCK_AUTO; assert outputMode = case { (status = STUCK_AUTO) : AUTO, (status = STUCK_MAN) : MANUAL, else inputMode }, icone = (if (outputMode = AUTO) then 1 else 2); init status := OK; extern law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; edon node Functions_BasicFunctions_SourceFunction flow icone:[1,3]:private; output:Functions_BasicFunctions_BasicFunctionStatus:out; state status:Functions_BasicFunctions_BasicFunctionStatus; event fail_loss, fail_error; trans (status = OK) |- fail_loss -> status := LOST; (status = OK) |- fail_error -> status := ERRONEOUS; assert icone = case { (status = OK) : 1, (status = LOST) : 2, else 3 }, output = status; init status := OK; extern law = constant(1.0E-4); law = constant(1.0E-5); edon node AIDASystem_Functions_Detection_v44 flow inputFlightPlan:Functions_BasicFunctions_BasicFunctionStatus:in; inputPosition:Functions_BasicFunctions_BasicFunctionStatus:in; inputSpeed:Functions_BasicFunctions_BasicFunctionStatus:in; inputControlPosition:Functions_BasicFunctions_BasicFunctionStatus:in; inputLostHelixesControl:bool:in; inputIndicatedMode:Functions_BasicFunctions_ModeSelection:in; PilotSelectedMode:Functions_BasicFunctions_ModeSelection:out; ManualPayloadControl:Functions_BasicFunctions_Presence:out; PilotInconsistentControl:bool:out; PilotOrders:Functions_BasicFunctions_Presence:out; state mode:Functions_BasicFunctions_ModeSelection; event GoToManualMode; trans (mode = AUTO) |- GoToManualMode -> mode := MANUAL; assert PilotSelectedMode = (if (mode = AUTO) then AUTO else MANUAL), ManualPayloadControl = (if (mode = AUTO) then ABSENT else PRESENT), PilotInconsistentControl = ((mode = AUTO) and ((((((inputFlightPlan = ERRONEOUS) or (inputPosition # OK)) or (inputSpeed # OK)) or (inputControlPosition # OK)) or inputLostHelixesControl) or (inputIndicatedMode = MANUAL))), PilotOrders = (if (mode = AUTO) then ABSENT else PRESENT); init mode := AUTO; extern law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; edon node Functions_BasicOperators_AND flow output:Functions_BasicFunctions_BasicFunctionStatus:out; input_1:Functions_BasicFunctions_BasicFunctionStatus:in; input_2:Functions_BasicFunctions_BasicFunctionStatus:in; assert output = (if ((input_1 = OK) and (input_2 = OK)) then OK else (if ((input_1 = LOST) or (input_2 = LOST)) then LOST else ERRONEOUS)); edon node Functions_BasicOperators_ErrConditionalSelector_2 flow icone:[1,2]:private; inputAUTO:Functions_BasicFunctions_BasicFunctionStatus:in; inputMANUAL:Functions_BasicFunctions_BasicFunctionStatus:in; condition:Functions_BasicFunctions_ModeSelection:in; output:Functions_BasicFunctions_BasicFunctionStatus:out; assert icone = (if (condition = AUTO) then 1 else 2), output = (if (condition = AUTO) then inputAUTO else inputMANUAL); edon node Functions_BasicOperators_ANDBoolErrLost flow icone:[1,2]:private; input:bool:in; output:bool:out; failurePropagation:Functions_BasicFunctions_BasicFunctionStatus:in; assert icone = (if (failurePropagation = OK) then 1 else 2), output = case { (failurePropagation = LOST) : false, (failurePropagation = ERRONEOUS) : true, else input }; edon node Boolean_Boolean_or4 flow icone:[1,2]:private; O:bool:out; I1:bool:in; I2:bool:in; I3:bool:in; I4:bool:in; assert icone = case { (((I1 or I2) or I3) or I4) : 1, else 2 }, O = (((I1 or I2) or I3) or I4); edon node Functions_BasicOperators_Comparator flow input1:Functions_BasicFunctions_BasicFunctionStatus:in; input2:Functions_BasicFunctions_BasicFunctionStatus:in; output:bool:out; assert output = case { (input1 = LOST) : true, (input2 = LOST) : true, (input1 = input2) : false, else true }; edon node Quadcopter_Observers_PilotRequiresManualMode flow icone:[1,2]:private; output:bool:out; input:Functions_BasicFunctions_ModeSelection:in; assert output = (input = MANUAL), icone = (if output then 2 else 1); edon node Boolean_Boolean_filter flow filterCriterion:bool:in; input:bool:in; output:bool:out; assert output = (if filterCriterion then false else input); edon node Quadcopter_Observers_StuckModeMAN_v03 flow icone:[1,2]:private; output:bool:out; PilotAPEngagementOrder:Functions_BasicFunctions_ModeSelection:in; AppliedAPEngagement:Functions_BasicFunctions_ModeSelection:in; assert output = ((AppliedAPEngagement = MANUAL) and (PilotAPEngagementOrder = AUTO)), icone = (if output then 2 else 1); edon node Boolean_Boolean_or2 flow icone:[1,2]:private; O:bool:out; I1:bool:in; I2:bool:in; assert icone = case { (I1 or I2) : 1, else 2 }, O = (I1 or I2); edon node Quadcopter_Observers_StuckMode_v03 flow icone:[1,2]:private; output:bool:out; input:Functions_BasicFunctions_ModeSelection:in; assert output = (input = AUTO), icone = (if output then 2 else 1); edon node Boolean_Boolean_intermediate flow icone:[1,2]:private; O:bool:out; I:bool:in; assert icone = case { I : 1, else 2 }, O = I; edon node Boolean_Boolean_and2 flow O:bool:out; I1:bool:in; I2:bool:in; assert O = (I1 and I2); edon node Quadcopter_Observers_ErroneousControlOfOneHelix flow icone:[1,2]:private; in1:Functions_BasicFunctions_BasicFunctionStatus:in; in2:Functions_BasicFunctions_BasicFunctionStatus:in; in3:Functions_BasicFunctions_BasicFunctionStatus:in; in4:Functions_BasicFunctions_BasicFunctionStatus:in; output:bool:out; assert output = ((((in1 = ERRONEOUS) or (in2 = ERRONEOUS)) or (in3 = ERRONEOUS)) or (in4 = ERRONEOUS)), icone = (if output then 2 else 1); edon node Quadcopter_Observers_TotalLossOfHelixesControl flow icone:[1,2]:private; in1:Functions_BasicFunctions_BasicFunctionStatus:in; in2:Functions_BasicFunctions_BasicFunctionStatus:in; in3:Functions_BasicFunctions_BasicFunctionStatus:in; in4:Functions_BasicFunctions_BasicFunctionStatus:in; output:bool:out; assert output = ((((in1 = LOST) and (in2 = LOST)) and (in3 = LOST)) and (in4 = LOST)), icone = (if output then 2 else 1); edon node Quadcopter_Observers_LossOfAtMost3HelixesControl flow icone:[1,2]:private; in1:Functions_BasicFunctions_BasicFunctionStatus:in; in2:Functions_BasicFunctions_BasicFunctionStatus:in; in3:Functions_BasicFunctions_BasicFunctionStatus:in; in4:Functions_BasicFunctions_BasicFunctionStatus:in; output:bool:out; assert output = ((((((((in1 = LOST) and (in2 # ERRONEOUS)) and (in3 # ERRONEOUS)) and (in4 # ERRONEOUS)) or ((((in2 = LOST) and (in1 # ERRONEOUS)) and (in3 # ERRONEOUS)) and (in4 # ERRONEOUS))) or ((((in3 = LOST) and (in2 # ERRONEOUS)) and (in1 # ERRONEOUS)) and (in4 # ERRONEOUS))) or ((((in4 = LOST) and (in2 # ERRONEOUS)) and (in3 # ERRONEOUS)) and (in1 # ERRONEOUS))) and (not ((((in1 = LOST) and (in2 = LOST)) and (in3 = LOST)) and (in4 = LOST)))), icone = (if output then 2 else 1); edon node Functions_BasicOperators_PerfectPresenceSelectorOK flow icone:[1,2]:private; input:Functions_BasicFunctions_BasicFunctionStatus:in; output:Functions_BasicFunctions_BasicFunctionStatus:out; condition:Functions_BasicFunctions_Presence:in; assert icone = (if (condition = PRESENT) then 2 else 1), output = (if (condition = PRESENT) then OK else input); edon node Functions_BasicFunctions_AbsentPresentFunction flow icone:[1,2]:private; input:Functions_BasicFunctions_Presence:in; output:Functions_BasicFunctions_Presence:out; state status:{LOST, OK}; event fail_loss; trans (status = OK) |- fail_loss -> status := LOST; assert icone = case { (status = OK) : 1, else 2 }, output = case { (status = OK) : input, else ABSENT }; init status := OK; extern law = exponential(1.0E-6); edon node Functions_BasicOperators_PerfectPresenceSelectorLOSS flow icone:[1,2]:private; input:Functions_BasicFunctions_BasicFunctionStatus:in; output:Functions_BasicFunctions_BasicFunctionStatus:out; condition:Functions_BasicFunctions_Presence:in; assert icone = (if (condition = ABSENT) then 1 else 2), output = (if (condition = PRESENT) then LOST else input); edon node Functions_BasicFunctions_SourcePresenceFunction flow icone:[1,2]:private; output:Functions_BasicFunctions_Presence:out; state status:Functions_BasicFunctions_Presence; event fail_inadv; trans (status = ABSENT) |- fail_inadv -> status := PRESENT; assert icone = case { (status = ABSENT) : 1, else 2 }, output = status; init status := ABSENT; extern law = constant(1.0E-5); edon node Functions_BasicOperators_Choice flow icone:[1,2]:private; output:Functions_BasicFunctions_BasicFunctionStatus:out; input_1:Functions_BasicFunctions_BasicFunctionStatus:in; input_2:Functions_BasicFunctions_BasicFunctionStatus:in; assert icone = (if (input_2 = ERRONEOUS) then 2 else 1), output = (if (input_2 = ERRONEOUS) then ERRONEOUS else input_1); edon node Functions_BasicOperators_transtypageMode flow icone:[1,2]:private; O:Functions_BasicFunctions_ModeSelection_ErroneousLost:out; I:Functions_BasicFunctions_ModeSelection:in; assert icone = case { (I = AUTO) : 1, else 2 }, O = (if (I = AUTO) then AUTO else MANUAL); edon node Functions_BasicFunctions_ErroneousLostModeSelector flow icone:[1,2]:private; outputMode:Functions_BasicFunctions_ModeSelection_ErroneousLost:out; inputMode:Functions_BasicFunctions_ModeSelection_ErroneousLost:in; state status:{LOSS, OK, STUCK_AUTO, STUCK_MAN, UNDEF}; event stuck_auto, stuck_manual, OscillatoryModeSelection, fail_loss; trans (status = OK) |- stuck_auto -> status := STUCK_AUTO; (status = OK) |- stuck_manual -> status := STUCK_MAN; (status = OK) |- OscillatoryModeSelection -> status := UNDEF; (status = OK) |- fail_loss -> status := LOSS; assert outputMode = case { ((status = OK) and (inputMode = AUTO)) : AUTO, ((status = OK) and (inputMode = MANUAL)) : MANUAL, ((status = OK) and (inputMode = ERRONEOUS)) : ERRONEOUS, (status = LOSS) : LOST, (status = STUCK_AUTO) : AUTO, (status = UNDEF) : ERRONEOUS, else MANUAL }, icone = case { (outputMode = AUTO) : 1, else 2 }; init status := OK; extern law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; attribute DassaultSpecialCtrlPeriod() = 9.877E8; edon node Functions_BasicFunctions_ErroneousLostPresentModeSelector flow icone:[1,2]:private; outputMode:Functions_BasicFunctions_ModeSelection_ErroneousLost:out; inputMode:Functions_BasicFunctions_ModeSelection_ErroneousLost:in; ManualConsigns:Functions_BasicFunctions_BasicFunctionStatus:in; MissionCompleted:Functions_BasicFunctions_Presence:in; state status:{LOSS, OK, STUCK_AUTO, STUCK_MAN, UNDEF}; event stuck_auto, stuck_manual, OscillatoryModeSelection, fail_loss; trans (status = OK) |- stuck_auto -> status := STUCK_AUTO; (status = OK) |- stuck_manual -> status := STUCK_MAN; (status = OK) |- OscillatoryModeSelection -> status := UNDEF; (status = OK) |- fail_loss -> status := LOSS; assert outputMode = case { ((status = OK) and ((ManualConsigns # LOST) or (MissionCompleted = PRESENT))) : MANUAL, ((status = OK) and (inputMode = AUTO)) : AUTO, ((status = OK) and (inputMode = MANUAL)) : MANUAL, ((status = OK) and (inputMode = ERRONEOUS)) : ERRONEOUS, ((status = OK) and (inputMode = LOST)) : MANUAL, (status = STUCK_AUTO) : AUTO, (status = STUCK_MAN) : MANUAL, (status = UNDEF) : ERRONEOUS, else LOST }, icone = case { (outputMode = AUTO) : 1, else 2 }; init status := OK; extern law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; law = exponential(0.001); attribute DassaultSpecialCtrlPeriod() = 9.877E8; attribute DassaultSpecialCtrlPeriod() = 9.877E8; edon node Functions_BasicFunctions_FaultyManualModeSelector_LossType flow icone:[1,2]:private; outputMode:Functions_BasicFunctions_ModeSelection:out; inputMode:Functions_BasicFunctions_ModeSelection_ErroneousLost:in; FlightPlanInterruption:Functions_BasicFunctions_Presence:out; state status:{OK, STUCK_AUTO, STUCK_MANUAL}; event stuck_auto, stuck_manual; trans (status = OK) |- stuck_auto -> status := STUCK_AUTO; (status = OK) |- stuck_manual -> status := STUCK_MANUAL; assert outputMode = case { ((status = OK) and ((inputMode = ERRONEOUS) or (inputMode = LOST))) : MANUAL, ((status = OK) and (inputMode = AUTO)) : AUTO, ((status = OK) and (inputMode = MANUAL)) : MANUAL, (status = STUCK_AUTO) : AUTO, else MANUAL }, icone = case { (outputMode = AUTO) : 1, else 2 }, FlightPlanInterruption = case { ((status = OK) and ((inputMode = ERRONEOUS) or (inputMode = LOST))) : PRESENT, ((status = OK) and (inputMode = AUTO)) : ABSENT, ((status = OK) and (inputMode = MANUAL)) : PRESENT, (status = STUCK_AUTO) : ABSENT, else PRESENT }; init status := OK; extern attribute DassaultSpecialCtrlPeriod() = 9.877E8; attribute DassaultSpecialCtrlPeriod() = 9.877E8; edon node Functions_BasicOperators_PerfectConditionalSelectorLOST flow icone:[1,2]:private; input:Functions_BasicFunctions_BasicFunctionStatus:in; output:Functions_BasicFunctions_BasicFunctionStatus:out; condition:bool:in; assert icone = (if condition then 2 else 1), output = (if condition then LOST else input); edon node Boolean_Boolean_BooleanInOutFunction flow icone:[1,3]:private; input:bool:in; output:bool:out; state status:{OK, STUCK_FALSE, STUCK_TRUE}; event stuck_true, stuck_false; trans (status = OK) |- stuck_true -> status := STUCK_TRUE; (status = OK) |- stuck_false -> status := STUCK_FALSE; assert icone = case { (status = OK) : 1, (status = STUCK_FALSE) : 3, else 2 }, output = case { (status = OK) : input, (status = STUCK_FALSE) : false, else true }; init status := OK; extern attribute DassaultSpecialCtrlPeriod() = 9.877E8; attribute DassaultSpecialCtrlPeriod() = 9.877E8; edon node Functions_BasicFunctions_InOutPresentFunction flow icone:[1,3]:private; input:Functions_BasicFunctions_Presence:in; output:Functions_BasicFunctions_BasicFunctionStatus:out; state status:Functions_BasicFunctions_BasicFunctionStatus; event fail_loss, fail_error; trans (status = OK) |- fail_loss -> status := LOST; (status = OK) |- fail_error -> status := ERRONEOUS; assert icone = case { (status = OK) : 1, (status = LOST) : 2, else 3 }, output = case { (status = OK) : (if (input = PRESENT) then OK else LOST), else status }; init status := OK; extern law = constant(1.0E-4); law = constant(1.0E-5); edon node eq_AIDASystem_Functions_SF232_5_ControlAttitude flow icone:[1,3]:private; Attitude:Functions_BasicFunctions_BasicFunctionStatus:in; AttitudeAPConsign:Functions_BasicFunctions_BasicFunctionStatus:in; PitchRollConsign:Functions_BasicFunctions_BasicFunctionStatus:in; YawConsign:Functions_BasicFunctions_BasicFunctionStatus:in; APEngagement:Functions_BasicFunctions_ModeSelection:in; P:Functions_BasicFunctions_BasicFunctionStatus:out; sub AND3:Functions_BasicOperators_AND; ControlAttitudeState:Functions_BasicFunctions_InOutFunction; SF232_SelectAttitudeConsign:Functions_BasicOperators_ErrConditionalSelector_2; AND2:Functions_BasicOperators_AND; AND1:Functions_BasicOperators_AND; assert icone = (if (ControlAttitudeState.status = OK) then 1 else (if (ControlAttitudeState.status = LOST) then 3 else 2)), P = ControlAttitudeState.output, AND3.input_1 = PitchRollConsign, AND3.input_2 = YawConsign, ControlAttitudeState.input = SF232_SelectAttitudeConsign.output, SF232_SelectAttitudeConsign.inputAUTO = AND2.output, SF232_SelectAttitudeConsign.inputMANUAL = AND1.output, SF232_SelectAttitudeConsign.condition = APEngagement, AND2.input_1 = AttitudeAPConsign, AND2.input_2 = Attitude, AND1.input_1 = AND3.output, AND1.input_2 = Attitude; edon node eq_AIDASystem_Functions_SF242_3_ControlAltitude flow icone:[1,3]:private; Altitude:Functions_BasicFunctions_BasicFunctionStatus:in; Attitude:Functions_BasicFunctions_BasicFunctionStatus:in; AltitudeConsign:Functions_BasicFunctions_BasicFunctionStatus:in; T_AP:Functions_BasicFunctions_BasicFunctionStatus:in; APEngagement:Functions_BasicFunctions_ModeSelection:in; T:Functions_BasicFunctions_BasicFunctionStatus:out; sub ControlAltitudeState:Functions_BasicFunctions_InOutFunction; SF243_SelectTotalThrustConsign:Functions_BasicOperators_ErrConditionalSelector_2; AND2:Functions_BasicOperators_AND; AND1:Functions_BasicOperators_AND; assert icone = (if (ControlAltitudeState.status = OK) then 1 else (if (ControlAltitudeState.status = LOST) then 3 else 2)), T = ControlAltitudeState.output, ControlAltitudeState.input = SF243_SelectTotalThrustConsign.output, SF243_SelectTotalThrustConsign.inputAUTO = T_AP, SF243_SelectTotalThrustConsign.inputMANUAL = AND2.output, SF243_SelectTotalThrustConsign.condition = APEngagement, AND2.input_1 = AltitudeConsign, AND2.input_2 = AND1.output, AND1.input_1 = Altitude, AND1.input_2 = Attitude; edon node eq_AIDASystem_Functions_SF75_DisableDroneMotor flow icone:[1,2]:private; Motor1Runaway:bool:in; Motor2Runaway:bool:in; Motor3Runaway:bool:in; Motor4Runaway:bool:in; AttitudeFailureDetected:bool:in; AltitudeFailureDetected:bool:in; MotorConsignFailureDetected:bool:in; MotorDisabled^Motor1:bool:out; MotorDisabled^Motor2:bool:out; MotorDisabled^Motor3:bool:out; MotorDisabled^Motor4:bool:out; sub FMPropagation4:Functions_BasicOperators_ANDBoolErrLost; OR4:Boolean_Boolean_or4; OR3:Boolean_Boolean_or4; FMPropagation3:Functions_BasicOperators_ANDBoolErrLost; FMPropagation2:Functions_BasicOperators_ANDBoolErrLost; OR2:Boolean_Boolean_or4; OR1:Boolean_Boolean_or4; FailureModesOfSF74:Functions_BasicFunctions_SourceFunction; FMPropagation1:Functions_BasicOperators_ANDBoolErrLost; assert icone = case { (FailureModesOfSF74.status = OK) : 1, else 2 }, MotorDisabled^Motor1 = FMPropagation1.output, MotorDisabled^Motor2 = FMPropagation2.output, MotorDisabled^Motor3 = FMPropagation3.output, MotorDisabled^Motor4 = FMPropagation4.output, FMPropagation4.input = OR4.O, FMPropagation4.failurePropagation = FailureModesOfSF74.output, OR4.I1 = Motor4Runaway, OR4.I2 = AltitudeFailureDetected, OR4.I3 = AttitudeFailureDetected, OR4.I4 = MotorConsignFailureDetected, OR3.I1 = MotorConsignFailureDetected, OR3.I2 = AttitudeFailureDetected, OR3.I3 = AltitudeFailureDetected, OR3.I4 = Motor3Runaway, FMPropagation3.input = OR3.O, FMPropagation3.failurePropagation = FailureModesOfSF74.output, FMPropagation2.input = OR2.O, FMPropagation2.failurePropagation = FailureModesOfSF74.output, OR2.I1 = MotorConsignFailureDetected, OR2.I2 = AttitudeFailureDetected, OR2.I3 = AltitudeFailureDetected, OR2.I4 = Motor2Runaway, OR1.I1 = MotorConsignFailureDetected, OR1.I2 = AttitudeFailureDetected, OR1.I3 = AltitudeFailureDetected, OR1.I4 = Motor1Runaway, FMPropagation1.input = OR1.O, FMPropagation1.failurePropagation = FailureModesOfSF74.output; edon node eq_AIDASystem_Functions_SF7_MonitorDroneControl flow MotorRatesMeasured^MotorRate1:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRatesMeasured^MotorRate2:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRatesMeasured^MotorRate3:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRatesMeasured^MotorRate4:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRate:Functions_BasicFunctions_BasicFunctionStatus:in; Motor1Runaway:bool:out; Motor2Runaway:bool:out; Motor3Runaway:bool:out; Motor4Runaway:bool:out; sub MonitorMotorRate4:Functions_BasicOperators_Comparator; MonitorMotorRate3:Functions_BasicOperators_Comparator; MonitorMotorRate2:Functions_BasicOperators_Comparator; MonitorMotorRate1:Functions_BasicOperators_Comparator; assert Motor1Runaway = MonitorMotorRate1.output, Motor2Runaway = MonitorMotorRate2.output, Motor3Runaway = MonitorMotorRate3.output, Motor4Runaway = MonitorMotorRate4.output, MonitorMotorRate4.input1 = MotorRatesMeasured^MotorRate4, MonitorMotorRate4.input2 = MotorRate, MonitorMotorRate3.input1 = MotorRatesMeasured^MotorRate3, MonitorMotorRate3.input2 = MotorRate, MonitorMotorRate2.input1 = MotorRatesMeasured^MotorRate2, MonitorMotorRate2.input2 = MotorRate, MonitorMotorRate1.input1 = MotorRatesMeasured^MotorRate1, MonitorMotorRate1.input2 = MotorRate; edon node eq_AIDASystem_Functions_SF421_RunFlightPlan flow Time:Functions_BasicFunctions_BasicFunctionStatus:in; Position:Functions_BasicFunctions_BasicFunctionStatus:in; FlightPlan:Functions_BasicFunctions_BasicFunctionStatus:in; Progress:Functions_BasicFunctions_BasicFunctionStatus:out; MissionCompleted:Functions_BasicFunctions_Presence:out; FlightPlanInterruption:Functions_BasicFunctions_Presence:in; sub SF421_FlightPlanInterruption:Functions_BasicOperators_PerfectPresenceSelectorLOSS; SF421_MissionCompleted:Functions_BasicFunctions_SourcePresenceFunction; SF421_Compute:Functions_BasicFunctions_InOutFunction; SF421_Choice:Functions_BasicOperators_Choice; SF421_AND1:Functions_BasicOperators_AND; assert Progress = SF421_FlightPlanInterruption.output, MissionCompleted = SF421_MissionCompleted.output, SF421_FlightPlanInterruption.input = SF421_Compute.output, SF421_FlightPlanInterruption.condition = FlightPlanInterruption, SF421_Compute.input = SF421_Choice.output, SF421_Choice.input_1 = SF421_AND1.output, SF421_Choice.input_2 = FlightPlan, SF421_AND1.input_1 = Time, SF421_AND1.input_2 = Position; edon node eq_AIDASystem_Functions_SF64_DisplayDroneFollowUpData flow input_ControlMode:Functions_BasicFunctions_ModeSelection:in; input_FlightPlanProgress:Functions_BasicFunctions_BasicFunctionStatus:in; output_ControlMode:Functions_BasicFunctions_ModeSelection:out; output_FlightPlanProgress:Functions_BasicFunctions_BasicFunctionStatus:out; sub SF64_FlightPlanProgress:Functions_BasicFunctions_InOutFunction; SF64_ControlMode:Functions_BasicFunctions_InOutModeFunction; assert output_ControlMode = SF64_ControlMode.outputMode, output_FlightPlanProgress = SF64_FlightPlanProgress.output, SF64_FlightPlanProgress.input = input_FlightPlanProgress, SF64_ControlMode.inputMode = input_ControlMode; edon node eq_AIDASystem_Functions_SF73_ControlAttitudeAndAltitudeMON flow icone:[1,2]:private; Altitude:Functions_BasicFunctions_BasicFunctionStatus:in; Attitude:Functions_BasicFunctions_BasicFunctionStatus:in; YawConsign:Functions_BasicFunctions_BasicFunctionStatus:in; PitchRollConsign:Functions_BasicFunctions_BasicFunctionStatus:in; AltitudeConsign:Functions_BasicFunctions_BasicFunctionStatus:in; AttitudeAPConsign:Functions_BasicFunctions_BasicFunctionStatus:in; AltitudeAPConsign:Functions_BasicFunctions_BasicFunctionStatus:in; APEngagement:Functions_BasicFunctions_ModeSelection:in; MotorRate:Functions_BasicFunctions_BasicFunctionStatus:out; sub SF733_6_ControlAttitudeMON:eq_AIDASystem_Functions_SF232_5_ControlAttitude; SF731_2_ControlAltitudeMON:eq_AIDASystem_Functions_SF242_3_ControlAltitude; SF737_AllNeeded:Functions_BasicOperators_AND; SF737_8_ControlThrust:Functions_BasicFunctions_InOutFunction; assert icone = case { (((SF737_8_ControlThrust.status = OK) and (SF731_2_ControlAltitudeMON.ControlAltitudeState.status = OK)) and (SF733_6_ControlAttitudeMON.ControlAttitudeState.status = OK)) : 1, else 2 }, MotorRate = SF737_8_ControlThrust.output, SF733_6_ControlAttitudeMON.Attitude = Attitude, SF733_6_ControlAttitudeMON.AttitudeAPConsign = AttitudeAPConsign, SF733_6_ControlAttitudeMON.PitchRollConsign = PitchRollConsign, SF733_6_ControlAttitudeMON.YawConsign = YawConsign, SF733_6_ControlAttitudeMON.APEngagement = APEngagement, SF731_2_ControlAltitudeMON.Altitude = Altitude, SF731_2_ControlAltitudeMON.Attitude = Attitude, SF731_2_ControlAltitudeMON.AltitudeConsign = AltitudeConsign, SF731_2_ControlAltitudeMON.T_AP = AltitudeAPConsign, SF731_2_ControlAltitudeMON.APEngagement = APEngagement, SF737_AllNeeded.input_1 = SF731_2_ControlAltitudeMON.T, SF737_AllNeeded.input_2 = SF733_6_ControlAttitudeMON.P, SF737_8_ControlThrust.input = SF737_AllNeeded.output; edon node eq_AIDASystem_Functions_SF74_MonitorParameters flow icone:[1,2]:private; MotorRateMON:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRate:Functions_BasicFunctions_BasicFunctionStatus:in; Altitude:Functions_BasicFunctions_BasicFunctionStatus:in; AltitudeMON:Functions_BasicFunctions_BasicFunctionStatus:in; Attitude:Functions_BasicFunctions_BasicFunctionStatus:in; AttitudeMON:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRateMeasured^MotorRate1:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRateMeasured^MotorRate2:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRateMeasured^MotorRate3:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRateMeasured^MotorRate4:Functions_BasicFunctions_BasicFunctionStatus:in; MotorsDisabled^Motor1:bool:out; MotorsDisabled^Motor2:bool:out; MotorsDisabled^Motor3:bool:out; MotorsDisabled^Motor4:bool:out; sub SF745_DisableDroneMotor:eq_AIDASystem_Functions_SF75_DisableDroneMotor; SF744_MonitorMotorRate:eq_AIDASystem_Functions_SF7_MonitorDroneControl; SF743_MonitorMotorConsign:Functions_BasicOperators_Comparator; SF742_MonitorAltitude:Functions_BasicOperators_Comparator; SF741_MonitorAttitude:Functions_BasicOperators_Comparator; assert icone = case { (SF745_DisableDroneMotor.FailureModesOfSF74.status = OK) : 1, else 2 }, MotorsDisabled^Motor1 = SF745_DisableDroneMotor.MotorDisabled^Motor1, MotorsDisabled^Motor2 = SF745_DisableDroneMotor.MotorDisabled^Motor2, MotorsDisabled^Motor3 = SF745_DisableDroneMotor.MotorDisabled^Motor3, MotorsDisabled^Motor4 = SF745_DisableDroneMotor.MotorDisabled^Motor4, SF745_DisableDroneMotor.Motor1Runaway = SF744_MonitorMotorRate.Motor1Runaway, SF745_DisableDroneMotor.Motor2Runaway = SF744_MonitorMotorRate.Motor2Runaway, SF745_DisableDroneMotor.Motor3Runaway = SF744_MonitorMotorRate.Motor3Runaway, SF745_DisableDroneMotor.Motor4Runaway = SF744_MonitorMotorRate.Motor4Runaway, SF745_DisableDroneMotor.AttitudeFailureDetected = SF741_MonitorAttitude.output, SF745_DisableDroneMotor.AltitudeFailureDetected = SF742_MonitorAltitude.output, SF745_DisableDroneMotor.MotorConsignFailureDetected = SF743_MonitorMotorConsign.output, SF744_MonitorMotorRate.MotorRatesMeasured^MotorRate1 = MotorRateMeasured^MotorRate1, SF744_MonitorMotorRate.MotorRatesMeasured^MotorRate2 = MotorRateMeasured^MotorRate2, SF744_MonitorMotorRate.MotorRatesMeasured^MotorRate3 = MotorRateMeasured^MotorRate3, SF744_MonitorMotorRate.MotorRatesMeasured^MotorRate4 = MotorRateMeasured^MotorRate4, SF744_MonitorMotorRate.MotorRate = MotorRate, SF743_MonitorMotorConsign.input1 = MotorRate, SF743_MonitorMotorConsign.input2 = MotorRateMON, SF742_MonitorAltitude.input1 = Altitude, SF742_MonitorAltitude.input2 = AltitudeMON, SF741_MonitorAttitude.input1 = Attitude, SF741_MonitorAttitude.input2 = AttitudeMON; edon node eq_AIDASystem_Functions_SF42_RunAutomaticControl flow FlightPlan:Functions_BasicFunctions_BasicFunctionStatus:in; Position:Functions_BasicFunctions_BasicFunctionStatus:in; FlightPlanProgress:Functions_BasicFunctions_BasicFunctionStatus:out; AutomaticPayloadControl:Functions_BasicFunctions_BasicFunctionStatus:out; SpeedConsign:Functions_BasicFunctions_BasicFunctionStatus:out; PositionConsign:Functions_BasicFunctions_BasicFunctionStatus:out; PilotControlConsigns:Functions_BasicFunctions_BasicFunctionStatus:in; Time:Functions_BasicFunctions_BasicFunctionStatus:in; FlightPlanInterruption:Functions_BasicFunctions_Presence:in; MissionCompleted:Functions_BasicFunctions_Presence:out; sub SF423_SelectAutomaticPayloadControl:Functions_BasicOperators_AND; SF422_RunSpeedControl:Functions_BasicFunctions_InOutFunction; SF421_RunFlightPlan:eq_AIDASystem_Functions_SF421_RunFlightPlan; assert FlightPlanProgress = SF421_RunFlightPlan.Progress, AutomaticPayloadControl = SF423_SelectAutomaticPayloadControl.output, SpeedConsign = SF422_RunSpeedControl.output, PositionConsign = SF421_RunFlightPlan.Progress, MissionCompleted = SF421_RunFlightPlan.MissionCompleted, SF423_SelectAutomaticPayloadControl.input_1 = SF421_RunFlightPlan.Progress, SF423_SelectAutomaticPayloadControl.input_2 = SF422_RunSpeedControl.output, SF422_RunSpeedControl.input = PilotControlConsigns, SF421_RunFlightPlan.Time = Time, SF421_RunFlightPlan.Position = Position, SF421_RunFlightPlan.FlightPlan = FlightPlan, SF421_RunFlightPlan.FlightPlanInterruption = FlightPlanInterruption; edon node eq_AIDASystem_Functions_SF44_AcquirePilotControlConsignAndMode flow AcquiredPilotControlConsigns:Functions_BasicFunctions_BasicFunctionStatus:out; AcquiredPilotControlMode:Functions_BasicFunctions_ModeSelection_ErroneousLost:out; PilotControlMode:Functions_BasicFunctions_ModeSelection:in; sub AcquireControlConsigns:Functions_BasicFunctions_SourceFunction; transtypage:Functions_BasicOperators_transtypageMode; AcquireControlMode:Functions_BasicFunctions_ErroneousLostModeSelector; assert AcquiredPilotControlConsigns = AcquireControlConsigns.output, AcquiredPilotControlMode = AcquireControlMode.outputMode, transtypage.I = PilotControlMode, AcquireControlMode.inputMode = transtypage.O; edon node eq_AIDASystem_Functions_SF43_SelectControlMode flow icone:[1,2]:private; PilotManualControl:Functions_BasicFunctions_ModeSelection_ErroneousLost:in; IndicatedMode:Functions_BasicFunctions_ModeSelection:out; APEngagement:Functions_BasicFunctions_ModeSelection:out; ManualConsigns:Functions_BasicFunctions_BasicFunctionStatus:in; MissionCompleted:Functions_BasicFunctions_Presence:in; FlightPlanInterruption:Functions_BasicFunctions_Presence:out; sub SF431_SelectControlMode:Functions_BasicFunctions_ErroneousLostPresentModeSelector; SF433_IndicateControlMode:Functions_BasicFunctions_InOutModeFunction; SF432_PassivateEngagementOscillation:Functions_BasicFunctions_FaultyManualModeSelector_LossType; assert APEngagement = SF432_PassivateEngagementOscillation.outputMode, icone = case { (APEngagement = AUTO) : 1, else 2 }, IndicatedMode = SF433_IndicateControlMode.outputMode, FlightPlanInterruption = SF432_PassivateEngagementOscillation.FlightPlanInterruption, SF431_SelectControlMode.inputMode = PilotManualControl, SF431_SelectControlMode.ManualConsigns = ManualConsigns, SF431_SelectControlMode.MissionCompleted = MissionCompleted, SF433_IndicateControlMode.inputMode = SF432_PassivateEngagementOscillation.outputMode, SF432_PassivateEngagementOscillation.inputMode = SF431_SelectControlMode.outputMode; edon node eq_AIDASystem_Functions_SF1i_ControlHelix_2 flow MotorDisabled:bool:in; MotorRateMeasured:Functions_BasicFunctions_BasicFunctionStatus:out; ThrustAndTorque:Functions_BasicFunctions_BasicFunctionStatus:out; MotorRate:Functions_BasicFunctions_BasicFunctionStatus:in; sub SF1i1_5_PerfectSelectorLOST:Functions_BasicOperators_PerfectConditionalSelectorLOST; SF1i1_5_CreateMotionAndMeasure:Functions_BasicFunctions_InOutFunction; SF1i6_DepowerMotor:Boolean_Boolean_BooleanInOutFunction; SF1i3_CreateThrustAndTorque:Functions_BasicFunctions_InOutFunction; assert MotorRateMeasured = SF1i1_5_CreateMotionAndMeasure.output, ThrustAndTorque = SF1i3_CreateThrustAndTorque.output, SF1i1_5_PerfectSelectorLOST.input = SF1i1_5_CreateMotionAndMeasure.output, SF1i1_5_PerfectSelectorLOST.condition = SF1i6_DepowerMotor.output, SF1i1_5_CreateMotionAndMeasure.input = MotorRate, SF1i6_DepowerMotor.input = MotorDisabled, SF1i3_CreateThrustAndTorque.input = SF1i1_5_PerfectSelectorLOST.output; edon node eq_AIDASystem_Functions_SF21_ControlPosition flow icone:[1,3]:private; Position:Functions_BasicFunctions_BasicFunctionStatus:in; Speed:Functions_BasicFunctions_BasicFunctionStatus:in; Attitude:Functions_BasicFunctions_BasicFunctionStatus:in; PositionConsign:Functions_BasicFunctions_BasicFunctionStatus:in; SpeedConsign:Functions_BasicFunctions_BasicFunctionStatus:in; AttitudeThrustAPConsign:Functions_BasicFunctions_BasicFunctionStatus:out; sub SF212_SelectSpeedConsign:Functions_BasicOperators_AND; ControlPositionState:Functions_BasicFunctions_InOutFunction; AND2:Functions_BasicOperators_AND; AND1:Functions_BasicOperators_AND; AND3:Functions_BasicOperators_AND; AND4:Functions_BasicOperators_AND; assert icone = (if (ControlPositionState.status = OK) then 1 else (if (ControlPositionState.status = LOST) then 3 else 2)), AttitudeThrustAPConsign = ControlPositionState.output, SF212_SelectSpeedConsign.input_1 = AND4.output, SF212_SelectSpeedConsign.input_2 = AND3.output, ControlPositionState.input = SF212_SelectSpeedConsign.output, AND2.input_1 = Position, AND2.input_2 = AND1.output, AND1.input_1 = Speed, AND1.input_2 = Attitude, AND3.input_1 = PositionConsign, AND3.input_2 = AND2.output, AND4.input_1 = SpeedConsign, AND4.input_2 = AND1.output; edon node eq_AIDASystem_Functions_SF33_ComputeDroneSpeed flow icone:[1,2]:private; Altitude:Functions_BasicFunctions_BasicFunctionStatus:in; Speed:Functions_BasicFunctions_BasicFunctionStatus:out; sub SF331_FilmGround:Functions_BasicFunctions_SourceFunction; SF332_AllNeeded:Functions_BasicOperators_AND; SF332_ComputeSpeed:Functions_BasicFunctions_InOutFunction; assert icone = case { ((SF331_FilmGround.status = OK) and (SF332_ComputeSpeed.status = OK)) : 1, else 2 }, Speed = SF332_ComputeSpeed.output, SF332_AllNeeded.input_1 = SF331_FilmGround.output, SF332_AllNeeded.input_2 = Altitude, SF332_ComputeSpeed.input = SF332_AllNeeded.output; edon node eq_AIDASystem_Functions_SF6_ManageMission flow icone:[1,2]:private; oFlightPlanProgress:Functions_BasicFunctions_BasicFunctionStatus:out; iFlightPlanProgress:Functions_BasicFunctions_BasicFunctionStatus:in; iFlightPlan:Functions_BasicFunctions_BasicFunctionStatus:in; oFlightPlan:Functions_BasicFunctions_BasicFunctionStatus:out; iDroneControlMode:Functions_BasicFunctions_ModeSelection:in; oDroneControlMode:Functions_BasicFunctions_ModeSelection:out; sub SF61_ComputeFlightPlanAndZone:Functions_BasicFunctions_InOutFunction; SF64_DisplayDroneFollowUpData:eq_AIDASystem_Functions_SF64_DisplayDroneFollowUpData; assert icone = case { (((SF61_ComputeFlightPlanAndZone.status = OK) and (SF64_DisplayDroneFollowUpData.SF64_ControlMode.status = OK)) and (SF64_DisplayDroneFollowUpData.SF64_FlightPlanProgress.status = OK)) : 1, else 2 }, oFlightPlanProgress = SF64_DisplayDroneFollowUpData.output_FlightPlanProgress, oFlightPlan = SF61_ComputeFlightPlanAndZone.output, oDroneControlMode = SF64_DisplayDroneFollowUpData.output_ControlMode, SF61_ComputeFlightPlanAndZone.input = iFlightPlan, SF64_DisplayDroneFollowUpData.input_ControlMode = iDroneControlMode, SF64_DisplayDroneFollowUpData.input_FlightPlanProgress = iFlightPlanProgress; edon node eq_AIDASystem_Functions_SF7_MonitorDroneControl_v042 flow icone:[1,2]:private; APEngagement:Functions_BasicFunctions_ModeSelection:in; Attitude:Functions_BasicFunctions_BasicFunctionStatus:in; Altitude:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRate:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRatesMeasured^MotorRate1:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRatesMeasured^MotorRate2:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRatesMeasured^MotorRate3:Functions_BasicFunctions_BasicFunctionStatus:in; MotorRatesMeasured^MotorRate4:Functions_BasicFunctions_BasicFunctionStatus:in; MotorDisabled^Motor1:bool:out; MotorDisabled^Motor2:bool:out; MotorDisabled^Motor3:bool:out; MotorDisabled^Motor4:bool:out; Consigns^AltitudeManualConsign:Functions_BasicFunctions_BasicFunctionStatus:in; Consigns^YawManualConsign:Functions_BasicFunctions_BasicFunctionStatus:in; Consigns^PitchRollManualConsign:Functions_BasicFunctions_BasicFunctionStatus:in; Consigns^AltitudeAndAttitudeAPConsign:Functions_BasicFunctions_BasicFunctionStatus:in; sub SF73_ControlAttitudeAndAltitudeMON:eq_AIDASystem_Functions_SF73_ControlAttitudeAndAltitudeMON; SF71_ComputeAttitudeMON:Functions_BasicFunctions_SourceFunction; SF72_ComputeAltitudeMON:Functions_BasicFunctions_InOutFunction; SF74_MonitorParameters:eq_AIDASystem_Functions_SF74_MonitorParameters; assert icone = case { ((((((SF74_MonitorParameters.SF745_DisableDroneMotor.FailureModesOfSF74.status = OK) and (SF71_ComputeAttitudeMON.status = OK)) and (SF72_ComputeAltitudeMON.status = OK)) and (SF73_ControlAttitudeAndAltitudeMON.SF737_8_ControlThrust.status = OK)) and (SF73_ControlAttitudeAndAltitudeMON.SF731_2_ControlAltitudeMON.ControlAltitudeState.status = OK)) and (SF73_ControlAttitudeAndAltitudeMON.SF733_6_ControlAttitudeMON.ControlAttitudeState.status = OK)) : 1, else 2 }, MotorDisabled^Motor1 = SF74_MonitorParameters.MotorsDisabled^Motor1, MotorDisabled^Motor2 = SF74_MonitorParameters.MotorsDisabled^Motor2, MotorDisabled^Motor3 = SF74_MonitorParameters.MotorsDisabled^Motor3, MotorDisabled^Motor4 = SF74_MonitorParameters.MotorsDisabled^Motor4, SF73_ControlAttitudeAndAltitudeMON.Altitude = Altitude, SF73_ControlAttitudeAndAltitudeMON.Attitude = Attitude, SF73_ControlAttitudeAndAltitudeMON.YawConsign = Consigns^YawManualConsign, SF73_ControlAttitudeAndAltitudeMON.PitchRollConsign = Consigns^PitchRollManualConsign, SF73_ControlAttitudeAndAltitudeMON.AltitudeConsign = Consigns^AltitudeManualConsign, SF73_ControlAttitudeAndAltitudeMON.AttitudeAPConsign = Consigns^AltitudeAndAttitudeAPConsign, SF73_ControlAttitudeAndAltitudeMON.AltitudeAPConsign = Consigns^AltitudeAndAttitudeAPConsign, SF73_ControlAttitudeAndAltitudeMON.APEngagement = APEngagement, SF72_ComputeAltitudeMON.input = SF71_ComputeAttitudeMON.output, SF74_MonitorParameters.MotorRateMON = SF73_ControlAttitudeAndAltitudeMON.MotorRate, SF74_MonitorParameters.MotorRate = MotorRate, SF74_MonitorParameters.Altitude = Altitude, SF74_MonitorParameters.AltitudeMON = SF72_ComputeAltitudeMON.output, SF74_MonitorParameters.Attitude = Attitude, SF74_MonitorParameters.AttitudeMON = SF71_ComputeAttitudeMON.output, SF74_MonitorParameters.MotorRateMeasured^MotorRate1 = MotorRatesMeasured^MotorRate1, SF74_MonitorParameters.MotorRateMeasured^MotorRate2 = MotorRatesMeasured^MotorRate2, SF74_MonitorParameters.MotorRateMeasured^MotorRate3 = MotorRatesMeasured^MotorRate3, SF74_MonitorParameters.MotorRateMeasured^MotorRate4 = MotorRatesMeasured^MotorRate4; edon node eq_AIDASystem_Observers_Observer_v44 flow Thrust1:Functions_BasicFunctions_BasicFunctionStatus:in; Thrust2:Functions_BasicFunctions_BasicFunctionStatus:in; Thrust3:Functions_BasicFunctions_BasicFunctionStatus:in; Thrust4:Functions_BasicFunctions_BasicFunctionStatus:in; APEngagement:Functions_BasicFunctions_ModeSelection:in; PilotInconsistentControl:bool:in; PilotManualControl:Functions_BasicFunctions_ModeSelection:in; LostHelixesControl:bool:out; sub PilotRequiresManualMode:Quadcopter_Observers_PilotRequiresManualMode; LossOfSelectedManualModeFiltered:Boolean_Boolean_filter; filter4:Boolean_Boolean_filter; filter3:Boolean_Boolean_filter; filter2:Boolean_Boolean_filter; StuckModeManual:Quadcopter_Observers_StuckModeMAN_v03; ControlledCrash:Boolean_Boolean_or2; StuckModeAutoOrErr:Quadcopter_Observers_StuckMode_v03; FC03_MAJ:Boolean_Boolean_intermediate; TotalLossOfControl:Boolean_Boolean_and2; UncontrolledCrashInAuthorizedArea:Boolean_Boolean_or2; LossOfSelectedManualMode:Boolean_Boolean_and2; UncontrolledCrashInNonAuthorizedArea:Boolean_Boolean_or2; FC02_HAZ:Boolean_Boolean_intermediate; FC01_CAT:Boolean_Boolean_intermediate; ErroneousControlOfOneHelix:Quadcopter_Observers_ErroneousControlOfOneHelix; TotalLossOfHelixesControl:Quadcopter_Observers_TotalLossOfHelixesControl; LossOfAtMost3HelixesControl:Quadcopter_Observers_LossOfAtMost3HelixesControl; assert LostHelixesControl = LossOfAtMost3HelixesControl.output, PilotRequiresManualMode.input = PilotManualControl, LossOfSelectedManualModeFiltered.filterCriterion = PilotInconsistentControl, LossOfSelectedManualModeFiltered.input = LossOfSelectedManualMode.O, filter4.filterCriterion = PilotInconsistentControl, filter4.input = ControlledCrash.O, filter3.filterCriterion = PilotInconsistentControl, filter3.input = UncontrolledCrashInAuthorizedArea.O, filter2.filterCriterion = PilotInconsistentControl, filter2.input = UncontrolledCrashInNonAuthorizedArea.O, StuckModeManual.PilotAPEngagementOrder = PilotManualControl, StuckModeManual.AppliedAPEngagement = APEngagement, ControlledCrash.I1 = PilotRequiresManualMode.output, ControlledCrash.I2 = StuckModeManual.output, StuckModeAutoOrErr.input = APEngagement, FC03_MAJ.I = filter4.output, TotalLossOfControl.I1 = LossOfAtMost3HelixesControl.output, TotalLossOfControl.I2 = LossOfSelectedManualMode.O, UncontrolledCrashInAuthorizedArea.I1 = TotalLossOfHelixesControl.output, UncontrolledCrashInAuthorizedArea.I2 = LossOfAtMost3HelixesControl.output, LossOfSelectedManualMode.I1 = StuckModeAutoOrErr.output, LossOfSelectedManualMode.I2 = PilotRequiresManualMode.output, UncontrolledCrashInNonAuthorizedArea.I1 = ErroneousControlOfOneHelix.output, UncontrolledCrashInNonAuthorizedArea.I2 = TotalLossOfControl.O, FC02_HAZ.I = filter3.output, FC01_CAT.I = filter2.output, ErroneousControlOfOneHelix.in1 = Thrust1, ErroneousControlOfOneHelix.in2 = Thrust2, ErroneousControlOfOneHelix.in3 = Thrust4, ErroneousControlOfOneHelix.in4 = Thrust3, TotalLossOfHelixesControl.in1 = Thrust1, TotalLossOfHelixesControl.in2 = Thrust2, TotalLossOfHelixesControl.in3 = Thrust4, TotalLossOfHelixesControl.in4 = Thrust3, LossOfAtMost3HelixesControl.in1 = Thrust1, LossOfAtMost3HelixesControl.in2 = Thrust2, LossOfAtMost3HelixesControl.in3 = Thrust4, LossOfAtMost3HelixesControl.in4 = Thrust3; edon node eq_AIDASystem_Functions_SF5_MakeAndRecordVideo flow icone:[1,2]:private; ManualPayloadControl:Functions_BasicFunctions_Presence:in; AutomaticPayloadControl:Functions_BasicFunctions_BasicFunctionStatus:in; VideoFlux:Functions_BasicFunctions_BasicFunctionStatus:out; sub SF51_SelectCameraControl:Functions_BasicOperators_PerfectPresenceSelectorOK; SF55_AcquireManualPayloadControl:Functions_BasicFunctions_AbsentPresentFunction; SF52_4_MakePhotosAndVideos:Functions_BasicFunctions_InOutFunction; assert icone = case { ((SF55_AcquireManualPayloadControl.status = OK) and (SF52_4_MakePhotosAndVideos.status = OK)) : 1, else 2 }, VideoFlux = SF52_4_MakePhotosAndVideos.output, SF51_SelectCameraControl.input = AutomaticPayloadControl, SF51_SelectCameraControl.condition = SF55_AcquireManualPayloadControl.output, SF55_AcquireManualPayloadControl.input = ManualPayloadControl, SF52_4_MakePhotosAndVideos.input = SF51_SelectCameraControl.output; edon node eq_AIDASystem_Functions_SF4_ControlDroneNavigation flow Position:Functions_BasicFunctions_BasicFunctionStatus:in; Time:Functions_BasicFunctions_BasicFunctionStatus:in; PositionConsign:Functions_BasicFunctions_BasicFunctionStatus:out; SpeedConsign:Functions_BasicFunctions_BasicFunctionStatus:out; FlightPlan:Functions_BasicFunctions_BasicFunctionStatus:in; APEngagement:Functions_BasicFunctions_ModeSelection:out; IndicatedMode:Functions_BasicFunctions_ModeSelection:out; PilotManualControl:Functions_BasicFunctions_ModeSelection:in; FlightPlanProgress:Functions_BasicFunctions_BasicFunctionStatus:out; AutomaticPayloadControl:Functions_BasicFunctions_BasicFunctionStatus:out; ManualConsigns:Functions_BasicFunctions_BasicFunctionStatus:in; sub SF42_RunAutomaticControl:eq_AIDASystem_Functions_SF42_RunAutomaticControl; SF44_AcquirePilotControlConsignAndMode:eq_AIDASystem_Functions_SF44_AcquirePilotControlConsignAndMode; SF43_SelectControlMode:eq_AIDASystem_Functions_SF43_SelectControlMode; SF41_AcquireAndStoreFlightPlan:Functions_BasicFunctions_InOutFunction; assert PositionConsign = SF42_RunAutomaticControl.PositionConsign, SpeedConsign = SF42_RunAutomaticControl.SpeedConsign, APEngagement = SF43_SelectControlMode.APEngagement, IndicatedMode = SF43_SelectControlMode.IndicatedMode, FlightPlanProgress = SF42_RunAutomaticControl.FlightPlanProgress, AutomaticPayloadControl = SF42_RunAutomaticControl.AutomaticPayloadControl, SF42_RunAutomaticControl.FlightPlan = SF41_AcquireAndStoreFlightPlan.output, SF42_RunAutomaticControl.Position = Position, SF42_RunAutomaticControl.PilotControlConsigns = SF44_AcquirePilotControlConsignAndMode.AcquiredPilotControlConsigns, SF42_RunAutomaticControl.Time = Time, SF42_RunAutomaticControl.FlightPlanInterruption = SF43_SelectControlMode.FlightPlanInterruption, SF44_AcquirePilotControlConsignAndMode.PilotControlMode = PilotManualControl, SF43_SelectControlMode.PilotManualControl = SF44_AcquirePilotControlConsignAndMode.AcquiredPilotControlMode, SF43_SelectControlMode.ManualConsigns = ManualConsigns, SF43_SelectControlMode.MissionCompleted = SF42_RunAutomaticControl.MissionCompleted, SF41_AcquireAndStoreFlightPlan.input = FlightPlan; edon node eq_AIDASystem_Functions_SF1_ControlDroneHelixes_2 flow MotorRatesMeasured^MotorRate1:Functions_BasicFunctions_BasicFunctionStatus:out; MotorRatesMeasured^MotorRate2:Functions_BasicFunctions_BasicFunctionStatus:out; MotorRatesMeasured^MotorRate3:Functions_BasicFunctions_BasicFunctionStatus:out; MotorRatesMeasured^MotorRate4:Functions_BasicFunctions_BasicFunctionStatus:out; MotorRate:Functions_BasicFunctions_BasicFunctionStatus:in; ThrustAndTorque1:Functions_BasicFunctions_BasicFunctionStatus:out; ThrustAndTorque2:Functions_BasicFunctions_BasicFunctionStatus:out; ThrustAndTorque3:Functions_BasicFunctions_BasicFunctionStatus:out; ThrustAndTorque4:Functions_BasicFunctions_BasicFunctionStatus:out; MotorDisabled^Motor1:bool:in; MotorDisabled^Motor2:bool:in; MotorDisabled^Motor3:bool:in; MotorDisabled^Motor4:bool:in; sub SF14_ControlHelix4:eq_AIDASystem_Functions_SF1i_ControlHelix_2; SF13_ControlHelix3:eq_AIDASystem_Functions_SF1i_ControlHelix_2; SF12_ControlHelix2:eq_AIDASystem_Functions_SF1i_ControlHelix_2; SF11_ControlHelix1:eq_AIDASystem_Functions_SF1i_ControlHelix_2; assert MotorRatesMeasured^MotorRate1 = SF11_ControlHelix1.MotorRateMeasured, MotorRatesMeasured^MotorRate2 = SF12_ControlHelix2.MotorRateMeasured, MotorRatesMeasured^MotorRate3 = SF13_ControlHelix3.MotorRateMeasured, MotorRatesMeasured^MotorRate4 = SF14_ControlHelix4.MotorRateMeasured, ThrustAndTorque1 = SF11_ControlHelix1.ThrustAndTorque, ThrustAndTorque2 = SF12_ControlHelix2.ThrustAndTorque, ThrustAndTorque3 = SF13_ControlHelix3.ThrustAndTorque, ThrustAndTorque4 = SF14_ControlHelix4.ThrustAndTorque, SF14_ControlHelix4.MotorDisabled = MotorDisabled^Motor4, SF14_ControlHelix4.MotorRate = MotorRate, SF13_ControlHelix3.MotorDisabled = MotorDisabled^Motor3, SF13_ControlHelix3.MotorRate = MotorRate, SF12_ControlHelix2.MotorDisabled = MotorDisabled^Motor2, SF12_ControlHelix2.MotorRate = MotorRate, SF11_ControlHelix1.MotorDisabled = MotorDisabled^Motor1, SF11_ControlHelix1.MotorRate = MotorRate; edon node eq_AIDASystem_Functions_SF2_ControlDroneAttitudeAndPosition flow icone:[1,3]:private; Altitude:Functions_BasicFunctions_BasicFunctionStatus:in; Attitude:Functions_BasicFunctions_BasicFunctionStatus:in; Position:Functions_BasicFunctions_BasicFunctionStatus:in; Speed:Functions_BasicFunctions_BasicFunctionStatus:in; PositionConsign:Functions_BasicFunctions_BasicFunctionStatus:in; SpeedConsign:Functions_BasicFunctions_BasicFunctionStatus:in; APEngagement:Functions_BasicFunctions_ModeSelection:in; MotorRate:Functions_BasicFunctions_BasicFunctionStatus:out; DetectControlDronePosition:Functions_BasicFunctions_BasicFunctionStatus:out; Consigns^AltitudeManualConsign:Functions_BasicFunctions_BasicFunctionStatus:out; Consigns^YawManualConsign:Functions_BasicFunctions_BasicFunctionStatus:out; Consigns^PitchRollManualConsign:Functions_BasicFunctions_BasicFunctionStatus:out; Consigns^AltitudeAndAttitudeAPConsign:Functions_BasicFunctions_BasicFunctionStatus:out; PilotOrders:Functions_BasicFunctions_Presence:in; ManualConsigns:Functions_BasicFunctions_BasicFunctionStatus:out; sub SF22_AcquirePilotOrders:Functions_BasicFunctions_InOutPresentFunction; SF231_ComputeYawConsign:Functions_BasicFunctions_InOutFunction; SF241_ComputeAltitudeConsign:Functions_BasicFunctions_InOutFunction; SF21_ControlPosition:eq_AIDASystem_Functions_SF21_ControlPosition; SF232_5_ControlAttitude:eq_AIDASystem_Functions_SF232_5_ControlAttitude; SF242_3_ControlAltitude:eq_AIDASystem_Functions_SF242_3_ControlAltitude; SF25_AllNeeded:Functions_BasicOperators_AND; SF25_ControlThrust:Functions_BasicFunctions_InOutFunction; assert MotorRate = SF25_ControlThrust.output, icone = (if (MotorRate = OK) then 1 else (if (MotorRate = LOST) then 3 else 2)), DetectControlDronePosition = SF21_ControlPosition.AttitudeThrustAPConsign, Consigns^AltitudeManualConsign = SF241_ComputeAltitudeConsign.output, Consigns^YawManualConsign = SF231_ComputeYawConsign.output, Consigns^PitchRollManualConsign = SF22_AcquirePilotOrders.output, Consigns^AltitudeAndAttitudeAPConsign = SF21_ControlPosition.AttitudeThrustAPConsign, ManualConsigns = SF22_AcquirePilotOrders.output, SF22_AcquirePilotOrders.input = PilotOrders, SF231_ComputeYawConsign.input = SF22_AcquirePilotOrders.output, SF241_ComputeAltitudeConsign.input = SF22_AcquirePilotOrders.output, SF21_ControlPosition.Position = Position, SF21_ControlPosition.Speed = Speed, SF21_ControlPosition.Attitude = Attitude, SF21_ControlPosition.PositionConsign = PositionConsign, SF21_ControlPosition.SpeedConsign = SpeedConsign, SF232_5_ControlAttitude.Attitude = Attitude, SF232_5_ControlAttitude.AttitudeAPConsign = SF21_ControlPosition.AttitudeThrustAPConsign, SF232_5_ControlAttitude.PitchRollConsign = SF22_AcquirePilotOrders.output, SF232_5_ControlAttitude.YawConsign = SF231_ComputeYawConsign.output, SF232_5_ControlAttitude.APEngagement = APEngagement, SF242_3_ControlAltitude.Altitude = Altitude, SF242_3_ControlAltitude.Attitude = Attitude, SF242_3_ControlAltitude.AltitudeConsign = SF241_ComputeAltitudeConsign.output, SF242_3_ControlAltitude.T_AP = SF21_ControlPosition.AttitudeThrustAPConsign, SF242_3_ControlAltitude.APEngagement = APEngagement, SF25_AllNeeded.input_1 = SF242_3_ControlAltitude.T, SF25_AllNeeded.input_2 = SF232_5_ControlAttitude.P, SF25_ControlThrust.input = SF25_AllNeeded.output; edon node eq_AIDASystem_Functions_SF3_ComputeDronePositionAndSpeed flow icone:[1,2]:private; Altitude:Functions_BasicFunctions_BasicFunctionStatus:out; Attitude:Functions_BasicFunctions_BasicFunctionStatus:out; Position:Functions_BasicFunctions_BasicFunctionStatus:out; Speed:Functions_BasicFunctions_BasicFunctionStatus:out; Time:Functions_BasicFunctions_BasicFunctionStatus:out; sub SF34_ComputePositionAndTime:Functions_BasicFunctions_SourceFunction; SF31_ComputeAttitude:Functions_BasicFunctions_SourceFunction; SF33_ComputeDroneSpeed:eq_AIDASystem_Functions_SF33_ComputeDroneSpeed; SF32_ComputeAltitude:Functions_BasicFunctions_InOutFunction; assert icone = case { (((((SF31_ComputeAttitude.status = OK) and (SF32_ComputeAltitude.status = OK)) and (SF34_ComputePositionAndTime.status = OK)) and (SF33_ComputeDroneSpeed.SF331_FilmGround.status = OK)) and (SF33_ComputeDroneSpeed.SF332_ComputeSpeed.status = OK)) : 1, else 2 }, Altitude = SF32_ComputeAltitude.output, Attitude = SF31_ComputeAttitude.output, Position = SF34_ComputePositionAndTime.output, Speed = SF33_ComputeDroneSpeed.Speed, Time = SF34_ComputePositionAndTime.output, SF33_ComputeDroneSpeed.Altitude = SF32_ComputeAltitude.output, SF32_ComputeAltitude.input = SF31_ComputeAttitude.output; edon node main sub SF6:eq_AIDASystem_Functions_SF6_ManageMission; EXT_Database_UploadPredefinedFlightZoneBoarders:Functions_BasicFunctions_SourceFunction; EXT_PilotDetection:AIDASystem_Functions_Detection_v44; SF7:eq_AIDASystem_Functions_SF7_MonitorDroneControl_v042; FailureConditions:eq_AIDASystem_Observers_Observer_v44; SF5:eq_AIDASystem_Functions_SF5_MakeAndRecordVideo; SF4:eq_AIDASystem_Functions_SF4_ControlDroneNavigation; SF1:eq_AIDASystem_Functions_SF1_ControlDroneHelixes_2; SF2:eq_AIDASystem_Functions_SF2_ControlDroneAttitudeAndPosition; SF3:eq_AIDASystem_Functions_SF3_ComputeDronePositionAndSpeed; assert SF6.iFlightPlanProgress = SF4.FlightPlanProgress, SF6.iFlightPlan = EXT_Database_UploadPredefinedFlightZoneBoarders.output, SF6.iDroneControlMode = SF4.IndicatedMode, EXT_PilotDetection.inputFlightPlan = SF6.oFlightPlanProgress, EXT_PilotDetection.inputPosition = SF3.Position, EXT_PilotDetection.inputSpeed = SF3.Speed, EXT_PilotDetection.inputControlPosition = SF2.DetectControlDronePosition, EXT_PilotDetection.inputLostHelixesControl = FailureConditions.LostHelixesControl, EXT_PilotDetection.inputIndicatedMode = SF6.oDroneControlMode, SF7.APEngagement = SF4.APEngagement, SF7.Attitude = SF3.Attitude, SF7.Altitude = SF3.Altitude, SF7.MotorRate = SF2.MotorRate, SF7.MotorRatesMeasured^MotorRate1 = SF1.MotorRatesMeasured^MotorRate1, SF7.MotorRatesMeasured^MotorRate2 = SF1.MotorRatesMeasured^MotorRate2, SF7.MotorRatesMeasured^MotorRate3 = SF1.MotorRatesMeasured^MotorRate3, SF7.MotorRatesMeasured^MotorRate4 = SF1.MotorRatesMeasured^MotorRate4, SF7.Consigns^AltitudeManualConsign = SF2.Consigns^AltitudeManualConsign, SF7.Consigns^YawManualConsign = SF2.Consigns^YawManualConsign, SF7.Consigns^PitchRollManualConsign = SF2.Consigns^PitchRollManualConsign, SF7.Consigns^AltitudeAndAttitudeAPConsign = SF2.Consigns^AltitudeAndAttitudeAPConsign, FailureConditions.Thrust1 = SF1.ThrustAndTorque1, FailureConditions.Thrust2 = SF1.ThrustAndTorque2, FailureConditions.Thrust3 = SF1.ThrustAndTorque3, FailureConditions.Thrust4 = SF1.ThrustAndTorque4, FailureConditions.APEngagement = SF4.APEngagement, FailureConditions.PilotInconsistentControl = EXT_PilotDetection.PilotInconsistentControl, FailureConditions.PilotManualControl = EXT_PilotDetection.PilotSelectedMode, SF5.ManualPayloadControl = EXT_PilotDetection.ManualPayloadControl, SF5.AutomaticPayloadControl = SF4.AutomaticPayloadControl, SF4.Position = SF3.Position, SF4.Time = SF3.Time, SF4.FlightPlan = SF6.oFlightPlan, SF4.PilotManualControl = EXT_PilotDetection.PilotSelectedMode, SF4.ManualConsigns = SF2.ManualConsigns, SF1.MotorRate = SF2.MotorRate, SF1.MotorDisabled^Motor1 = SF7.MotorDisabled^Motor1, SF1.MotorDisabled^Motor2 = SF7.MotorDisabled^Motor2, SF1.MotorDisabled^Motor3 = SF7.MotorDisabled^Motor3, SF1.MotorDisabled^Motor4 = SF7.MotorDisabled^Motor4, SF2.Altitude = SF3.Altitude, SF2.Attitude = SF3.Attitude, SF2.Position = SF3.Position, SF2.Speed = SF3.Speed, SF2.PositionConsign = SF4.PositionConsign, SF2.SpeedConsign = SF4.SpeedConsign, SF2.APEngagement = SF4.APEngagement, SF2.PilotOrders = EXT_PilotDetection.PilotOrders; extern nodeproperty = "AIDASystem/AIDASystem/AIDA0_4_4"; nodeproperty = "1"; nodeproperty = "default"; nodeproperty = "2018-10-08 08:54:11"; edon