From bb229bbac910ddd273ed66db0b7175983cc312f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=B3lik=20Uszasty?= Date: Fri, 6 Sep 2019 18:02:00 +0200 Subject: [PATCH] Disintegration of brakes from UniCtrl --- McZapkie/MOVER.h | 2 ++ McZapkie/Mover.cpp | 27 ++++++++++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/McZapkie/MOVER.h b/McZapkie/MOVER.h index 65df7e6f..382948dc 100644 --- a/McZapkie/MOVER.h +++ b/McZapkie/MOVER.h @@ -979,6 +979,8 @@ public: TSecuritySystem SecuritySystem; TUniversalCtrlTable UniCtrlList; /*lista pozycji uniwersalnego nastawnika*/ int UniCtrlListSize = 0; /*wielkosc listy pozycji uniwersalnego nastawnika*/ + bool UniCtrlIntegratedBrakePNCtrl = false; /*zintegrowany nastawnik JH obsluguje hamulec PN*/ + bool UniCtrlIntegratedBrakeCtrl = false; /*zintegrowany nastawnik JH obsluguje hamowanie*/ /*-sekcja parametrow dla lokomotywy elektrycznej*/ TSchemeTable RList; /*lista rezystorow rozruchowych i polaczen silnikow, dla dizla: napelnienia*/ diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index db55491f..2e2bf60e 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -6336,17 +6336,20 @@ void TMoverParameters::CheckEIMIC(double dt) } break; case 3: - if ((UniCtrlList[MainCtrlPos].mode != BrakeCtrlPos) && (MainCtrlActualPos == MainCtrlPos)) //there was no move of controller, but brake only + if (UniCtrlIntegratedBrakePNCtrl) { - if (BrakeCtrlPos < UniCtrlList[MainCtrlPosNo].mode) - BrakeLevelSet(UniCtrlList[MainCtrlPosNo].mode); //bottom clamping - if (BrakeCtrlPos > UniCtrlList[0].mode) - BrakeLevelSet(UniCtrlList[0].mode); //top clamping - while (BrakeCtrlPos > UniCtrlList[MainCtrlPos].mode) DecMainCtrl(1); //find nearest position - while (BrakeCtrlPos < UniCtrlList[MainCtrlPos].mode) IncMainCtrl(1); //find nearest position + if ((UniCtrlList[MainCtrlPos].mode != BrakeCtrlPos) && (MainCtrlActualPos == MainCtrlPos)) //there was no move of controller, but brake only + { + if (BrakeCtrlPos < UniCtrlList[MainCtrlPosNo].mode) + BrakeLevelSet(UniCtrlList[MainCtrlPosNo].mode); //bottom clamping + if (BrakeCtrlPos > UniCtrlList[0].mode) + BrakeLevelSet(UniCtrlList[0].mode); //top clamping + while (BrakeCtrlPos > UniCtrlList[MainCtrlPos].mode) DecMainCtrl(1); //find nearest position + while (BrakeCtrlPos < UniCtrlList[MainCtrlPos].mode) IncMainCtrl(1); //find nearest position + } + else //controller was moved + BrakeLevelSet(UniCtrlList[MainCtrlPos].mode); } - else //controller was moved - BrakeLevelSet(UniCtrlList[MainCtrlPos].mode); if ((MainCtrlActualPos != MainCtrlPos) || (LastRelayTime>InitialCtrlDelay)) { @@ -6363,6 +6366,10 @@ void TMoverParameters::CheckEIMIC(double dt) } if (Hamulec->GetEDBCP() > 0.3 && eimic < 0) //when braking with pneumatic brake eimic = 0; //shut off retarder + if (UniCtrlIntegratedBrakeCtrl == false) + { + eimic = (LocalBrakeRatio() > 0.01 ? -LocalBrakeRatio() : eimic); + } } auto const eimicpowerenabled { @@ -9533,6 +9540,8 @@ void TMoverParameters::LoadFIZ_RList( std::string const &Input ) { void TMoverParameters::LoadFIZ_UCList(std::string const &Input) { extract_value(UniCtrlListSize, "Size", Input, ""); + UniCtrlIntegratedBrakeCtrl = (extract_value("IntegratedBrake", Input) == "Yes"); + UniCtrlIntegratedBrakePNCtrl = (extract_value("IntegratedBrakePN", Input) == "Yes"); }