diff --git a/Driver.cpp b/Driver.cpp index ca721562..edc3d75e 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -3646,10 +3646,13 @@ void TController::CheckTimeControllers() NeutralPos = i; break; } - if ((DizelActualPercentage >= DizelPercentage_Speed) && (mvControlling->MainCtrlPos > NeutralPos)) - while (mvControlling->MainCtrlPos > NeutralPos) mvControlling->DecMainCtrl(1); - if ((DizelActualPercentage <= DizelPercentage_Speed) && (mvControlling->MainCtrlPos < NeutralPos)) - while (mvControlling->MainCtrlPos < NeutralPos) mvControlling->IncMainCtrl(1); + if (BrakeCtrlPosition < 0.1) //jesli nie hamuje + { + if ((DizelActualPercentage >= DizelPercentage_Speed) && (mvControlling->MainCtrlPos > NeutralPos)) + while (mvControlling->MainCtrlPos > NeutralPos) mvControlling->DecMainCtrl(1); + if ((DizelActualPercentage <= DizelPercentage_Speed) && (mvControlling->MainCtrlPos < NeutralPos)) + while (mvControlling->MainCtrlPos < NeutralPos) mvControlling->IncMainCtrl(1); + } } }; diff --git a/McZapkie/Mover.cpp b/McZapkie/Mover.cpp index 44ea1490..37d2f789 100644 --- a/McZapkie/Mover.cpp +++ b/McZapkie/Mover.cpp @@ -6128,6 +6128,19 @@ void TMoverParameters::CheckEIMIC(double dt) } break; case 3: + + if ((UniCtrlList[MainCtrlPos].mode != BrakeCtrlPos) && (MainCtrlActualPos == MainCtrlPos)) //nie było ruszane nastawnikiem tylko hamulcem + { + if (BrakeCtrlPos < UniCtrlList[MainCtrlPosNo].mode) + BrakeLevelSet(UniCtrlList[MainCtrlPosNo].mode); //przytnij z dołu + if (BrakeCtrlPos > UniCtrlList[0].mode) + BrakeLevelSet(UniCtrlList[0].mode); //przytnij z góry + while (BrakeCtrlPos > UniCtrlList[MainCtrlPos].mode) DecMainCtrl(1); //znajdź najbliższą pozycję + while (BrakeCtrlPos < UniCtrlList[MainCtrlPos].mode) IncMainCtrl(1); //znajdź najbliższą pozycję + } + else //było ruszane nastawnikiem + BrakeLevelSet(UniCtrlList[MainCtrlPos].mode); + if ((MainCtrlActualPos != MainCtrlPos) || (LastRelayTime>InitialCtrlDelay)) { eimic -= clamp(-UniCtrlList[MainCtrlPos].SetCtrlVal + eimic, 0.0, (MainCtrlActualPos == MainCtrlPos ? dt * UniCtrlList[MainCtrlPos].SpeedDown : sign(UniCtrlList[MainCtrlPos].SpeedDown) * 0.01)); //odejmuj do X @@ -6141,7 +6154,7 @@ void TMoverParameters::CheckEIMIC(double dt) LastRelayTime = 0; MainCtrlActualPos = MainCtrlPos; } - //BrakeLevelSet(UniCtrlList[MainCtrlPos].mode); + } auto const eimicpowerenabled { ( ( true == Mains ) || ( Power == 0.0 ) )