engines.cfg - ADDITIONAL INFORMATION

This page contains various notes related to some of the functionality derived from the engines.cfg sections and parameters.

 

 

Note On Time Constants And Tuning Constants

When setting up the engines.cfg, regardless of the engine type, you will be using some general parameters which will be affected by time constants (suffixed with _tc) and tuning constants (suffixed with _tuning_constant). These parameters are used to perform integrations by the simulation to compute time dependent values, typically taking the form of:

$$ value(t+dt)=value(t)+(target\_value \times tuning\_constant - value(t))\times dt \times \textrm{tc} $$

Where:

  • \(dt\) is the time step that is given by the simulation for each frame (delta time).
  • \(target\_value\) is the value calculated using the current simulation conditions.

 

In these integrations, the tuning constant acts as a multiplier on the \(target\_value\) thus increasing the final value. This is essentially the same effect as increasing the target value given in whichever parameter or table dictates the \(target\_value\).

 

The time constant, however, has a very different effect. It does not modify the final value, but instead it controls the rate at which the value will be evaluated towards the \(target\_value\).

 

 

Notes On Emergency Boost

The emergency boost system will work in two "modes" depending on whether the emergency_boost_mp_damage parameter has been set to anything other than 0 or not. When set to 0, boost calculations will be done using the legacy FSX time counter:

  • for water and methanol-water injection: \(Elapsed\_time = Elapsed\_time + (deltaT \times \frac{current_rpm}{max_rated_rpm})\)
  • for WEP: \(Elapsed\_time = Elapsed\_time + deltaT\)

NOTE: deltaT here is the "Delta Time" value, which is the time that has elapsed between the last simulation frame and the current simulation frame. See here for a more in-depth explanation.

 

When setting emergency_boost_mp_damage to a value that is greater than 0, it will enable the Microsoft Flight Simulator 2024 time counter which works like this for methanol-water injection, water injection, and WEP: \(Elapsed\_time = Elapsed\_time + (deltaT \times \frac{current_manifold_pressure}{emergency_boost_mp_damage})\)

 

Considering that a manifold pressure above the damage threshold will accelerate the counter, one should take into account the desired upper limit for manifold pressure when setting the max_emergency_boost_time.

 

As an example: let's consider an aircraft where going above 61inHg of manifold pressure will start damaging the engine and emergency boost can allow for a maximum of 67inHg. If one wants to be able to spend 315 seconds at 67inHg then max_emergency_boost_time should be set to:

max_emergency_boost_time = 315 * (67/61) = 315 * 1.098 = 346

To get the current elapsed time since the emergency boost has been activated, you can use the SimVar RECIP_ENG_EMERGENCY_BOOST_ELAPSED_TIME.

 

 

Notes On Supercharger

In legacy FSX, the supercharger - activated using the supercharged parameter - used a calculation that was actually lacking an essential parameter:

$$\textrm{boost} = (supercharger\_boost\_high\_end - supercharger\_boost\_low\_end) \times Throttle\_Position$$

 

In this formula, the supercharger_boost_low_end parameter is not used at all. In Microsoft Flight Simulator 2024 this has been rectified and you can enable the use of the correct formula by enabling the new_supercharged parameter in the engines.cfg file, using one of the following values:

 

  • 1: This will make the simulation use a fixed formula to calculate the supercharger boost using the existing legacy supercharger parameters supercharger_boost_high_end and supercharger_boost_low_end. Boost will then be calculated using the following formula:
    $$\textrm{boost} = (supercharger\_boost\_high\_end - supercharger\_boost\_low\_end) \times Throttle\_Position + supercharger\_boost\_low\_end$$

 

  • 2: This will permit the simulation to have multi speed support for the supercharger using the following parameters: supercharger_altitude_gear.N, supercharger_boost_high_end_gear.N, supercharger_boost_low_end_gear.N. This system will allow for a maximum of 5 gears. As an example, if a two speed supercharger is needed then the CFG parameters would have this structure:
    supercharger_altitude_gear.1 = [VALUE]
    supercharger_boost_high_end_gear.1 = [VALUE]
    supercharger_boost_low_end_gear.1 = [VALUE]
    supercharger_altitude_gear.2 = [VALUE]
    supercharger_boost_high_end_gear.2 = [VALUE]
    supercharger_boost_low_end_gear.2 = [VALUE]
    When using the multi-speed supercharger you can monitor which gear is engaged by monitoring the SimVar RECIP_ENG_SUPERCHARGER_ACTIVE_GEAR. The supercharger system will continuously check if the current Pressure Altitude is superior or equal to the altitude at which each gear should engage in order to automatically switch between the gears. If an altitude is set as -1.0 the gear is considered inactive and the engaging altitude for this gear will not be checked thus preventing the switch to this particular gear (which is why default altitude value is -1.0). When a gear is engaged the boost values corresponding to this gear will be used in the following calculation of boost:
    $$\textrm{boost} = (supercharger\_current\_gear\_boost\_high\_end - supercharger\_current\_gear\_boost\_low\_end) \times Throttle\_Position + supercharger\_current\_gear\_boost\_low\_end$$

