Skip to content

Commit 13b2941

Browse files
author
TitusStudiosMediaGroup
committed
dev
1 parent 122e7b0 commit 13b2941

File tree

1 file changed

+89
-34
lines changed

1 file changed

+89
-34
lines changed

locomotive-westinghouse-airbrakes.txt

Lines changed: 89 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
@name OpenControl/Locomotive-Westinghouse-Airbrakes
22
@inputs Locomotive:entity BPAngleCockFRONT BPAngleCockREAR MU2A [AirMU_FrontIN AirMU_RearIN LOCOMOTIVE_PROCESSOR CONTROL_STAND_DATA CONFIGURATION_DATA ENGINE_SOUND_DATA]:array
3-
@outputs [AirMU_FrontOUT AirMU_RearOUT LOCOMOTIVE_AIRBRAKE_DATA]:array MainReservoir EqualizingReservoir BrakePipe BrakeCylinder AutomaticAFM IndependentAFM Compressor AirSpit AirMU BP_Open
3+
@outputs [AirMU_FrontOUT AirMU_RearOUT LOCOMOTIVE_AIRBRAKE_DATA]:array MainReservoir EqualizingReservoir BrakePipe BrakeCylinder AutomaticAFM IndependentAFM Compressor AirSpit AirMU BP_Open IsLastLocomotive
44
@persist [E O W]:entity [SmoothTable]:table
55
@persist Compressor MainCharging MainCharged TopUpMainRes Interval Compressor_CFM MainReservoirVolume BrakePipingVolume LocomotiveBrakePipeLocalVolume CompressorTime PauseCOMP_EQing Equalized EqualizedHalfandHalf
66
@persist Discharging_EQ Discharging_BC EqualizedBC IndAFM IndAFMCapture IndAFMCapture2 AutoAFM AutoAFMCapture AutoAFMCapture2 IndependentAFM_Local AutomaticAFM_Local IndNotch BrakePipeLocalCutin TrainLine
77
@persist TotalBPVol BrakePipeLocalVol TrainlineEQ TLBP_Equal ERBP_Equal ERBP_EqualLOCKED BrakePipeLocal BrakePipe CompRefill BrakeLinePumpLoss MRCO EQCO TLCO TLDropToZero AirMU
88
@persist COMPEngineOn AirSpit IsLead BrakePipeAnglecock BP_Open NumRes NominalFlowPHYS AutoPressureSet TELocal LastCarCount HoldatZero FeedPressure MainResFeedPressure MainResRechargePressure
9-
@persist BPAC_AirMU
9+
@persist BPAC_AirMU IsLastLocomotive BPAC_AirMU_Front BPAC_AirMU_Rear LocomotivePOS NextLocomotive
1010
@trigger none
1111
@model
1212

