Skip to content

Commit d73de81

Browse files
committed
Add correction for oil burning parameters
1 parent a4a44b5 commit d73de81

File tree

2 files changed

+31
-13
lines changed

2 files changed

+31
-13
lines changed

Source/Orts.Simulation/Simulation/RollingStocks/MSTSSteamLocomotive.cs

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ public class MSTSSteamLocomotive : MSTSLocomotive
313313

314314
float FuelFeedRateSmoothedKGpS = 0.0f; // Smoothed Fuel feedd Rate
315315
public float FuelBurnRateSmoothedKGpS; // Smoothed fuel burning rate
316-
float OilSpecificGravity = 0.9659f; // Assume a mid range of API for this value, say API = 15 @ 20 Cdeg.
316+
public float OilSpecificGravity = 0.9659f; // Assume a mid range of API for this value, say API = 15 @ 20 Cdeg.
317317
float WaterSpecificGravity = 1.0f; // Water @ 20 degC.
318318

319319
bool FuelOilSteamHeatingReqd = false;
@@ -410,7 +410,7 @@ public float TenderFuelMassKG // Decreased by firing and increased
410410
set { FuelController.CurrentValue = value / MaxTenderFuelMassKG; }
411411
}
412412

413-
float MaxTenderOilMassL;
413+
public float MaxTenderOilMassL;
414414
float DamperBurnEffect; // Effect of the Damper control Used in manual firing)
415415
float Injector1Fraction = 0.0f; // Fraction (0-1) of injector 1 flow from Fireman controller or AI
416416
float Injector2Fraction = 0.0f; // Fraction (0-1) of injector of injector 2 flow from Fireman controller or AI
@@ -7834,18 +7834,21 @@ public override string GetDebugStatus()
78347834
status.AppendFormat("{0}\t\t{1}\n", Simulator.Catalog.GetString("Locomotive Type:"),
78357835
SteamLocoType);
78367836

7837-
status.AppendFormat("{0}\t{1}\t{6}\t{2}\t{7}\t{3}\t{8}\t{4}\t{9}\t{5}\t{10}\n",
7837+
status.AppendFormat("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}\t{8}\t{9}\t{10}\t{11}\t{12}\n",
78387838
Simulator.Catalog.GetString("Input:"),
78397839
Simulator.Catalog.GetString("Evap"),
7840-
Simulator.Catalog.GetString("Grate"),
7841-
Simulator.Catalog.GetString("Boiler"),
7842-
Simulator.Catalog.GetString("SuperHr"),
7843-
Simulator.Catalog.GetString("FuelCal"),
78447840
FormatStrings.FormatArea(EvaporationAreaM2, IsMetric),
7845-
FormatStrings.FormatArea(GrateAreaM2, IsMetric),
7846-
FormatStrings.FormatVolume(Me3.FromFt3(BoilerVolumeFT3), IsMetric),
7841+
Simulator.Catalog.GetString("SuperHr"),
78477842
FormatStrings.FormatArea(SuperheatAreaM2, IsMetric),
7848-
FormatStrings.FormatEnergyDensityByMass(FuelCalorificKJpKG, IsMetric));
7843+
Simulator.Catalog.GetString("Boiler"),
7844+
FormatStrings.FormatVolume(Me3.FromFt3(BoilerVolumeFT3), IsMetric),
7845+
Simulator.Catalog.GetString("Grate"),
7846+
FormatStrings.FormatArea(GrateAreaM2, IsMetric),
7847+
Simulator.Catalog.GetString("FType"),
7848+
SteamLocomotiveFuelType.ToString(),
7849+
Simulator.Catalog.GetString("FuelCal"),
7850+
FormatStrings.FormatEnergyDensityByMass(FuelCalorificKJpKG, IsMetric)
7851+
);
78497852