IMPORTANT! When using the "new_supercharged" param, the legacy "supercharged" parameter must be either set to 0 or removed from the CFG file.

 

 

Note On Autofeathering

If your aircraft is to support auto-feathering, then it is worth knowing the following information to enable you to set it up and use it correctly:

  • You must have created a dedicated electrical of the type CIRCUIT_AUTO_FEATHER.
  • You will need to set up the min_n1_for_autofeather_armed parameter as this will be used to arm autofeathering (if the N1 goes above this value, it will be armed).
  • You will need to set up the max_n1_for_autofeather_actuated value, which is used to unfeather the propeller when the N1 goes above this value.
    NOTE: Currently you will need to use the alias max_pct_torque_for_autofeather_actuated since there is a bug in the code.

 

Once those have been setup, in the simulation the SimVars CIRCUIT AUTO FEATHER ON and PANEL AUTO FEATHER SWITCH will need to be set to 1.

 

 

Note On Propeller Pitch And Throttle

The parameter min_flight_beta_throttle_pos enables the propeller pitch control algorithm in the BETA-range of throttle (power lever), while simultaneously defining a throttle position that forces the propeller to the minimum flight pitch, specified by the beta_min parameter. The way this works is that the min_flight_beta_throttle_pos value essentially divides the entire range of travel of the throttle into two ranges:

  • the normal position (ie: when the throttle position is greater than the min_flight_beta_throttle_pos), in which the propeller pitch is controlled by the governor, in accordance with the prop speed set by the throttle
  • the beta position (ie: when the throttle position is less than or equal to the min_flight_beta_throttle_pos), in which the throttle position sets the the propeller pitch using the following guidelines:

NOTE: Set tp_high_idle_throttle_pos to the min_flight_beta_throttle_pos if you want a turboprop engine to idle in the range of throttle positions between 0 and tp_high_idle_throttle_pos.

 

When min_flight_beta_throttle_pos is greater than 0 it will additionally have the following effect on the simulation:

  • If the throttle is in the thrust reverse range (ie, the throttle position is less than 0) and prop_reverse_available is enabled, then the minimum propeller pitch limitation no longer depends on the throttle position (this is the same as for Microsoft Flight Simulator 2020 aircraft). Thus, if a pilot sharply moves the throttle from the reverse position to position 0 and above, then the propeller blades will no longer exit the reverse mode instantly, but will increase pitch at a limited speed.
  • When the following conditions are met:
    • the throttle is greater than 0 and:
    • prop_reverse_available is enabled and:
    • one or more landing gear is touching the ground and:
    • the ground type is not water:
    then the minimum propeller pitch limitation is no longer set to the minimum_on_ground_beta. Thus, it becomes possible to control the propeller pitch in the BETA-range, regardless of the interaction of the aircraft landing gear with the ground.

 

 

Note On Propeller Pitch Angle

The rate of change for the propeller pitch angle is calculated as follows:

$$\textrm(Rate) = NominalRate \times Ratio$$

Where:

 

 

 

Note that if the prop_pitch_control_min_oil_pressure and prop_pitch_control_nominal_oil_pressure parameters are not specified - and thus the default values are used - the propeller pitch control behaves as before, with zero nominal oil pressure assumed sufficient for full operation.

 

 

Note On Propeller RPM Limiter

