diff --git a/McZapkie/Oerlikon_ESt.cpp b/McZapkie/Oerlikon_ESt.cpp index 1df5fe81..a787a09d 100644 --- a/McZapkie/Oerlikon_ESt.cpp +++ b/McZapkie/Oerlikon_ESt.cpp @@ -237,26 +237,24 @@ double TNESt3::GetPF( double const PP, double const dt, double const Vel ) // pr BrakeRes->Flow(dV); for (int i = 1; i < 4; ++i) - { Przekladniki[i]->Update(dt); - if (typeid(*Przekladniki[i]) == typeid(TRapid)) - { - RapidStatus = (BrakeDelayFlag & bdelay_R) == bdelay_R && (std::abs(Vel) > 70.0 || (std::abs(Vel) > 50.0 && RapidStatus) || RapidStaly); - Przekladniki[i]->SetRapidStatus(RapidStatus); - } - else if( typeid( *Przekladniki[i] ) == typeid( TPrzeciwposlizg ) ) - Przekladniki[i]->SetPoslizg((BrakeStatus & b_asb) == b_asb); - else if( typeid( *Przekladniki[ i ] ) == typeid( TPrzekED ) ) { - if( Vel < -15.0 ) - Przekladniki[ i ]->SetP( 0.0 ); - else - Przekladniki[ i ]->SetP( MaxBP * 3.0 ); - } - else if( typeid( *Przekladniki[i] ) == typeid( TPrzekCiagly ) ) - Przekladniki[i]->SetMult(LoadC); - else if( typeid( *Przekladniki[i] ) == typeid( TPrzek_PZZ ) ) - Przekladniki[i]->SetLBP(LBP); + + if( PrzekRapid != nullptr ) { + RapidStatus = (BrakeDelayFlag & bdelay_R) == bdelay_R && (std::abs(Vel) > 70.0 || (std::abs(Vel) > 50.0 && RapidStatus) || RapidStaly); + PrzekRapid->SetRapidStatus(RapidStatus); } + if( PrzekPoslizg != nullptr ) + PrzekPoslizg->SetPoslizg((BrakeStatus & b_asb) == b_asb); + if( PrzekED != nullptr ) { + if( Vel < -15.0 ) + PrzekED->SetP( 0.0 ); + else + PrzekED->SetP( MaxBP * 3.0 ); + } + if( PrzekCiagly != nullptr ) + PrzekCiagly->SetMult(LoadC); + if( PrzekPZZ != nullptr ) + PrzekPZZ->SetLBP(LBP); // przeplyw testowy miedzypojemnosci dV = PF(MPP, VVP, BVs(BCP)) + PF(MPP, CVP, CVs(BCP)); @@ -458,6 +456,12 @@ void TNESt3::SetSize( int const size, std::string const ¶ms ) // ustawianie static double const dOO1l = 0.907; static double const dOT1l = 0.524; + PrzekRapid.reset(); + PrzekPoslizg.reset(); + PrzekED.reset(); + PrzekCiagly.reset(); + PrzekPZZ.reset(); + if (contains( params, "ESt3" ) ) { Podskok = 0.7; @@ -467,23 +471,27 @@ void TNESt3::SetSize( int const size, std::string const ¶ms ) // ustawianie else { Podskok = -1.0; - Przekladniki[1] = std::make_shared(); - if (contains( params, "-s216" ) ) - Przekladniki[1]->SetRapidParams(2, 16); - else - Przekladniki[1]->SetRapidParams(2, 0); - Przekladniki[3] = std::make_shared(); + Przekladniki[1] = PrzekRapid = std::make_shared(); + if (contains( params,"-ED") ) { - Przekladniki[1]->SetRapidParams(2, 18); - Przekladniki[3] = std::make_shared(); + PrzekRapid->SetRapidParams(2, 18); + Przekladniki[3] = PrzekED = std::make_shared(); + } + else + { + if (contains( params, "-s216" ) ) + PrzekRapid->SetRapidParams(2, 16); + else + PrzekRapid->SetRapidParams(2, 0); + Przekladniki[3] = PrzekPoslizg = std::make_shared(); } } if (contains(params,"AL2") ) - Przekladniki[2] = std::make_shared(); + Przekladniki[2] = PrzekCiagly = std::make_shared(); else if (contains(params,"PZZ") ) - Przekladniki[2] = std::make_shared(); + Przekladniki[2] = PrzekPZZ = std::make_shared(); else Przekladniki[2] = std::make_shared(); diff --git a/McZapkie/Oerlikon_ESt.h b/McZapkie/Oerlikon_ESt.h index a6b6f3d0..51d787be 100644 --- a/McZapkie/Oerlikon_ESt.h +++ b/McZapkie/Oerlikon_ESt.h @@ -76,12 +76,6 @@ class TPrzekladnik : public TReservoir // przekladnik (powtarzacz) TPrzekladnik() : TReservoir() {}; virtual void Update(double dt); - virtual void SetPoslizg(bool flag) {}; - virtual void SetP(double P) {}; - virtual void SetMult(double m) {}; - virtual void SetLBP(double P) {}; - virtual void SetRapidParams(double mult, double size) {}; - virtual void SetRapidStatus(bool rs) {}; }; class TRura : public TPrzekladnik // nieprzekladnik, rura laczaca @@ -185,7 +179,13 @@ class TNESt3 : public TBrake { private: std::shared_ptr CntrlRes; // zbiornik sterujacy std::shared_ptr Miedzypoj; // pojemnosc posrednia (urojona) do napelniania ZP i ZS - std::shared_ptr Przekladniki[ 4 ]; + std::shared_ptr Przekladniki[ 4 ]; // indeksowane od 1, indeks jest zarazem pojemnoscia + // bezposrednie wskazniki do przekladnikow dostrajanych w GetPF, inicjowane przy tworzeniu + std::shared_ptr PrzekRapid; + std::shared_ptr PrzekPoslizg; + std::shared_ptr PrzekED; + std::shared_ptr PrzekCiagly; + std::shared_ptr PrzekPZZ; double Nozzles[ dMAX ]; // dysze double BVM = 0.0; // przelozenie PG-CH // ValveFlag: byte; //polozenie roznych zaworkow