Skip to content

Commit abbd3b1

Browse files
committed
Correct throttle operation
1 parent 1b09e19 commit abbd3b1

File tree

2 files changed

+50
-17
lines changed

2 files changed

+50
-17
lines changed

Source/Orts.Simulation/Simulation/RollingStocks/MSTSLocomotive.cs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ public enum SoundState
147147
public bool OnLineCabRadio;
148148
public string OnLineCabRadioURL;
149149

150-
float ZeroSpeedAdhesionBase;
150+
public float ZeroSpeedAdhesionBase;
151151

152152
public float FilteredBrakePipeFlowM3pS;
153153
public IIRFilter AFMFilter;
@@ -2798,15 +2798,6 @@ public virtual void AdvancedAdhesion(float elapsedClockSeconds)
27982798
WheelSlip = LocomotiveAxles.IsWheelSlip;
27992799
WheelSlipWarning = LocomotiveAxles.IsWheelSlipWarning;
28002800
}
2801-
2802-
// This enables steam locomotives to have different speeds for driven and non-driven wheels.
2803-
if (EngineType == EngineTypes.Steam && SteamEngineType != MSTSSteamLocomotive.SteamEngineTypes.Geared)
2804-
{
2805-
WheelSpeedSlipMpS = (float)LocomotiveAxles[0].AxleSpeedMpS;
2806-
WheelSpeedMpS = SpeedMpS;
2807-
}
2808-
else WheelSpeedMpS = (float)LocomotiveAxles[0].AxleSpeedMpS;
2809-
28102801
}
28112802

28122803
public void SimpleAdhesion()

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

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2326,16 +2326,21 @@ public override void Update(float elapsedClockSeconds)
23262326

23272327
// Trace.TraceInformation("Run Mode - Timer {0} GearPeriod {1}", BoosterGearEngageTimeS, BoosterGearEngageTimePeriodS);
23282328