The automatic propeller RPM limiter is designed for piston engine aircraft with a constant speed propeller and turboprop aircraft. It's purpose is to prevent dangerous overspeeding of the propeller beyond its maximum allowed RPM. Such overspeeding typically occurs when the propeller enters a "windmilling" mode, where the propeller spins faster than expected driven by the energy of the incoming airflow during flight, takeoff, or landing. This mainly happens when there is an unfavorable combination of too low a blade pitch angle (propeller in a fine pitch, beta range, or reverse mode) and higher than average engine torque (excess power on the shaft).

 

The limiter is implemented as two different types over 5 parameters, and they can be used independently or together (although it's more likely you'll use one or the other):

 

It should be noted that there is also a dedicated debug tool which has been developed to make tuning of both limiter types easier, clearer, and more effective. This window can be found by opening the Engines debug window, and then selecting Propeller RPM Limiter Analysis.

IMPORTANT: For proper initialization and operation of each limiter type, the following conditions must be met:
- The RPM limit value must be greater than zero
- At least one of the PID controller coefficients P or I must be greater than zero.
The limiter will not be initialized and will have no effect on the propeller if these conditions are not met.

 

 

Note On Propeller Rotation Direction

The propeller rotation direction will depend on how you have set up the model materials, and how you have set up the available parameters. The following table shows the relationship between the model material used, and the available parameters:

Legacy propeller physics Modern propeller physics
Standard material The rotation parameter determines both visual and physical direction. The rotation parameter determines the visual direction, and the prop_mod_reverse_left, prop_mod_reverse_right, and prop_mod_reverse_centre, parameters determine the physical direction.
Propeller material The rotation parameter determines the physical direction, while the Node Z axis determines the visual direction. The Node Z axis determines the visual direction, , and the prop_mod_reverse_left, prop_mod_reverse_right, and prop_mod_reverse_centre, parameters determine the physical direction.

In the above table, "legacy" propeller physics is when prop_mod_use_modern is set to false or prop_mod_version is <1. "modern" physics is when prop_mod_use_modern is set to true or prop_mod_version is >= 2.

Note On The Fuel Flow PID

The functioning of the fuel flow PID (defined using the fuel_flow_controller_p, fuel_flow_controller_p, fuel_flow_controller_p, fuel_flow_controller_iboundary, and fuel_flow_controller_dboundary, parameters) will vary depending on a few factors, which we'll outline below:

 

  • For jet engines, the PID works different based on the use_commanded_Ne_table:
    • If true, the fuel flow PID controller regulates corrected N2, driving it toward commanded Ne.
    • if false, the fuel flow PID controller regulates N1, driving it toward commanded Ne
  • See the Note On Computing Commanded Ne for more information.

 

  • For turboprop or helo-turbine engines, the fuel flow PID controller regulates corrected N1, driving it toward commanded Ne.

 

For more information on PID functionality, please see here: PID Parameters

 

 

Note On Computing Commanded Ne

The mach_0_corrected_commanded_ne_table and mach_hi_corrected_commanded_ne_table tables are only used when the use_commanded_Ne_table is set to 1 (TRUE). In that case they should be filled in where:

  • The top row of the table is the low/high Mach value in column 1, followed by the inverted pressure ratio \(\frac{1}{delta}\) values in ascending order (and therefore in ascending pressure altitude) in all subsequent columns.
  • All other rows of the table have the Effective Throttle position in the first column, followed by the Commanded Ne values corresponding to the inverted pressure ratio (1/delta) values in the 1st row of the table.

 

The following images show a schematic of how those tables would look if added into a spreadsheet:

Schematic Of The mach_0_corrected_commanded_ne_table Parameter Contents

Schematic Of The mach_hi_corrected_commanded_ne_table Parameter Contents

 

When using these tables, the commanded Ne is computed in three steps:

  1. First, we obtain the commanded Ne for inlet Mach = Mach_low from the first table (mach_0_corrected_commanded_ne_table) for the given Effective Throttle position and pressure altitude (using the inverted pressure ratio (\(\frac{1}{delta}\)) value).
  2. Next, we obtain the commanded Ne for inlet Mach = Mach_high from the second table (mach_hi_corrected_commanded_ne_table) for the given Effective Throttle position and pressure altitude (using the inverted pressure ratio (\(\frac{1}{delta}\)) value).
  3. Finally, we compute the commanded Ne for the target Inlet Mach as a linear interpolation between the values found for Low Mach and High Mach. If the target Inlet Mach is outside this range, the value is linearly extrapolated (for more information on Inlet Mach, please see the Note On Inlet Parameter Calculations).

 

