diff --git a/src/FDM/JSBSim/FGPiston.cpp b/src/FDM/JSBSim/FGPiston.cpp index b8eb6a5ef..ea54f7c20 100644 --- a/src/FDM/JSBSim/FGPiston.cpp +++ b/src/FDM/JSBSim/FGPiston.cpp @@ -213,26 +213,21 @@ void FGPiston::doEngineStartup(void) } //Check mode of engine operation - // ACK - unfortunately this hack doesn't work in JSBSim since the RPM is reset - // each iteration by the propeller :-( if (Cranking) { crank_counter++; if (RPM <= 480) { - RPM += 100; - if (RPM > 480) - RPM = 480; + // Do nothing !! - cranking power output is now handled in the doPower section } else { // consider making a horrible noise if the starter is engaged with // the engine running } - // TODO - find a better guess at cranking speed } // if ((!Running) && (spark) && (fuel) && (crank_counter > 120)) { if ((!Running) && (spark) && (fuel)) { // start the engine if revs high enough - if (RPM > 450) { + if ((RPM > 450) && (crank_counter > 175)) { // For now just instantaneously start but later we should maybe crank for // a bit Running = true; @@ -351,28 +346,32 @@ void FGPiston::doFuelFlow(void) void FGPiston::doEnginePower(void) { ManifoldPressure_inHg *= p_amb / p_amb_sea_level; - double ManXRPM = ManifoldPressure_inHg * RPM; + if(Running) { + double ManXRPM = ManifoldPressure_inHg * RPM; // FIXME: this needs to be generalized - Percentage_Power = (6e-9 * ManXRPM * ManXRPM) + (8e-4 * ManXRPM) - 1.0; - double T_amb_degF = (T_amb * 1.8) - 459.67; - double T_amb_sea_lev_degF = (288 * 1.8) - 459.67; - Percentage_Power = - Percentage_Power + ((T_amb_sea_lev_degF - T_amb_degF) * 7 /120); - double Percentage_of_best_power_mixture_power = - Power_Mixture_Correlation->GetValue(14.7 / equivalence_ratio); - Percentage_Power = - Percentage_Power * Percentage_of_best_power_mixture_power / 100.0; - if (Percentage_Power < 0.0) - Percentage_Power = 0.0; - else if (Percentage_Power > 100.0) - Percentage_Power = 100.0; - HP = Percentage_Power * MaxHP / 100.0; - - //Hack - if (!Running) { + Percentage_Power = (6e-9 * ManXRPM * ManXRPM) + (8e-4 * ManXRPM) - 1.0; + double T_amb_degF = (T_amb * 1.8) - 459.67; + double T_amb_sea_lev_degF = (288 * 1.8) - 459.67; + Percentage_Power = + Percentage_Power + ((T_amb_sea_lev_degF - T_amb_degF) * 7 /120); + double Percentage_of_best_power_mixture_power = + Power_Mixture_Correlation->GetValue(14.7 / equivalence_ratio); + Percentage_Power = + Percentage_Power * Percentage_of_best_power_mixture_power / 100.0; + if (Percentage_Power < 0.0) + Percentage_Power = 0.0; + else if (Percentage_Power > 100.0) + Percentage_Power = 100.0; + HP = Percentage_Power * MaxHP / 100.0; + } else { + // Power output when the engine is not running if (Cranking) { - if (RPM < 480) { - HP = 3.0 + ((480 - RPM) / 10.0); + if (RPM < 10) { + HP = 3.0; // This is a hack to prevent overshooting the idle rpm in the first time step + // It may possibly need to be changed if the prop model is changed. + } else if (RPM < 480) { + HP = 3.0 + ((480 - RPM) / 10.0); + // This is a guess - would be nice to find a proper starter moter torque curve } else { HP = 3.0; }