16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-23 06:19:18 +02:00

prevent AI SpeedCtrlPowerInc deadlock

This commit is contained in:
milek7
2020-11-15 17:48:29 +01:00
parent 54812e8346
commit 9bac45e35b
3 changed files with 25 additions and 15 deletions

View File

@@ -3893,17 +3893,17 @@ void TController::SpeedSet()
void TController::SpeedCntrl(double DesiredSpeed) void TController::SpeedCntrl(double DesiredSpeed)
{ {
if (mvControlling->SpeedCtrlUnit.PowerStep > 0) { if (mvControlling->SpeedCtrlUnit.PowerStep > 0) {
while (mvControlling->SpeedCtrlUnit.DesiredPower < mvControlling->SpeedCtrlUnit.MaxPower) if (!mvControlling->ScndCtrlPos)
{ mvControlling->IncScndCtrl(1);
mvControlling->SpeedCtrlPowerInc(); while (mvControlling->SpeedCtrlUnit.DesiredPower < mvControlling->SpeedCtrlUnit.MaxPower
} && mvControlling->SpeedCtrlPowerInc());
} }
if (mvControlling->EngineType == TEngineType::DieselEngine) if (mvControlling->EngineType == TEngineType::DieselEngine)
{ {
if (DesiredSpeed < 0.1) { if (DesiredSpeed < 0.1) {
mvControlling->DecScndCtrl(2); mvControlling->DecScndCtrl(2);
DesiredSpeed = 0; DesiredSpeed = 0;
} }
else if (mvControlling->ScndCtrlPos < 1) { else if (mvControlling->ScndCtrlPos < 1) {
mvControlling->IncScndCtrl(1); mvControlling->IncScndCtrl(1);
} }

View File

@@ -1824,8 +1824,8 @@ public:
void SpeedCtrlButton(int button); void SpeedCtrlButton(int button);
void SpeedCtrlInc(); void SpeedCtrlInc();
void SpeedCtrlDec(); void SpeedCtrlDec();
void SpeedCtrlPowerInc(); bool SpeedCtrlPowerInc();
void SpeedCtrlPowerDec(); bool SpeedCtrlPowerDec();
/*-funkcje typowe dla lokomotywy spalinowej z przekladnia mechaniczna*/ /*-funkcje typowe dla lokomotywy spalinowej z przekladnia mechaniczna*/
bool dizel_EngageSwitch(double state); bool dizel_EngageSwitch(double state);

View File

@@ -7199,18 +7199,28 @@ void TMoverParameters::SpeedCtrlDec()
} }
} }
void TMoverParameters::SpeedCtrlPowerInc() bool TMoverParameters::SpeedCtrlPowerInc()
{ {
if ((SpeedCtrl) && (ScndCtrlPos > 0)) { if (!(SpeedCtrl && ScndCtrlPos > 0))
SpeedCtrlUnit.DesiredPower = std::min(SpeedCtrlUnit.DesiredPower + SpeedCtrlUnit.PowerStep, SpeedCtrlUnit.MaxPower); return false;
}
if (SpeedCtrlUnit.DesiredPower == SpeedCtrlUnit.MaxPower)
return false;
SpeedCtrlUnit.DesiredPower = std::min(SpeedCtrlUnit.DesiredPower + SpeedCtrlUnit.PowerStep, SpeedCtrlUnit.MaxPower);
return true;
} }
void TMoverParameters::SpeedCtrlPowerDec() bool TMoverParameters::SpeedCtrlPowerDec()
{ {
if ((SpeedCtrl) && (ScndCtrlPos > 0)) { if (!(SpeedCtrl && ScndCtrlPos > 0))
SpeedCtrlUnit.DesiredPower = std::max(SpeedCtrlUnit.DesiredPower - SpeedCtrlUnit.PowerStep, SpeedCtrlUnit.MinPower); return false;
}
if (SpeedCtrlUnit.DesiredPower == SpeedCtrlUnit.MinPower)
return false;
SpeedCtrlUnit.DesiredPower = std::max(SpeedCtrlUnit.DesiredPower - SpeedCtrlUnit.PowerStep, SpeedCtrlUnit.MinPower);
return true;
} }
// ************************************************************************************************* // *************************************************************************************************