diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index ca896909..54ec7408 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -1121,6 +1121,10 @@ public: double dizel_minVelfullengage = 0.0; /*najmniejsza predkosc przy jezdzie ze sprzeglem bez poslizgu*/ double dizel_maxVelANS = 3.0; /*predkosc progowa rozlaczenia przetwornika momentu*/ double dizel_AIM = 1.0; /*moment bezwladnosci walu itp*/ + double dizel_NominalFuelConsumptionRate = 250.0; /*jednostkowe zużycie paliwa przy mocy nominalnej, wczytywane z fiz, g/kWh*/ + double dizel_FuelConsumption = 0.0; /*współczynnik zużycia paliwa przeliczony do jednostek maszynowych, l/obrót*/ + double dizel_FuelConsumptionActual = 0.0; /*chwilowe spalanie paliwa w l/h*/ + double dizel_FuelConsumptedTotal = 0.0; /*ilość paliwa zużyta od początku symulacji, l*/ double dizel_engageDia = 0.5; double dizel_engageMaxForce = 6000.0; double dizel_engagefriction = 0.5; /*parametry sprzegla*/ double engagedownspeed = 0.9; double engageupspeed = 0.5; @@ -1401,7 +1405,8 @@ public: bool dizel_spinup { false }; // engine spin up to idle speed flag double dizel_engagedeltaomega = 0.0; /*roznica predkosci katowych tarcz sprzegla*/ double dizel_n_old = 0.0; /*poredkosc na potrzeby obliczen sprzegiel*/ - double dizel_Torque = 0.0; /*poredkosc na potrzeby obliczen sprzegiel*/ + double dizel_Torque = 0.0; /*aktualny moment obrotowy silnika spalinowego*/ + double dizel_Power = 0.0; /*aktualna moc silnika spalinowego*/ double dizel_nreg_min = 0.0; /*predkosc regulatora minimalna, zmienna w hydro*/ /* - zmienne dla przetowrnika momentu */ diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 59392e77..4640d8b1 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -5054,7 +5054,8 @@ double TMoverParameters::TractionForce( double dt ) { break; } case TEngineType::DieselEngine: { - EnginePower = ( 2 * dizel_Mstand + dmoment ) * enrot * ( 2.0 * M_PI / 1000.0 ); + dizel_Power = Mm * enrot * (2.0 * M_PI / 1000.0); + EnginePower = ( dizel_Mstand + Mm ) * enrot * ( 2.0 * M_PI / 1000.0 ); if( MainCtrlPowerPos() > 1 ) { // dodatkowe opory z powodu sprezarki} // dmoment -= dizel_Mstand * ( 0.2 * enrot / dizel_nmax ); //yB: skąd to w ogóle się bierze?! @@ -5238,8 +5239,7 @@ double TMoverParameters::TractionForce( double dt ) { case TEngineType::DieselEngine: { - Mm = dmoment; //bylo * dizel_engage - Mw = Mm * dtrans; // dmoment i dtrans policzone przy okazji enginerotation + Mw = dmoment * dtrans; // dmoment i dtrans policzone przy okazji enginerotation if ((hydro_R) && (hydro_R_Placement == 0)) Mw -= dizel_MomentumRetarder(nrot * Transmision.Ratio, dt) * Transmision.Ratio; Fw = Mw * 2.0 / WheelDiameter / NPoweredAxles; @@ -7122,6 +7122,9 @@ double TMoverParameters::dizel_Momentum(double dizel_fill, double n, double dt) if( enrot > 0 ) { Moment = ( dizel_Mmax - ( dizel_Mmax - dizel_Mnmax ) * square( ( enrot - dizel_nMmax ) / ( dizel_nMmax - dizel_nmax ) ) ) * dizel_fill - dizel_Mstand; + Mm = Moment; + dizel_FuelConsumptionActual = dizel_FuelConsumption * enrot * dizel_fill; + dizel_FuelConsumptedTotal += dizel_FuelConsumptionActual * dt / 3600.0; if ((hydro_R) && (hydro_R_Placement == 2)) Moment -= dizel_MomentumRetarder(enrot, dt); } @@ -10036,11 +10039,18 @@ void TMoverParameters::LoadFIZ_DList( std::string const &Input ) { extract_value( dizel_nmax, "nmax", Input, "" ); extract_value( dizel_nominalfill, "nominalfill", Input, "" ); extract_value( dizel_Mstand, "Mstand", Input, "" ); + extract_value( dizel_NominalFuelConsumptionRate, "NomFuelConsRate", Input, ""); if( dizel_nMmax == dizel_nmax ) { // HACK: guard against cases where nMmax == nmax, leading to division by 0 in momentum calculation dizel_nMmax = dizel_nmax - 1.0 / 60.0; } + + //Calculation of fuel consumption coefficient for futher calculation + double dizel_max_power = dizel_nmax * (dizel_Mnmax - dizel_Mstand) * M_PI * 2 * 0.001; //power in kW + double dizel_max_energy = dizel_max_power; //energy per one hour in kWh is equal to power in kW times 1 h + double fuel_density = 850; //g/l + dizel_FuelConsumption = dizel_NominalFuelConsumptionRate * dizel_max_energy / fuel_density / dizel_nmax; } void TMoverParameters::LoadFIZ_FFList( std::string const &Input ) { diff --git a/driveruipanels.cpp b/driveruipanels.cpp index 02da6086..7365cbd7 100644 --- a/driveruipanels.cpp +++ b/driveruipanels.cpp @@ -793,11 +793,20 @@ debug_panel::update_section_engine( std::vector &Output ) { // diesel engine data if( mover.EngineType == TEngineType::DieselEngine ) { + double fuel_mean = 0.0; + if (mover.DistCounter > 0.5) { + fuel_mean = 100 * mover.dizel_FuelConsumptedTotal / mover.DistCounter; + } + std::string parameterstext = "param value"; std::vector< std::pair > const paramvalues { { " rpm: ", mover.enrot * 60.0 }, { "efill: ", mover.dizel_fill }, { "etorq: ", mover.dizel_Torque }, + { "power: ", mover.dizel_Power }, + { "f_act: ", mover.dizel_FuelConsumptionActual }, + { "f_tot: ", mover.dizel_FuelConsumptedTotal }, + { "fmean: ", fuel_mean }, { "creal: ", mover.dizel_engage }, { "cdesi: ", mover.dizel_engagestate }, { "cdelt: ", mover.dizel_engagedeltaomega },