Skip to content

Commit 29245e1

Browse files
committed
Adjustments to steam sander
1 parent 3d52d1d commit 29245e1

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

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

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ public enum SlipControlType
260260
public float TrackSanderSandConsumptionReverseM3pS = 0;
261261
public float SandWeightKgpM3 = 1600; // One cubic metre of sand weighs about 1.54-1.78 tonnes.
262262
public float TrackSanderSteamConsumptionForwardLbpS;
263-
public float TrackSanderSteamConsumptionReverseLbpS;
263+
public float TrackSanderSteamConsumptionReverseLbpS = 0;
264264

265265

266266
// Vacuum Braking parameters
@@ -1785,15 +1785,9 @@ public override void Initialize()
17851785

17861786
if (TrackSanderSteamConsumptionForwardLbpS == 0 && SandingSystemType == SandingSystemTypes.Steam)
17871787
{
1788-
TrackSanderSteamConsumptionForwardLbpS = 300f / 3600f; // Default value - 300lbs/hr
1788+
TrackSanderSteamConsumptionForwardLbpS = 300f / 3600f; // Default value - 300lbs/hr - this value is un confirmed at this stage.
17891789
}
17901790

1791-
if (TrackSanderSteamConsumptionReverseLbpS == 0 && SandingSystemType == SandingSystemTypes.Steam)
1792-
{
1793-
TrackSanderSteamConsumptionReverseLbpS = 300f / 3600f; // Default value - 300lbs/hr
1794-
}
1795-
1796-
17971791
base.Initialize();
17981792
if (DynamicBrakeBlendingEnabled) airPipeSystem = BrakeSystem as AirSinglePipe;
17991793

@@ -3271,15 +3265,35 @@ public void UpdateTrackSander(float elapsedClockSeconds)
32713265
// Calculate steam, air or gravity consumption for different sander modes
32723266
if (SandingSystemType == SandingSystemTypes.Steam)
32733267
{
3268+
float sandingSteamConsumptionLbpS = 0.0f;
3269+
float sandingSandConsumptionM3pS = 0.0f;
3270+
32743271
if (Direction == Direction.Reverse)
32753272
{
3276-
SandingSteamUsageLBpS = TrackSanderSteamConsumptionReverseLbpS;
3273+
sandingSteamConsumptionLbpS = TrackSanderSteamConsumptionReverseLbpS;
3274+
sandingSandConsumptionM3pS = TrackSanderSandConsumptionReverseM3pS;
32773275
}
32783276
else
32793277
{
3280-
SandingSteamUsageLBpS = TrackSanderSteamConsumptionForwardLbpS;
3278+
sandingSteamConsumptionLbpS = TrackSanderSteamConsumptionForwardLbpS;
3279+
sandingSandConsumptionM3pS = TrackSanderSandConsumptionForwardM3pS;
32813280
}
32823281

3282+
// Calculate steam consumption
3283+
SandingSteamUsageLBpS = (BoilerPressurePSI / MaxBoilerPressurePSI) * sandingSteamConsumptionLbpS * elapsedClockSeconds;
3284+
3285+
// Calculate sand consumption for sander
3286+
if (CurrentTrackSandBoxCapacityM3 > 0.0) // if sand still in sandbox then sanding is available
3287+
{
3288+
// Calculate consumption of sand, and drop in sand box level
3289+
CurrentTrackSanderSandConsumptionM3pS = (BoilerPressurePSI / MaxBoilerPressurePSI) * sandingSandConsumptionM3pS * elapsedClockSeconds;
3290+
CurrentTrackSandBoxCapacityM3 -= CurrentTrackSanderSandConsumptionM3pS;
3291+
CurrentTrackSandBoxCapacityM3 = MathHelper.Clamp(CurrentTrackSandBoxCapacityM3, 0.0f, MaxTrackSandBoxCapacityM3);
3292+
if (CurrentTrackSandBoxCapacityM3 <= 0.0)
3293+
{
3294+
Simulator.Confirmer.Message(ConfirmLevel.Warning, Simulator.Catalog.GetString("Sand supply has been exhausted"));
3295+
}
3296+
}
32833297
}
32843298
else // air consumption
32853299
{
@@ -3298,7 +3312,7 @@ public void UpdateTrackSander(float elapsedClockSeconds)
32983312
}
32993313

33003314
// Calculate air consumption and change in main air reservoir pressure
3301-
CurrentTrackSanderAirConsumptionM3pS = (MainResPressurePSI * MaxMainResPressurePSI) * pS.FrompM(sandingAirConsumptionM3pS) * elapsedClockSeconds;
3315+
CurrentTrackSanderAirConsumptionM3pS = (MainResPressurePSI / MaxMainResPressurePSI) * sandingAirConsumptionM3pS * elapsedClockSeconds;
33023316
float SanderPressureDiffPSI = CurrentTrackSanderAirConsumptionM3pS / Me3.ToFt3(MainResVolumeM3);
33033317
MainResPressurePSI -= SanderPressureDiffPSI;
33043318
MainResPressurePSI = MathHelper.Clamp(MainResPressurePSI, 0.001f, MaxMainResPressurePSI);
@@ -3307,7 +3321,7 @@ public void UpdateTrackSander(float elapsedClockSeconds)
33073321
if (CurrentTrackSandBoxCapacityM3 > 0.0) // if sand still in sandbox then sanding is available
33083322
{
33093323
// Calculate consumption of sand, and drop in sand box level
3310-
CurrentTrackSanderSandConsumptionM3pS = (MainResPressurePSI * MaxMainResPressurePSI) * pS.FrompH(sandingSandConsumptionM3pS) * elapsedClockSeconds;
3324+
CurrentTrackSanderSandConsumptionM3pS = (MainResPressurePSI / MaxMainResPressurePSI) * sandingSandConsumptionM3pS * elapsedClockSeconds;
33113325
CurrentTrackSandBoxCapacityM3 -= CurrentTrackSanderSandConsumptionM3pS;
33123326
CurrentTrackSandBoxCapacityM3 = MathHelper.Clamp(CurrentTrackSandBoxCapacityM3, 0.0f, MaxTrackSandBoxCapacityM3);
33133327
if (CurrentTrackSandBoxCapacityM3 <= 0.0)

0 commit comments

Comments
 (0)