It is worth noting the following when using these tables:

  • As with any 2D table, the data must be arranged such that the inverted pressure ratio (\(\frac{1}{delta}\)) values in the first row and the Effective Throttle position values in the first column are in ascending order. This is why the inverted delta is used, as it increases with altitude.
  • Because interpolation within each table is performed independently, the inverted pressure ratio (\(\frac{1}{delta}\)) and Effective Throttle position breakpoints in the first table do not have to match those in the second table.
  • Low Mach and High Mach may be arbitrary but must not be equal.
  • Please avoid cases where the interpolation results from the first and second tables are equal for the same throttle position and pressure altitude. In such cases, the engine may incorrectly switch to idle.
  • Extrapolation beyond the table limits is not performed, so you should expand the table boundaries sufficiently to prevent Effective Throttle position and pressure altitude from exceeding the defined ranges.

 

 

Effective Throttle

In many places in the simulation calculations, the effective throttle is used over the actual throttle position. This is an internal parameter that is calculated as follows:

  • If user throttle input ≥ 0 then it's: \(min(\frac{throttle}{AB\_threshold}, max\_limit) \times life\_factor\)
  • If user throttle input < 0 then it's: \(\throttle_input \times reverse\_factor \times life\_factor\)

Where:

 

 

Note On Inlet Parameter Calculations

This section details the internal parameters and equations used for jet / turboprop / helo-turbine engines using the Inlet Mach number, so that you can better understand how the simulation works and tweak your engines.cfg file parameters accordingly.

 

This Inlet Mach number number is either the current Mach value, or the inlet Mach limit, which is found based on the following parameters:

Such that:

$$\texttrm{Inlet_Mach} = min(Mach, Inlet\_Mach\_limit)$$

 

This Inlet Mach number is used in the following calculations for Jet (turbofan), Turboprop and Helo-turbine (turboshaft) engines:

 

And additionally, the Inlet Mach number is used in these calculations only in Jet engines:

 

 

θ Total

The total temperature ratio (θ total) is used internally and calculated as:

  • \(θ = frac{OAT}{To}\)
  • \(θ_total = θ \times (1 + 0.2 \times inlet\_Mach^2)\)

Where:

  • \(θ\) is the temperature ratio (unitless).
  • \(OAT\) is the outside ambient air temperature (Rankine).
  • \(To\) is the standard air temperature at mean sea level (MSL) according to the International Standard Atmosphere (ISA): 518.67 Rankine (15 °C)

 

This total temperature ratio (θ_total) is used in the following calculations:

  • \(N1 = N1\_corrected \times \sqrt{θ\_total}\)
  • \(N2 = N2\_corrected \times \sqrt{θ\_total}\)
  • \(ITT = ITT\_corrected \times θ\_total\)
  • \(EGT = EGT\_corrected \times θ\_total\)

 

Note that in ram drag calculations, the total temperature ratio for determining airflow is computed using the aircraft Mach number rather than the inlet Mach number:

  • \(θ\_total = θ\_total = θ \times (1 + 0.2 \times Mach^2)\)
  • \(airflow = \frac{airflow\_corrected \times δ\_total}{\sqrt{θ\_total}}\)
  • \(ram\_drag = \frac{TAS * airflow}{g}\)

Where:

  • \(Mach\) is the aircraft (not inlet) Mach number.
  • \(airflow\) / \(airflow\_corrected\) is the airflow through the engine (lbs per second).
  • \(TAS\) is the true air speed (ft per second).
  • \(g\) is the standard acceleration due to gravity (~32.174 ft/sec^2 / 9.80665 m/sec^2)
  • \(δ\_total\) is the total pressure ratio (unitless).

 

 

δ Total

The total pressure ratio (δ total) is used internally and calculated as:

  • \(δ = \frac{P}{Po}\)
  • \(δ\_total = max(0.05, δ) \times (1 + 0.2 \times M^2)^3.5 \times inlet\_efficiency \times Mach\_losses\)