2329-
if (BoosterGearEngageTimeS > BoosterGearEngageTimePeriodS)
2329+
if (BoosterGearEngageTimeS > BoosterGearEngageTimePeriodS) // Booster gears engaged
23302330
{
23312331
enginethrottle = throttle;
23322332
BoosterCylinderSteamExhaustOn = true;
2333-
BoosterCylinderCocksOn = true;
2333+
BoosterCylinderCocksOn = false;
23342334
BoosterGearsEngaged = true;
23352335
BoosterIdleHeatingTimerReset = false;
23362336
BoosterIdleHeatingTimerS = 0;
23372337
// Trace.TraceInformation("Run Mode - " );
23382338
}
2339+
else
2340+
{
2341+
BoosterCylinderSteamExhaustOn = false;
2342+
BoosterCylinderCocksOn = true;
2343+
}
23392344
BoosterGearEngageTimeS += elapsedClockSeconds;
23402345
}
23412346
else if (!SteamBoosterAirOpen || !SteamBoosterLatchedLocked) // Turn Booster off completely
@@ -5797,6 +5802,7 @@ private void UpdateSteamTractiveForce(float elapsedClockSeconds, float locomotiv
57975802
SteamEngines[numberofengine].TractiveForceN = N.FromLbf((SteamEngines[numberofengine].MaxIndicatedHorsePowerHP * 375.0f) / pS.TopH(Me.ToMi(SpeedMpS)));
57985803
SteamEngines[numberofengine].IndicatedHorsePowerHP = SteamEngines[numberofengine].MaxIndicatedHorsePowerHP; // Set IHP to maximum value
57995804
IsCritTELimit = true; // Flag if limiting TE
5805+
58005806
}
58015807
else
58025808
{
@@ -5810,7 +5816,11 @@ private void UpdateSteamTractiveForce(float elapsedClockSeconds, float locomotiv
58105816
protected override void UpdateTractiveForce(float elapsedClockSeconds, float locomotivethrottle, float AbsSpeedMpS, float AbsWheelSpeedMpS)
58115817
{
58125818
TractiveForceN = 0; // reset tractiveforceN in preparation to calculating a new value
5813-
MotiveForceN = 0;
5819+
if (!Simulator.UseAdvancedAdhesion && Simulator.Settings.SimpleControlPhysics)
5820+
{
5821+
// Simple adhesion
5822+
MotiveForceN = 0;
5823+
}
58145824
IndicatedHorsePowerHP = 0;
58155825
PistonSpeedFtpMin = 0;
58165826
MaxPowerW = 0;
@@ -5825,9 +5835,9 @@ protected override void UpdateTractiveForce(float elapsedClockSeconds, float loc
58255835

58265836
if (Simulator.UseAdvancedAdhesion && !Simulator.Settings.SimpleControlPhysics)
58275837
{
5828-
SteamEngines[i].AttachedAxle.DriveForceN = SteamEngines[i].TractiveForceN / SteamEngines[i].AttachedAxle.NumberWheelAxles;
5838+
SteamEngines[i].AttachedAxle.DriveForceN = SteamEngines[i].TractiveForceN;
58295839
UpdateAxleDriveForce();
5830-
MotiveForceN += SteamEngines[i].AttachedAxle.CompensatedAxleForceN;
5840+
// MotiveForceN += SteamEngines[i].AttachedAxle.CompensatedAxleForceN;
58315841
}
58325842
else // Simple adhesion
58335843
{
@@ -5903,7 +5913,7 @@ protected override void UpdateAxleDriveForce()
59035913

59045914

59055915
public override void AdvancedAdhesion(float elapsedClockSeconds)
5906-
{
5916+
{
59075917

59085918
foreach (var axle in LocomotiveAxles)
59095919
{
@@ -5969,9 +5979,41 @@ public override void AdvancedAdhesion(float elapsedClockSeconds)
59695979
axle.FrictionN = N.FromLbf(3.8f * Me.ToIn(linkedEngine.CylindersDiameterM) * Me.ToIn(linkedEngine.CylindersDiameterM) * Me.ToIn(linkedEngine.CylindersStrokeM) / (Me.ToIn(axle.WheelRadiusM * 2.0f)));
59705980

59715981
}
5982+
5983+
axle.BrakeRetardForceN = BrakeRetardForceN / LocomotiveAxles.Count;
5984+
axle.TrainSpeedMpS = SpeedMpS; //Set the train speed of the axle mod
5985+
axle.WheelRadiusM = linkedEngine.AttachedAxle.WheelRadiusM;
5986+
axle.WheelDistanceGaugeM = TrackGaugeM;
5987+
axle.CurrentCurveRadiusM = CurrentCurveRadiusM;
5988+
axle.BogieRigidWheelBaseM = RigidWheelBaseM;
5989+
axle.CurtiusKnifflerZeroSpeed = ZeroSpeedAdhesionBase;
5990+
5991+
}
5992+
5993+
LocomotiveAxles.Update(elapsedClockSeconds);
5994+
5995+
MotiveForceN = LocomotiveAxles.CompensatedForceN;
5996+
5997+
if (LocoNumDrvAxles <= 0)
5998+
{
5999+
WheelSpeedMpS = AbsSpeedMpS;
6000+
return;
6001+
}
6002+
6003+
if (elapsedClockSeconds > 0)
6004+
{
6005+
WheelSlip = LocomotiveAxles.IsWheelSlip;
6006+
WheelSlipWarning = LocomotiveAxles.IsWheelSlipWarning;
6007+
}
6008+
6009+
// This enables steam locomotives to have different speeds for driven and non-driven wheels.
6010+
if (SteamEngineType != MSTSSteamLocomotive.SteamEngineTypes.Geared)
6011+
{
6012+
WheelSpeedSlipMpS = (float)LocomotiveAxles[0].AxleSpeedMpS;
6013+
WheelSpeedMpS = SpeedMpS;
59726014
}
6015+
else WheelSpeedMpS = (float)LocomotiveAxles[0].AxleSpeedMpS;
59736016

5974-
base.AdvancedAdhesion(elapsedClockSeconds);
59756017
}
59766018

59776019
private void UpdateAuxiliaries(float elapsedClockSeconds, float absSpeedMpS)

0 commit comments

Comments
 (0)