From edb98f41e792aff6af6f9f890c93c7644c1d739a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kr=C3=B3lik=20Uszasty?= Date: Sat, 23 Mar 2019 22:18:17 +0100 Subject: [PATCH] AI uses SpeedCtrl in TRAXX properly --- Driver.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/Driver.cpp b/Driver.cpp index cb4397bb..d96a7a45 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -3372,7 +3372,7 @@ void TController::SpeedCntrl(double DesiredSpeed) mvControlling->IncScndCtrl(1); mvControlling->RunCommand("SpeedCntrl", DesiredSpeed, mvControlling->CabNo); } - else if (mvControlling->ScndCtrlPosNo > 1) + else if ((mvControlling->ScndCtrlPosNo > 1) && (!mvOccupied->SpeedCtrlTypeTime)) { int DesiredPos = 1 + mvControlling->ScndCtrlPosNo * ((DesiredSpeed - 1.0) / mvControlling->Vmax); while( ( mvControlling->ScndCtrlPos > DesiredPos ) && ( true == mvControlling->DecScndCtrl( 1 ) ) ) { ; } // all work is done in the condition loop @@ -3414,6 +3414,22 @@ void TController::SetTimeControllers() if (mvOccupied->LocalBrakePosA > 0.95) mvOccupied->MainCtrlPos = 1; } } + //4. Check Speed Control System + if (mvOccupied->EngineType == TEngineType::ElectricInductionMotor && mvOccupied->ScndCtrlPosNo > 1 && mvOccupied->SpeedCtrlTypeTime) + { + double SpeedCntrlVel = + (ActualProximityDist > std::max(50.0, fMaxProximityDist)) ? + VelDesired : + min_speed(VelDesired, VelNext); + SpeedCntrlVel = 10 * std::floor(SpeedCntrlVel*0.1); + if (mvOccupied->ScndCtrlPosNo == 4) + { + if (mvOccupied->NewSpeed + 0.1 < SpeedCntrlVel) + mvOccupied->ScndCtrlPos = 3; + if (mvOccupied->NewSpeed - 0.1 > SpeedCntrlVel) + mvOccupied->ScndCtrlPos = 1; + } + } }; void TController::CheckTimeControllers() @@ -3446,6 +3462,14 @@ void TController::CheckTimeControllers() if (mvOccupied->eimic < 0) mvOccupied->MainCtrlPos = 2; } } + //4. Check Speed Control System + if (mvOccupied->EngineType == TEngineType::ElectricInductionMotor && mvOccupied->ScndCtrlPosNo>1 && mvOccupied->SpeedCtrlTypeTime) + { + if (mvOccupied->ScndCtrlPosNo == 4) + { + mvOccupied->ScndCtrlPos = 2; + } + } }; // otwieranie/zamykanie drzwi w składzie albo (tylko AI) EZT