@@ -259,16 +259,16 @@ public enum SlipControlType
259259
260260 // parameters for Track Sander based upon compressor air and abrasive table for 1/2" sand blasting nozzle @ 50psi
261261 public float MaxTrackSandBoxCapacityM3 ; // Capacity of sandbox
262- public float TrackSanderAirComsumptionForwardM3pS ;
263- public float TrackSanderAirComsumptionReverseM3pS = 0 ;
264- public float TrackSanderSandConsumptionForwardM3pS ;
262+ public float MaxTrackSanderAirComsumptionForwardM3pS ;
263+ public float MaxTrackSanderAirComsumptionReverseM3pS = 0 ;
264+ public float MaxTrackSanderSandConsumptionForwardM3pS ;
265265 public float CurrentTrackSanderAirConsumptionM3pS ;
266266 public float CurrentTrackSanderSandConsumptionM3pS ;
267267 public float CurrentTrackSandBoxCapacityM3 ;
268- public float TrackSanderSandConsumptionReverseM3pS = 0 ;
268+ public float MaxTrackSanderSandConsumptionReverseM3pS = 0 ;
269269 public float SandWeightKgpM3 = 1600 ; // One cubic metre of sand weighs about 1.54-1.78 tonnes.
270- public float TrackSanderSteamConsumptionForwardLbpS ;
271- public float TrackSanderSteamConsumptionReverseLbpS = 0 ;
270+ public float MaxTrackSanderSteamConsumptionForwardLbpS ;
271+ public float MaxTrackSanderSteamConsumptionReverseLbpS = 0 ;
272272
273273
274274 // Vacuum Braking parameters
@@ -1177,20 +1177,20 @@ public override void Parse(string lowercasetoken, STFReader stf)
11771177 MaxTrackSandBoxCapacityM3 = Me3 . FromFt3 ( MaxTrackSandBoxCapacityM3 ) ;
11781178 break ;
11791179 case "engine(ortsmaxtracksandersandconsumptionforward" :
1180- Me3 . FromFt3 ( TrackSanderSandConsumptionForwardM3pS = stf . ReadFloatBlock ( STFReader . UNITS . VolumeDefaultFT3 , null ) ) ;
1181- TrackSanderSandConsumptionForwardM3pS = Me3 . FromFt3 ( TrackSanderSandConsumptionForwardM3pS ) ;
1180+ Me3 . FromFt3 ( MaxTrackSanderSandConsumptionForwardM3pS = stf . ReadFloatBlock ( STFReader . UNITS . VolumeDefaultFT3 , null ) ) ;
1181+ MaxTrackSanderSandConsumptionForwardM3pS = Me3 . FromFt3 ( MaxTrackSanderSandConsumptionForwardM3pS ) ;
11821182 break ;
11831183 case "engine(ortsmaxtracksandersandconsumptionreverse" :
1184- Me3 . FromFt3 ( TrackSanderSandConsumptionReverseM3pS = stf . ReadFloatBlock ( STFReader . UNITS . VolumeDefaultFT3 , null ) ) ;
1185- TrackSanderSandConsumptionReverseM3pS = Me3 . FromFt3 ( TrackSanderSandConsumptionReverseM3pS ) ;
1184+ Me3 . FromFt3 ( MaxTrackSanderSandConsumptionReverseM3pS = stf . ReadFloatBlock ( STFReader . UNITS . VolumeDefaultFT3 , null ) ) ;
1185+ MaxTrackSanderSandConsumptionReverseM3pS = Me3 . FromFt3 ( MaxTrackSanderSandConsumptionReverseM3pS ) ;
11861186 break ;
11871187 case "engine(ortsmaxtracksanderairconsumptionforward" :
1188- Me3 . FromFt3 ( TrackSanderAirComsumptionForwardM3pS = stf . ReadFloatBlock ( STFReader . UNITS . VolumeDefaultFT3 , null ) ) ;
1189- TrackSanderAirComsumptionForwardM3pS = Me3 . FromFt3 ( TrackSanderAirComsumptionForwardM3pS ) ;
1188+ Me3 . FromFt3 ( MaxTrackSanderAirComsumptionForwardM3pS = stf . ReadFloatBlock ( STFReader . UNITS . VolumeDefaultFT3 , null ) ) ;
1189+ MaxTrackSanderAirComsumptionForwardM3pS = Me3 . FromFt3 ( MaxTrackSanderAirComsumptionForwardM3pS ) ;
11901190 break ;
11911191 case "engine(ortsmaxtracksanderairconsumptionreverse" :
1192- Me3 . FromFt3 ( TrackSanderAirComsumptionReverseM3pS = stf . ReadFloatBlock ( STFReader . UNITS . VolumeDefaultFT3 , null ) ) ;
1193- TrackSanderAirComsumptionReverseM3pS = Me3 . FromFt3 ( TrackSanderAirComsumptionReverseM3pS ) ;
1192+ Me3 . FromFt3 ( MaxTrackSanderAirComsumptionReverseM3pS = stf . ReadFloatBlock ( STFReader . UNITS . VolumeDefaultFT3 , null ) ) ;
1193+ MaxTrackSanderAirComsumptionReverseM3pS = Me3 . FromFt3 ( MaxTrackSanderAirComsumptionReverseM3pS ) ;
11941194 break ;
11951195 case "engine(ortscruisecontrol" : SetUpCruiseControl ( stf ) ; break ;
11961196 case "engine(ortsmultipositioncontroller" : SetUpMPC ( stf ) ; break ;
@@ -1248,10 +1248,10 @@ public override void Copy(MSTSWagon copy)
12481248 SanderSpeedEffectUpToMpS = locoCopy . SanderSpeedEffectUpToMpS ;
12491249 SanderSpeedOfMpS = locoCopy . SanderSpeedOfMpS ;
12501250 MaxTrackSandBoxCapacityM3 = locoCopy . MaxTrackSandBoxCapacityM3 ;
1251- TrackSanderSandConsumptionForwardM3pS = locoCopy . TrackSanderSandConsumptionForwardM3pS ;
1252- TrackSanderSandConsumptionReverseM3pS = locoCopy . TrackSanderSandConsumptionReverseM3pS ;
1253- TrackSanderAirComsumptionForwardM3pS = locoCopy . TrackSanderAirComsumptionForwardM3pS ;
1254- TrackSanderAirComsumptionReverseM3pS = locoCopy . TrackSanderAirComsumptionReverseM3pS ;
1251+ MaxTrackSanderSandConsumptionForwardM3pS = locoCopy . MaxTrackSanderSandConsumptionForwardM3pS ;
1252+ MaxTrackSanderSandConsumptionReverseM3pS = locoCopy . MaxTrackSanderSandConsumptionReverseM3pS ;
1253+ MaxTrackSanderAirComsumptionForwardM3pS = locoCopy . MaxTrackSanderAirComsumptionForwardM3pS ;
1254+ MaxTrackSanderAirComsumptionReverseM3pS = locoCopy . MaxTrackSanderAirComsumptionReverseM3pS ;
12551255 PowerOnDelayS = locoCopy . PowerOnDelayS ;
12561256 DoesHornTriggerBell = locoCopy . DoesHornTriggerBell ;
12571257 MaxSteamHeatPressurePSI = locoCopy . MaxSteamHeatPressurePSI ;
@@ -1360,7 +1360,6 @@ public override void Save(BinaryWriter outf)
13601360 outf . Write ( PowerReduction ) ;
13611361 outf . Write ( ScoopIsBroken ) ;
13621362 outf . Write ( IsWaterScoopDown ) ;
1363- outf . Write ( CurrentTrackSandBoxCapacityM3 ) ;
13641363 outf . Write ( SaveAdhesionFilter ) ;
13651364 outf . Write ( GenericItem1 ) ;
13661365 outf . Write ( GenericItem2 ) ;
@@ -1370,6 +1369,10 @@ public override void Save(BinaryWriter outf)
13701369 outf . Write ( previousChangedGearBoxNotch ) ;
13711370 outf . Write ( DynamicBrake ) ;
13721371 outf . Write ( DynamicBrakeIntervention ) ;
1372+ outf . Write ( CurrentTrackSandBoxCapacityM3 ) ;
1373+ outf . Write ( CurrentTrackSanderSandConsumptionM3pS ) ;
1374+ outf . Write ( CurrentTrackSanderAirConsumptionM3pS ) ;
1375+
13731376
13741377 base . Save ( outf ) ;
13751378
@@ -1412,7 +1415,6 @@ public override void Restore(BinaryReader inf)
14121415 PowerReduction = inf . ReadSingle ( ) ;
14131416 ScoopIsBroken = inf . ReadBoolean ( ) ;
14141417 IsWaterScoopDown = inf . ReadBoolean ( ) ;
1415- CurrentTrackSandBoxCapacityM3 = inf . ReadSingle ( ) ;
14161418
14171419 SaveAdhesionFilter = inf . ReadSingle ( ) ;
14181420
@@ -1427,6 +1429,9 @@ public override void Restore(BinaryReader inf)
14271429
14281430 DynamicBrake = inf . ReadBoolean ( ) ;
14291431 DynamicBrakeIntervention = inf . ReadSingle ( ) ;
1432+ CurrentTrackSandBoxCapacityM3 = inf . ReadSingle ( ) ;
1433+ CurrentTrackSanderSandConsumptionM3pS = inf . ReadSingle ( ) ;
1434+ CurrentTrackSanderAirConsumptionM3pS = inf . ReadSingle ( ) ;
14301435
14311436 base . Restore ( inf ) ;
14321437
@@ -1802,19 +1807,19 @@ public override void Initialize()
18021807 MaxTrackSandBoxCapacityM3 = Me3 . FromFt3 ( 40.0f ) ; // Capacity of sandbox - assume 40.0 cu ft
18031808 }
18041809
1805- if ( TrackSanderAirComsumptionForwardM3pS == 0 )
1810+ if ( MaxTrackSanderAirComsumptionForwardM3pS == 0 && SandingSystemType == SandingSystemTypes . Air )
18061811 {
1807- TrackSanderAirComsumptionForwardM3pS = Me3 . FromFt3 ( 56.0f ) / 60.0f ; // Default value - cubic feet per min (CFM) 28 ft3/m x 2 sanders @ 140 psi - convert to /sec values
1812+ MaxTrackSanderAirComsumptionForwardM3pS = Me3 . FromFt3 ( 56.0f ) / 60.0f ; // Default value - cubic feet per min (CFM) 28 ft3/m x 2 sanders @ 140 psi - convert to /sec values
18081813 }
18091814
1810- if ( TrackSanderSandConsumptionForwardM3pS == 0 )
1815+ if ( MaxTrackSanderSandConsumptionForwardM3pS == 0 )
18111816 {
1812- TrackSanderSandConsumptionForwardM3pS = Me3 . FromFt3 ( 3.4f ) / 3600.0f ; // Default value - 1.7 ft3/h x 2 sanders @ 140 psi - convert to /sec values
1817+ MaxTrackSanderSandConsumptionForwardM3pS = Me3 . FromFt3 ( 3.4f ) / 3600.0f ; // Default value - 1.7 ft3/h x 2 sanders @ 140 psi - convert to /sec values
18131818 }
18141819
1815- if ( TrackSanderSteamConsumptionForwardLbpS == 0 && SandingSystemType == SandingSystemTypes . Steam )
1820+ if ( MaxTrackSanderSteamConsumptionForwardLbpS == 0 && SandingSystemType == SandingSystemTypes . Steam )
18161821 {
1817- TrackSanderSteamConsumptionForwardLbpS = 300f / 3600f ; // Default value - 300lbs/hr - this value is un confirmed at this stage.
1822+ MaxTrackSanderSteamConsumptionForwardLbpS = 300f / 3600f ; // Default value - 300lbs/hr - this value is un confirmed at this stage.
18181823 }
18191824
18201825 base . Initialize ( ) ;
@@ -3325,13 +3330,13 @@ public void UpdateTrackSander(float elapsedClockSeconds)
33253330
33263331 if ( Direction == Direction . Reverse )
33273332 {
3328- sandingSteamConsumptionLbpS = TrackSanderSteamConsumptionReverseLbpS ;
3329- sandingSandConsumptionM3pS = TrackSanderSandConsumptionReverseM3pS ;
3333+ sandingSteamConsumptionLbpS = MaxTrackSanderSteamConsumptionReverseLbpS ;
3334+ sandingSandConsumptionM3pS = MaxTrackSanderSandConsumptionReverseM3pS ;
33303335 }
33313336 else
33323337 {
3333- sandingSteamConsumptionLbpS = TrackSanderSteamConsumptionForwardLbpS ;
3334- sandingSandConsumptionM3pS = TrackSanderSandConsumptionForwardM3pS ;
3338+ sandingSteamConsumptionLbpS = MaxTrackSanderSteamConsumptionForwardLbpS ;
3339+ sandingSandConsumptionM3pS = MaxTrackSanderSandConsumptionForwardM3pS ;
33353340 }
33363341
33373342 // Calculate steam consumption
@@ -3357,20 +3362,20 @@ public void UpdateTrackSander(float elapsedClockSeconds)
33573362
33583363 if ( Direction == Direction . Reverse )
33593364 {
3360- sandingAirConsumptionM3pS = TrackSanderAirComsumptionReverseM3pS ;
3361- sandingSandConsumptionM3pS = TrackSanderSandConsumptionReverseM3pS ;
3365+ sandingAirConsumptionM3pS = MaxTrackSanderAirComsumptionReverseM3pS ;
3366+ sandingSandConsumptionM3pS = MaxTrackSanderSandConsumptionReverseM3pS ;
33623367 }
33633368 else
33643369 {
3365- sandingAirConsumptionM3pS = TrackSanderAirComsumptionForwardM3pS ;
3366- sandingSandConsumptionM3pS = TrackSanderSandConsumptionForwardM3pS ;
3367- }
3370+ sandingAirConsumptionM3pS = MaxTrackSanderAirComsumptionForwardM3pS ;
3371+ sandingSandConsumptionM3pS = MaxTrackSanderSandConsumptionForwardM3pS ;
3372+ }
33683373
3369- // Calculate air consumption and change in main air reservoir pressure
3374+ // Calculate air consumption and change in main air reservoir pressure
33703375 CurrentTrackSanderAirConsumptionM3pS = ( MainResPressurePSI / MaxMainResPressurePSI ) * sandingAirConsumptionM3pS * elapsedClockSeconds ;
33713376 float SanderPressureDiffPSI = CurrentTrackSanderAirConsumptionM3pS / Me3 . ToFt3 ( MainResVolumeM3 ) ;
3372- MainResPressurePSI -= SanderPressureDiffPSI ;
3373- MainResPressurePSI = MathHelper . Clamp ( MainResPressurePSI , 0.001f , MaxMainResPressurePSI ) ;
3377+ MainResPressurePSI -= SanderPressureDiffPSI ;
3378+ MainResPressurePSI = MathHelper . Clamp ( MainResPressurePSI , 0.001f , MaxMainResPressurePSI ) ;
33743379
33753380 // Calculate sand consumption for sander
33763381 if ( CurrentTrackSandBoxCapacityM3 > 0.0 ) // if sand still in sandbox then sanding is available
@@ -3386,7 +3391,12 @@ public void UpdateTrackSander(float elapsedClockSeconds)
33863391 }
33873392 }
33883393 }
3389-
3394+ else // reset to zero if sander is off
3395+ {
3396+ CurrentTrackSanderSandConsumptionM3pS = 0 ;
3397+ CurrentTrackSanderAirConsumptionM3pS = 0 ;
3398+ SandingSteamUsageLBpS = 0 ;
3399+ }
33903400 }
33913401
33923402 public override bool GetSanderOn ( )
0 commit comments