Skip to content

Commit 9ef7e1c

Browse files
committed
Allow main resevoir pipe to be set differently to main reservoir
1 parent ee6ca68 commit 9ef7e1c

File tree

4 files changed

+43
-4
lines changed

4 files changed

+43
-4
lines changed

Source/Orts.Formats.Msts/CabViewFile.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public enum CABViewControlTypes
7272
NONE,
7373
SPEEDOMETER,
7474
MAIN_RES,
75+
MAIN_RES_PIPE,
7576
EQ_RES,
7677
BRAKE_CYL,
7778
BRAKE_PIPE,

Source/Orts.Simulation/Simulation/Physics/Train.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3801,7 +3801,7 @@ public void UnconditionalInitializeBrakes()
38013801
if (MUDynamicBrakePercent == 0)
38023802
MUDynamicBrakePercent = -1;
38033803
}
3804-
BrakeLine2PressurePSI = maxPressurePSI;
3804+
BrakeLine2PressurePSI = lead.MaximumMainReservoirPipePressurePSI;
38053805
ConnectBrakeHoses();
38063806
}
38073807
else

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ public enum SoundState
131131
public float MaxSpeedMpS = 1e3f;
132132
public float UnloadingSpeedMpS;
133133
public float MainResPressurePSI = 130;
134+
public float MaximumMainReservoirPipePressurePSI;
134135
public bool CompressorIsOn;
135136
public float AverageForceN;
136137
public float PowerOnDelayS;
@@ -834,6 +835,7 @@ public override void Parse(string lowercasetoken, STFReader stf)
834835
case "engine(enginecontrollers(combined_control": ParseCombData(lowercasetoken, stf); break;
835836
case "engine(airbrakesmainresvolume": MainResVolumeM3 = Me3.FromFt3(stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null)); break;
836837
case "engine(airbrakesmainmaxairpressure": MainResPressurePSI = MaxMainResPressurePSI = stf.ReadFloatBlock(STFReader.UNITS.PressureDefaultPSI, null); break;
838+
case "engine(airbrakemaxmainrespipepressure": MaximumMainReservoirPipePressurePSI = stf.ReadFloatBlock(STFReader.UNITS.PressureDefaultPSI, null); break;
837839
case "engine(airbrakescompressorrestartpressure": CompressorRestartPressurePSI = stf.ReadFloatBlock(STFReader.UNITS.PressureDefaultPSI, null); break;
838840
case "engine(airbrakesaircompressorpowerrating": CompressorChargingRateM3pS = Me3.FromFt3(stf.ReadFloatBlock(STFReader.UNITS.VolumeDefaultFT3, null)); break;
839841
case "engine(trainpipeleakrate": TrainBrakePipeLeakPSIorInHgpS = stf.ReadFloatBlock(STFReader.UNITS.PressureRateDefaultPSIpS, null); break;
@@ -1018,7 +1020,8 @@ public override void Copy(MSTSWagon copy)
10181020
CompressorRestartPressurePSI = locoCopy.CompressorRestartPressurePSI;
10191021
TrainBrakePipeLeakPSIorInHgpS = locoCopy.TrainBrakePipeLeakPSIorInHgpS;
10201022
MaxMainResPressurePSI = locoCopy.MaxMainResPressurePSI;
1021-
MainResPressurePSI = MaxMainResPressurePSI;
1023+
MainResPressurePSI = locoCopy.MaxMainResPressurePSI;
1024+
MaximumMainReservoirPipePressurePSI = locoCopy.MaximumMainReservoirPipePressurePSI;
10221025
MainResVolumeM3 = locoCopy.MainResVolumeM3;
10231026
MainResChargingRatePSIpS = locoCopy.MainResChargingRatePSIpS;
10241027
BrakePipeDischargeTimeFactor = locoCopy.BrakePipeDischargeTimeFactor;
@@ -1382,6 +1385,11 @@ public override void Initialize()
13821385
}
13831386
}
13841387