Where:

  • \(δ\) is the Pressure ratio, [unitless]
  • \(P\) is the Ambient static air pressure, in the same units as **Po**
  • \(Po\) is the Standard air pressure at mean sea level (MSL) according to the International Standard Atmosphere (ISA): 1013.25 mBar (760 mmHg, ~29.92 inHg, ~ 2116.2 psf)
  • \(M\) is defined as:
  • \(inlet\_efficiency\) is a unitless correction coefficient computed based on engine inlet configuration parameters and
  • \(aircraft\) is the Mach number:
    Condition inlet_efficiency

    supersonic_inlet = 0 (FALSE)

    1
    supersonic_inlet = 1 (TRUE) Interpolated using supersonic_inlet_efficiency_correction_table, with aircraft Mach as input
  • \(Mach\_losses\) is a unitless correction coefficient computed based on engine inlet configuration parameters and aircraft Mach number:
    Condition Mach_losses
    supersonic_inlet = 0 (FALSE)
    OR Mach < 1
    1
    supersonic_inlet = 1 (TRUE)
    AND Mach > 5
    AND supersonic_inlet_hypersonic = 1 (TRUE)
    (-0.0084 * Mach^2 - 0.0028 * Mach + 0.9031) / 0.89
    Otherwise, meaning:
    supersonic_inlet = 1 (TRUE)
    AND Mach ≥ 1
    AND (Mach ≤ 5 OR supersonic_inlet_hypersonic = 0 (FALSE))
    1 - 0.075 * (Mach - 1)^1.35

 

Note that due to the lower bound constraint of δ ≥ 0.05, δ total becomes independent of altitude at pressure altitudes exceeding approximately 67450ft (20559 m).

 

The total pressure ratio (δ_total) is used in the following calculations:

  • \(gross\_thrust = gross\_thrust\_corrected * δ\_total\)
  • \(airflow = \frac{airflow\_corrected * δ\_total}{\sqrt(θ\_total)}\)
  • \(ram\_drag = frac{TAS * airflow}{g}\)

Where:

  • \(airflow\) / \(airflow\_corrected\) is the airflow through the engine (lbs per second).
  • \(TAS\) is the true air speed (ft per second).
  • \(g\) is the standard acceleration due to gravity (~32.174 ft/sec^2 / 9.80665 m/sec^2)

 

 

Note On Ram Drag

Ram drag is the drag generated by the air that a turbine engine ingests to produce thrust. Essentially, all the air entering the engine inlet generates drag and that drag is calculated through the following formula:

$$D_{ram}=\frac{dm_0}{dt} \times V_0$$

Where:

  • \(\frac{dm_0}{dt}\) is the mass flow (kg/s or lb/s).
  • \(V_0\) is the speed of the incoming airflow (or mass flow). Note that "airflow" is an interpolation of the parameter corrected_airflow_table multiplied by the parameter inlet_area, both of which can be set in engines.cfg.

Because we need to be able to tune this ram drag effect we are simulating this formula like this:

$$D_{ram} = \frac{a(\rho,P) \times Ma_{inlet} \times airflow}{g}$$

Where:

  • \(a(\rho,P)\) is the speed of sound in the current flight conditions
  • \(Ma_{inlet}\) is the Inlet Mach number
  • \(airflow\) is a term dependent on the inlet design and computed through interpolation and correction using δ Total and \(g\) the gravity constant of Earth.
  • the product \(a \times Ma_{inlet}\) gives the previously stated \(V_0\).

 

By default the simulation will compute the ram drag for a turbine engine using a maximum mach value of 1. However if you wish to add supersonic (even hypersonic) planes to the simulator then this will have the consequence of creating an inferior airflow speed leading to less drag than there should be. To correct this issue, the parameter supersonic_ram_drag should be set to 1 (true) in the [TURBINEENGINEDATA] section of the CFG file for the aircraft. Setting it to 1 will allow for the simulation to use the flight Mach number instead of the inlet Mach number thus removing the default Mach 1 limit.

 

 

Note On Corrected Values

The various parameters that use corrected values have their calculations based on the following paper:

  1. GAS TURBINE PARAMETER CORRECTIONS, by Allan J. Volponi
  2. January 2020
  3. DOI: 10.1007/978-3-030-41076-6
  4. ISBN: 978-3-030-41075-9

 

0/255