Poprawka asymilacji w K5P i 6P, ograniczenie interwencji automanewrowego w luzowanie pojazdów, zaliczanie pozycji utrzymania ciśnienia jako jazda

This commit is contained in:
Królik Uszasty
2022-01-01 20:50:30 +01:00
parent ecfb5ec39f
commit 5775493b2d
4 changed files with 77 additions and 5 deletions

View File

@@ -2873,6 +2873,8 @@ bool TController::PrepareEngine()
}
// set up train brake
if( mvOccupied->fBrakeCtrlPos != mvOccupied->Handle->GetPos( bh_RP ) ) {
if ( ( !mvOccupied->Handle->Time)
|| ( mvOccupied->Handle->GetCP() < mvOccupied->HighPipePress - 0.05 ) );
cue_action( locale::string::driver_hint_trainbrakerelease );
}
// sync spring brake state across consist
@@ -6023,16 +6025,25 @@ TController::determine_consist_state() {
}
// Ra: odluźnianie przeładowanych lokomotyw, ciągniętych na zimno - prowizorka...
if( bp >= 0.4 ) { // wg UIC określone sztywno na 0.04
if( AIControllFlag || Global.AITrainman ) {
if( AIControllFlag || (Global.AITrainman && mvOccupied->Vel < EU07_AI_NOMOVEMENT && !is_emu() && !is_dmu())) {
if( ( BrakeCtrlPosition == gbh_RP ) // jest pozycja jazdy
&& ( false == TestFlag( vehicle->Hamulec->GetBrakeStatus(), b_dmg ) ) // brake isn't broken
&& ( vehicle->PipePress - 5.0 > -0.1 ) // jeśli ciśnienie jak dla jazdy
&& ( vehicle->PipePress - mvOccupied->Handle->GetRP() > -0.1 ) // jeśli ciśnienie jak dla jazdy
&& ( vehicle->Hamulec->GetCRP() > vehicle->PipePress + 0.12 ) ) { // za dużo w zbiorniku
// indywidualne luzowanko
vehicle->BrakeReleaser( 1 );
}
}
}
if (bp < 0.1) {
if ( AIControllFlag || Global.AITrainman ) {
if (( false == TestFlag( vehicle->Hamulec->GetBrakeStatus(), b_dmg ) ) // brake isn't broken
&& ( vehicle->Hamulec->GetCRP() < vehicle->PipePress - 0.1 ) ) { // już nie jest za dużo w zbiorniku
// koniec indywidualnego luzowanka
vehicle->BrakeReleaser( 0 );
}
}
}
}
fReady = std::max( bp, fReady ); // szukanie najbardziej zahamowanego
if( ( dy = p->VectorFront().y ) != 0.0 ) {

View File

@@ -2287,6 +2287,11 @@ double TDriverHandle::GetEP()
return 0;
}
double TDriverHandle::GetRP()
{
return 0;
}
double TDriverHandle::GetSound(int i)
{
return 0;
@@ -2562,6 +2567,11 @@ double TFV4aM::GetCP()
return TP;
}
double TFV4aM::GetRP()
{
return 5.0 +TP * 0.08 + RedAdj;
}
double TFV4aM::LPP_RP(double pos) // cisnienie z zaokraglonej pozycji;
{
int const i_pos = 2 + std::floor( pos ); // zaokraglone w dol
@@ -2698,6 +2708,11 @@ double TMHZ_EN57::GetCP()
return RP;
}
double TMHZ_EN57::GetRP()
{
return 5.0 + RedAdj;
}
double TMHZ_EN57::GetEP(double pos)
{
if (pos < 9.5)
@@ -2760,7 +2775,7 @@ double TMHZ_K5P::GetPF(double i_bcp, double PP, double HP, double dt, double ep)
}
else
{
TP = 0;
//TP = 0; //tu nie powinno być nic, ciśnienie zostaje jak było
}
if (EQ(i_bcp, 1)) //odcięcie - nie rób nic
@@ -2846,6 +2861,11 @@ double TMHZ_K5P::GetCP()
return CP;
}
double TMHZ_K5P::GetRP()
{
return 5.0 + TP + RedAdj;
}
void TMHZ_K5P::SetParams(bool AO, bool MO, double OverP, double, double OMP, double OPD)
{
AutoOvrld = AO;
@@ -2890,7 +2910,7 @@ double TMHZ_6P::GetPF(double i_bcp, double PP, double HP, double dt, double ep)
}
else
{
TP = 0;
//TP = 0; //tu nie powinno być nic, ciśnienie zostaje jak było
}
if (EQ(i_bcp, 2)) //odcięcie - nie rób nic
@@ -2982,6 +3002,11 @@ double TMHZ_6P::GetCP()
return CP;
}
double TMHZ_6P::GetRP()
{
return 5.0 + TP + RedAdj;
}
void TMHZ_6P::SetParams(bool AO, bool MO, double OverP, double, double OMP, double OPD)
{
AutoOvrld = AO;
@@ -3065,6 +3090,11 @@ double TM394::GetCP()
return CP;
}
double TM394::GetRP()
{
return std::max(5.0, CP) + RedAdj;
}
double TM394::GetPos(int i)
{
return pos_table[i];
@@ -3121,6 +3151,11 @@ double TH14K1::GetCP()
return CP;
}
double TH14K1::GetRP()
{
return 5.0 + RedAdj;
}
double TH14K1::GetPos(int i)
{
return pos_table[i];
@@ -3179,6 +3214,11 @@ double TSt113::GetCP()
return CP;
}
double TSt113::GetRP()
{
return 5.0 + RedAdj;
}
double TSt113::GetEP()
{
return EPS;
@@ -3351,6 +3391,11 @@ double TFVel6::GetCP()
return CP;
}
double TFVel6::GetRP()
{
return 5.0;
}
double TFVel6::GetEP()
{
return EPS;
@@ -3428,6 +3473,11 @@ double TFVE408::GetEP()
return EPS;
}
double TFVE408::GetRP()
{
return 5.0;
}
double TFVE408::GetPos(int i)
{
return pos_table[i];

View File

@@ -542,6 +542,7 @@ class TDriverHandle {
virtual void Init(double Press);
virtual double GetCP();
virtual double GetEP();
virtual double GetRP();
virtual void SetReductor(double nAdj); //korekcja pozycji reduktora cisnienia
virtual double GetSound(int i); //pobranie glosnosci wybranego dzwieku
virtual double GetPos(int i); //pobranie numeru pozycji o zadanym kodzie (funkcji)
@@ -590,6 +591,7 @@ class TFV4aM : public TDriverHandle {
double GetSound(int i)/*override*/;
double GetPos(int i)/*override*/;
double GetCP();
double GetRP();
inline TFV4aM() :
TDriverHandle()
{}
@@ -618,6 +620,7 @@ class TMHZ_EN57 : public TDriverHandle {
double GetSound(int i)/*override*/;
double GetPos(int i)/*override*/;
double GetCP()/*override*/;
double GetRP()/*override*/;
double GetEP(double pos);
void SetParams(bool AO, bool MO, double OverP, double, double OMP, double OPD);
inline TMHZ_EN57(void) :
@@ -647,6 +650,7 @@ public:
double GetSound(int i)/*override*/;
double GetPos(int i)/*override*/;
double GetCP()/*override*/;
double GetRP()/*override*/;
void SetParams(bool AO, bool MO, double, double, double OMP, double OPD); /*ovveride*/
inline TMHZ_K5P(void) :
@@ -676,6 +680,7 @@ public:
double GetSound(int i)/*override*/;
double GetPos(int i)/*override*/;
double GetCP()/*override*/;
double GetRP()/*override*/;
void SetParams(bool AO, bool MO, double, double, double OMP, double OPD); /*ovveride*/
inline TMHZ_6P(void) :
@@ -725,6 +730,7 @@ class TM394 : public TDriverHandle {
void Init(double Press)/*override*/;
void SetReductor(double nAdj)/*override*/;
double GetCP()/*override*/;
double GetRP()/*override*/;
double GetPos(int i)/*override*/;
inline TM394(void) :
@@ -748,6 +754,7 @@ class TH14K1 : public TDriverHandle {
void Init(double Press)/*override*/;
void SetReductor(double nAdj)/*override*/;
double GetCP()/*override*/;
double GetRP()/*override*/;
double GetPos(int i)/*override*/;
inline TH14K1(void) :
@@ -767,6 +774,7 @@ class TSt113 : public TH14K1 {
public:
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
double GetCP()/*override*/;
double GetRP()/*override*/;
double GetEP()/*override*/;
double GetPos(int i)/*override*/;
void Init(double Press)/*override*/;
@@ -837,6 +845,7 @@ class TFVel6 : public TDriverHandle {
public:
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
double GetCP()/*override*/;
double GetRP()/*override*/;
double GetEP()/*override*/;
double GetPos(int i)/*override*/;
double GetSound(int i)/*override*/;
@@ -858,6 +867,7 @@ public:
double GetPF(double i_bcp, double PP, double HP, double dt, double ep)/*override*/;
double GetCP()/*override*/;
double GetEP()/*override*/;
double GetRP()/*override*/;
double GetPos(int i)/*override*/;
double GetSound(int i)/*override*/;
void Init(double Press)/*override*/;

View File

@@ -776,7 +776,8 @@ TController::cue_action( locale::string const Action, float const Actionparamete
hint(
Action,
[this](float const Parameter) -> bool {
return ( is_equal( mvOccupied->fBrakeCtrlPos, mvOccupied->Handle->GetPos( bh_RP ), 0.2 ) ); } );
return ( is_equal( mvOccupied->fBrakeCtrlPos, mvOccupied->Handle->GetPos( bh_RP ), 0.2 )
|| ( mvOccupied->Handle->Time && ( mvOccupied->Handle->GetCP() > mvOccupied->HighPipePress - 0.05) ) ); } );
// return ( BrakeCtrlPosition == gbh_RP ); } );
break;
}