1388+
if (MaximumMainReservoirPipePressurePSI == 0)
1389+
{
1390+
MaximumMainReservoirPipePressurePSI = MaxMainResPressurePSI;
1391+
}
1392+
13851393
// Check TrainBrakesControllerMaxSystemPressure parameter for "correct" value
13861394
// This is only done for vacuum brakes as the UoM can be confusing - it defaults to psi due to way parameter is read, and if units are entered then a InHG value can be incorrectly converted.
13871395
if ((BrakeSystem is VacuumSinglePipe))
@@ -4434,6 +4442,11 @@ public virtual float GetDataOf(CabViewControl cvc)
44344442
data = ConvertFromPSI(cvc, MainResPressurePSI);
44354443
break;
44364444
}
4445+
case CABViewControlTypes.MAIN_RES_PIPE:
4446+
{
4447+
data = ConvertFromPSI(cvc, this.BrakeSystem.BrakeLine2PressurePSI);
4448+
break;
4449+
}
44374450
case CABViewControlTypes.BRAKE_PIPE:
44384451
{
44394452
data = ConvertFromPSI(cvc, this.BrakeSystem.BrakeLine1PressurePSI);

Source/Orts.Simulation/Simulation/RollingStocks/SubSystems/Brakes/MSTS/AirSinglePipe.cs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,8 @@ public override void Update(float elapsedClockSeconds)
452452
BrakeLine1PressurePSI += dp * AuxBrakeLineVolumeRatio;
453453
}
454454
}
455+
456+
// Charge Auxiliary reservoir for MRP
455457
if (TwoPipes
456458
&& !NoMRPAuxResCharging
457459
&& AuxResPressurePSI < BrakeLine2PressurePSI
@@ -796,7 +798,9 @@ protected static void PropagateBrakeLinePressures(float elapsedClockSeconds, Tra
796798
int last = -1;
797799
train.FindLeadLocomotives(ref first, ref last);
798800
float sumpv = 0;
801+
float summainrespv = 0;
799802
float sumv = 0;
803+
float summainresv = 0;
800804
int continuousFromInclusive = 0;
801805
int continuousToExclusive = train.Cars.Count;
802806
for (int i = 0; i < train.Cars.Count; i++)
@@ -823,11 +827,18 @@ protected static void PropagateBrakeLinePressures(float elapsedClockSeconds, Tra
823827
{
824828
sumv += brakeSystem.BrakePipeVolumeM3;
825829
sumpv += brakeSystem.BrakePipeVolumeM3 * brakeSystem.BrakeLine2PressurePSI;
830+
831+
summainresv += brakeSystem.BrakePipeVolumeM3;
832+
summainrespv += brakeSystem.BrakePipeVolumeM3 * (train.Cars[i] as MSTSLocomotive).MainResPressurePSI;
833+
826834
var eng = train.Cars[i] as MSTSLocomotive;
827835
if (eng != null)
828836
{
829837
sumv += eng.MainResVolumeM3;
830838
sumpv += eng.MainResVolumeM3 * eng.MainResPressurePSI;
839+
840+
summainresv += eng.MainResVolumeM3;
841+
summainrespv += eng.MainResVolumeM3 * eng.MainResPressurePSI;
831842
}
832843
}
833844

@@ -876,24 +887,38 @@ protected static void PropagateBrakeLinePressures(float elapsedClockSeconds, Tra
876887
}
877888
}
878889
if (sumv > 0)
890+
{
879891
sumpv /= sumv;
892+
summainrespv /= summainresv;
893+
}
880894

881895
if (!train.Cars[continuousFromInclusive].BrakeSystem.FrontBrakeHoseConnected && train.Cars[continuousFromInclusive].BrakeSystem.AngleCockAOpen
882896
|| (continuousToExclusive == train.Cars.Count || !train.Cars[continuousToExclusive].BrakeSystem.FrontBrakeHoseConnected) && train.Cars[continuousToExclusive - 1].BrakeSystem.AngleCockBOpen)
897+
{
883898
sumpv = 0;
899+
summainrespv = 0;
900+
}
884901

885902
// Propagate main reservoir pipe (2) data
886903
train.BrakeLine2PressurePSI = sumpv;
887904
for (int i = 0; i < train.Cars.Count; i++)
888905
{
889906
if (first <= i && i <= last || twoPipes && continuousFromInclusive <= i && i < continuousToExclusive)
890907
{
908+
if (sumpv > (train.Cars[i] as MSTSLocomotive).MaximumMainReservoirPipePressurePSI)
909+
{
910+
sumpv = (train.Cars[i] as MSTSLocomotive).MaximumMainReservoirPipePressurePSI;
911+
}
912+
891913
train.Cars[i].BrakeSystem.BrakeLine2PressurePSI = sumpv;
892914
if (sumpv != 0 && train.Cars[i] is MSTSLocomotive)
893-
(train.Cars[i] as MSTSLocomotive).MainResPressurePSI = sumpv;
915+
(train.Cars[i] as MSTSLocomotive).MainResPressurePSI = summainrespv;
894916
}
895917
else
896-
train.Cars[i].BrakeSystem.BrakeLine2PressurePSI = train.Cars[i] is MSTSLocomotive ? (train.Cars[i] as MSTSLocomotive).MainResPressurePSI : 0;
918+
{
919+
// train.Cars[i].BrakeSystem.BrakeLine2PressurePSI = train.Cars[i] is MSTSLocomotive ? (train.Cars[i] as MSTSLocomotive).MainResPressurePSI : 0;
920+
train.Cars[i].BrakeSystem.BrakeLine2PressurePSI = train.Cars[i] is MSTSLocomotive ? (train.Cars[i] as MSTSLocomotive).MaximumMainReservoirPipePressurePSI : 0;
921+
}
897922
}
898923
}
899924

0 commit comments

Comments
 (0)