MODULAR FUEL SYSTEM INFORMATION
At its most basic the Modular Fuel System can be thought of as a series of "components" connected by "lines", with the simplest setup being a tank, a fuel line, and an engine. However you can create far more complex fuel system definitions that include multiple components like pumps, junctions, valves, etc... and multiple line connections between them. The system is also dynamic and can be set to respond to certain "trigger" conditions. For example, should a tank become empty, you can trigger an event to close the valve to that tank and open the valve to another tank.
NOTE: You can only connect components to lines and lines to components... You cannot connect two components or two lines together. Also note that the ONLY components that can take more than 2 lines are the Tanks and Junctions.
These different parts of the system are all setup using the appropriate values within the hash maps required by each of the parameters listed here.
IMPORTANT: Connections between the different components are made using the "Name" key in the various hash maps that are associated with each parameter, and so you should try and ensure a clear and consistent naming methodology to help keep the way that the different components connect as clear as possible.
Burner.N
This parameter is used to define one or more burner consumers for a balloon SimObject. If this is included then you must also have a corresponding Burner.N
setup in the [Burner_System]
section, since that section defines the actual burner, and this section simply defines the way that the burner consumes the fuel.
IMPORTANT! Burners require that the fuel_type
be set to 6 (Liquid Propane).
A burner is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Burner.N = Name:<Burner_name> #Index:<Burner_Index>
Note that you may have more than one Burner, in which case you would increment the N
index, starting from 1. A typical example of a single Burner definition would be like this:
Burner.1 = Name:BurnerOne #Index:1
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the burner. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Index |
Integer | The index of the Burner this fuel system component refers to. This would normally be the same as the index N of the component, but can be different if required. |
Yes |
APU.N
This parameter is used to define one or more APU components to be used in the fuel system. This APU is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
APU.N = Name:<apu_name> #Title:<apu_title> #FuelBurnRate:<burn_rate>
Note that you may have more than one APU, in which case you would increment the N
index, starting from 1. A typical example of a single APU definition would be like this:
APU.1 = Name:MainAPU #FuelBurnRate:33
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the APU. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Title |
String (Localisable) |
The title of the APU to be displayed in the UI, if applicable. | No |
FuelBurnRate |
Float | The rate at which fuel will be burnt in Gallons per hour. | Yes |
Engine.N
This parameter is used to define one or more engine components to be used in the fuel system. This engine is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Engine.N = Name:<engine_name> # Title:<engine_title> # Index:<engine_index>
Note that you may have more than one engine, in which case you would increment the N
index, starting from 1 and up to a maximum of 4. A typical example for defining engines would look like this:
Engine.1 = Name:LeftEngine#Index:1
Engine.2 = Name:RightEngine#Index:2
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the engine. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Title |
String (Localisable) |
The title of the engine to be displayed in the UI, if applicable. | No |
Index |
Float | The index of the engine this fuel system component refers to. This would normally be the same as the index N of the component, but can be different if required. |
Yes |
The following SimVar is available for this component:
Tank.N
This parameter is used to define one or more fuel tank components to be used in the fuel system. This tank is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Tank.N = Name:<tank_name> #Title:<tank_title> #Capacity:<tank_capacity> #UnusableCapacity:tank_unusable_capacity> #Position:<Z>,<X>,<Y> #InputOnlyLines:<line1_name>,<line2_name>,<etc...> #OutputOnlyLines:<line1_name>,<line2_name>,<etc...> #DropTimer:<tank_timer> #Priority:<tank_priority> #WearAndTearCollision:<damage_profile_name1>,<damage_profile_name2>,<etc...>
Note that you may have more than one fuel tanks, in which case you would increment the N
index, starting from 1. Also note that tanks can have more than one line coming in or going out (unlike all other components except junctions).
A typical example of a single tank definition would be like this:
Tank.1 = Name:LeftWing #Capacity:20 #UnusableCapacity:0 #Position:-1.6,-3,-1.5 #Priority:1 #WearAndTearCollision:LeftWingHeavy
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the tank. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Title |
String (Localisable) |
The title of the fuel tank to be displayed in the UI, if applicable. | No |
Capacity |
Float | The capacity of the fuel tank, in Gallons. | Yes |
UnusableCapacity |
Float | The part of the total capacity that cannot be used, in Gallons. | Yes |
PressureCurve |
Curve Index | Here you can assign a Curve.N index. This curve will be used to ensure that the tank itself generates some line pressure depending on how full it is. The curve should be formatted as:
volume:psi, volume:psi, volume:psi, etc...Volume is simply a Percent Over 100 where 0 is empty and 1 is full. For example, a curve of 0:0, 1:15 would mean that the tank will generate 15psi of pressure when full and then linearly go down to 0psi as the level goes down.
|
|
Position |
List (3 Floats) |
This sets the position of the tank relative to the Datum Reference Point. Value is a comma separated list with the format Z, X, Y, and it is measured in ft. | Yes |
InputOnlyLines |
List (N Strings) |
This is a comma separated list of lines that are to be considered as input only. You can have a maximum of 10, and lines are given by their name, for example: InputOnlyLines:Eng1ToTank2, Xfer1ToTank2, Xfer1ToTank2_2 |
No |
OutputOnlyLines |
List (N Strings) |
This is a comma separated list of lines that are to be considered as output only. You can have a maximum of 10, and lines are given by their name, for example: OutputOnlyLines: TankCenterToCenterTankPump1, TankCenterToCenterTankPump2 |
No |
DropTimer |
Float | Sets the timer that will be started when one of the RELEASE_DROP_TANK_ALL , RELEASE_DROP_TANK_1 or RELEASE_DROP_TANK_2 events are called for the tank. This is the time - in seconds - that the user has to validate the jettison command for the tank (only valid for external tanks). |
No |
Priority |
Integer | This controls the order in which fuel tanks are filled (when using the Fuel window), as well as the order they will be used (when skipping in time). The higher the number the higher the priority and tanks with a higher priority will be filled first, and used last. For example: A tank with the priority 4 will be filled before a tank with priority 2 and after a tank with priority 5, and it will be used after the priority 2 tank but before the priority 5 tank. | No |
WearAndTearCollision |
String | This parameter provides one or more references to a damage profile that has been defined in the [COLLISION_DAMAGE] section of the flight model CFG file. For more information, please see here: Note On Collision Damage / Wear And Tear |
No |
The following SimVars are available for this component:
FUELSYSTEM_TANK_CAPACITY
FUELSYSTEM_TANK_LEVEL
FUELSYSTEM_TANK_QUANTITY
FUELSYSTEM_TANK_TOTAL_QUANTITY
FUELSYSTEM_TANK_WEIGHT
Line.N
This parameter is used to define one or more fuel lines to be used in the fuel system. This line is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Line.N = Name:<line_name> #Title:<line_title> #Source:<source_name> #Destination:<destination_name> #FuelFlowAt1PSI:<psi_value> #Volume:<volume_value> #GravityBasedFuelFlow:<gravity_flow_value>
Note that you may have more than one fuel line, in which case you would increment the N
index, starting from 1. A typical example of a single line definition would be like this:
Line.1 = Name:TankRightToRightTankPump1 #Source:RightInner #Destination:RightInnerTankPump1
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the line. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Title |
String (Localisable) |
The title of the fuel line to be displayed in the UI, if applicable. | No |
Source |
String | A source component name, where fuel will flow from. The only components that permit multiple source lines to be attached are tanks and junctions. | Yes |
Destination |
String | A destination component name, where fuel will flow to. The only component that permits multiple destination lines to be attached are junctions. | Yes |
FuelFlowAt1PSI |
Float | This is used to calculate the effect of pressure on fuel flow. Value is in lbs per second, and if not set will default to 0.1. | No |
Volume |
Float | This is the maximum amount of fuel that can be in the line at a given time. Value is in Gallons, and if not set will default to 0.24. | No |
GravityBasedFuelFlow |
Float |
This controls how fast the fuel will flow under gravity and also flag the line as being setup in such a way that even without pressure the fuel will naturally flow towards the destination. Value is in Gallon per hour. IMPORTANT! This will only affect how fuel is transferred between tanks, NOT how fuel flows to the engine. Engines require pressure for fuel to flow correctly. |
No |
The following SimVars are available for this component:
Junction.N
This parameter is used to define one or more junction components to be used in the fuel system. This junction is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Junction.N = Name:<junction_name> #Title:<title> #Option:<option>,<option>,<etc> #InputOnlyLines:<line>,<line>,<etc> #OutputOnlyLines:<line>,<line>,<etc>
Note that you may have more than one junction, in which case you would increment the N
index, starting from 1. Also note that junctions can have more than one line coming in or going out (unlike all other components except tanks).
A typical example of a single junction definition would be like this:
Junction.1 = Name:FuelSelector #InputOnlyLines:LeftInnerToFuelSelector,RightInnerToFuelSelector #OutputOnlyLines:FuelSelectorToPumpsJunction #Option:LeftInnerToFuelSelector,FuelSelectorToPumpsJunction #Option:RightInnerToFuelSelector,FuelSelectorToPumpsJunction #Option:CenterAftToFuelSelector,FuelSelectorToPumpsJunction #Option:FuelSelectorToPumpsJunction
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the juncton. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Title |
String (Localisable) |
The title of the junction to be displayed in the UI, if applicable. | No |
Option |
List (N strings) |
Junctions can have one or more option settings, and each one takes a comma separated list of line names. Lines given for each option will be set to open when the option is set, and all others will be set to closed. The order of definition of each Option corresponds to the index of the option, which is used by the FUELSYSTEM_JUNCTION_SET key event to trigger them. If no options are defined then all connected lines will be considered as open. |
No |
InputOnlyLines |
List (N strings) |
This is a comma separated list of lines connected to the junction that are to be considered as input only. You can have a maximum of 10, and lines are given by their name, for example:InputOnlyLines:HandPumpValveToEngineJunction, EngineDrivenPumpToEngineJunction
|
No |
OutputOnlyLines |
List (N strings) |
This is a comma separated list of lines that are connected to the junction to be considered as output only. You can have a maximum of 10, and lines are given by their name, for example:OutputOnlyLines:EngineJunctionToEngine
|
No |
The following SimVar is available for this component:
The following key Event is also available:
Valve.N
This parameter is used to define one or more valve components to be used in the fuel system. This valve is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Valve.N = Name:<valve_name> #Title:<valve_title> #DestinationLine:<destination_name> #OpeningTime:<time_value> #Circuit:<circuit_index>
Note that you may have more than one valve, in which case you would increment the N
index, starting from 1. A typical example of a single valve definition would be like this:
Valve.1 = Name:LeftEngineValve #OpeningTime:3 #Circuit:1
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the valve. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Title |
String (Localisable) |
The title of the valve to be displayed in the UI, if applicable. | No |
DestinationLine |
String |
The destination line for the valve. If not included, the valve will permit fuel flow in both directions, however if set, then fuel can only flow towards the destination line. | No |
OpeningTime |
Float | The time, in seconds, that it takes the valve to open/close. Default value is 0.5. | No |
Circuit |
Integer |
The index of the electrical circuit that controls the valve. The circuit needs to be of the type IMPORTANT! This is not the index of the circuit itself, but the index of the circuit of the type circuit.15 = Type:CIRCUIT_FUEL_VALVE:4 #Connections:bus.2 #Power:3,5,20 #Name:Fuel_P_R2 then the circuit index would be 4, eg: Valve.2 = Name:Right2Valve #OpeningTime:3 #Circuit:4 |
No |
The following SimVars are available for this component:
The following key Events are also available:
Pump.N
This parameter is used to define one or more fuel pump components to be used in the fuel system. This pump is defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and has the following structure:
Pump.N = Name:<pump_name> #Title:<pump_title> #Pressure:<pressure_value> #PressureCurve:<curve_index> #TankFuelRequired:<tank_name> #DestinationLine:<line_name> #Type:<type_string> #index:<value> #AutoCondition:<engine_psi_threshold> #PressureDecreaseRate:<decrease_value>
Note that you may have more than one fuel pump, in which case you would increment the N
index, starting from 1. A typical example of a single pump definition would be like this:
Pump.1 = Name:HandPump #Pressure:6 #DestinationLine:HandPumpToHandPumpValve #Type:Manual #PressureDecreaseRate:0.05
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the valve. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Title |
String (Localisable) |
The title of the pump to be displayed in the UI, if applicable. | No |
Pressure |
Float | This is the pump pressure in psi. Minimum is 0 psi. | Yes |
PressureCurve |
Integer (Curve Index) |
This takes the index N value of a curve defined in the Curve.N section. The curve is the relationship between the percentage of maximum RPM of an engine and the percentage of maximum pressure provided by the pump (the maximum value being defined by the "Pressure" key). This curve is only used when the "Type" key is set to EngineDriven , and it will use the RPM of the engine given in the "Index" key. |
No |
TankFuelRequired |
String | Sets whether the pump requires a fuel tank or not. If a fuel tank name is supplied here, then the pump will automatically shut down when the tank is empty. | No |
DestinationLine |
String | The line name supplied here sets the direction in which the pump is causing pressure. | Yes |
Type |
String |
Sets the type of pump that is being defined. The available strings for this key are:
|
Yes |
Index |
Integer |
An index value that corresponds to the following:
|
No |
AutoCondition |
List (String, Float) |
If this key is included, then you will be able to set the pump to "AUTO" mode, in which case it will only be enabled when the pressure of the fuel reaching the chosen engine goes below a specific threshold. The key requires two values, separated by a comma: the name of the engine to link with the pump, and the threshold value (in psi). | No |
PressureDecreaseRate |
Float | This key is only required when the "Type" is set to "Manual", and controls how much the pump pressure will decrease per second after the user stops interacting with it. Default value is 0.5 Percent Over 100 (so, a decrease of 50% per second). | No |
The following SimVars are available for this component:
The following key Events are also available:
Trigger.N
This parameter is used to define one or more triggers to be used in the fuel system. Triggers are used to listen for - and react to - specific conditions and events that will affect the way the fuel system operates. Triggers are defined as a hash map comprised of multiple key:value
pairs - separated by the #
symbol - and have the following structure:
Trigger.N = Name:<trigger_name> #Title:<trigger_title> #Target:<target_name> #Threshold:<value> #Index:<target_index> #DelayTrue:<seconds_value> #DelayFalse:<seconds_value> #Condition:<string> #EffectTrue:<effect_list> #EffectFalse:<effect_list> #iParam:<param>
Note that you may have more than one trigger, in which case you would increment the N
index, starting from 1. A basic example of a single trigger definition would be like this:
Trigger.1 = Condition:Autostart_Enabled #EffectTrue:OpenValve.LeftEngValve, OpenValve.RightEngValve, OpenValve.CrossFeedValve, StartPump.LeftTankPump, StartPump.RightTankPump
Key | Value | Description | Required |
---|---|---|---|
Name |
String | This is a name string that is used as an alias to identify the trigger. It will also be used as the reference index for SimVars, and note that the name is the only guaranteed reference to the component due to the fact that the Modular Aircraft Merging process may change the index. | Yes |
Title |
String (Localisable) |
The title of the trigger to be displayed in the UI, if applicable. | No |
Target |
String | The name of a component to target as part of the trigger condition. This key is only necessary when the given Condition requires it. | No |
Threshold |
Float | The threshold above/below which the trigger is activated. This key is only necessary when the given Condition requires it. | No |
Index |
Integer | A component Index to target as part of the trigger condition. This key is only necessary when the given Condition requires it. | No |
DelayTrue |
Float | This is the time - in seconds - that the condition state must remain TRUE before the EffectsTrue key gets triggered. Default value is 0. | No |
DelayFalse |
Float | This is the time - in seconds - that the condition state must remain FALSE before the EffectsFalse key gets triggered. Default value is 0. | No |
Condition |
String | The condition that the trigger is checking. See the table in the section on Trigger Conditions And Events below. | Yes |
EffectTrue |
List (event.name strings) |
The effect if the given condition resolves as TRUE. This is a comma separated list of possible condition events combined with the name of the fuel system component that they target. See the section on Trigger Conditions And Events for more information. | No |
EffectFalse |
List (event.name strings) |
The effect if the given condition resolves as FALSE. This is a comma separated list of possible condition events combined with the name of the fuel system component that they target. See the section on Trigger Conditions And Events for more information. | No |
The following SimVar is available for this component:
The following key Events are also available:
Trigger Conditions And Events
When creating triggers for the fuel system, the hash map has an entry for "Condition". This can be any one of the following strings:
Condition | Description |
---|---|
TankQuantityBelow |
Checks if the tank has a fuel quantity below the given Threshold (threshold in Gallons). Requires the Target key to be a tank name. |
TankQuantityAbove |
Checks if the tank has a fuel quantity above the given Threshold (threshold in Gallons). Requires the Target key to be a tank name. |
CGAboveLimit |
This condition can be used to watch the value of the SimVar CG PERCENT and then trigger once it goes above the limit set in the Threshold field (as a percentage). |
CGBelowLimit |
This condition can be used to watch the value of the SimVar CG PERCENT and then trigger once it goes below the limit set in the Threshold field (as a percentage). |
Autostart_Enabled |
Checks if autostart is enabled. |
Autoshutdown_Enabled |
Checks if autoshutdown is enabled. |
Manual |
This is a manual trigger event that can only be triggered by using a Key Event. |
TankImbalanceAbove |
Checks if there is a relative fuel imbalance between two tanks above the given Threshold (threshold in Gallons). Requires the Target key to hold two tank names, eg:
|
TankImbalanceBelow |
Checks if there is a relative fuel imbalance between two tanks below the given Threshold (threshold in Gallons). Requires the Target key to hold two tank names, eg:
|
TankAbsImbalanceAbove |
Checks if there is an absolute fuel imbalance between two tanks above the given Threshold (threshold in Gallons). Requires the Target key to hold two tank names, eg:
|
TankAbsImbalanceBelow |
Checks if there is an absolute fuel imbalance between two tanks below the given Threshold (threshold in Gallons). Requires the Target key to hold two tank names, eg:
|
JunctionOptionChanged |
Requires the Target key to be a junction name, and the Index key to be the Option in the junction to set. |
The result of the condition can be checked as either TRUE or FALSE, triggering an "event". These events are defined as a comma separated list in the EffectTrue and EffectFalse keys of the trigger hash map, where each entry in the list is comprised of an event and a target component, for example:
#EffectTrue:<event>.<target_name>, <event>.<target_name>, etc...
The available event types are:
Condition | Description |
---|---|
OpenValve |
Open the named valve. |
CloseValve |
Close the named valve. |
StartPump |
Start the named pump. |
StopPump |
Stop the named pump. |
SetJunction |
Set the named junction to a specific option. When using this event, it requires both a name and an option index, eg: SetJunction.FuelSelector.1 |
StartTrigger |
Flag the named trigger to start. |
StopTrigger |
Flag the named trigger to stop. NOTE: Only for manual triggers. |
Curve.N
The curve parameter is defined as a list of paired values, and the parameter is appended with a number that corresponds to its unique id (starting at 1). The exact number of paired values that are in the curve will depend on the use the curve is going to get, since curves are used by other parameters to store information. For example, you may have defined a fuel pump like this:
Pump.2 = Name:EngineDrivenPump #Pressure:6 #PressureCurve:1 #DestinationLine:EngineDrivenPumpToEngineJunction #Type:EngineDriven #Index:1
In this case, PressureCurve:1
references a fuel pressure curve table that would have been defined like this:
Curve.1 = 0:0, 0.2:0.5, 0.62:0.62, 0.88:0.63, 0.98:0.66, 1.0:1.0