13-
1413
if(dupefinished() | duped()){ reset() }
1514
if(first()){
1615

@@ -30,9 +29,9 @@ if(first()){
3029
NumRes = 2.5
3130
NominalFlowPHYS = 0.865
3231

33-
MainReservoir = 140
34-
EqualizingReservoir = 90
35-
BrakePipeLocal = 90
32+
MainReservoir = 0
33+
EqualizingReservoir = 0
34+
BrakePipeLocal = 0
3635
BrakeCylinder = 65
3736

3837
FeedPressure = CONFIGURATION_DATA[53,number]
@@ -118,6 +117,63 @@ if(BPAngleCockREAR == 0 & BPAngleCockFRONT == 0){
118117
}
119118

120119

120+
if(!IsLead){
121+
if((AirMU_FrontIN[7,number] > 0) | (AirMU_RearIN[7,number] > 0)){
122+
LocomotivePOS = (AirMU_FrontIN[7,number]-1)
123+
LocomotivePOS = (AirMU_RearIN[7,number]-1)
124+
}
125+
}
126+
else{
127+
LocomotivePOS = 74
128+
}
129+
130+
IsLastLocomotive = (!IsLead & !(AirMU_FrontIN[1,string] == "opencontrol" & AirMU_RearIN[1,string] == "opencontrol")) ? 1 : 0
131+
132+
if(!IsLead){
133+
if(IsLastLocomotive){
134+
if(AirMU_FrontIN[7,number] > AirMU_RearIN[7,number]){
135+
NextLocomotive = AirMU_FrontIN[7,number]
136+
BPAC_AirMU_Front = BPAC_AirMU
137+
}
138+
else{
139+
NextLocomotive = AirMU_RearIN[7,number]
140+
BPAC_AirMU_Rear = BPAC_AirMU
141+
}
142+
}
143+
else{
144+
if(AirMU_FrontIN[7,number] > AirMU_RearIN[7,number]){
145+
NextLocomotive = AirMU_FrontIN[7,number]
146+
if(changed(AirMU_RearIN[6,number])){
147+
BPAC_AirMU_Front = AirMU_RearIN[6,number]
148+
BPAC_AirMU_Output = AirMU_RearIN[6,number]
149+
BPAC_AirMU = AirMU_RearIN[6,number]
150+
}
151+
}
152+
else{
153+
NextLocomotive = AirMU_RearIN[7,number]
154+
if(changed(AirMU_FrontIN[6,number])){
155+
BPAC_AirMU_Rear = AirMU_FrontIN[6,number]
156+
BPAC_AirMU_Output = AirMU_FrontIN[6,number]
157+
BPAC_AirMU = AirMU_FrontIN[6,number]
158+
}
159+
}
160+
161+
}
162+
}
163+
else{
164+
if(AirMU_FrontIN[1,string] == "opencontrol"){
165+
BPAC_AirMU_Front = AirMU_FrontIN[6,number]
166+
BPAC_AirMU_Output = AirMU_FrontIN[6,number]
167+
BPAC_AirMU = AirMU_FrontIN[6,number]
168+
}
169+
elseif(AirMU_RearIN[1,string] == "opencontrol"){
170+
BPAC_AirMU_Rear = AirMU_RearIN[6,number]
171+
BPAC_AirMU_Output = AirMU_RearIN[6,number]
172+
BPAC_AirMU = AirMU_RearIN[6,number]
173+
}
174+
}
175+
176+
121177
CarCount = LOCOMOTIVE_PROCESSOR[1,number]
122178

123179
if(changed((ENGINE_SOUND_DATA[7,number] | ENGINE_SOUND_DATA[8,number]) == 1)&(ENGINE_SOUND_DATA[7,number] | ENGINE_SOUND_DATA[8,number]) == 1){
@@ -208,7 +264,7 @@ if(AirMU_FrontIN[1,string] == "opencontrol" | AirMU_RearIN[1,string] == "opencon
208264
elseif(CONTROL_STAND_DATA[28,number] == 1 & MU2A == 0){ #MU2A - Lead
209265
IsLead = 1
210266
IndependantMU = BrakeCylinder
211-
PressureSetMU = CONTROL_STAND_DATA[3,number]
267+
PressureSetMU = CONTROL_STAND_DATA[4,number]
212268
MainResMU = MainReservoir
213269
AirMU = 0
214270
AutoPressureSet = CONTROL_STAND_DATA[4,number]
@@ -218,15 +274,15 @@ else{
218274
if(CONTROL_STAND_DATA[28,number]){
219275
IsLead = 1
220276
IndependantMU = BrakeCylinder
221-
PressureSetMU = CONTROL_STAND_DATA[3,number]
277+
PressureSetMU = CONTROL_STAND_DATA[4,number]
222278
MainResMU = MainReservoir
223279
AirMU = 0
224280
AutoPressureSet = CONTROL_STAND_DATA[4,number]
225281
}
226282
}
227283

228-
AirMU_FrontOUT = array("opencontrol",IndependantMU,PressureSetMU,MainResMU,IsLead)
229-
AirMU_RearOUT = array("opencontrol",IndependantMU,PressureSetMU,MainResMU,IsLead)
284+
AirMU_FrontOUT = array("opencontrol",IndependantMU,PressureSetMU,MainResMU,IsLead,BPAC_AirMU_Front,LocomotivePOS)
285+
AirMU_RearOUT = array("opencontrol",IndependantMU,PressureSetMU,MainResMU,IsLead,BPAC_AirMU_Rear,LocomotivePOS)
230286

231287
if(COMPEngineOn){
232288
if(Compressor){
@@ -253,7 +309,6 @@ if(COMPEngineOn){
253309
elseif(round(MainReservoir) == round(EqualizingReservoir)){
254310
local SplitRate = (CompressorTime/NumRes)
255311
EqualizingReservoir = EqualizingReservoir
256-
MainReservoir = MainReservoir
257312
}
258313
}
259314

@@ -275,10 +330,6 @@ if(COMPEngineOn){
275330
}
276331
}
277332

278-
#[
279-
CONTROL_STAND_DATA = array(IncreaseTrainBrake,DecreaseTrainBrake,BrakeNotch,AutomaticPressureSet,Suppression,Emergency,BrakeCutout,IncreaseLocoBrake,DecreaseLocoBrake,Independent_Bail,EmergencyBrake,
280-
DynamicNotch,DynamicsSetup,DynamicsPowerZone,DynamicUnlock,Reverser,ReverserRemoved,Notch,BatteryKnife,EngineRun,GenField,FuelPump,Control)
281-
]#
282333
if(HoldatZero == 0){
283334
if(BrakePipeAnglecock == 1){
284335
if(CarCount<2 & BPAC_AirMU){
@@ -357,9 +408,29 @@ if(COMPEngineOn){
357408
elseif(round(BrakePipeLocal) > AutomaticPressureSet){
358409
local FeedRate = (CompressorTime/NominalFlowPHYS)
359410
BrakePipeLocal -= FeedRate
411+
if(Compressor){
412+
if(AirMU == 0){
413+
if(MainReservoir<MainResFeedPressure){
414+
MainReservoir += (CompressorTime/NumRes)
415+
}
416+
elseif(MainReservoir > MainResFeedPressure){
417+
MainReservoir = MainResFeedPressure
418+
}
419+
}
420+
}
360421
}
361422
elseif(round(BrakePipeLocal) == AutomaticPressureSet){
362423
BrakePipeLocal = AutomaticPressureSet
424+
if(Compressor){
425+
if(AirMU == 0){
426+
if(MainReservoir<MainResFeedPressure){
427+
MainReservoir += (CompressorTime/NumRes)
428+
}
429+
elseif(MainReservoir > MainResFeedPressure){
430+
MainReservoir = MainResFeedPressure
431+
}
432+
}
433+
}
363434
}
364435
}
365436

@@ -419,23 +490,6 @@ if(changed(CarCount)&CarCount){
419490
LastCarCount = CarCount
420491
}
421492

422-
#[
423-
if(round(MainReservoir)<MainResFeedPressure & !MainCharged){
424-
Compressor = 1
425-
}
426-
elseif(round(MainReservoir) == MainResFeedPressure & !MainCharged){
427-
MainCharged = 1
428-
}
429-
430-
if(round(MainReservoir)<MainResRechargePressure & MainCharged){
431-
Compressor = 1
432-
}
433-
434-
if(round(MainReservoir) >= MainResFeedPressure){
435-
Compressor = 0
436-
}
437-
]#
438-
439493
if(round(MainReservoir)<MainResRechargePressure){
440494
Compressor = 1
441495
}
@@ -490,8 +544,6 @@ BrakePipe = smooth((BrakePipeLocal),(15)+(CarCount*1),"brakepipe-smoothing",0)
490544
IndependentAFM = smooth((IndependentAFM_Local*2),5,"IndAFMSmoothing",0)
491545
AutomaticAFM = smooth((AutomaticAFM_Local*15),10,"AutoAFMSmoothing",0)
492546

493-
#LOCOMOTIVE_CIRCUIT_DATA = array(CarCount,Load,MPH,TrainWeight,Braking_Loco,Braking_Train,V,E,O,W)
494-
495547
if(COMPEngineOn){
496548
if(changed(Compressor)&Compressor){
497549
Locomotive:soundPlay("aircompressor",0,CONFIGURATION_DATA[12,string])
@@ -544,3 +596,6 @@ if(AirMU == 0){
544596

545597
LOCOMOTIVE_AIRBRAKE_DATA = array(MainReservoir,EqualizingReservoir,BrakePipe,BrakeCylinder,AutomaticAFM,IndependentAFM,IndNotch,BrakePipeAnglecock,BrakePipeLocal,Compressor,BrakePipeAnglecock)
546598

599+
if(last()){
600+
soundPurge()
601+
}

0 commit comments

Comments
 (0)