16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-18 01:59:19 +02:00

Przesunięcie Init dla TNest3. Zmiany w CheckLocParams

This commit is contained in:
firleju
2016-11-07 17:15:41 +01:00
parent 97ba33b3ea
commit e90b7cfb25
5 changed files with 383 additions and 332 deletions

View File

@@ -1050,7 +1050,7 @@ public:
TPowerSource PowerSourceDecode(std::string s); //Q 20160719
TPowerType PowerDecode(std::string s); //Q 20160719
TEngineTypes EngineDecode(std::string s); //Q 20160721
bool CreateBrakeSys(); //Q 20160722
bool CreateBrakeSys(bool ReadyFlag = true); //Q 20160722
bool CheckLocomotiveParameters(bool ReadyFlag, int Dir);
std::string EngineDescription(int what);
};

View File

@@ -6874,276 +6874,296 @@ bool TMoverParameters::LoadFIZ(std::string chkpath)
bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
{
bool OK;
int b;
int DefBrakeTable[8] = {15, 4, 25, 25, 13, 3, 12, 2};
WriteLog("check locomotive parameters...");
int b;
bool OK = true;
OK = true;
AutoRelayFlag = (AutoRelayType == 1);
AutoRelayFlag = (AutoRelayType == 1);
Sand = SandCapacity;
Sand = SandCapacity;
// WriteLog("aa = " + AxleArangement + " " + std::string( Pos("o", AxleArangement)) );
// WriteLog("aa = " + AxleArangement + " " + std::string( Pos("o", AxleArangement)) );
// if ((Pos("o", AxleArangement) > 0) && (EngineType == ElectricSeriesMotor))
// OK = (RList[1].Bn * RList[1].Mn == NPoweredAxles); //test poprawnosci ilosci osi
// indywidualnie napedzanych
if ((Pos("o", AxleArangement) > 0) && (EngineType == ElectricSeriesMotor))
OK = (RList[1].Bn * RList[1].Mn ==
NPoweredAxles); // test poprawnosci ilosci osi indywidualnie napedzanych
// WriteLogSS("aa ok", BoolToYN(OK));
// if ((Pos(LoadType, LoadAccepted) == 0) && (LoadType != ""))
// {
// WriteLog("Load Accepted fail");
// Load = 0;
// OK = false;
// }
if (BrakeSystem == Individual)
if (BrakeSubsystem != ss_None)
OK = false; //!
// if (BrakeSystem == Individual)
// if (BrakeSubsystem != ss_None)
// {
// WriteLog("BrakeSubsystem fail");
// OK = false; //!
// }
if ((BrakeVVolume == 0) && (MaxBrakePress[3] > 0) && (BrakeSystem != Individual))
BrakeVVolume = MaxBrakePress[3] / (5 - MaxBrakePress[3]) *
(BrakeCylRadius * BrakeCylRadius * BrakeCylDist * BrakeCylNo * PI) * 1000;
if (BrakeVVolume == 0)
BrakeVVolume = 0.01;
// if ((BrakeVVolume == 0) && (MaxBrakePress[3] > 0) && (BrakeSystem != Individual))
// BrakeVVolume = MaxBrakePress[3] / (5 - MaxBrakePress[3]) * (BrakeCylRadius * BrakeCylRadius
// * BrakeCylDist * BrakeCylNo * PI) * 1000;
// if (BrakeVVolume == 0) BrakeVVolume = 0.01;
BrakeVVolume = 0.01; // q
// WriteLog("BVV = " + FloatToStr(BrakeVVolume));
switch (BrakeValve)
{
case W:
case K:
{
Hamulec = new TWest(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA);
// if(MBPM<2) //jesli przystawka wazaca
// (dynamic_cast<TWest*>(Hamulec))->SetLP(0,MaxBrakePress[3],0);
// else
// (dynamic_cast<TWest*>(Hamulec))->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
case KE:
{
Hamulec = new TKE(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA);
// (dynamic_cast<TKE*>(Hamulec))->SetRM(RapidMult);
// if(MBPM<2) //jesli przystawka wazaca
// (dynamic_cast<TKE*>(Hamulec))->SetLP(0, MaxBrakePress[3], 0);
// else
// (dynamic_cast<TKE*>(Hamulec))->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
case NESt3:
case ESt3:
case ESt3AL2:
case ESt4:
{
Hamulec = new TNESt3(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA);
// (dynamic_cast<TNESt3*>(Hamulec))->SetSize(BrakeValveSize,BrakeValveParams);
// if(MBPM<2) //jesli przystawka wazaca
// (dynamic_cast<TNESt3*>(Hamulec))->SetLP(0, MaxBrakePress[3], 0);
// else
// (dynamic_cast<TNESt3*>(Hamulec))->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
if ((TestFlag(BrakeDelays, bdelay_G)) &&
((!TestFlag(BrakeDelays, bdelay_R)) ||
(Power > 1))) // ustalanie srednicy przewodu glownego (lokomotywa lub napêdowy
Spg = 0.792;
else
Spg = 0.507;
case LSt:
{
Hamulec = new TLSt(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA);
//(dynamic_cast<TLSt*>(Hamulec))->SetRM(RapidMult);
break;
}
case EStED:
{
Hamulec = new TEStED(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA);
//(dynamic_cast<TEStED*>(Hamulec))->SetRM(RapidMult);
break;
}
case EP2:
{
Hamulec = new TEStEP2(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA);
//(dynamic_cast<TEStEP2*>(Hamulec))->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
// taki mini automat - powinno byc ladnie dobrze :)
BrakeDelayFlag = bdelay_P;
if ((TestFlag(BrakeDelays, bdelay_G)) && !(TestFlag(BrakeDelays, bdelay_R)))
BrakeDelayFlag = bdelay_G;
if ((TestFlag(BrakeDelays, bdelay_R)) && !(TestFlag(BrakeDelays, bdelay_G)))
BrakeDelayFlag = bdelay_R;
case CV1:
{
Hamulec = new TCV1(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA);
break;
}
case CV1_L_TR:
{
Hamulec = new TCV1L_TR(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA);
break;
}
int DefBrakeTable[8] = { 15, 4, 25, 25, 13, 3, 12, 2 };
default:
Hamulec = new TBrake(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA);
}
// checking ready flag
// to dac potem do init
if (ReadyFlag) // gotowy do drogi
{
// WriteLog("Ready to depart");
CompressedVolume = VeselVolume * MinCompressor * (9.8) / 10;
ScndPipePress = CompressedVolume / VeselVolume;
PipePress = CntrlPipePress;
BrakePress = 0;
LocalBrakePos = 0;
// Hamulec->SetASBP(MaxBrakePress[4]);
if (CabNo == 0)
BrakeCtrlPos = floor(Handle->GetPos(bh_NP)); // Q: TODO: Trunc na floor
else
BrakeCtrlPos = floor(Handle->GetPos(bh_RP));
MainSwitch(false);
PantFront(true);
PantRear(true);
MainSwitch(true);
ActiveDir = 0; // Dir; //nastawnik kierunkowy - musi byæ ustawiane osobno!
DirAbsolute = ActiveDir * CabNo; // kierunek jazdy wzglêdem sprzêgów
LimPipePress = CntrlPipePress;
}
else
{ // zahamowany}
WriteLog("Bracked");
Volume = BrakeVVolume * MaxBrakePress[3];
CompressedVolume = VeselVolume * MinCompressor * 0.55;
ScndPipePress = 5.1;
PipePress = LowPipePress;
PipeBrakePress = MaxBrakePress[3];
BrakePress = MaxBrakePress[3];
LocalBrakePos = 0;
BrakeCtrlPos = Trunc(Handle->GetPos(bh_NP)); // Q: TODO: Trunc na floor
LimPipePress = LowPipePress;
}
switch (BrakeHandle)
{
case FV4a:
Handle = new TFV4aM();
break;
case FVel6:
Handle = new TFVel6();
break;
case testH:
Handle = new Ttest();
break;
case M394:
Handle = new TM394();
break;
case Knorr:
Handle = new TH14K1();
break;
case St113:
Handle = new TSt113();
break;
default:
Handle = new TDriverHandle();
}
if (LoadFlag > 0)
{
if (Load < MaxLoad * 0.45)
{
IncBrakeMult();
IncBrakeMult();
DecBrakeMult(); // TODO: przeinesiono do mover.cpp
if (Load < MaxLoad * 0.35)
DecBrakeMult();
}
if (Load >= MaxLoad * 0.45)
{
IncBrakeMult(); // TODO: przeinesiono do mover.cpp
if (Load >= MaxLoad * 0.55)
IncBrakeMult();
}
}
switch (BrakeLocHandle)
{
case FD1:
{
LocHandle = new TFD1();
LocHandle->Init(MaxBrakePress[0]);
break;
}
case Knorr:
{
LocHandle = new TH1405();
LocHandle->Init(MaxBrakePress[0]);
break;
}
default:
LocHandle = new TDriverHandle();
}
if (BrakeOpModes & bom_PS)
BrakeOpModeFlag = bom_PS;
else
BrakeOpModeFlag = bom_PN;
// ustalanie srednicy przewodu glownego (lokomotywa lub napêdowy
if ((TestFlag(BrakeDelays, bdelay_G)) && ((!TestFlag(BrakeDelays, bdelay_R)) || (Power > 1)))
Spg = 0.792;
else
Spg = 0.507;
// yB: jesli pojazdy nie maja zadeklarowanych czasow, to wsadz z przepisow +-16,(6)%
for (b = 1; b < 4; b++)
{
if (BrakeDelay[b] == 0)
BrakeDelay[b] = DefBrakeTable[b];
BrakeDelay[b] = BrakeDelay[b] * (2.5 + Random(0.0, 0.2)) / 3.0;
}
Pipe = new TReservoir();
Pipe2 = new TReservoir(); // zabezpieczenie, bo sie PG wywala... :(
Pipe->CreateCap((Max0R(Dim.L, 14) + 0.5) * Spg * 1); // dlugosc x przekroj x odejscia i takie
// tam
Pipe2->CreateCap((Max0R(Dim.L, 14) + 0.5) * Spg * 1);
// WriteLog("SPG = " + FloatToStr(Spg));
if (LightsPosNo > 0)
LightsPos = LightsDefPos;
switch (BrakeValve)
{
case W:
case K:
{
WriteLog("XBT W, K");
Hamulec = new TWest(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
if (MBPM < 2) // jesli przystawka wazaca
Hamulec->SetLP(0, MaxBrakePress[3], 0);
else
Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
case KE:
{
WriteLog("XBT WKE");
Hamulec = new TKE(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress, HighPipePress,
LowPipePress, BrakePress, BrakeDelayFlag);
Hamulec->SetRM(RapidMult);
if (MBPM < 2) // jesli przystawka wazaca
Hamulec->SetLP(0, MaxBrakePress[3], 0);
else
Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
case NESt3:
case ESt3:
case ESt3AL2:
case ESt4:
{
WriteLog("XBT NESt3, ESt3, ESt3AL2, ESt4");
Hamulec = new TNESt3(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
(static_cast<TNESt3 *>(Hamulec))->SetSize(BrakeValveSize, BrakeValveParams);
if (MBPM < 2) // jesli przystawka wazaca
Hamulec->SetLP(0, MaxBrakePress[3], 0);
else
Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
// to dac potem do init
case LSt:
{
WriteLog("XBT LSt");
Hamulec = new TLSt(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress, HighPipePress,
LowPipePress, BrakePress, BrakeDelayFlag);
Hamulec->SetRM(RapidMult);
break;
}
case EStED:
{
WriteLog("XBT EStED");
Hamulec = new TEStED(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
Hamulec->SetRM(RapidMult);
break;
}
case EP2:
{
WriteLog("XBT EP2");
Hamulec = new TEStEP2(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
if (ReadyFlag) // gotowy do drogi
{
WriteLog("Ready to depart");
CompressedVolume = VeselVolume * MinCompressor * (9.8) / 10;
ScndPipePress = CompressedVolume / VeselVolume;
PipePress = CntrlPipePress;
BrakePress = 0;
LocalBrakePos = 0;
case CV1:
{
WriteLog("XBT CV1");
Hamulec = new TCV1(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress, HighPipePress,
LowPipePress, BrakePress, BrakeDelayFlag);
break;
}
case CV1_L_TR:
{
WriteLog("XBT CV1_L_T");
Hamulec = new TCV1L_TR(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
break;
}
if (CabNo == 0)
BrakeCtrlPos = floor(Handle->GetPos(bh_NP)); // Q: TODO: Trunc na floor
else
BrakeCtrlPos = floor(Handle->GetPos(bh_RP));
MainSwitch(false);
PantFront(true);
PantRear(true);
MainSwitch(true);
ActiveDir = 0; // Dir; //nastawnik kierunkowy - musi byæ ustawiane osobno!
DirAbsolute = ActiveDir * CabNo; // kierunek jazdy wzglêdem sprzêgów
LimPipePress = CntrlPipePress;
}
else
{ // zahamowany}
WriteLog("Bracked");
// Volume = BrakeVVolume * MaxBrakePress[3];
// CompressedVolume = VeselVolume * MinCompressor * 0.55;
// ScndPipePress = 5.1;
// PipePress = LowPipePress;
// PipeBrakePress = MaxBrakePress[3];
// BrakePress = MaxBrakePress[3];
// LocalBrakePos = 0;
// BrakeCtrlPos = floor(Handle->GetPos(bh_NP)); //Q: TODO: Trunc na floor
// LimPipePress = LowPipePress;
}
default:
Hamulec = new TBrake(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
}
// ActFlowSpeed = 0;
// BrakeCtrlPosR = BrakeCtrlPos;
Hamulec->SetASBP(MaxBrakePress[4]);
// if (BrakeLocHandle == Knorr)
// LocalBrakePos = 5;
switch (BrakeHandle)
{
case FV4a:
Handle = new TFV4aM();
break;
case FVel6:
Handle = new TFVel6();
break;
case testH:
Handle = new Ttest();
break;
case M394:
Handle = new TM394();
break;
case Knorr:
Handle = new TH14K1();
break;
case St113:
Handle = new TSt113();
break;
default:
Handle = new TDriverHandle();
}
// Pipe->CreatePress(PipePress);
// Pipe2->CreatePress(ScndPipePress);
// Pipe->Act();
// Pipe2->Act();
switch (BrakeLocHandle)
{
case FD1:
{
LocHandle = new TFD1();
LocHandle->Init(MaxBrakePress[0]);
break;
}
case Knorr:
{
LocHandle = new TH1405();
LocHandle->Init(MaxBrakePress[0]);
break;
}
default:
LocHandle = new TDriverHandle();
}
// EqvtPipePress = PipePress;
Pipe = new TReservoir();
Pipe2 = new TReservoir(); // zabezpieczenie, bo sie PG wywala... :(
Pipe->CreateCap((Max0R(Dim.L, 14) + 0.5) * Spg * 1); // dlugosc x przekroj x odejscia i takie
// tam
Pipe2->CreateCap((Max0R(Dim.L, 14) + 0.5) * Spg * 1);
// Handle->Init(PipePress);
if (LightsPosNo > 0)
LightsPos = LightsDefPos;
//--ComputeConstans(); // TODO:
//przeinesiono do mover.cpp
ActFlowSpeed = 0;
BrakeCtrlPosR = BrakeCtrlPos;
if (LoadFlag > 0)
{
if (Load < MaxLoad * 0.45)
{
IncBrakeMult();
IncBrakeMult();
DecBrakeMult(); // TODO: przeinesiono do mover.cpp
if (Load < MaxLoad * 0.35)
DecBrakeMult();
}
if (Load >= MaxLoad * 0.45)
{
IncBrakeMult(); // TODO: przeinesiono do mover.cpp
if (Load >= MaxLoad * 0.55)
IncBrakeMult();
}
}
if (BrakeLocHandle == Knorr)
LocalBrakePos = 5;
// taki mini automat - powinno byc ladnie dobrze :)
// BrakeDelayFlag = bdelay_P;
// if ((TestFlag(BrakeDelays, bdelay_G)) && !(TestFlag(BrakeDelays, bdelay_R)))
// BrakeDelayFlag = bdelay_G;
// if ((TestFlag(BrakeDelays, bdelay_R)) && !(TestFlag(BrakeDelays, bdelay_G)))
// BrakeDelayFlag = bdelay_R;
Pipe->CreatePress(PipePress);
Pipe2->CreatePress(ScndPipePress);
Pipe->Act();
Pipe2->Act();
// yB: jesli pojazdy nie maja zadeklarowanych czasow, to wsadz z przepisow +-16,(6)%
// for ( b=1; b<4; b++)
// {
// if (BrakeDelay[b] == 0)
// BrakeDelay[b] = DefBrakeTable[b];
// BrakeDelay[b] = BrakeDelay[b] * (2.5 + random(0.0, 0.2)) / 3.0;
// }
EqvtPipePress = PipePress;
// if(TrainType == dt_ET22)
// CompressorPower = 0;
Handle->Init(PipePress);
// Hamulec->Init(PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
ComputeConstans();
// ScndPipePress = Compressor;
WriteLog("OK=" + to_string(OK));
if (TrainType == dt_ET22)
CompressorPower = 0;
return OK;
// Hamulec->Init(PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
ScndPipePress = Compressor;
// WriteLogSS("OK=", BoolTo10(OK));
// WriteLog("");
return OK;
}
// *************************************************************************************************
@@ -7151,7 +7171,7 @@ bool TMoverParameters::CheckLocomotiveParameters(bool ReadyFlag, int Dir)
// Funkcja pelniaca role pierwotnej CheckLocomotiveParameters(bool ReadyFlag, int Dir)
// wywolywana w dynobj.cpp w double TDynamicObject::Init()
// *************************************************************************************************
bool TMoverParameters::CreateBrakeSys()
bool TMoverParameters::CreateBrakeSys(bool ReadyFlag)
{
WriteLog("check locomotive parameters...");
int b;
@@ -7187,6 +7207,83 @@ bool TMoverParameters::CreateBrakeSys()
else
Spg = 0.507;
// taki mini automat - powinno byc ladnie dobrze :)
BrakeDelayFlag = bdelay_P;
if ((TestFlag(BrakeDelays, bdelay_G)) && !(TestFlag(BrakeDelays, bdelay_R)))
BrakeDelayFlag = bdelay_G;
if ((TestFlag(BrakeDelays, bdelay_R)) && !(TestFlag(BrakeDelays, bdelay_G)))
BrakeDelayFlag = bdelay_R;
int DefBrakeTable[8] = {15, 4, 25, 25, 13, 3, 12, 2};
// checking ready flag
// to dac potem do init
if (ReadyFlag) // gotowy do drogi
{
// WriteLog("Ready to depart");
CompressedVolume = VeselVolume * MinCompressor * (9.8) / 10;
ScndPipePress = CompressedVolume / VeselVolume;
PipePress = CntrlPipePress;
BrakePress = 0;
LocalBrakePos = 0;
if (CabNo == 0)
BrakeCtrlPos = floor(Handle->GetPos(bh_NP)); // Q: TODO: Trunc na floor
else
BrakeCtrlPos = floor(Handle->GetPos(bh_RP));
MainSwitch(false);
PantFront(true);
PantRear(true);
MainSwitch(true);
ActiveDir = 0; // Dir; //nastawnik kierunkowy - musi byæ ustawiane osobno!
DirAbsolute = ActiveDir * CabNo; // kierunek jazdy wzglêdem sprzêgów
LimPipePress = CntrlPipePress;
}
else
{ // zahamowany}
WriteLog("Bracked");
Volume = BrakeVVolume * MaxBrakePress[3];
CompressedVolume = VeselVolume * MinCompressor * 0.55;
ScndPipePress = 5.1;
PipePress = LowPipePress;
PipeBrakePress = MaxBrakePress[3];
BrakePress = MaxBrakePress[3];
LocalBrakePos = 0;
BrakeCtrlPos = Trunc(Handle->GetPos(bh_NP)); // Q: TODO: Trunc na floor
LimPipePress = LowPipePress;
}
if (LoadFlag > 0)
{
if (Load < MaxLoad * 0.45)
{
IncBrakeMult();
IncBrakeMult();
DecBrakeMult(); // TODO: przeinesiono do mover.cpp
if (Load < MaxLoad * 0.35)
DecBrakeMult();
}
if (Load >= MaxLoad * 0.45)
{
IncBrakeMult(); // TODO: przeinesiono do mover.cpp
if (Load >= MaxLoad * 0.55)
IncBrakeMult();
}
}
if (BrakeOpModes & bom_PS)
BrakeOpModeFlag = bom_PS;
else
BrakeOpModeFlag = bom_PN;
// yB: jesli pojazdy nie maja zadeklarowanych czasow, to wsadz z przepisow +-16,(6)%
for (b = 1; b < 4; b++)
{
if (BrakeDelay[b] == 0)
BrakeDelay[b] = DefBrakeTable[b];
BrakeDelay[b] = BrakeDelay[b] * (2.5 + Random(0.0, 0.2)) / 3.0;
}
// WriteLog("SPG = " + FloatToStr(Spg));
switch (BrakeValve)
@@ -7196,25 +7293,25 @@ bool TMoverParameters::CreateBrakeSys()
{
WriteLog("XBT W, K");
Hamulec = new TWest(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
if (MBPM < 2) // jesli przystawka wazaca
(static_cast<TWest *>(Hamulec))->SetLP(0, MaxBrakePress[3], 0);
Hamulec->SetLP(0, MaxBrakePress[3], 0);
else
(static_cast<TWest *>(Hamulec))->SetLP(Mass, MBPM, MaxBrakePress[1]);
Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
case KE:
{
WriteLog("XBT WKE");
Hamulec = new TKE(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
(static_cast<TKE *>(Hamulec))->SetRM(RapidMult);
BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress, HighPipePress,
LowPipePress, BrakePress, BrakeDelayFlag);
Hamulec->SetRM(RapidMult);
if (MBPM < 2) // jesli przystawka wazaca
(static_cast<TKE *>(Hamulec))->SetLP(0, MaxBrakePress[3], 0);
Hamulec->SetLP(0, MaxBrakePress[3], 0);
else
(static_cast<TKE *>(Hamulec))->SetLP(Mass, MBPM, MaxBrakePress[1]);
Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
case NESt3:
@@ -7224,13 +7321,13 @@ bool TMoverParameters::CreateBrakeSys()
{
WriteLog("XBT NESt3, ESt3, ESt3AL2, ESt4");
Hamulec = new TNESt3(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
(static_cast<TNESt3 *>(Hamulec))->SetSize(BrakeValveSize, BrakeValveParams);
if (MBPM < 2) // jesli przystawka wazaca
(static_cast<TNESt3 *>(Hamulec))->SetLP(0, MaxBrakePress[3], 0);
Hamulec->SetLP(0, MaxBrakePress[3], 0);
else
(static_cast<TNESt3 *>(Hamulec))->SetLP(Mass, MBPM, MaxBrakePress[1]);
Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
@@ -7238,27 +7335,27 @@ bool TMoverParameters::CreateBrakeSys()
{
WriteLog("XBT LSt");
Hamulec = new TLSt(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
(static_cast<TLSt *>(Hamulec))->SetRM(RapidMult);
BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress, HighPipePress,
LowPipePress, BrakePress, BrakeDelayFlag);
Hamulec->SetRM(RapidMult);
break;
}
case EStED:
{
WriteLog("XBT EStED");
Hamulec = new TEStED(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
(static_cast<TEStED *>(Hamulec))->SetRM(RapidMult);
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
Hamulec->SetRM(RapidMult);
break;
}
case EP2:
{
WriteLog("XBT EP2");
Hamulec = new TEStEP2(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
(static_cast<TEStEP2 *>(Hamulec))->SetLP(Mass, MBPM, MaxBrakePress[1]);
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
Hamulec->SetLP(Mass, MBPM, MaxBrakePress[1]);
break;
}
@@ -7266,23 +7363,23 @@ bool TMoverParameters::CreateBrakeSys()
{
WriteLog("XBT CV1");
Hamulec = new TCV1(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume, BrakeCylNo,
BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress, HighPipePress,
LowPipePress, BrakePress, BrakeDelayFlag);
break;
}
case CV1_L_TR:
{
WriteLog("XBT CV1_L_T");
Hamulec = new TCV1L_TR(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
break;
}
default:
Hamulec = new TBrake(MaxBrakePress[3], BrakeCylRadius, BrakeCylDist, BrakeVVolume,
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA,
PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
BrakeCylNo, BrakeDelays, BrakeMethod, NAxles, NBpA, PipePress,
HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
}
Hamulec->SetASBP(MaxBrakePress[4]);
@@ -7332,55 +7429,17 @@ bool TMoverParameters::CreateBrakeSys()
Pipe = new TReservoir();
Pipe2 = new TReservoir(); // zabezpieczenie, bo sie PG wywala... :(
Pipe->CreateCap((Max0R(Dim.L, 14) + 0.5) * Spg * 1); // dlugosc x przekroj x odejscia i takie
// tam
// tam
Pipe2->CreateCap((Max0R(Dim.L, 14) + 0.5) * Spg * 1);
if (LightsPosNo > 0)
LightsPos = LightsDefPos;
// checking ready flag
// to dac potem do init
bool ReadyFlag = true;
if (ReadyFlag) // gotowy do drogi
{
// WriteLog("Ready to depart");
CompressedVolume = VeselVolume * MinCompressor * (9.8) / 10;
ScndPipePress = CompressedVolume / VeselVolume;
PipePress = CntrlPipePress;
BrakePress = 0;
LocalBrakePos = 0;
if (CabNo == 0)
BrakeCtrlPos = floor(Handle->GetPos(bh_NP)); // Q: TODO: Trunc na floor
else
BrakeCtrlPos = floor(Handle->GetPos(bh_RP));
MainSwitch(false);
PantFront(true);
PantRear(true);
MainSwitch(true);
ActiveDir = 0; // Dir; //nastawnik kierunkowy - musi byæ ustawiane osobno!
DirAbsolute = ActiveDir * CabNo; // kierunek jazdy wzglêdem sprzêgów
LimPipePress = CntrlPipePress;
}
else
{ // zahamowany}
// WriteLog("Bracked");
// Volume = BrakeVVolume * MaxBrakePress[3];
// CompressedVolume = VeselVolume * MinCompressor * 0.55;
// ScndPipePress = 5.1;
// PipePress = LowPipePress;
// PipeBrakePress = MaxBrakePress[3];
// BrakePress = MaxBrakePress[3];
// LocalBrakePos = 0;
// BrakeCtrlPos = Trunc(Handle->GetPos(bh_NP)); //Q: TODO: Trunc na floor
// LimPipePress = LowPipePress;
}
ActFlowSpeed = 0;
BrakeCtrlPosR = BrakeCtrlPos;
// if(BrakeLocHandle==Knorr)
// LocalBrakePos =5;
if (BrakeLocHandle == Knorr)
LocalBrakePos = 5;
Pipe->CreatePress(PipePress);
Pipe2->CreatePress(ScndPipePress);
@@ -7391,32 +7450,17 @@ bool TMoverParameters::CreateBrakeSys()
Handle->Init(PipePress);
// taki mini automat - powinno byc ladnie dobrze :)
BrakeDelayFlag = bdelay_P;
if ((TestFlag(BrakeDelays, bdelay_G)) && !(TestFlag(BrakeDelays, bdelay_R)))
BrakeDelayFlag = bdelay_G;
if ((TestFlag(BrakeDelays, bdelay_R)) && !(TestFlag(BrakeDelays, bdelay_G)))
BrakeDelayFlag = bdelay_R;
ComputeConstans();
int DefBrakeTable[8] = {15, 4, 25, 25, 13, 3, 12, 2};
if (TrainType == dt_ET22)
CompressorPower = 0;
// yB: jesli pojazdy nie maja zadeklarowanych czasow, to wsadz z przepisow +-16,(6)%
// for ( b=1; b<4; b++)
// {
// if (BrakeDelay[b] == 0)
// BrakeDelay[b] = DefBrakeTable[b];
// BrakeDelay[b] = BrakeDelay[b] * (2.5 + random(0.0, 0.2)) / 3.0;
// }
// if(TrainType == dt_ET22)
// CompressorPower = 0;
//Hamulec->Init(PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
// Hamulec->Init(PipePress, HighPipePress, LowPipePress, BrakePress, BrakeDelayFlag);
ScndPipePress = Compressor;
// WriteLogSS("OK=", BoolTo10(OK));
//WriteLog("");
// WriteLog("");
return OK;
}

View File

@@ -322,7 +322,7 @@ void TNESt3::EStParams(double i_crc) // parametry charakterystyczne dla ESt
{
}
void TNESt3::Init(double PP, double HPP, double LPP, double BP, unsigned char BDF)
void TNESt3::Init(double PP, double HPP, double LPP, double BP, int BDF)
{
ValveRes->CreatePress(1 * PP);
BrakeCyl->CreatePress(1 * BP);

View File

@@ -184,14 +184,19 @@ class TNESt3 : public TBrake
bool autom; // odluzniacz samoczynny
double LBP; // cisnienie hamulca pomocniczego
void Init(double PP, double HPP, double LPP, double BP, int BDF) /*override*/;
public:
inline TNESt3(double i_mbp, double i_bcr, double i_bcd, double i_brc,
int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn
, i_BD, i_mat, i_ba, i_nbpa) { }
int i_bcn, int i_BD, int i_mat, int i_ba, int i_nbpa,
double PP, double HPP, double LPP, double BP, int BDF) : TBrake(i_mbp, i_bcr, i_bcd, i_brc, i_bcn
, i_BD, i_mat, i_ba, i_nbpa, PP, HPP, LPP, BP, BDF)
{
Init(PP, HPP, LPP, BP, BDF);
}
virtual double GetPF(double PP, double dt,
double Vel) /*override*/; // przeplyw miedzy komora wstepna i PG
void EStParams(double i_crc); // parametry charakterystyczne dla ESt
virtual void Init(double PP, double HPP, double LPP, double BP, unsigned char BDF) /*override*/;
virtual double GetCRP() /*override*/;
void CheckState(double BCP, double &dV1); // glowny przyrzad rozrzadczy
void CheckReleaser(double dt); // odluzniacz

View File

@@ -219,6 +219,8 @@ Knorr/West EP -
bool SetBDF(int nBDF); //nastawiacz GPRM
void Releaser(int state); //odluzniacz
virtual void SetEPS(double nEPS); //hamulec EP
virtual void SetRM(double RMR) {}; //ustalenie przelozenia rapida
virtual void SetLP(double TM, double LM, double TBP) {}; //parametry przystawki wazacej
void ASB(int state); //hamulec przeciwposlizgowy
int GetStatus(); //flaga statusu, moze sie przydac do odglosow
void SetASBP(double Press); //ustalenie cisnienia pp