diff --git a/DynObj.cpp b/DynObj.cpp index f6fa4469..1ef1538e 100644 --- a/DynObj.cpp +++ b/DynObj.cpp @@ -2783,6 +2783,7 @@ bool TDynamicObject::Update(double dt, double dt1) MoverParameters->eimic_real = eimic; MoverParameters->SendCtrlToNext("EIMIC", Max0R(0, eimic), MoverParameters->CabNo); auto LBR = Max0R(-eimic, 0); + auto eim_lb = (Mechanik->AIControllFlag || !MoverParameters->LocHandleTimeTraxx ? 0 : MoverParameters->eim_localbrake); // 1. ustal wymagana sile hamowania calego pociagu // - opoznienie moze byc ustalane na podstawie charakterystyki @@ -3013,6 +3014,11 @@ bool TDynamicObject::Update(double dt, double dt1) p->MoverParameters->LocalBrakePosAEIM = p->MoverParameters->LocalBrakePosAEIM; else p->MoverParameters->LocalBrakePosAEIM = 0; + if (p->MoverParameters->LocHandleTimeTraxx) + { + p->MoverParameters->eim_localbrake = eim_lb; + p->MoverParameters->LocalBrakePosAEIM = std::max(p->MoverParameters->LocalBrakePosAEIM, eim_lb); + } ++i; } diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index 7352c41c..6902be65 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -891,6 +891,7 @@ public: TBrakeValve BrakeValve = TBrakeValve::NoValve; TBrakeHandle BrakeHandle = TBrakeHandle::NoHandle; TBrakeHandle BrakeLocHandle = TBrakeHandle::NoHandle; + bool LocHandleTimeTraxx = false; /*hamulec dodatkowy typu traxx*/ double MBPM = 1.0; /*masa najwiekszego cisnienia*/ std::shared_ptr Hamulec; @@ -1306,6 +1307,7 @@ public: /*- zmienne dla lokomotyw z silnikami indukcyjnymi -*/ double eimic = 0; /*aktualna pozycja zintegrowanego sterowania jazda i hamowaniem*/ double eimic_real = 0; /*faktycznie uzywana pozycja zintegrowanego sterowania jazda i hamowaniem*/ + double eim_localbrake = 0; /*nastawa hamowania dodatkowego pneumatycznego lokomotywy*/ int EIMCtrlType = 0; /*rodzaj wariantu zadajnika jazdy*/ bool SpeedCtrlTypeTime = false; /*czy tempomat sterowany czasowo*/ double eimv_pr = 0; /*realizowany procent dostepnej sily rozruchu/hamowania*/ diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 0696c047..82d0e472 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -6032,6 +6032,26 @@ void TMoverParameters::CheckEIMIC(double dt) } if (MainCtrlPos >= 3 && eimic < 0) eimic = 0; if (MainCtrlPos <= 3 && eimic > 0) eimic = 0; + if (LocHandleTimeTraxx) + { + if (LocalBrakeRatio() < 0.05) //pozycja 0 + { + eim_localbrake -= dt*0.17; //zmniejszanie + } + + if (LocalBrakeRatio() > 0.15) //pozycja 2 + { + eim_localbrake += dt*0.17; //wzrastanie + eim_localbrake = std::max(eim_localbrake, BrakePress / MaxBrakePress[0]); + } + else + { + if (eim_localbrake < Hamulec->GetEDBCP() / MaxBrakePress[0]) + eim_localbrake = 0; + } + eim_localbrake = clamp(eim_localbrake, 0.0, 1.0); + if (eim_localbrake > 0.04 && eimic > 0) eimic = 0; + } break; case 2: switch (MainCtrlPos) @@ -8647,6 +8667,7 @@ void TMoverParameters::LoadFIZ_Cntrl( std::string const &line ) { extract_value( CoupledCtrl, "CoupledCtrl", line, "" ); extract_value( EIMCtrlType, "EIMCtrlType", line, "" ); clamp( EIMCtrlType, 0, 3 ); + LocHandleTimeTraxx = (extract_value("LocalBrakeTraxx", line) == "Yes"); extract_value( ScndS, "ScndS", line, "" ); // brak pozycji rownoleglej przy niskiej nastawie PSR