diff --git a/create_mission_xml/create_mission_xml_conf.xml b/create_mission_xml/create_mission_xml_conf.xml index 56f53361444d361b35c4955c6a9b3d8c5f7aaf41..377363982353f462caf0aa2a43261c0a39162f6b 100644 --- a/create_mission_xml/create_mission_xml_conf.xml +++ b/create_mission_xml/create_mission_xml_conf.xml @@ -72,7 +72,7 @@ <upper_boundary>50000</upper_boundary> </crossover_altitude> </adapt_climb_speed_schedule> - <climb_thrust_setting description="Selector to set the thrust rating within climb/acceleration segments. Selector: mode_0 (Takeoff) / mode_1 (Climb / mode_2 (Maximum continuous) / mode_3 (Cruise)"> + <climb_thrust_setting description="Selector to set the thrust rating within climb/acceleration segments. Selector: mode_0 (Takeoff) / mode_1 (Climb) / mode_2 (Maximum continuous) / mode_3 (Cruise)"> <value>mode_1</value> </climb_thrust_setting> <maximum_rate_of_climb description="Limit the rate of climb (ROC) to a preset value during Climb segments; values less then 0: Use full thrust as limit"> @@ -135,7 +135,7 @@ <lower_boundary>500</lower_boundary> <upper_boundary>50000</upper_boundary> </auto_climb_altitude_steps> - <auto_rate_of_climb_steps description="Rate of climb steps in cruise with automatic altitude adjustment"> + <auto_rate_of_climb_steps description="Rate of climb limit in cruise with automatic altitude adjustment"> <value>300</value> <unit>ft/min</unit> <lower_boundary>0</lower_boundary> @@ -220,7 +220,7 @@ <lower_boundary>500</lower_boundary> <upper_boundary>50000</upper_boundary> </auto_climb_altitude_steps> - <auto_rate_of_climb_steps description="Rate of climb steps in cruise with automatic altitude adjustment"> + <auto_rate_of_climb_steps description="Rate of climb limit in cruise with automatic altitude adjustment"> <value>300</value> <unit>ft/min</unit> <lower_boundary>0</lower_boundary> diff --git a/create_mission_xml/src/libs/mission_steps/approach_step.cpp b/create_mission_xml/src/libs/mission_steps/approach_step.cpp index c055975972a2f83470400610d50c9b00395ccba6..45f7d549d08aadb6f933d7a6c6a336c84c9fc122 100644 --- a/create_mission_xml/src/libs/mission_steps/approach_step.cpp +++ b/create_mission_xml/src/libs/mission_steps/approach_step.cpp @@ -20,7 +20,7 @@ approach_step::approach_step(const std::string &a_mode, const std::string &a_rat rating("rating", "Sets thrust rating within climb/acceleration segments to Takeoff, Climb, Maximum continuous, Cruise"), derate("derate", "Derate during this step", 1., "1", 0., 1.5), configuration("configuration", "Configuration of the aircraft during this step"), - rate_of_climb_limit("rate_of_climb_limit", "Rate of climb during this step (empty value = climb with full thrust)", + rate_of_climb_limit("rate_of_climb_limit", "Maximum rate of climb during this step (empty value = climb with full thrust)", 0., "m/s", 0., convertUnit(FOOTPERMINUTE, METERPERSECOND, 5000.)), end_CAS("calibrated_airspeed", "Calibrated airspeed at the end of this step", 0., "m/s", 0., 250.), end_altitude("altitude", "Altitude at the end of this step", 0., "m", 0., 20000.), diff --git a/create_mission_xml/src/libs/mission_steps/cruise_step.cpp b/create_mission_xml/src/libs/mission_steps/cruise_step.cpp index e561a2892a11ffc82056cb52a2bb744772c4f437..fa2589e2b092e16cfce9e6169055c96cafb79e5f 100644 --- a/create_mission_xml/src/libs/mission_steps/cruise_step.cpp +++ b/create_mission_xml/src/libs/mission_steps/cruise_step.cpp @@ -14,7 +14,7 @@ /* Constructor for creation of an cruise step object and for the settings of the step parameters. */ cruise_step::cruise_step(const std::string &a_mode, const std::string &a_rating, double a_derate, const std::string &a_config, double an_end_altitude, - bool auto_select_initial_cruise_altitude, bool round_to_regular_flight_level, double auto_climb_step_altitude_change, + bool auto_select_FL, bool round_to_regular_flight_level, double auto_climb_step_altitude_change, bool a_flight_management_system, double a_rate_of_climb_limit, double an_end_CAS, double an_end_Mach, double a_relative_segment_length) : @@ -22,7 +22,7 @@ cruise_step::cruise_step(const std::string &a_mode, const std::string &a_rating, mode("mode", "Mode during this step"), rating("rating", "Sets thrust rating within climb/acceleration segments to Takeoff, Climb, Maximum continuous, Cruise"), configuration("configuration", "Configuration of the aircraft during this step"), - rate_of_climb_limit("rate_of_climb_limit", "Rate of climb during this step (empty value = climb with full thrust)", + rate_of_climb_limit("rate_of_climb_limit", "Maximum rate of climb during this step (empty value = climb with full thrust)", 0., "m/s", 0., convertUnit(FOOTPERMINUTE, METERPERSECOND, 5000.)), end_CAS("calibrated_airspeed", "Calibrated airspeed at the end of this step", 0., "m/s", 0., 250.), end_Mach("mach_number", "Mach number at the end of this step", 0., "1", 0., 1.), @@ -45,7 +45,7 @@ cruise_step::cruise_step(const std::string &a_mode, const std::string &a_rating, this->end_altitude.set_value(an_end_altitude); this->flight_management_system.set_value(a_flight_management_system); this->relative_segment_length.set_value(a_relative_segment_length); - if (auto_select_initial_cruise_altitude) { + if (auto_select_FL) { this->auto_select_optimum_flight_level.set_value(true); this->auto_climb_step_height.set_value(auto_climb_step_altitude_change); } diff --git a/create_mission_xml/src/libs/mission_steps/cruise_step.h b/create_mission_xml/src/libs/mission_steps/cruise_step.h index 8f08d10b06749cf91af33c8ef3f14212ccc66e53..fee3d2af54a734744f85bb24c3753964adc24797 100644 --- a/create_mission_xml/src/libs/mission_steps/cruise_step.h +++ b/create_mission_xml/src/libs/mission_steps/cruise_step.h @@ -30,7 +30,7 @@ class cruise_step { * \param a_derate: derate of the cruise step [-] * \param a_config: reference to the configuration of the cruise step * \param an_end_altitude: altitude at the end of the cruise step [m] - * \param auto_select_initial_cruise_altitude: switch for automatic select of the initial cruise altitude of the cruise step + * \param auto_select_FL: switch for automatic select of the cruise altitude of the cruise step * \param round_to_regular_flight_level: switch for rounding to regular flight level of the cruise step * \param a_rate_of_climb_limit: rate of climb of the cruise step [m/s] * \param an_end_CAS: calibrated airspeed at the end of the cruise step [m/s] @@ -38,7 +38,7 @@ class cruise_step { * \param a_relative_segment_length: relative segment length of the cruise step [-] */ cruise_step(const std::string &a_mode, const std::string &a_rating, double a_derate, const std::string &a_config, double an_end_altitude, - bool auto_select_initial_cruise_altitude, bool round_to_regular_flight_level, + bool auto_select_FL, bool round_to_regular_flight_level, double auto_climb_step_altitude_change, bool a_flight_management_system, double a_rate_of_climb_limit, double an_end_CAS, double an_end_Mach, double a_relative_segment_length); /** \brief Destructor for class cruise_step diff --git a/create_mission_xml/src/libs/mission_steps/departure_step.cpp b/create_mission_xml/src/libs/mission_steps/departure_step.cpp index 33079d724b75ea078dd3828d2a5f010eb1304686..0e9a7374cd5ba66bab8e00f9bd86198556aaa89b 100644 --- a/create_mission_xml/src/libs/mission_steps/departure_step.cpp +++ b/create_mission_xml/src/libs/mission_steps/departure_step.cpp @@ -20,7 +20,7 @@ departure_step::departure_step(const std::string &a_mode, const std::string &a_r rating("rating", "Sets thrust rating within climb/acceleration segments to Takeoff, Climb, Maximum continuous, Cruise"), derate("derate", "Derate during this step", 1., "1", 0., 1.5), configuration("configuration", "Configuration of the aircraft during this step"), - rate_of_climb_limit("rate_of_climb_limit", "Rate of climb limit during this step (no limit set = full thrust climb)", + rate_of_climb_limit("rate_of_climb_limit", "Maximum rate of climb limit during this step (no limit set = full thrust climb)", 0., "m/s", 0., convertUnit(FOOTPERMINUTE, METERPERSECOND, 5000.)), end_CAS("calibrated_airspeed", "Calibrated airspeed at the end of this step", 0., "m/s", 0., 250.), end_altitude("altitude", "Altitude at the end of this step", 0., "m", 0., 20000.) { diff --git a/create_mission_xml/src/standard_mission/parameter_setter.cpp b/create_mission_xml/src/standard_mission/parameter_setter.cpp index fadb5fcda2a53a87e7ab0eb3f706de5b622a6ae0..7700b9af1096738823e928e1fe82f1950ac4ec39 100644 --- a/create_mission_xml/src/standard_mission/parameter_setter.cpp +++ b/create_mission_xml/src/standard_mission/parameter_setter.cpp @@ -78,14 +78,20 @@ void standard_mission::set_module_settings(standard_mission::mission_parameters* EndnodeReadOnly<bool>(subnode + "/auto_select_flight_level/enable").read(rtIO->moduleConfig).value(); mission->round_to_regular_flight_level = EndnodeReadOnly<bool>(subnode + "/round_to_regular_flight_level").read(rtIO->moduleConfig).value(); - /* Number of steps */ mission->no_steps = EndnodeReadOnly<bool>(subnode + "/auto_select_flight_level/no_steps").read(rtIO->moduleConfig).value(); mission->auto_climb_altitude_steps = - EndnodeReadOnly<bool>(subnode + "/auto_climb_altitude_steps").read(rtIO->moduleConfig).value(); + EndnodeReadOnly<double>(subnode + "/auto_climb_altitude_steps").read(rtIO->moduleConfig).value(); mission->auto_rate_of_climb_steps = EndnodeReadOnly<double>(subnode + "/auto_rate_of_climb_steps").read(rtIO->moduleConfig).value(); - // Correct contradiction on user input. noSteps has no effect when autoSelectFlightLevel is active + // Catch missing auto climb parameters if auto_select_flight_level is turned on + if (mission->auto_select_flight_level && (accuracyCheck(mission->auto_climb_altitude_steps, 0., ACCURACY_LOW) || + accuracyCheck(mission->auto_rate_of_climb_steps, 0., ACCURACY_LOW))) { + myRuntimeInfo->warn << "auto_select_optimum_flight_level was switched on, but auto climb parameters were not set (auto_climb_altitude_steps, auto_rate_of_climb_steps)." + << "auto_select_optimum_flight_level will be ignored!" << std::endl; + mission->auto_select_flight_level = false; + } + // Correct contradiction on user input. no_steps has no effect when auto_select_flight_level is active if (mission->no_steps && mission->auto_select_flight_level) mission->no_steps = false; } diff --git a/create_mission_xml/src/standard_mission/steps_setter.cpp b/create_mission_xml/src/standard_mission/steps_setter.cpp index e9dd8933e7effa8318c1a9aae04793787c9a05f5..f6a5cb6ac54940ff7bbca1cea5f53882beb97d18 100644 --- a/create_mission_xml/src/standard_mission/steps_setter.cpp +++ b/create_mission_xml/src/standard_mission/steps_setter.cpp @@ -95,7 +95,11 @@ void standard_mission::set_cruise_profile(standard_mission::mission_parameters* if (i % 2 == 0) { // Mode: cruise mode = "cruise"; rating = "cruise"; - rate_of_climb_limit = NAN; + if (mission->auto_select_flight_level) { + rate_of_climb_limit = mission->auto_rate_of_climb_steps; + } else { + rate_of_climb_limit = NAN; + } relative_segment_length = mission->cruise_step_segments[i / 2 - 2].relative_segment_length; end_altitude = NAN; } else { // Mode: change flight level...