diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index bbbfbd8f..cb601888 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -1342,6 +1342,8 @@ public: std::vector Inverters; //all inverters int InverterControlCouplerFlag = 4; //which coupling flag is necessary to controll inverters int Imaxrpc = 0; // Maksymalny prad rezystora hamowania chlodzonego pasywnie + int BRVto = 0; // Czas jaki wentylatory jeszcze dodatkowo schladzaja rezystor + double BRVtimer = 0; // Timer dla podtrzymania wentylatora std::map EIM_Pmax_Table; /*tablica mocy maksymalnej od predkosci*/ /* -dla pojazdów z blendingiem EP/ED (MED) */ double MED_Vmax = 0; // predkosc maksymalna dla obliczen chwilowej sily hamowania EP w MED diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 22a9ec79..886209a9 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -1597,6 +1597,26 @@ void TMoverParameters::compute_movement_( double const Deltatime ) { } } + // Uproszczona symulacja wentylatorow rezystora hamowania + + // Prad oddawany na rezystor + double Irh = abs(eimv[eimv_Pe]) - abs(eimv[eimv_Ipoj]); + + // Wlacz wentylator jesli prad rekuperacji przekroczy maksymalny dla pasywnego chlodzenia rezystora + if (Irh > Imaxrpc && eimv[eimv_Ipoj] < 0) + { + BRVtimer = 0; + BRVentilators = true; + } + else { + BRVtimer += Deltatime; + if (BRVtimer > BRVto) + BRVentilators = false; + } + + + + // automatyczny rozruch if( EngineType == TEngineType::ElectricSeriesMotor ) { if( AutoRelayCheck() ) { @@ -6408,18 +6428,6 @@ double TMoverParameters::TractionForce( double dt ) { 0.007 * (std::abs(EngineVoltage) - (EnginePowerSource.CollectorParameters.MaxV - 100))); Itot = eimv[eimv_Ipoj] * (0.01 + std::min(0.99, 0.99 - Vadd)); - // Uproszczona symulacja rezystora hamowania - if (eimv[eimv_Ipoj] < 0) - { - // Prad oddawany na rezystor - double Irh = abs(eimv[eimv_Pe]) - abs(eimv[eimv_Ipoj]); - - // Wlacz wentylator jesli prad przekroczy maksymalny dla pasywnego chlodzenia - BRVentilators = Irh > Imaxrpc; - } - else - BRVentilators = false; - EnginePower = abs(eimv[eimv_Ic] * eimv[eimv_U] * NPoweredAxles) / 1000; // power inverters @@ -11032,7 +11040,8 @@ void TMoverParameters::LoadFIZ_Engine( std::string const &Input ) { extract_value( EIMCLogForce, "eimclf", Input, "" ); extract_value( InvertersNo, "InvNo", Input, "" ); extract_value( InverterControlCouplerFlag, "InvCtrCplFlag", Input, "" ); - extract_value(Imaxrpc, "Imaxrpc", Input, ""); + extract_value(Imaxrpc, "Imaxrpc", Input, ""); + extract_value(BRVto, "BRVto", Input, ""); extract_value( Flat, "Flat", Input, ""); if (eimc[eimc_p_Pmax] > 0 && Power > 0 && InvertersNo == 0) {