78507853
status.AppendFormat("{0}\t{1}\t{2:N2}\t{3}\t{4:N3}\n",
78517854
Simulator.Catalog.GetString("Adj:"),

Source/Orts.Simulation/Simulation/RollingStocks/MSTSWagon.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
using System.Diagnostics;
5353
using System.IO;
5454
using System.Linq;
55+
using static Orts.Simulation.RollingStocks.MSTSLocomotive;
5556
using Event = Orts.Common.Event;
5657

5758
namespace Orts.Simulation.RollingStocks
@@ -149,6 +150,7 @@ public enum WindowState
149150

150151
bool TenderWeightInitialize = true;
151152
float TenderWagonMaxFuelMassKG;
153+
float TenderWagonMaxOilMassL;
152154
float TenderWagonMaxWaterMassKG;
153155

154156
// Wind Impacts
@@ -1203,6 +1205,7 @@ public virtual void Parse(string lowercasetoken, STFReader stf)
12031205
case "wagon(ortsauxtenderwatermass": AuxTenderWaterMassKG = stf.ReadFloatBlock(STFReader.UNITS.Mass, null); break;
12041206
case "wagon(ortstenderwagonwoodmass":
12051207
case "wagon(ortstenderwagoncoalmass": TenderWagonMaxFuelMassKG = stf.ReadFloatBlock(STFReader.UNITS.Mass, null); break;
1208+
case "wagon(ortsmaxtenderfueloilvolume": TenderWagonMaxOilVolumeL = stf.ReadFloatBlock(STFReader.UNITS.Volume, null); break;
12061209
case "wagon(ortstenderwagonwatermass": TenderWagonMaxWaterMassKG = stf.ReadFloatBlock(STFReader.UNITS.Mass, null); break;
12071210
case "wagon(ortsheatingwindowderatingfactor": WindowDeratingFactor = stf.ReadFloatBlock(STFReader.UNITS.None, null); break;
12081211
case "wagon(ortsheatingcompartmenttemperatureset": DesiredCompartmentTempSetpointC = stf.ReadFloatBlock(STFReader.UNITS.Temperature, null); break;
@@ -1600,6 +1603,7 @@ public virtual void Copy(MSTSWagon copy)
16001603
WheelFlangeLengthM = copy.WheelFlangeLengthM;
16011604
AuxTenderWaterMassKG = copy.AuxTenderWaterMassKG;
16021605
TenderWagonMaxFuelMassKG = copy.TenderWagonMaxFuelMassKG;
1606+
TenderWagonMaxOilVolumeL = copy.TenderWagonMaxOilMassL;
16031607
TenderWagonMaxWaterMassKG = copy.TenderWagonMaxWaterMassKG;
16041608
InitWagonNumAxles = copy.InitWagonNumAxles;
16051609
WagonNumAxles = copy.WagonNumAxles;
@@ -1965,7 +1969,7 @@ public override void Update(float elapsedClockSeconds)
19651969
ConfirmSteamLocomotiveTender(); // Confirms that a tender is connected to the steam locomotive
19661970

19671971
// Adjusts water and coal mass based upon values assigned to the tender found in the WAG file rather then those defined in ENG file.
1968-
if (WagonType == WagonTypes.Tender && TenderWeightInitialize && TenderWagonMaxFuelMassKG != 0 && TenderWagonMaxWaterMassKG != 0)
1972+
if (WagonType == WagonTypes.Tender && TenderWeightInitialize && (TenderWagonMaxFuelMassKG != 0 || TenderWagonMaxOilMassL != 0) && TenderWagonMaxWaterMassKG != 0)
19691973
{
19701974

19711975
// Find the associated steam locomotive for this tender
@@ -1986,10 +1990,18 @@ public override void Update(float elapsedClockSeconds)
19861990
// amount of water defined in the ENG file, and adding the water defined in the WAG file.
19871991
float TempMaxCombinedWater = TendersSteamLocomotive.MaxTotalCombinedWaterVolumeUKG;
19881992
TendersSteamLocomotive.MaxTotalCombinedWaterVolumeUKG = (TempMaxCombinedWater - (Kg.ToLb(TendersSteamLocomotive.MaxLocoTenderWaterMassKG) / WaterLBpUKG)) + (Kg.ToLb(TenderWagonMaxWaterMassKG) / WaterLBpUKG);
1989-
1990-
TendersSteamLocomotive.MaxTenderFuelMassKG = TenderWagonMaxFuelMassKG;
1993+
19911994
TendersSteamLocomotive.MaxLocoTenderWaterMassKG = TenderWagonMaxWaterMassKG;
19921995

1996+
if (TendersSteamLocomotive.SteamLocomotiveFuelType == SteamLocomotiveFuelTypes.Oil)
1997+
{
1998+
TendersSteamLocomotive.MaxTenderFuelMassKG = TendersSteamLocomotive.MaxTenderOilMassL * TendersSteamLocomotive.OilSpecificGravity;
1999+
}
2000+
else
2001+
{
2002+
TendersSteamLocomotive.MaxTenderFuelMassKG = TenderWagonMaxFuelMassKG;
2003+
}
2004+
19932005
if (Simulator.Settings.VerboseConfigurationMessages)
19942006
{
19952007
Trace.TraceInformation("Fuel and Water Masses adjusted to Tender Values Specified in WAG File - Coal mass {0} kg, Water Mass {1}", FormatStrings.FormatMass(TendersSteamLocomotive.MaxTenderFuelMassKG, IsMetric), FormatStrings.FormatFuelVolume(L.FromGUK(TendersSteamLocomotive.MaxTotalCombinedWaterVolumeUKG), IsMetric, IsUK));
@@ -3784,6 +3796,9 @@ public MSTSCoupling Coupler
37843796
return Couplers[0]; // defaults to the rear coupler (typically the first read)
37853797
}
37863798
}
3799+
3800+
public float TenderWagonMaxOilVolumeL { get; private set; }
3801+
37873802
public override float GetCouplerZeroLengthM()
37883803
{
37893804
if (IsPlayerTrain && Simulator.UseAdvancedAdhesion && !Simulator.Settings.SimpleControlPhysics && IsAdvancedCoupler)

0 commit comments

Comments
 (0)